From e929e62e17f81e5975a3496d30dab9d337525598 Mon Sep 17 00:00:00 2001
From: Fabien Spindler <Fabien.Spindler@inria.fr>
Date: Sun, 1 Jun 2014 18:04:10 +0200
Subject: [PATCH] Imported upstream version 2.9.0

---
 CMakeHeaderFileList.cmake                     |   58 +-
 CMakeLists.txt                                |  578 ++-
 CMakeModules/AddExtraCompilationFlags.cmake   |   10 +-
 CMakeModules/CPackConfig.cmake                |    4 +-
 CMakeModules/CPackConfigDeb.cmake             |    4 +-
 CMakeModules/CPackConfigNsis.cmake            |    4 +-
 CMakeModules/CPackConfigRpm.cmake             |    4 +-
 CMakeModules/FindARIA.cmake                   |    4 +-
 CMakeModules/FindBICLOPS.cmake                |    4 +-
 CMakeModules/FindCALINUX.cmake                |    4 +-
 CMakeModules/FindCMU1394.cmake                |   52 +-
 CMakeModules/FindCPP11.cmake                  |    4 +-
 CMakeModules/FindCycabTk.cmake                |  146 -
 CMakeModules/FindDC1394.cmake                 |   73 +-
 CMakeModules/FindDIRECT3D.cmake               |    4 +-
 CMakeModules/FindDIRECTSHOW.cmake             |    4 +-
 CMakeModules/FindDL.cmake                     |    4 +-
 CMakeModules/FindFFMPEG.cmake                 |    4 +-
 CMakeModules/FindGDI.cmake                    |    5 +-
 CMakeModules/FindGSL.cmake                    |    4 +-
 CMakeModules/FindICONV.cmake                  |    4 +-
 CMakeModules/FindIRISA.cmake                  |    4 +-
 CMakeModules/FindLAPACK_C.cmake               |    4 +-
 CMakeModules/FindLIBFREENECT.cmake            |    4 +-
 CMakeModules/FindLIBUSB-1.cmake               |   16 +-
 CMakeModules/FindMyCoin3D.cmake               |    4 +-
 CMakeModules/FindMyGTK2.cmake                 |   30 +-
 CMakeModules/FindMyJPEG.cmake                 |    4 +-
 CMakeModules/FindMyPNG.cmake                  |    4 +-
 CMakeModules/FindMyZLIB.cmake                 |    4 +-
 CMakeModules/FindNAS.cmake                    |    4 +-
 CMakeModules/FindPARPORT.cmake                |    4 +-
 CMakeModules/FindPTHREAD.cmake                |    4 +-
 CMakeModules/FindPTU46.cmake                  |    4 +-
 CMakeModules/FindRAW1394.cmake                |    4 +-
 CMakeModules/FindRT.cmake                     |    4 +-
 CMakeModules/FindSOQT.cmake                   |    4 +-
 CMakeModules/FindSOWIN.cmake                  |    4 +-
 CMakeModules/FindSOXT.cmake                   |    4 +-
 CMakeModules/FindV4L2.cmake                   |    4 +-
 CMakeModules/FindXML2.cmake                   |    4 +-
 CMakeModules/GenerateConfigScript.cmake       |   57 +-
 CMakeModules/OgreTools.cmake                  |   66 +-
 CMakeModules/TargetDistclean.cmake            |    4 +-
 CMakeModules/VISPCRTLinkage.cmake             |   44 +
 CMakeModules/VISPConfig.cmake.in              |  102 +-
 CMakeModules/VISPUse.cmake.in                 |    9 +-
 CMakeModules/checkForItifg8Version.cpp        |   60 -
 CMakeModules/cmake_uninstall.cmake.in         |    4 +-
 CMakeModules/resources.cfg.in                 |    4 +-
 CMakeModules/visp-config.bat.in               |    8 +-
 CMakeModules/visp-config.in                   |    8 +-
 CMakeModules/visp-config.install.in           |   24 +-
 CMakeModules/visp.pc.in                       |    2 +-
 CMakeSourceFileList.cmake                     |   38 +-
 CTestConfig.cmake                             |    8 +-
 ChangeLog                                     |   51 +-
 INSTALL.txt                                   |    2 +-
 README.txt                                    |    2 +-
 ViSP-third-party.txt.cmake                    |    4 +-
 .../media/materials/scripts/Examples.material |   33 +
 .../media/materials/textures/grass_1024.jpg   |  Bin 0 -> 202003 bytes
 .../media/materials/textures/r2skin.jpg       |  Bin 0 -> 44863 bytes
 data/ogre-simulator/media/models/robot.mesh   |  Bin 0 -> 42612 bytes
 .../media/models/robot.skeleton               |  Bin 0 -> 18984 bytes
 demo/CMakeLists.txt                           |    4 +-
 demo/wireframe-simulator/CMakeLists.txt       |    4 +-
 demo/wireframe-simulator/servoSimu4Points.cpp |  476 +-
 .../wireframe-simulator/servoSimuCylinder.cpp |  414 +-
 demo/wireframe-simulator/servoSimuSphere.cpp  |  344 +-
 distclean.sh                                  |    2 +-
 doc/biblio/references.bib                     |  119 +-
 doc/config-doxygen.in                         |    5 +-
 doc/image/img-chessboard-01.png               |  Bin 22994 -> 33459 bytes
 doc/image/img-circles-grid-02.png             |  Bin 23952 -> 32432 bytes
 doc/image/img-cmake-debug-trace.jpg           |  Bin 0 -> 86382 bytes
 doc/image/img-ibvs-control-law-adaptive.png   |  Bin 0 -> 35616 bytes
 ...g-ibvs-control-law-continuous-adaptive.png |  Bin 0 -> 37074 bytes
 .../img-ibvs-control-law-exponential.png      |  Bin 0 -> 35316 bytes
 doc/image/img-lena-blured-default.png         |  Bin 0 -> 24562 bytes
 doc/image/img-lena-blured-var2.png            |  Bin 0 -> 21714 bytes
 doc/image/img-lena-canny.png                  |  Bin 0 -> 7297 bytes
 doc/image/img-lena-dIxy.png                   |  Bin 0 -> 53066 bytes
 doc/image/img-lena-gray.png                   |  Bin 0 -> 39372 bytes
 doc/image/img-lena-pyr.png                    |  Bin 0 -> 38446 bytes
 doc/image/img-lena-sobel.png                  |  Bin 0 -> 25691 bytes
 doc/image/img-template-tracker.jpg            |  Bin 0 -> 10207 bytes
 doc/image/initClickTemplateTracker.png        |  Bin 0 -> 6039 bytes
 doc/mainpage.doc.in                           |   88 +-
 doc/tutorial-boost-vs.doc                     |   98 +
 doc/tutorial-calibration.doc                  |  117 +-
 doc/tutorial-getting-started.doc              |   75 +-
 doc/tutorial-homography.doc                   |  250 +
 doc/tutorial-ibvs.doc                         |   11 +-
 doc/tutorial-image-filtering.doc              |  152 +
 doc/tutorial-install-fedora.doc               |  227 +
 doc/tutorial-install-iOS.doc                  |   13 +-
 doc/tutorial-install-ubuntu.doc               |   29 +-
 doc/tutorial-install-win.doc                  |   15 +-
 doc/tutorial-matching.doc                     |   94 +
 doc/tutorial-simu-robot-pioneer.doc           |    1 +
 doc/tutorial-trace.doc                        |  116 +
 doc/tutorial-tracking-mb.doc                  |  123 +-
 doc/tutorial-tracking-me.doc                  |    2 +-
 doc/tutorial-tracking-tt.doc                  |  223 +
 example/CMakeLists.txt                        |    7 +-
 example/calibration/CMakeLists.txt            |   26 +-
 example/calibration/calibrateTsai.cpp         |  145 +-
 example/calibration/camera_calibration.cpp    |  313 +-
 example/calibration/chessboard-01.png         |  Bin 0 -> 33459 bytes
 example/calibration/chessboard-02.png         |  Bin 0 -> 34739 bytes
 example/calibration/chessboard-03.png         |  Bin 0 -> 34043 bytes
 example/calibration/chessboard-04.png         |  Bin 0 -> 41700 bytes
 example/calibration/chessboard-05.png         |  Bin 0 -> 38847 bytes
 example/calibration/circles-01.png            |  Bin 0 -> 33023 bytes
 example/calibration/circles-02.png            |  Bin 0 -> 32432 bytes
 example/calibration/circles-03.png            |  Bin 0 -> 36957 bytes
 example/calibration/circles-04.png            |  Bin 0 -> 34362 bytes
 example/calibration/circles-05.png            |  Bin 0 -> 38327 bytes
 example/calibration/default-chessboard.cfg    |    3 +
 example/calibration/default-circles.cfg       |    5 +-
 example/coin-simulator/CMakeLists.txt         |    4 +-
 .../simulateCircle2DCamVelocity.cpp           |  133 +-
 ...mulateFourPoints2DCartesianCamVelocity.cpp |  131 +-
 .../simulateFourPoints2DPolarCamVelocity.cpp  |  131 +-
 example/device/CMakeLists.txt                 |    4 +-
 example/device/display/CMakeLists.txt         |    4 +-
 example/device/display/displayD3D.cpp         |  442 +-
 example/device/display/displayGDI.cpp         |  443 +-
 example/device/display/displayGTK.cpp         |  439 +-
 example/device/display/displayOpenCV.cpp      |  464 +-
 example/device/display/displaySequence.cpp    |  299 +-
 example/device/display/displayX.cpp           |  463 +-
 example/device/display/displayXMulti.cpp      |  422 +-
 example/device/framegrabber/CMakeLists.txt    |    4 +-
 example/device/framegrabber/grab1394CMU.cpp   |   27 +-
 example/device/framegrabber/grab1394Two.cpp   |   77 +-
 .../device/framegrabber/grabDirectShow.cpp    |   82 +-
 .../framegrabber/grabDirectShowMulti.cpp      |   16 +-
 example/device/framegrabber/grabDisk.cpp      |  234 +-
 example/device/framegrabber/grabOpenCV-2.cpp  |   72 +-
 example/device/framegrabber/grabOpenCV.cpp    |  140 +-
 example/device/framegrabber/grabV4l2.cpp      |  104 +-
 example/device/kinect/CMakeLists.txt          |    4 +-
 example/device/kinect/kinectAcquisition.cpp   |  104 +-
 example/device/laserscanner/CMakeLists.txt    |    4 +-
 example/device/laserscanner/SickLDMRS-Acq.cpp |   44 +-
 .../device/laserscanner/SickLDMRS-Process.cpp |  111 +-
 example/device/light/CMakeLists.txt           |    4 +-
 example/device/light/ringLight.cpp            |   20 +-
 example/direct-visual-servoing/CMakeLists.txt |    4 +-
 .../photometricVisualServoing.cpp             |  524 +-
 example/homography/CMakeLists.txt             |    4 +-
 example/homography/homographyHLM2DObject.cpp  |  236 +-
 example/homography/homographyHLM3DObject.cpp  |  212 +-
 .../homographyHartleyDLT2DObject.cpp          |  192 +-
 .../homography/homographyRansac2DObject.cpp   |  180 +-
 example/image/CMakeLists.txt                  |    4 +-
 example/image/imageDiskRW.cpp                 |  306 +-
 example/key-point/CMakeLists.txt              |    4 +-
 example/key-point/fernClassifier.cpp          |  507 +-
 example/key-point/keyPointSurf.cpp            |  370 +-
 example/key-point/planarObjectDetector.cpp    |  484 +-
 example/manual/CMakeLists.txt                 |    5 +-
 .../manGeometricFeatures.cpp                  |  135 +-
 .../manual/hello-world/Autotools/have_visp.m4 |    4 +-
 .../manual/hello-world/CMake/HelloWorld.cpp   |   29 +-
 .../manual/image-manipulation/manDisplay.cpp  |  178 +-
 .../image-manipulation/manGrab1394-2.cpp      |   49 +-
 .../image-manipulation/manGrabDirectShow.cpp  |   45 +-
 .../manual/image-manipulation/manGrabDisk.cpp |   65 +-
 .../image-manipulation/manGrabOpenCV.cpp      |    4 +-
 .../manual/image-manipulation/manGrabV4l2.cpp |   31 +-
 .../manual/moments/manServoMomentsSimple.cpp  |  198 +-
 example/manual/ogre/HelloWorldOgre.cpp        |  153 +-
 .../manual/ogre/HelloWorldOgreAdvanced.cpp    |  112 +-
 .../simulation/manServo4PointsDisplay.cpp     |  242 +-
 example/manual/simulation/manSimu4Dots.cpp    |   55 +-
 example/manual/simulation/manSimu4Points.cpp  |   53 +-
 example/math/BSpline.cpp                      |  251 +-
 example/math/CMakeLists.txt                   |    4 +-
 example/math/Nurbs.cpp                        |  406 +-
 example/math/exponentialMap.cpp               |  141 +-
 example/moments/image/CMakeLists.txt          |    4 +-
 example/moments/image/servoMomentImage.cpp    |   73 +-
 example/moments/points/CMakeLists.txt         |    4 +-
 example/moments/points/servoMomentPoints.cpp  |   86 +-
 example/moments/polygon/CMakeLists.txt        |    4 +-
 .../moments/polygon/servoMomentPolygon.cpp    |   73 +-
 example/ogre-simulator/AROgre.cpp             |  356 +-
 example/ogre-simulator/AROgreBasic.cpp        |  373 +-
 example/ogre-simulator/CMakeLists.txt         |    4 +-
 example/parse-argv/CMakeLists.txt             |    4 +-
 example/parse-argv/parse-argv1.cpp            |   67 +-
 example/parse-argv/parse-argv2.cpp            |   70 +-
 example/pose-estimation/CMakeLists.txt        |    4 +-
 example/pose-estimation/poseVirtualVS.cpp     |  541 +-
 example/robot-simulator/afma6/CMakeLists.txt  |    2 +-
 .../servoSimuAfma6FourPoints2DCamVelocity.cpp |  327 +-
 example/robot-simulator/camera/CMakeLists.txt |    2 +-
 .../camera/servoSimu3D_cMcd_CamVelocity.cpp   |  282 +-
 ...oSimu3D_cMcd_CamVelocityWithoutVpServo.cpp |  262 +-
 .../camera/servoSimu3D_cdMc_CamVelocity.cpp   |  282 +-
 ...oSimu3D_cdMc_CamVelocityWithoutVpServo.cpp |  260 +-
 .../camera/servoSimuCircle2DCamVelocity.cpp   |  176 +-
 .../servoSimuCircle2DCamVelocityDisplay.cpp   |  241 +-
 .../servoSimuCylinder2DCamVelocityDisplay.cpp |  284 +-
 ...inder2DCamVelocityDisplaySecondaryTask.cpp |  495 +-
 .../servoSimuFourPoints2DCamVelocity.cpp      |  234 +-
 ...ervoSimuFourPoints2DCamVelocityDisplay.cpp |  319 +-
 ...imuFourPoints2DPolarCamVelocityDisplay.cpp |  545 +-
 .../servoSimuLine2DCamVelocityDisplay.cpp     |  282 +-
 .../camera/servoSimuPoint2DCamVelocity1.cpp   |  140 +-
 .../camera/servoSimuPoint2DCamVelocity2.cpp   |  200 +-
 .../camera/servoSimuPoint2DCamVelocity3.cpp   |  196 +-
 .../servoSimuPoint2DhalfCamVelocity1.cpp      |  236 +-
 .../servoSimuPoint2DhalfCamVelocity2.cpp      |  434 +-
 .../servoSimuPoint2DhalfCamVelocity3.cpp      |  386 +-
 .../camera/servoSimuPoint3DCamVelocity.cpp    |  178 +-
 .../camera/servoSimuSphere2DCamVelocity.cpp   |  183 +-
 ...voSimuSphere2DCamVelocitySecondaryTask.cpp |  208 +-
 ...ervoSimuSquareLine2DCamVelocityDisplay.cpp |  270 +-
 .../camera/servoSimuThetaUCamVelocity.cpp     |  148 +-
 .../robot-simulator/viper850/CMakeLists.txt   |    2 +-
 ...rvoSimuViper850FourPoints2DCamVelocity.cpp |  329 +-
 example/servo-afma4/CMakeLists.txt            |    4 +-
 example/servo-afma4/moveAfma4.cpp             |   11 +-
 .../servoAfma4Point2DArtVelocity.cpp          |   80 +-
 .../servoAfma4Point2DCamVelocity.cpp          |   83 +-
 .../servoAfma4Point2DCamVelocityKalman.cpp    |  146 +-
 example/servo-afma6/CMakeLists.txt            |    4 +-
 .../servoAfma62DhalfCamVelocity.cpp           |    4 +-
 .../servoAfma6Cylinder2DCamVelocity.cpp       |    4 +-
 ...fma6Cylinder2DCamVelocitySecondaryTask.cpp |    4 +-
 .../servoAfma6Ellipse2DCamVelocity.cpp        |    4 +-
 .../servoAfma6FourPoints2DArtVelocity.cpp     |    4 +-
 ...rPoints2DCamVelocityInteractionCurrent.cpp |    4 +-
 ...rPoints2DCamVelocityInteractionDesired.cpp |    4 +-
 .../servoAfma6Line2DCamVelocity.cpp           |    4 +-
 .../servoAfma6Point2DArtVelocity.cpp          |    4 +-
 .../servoAfma6Point2DCamVelocity.cpp          |    4 +-
 ...servoAfma6Points2DCamVelocityEyeToHand.cpp |    4 +-
 .../servoAfma6Segment2DCamVelocity.cpp        |    2 +-
 .../servoAfma6SquareLines2DCamVelocity.cpp    |    4 +-
 .../servoAfma6TwoLines2DCamVelocity.cpp       |    4 +-
 example/servo-biclops/CMakeLists.txt          |    4 +-
 example/servo-biclops/moveBiclops.cpp         |    4 +-
 .../servoBiclopsPoint2DArtVelocity.cpp        |   16 +-
 example/servo-cycab/CMakeLists.txt            |   60 -
 example/servo-cycab/servoCycab.cpp            |  172 -
 example/servo-cycab/servoCycabBasic.cpp       |   99 -
 example/servo-pioneer/CMakeLists.txt          |    4 +-
 example/servo-pioneer/movePioneer.cpp         |  102 +-
 .../servoPioneerPanSegment3D.cpp              |  553 +-
 .../servoPioneerPoint2DDepth.cpp              |  302 +-
 ...servoPioneerPoint2DDepthWithoutVpServo.cpp |  268 +-
 example/servo-pioneer/sonarPioneerReader.cpp  |  212 +-
 example/servo-ptu46/CMakeLists.txt            |    4 +-
 example/servo-ptu46/movePtu46.cpp             |    6 +-
 .../servoPtu46Point2DArtVelocity.cpp          |   12 +-
 example/servo-viper650/CMakeLists.txt         |    2 +-
 ...rPoints2DArtVelocityInteractionCurrent.cpp |    2 +-
 ...rPoints2DCamVelocityInteractionCurrent.cpp |    2 +-
 .../servoViper650Point2DCamVelocity.cpp       |    2 +-
 example/servo-viper850/CMakeLists.txt         |    4 +-
 ...rPoints2DArtVelocityInteractionCurrent.cpp |    4 +-
 ...rPoints2DArtVelocityInteractionDesired.cpp |    4 +-
 ...rPoints2DCamVelocityInteractionCurrent.cpp |    4 +-
 .../servoViper850FourPointsKinect.cpp         |    2 +-
 ...oint2DArtVelocity-jointAvoidance-basic.cpp |   10 +-
 ...0Point2DArtVelocity-jointAvoidance-gpa.cpp |   15 +-
 .../servoViper850Point2DArtVelocity.cpp       |    4 +-
 .../servoViper850Point2DCamVelocity.cpp       |    4 +-
 .../servoViper850Point2DCamVelocityKalman.cpp |    4 +-
 example/tools/CMakeLists.txt                  |    4 +-
 example/tools/histogram.cpp                   |  431 +-
 example/tools/keyboard.cpp                    |    6 +-
 example/tools/parallelPort.cpp                |    4 +-
 example/tools/plot2d.cpp                      |  123 +-
 example/tools/plot3d.cpp                      |  108 +-
 example/tracking/CMakeLists.txt               |   77 +-
 example/tracking/mbtEdgeKltTracking.cpp       |  479 +-
 example/tracking/mbtEdgeTracking.cpp          |  452 +-
 example/tracking/mbtKltTracking.cpp           |  437 +-
 example/tracking/templateTracker.cpp          |  430 ++
 example/tracking/trackDot.cpp                 |  331 +-
 example/tracking/trackDot2.cpp                |  363 +-
 .../tracking/trackDot2WithAutoDetection.cpp   |  425 +-
 example/tracking/trackKltOpencv.cpp           |  364 +-
 example/tracking/trackMeCircle.cpp            |  285 +-
 example/tracking/trackMeEllipse.cpp           |  320 +-
 example/tracking/trackMeLine.cpp              |  337 +-
 example/tracking/trackMeNurbs.cpp             |  267 +-
 example/video/CMakeLists.txt                  |    2 +-
 example/video/imageSequenceReader.cpp         |  282 +-
 example/video/videoReader.cpp                 |  264 +-
 example/wireframe-simulator/CMakeLists.txt    |    4 +-
 .../wireframeSimulator.cpp                    |  280 +-
 include/vpConfig.h.cmake                      |   26 +-
 macros/have_visp.m4                           |    4 +-
 src/CMakeLists.txt                            |    4 +-
 src/camera/calibration/vpCalibration.cpp      |  218 +-
 src/camera/calibration/vpCalibration.h        |   56 +-
 .../calibration/vpCalibrationException.h      |   44 +-
 src/camera/calibration/vpCalibrationTools.cpp |  209 +-
 src/camera/vpCameraParameters.cpp             |  188 +-
 src/camera/vpCameraParameters.h               |    8 +-
 src/camera/vpMeterPixelConversion.cpp         |    4 +-
 src/camera/vpMeterPixelConversion.h           |    4 +-
 src/camera/vpPixelMeterConversion.cpp         |    4 +-
 src/camera/vpPixelMeterConversion.h           |    4 +-
 src/camera/vpXmlParserCamera.cpp              |  267 +-
 src/camera/vpXmlParserCamera.h                |   16 +-
 .../homography-estimation/vpHomography.cpp    |  584 ++-
 .../homography-estimation/vpHomography.h      |  464 +-
 .../homography-estimation/vpHomographyDLT.cpp |  350 +-
 .../vpHomographyExtract.cpp                   |  124 +-
 .../vpHomographyMalis.cpp                     |  195 +-
 .../vpHomographyRansac.cpp                    |  310 +-
 .../homography-estimation/vpHomographyVVS.cpp |  130 +-
 .../pose-estimation/vpLevenbergMarquartd.cpp  |   80 +-
 .../pose-estimation/vpLevenbergMarquartd.h    |    4 +-
 .../pose-estimation/vpPose.cpp                |   36 +-
 src/computer-vision/pose-estimation/vpPose.h  |   12 +-
 .../pose-estimation/vpPoseDementhon.cpp       |   56 +-
 .../pose-estimation/vpPoseException.h         |   45 +-
 .../pose-estimation/vpPoseFeatures.cpp        |   14 +-
 .../pose-estimation/vpPoseFeatures.h          |   11 +-
 .../pose-estimation/vpPoseLagrange.cpp        |   14 +-
 .../pose-estimation/vpPoseLowe.cpp            |   28 +-
 .../pose-estimation/vpPoseRansac.cpp          |   24 +-
 .../vpPoseVirtualVisualServoing.cpp           |   51 +-
 src/data-structure/vpList.h                   |   29 +-
 src/device/display/vpDisplay.cpp              |   29 +-
 src/device/display/vpDisplay.h                |   21 +-
 src/device/display/vpDisplayException.h       |   49 +-
 src/device/display/vpDisplayGTK.cpp           |   97 +-
 src/device/display/vpDisplayGTK.h             |   16 +-
 src/device/display/vpDisplayOpenCV.cpp        |  166 +-
 src/device/display/vpDisplayOpenCV.h          |    4 +-
 src/device/display/vpDisplayX.cpp             |  480 +-
 src/device/display/vpDisplayX.h               |   21 +-
 src/device/display/vpMouseButton.h            |    4 +-
 src/device/display/windows/vpD3DRenderer.cpp  |    6 +-
 src/device/display/windows/vpD3DRenderer.h    |    4 +-
 src/device/display/windows/vpDisplayD3D.cpp   |   28 +-
 src/device/display/windows/vpDisplayD3D.h     |   10 +-
 src/device/display/windows/vpDisplayGDI.cpp   |   26 +-
 src/device/display/windows/vpDisplayGDI.h     |   17 +-
 src/device/display/windows/vpDisplayWin32.cpp |   14 +-
 src/device/display/windows/vpDisplayWin32.h   |    8 +-
 src/device/display/windows/vpGDIRenderer.cpp  |    4 +-
 src/device/display/windows/vpGDIRenderer.h    |    4 +-
 src/device/display/windows/vpWin32API.cpp     |    4 +-
 src/device/display/windows/vpWin32API.h       |    4 +-
 src/device/display/windows/vpWin32Renderer.h  |    4 +-
 src/device/display/windows/vpWin32Window.cpp  |    4 +-
 src/device/display/windows/vpWin32Window.h    |    4 +-
 .../framegrabber/1394/vp1394CMUGrabber.cpp    |    4 +-
 .../framegrabber/1394/vp1394CMUGrabber.h      |    4 +-
 .../framegrabber/1394/vp1394Grabber.cpp       | 2394 ---------
 src/device/framegrabber/1394/vp1394Grabber.h  |  249 -
 .../framegrabber/1394/vp1394TwoGrabber.cpp    |  144 +-
 .../framegrabber/1394/vp1394TwoGrabber.h      |   14 +-
 .../framegrabber/OpenCV/vpOpenCVGrabber.cpp   |   26 +-
 .../framegrabber/OpenCV/vpOpenCVGrabber.h     |    4 +-
 .../directshow/vpDirectShowDevice.cpp         |    9 +-
 .../directshow/vpDirectShowDevice.h           |    9 +-
 .../directshow/vpDirectShowGrabber.cpp        |    4 +-
 .../directshow/vpDirectShowGrabber.h          |    4 +-
 .../directshow/vpDirectShowGrabberImpl.cpp    |    4 +-
 .../directshow/vpDirectShowGrabberImpl.h      |    4 +-
 .../directshow/vpDirectShowSampleGrabberI.h   |    4 +-
 .../framegrabber/disk/vpDiskGrabber.cpp       |   68 +-
 src/device/framegrabber/disk/vpDiskGrabber.h  |    4 +-
 .../generic-framegrabber/vpFrameGrabber.h     |    5 +-
 .../vpFrameGrabberException.h                 |   41 +-
 .../framegrabber/v4l2/vpV4l2Grabber.cpp       |   21 +-
 src/device/framegrabber/v4l2/vpV4l2Grabber.h  |    4 +-
 src/device/kinect/vpKinect.cpp                |    4 +-
 src/device/kinect/vpKinect.h                  |    4 +-
 src/device/laserscanner/sick/vpSickLDMRS.cpp  |   33 +-
 src/device/laserscanner/sick/vpSickLDMRS.h    |   37 +-
 src/device/laserscanner/vpLaserScan.h         |   57 +-
 src/device/laserscanner/vpLaserScanner.h      |   33 +-
 src/device/laserscanner/vpScanPoint.h         |   64 +-
 src/device/light/vpRingLight.cpp              |    4 +-
 src/device/light/vpRingLight.h                |    4 +-
 src/exceptions/vpException.cpp                |   58 +-
 src/exceptions/vpException.h                  |   76 +-
 src/image/vpColor.cpp                         |   26 +-
 src/image/vpColor.h                           |   67 +-
 src/image/vpImage.h                           |  118 +-
 src/image/vpImageConvert.cpp                  |  218 +-
 src/image/vpImageConvert.h                    |    6 +-
 src/image/vpImageException.h                  |   44 +-
 src/image/vpImageFilter.cpp                   |  483 +-
 src/image/vpImageFilter.h                     |  423 +-
 src/image/vpImageIo.cpp                       |  512 +-
 src/image/vpImageIo.h                         |   12 +-
 src/image/vpImageMorphology.h                 |    4 +-
 src/image/vpImagePoint.cpp                    |  319 +-
 src/image/vpImagePoint.h                      |  334 +-
 src/image/vpImageTools.cpp                    |   14 +-
 src/image/vpImageTools.h                      |   35 +-
 src/image/vpRGBa.cpp                          |   13 +-
 src/image/vpRGBa.h                            |   51 +-
 src/key-point/vpBasicKeyPoint.cpp             |   17 +-
 src/key-point/vpBasicKeyPoint.h               |    4 +-
 src/key-point/vpFernClassifier.cpp            |   22 +-
 src/key-point/vpFernClassifier.h              |   13 +-
 src/key-point/vpKeyPointSurf.cpp              |   50 +-
 src/key-point/vpKeyPointSurf.h                |   20 +-
 src/key-point/vpPlanarObjectDetector.cpp      |   19 +-
 src/key-point/vpPlanarObjectDetector.h        |    4 +-
 src/math/kalman/vpKalmanFilter.cpp            |   55 +-
 src/math/kalman/vpKalmanFilter.h              |   16 +-
 .../vpLinearKalmanFilterInstantiation.cpp     |   60 +-
 .../vpLinearKalmanFilterInstantiation.h       |   13 +-
 src/math/matrix/vpColVector.cpp               |   10 +-
 src/math/matrix/vpColVector.h                 |   14 +-
 src/math/matrix/vpGEMM.h                      |    4 +-
 src/math/matrix/vpMatrix.cpp                  |  416 +-
 src/math/matrix/vpMatrix.h                    |  195 +-
 src/math/matrix/vpMatrixException.h           |   45 +-
 src/math/matrix/vpMatrix_cholesky.cpp         |   18 +-
 src/math/matrix/vpMatrix_covariance.cpp       |    2 +-
 src/math/matrix/vpMatrix_lu.cpp               |   12 +-
 src/math/matrix/vpMatrix_qr.cpp               |   32 +-
 src/math/matrix/vpMatrix_svd.cpp              |   13 +-
 src/math/matrix/vpRowVector.cpp               |    7 +-
 src/math/matrix/vpRowVector.h                 |    4 +-
 src/math/matrix/vpSubColVector.cpp            |   20 +-
 src/math/matrix/vpSubColVector.h              |    4 +-
 src/math/matrix/vpSubMatrix.cpp               |   40 +-
 src/math/matrix/vpSubMatrix.h                 |    4 +-
 src/math/matrix/vpSubRowVector.cpp            |   24 +-
 src/math/matrix/vpSubRowVector.h              |    4 +-
 src/math/misc/vpHinkley.cpp                   |   34 +-
 src/math/misc/vpHinkley.h                     |    4 +-
 src/math/misc/vpMath.cpp                      |    4 +-
 src/math/misc/vpMath.h                        |    6 +-
 src/math/misc/vpNoise.cpp                     |    4 +-
 src/math/misc/vpNoise.h                       |  138 +-
 src/math/robust/vpRansac.h                    |   56 +-
 src/math/robust/vpRobust.cpp                  |   19 +-
 src/math/robust/vpRobust.h                    |    4 +-
 src/math/robust/vpScale.cpp                   |   23 +-
 src/math/robust/vpScale.h                     |    4 +-
 src/math/spline/vpBSpline.cpp                 |    9 +-
 src/math/spline/vpBSpline.h                   |    8 +-
 src/math/spline/vpNurbs.cpp                   |   22 +-
 src/math/spline/vpNurbs.h                     |    4 +-
 src/math/transformation/vpExponentialMap.cpp  |    4 +-
 src/math/transformation/vpExponentialMap.h    |    4 +-
 .../transformation/vpForceTwistMatrix.cpp     |   40 +-
 src/math/transformation/vpForceTwistMatrix.h  |    4 +-
 .../transformation/vpHomogeneousMatrix.cpp    |   52 +-
 src/math/transformation/vpHomogeneousMatrix.h |    4 +-
 src/math/transformation/vpPoseVector.cpp      |   52 +-
 src/math/transformation/vpPoseVector.h        |    4 +-
 .../transformation/vpQuaternionVector.cpp     |   49 +-
 src/math/transformation/vpQuaternionVector.h  |   13 +-
 src/math/transformation/vpRotationMatrix.cpp  |    6 +-
 src/math/transformation/vpRotationMatrix.h    |    4 +-
 src/math/transformation/vpRotationVector.cpp  |   20 +-
 src/math/transformation/vpRotationVector.h    |   57 +-
 src/math/transformation/vpRxyzVector.cpp      |   25 +-
 src/math/transformation/vpRxyzVector.h        |   24 +-
 src/math/transformation/vpRzyxVector.cpp      |   27 +-
 src/math/transformation/vpRzyxVector.h        |   18 +-
 src/math/transformation/vpRzyzVector.cpp      |   56 +-
 src/math/transformation/vpRzyzVector.h        |   24 +-
 src/math/transformation/vpThetaUVector.cpp    |   33 +-
 src/math/transformation/vpThetaUVector.h      |   14 +-
 .../transformation/vpTranslationVector.cpp    |   52 +-
 src/math/transformation/vpTranslationVector.h |    4 +-
 .../transformation/vpVelocityTwistMatrix.cpp  |   63 +-
 .../transformation/vpVelocityTwistMatrix.h    |    4 +-
 src/network/vpClient.cpp                      |   23 +-
 src/network/vpClient.h                        |    4 +-
 src/network/vpNetwork.cpp                     |   45 +-
 src/network/vpNetwork.h                       |   37 +-
 src/network/vpRequest.cpp                     |    5 +-
 src/network/vpRequest.h                       |    4 +-
 src/network/vpServer.cpp                      |   61 +-
 src/network/vpServer.h                        |    4 +-
 src/robot/real-robot/afma4/vpAfma4.cpp        |   39 +-
 src/robot/real-robot/afma4/vpAfma4.h          |   39 +-
 src/robot/real-robot/afma4/vpRobotAfma4.cpp   |   10 +-
 src/robot/real-robot/afma4/vpRobotAfma4.h     |   14 +-
 src/robot/real-robot/afma4/vpServolens.cpp    |   61 +-
 src/robot/real-robot/afma4/vpServolens.h      |   39 +-
 src/robot/real-robot/afma6/vpAfma6.cpp        |  172 +-
 src/robot/real-robot/afma6/vpAfma6.h          |   48 +-
 src/robot/real-robot/afma6/vpRobotAfma6.cpp   |    8 +-
 src/robot/real-robot/afma6/vpRobotAfma6.h     |   12 +-
 src/robot/real-robot/biclops/vpBiclops.cpp    |   34 +-
 src/robot/real-robot/biclops/vpBiclops.h      |   33 +-
 .../real-robot/biclops/vpRobotBiclops.cpp     |   35 +-
 src/robot/real-robot/biclops/vpRobotBiclops.h |    8 +-
 .../biclops/vpRobotBiclopsController.cpp      |    7 +-
 .../biclops/vpRobotBiclopsController.h        |    6 +-
 src/robot/real-robot/cycab/vpRobotCycab.cpp   |  295 --
 src/robot/real-robot/cycab/vpRobotCycab.h     |  111 -
 src/robot/real-robot/pioneer/vpPioneer.h      |    4 +-
 src/robot/real-robot/pioneer/vpPioneerPan.h   |    6 +-
 .../real-robot/pioneer/vpRobotPioneer.cpp     |    4 +-
 src/robot/real-robot/pioneer/vpRobotPioneer.h |    4 +-
 src/robot/real-robot/pioneer/vpUnicycle.h     |    6 +-
 src/robot/real-robot/ptu46/vpPtu46.cpp        |   36 +-
 src/robot/real-robot/ptu46/vpPtu46.h          |   25 +-
 src/robot/real-robot/ptu46/vpRobotPtu46.cpp   |    8 +-
 src/robot/real-robot/ptu46/vpRobotPtu46.h     |    8 +-
 .../real-robot/viper/vpRobotViper650.cpp      |   22 +-
 src/robot/real-robot/viper/vpRobotViper650.h  |   38 +-
 .../real-robot/viper/vpRobotViper850.cpp      |   91 +-
 src/robot/real-robot/viper/vpRobotViper850.h  |   34 +-
 src/robot/real-robot/viper/vpViper.cpp        |   61 +-
 src/robot/real-robot/viper/vpViper.h          |   57 +-
 src/robot/real-robot/viper/vpViper650.cpp     |   78 +-
 src/robot/real-robot/viper/vpViper650.h       |   14 +-
 src/robot/real-robot/viper/vpViper850.cpp     |   79 +-
 src/robot/real-robot/viper/vpViper850.h       |   14 +-
 src/robot/robot/vpRobot.cpp                   |   48 +-
 src/robot/robot/vpRobot.h                     |   15 +-
 src/robot/robot/vpRobotException.h            |  135 +-
 src/robot/robot/vpRobotTemplate.cpp           |    4 +-
 src/robot/robot/vpRobotTemplate.h             |    4 +-
 .../arms/CMakeRobotArmsList.cmake             |    4 +-
 src/robot/simulator-robot/vpRobotCamera.cpp   |   11 +-
 src/robot/simulator-robot/vpRobotCamera.h     |    6 +-
 .../simulator-robot/vpRobotSimulator.cpp      |    7 +-
 src/robot/simulator-robot/vpRobotSimulator.h  |    4 +-
 .../vpRobotWireFrameSimulator.cpp             |  101 +-
 .../vpRobotWireFrameSimulator.h               |   36 +-
 .../simulator-robot/vpSimulatorAfma6.cpp      |  341 +-
 src/robot/simulator-robot/vpSimulatorAfma6.h  |   15 +-
 .../simulator-robot/vpSimulatorCamera.cpp     |   12 +-
 src/robot/simulator-robot/vpSimulatorCamera.h |    4 +-
 .../simulator-robot/vpSimulatorPioneer.cpp    |    9 +-
 .../simulator-robot/vpSimulatorPioneer.h      |    2 +-
 .../simulator-robot/vpSimulatorPioneerPan.cpp |   10 +-
 .../simulator-robot/vpSimulatorPioneerPan.h   |    2 +-
 .../simulator-robot/vpSimulatorViper850.cpp   |  314 +-
 .../simulator-robot/vpSimulatorViper850.h     |   18 +-
 src/servo/vpAdaptativeGain.cpp                |  360 --
 src/servo/vpAdaptativeGain.h                  |  190 -
 src/servo/vpAdaptiveGain.cpp                  |  196 +-
 src/servo/vpAdaptiveGain.h                    |   64 +-
 src/servo/vpServo.cpp                         | 1001 +++-
 src/servo/vpServo.h                           |  446 +-
 src/servo/vpServoData.cpp                     |    4 +-
 src/servo/vpServoData.h                       |   14 +-
 src/servo/vpServoDisplay.cpp                  |   69 +-
 src/servo/vpServoDisplay.h                    |   12 +-
 src/servo/vpServoException.h                  |   43 +-
 src/simulator/coin-simulator/vpAR.cpp         |    4 +-
 src/simulator/coin-simulator/vpAR.h           |    4 +-
 .../coin-simulator/vpProjectionDisplay.cpp    |    4 +-
 .../coin-simulator/vpProjectionDisplay.h      |   25 +-
 src/simulator/coin-simulator/vpSimulator.cpp  |   22 +-
 src/simulator/coin-simulator/vpSimulator.h    |    4 +-
 .../coin-simulator/vpSimulatorException.h     |   43 +-
 src/simulator/coin-simulator/vpViewer.cpp     |    4 +-
 src/simulator/coin-simulator/vpViewer.h       |    4 +-
 .../image-simulator/vpImageSimulator.cpp      |  108 +-
 .../image-simulator/vpImageSimulator.h        |   30 +-
 src/simulator/ogre-simulator/vpAROgre.cpp     |  214 +-
 src/simulator/ogre-simulator/vpAROgre.h       |    4 +-
 .../wireframe-simulator/core/vpArit.c         |    4 +-
 .../wireframe-simulator/core/vpArit.h         |    4 +-
 .../wireframe-simulator/core/vpAritio.c       |    4 +-
 .../wireframe-simulator/core/vpBound.c        |    4 +-
 .../wireframe-simulator/core/vpBound.h        |    4 +-
 .../wireframe-simulator/core/vpBoundio.c      |    4 +-
 .../wireframe-simulator/core/vpCgiconstants.h |    4 +-
 .../wireframe-simulator/core/vpCgidefs.h      |    4 +-
 .../wireframe-simulator/core/vpClipping.c     |    4 +-
 .../wireframe-simulator/core/vpDisplay.c      |    4 +-
 .../wireframe-simulator/core/vpImstack.h      |    4 +-
 .../wireframe-simulator/core/vpKeyword.c      |    4 +-
 .../wireframe-simulator/core/vpKeyword.h      |    4 +-
 .../wireframe-simulator/core/vpLex.c          |  356 +-
 .../wireframe-simulator/core/vpLex.h          |    4 +-
 src/simulator/wireframe-simulator/core/vpMy.h |    4 +-
 .../wireframe-simulator/core/vpMyio.c         |   13 +-
 .../wireframe-simulator/core/vpParser.c       |    4 +-
 .../wireframe-simulator/core/vpProjection.c   |    4 +-
 .../wireframe-simulator/core/vpRfstack.c      |   35 +-
 .../wireframe-simulator/core/vpRfstack.h      |    4 +-
 .../wireframe-simulator/core/vpSkipio.c       |    4 +-
 .../wireframe-simulator/core/vpSkipio.h       |    4 +-
 .../wireframe-simulator/core/vpTmstack.c      |    4 +-
 .../wireframe-simulator/core/vpTmstack.h      |    4 +-
 .../wireframe-simulator/core/vpToken.c        |    4 +-
 .../wireframe-simulator/core/vpToken.h        |    4 +-
 .../wireframe-simulator/core/vpView.h         |    4 +-
 .../wireframe-simulator/core/vpViewio.c       |    4 +-
 .../wireframe-simulator/core/vpVwstack.c      |    4 +-
 .../wireframe-simulator/core/vpVwstack.h      |    4 +-
 .../scene/CMakeWireframeScenesList.cmake      |    4 +-
 .../vpWireFrameSimulator.cpp                  |  225 +-
 .../vpWireFrameSimulator.h                    |   34 +-
 src/tools/geometry/vpPlane.cpp                |   37 +-
 src/tools/geometry/vpPlane.h                  |   41 +-
 src/tools/geometry/vpPolygon.cpp              |   13 +-
 src/tools/geometry/vpPolygon.h                |    4 +-
 src/tools/geometry/vpRect.cpp                 |   96 +-
 src/tools/geometry/vpRect.h                   |   42 +-
 src/tools/geometry/vpTriangle.cpp             |   24 +-
 src/tools/geometry/vpTriangle.h               |    4 +-
 src/tools/histogram/vpHistogram.cpp           |   21 +-
 src/tools/histogram/vpHistogram.h             |    4 +-
 src/tools/histogram/vpHistogramPeak.cpp       |   24 +-
 src/tools/histogram/vpHistogramPeak.h         |   32 +-
 src/tools/histogram/vpHistogramValey.cpp      |    6 +-
 src/tools/histogram/vpHistogramValey.h        |   38 +-
 src/tools/io/vpIoException.h                  |   43 +-
 src/tools/io/vpIoTools.cpp                    |   76 +-
 src/tools/io/vpIoTools.h                      |    4 +-
 src/tools/io/vpKeyboard.cpp                   |    8 +-
 src/tools/io/vpKeyboard.h                     |    6 +-
 src/tools/io/vpParallelPort.cpp               |    4 +-
 src/tools/io/vpParallelPort.h                 |    4 +-
 src/tools/io/vpParallelPortException.h        |   43 +-
 src/tools/io/vpParseArgv.h                    |    3 +-
 src/tools/mutex/vpMutex.h                     |    4 +-
 src/tools/plot/vpPlot.cpp                     |   52 +-
 src/tools/plot/vpPlot.h                       |    4 +-
 src/tools/plot/vpPlotCurve.cpp                |   14 +-
 src/tools/plot/vpPlotCurve.h                  |    4 +-
 src/tools/plot/vpPlotGraph.cpp                |  152 +-
 src/tools/plot/vpPlotGraph.h                  |    5 +-
 src/tools/time/vpTime.cpp                     |   32 +-
 src/tools/time/vpTime.h                       |    5 +-
 src/tools/trace/vpDebug.h                     |  220 +-
 src/tools/xml/vpXmlParser.cpp                 |   12 +-
 src/tools/xml/vpXmlParser.h                   |    4 +-
 src/tracking/dots/vpDot.cpp                   |   71 +-
 src/tracking/dots/vpDot.h                     |   88 +-
 src/tracking/dots/vpDot2.cpp                  |  886 +---
 src/tracking/dots/vpDot2.h                    |   98 +-
 .../feature-builder/vpFeatureBuilder.h        |    4 +-
 .../vpFeatureBuilderEllipse.cpp               |    4 +-
 .../feature-builder/vpFeatureBuilderLine.cpp  |   12 +-
 .../feature-builder/vpFeatureBuilderPoint.cpp |    4 +-
 .../vpFeatureBuilderPoint3D.cpp               |    4 +-
 .../vpFeatureBuilderPointPolar.cpp            |    4 +-
 .../vpFeatureBuilderSegment.cpp               |    2 +-
 .../vpFeatureBuilderVanishingPoint.cpp        |    9 +-
 src/tracking/forward-projection/vpCircle.cpp  |   64 +-
 src/tracking/forward-projection/vpCircle.h    |    4 +-
 .../forward-projection/vpCylinder.cpp         |   62 +-
 src/tracking/forward-projection/vpCylinder.h  |    4 +-
 .../vpForwardProjection.cpp                   |    4 +-
 .../forward-projection/vpForwardProjection.h  |    6 +-
 src/tracking/forward-projection/vpLine.cpp    |   58 +-
 src/tracking/forward-projection/vpLine.h      |    4 +-
 src/tracking/forward-projection/vpPoint.cpp   |    6 +-
 src/tracking/forward-projection/vpPoint.h     |    4 +-
 src/tracking/forward-projection/vpSphere.cpp  |   52 +-
 src/tracking/forward-projection/vpSphere.h    |    4 +-
 .../general-tracking-issues/vpTracker.cpp     |   11 +-
 .../general-tracking-issues/vpTracker.h       |    4 +-
 .../vpTrackingException.h                     |   43 +-
 src/tracking/klt/vpKltOpencv.cpp              |  201 +-
 src/tracking/klt/vpKltOpencv.h                |    5 +-
 src/tracking/mbt/edge/vpMbEdgeTracker.cpp     |  197 +-
 src/tracking/mbt/edge/vpMbEdgeTracker.h       |   18 +-
 .../mbt/edge/vpMbtDistanceCylinder.cpp        |   42 +-
 src/tracking/mbt/edge/vpMbtDistanceCylinder.h |   21 +-
 src/tracking/mbt/edge/vpMbtDistanceLine.cpp   |   42 +-
 src/tracking/mbt/edge/vpMbtDistanceLine.h     |   26 +-
 src/tracking/mbt/edge/vpMbtMeLine.cpp         |  123 +-
 src/tracking/mbt/edge/vpMbtMeLine.h           |    4 +-
 src/tracking/mbt/edge/vpMbtPolygon.cpp        |   44 +-
 src/tracking/mbt/edge/vpMbtPolygon.h          |   13 +-
 src/tracking/mbt/edge/vpMbtXmlParser.cpp      |  303 +-
 src/tracking/mbt/edge/vpMbtXmlParser.h        |  147 +-
 .../mbt/hybrid/vpMbEdgeKltTracker.cpp         |  124 +-
 src/tracking/mbt/hybrid/vpMbEdgeKltTracker.h  |   16 +-
 .../mbt/hybrid/vpMbtEdgeKltXmlParser.cpp      |  198 +
 .../mbt/hybrid/vpMbtEdgeKltXmlParser.h        |   98 +
 src/tracking/mbt/klt/vpMbKltTracker.cpp       |   73 +-
 src/tracking/mbt/klt/vpMbKltTracker.h         |   10 +-
 src/tracking/mbt/klt/vpMbtKltPolygon.cpp      |   61 +-
 src/tracking/mbt/klt/vpMbtKltPolygon.h        |    6 +-
 src/tracking/mbt/klt/vpMbtKltXmlParser.cpp    |  256 +-
 src/tracking/mbt/klt/vpMbtKltXmlParser.h      |  141 +-
 src/tracking/mbt/vpMbHiddenFaces.h            |  132 +-
 src/tracking/mbt/vpMbTracker.cpp              |  187 +-
 src/tracking/mbt/vpMbTracker.h                |   20 +-
 src/tracking/mbt/vpMbXmlParser.cpp            |  323 ++
 src/tracking/mbt/vpMbXmlParser.h              |  210 +
 src/tracking/moments/vpMoment.cpp             |   29 +-
 src/tracking/moments/vpMoment.h               |   24 +-
 src/tracking/moments/vpMomentAlpha.cpp        |  177 +-
 src/tracking/moments/vpMomentAlpha.h          |   24 +-
 src/tracking/moments/vpMomentArea.cpp         |    6 +-
 src/tracking/moments/vpMomentArea.h           |    4 +-
 .../moments/vpMomentAreaNormalized.cpp        |   16 +-
 src/tracking/moments/vpMomentAreaNormalized.h |   10 +-
 src/tracking/moments/vpMomentBasic.cpp        |    8 +-
 src/tracking/moments/vpMomentBasic.h          |   10 +-
 src/tracking/moments/vpMomentCInvariant.cpp   |  111 +-
 src/tracking/moments/vpMomentCInvariant.h     |   93 +-
 src/tracking/moments/vpMomentCentered.cpp     |   31 +-
 src/tracking/moments/vpMomentCentered.h       |   19 +-
 src/tracking/moments/vpMomentCommon.cpp       |   40 +-
 src/tracking/moments/vpMomentCommon.h         |   21 +-
 src/tracking/moments/vpMomentDatabase.cpp     |    8 +-
 src/tracking/moments/vpMomentDatabase.h       |    7 +-
 .../moments/vpMomentGravityCenter.cpp         |    8 +-
 src/tracking/moments/vpMomentGravityCenter.h  |    8 +-
 .../vpMomentGravityCenterNormalized.cpp       |   10 +-
 .../moments/vpMomentGravityCenterNormalized.h |    6 +-
 src/tracking/moments/vpMomentObject.cpp       |  219 +-
 src/tracking/moments/vpMomentObject.h         |   43 +-
 src/tracking/moving-edges/vpMe.cpp            |   40 +-
 src/tracking/moving-edges/vpMe.h              |   12 +-
 src/tracking/moving-edges/vpMeEllipse.cpp     |  118 +-
 src/tracking/moving-edges/vpMeEllipse.h       |    8 +-
 src/tracking/moving-edges/vpMeLine.cpp        |  100 +-
 src/tracking/moving-edges/vpMeLine.h          |    4 +-
 src/tracking/moving-edges/vpMeNurbs.cpp       |   72 +-
 src/tracking/moving-edges/vpMeNurbs.h         |   12 +-
 src/tracking/moving-edges/vpMeSite.cpp        |   45 +-
 src/tracking/moving-edges/vpMeSite.h          |    4 +-
 src/tracking/moving-edges/vpMeTracker.cpp     |   35 +-
 src/tracking/moving-edges/vpMeTracker.h       |    8 +-
 .../ssd/vpTemplateTrackerSSD.cpp              |  132 +
 .../ssd/vpTemplateTrackerSSD.h                |   84 +
 .../ssd/vpTemplateTrackerSSDESM.cpp           |  332 ++
 .../ssd/vpTemplateTrackerSSDESM.h             |   71 +
 .../vpTemplateTrackerSSDForwardAdditional.cpp |  211 +
 .../vpTemplateTrackerSSDForwardAdditional.h   |   83 +
 ...TemplateTrackerSSDForwardCompositional.cpp |  175 +
 ...vpTemplateTrackerSSDForwardCompositional.h |   68 +
 ...TemplateTrackerSSDInverseCompositional.cpp |  235 +
 ...vpTemplateTrackerSSDInverseCompositional.h |   85 +
 .../tools/vpTemplateTrackerBSpline.cpp        |   82 +
 .../tools/vpTemplateTrackerBSpline.h          |   76 +-
 .../tools/vpTemplateTrackerHeader.h           |   91 +
 .../tools/vpTemplateTrackerTriangle.cpp       |  436 ++
 .../tools/vpTemplateTrackerTriangle.h         |  155 +
 .../tools/vpTemplateTrackerZone.cpp           |  590 +++
 .../tools/vpTemplateTrackerZone.h             |  118 +
 .../template-tracker/vpTemplateTracker.cpp    |  927 ++++
 .../template-tracker/vpTemplateTracker.h      |  219 +
 .../warp/vpTemplateTrackerWarp.cpp            |  163 +
 .../warp/vpTemplateTrackerWarp.h              |  245 +
 .../warp/vpTemplateTrackerWarpAffine.cpp      |  172 +
 .../warp/vpTemplateTrackerWarpAffine.h        |  175 +
 .../warp/vpTemplateTrackerWarpHomography.cpp  |  221 +
 .../warp/vpTemplateTrackerWarpHomography.h    |  200 +
 .../vpTemplateTrackerWarpHomographySL3.cpp    |  402 ++
 .../warp/vpTemplateTrackerWarpHomographySL3.h |  216 +
 .../warp/vpTemplateTrackerWarpSRT.cpp         |  188 +
 .../warp/vpTemplateTrackerWarpSRT.h           |  174 +
 .../warp/vpTemplateTrackerWarpTranslation.cpp |  129 +
 .../warp/vpTemplateTrackerWarpTranslation.h   |  175 +
 .../zncc/vpTemplateTrackerZNCC.cpp            |  134 +
 .../zncc/vpTemplateTrackerZNCC.h              |   83 +
 ...vpTemplateTrackerZNCCForwardAdditional.cpp |  323 ++
 .../vpTemplateTrackerZNCCForwardAdditional.h  |   66 +
 ...emplateTrackerZNCCInverseCompositional.cpp |  439 ++
 ...pTemplateTrackerZNCCInverseCompositional.h |   82 +
 src/video/vpFFMPEG.cpp                        |   47 +-
 src/video/vpFFMPEG.h                          |    6 +-
 src/video/vpVideoReader.cpp                   |   68 +-
 src/video/vpVideoReader.h                     |   21 +-
 src/video/vpVideoWriter.cpp                   |   35 +-
 src/video/vpVideoWriter.h                     |   22 +-
 src/visual-feature/vpBasicFeature.cpp         |   46 +-
 src/visual-feature/vpBasicFeature.h           |    6 +-
 src/visual-feature/vpFeatureDepth.cpp         |   78 +-
 src/visual-feature/vpFeatureDepth.h           |    4 +-
 src/visual-feature/vpFeatureDisplay.cpp       |    4 +-
 src/visual-feature/vpFeatureDisplay.h         |    4 +-
 src/visual-feature/vpFeatureEllipse.cpp       |   22 +-
 src/visual-feature/vpFeatureEllipse.h         |    4 +-
 src/visual-feature/vpFeatureException.h       |   43 +-
 src/visual-feature/vpFeatureLine.cpp          |   46 +-
 src/visual-feature/vpFeatureLine.h            |    4 +-
 src/visual-feature/vpFeatureLuminance.cpp     |   46 +-
 src/visual-feature/vpFeatureLuminance.h       |   20 +-
 src/visual-feature/vpFeatureMoment.cpp        |   32 +-
 src/visual-feature/vpFeatureMoment.h          |   46 +-
 src/visual-feature/vpFeatureMomentAlpha.cpp   |   12 +-
 src/visual-feature/vpFeatureMomentAlpha.h     |   22 +-
 src/visual-feature/vpFeatureMomentArea.cpp    |   10 +-
 src/visual-feature/vpFeatureMomentArea.h      |   18 +-
 .../vpFeatureMomentAreaNormalized.cpp         |   22 +-
 .../vpFeatureMomentAreaNormalized.h           |   28 +-
 src/visual-feature/vpFeatureMomentBasic.cpp   |   68 +-
 src/visual-feature/vpFeatureMomentBasic.h     |   10 +-
 .../vpFeatureMomentCInvariant.cpp             |   33 +-
 .../vpFeatureMomentCInvariant.h               |   22 +-
 .../vpFeatureMomentCentered.cpp               |   55 +-
 src/visual-feature/vpFeatureMomentCentered.h  |   16 +-
 src/visual-feature/vpFeatureMomentCommon.cpp  |    6 +-
 src/visual-feature/vpFeatureMomentCommon.h    |    4 +-
 .../vpFeatureMomentDatabase.cpp               |    4 +-
 src/visual-feature/vpFeatureMomentDatabase.h  |   10 +-
 .../vpFeatureMomentGravityCenter.cpp          |   12 +-
 .../vpFeatureMomentGravityCenter.h            |   34 +-
 ...vpFeatureMomentGravityCenterNormalized.cpp |   18 +-
 .../vpFeatureMomentGravityCenterNormalized.h  |   35 +-
 src/visual-feature/vpFeaturePoint.cpp         |   87 +-
 src/visual-feature/vpFeaturePoint.h           |    4 +-
 src/visual-feature/vpFeaturePoint3D.cpp       |    6 +-
 src/visual-feature/vpFeaturePoint3D.h         |    4 +-
 src/visual-feature/vpFeaturePointPolar.cpp    |   55 +-
 src/visual-feature/vpFeaturePointPolar.h      |    4 +-
 src/visual-feature/vpFeatureSegment.cpp       |    9 +-
 src/visual-feature/vpFeatureSegment.h         |    2 +-
 src/visual-feature/vpFeatureThetaU.cpp        |   29 +-
 src/visual-feature/vpFeatureThetaU.h          |    4 +-
 src/visual-feature/vpFeatureTranslation.cpp   |   24 +-
 src/visual-feature/vpFeatureTranslation.h     |    4 +-
 .../vpFeatureVanishingPoint.cpp               |    6 +-
 src/visual-feature/vpFeatureVanishingPoint.h  |    4 +-
 src/visual-feature/vpGenericFeature.cpp       |   55 +-
 src/visual-feature/vpGenericFeature.h         |    6 +-
 test/CMakeLists.txt                           |    4 +-
 test/camera/CMakeLists.txt                    |    4 +-
 .../camera/testCameraParametersConversion.cpp |  119 +-
 test/device/CMakeLists.txt                    |    2 +-
 test/device/display/CMakeLists.txt            |    4 +-
 test/device/display/testClick.cpp             |   24 +-
 test/device/display/testDisplays.cpp          |   20 +-
 test/device/display/testMouseEvent.cpp        |   33 +-
 test/device/display/testVideoDevice.cpp       |   21 +-
 test/device/display/testVideoDeviceDual.cpp   |  230 +-
 test/device/framegrabber/CMakeLists.txt       |    4 +-
 .../framegrabber/test1394TwoGrabber.cpp       |    4 +-
 .../framegrabber/test1394TwoResetBus.cpp      |    4 +-
 test/feature/CMakeLists.txt                   |    4 +-
 test/feature/testPoint.cpp                    |  201 +-
 test/homography/CMakeLists.txt                |    4 +-
 test/homography/testDisplacement.cpp          |  186 +-
 test/image/CMakeLists.txt                     |    4 +-
 test/image/testConversion.cpp                 |  766 +--
 test/image/testCreateSubImage.cpp             |  214 +-
 test/image/testImagePoint.cpp                 |    4 +-
 test/image/testIoPGM.cpp                      |  229 +-
 test/image/testIoPPM.cpp                      |  300 +-
 test/image/testReadImage.cpp                  |  201 +-
 test/image/testUndistortImage.cpp             |  227 +-
 test/key-point/CMakeLists.txt                 |    4 +-
 test/key-point/testSurfKeyPoint.cpp           |  350 +-
 test/math/CMakeLists.txt                      |    4 +-
 test/math/testColvector.cpp                   |   52 +-
 test/math/testKalmanAcceleration.cpp          |  100 +-
 test/math/testKalmanVelocity.cpp              |  138 +-
 test/math/testMatrix.cpp                      |  283 +-
 test/math/testMatrixException.cpp             |   72 +-
 test/math/testMatrixInverse.cpp               |  238 +-
 test/math/testRobust.cpp                      |  128 +-
 test/math/testRotation.cpp                    |  186 +-
 test/math/testSvd.cpp                         |  147 +-
 test/math/testTwistMatrix.cpp                 |   98 +-
 test/network/CMakeLists.txt                   |    4 +-
 test/network/testClient.cpp                   |   45 +-
 test/network/testServer.cpp                   |   57 +-
 test/pose/CMakeLists.txt                      |    4 +-
 test/pose/testFindMatch.cpp                   |  110 +-
 test/pose/testPose.cpp                        |  179 +-
 test/pose/testPoseFeatures.cpp                |  235 +-
 test/pose/testPoseRansac.cpp                  |   12 +-
 test/servo-afma4/CMakeLists.txt               |    4 +-
 test/servo-afma4/testAfma4.cpp                |   11 +-
 test/servo-afma4/testRobotAfma4.cpp           |   13 +-
 test/servo-afma6/CMakeLists.txt               |    4 +-
 test/servo-afma6/testAfma6.cpp                |   11 +-
 test/servo-afma6/testRobotAfma6.cpp           |   13 +-
 test/servo-afma6/testRobotAfma6Pose.cpp       |   11 +-
 test/servo-viper/CMakeLists.txt               |    4 +-
 test/servo-viper/testRobotViper850.cpp        |   12 +-
 test/servo-viper/testRobotViper850Pose.cpp    |   11 +-
 test/servo-viper/testViper850.cpp             |   10 +-
 test/tools/CMakeLists.txt                     |    4 +-
 test/tools/geometry/CMakeLists.txt            |    2 +-
 test/tools/geometry/testPolygon.cpp           |  192 +-
 test/tools/time/CMakeLists.txt                |    4 +-
 test/tools/time/testTime.cpp                  |  109 +-
 test/tools/xml/CMakeLists.txt                 |    4 +-
 test/tools/xml/testXmlParser.cpp              |  197 +-
 test/tracking/CMakeLists.txt                  |    4 +-
 test/tracking/testTrackDot.cpp                |  254 +-
 test/visual-feature/CMakeLists.txt            |    4 +-
 test/visual-feature/testFeature.cpp           |   10 +-
 test/visual-feature/testFeatureMoment.cpp     |  135 +-
 test/visual-feature/testFeatureSegment.cpp    |  259 +-
 tutorial/CMakeLists.txt                       |   27 +-
 tutorial/computer-vision/CMakeLists.txt       |   29 +-
 .../tutorial-homography-from-points.cpp       |   63 +
 .../tutorial-pose-from-points-image.cpp       |   68 +-
 .../tutorial-pose-from-points-tracking.cpp    |   66 +-
 tutorial/grabber/CMakeLists.txt               |   38 +-
 .../grabber/tutorial-grabber-1394-writer.cpp  |   62 +
 tutorial/grabber/tutorial-grabber-1394.cpp    |   35 +-
 tutorial/grabber/tutorial-grabber-CMU1394.cpp |   37 +-
 .../grabber/tutorial-grabber-opencv-bis.cpp   |   43 +-
 tutorial/grabber/tutorial-grabber-opencv.cpp  |   27 +-
 tutorial/grabber/tutorial-grabber-v4l2.cpp    |   27 +-
 tutorial/grabber/tutorial-grabber-video.cpp   |   37 +-
 tutorial/image/CMakeLists.txt                 |   46 +-
 tutorial/image/lena.jpeg                      |  Bin 0 -> 11689 bytes
 tutorial/image/lena.pgm                       |    4 +
 tutorial/image/lena.png                       |  Bin 0 -> 80630 bytes
 tutorial/image/tutorial-image-converter.cpp   |   15 +-
 tutorial/image/tutorial-image-filter.cpp      |  107 +
 .../image/tutorial-image-manipulation.cpp     |   37 +-
 tutorial/image/tutorial-image-reader.cpp      |    3 +
 tutorial/image/tutorial-image-viewer.cpp      |   41 +-
 tutorial/image/tutorial-undistort.cpp         |   33 +-
 tutorial/image/tutorial-viewer.cpp            |   29 +-
 tutorial/matching/CMakeLists.txt              |   21 +
 .../tutorial-matching-surf-homography.cpp     |  117 +
 tutorial/matching/tutorial-matching-surf.cpp  |   53 +
 tutorial/matching/video-postcard.mpeg         |  Bin 0 -> 899326 bytes
 tutorial/robot/pioneer/CMakeLists.txt         |   19 +-
 .../robot/pioneer/tutorial-pioneer-robot.cpp  |   47 +-
 ...-simu-pioneer-continuous-gain-adaptive.cpp |  148 +
 ...-simu-pioneer-continuous-gain-constant.cpp |  148 +
 .../pioneer/tutorial-simu-pioneer-pan.cpp     |  179 +-
 .../robot/pioneer/tutorial-simu-pioneer.cpp   |  139 +-
 tutorial/simulator/image/CMakeLists.txt       |   27 +-
 .../image/tutorial-image-simulator.cpp        |   77 +-
 tutorial/trace/CMakeLists.txt                 |   15 +
 tutorial/trace/tutorial-trace.cpp             |   39 +
 tutorial/tracking/blob/CMakeLists.txt         |   29 +-
 .../blob/tutorial-blob-auto-tracker.cpp       |  117 +-
 .../tracking/blob/tutorial-blob-tracker.cpp   |   47 +-
 tutorial/tracking/keypoint/CMakeLists.txt     |   27 +-
 .../keypoint/tutorial-klt-tracker.cpp         |   79 +-
 .../tracking/model-based/edges/CMakeLists.txt |   33 +-
 .../tracking/model-based/edges/teabox.wrl     |   33 +
 .../tracking/model-based/edges/teabox.xml     |   12 +-
 .../edges/tutorial-mb-edge-tracker.cpp        |   92 +-
 .../model-based/hybrid/CMakeLists.txt         |   33 +-
 .../tracking/model-based/hybrid/teabox.xml    |   14 +-
 .../hybrid/tutorial-mb-hybrid-tracker.cpp     |  114 +-
 .../model-based/keypoint/CMakeLists.txt       |   35 +-
 .../tracking/model-based/keypoint/teabox.xml  |   14 +-
 .../keypoint/tutorial-mb-klt-tracker.cpp      |   93 +-
 tutorial/tracking/moving-edges/CMakeLists.txt |   14 +-
 .../tutorial-me-ellipse-tracker.cpp           |   58 +-
 .../moving-edges/tutorial-me-line-tracker.cpp |   58 +-
 .../tracking/template-tracker/CMakeLists.txt  |   20 +
 .../pattern-template-tracker.pgm              | 4440 +++++++++++++++++
 .../tutorial-template-tracker.cpp             |   51 +
 tutorial/visual-servo/ibvs/CMakeLists.txt     |   50 +-
 .../ibvs/tutorial-ibvs-4pts-display.cpp       |  124 +-
 .../tutorial-ibvs-4pts-image-tracking.cpp     |  127 +-
 .../ibvs/tutorial-ibvs-4pts-ogre-tracking.cpp |  266 +-
 .../ibvs/tutorial-ibvs-4pts-ogre.cpp          |  137 +-
 ...-4pts-plotter-continuous-gain-adaptive.cpp |  102 +
 ...torial-ibvs-4pts-plotter-gain-adaptive.cpp |  102 +
 .../ibvs/tutorial-ibvs-4pts-plotter.cpp       |  141 +-
 .../tutorial-ibvs-4pts-wireframe-camera.cpp   |  148 +-
 ...torial-ibvs-4pts-wireframe-robot-afma6.cpp |  178 +-
 ...torial-ibvs-4pts-wireframe-robot-viper.cpp |  209 +-
 .../visual-servo/ibvs/tutorial-ibvs-4pts.cpp  |   81 +-
 966 files changed, 49136 insertions(+), 33533 deletions(-)
 delete mode 100644 CMakeModules/FindCycabTk.cmake
 create mode 100644 CMakeModules/VISPCRTLinkage.cmake
 delete mode 100644 CMakeModules/checkForItifg8Version.cpp
 create mode 100644 data/ogre-simulator/media/materials/scripts/Examples.material
 create mode 100644 data/ogre-simulator/media/materials/textures/grass_1024.jpg
 create mode 100644 data/ogre-simulator/media/materials/textures/r2skin.jpg
 create mode 100644 data/ogre-simulator/media/models/robot.mesh
 create mode 100644 data/ogre-simulator/media/models/robot.skeleton
 create mode 100644 doc/image/img-cmake-debug-trace.jpg
 create mode 100644 doc/image/img-ibvs-control-law-adaptive.png
 create mode 100644 doc/image/img-ibvs-control-law-continuous-adaptive.png
 create mode 100644 doc/image/img-ibvs-control-law-exponential.png
 create mode 100644 doc/image/img-lena-blured-default.png
 create mode 100644 doc/image/img-lena-blured-var2.png
 create mode 100644 doc/image/img-lena-canny.png
 create mode 100644 doc/image/img-lena-dIxy.png
 create mode 100644 doc/image/img-lena-gray.png
 create mode 100644 doc/image/img-lena-pyr.png
 create mode 100644 doc/image/img-lena-sobel.png
 create mode 100644 doc/image/img-template-tracker.jpg
 create mode 100644 doc/image/initClickTemplateTracker.png
 create mode 100644 doc/tutorial-boost-vs.doc
 create mode 100644 doc/tutorial-homography.doc
 create mode 100644 doc/tutorial-image-filtering.doc
 create mode 100644 doc/tutorial-install-fedora.doc
 create mode 100644 doc/tutorial-matching.doc
 create mode 100644 doc/tutorial-trace.doc
 create mode 100644 doc/tutorial-tracking-tt.doc
 create mode 100644 example/calibration/chessboard-01.png
 create mode 100644 example/calibration/chessboard-02.png
 create mode 100644 example/calibration/chessboard-03.png
 create mode 100644 example/calibration/chessboard-04.png
 create mode 100644 example/calibration/chessboard-05.png
 create mode 100644 example/calibration/circles-01.png
 create mode 100644 example/calibration/circles-02.png
 create mode 100644 example/calibration/circles-03.png
 create mode 100644 example/calibration/circles-04.png
 create mode 100644 example/calibration/circles-05.png
 delete mode 100644 example/servo-cycab/CMakeLists.txt
 delete mode 100644 example/servo-cycab/servoCycab.cpp
 delete mode 100644 example/servo-cycab/servoCycabBasic.cpp
 create mode 100644 example/tracking/templateTracker.cpp
 delete mode 100644 src/device/framegrabber/1394/vp1394Grabber.cpp
 delete mode 100644 src/device/framegrabber/1394/vp1394Grabber.h
 delete mode 100644 src/robot/real-robot/cycab/vpRobotCycab.cpp
 delete mode 100644 src/robot/real-robot/cycab/vpRobotCycab.h
 delete mode 100644 src/servo/vpAdaptativeGain.cpp
 delete mode 100644 src/servo/vpAdaptativeGain.h
 create mode 100644 src/tracking/mbt/hybrid/vpMbtEdgeKltXmlParser.cpp
 create mode 100644 src/tracking/mbt/hybrid/vpMbtEdgeKltXmlParser.h
 create mode 100644 src/tracking/mbt/vpMbXmlParser.cpp
 create mode 100644 src/tracking/mbt/vpMbXmlParser.h
 create mode 100644 src/tracking/template-tracker/ssd/vpTemplateTrackerSSD.cpp
 create mode 100644 src/tracking/template-tracker/ssd/vpTemplateTrackerSSD.h
 create mode 100644 src/tracking/template-tracker/ssd/vpTemplateTrackerSSDESM.cpp
 create mode 100644 src/tracking/template-tracker/ssd/vpTemplateTrackerSSDESM.h
 create mode 100644 src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardAdditional.cpp
 create mode 100644 src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardAdditional.h
 create mode 100644 src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardCompositional.cpp
 create mode 100644 src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardCompositional.h
 create mode 100644 src/tracking/template-tracker/ssd/vpTemplateTrackerSSDInverseCompositional.cpp
 create mode 100644 src/tracking/template-tracker/ssd/vpTemplateTrackerSSDInverseCompositional.h
 create mode 100644 src/tracking/template-tracker/tools/vpTemplateTrackerBSpline.cpp
 rename example/manual/image-manipulation/manGrab1394-1.cpp => src/tracking/template-tracker/tools/vpTemplateTrackerBSpline.h (51%)
 create mode 100644 src/tracking/template-tracker/tools/vpTemplateTrackerHeader.h
 create mode 100644 src/tracking/template-tracker/tools/vpTemplateTrackerTriangle.cpp
 create mode 100644 src/tracking/template-tracker/tools/vpTemplateTrackerTriangle.h
 create mode 100644 src/tracking/template-tracker/tools/vpTemplateTrackerZone.cpp
 create mode 100644 src/tracking/template-tracker/tools/vpTemplateTrackerZone.h
 create mode 100644 src/tracking/template-tracker/vpTemplateTracker.cpp
 create mode 100644 src/tracking/template-tracker/vpTemplateTracker.h
 create mode 100644 src/tracking/template-tracker/warp/vpTemplateTrackerWarp.cpp
 create mode 100644 src/tracking/template-tracker/warp/vpTemplateTrackerWarp.h
 create mode 100644 src/tracking/template-tracker/warp/vpTemplateTrackerWarpAffine.cpp
 create mode 100644 src/tracking/template-tracker/warp/vpTemplateTrackerWarpAffine.h
 create mode 100644 src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomography.cpp
 create mode 100644 src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomography.h
 create mode 100644 src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomographySL3.cpp
 create mode 100644 src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomographySL3.h
 create mode 100644 src/tracking/template-tracker/warp/vpTemplateTrackerWarpSRT.cpp
 create mode 100644 src/tracking/template-tracker/warp/vpTemplateTrackerWarpSRT.h
 create mode 100644 src/tracking/template-tracker/warp/vpTemplateTrackerWarpTranslation.cpp
 create mode 100644 src/tracking/template-tracker/warp/vpTemplateTrackerWarpTranslation.h
 create mode 100644 src/tracking/template-tracker/zncc/vpTemplateTrackerZNCC.cpp
 create mode 100644 src/tracking/template-tracker/zncc/vpTemplateTrackerZNCC.h
 create mode 100644 src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCForwardAdditional.cpp
 create mode 100644 src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCForwardAdditional.h
 create mode 100644 src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCInverseCompositional.cpp
 create mode 100644 src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCInverseCompositional.h
 create mode 100644 tutorial/computer-vision/tutorial-homography-from-points.cpp
 create mode 100644 tutorial/grabber/tutorial-grabber-1394-writer.cpp
 create mode 100644 tutorial/image/lena.jpeg
 create mode 100644 tutorial/image/lena.pgm
 create mode 100644 tutorial/image/lena.png
 create mode 100644 tutorial/image/tutorial-image-filter.cpp
 create mode 100644 tutorial/matching/CMakeLists.txt
 create mode 100644 tutorial/matching/tutorial-matching-surf-homography.cpp
 create mode 100755 tutorial/matching/tutorial-matching-surf.cpp
 create mode 100644 tutorial/matching/video-postcard.mpeg
 create mode 100644 tutorial/robot/pioneer/tutorial-simu-pioneer-continuous-gain-adaptive.cpp
 create mode 100644 tutorial/robot/pioneer/tutorial-simu-pioneer-continuous-gain-constant.cpp
 create mode 100644 tutorial/trace/CMakeLists.txt
 create mode 100644 tutorial/trace/tutorial-trace.cpp
 create mode 100644 tutorial/tracking/model-based/edges/teabox.wrl
 create mode 100644 tutorial/tracking/template-tracker/CMakeLists.txt
 create mode 100644 tutorial/tracking/template-tracker/pattern-template-tracker.pgm
 create mode 100644 tutorial/tracking/template-tracker/tutorial-template-tracker.cpp
 create mode 100644 tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-plotter-continuous-gain-adaptive.cpp
 create mode 100644 tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-plotter-gain-adaptive.cpp

diff --git a/CMakeHeaderFileList.cmake b/CMakeHeaderFileList.cmake
index 25ecc09d..5c8d6303 100644
--- a/CMakeHeaderFileList.cmake
+++ b/CMakeHeaderFileList.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeHeaderFileList.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeHeaderFileList.cmake 4617 2014-01-25 10:13:21Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -71,7 +71,6 @@ SET (HEADER_EXCEPTION
   )
 
 SET (HEADER_DEVICE_FRAMEGRABBER
-  device/framegrabber/1394/vp1394Grabber.h
   device/framegrabber/1394/vp1394TwoGrabber.h
   device/framegrabber/1394/vp1394CMUGrabber.h
   device/framegrabber/disk/vpDiskGrabber.h
@@ -166,7 +165,6 @@ SET (HEADER_ROBOT
   robot/real-robot/biclops/vpBiclops.h
   robot/real-robot/biclops/vpRobotBiclopsController.h
   robot/real-robot/biclops/vpRobotBiclops.h
-  robot/real-robot/cycab/vpRobotCycab.h
   robot/real-robot/pioneer/vpUnicycle.h
   robot/real-robot/pioneer/vpPioneer.h
   robot/real-robot/pioneer/vpPioneerPan.h
@@ -189,7 +187,6 @@ SET (HEADER_ROBOT
   )
 
 SET (HEADER_SERVO
-  servo/vpAdaptativeGain.h
   servo/vpAdaptiveGain.h
   servo/vpServoData.h
   servo/vpServoDisplay.h
@@ -265,7 +262,8 @@ SET (HEADER_TRACKING
   tracking/moving-edges/vpMeNurbs.h
 
   tracking/mbt/vpMbTracker.h
-  tracking/mbt/vpMbHiddenFaces.h 
+  tracking/mbt/vpMbHiddenFaces.h
+  tracking/mbt/vpMbXmlParser.h
   tracking/mbt/edge/vpMbtDistanceLine.h
   tracking/mbt/edge/vpMbtPolygon.h
   tracking/mbt/edge/vpMbtMeLine.h
@@ -273,11 +271,11 @@ SET (HEADER_TRACKING
   tracking/mbt/edge/vpMbtXmlParser.h
   tracking/mbt/edge/vpMbtDistanceCylinder.h
   tracking/mbt/hybrid/vpMbEdgeKltTracker.h
+  tracking/mbt/hybrid/vpMbtEdgeKltXmlParser.h
   tracking/mbt/klt/vpMbtKltPolygon.h
   tracking/mbt/klt/vpMbKltTracker.h
   tracking/mbt/klt/vpMbtKltXmlParser.h
 
-  tracking/moments/vpMomentObject.h
   tracking/moments/vpMomentAlpha.h
   tracking/moments/vpMomentBasic.h
   tracking/moments/vpMomentCentered.h
@@ -290,6 +288,26 @@ SET (HEADER_TRACKING
   tracking/moments/vpMomentObject.h
   tracking/moments/vpMomentAreaNormalized.h
   tracking/moments/vpMomentArea.h
+
+  tracking/template-tracker/vpTemplateTracker.h
+  tracking/template-tracker/ssd/vpTemplateTrackerSSD.h
+  tracking/template-tracker/ssd/vpTemplateTrackerSSDESM.h
+  tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardAdditional.h
+  tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardCompositional.h
+  tracking/template-tracker/ssd/vpTemplateTrackerSSDInverseCompositional.h
+  tracking/template-tracker/zncc/vpTemplateTrackerZNCC.h
+  tracking/template-tracker/zncc/vpTemplateTrackerZNCCForwardAdditional.h
+  tracking/template-tracker/zncc/vpTemplateTrackerZNCCInverseCompositional.h
+  tracking/template-tracker/tools/vpTemplateTrackerBSpline.h
+  tracking/template-tracker/tools/vpTemplateTrackerHeader.h
+  tracking/template-tracker/tools/vpTemplateTrackerZone.h
+  tracking/template-tracker/tools/vpTemplateTrackerTriangle.h
+  tracking/template-tracker/warp/vpTemplateTrackerWarp.h
+  tracking/template-tracker/warp/vpTemplateTrackerWarpAffine.h
+  tracking/template-tracker/warp/vpTemplateTrackerWarpHomography.h
+  tracking/template-tracker/warp/vpTemplateTrackerWarpHomographySL3.h
+  tracking/template-tracker/warp/vpTemplateTrackerWarpSRT.h
+  tracking/template-tracker/warp/vpTemplateTrackerWarpTranslation.h
   )
 
 SET (HEADER_VIDEO
@@ -322,26 +340,24 @@ SET (HEADER_VISUAL_FEATURE
   visual-feature/vpFeatureEllipse.h
   visual-feature/vpFeatureException.h
   visual-feature/vpFeatureLine.h
+  visual-feature/vpFeatureLuminance.h
+  visual-feature/vpFeatureMoment.h
+  visual-feature/vpFeatureMomentAlpha.h
+  visual-feature/vpFeatureMomentArea.h
+  visual-feature/vpFeatureMomentAreaNormalized.h
+  visual-feature/vpFeatureMomentBasic.h
+  visual-feature/vpFeatureMomentCentered.h
+  visual-feature/vpFeatureMomentCInvariant.h
+  visual-feature/vpFeatureMomentCommon.h
+  visual-feature/vpFeatureMomentDatabase.h
+  visual-feature/vpFeatureMomentGravityCenter.h
+  visual-feature/vpFeatureMomentGravityCenterNormalized.h
   visual-feature/vpFeaturePoint3D.h
   visual-feature/vpFeaturePoint.h
   visual-feature/vpFeaturePointPolar.h
   visual-feature/vpFeatureThetaU.h
   visual-feature/vpFeatureTranslation.h
   visual-feature/vpFeatureVanishingPoint.h
-  visual-feature/vpFeatureMoment.h  
-  visual-feature/vpFeatureMomentDatabase.h
-  visual-feature/vpFeatureMomentCommon.h
-  visual-feature/vpFeatureMomentAlpha.h
-  visual-feature/vpFeatureMomentGravityCenter.h
-  visual-feature/vpFeatureMomentBasic.h
-  visual-feature/vpFeatureMomentGravityCenterNormalized.h
-  visual-feature/vpFeatureMomentCentered.h
-  visual-feature/vpFeatureMomentCInvariant.h
-  visual-feature/vpFeatureMomentCommon.h
-  visual-feature/vpFeatureMomentAreaNormalized.h
-  visual-feature/vpFeatureMomentArea.h
-
-  visual-feature/vpFeatureLuminance.h
   visual-feature/vpFeatureSegment.h
   visual-feature/vpGenericFeature.h
   )
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f83aaf5a..9b44006e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4340 2013-07-23 20:11:12Z fspindle $
+# $Id: CMakeLists.txt 4678 2014-02-19 09:52:35Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -40,12 +40,12 @@
 
 PROJECT(VISP C CXX)
 
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
 
 #-----------------------------------------------------------------------------
 # VISP version number.  An even minor number corresponds to releases.
 SET(VISP_VERSION_MAJOR "2")
-SET(VISP_VERSION_MINOR "8")
+SET(VISP_VERSION_MINOR "9")
 SET(VISP_VERSION_PATCH "0")
 SET(VISP_VERSION "${VISP_VERSION_MAJOR}.${VISP_VERSION_MINOR}.${VISP_VERSION_PATCH}")
 # Package revision number
@@ -142,6 +142,20 @@ OPTION(BUILD_DEMOS "Build ViSP demos." ON)
 OPTION(BUILD_TUTORIAL "Build ViSP tutorial." ON)
 # Build deprecated functions as an option.
 OPTION(BUILD_DEPRECATED_FUNCTIONS "Build deprecated functionalities." ON)
+# Debug and trace cflags
+option(ACTIVATE_DEBUG_TRACE "Enable debug and trace printings" ON)
+
+if(ACTIVATE_DEBUG_TRACE)
+  list(APPEND VISP_DEFS "-DVP_TRACE")
+  list(APPEND VISP_DEFS "-DVP_DEBUG")
+else()
+  string(REPLACE "-DVP_TRACE" "" " " VISP_DEFS "${VISP_DEFS}")
+  string(REPLACE "-DVP_DEBUG" "" " " VISP_DEFS "${VISP_DEFS}")
+endif()
+
+if(MSVC)
+  option(BUILD_WITH_STATIC_CRT    "Enables use of staticaly linked CRT for staticaly linked ViSP" ON)
+endif()
 
 # Note that it is better to set MOMENTS_COMBINE_MATRICES to OFF
 OPTION(MOMENTS_COMBINE_MATRICES "Use linear combination of matrices instead of linear combination of moments to compute interaction matrices." OFF)
@@ -164,17 +178,12 @@ ENDIF()
 
 
 IF (UNIX)
-  FIND_PACKAGE(DC1394)
-  IF(DC1394_2_FOUND)
-    OPTION(USE_DC1394_2    "Compile ViSP with the libdc1394.2 library" ON)
-  ELSE(DC1394_2_FOUND)
-    SET(USE_DC1394_2 OFF)
-  ENDIF(DC1394_2_FOUND)
-  IF(DC1394_1_FOUND)
-    OPTION(USE_DC1394_1    "Compile ViSP with the libdc1394.1 library" ON)
-  ELSE(DC1394_1_FOUND)
-    SET(USE_DC1394_1 OFF)
-  ENDIF(DC1394_1_FOUND)
+  find_package(DC1394)
+  if(DC1394_FOUND)
+    option(USE_DC1394    "Compile ViSP with the libdc1394.2 library" ON)
+  else()
+    set(USE_DC1394 OFF)
+  endif()
 
   FIND_PACKAGE(V4L2)
   IF(V4L2_FOUND)
@@ -215,13 +224,6 @@ IF (UNIX)
     SET(USE_PTU46 OFF)
   ENDIF(PTU46_FOUND)
 
-  FIND_PACKAGE(CycabTk)
-  IF(CycabTk_FOUND)
-    OPTION(USE_CYCAB "Compile ViSP for Cycab car-like mobile robot at Irisa" OFF)
-  ELSE(CycabTk_FOUND)
-    SET(USE_CYCAB OFF)
-  ENDIF(CycabTk_FOUND)
- 
 ENDIF(UNIX)
 
 IF(WIN32)
@@ -278,16 +280,15 @@ ELSE(LAPACK_FOUND)
     SET(USE_LAPACK OFF)
 ENDIF(LAPACK_FOUND)
 
-IF(NOT USE_LAPACK)
-  FIND_PACKAGE(GSL)
-  IF(GSL_FOUND)
-    OPTION(USE_GSL    "Compile ViSP with the GSL library" ON)
-  ELSE(GSL_FOUND)
-    SET(USE_GSL OFF)
-  ENDIF(GSL_FOUND)
-ENDIF()
+#IF(NOT USE_LAPACK) # line removed since the template tracker needs gsl
+  find_package(GSL)
+  if(GSL_FOUND)
+    option(USE_GSL    "Compile ViSP with the GSL library" ON)
+  else()
+    set(USE_GSL OFF)
+  endif()
+#ENDIF()
 
-INCLUDE (${CMAKE_ROOT}/Modules/FindOpenGL.cmake)
 FIND_PACKAGE(OpenGL)
 FIND_PACKAGE(Coin3D)
 if (NOT COIN3D_FOUND)
@@ -509,8 +510,7 @@ endif()
 #SET(USE_GTK2       ON) # For Linux/OSX/Windows display with gtk-2.x
 #SET(USE_DIRECT3D   ON) # For Windows display
 #SET(USE_GDI        ON) # For Windows display
-#SET(USE_DC1394_1   ON) # For firewire grabber under Linux and OSX ?
-#SET(USE_DC1394_2   ON) # For firewire grabber under Linux and OSX ?
+#SET(USE_DC1394     ON) # For firewire grabber under Linux and OSX ?
 #SET(USE_V4L2       ON) # For Video 4 Linux 2 grabber under Linux
 #SET(USE_DIRECTSHOW ON) # For Windows direct show grabber
 #SET(USE_LIBJPEG    ON) # For reading jpeg files
@@ -594,8 +594,9 @@ ENDIF(NAS_FOUND)
 # Platform dependent
 #----------------------------------------------------------------------
 IF(WIN32 AND NOT CYGWIN)
-  LIST(APPEND VISP_DEFS "-DWIN32")
-  LIST(APPEND VISP_DEFS "-DGX") # To support exceptions
+  if(BUILD_DEPRECATED_FUNCTIONS)
+    list(APPEND VISP_DEFS "-DWIN32") # only for compat with previous versions
+  endif()
   CHECK_LIBRARY_EXISTS("winmm.lib" getch "" HAVE_LIBWINMM) # for timeGetTime()
   IF(HAVE_LIBWINMM)
     #MESSAGE("have winmm.lib")
@@ -616,26 +617,30 @@ IF(WIN32 AND NOT CYGWIN)
     if(HAVE_LIBWS2_32)
       #message("have ws2_32.lib")
       list(APPEND VISP_EXTERN_LIBRARIES "ws2_32.lib")
-    endif() 
+    endif()
   endif()
 ENDIF(WIN32 AND NOT CYGWIN)
 
-IF(UNIX)
-  LIST(APPEND VISP_DEFS "-DUNIX")
-  IF(APPLE)
-    LIST(APPEND VISP_DEFS "-DAPPLE")
-  ENDIF(APPLE)
-ENDIF(UNIX)
+if(UNIX)
+  if(BUILD_DEPRECATED_FUNCTIONS)
+    list(APPEND VISP_DEFS "-DUNIX")
+    if(APPLE)
+      list(APPEND VISP_DEFS "-DAPPLE")
+    endif()
+    if(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
+      list(APPEND VISP_DEFS "-DSOLARIS")
+    endif()
+  endif()
+endif()
 
-IF(UNIX)
-  INCLUDE(TestBigEndian)
+if(UNIX)
+  include(TestBigEndian)
   TEST_BIG_ENDIAN(BIGENDIAN)
   #SET(BIGENDIAN FALSE)
-ENDIF()
-
-IF(BIGENDIAN)
-  LIST(APPEND VISP_DEFS "-DBIGENDIAN")
-ENDIF(BIGENDIAN)
+  if(BIGENDIAN)
+    add_definitions("-DBIGENDIAN")
+  endif()
+endif()
 
 #--------------------------------------------------------------------
 # OpenMP
@@ -685,15 +690,32 @@ ENDIF(USE_LAPACK)
 #--------------------------------------------------------------------
 # X11 lib
 #--------------------------------------------------------------------
-SET(VISP_HAVE_X11_FOUND "no")  # for ViSP-third-party.txt
-IF(USE_X11)
-  MESSAGE(STATUS "X11 found")
-  SET(VISP_HAVE_X11 TRUE)  # for header vpConfig.h
-  SET(VISP_HAVE_X11_FOUND "yes")  # for ViSP-third-party.txt
-  LIST(APPEND VISP_EXTERN_INCLUDE_DIRS ${X11_INCLUDE_DIR})
-  LIST(APPEND VISP_EXTERN_LIBRARIES ${X11_LIBRARIES} -lm)
+set(VISP_HAVE_X11_FOUND "no")  # for ViSP-third-party.txt
+if(USE_X11)
+  message(STATUS "X11 found")
+  set(VISP_HAVE_X11 TRUE)  # for header vpConfig.h
+  set(VISP_HAVE_X11_FOUND "yes")  # for ViSP-third-party.txt
+  # try to found -lm requested on some platforms to link with X11
+  list(APPEND VISP_EXTERN_INCLUDE_DIRS ${X11_INCLUDE_DIR})
+  list(APPEND VISP_EXTERN_LIBRARIES ${X11_LIBRARIES})
+  find_library(M_LIBRARY NAMES m)
+  mark_as_advanced(M_LIBRARY)
+  if(M_LIBRARY)
+    list(APPEND VISP_EXTERN_LIBRARIES ${M_LIBRARY})
+  endif()
   #MESSAGE("X11: ${X11_LIBRARIES}")
-ENDIF(USE_X11)
+else()
+  # try to found -lsocket -lnsl requested for vpNetwork and vpSickLDMRS
+  find_library(SOCKET_LIBRARY NAMES socket)
+  find_library(NSL_LIBRARY NAMES nsl)
+  if (SOCKET_LIBRARY)
+    list(APPEND VISP_EXTERN_LIBRARIES ${SOCKET_LIBRARY})
+  endif()
+  if (NSL_LIBRARY)
+    list(APPEND VISP_EXTERN_LIBRARIES ${NSL_LIBRARY})
+  endif()
+  mark_as_advanced(SOCKET_LIBRARY NSL_LIBRARY)
+endif()
 
 
 #--------------------------------------------------------------------
@@ -743,7 +765,7 @@ IF(USE_OGRE)
     
     if (Boost_FOUND)
       # Set up referencing of Boost
-      LIST(APPEND VISP_DEFS "-DBOOST_ALL_NO_LIB")  
+      #LIST(APPEND VISP_DEFS "-DBOOST_ALL_NO_LIB")
       LIST(APPEND VISP_EXTERN_INCLUDE_DIRS ${Boost_INCLUDE_DIR})  
       LIST(APPEND VISP_EXTERN_LIBRARIES ${Boost_LIBRARIES})
     endif()
@@ -772,6 +794,19 @@ IF(USE_OGRE)
   SET(VISP_HAVE_OGRE_FOUND "yes")   # for ViSP-third-party.txt
   SET(VISP_HAVE_OGRE TRUE)          # for header vpConfig.h
 
+  # If Ogre media are not available we provide the minimal material to run the examples:
+  # - resources.cfg
+  # - plugins.cfg
+  # - media/materials/...
+  # - media/models/...
+  #
+  # We need to introduce OGRE_MEDIA_NOT_AVAILABLE to memorize when OGRE_MEDIA_DIR is not set.
+  # Because in that case, OGRE_MEDIA_DIR should be set first to VISP_HAVE_OGRE_RESOURCES_PATH
+  #  (for the "make all" case) then to VISP_INSTALL_DIR_OGRE_RESOURCES (for the "make install" case)
+  if(NOT OGRE_MEDIA_DIR)
+    set(OGRE_MEDIA_NOT_AVAILABLE "TRUE")
+  endif()
+
   # Try to search for an existing plugins.cfg file
   # Here we cannot use OGRE_PLUGIN_DIR_REL or OGRE_PLUGIN_DIR_DBG where
   # we may find an existing plugins.cfg file, since under Windows in these 
@@ -846,17 +881,34 @@ IF(USE_OGRE)
     NO_SYSTEM_ENVIRONMENT_PATH
   )
 
+  # Here we copy all the minimal media files
+  # - media/materials/...
+  # - media/models/...
+  if(OGRE_MEDIA_NOT_AVAILABLE)
+    file(COPY data/ogre-simulator/media DESTINATION ${VISP_BINARY_DIR}/data/ogre-simulator)
+  endif()
+
+
+  # Here we create a resources.cfg if it was not found
   IF(NOT VISP_HAVE_OGRE_RESOURCES_PATH)
     # we create a resources.cfg file for vpAROgre.cpp
     # case 1: normal case
+    #         If OGRE_MEDIA_DIR is not found, we set it to VISP_HAVE_OGRE_RESOURCES_PATH in order to use
+    #         the minimal requested media to run the examples
     #--------------
     SET(VISP_HAVE_OGRE_RESOURCES_PATH ${VISP_BINARY_DIR}/data/ogre-simulator)
+    if(OGRE_MEDIA_NOT_AVAILABLE)
+      set(OGRE_MEDIA_DIR ${VISP_HAVE_OGRE_RESOURCES_PATH}/media)
+    endif()
+
     CONFIGURE_FILE(
       ${VISP_CMAKE_MODULE_PATH}/resources.cfg.in
       ${VISP_HAVE_OGRE_RESOURCES_PATH}/resources.cfg
       IMMEDIATE @ONLY)
 
     # case 2: install or packaging case
+    #         If OGRE_MEDIA_DIR is not found, we set it to VISP_INSTALL_DIR_OGRE_RESOURCES in order to use
+    #         the minimal requested media to run the examples
     #--------------
     IF(UNIX)
       set(VISP_INSTALL_DIR_OGRE_RESOURCES "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/visp/data/ogre-simulator")
@@ -864,23 +916,47 @@ IF(USE_OGRE)
       set(VISP_INSTALL_DIR_OGRE_RESOURCES "${CMAKE_INSTALL_PREFIX}/data/ogre-simulator")
     ENDIF()
 
-    # install rule for resources.cfg:
-    IF(UNIX)
-      INSTALL(FILES
-        ${VISP_HAVE_OGRE_RESOURCES_PATH}/resources.cfg
+    if(OGRE_MEDIA_NOT_AVAILABLE)
+      set(OGRE_MEDIA_DIR ${VISP_INSTALL_DIR_OGRE_RESOURCES}/media)
+    endif()
+    CONFIGURE_FILE(
+      ${VISP_CMAKE_MODULE_PATH}/resources.cfg.in
+      ${VISP_BINARY_DIR}/install/resources.cfg
+      IMMEDIATE @ONLY)
+
+    # install rule for resources.cfg and Ogre media if they are not available:
+    if(UNIX)
+      install(FILES
+        ${VISP_BINARY_DIR}/install/resources.cfg
         DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/visp/data/ogre-simulator
         PERMISSIONS OWNER_READ GROUP_READ WORLD_READ OWNER_WRITE
         COMPONENT libraries
       )
-    ELSE()
-      INSTALL(FILES
-        ${VISP_HAVE_OGRE_RESOURCES_PATH}/resources.cfg
+      if(OGRE_MEDIA_NOT_AVAILABLE)
+        install(DIRECTORY
+          data/ogre-simulator/media
+          DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/visp/data/ogre-simulator
+          FILE_PERMISSIONS OWNER_READ GROUP_READ WORLD_READ OWNER_WRITE
+          COMPONENT libraries
+        )
+      endif()
+    else()
+      install(FILES
+        ${VISP_BINARY_DIR}/install/resources.cfg
         DESTINATION data/ogre-simulator
         PERMISSIONS OWNER_READ GROUP_READ WORLD_READ OWNER_WRITE
         COMPONENT libraries
       )
-    ENDIF()
-  ENDIF()
+      if(OGRE_MEDIA_NOT_AVAILABLE)
+        install(DIRECTORY
+          data/ogre-simulator/media
+          DESTINATION data/ogre-simulator
+          FILE_PERMISSIONS OWNER_READ GROUP_READ WORLD_READ OWNER_WRITE
+          COMPONENT libraries
+        )
+      endif()
+    endif()
+  endif()
   
   MARK_AS_ADVANCED(VISP_HAVE_OGRE_PLUGINS_PATH)
   MARK_AS_ADVANCED(VISP_HAVE_OGRE_RESOURCES_PATH)
@@ -914,9 +990,15 @@ IF(USE_COIN)
     IF(WIN32)
       LIST(APPEND VISP_DEFS "-DCOIN_DLL")
     ENDIF(WIN32)
-    LIST(APPEND VISP_EXTERN_INCLUDE_DIRS ${OPENGL_INCLUDE_DIR})
-    LIST(APPEND VISP_EXTERN_INCLUDE_DIRS ${COIN3D_INCLUDE_DIRS})  
-    LIST(APPEND VISP_EXTERN_LIBRARIES ${OPENGL_LIBRARIES})
+    LIST(APPEND VISP_EXTERN_INCLUDE_DIRS ${COIN3D_INCLUDE_DIRS})
+    # On OSX cmake 2.8 found OpenGL but OPENGL_INCLUDE_DIR was set to NOT_FOUND
+    # We add a test to be sure that the OPENGL vars exist.
+    if(OPENGL_INCLUDE_DIR)
+      list(APPEND VISP_EXTERN_INCLUDE_DIRS ${OPENGL_INCLUDE_DIR})
+    endif()
+    if(OPENGL_LIBRARIES)
+      list(APPEND VISP_EXTERN_LIBRARIES ${OPENGL_LIBRARIES})
+    endif()
 
     #MESSAGE("COIN3D_INCLUDE_DIRS = ${COIN3D_INCLUDE_DIRS}")
     #MESSAGE("COIN3D_LIBRARIES = ${COIN3D_LIBRARIES}")
@@ -1073,6 +1155,7 @@ IF(USE_LIBUSB_1)
  
     MESSAGE(STATUS "libusb-1.0 found")
  
+    LIST(APPEND VISP_EXTERN_INCLUDE_DIRS ${LIBUSB_1_INCLUDE_DIRS})
     LIST(APPEND VISP_EXTERN_LIBRARIES ${LIBUSB_1_LIBRARIES})
   ELSE()
     MESSAGE(STATUS "libusb-1.0 not found")
@@ -1089,7 +1172,7 @@ IF(USE_LIBFREENECT AND USE_LIBUSB_1 AND USE_PTHREAD)
     # The material is found. Check if libfreenect is an old version
     include(CheckCXXSourceCompiles)
     SET(CMAKE_REQUIRED_LIBRARIES ${LIBFREENECT_LIBRARIES} ${PTHREAD_LIBRARIES} ${LIBUSB_1_LIBRARIES})
-    SET(CMAKE_REQUIRED_INCLUDES ${LIBFREENECT_INCLUDE_DIRS} ${PTHREAD_INCLUDE_DIRS})
+    SET(CMAKE_REQUIRED_INCLUDES ${LIBFREENECT_INCLUDE_DIRS} ${PTHREAD_INCLUDE_DIRS} ${LIBUSB_1_INCLUDE_DIRS})
     CHECK_CXX_SOURCE_COMPILES("
       #include <libfreenect.hpp>
 
@@ -1168,21 +1251,100 @@ IF(USE_OPENCV)
     ENDIF(VISP_BUILD_SHARED_LIBS AND VISP_USE_MSVC)
     SET(VISP_HAVE_OPENCV  TRUE)  # for header vpConfig.h
     SET(VISP_HAVE_OPENCV_FOUND "yes")  # for ViSP-third-party.txt
-
+    # On win32 since OpenCV 2.4.7 we cannot use OpenCV_LIBS to set ViSP 3rd party libraries.
+    # Using OpenCV_LIBS works to build visp library, examples, demos and test thanks to the components, 
+	# but not tutorials that are stand alone Cmake project that use ViSP as a 3rd party.
+    # To be clear OpenCV_LIBS contains opencv_core and not c:\...\opencv_core248.lib full path as requested 
+	# to use ViSP. This was not the case with OpenCV 2.4.6.
+    # For the build of ViSP it works with OpenCV_LIBS: in that case thanks to opencv_core properties, CMake
+    # is able to find the real name and location of the libraries.
+    # But when ViSP is used as a 3rd party where it should import OpenCV libraries, it doesn't work with 
+	# OpenCV_LIBS.
+    # The solution here is to get the real name of OpenCV libraries thanks to the properties and link 
+	# with these names.
+	# An other way could be to include OpenCVConfig.cmake, but in that case, visp-config and visp.pc 
+	# will be not able to give the names of OpenCV libraries when used without CMake.
+	#message("OpenCV_LIB_COMPONENTS: ${OpenCV_LIB_COMPONENTS}")
+	#message("OpenCV_LIBS: ${OpenCV_LIBS}")
+	if(WIN32 AND OpenCV_LIB_COMPONENTS AND OpenCV_VERSION AND OpenCV_VERSION VERSION_GREATER 2.4.6)
+      foreach(component_ ${OpenCV_LIB_COMPONENTS})
+	    #message("component: ${component_}")
+		if(VISP_BUILD_SHARED_LIBS)
+          get_target_property(component_property_opt_ ${component_} IMPORTED_IMPLIB_RELEASE)
+          get_target_property(component_property_dbg_ ${component_} IMPORTED_IMPLIB_DEBUG)
+		  # particular case of opencv_ts that doesn't have an optimized implib
+		  if(NOT component_property_opt_)
+		    get_target_property(component_property_opt_ ${component_} IMPORTED_LOCATION_RELEASE)
+		  endif()
+		  # particular case of opencv_ts that doesn't have a debug implib
+		  if(NOT component_property_dbg_)
+		    get_target_property(component_property_dbg_ ${component_} IMPORTED_LOCATION_DEBUG)
+		  endif()
+		else()
+          get_target_property(component_property_opt_ ${component_} IMPORTED_LOCATION_RELEASE)
+          get_target_property(component_property_dbg_ ${component_} IMPORTED_LOCATION_DEBUG)
+		endif()
+		get_target_property(component_property_3rdparty_opt_ ${component_} IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE)
+		get_target_property(component_property_3rdparty_dbg_ ${component_} IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG)
+		#message("component_property_opt_: ${component_property_opt_}")
+		#message("component_property_dbg_: ${component_property_dbg_}")
+		#message("component_property_3rdparty_opt_: ${component_property_3rdparty_opt_}")
+		#message("component_property_3rdparty_dbg_: ${component_property_3rdparty_dbg_}")
+		if(component_property_opt_)
+		  list(APPEND VISP_EXTERN_LIBRARIES optimized ${component_property_opt_})
+		endif()
+		if(component_property_dbg_)
+		  list(APPEND VISP_EXTERN_LIBRARIES debug     ${component_property_dbg_})
+		endif()
+		#if(NOT component_property_opt_ AND NOT component_property_dbg_)
+		#  message("No implib for component ${component_}")
+		#endif()
+		foreach(3rdparty_opt_ ${component_property_3rdparty_opt_})
+		    list(FIND OpenCV_LIB_COMPONENTS ${3rdparty_opt_} 3rdparty_is_opencv_component_)
+			if(3rdparty_is_opencv_component_ LESS 0)
+			  #message("${3rdparty_opt_} is not an opencv component")
+		      get_target_property(3rdparty_opt_location_ ${3rdparty_opt_} IMPORTED_LOCATION_RELEASE)
+			  #message("3rdparty_opt_: ${3rdparty_opt_} location: ${3rdparty_opt_location_}")
+			  if(3rdparty_opt_location_)
+			    list(APPEND VISP_EXTERN_LIBRARIES optimized ${3rdparty_opt_location_})
+			  else()
+			    list(APPEND VISP_EXTERN_LIBRARIES ${3rdparty_opt_}) # should be a system dependency			
+			  endif()
+			endif()
+		endforeach()
+		foreach(3rdparty_dbg_ ${component_property_3rdparty_dbg_})
+		    list(FIND OpenCV_LIB_COMPONENTS ${3rdparty_dbg_} 3rdparty_is_opencv_component_)
+		    if(3rdparty_is_opencv_component_ LESS 0)
+			  get_target_property(3rdparty_dbg_location_ ${3rdparty_dbg_} IMPORTED_LOCATION_DEBUG)
+			  #message("3rdparty_dbg_: ${3rdparty_dbg_} location: ${3rdparty_dbg_location_}")
+			  if(3rdparty_dbg_location_)
+			    list(APPEND VISP_EXTERN_LIBRARIES debug ${3rdparty_dbg_location_})
+			  else()
+			    list(APPEND VISP_EXTERN_LIBRARIES ${3rdparty_dbg_}) # should be a system dependency			
+			  endif()
+			endif()
+		endforeach()
+      endforeach()
+    else()
+      # this should be an old OpenCV version that doesn't have the previous behavior
+      list(APPEND VISP_EXTERN_LIBRARIES ${OpenCV_LIBS})
+    endif()
     LIST(APPEND VISP_EXTERN_INCLUDE_DIRS ${OpenCV_INCLUDE_DIRS})
     LIST(APPEND VISP_EXTERN_LINK_DIR ${OpenCV_LIB_DIR})
-    LIST(APPEND VISP_EXTERN_LIBRARIES ${OpenCV_LIBS})
+    #LIST(APPEND VISP_EXTERN_LIBRARIES ${OpenCV_LIBS})
     #MESSAGE("OpenCV_INCLUDE_DIRS = ${OpenCV_INCLUDE_DIRS}")
     #MESSAGE("OpenCV_LIBS = ${OpenCV_LIBS}")
     #MESSAGE("OpenCV_LIB_DIR = ${OpenCV_LIB_DIR}")
     SET(VISP_HAVE_OPENCV_VERSION "(${OpenCV_VERSION_MAJOR}*65536 + ${OpenCV_VERSION_MINOR}*256 + ${OpenCV_VERSION_PATCH})") # for ViSP-third-party.txt
     #MESSAGE("VISP_HAVE_OPENCV_VERSION = ${VISP_HAVE_OPENCV_VERSION}")
+    #MESSAGE("VISP_EXTERN_LIBRARIES = ${VISP_EXTERN_LIBRARIES}")
 
     # additional check to see if opencv_nonfree module introduced in OpenCV 2.4 is available
     #message("OpenCV_VERSION = ${OpenCV_VERSION}")
     #message("OpenCV_NONFREE_FOUND: ${OPENCV_NONFREE_FOUND}")
-    if(${OpenCV_VERSION})
-      if(${OpenCV_VERSION} VERSION_LESS "2.4.2")
+    if(OpenCV_VERSION)
+      if(OpenCV_VERSION VERSION_LESS "2.4.2")
+        message(STATUS "OpenCV nonfree found")
         set(VISP_HAVE_OPENCV_NONFREE TRUE)  # for header vpConfig.h
       else() # Version is greater or equal to 2.4.0
         if(OPENCV_NONFREE_FOUND)
@@ -1193,6 +1355,7 @@ IF(USE_OPENCV)
         endif()
       endif()
     else()
+      message("OpenCV_VERSION is false")
       message(STATUS "OpenCV nonfree not found")
     endif()
   ELSE(OpenCV_FOUND)
@@ -1372,63 +1535,43 @@ ENDIF(USE_FFMPEG)
 # Specific hardware : framegrabbers and cameras
 #----------------------------------------------------------------------
 # default initialisation
-SET(VISP_HAVE_DC1394_1_FOUND "no")  # for ViSP-third-party.txt
 SET(VISP_HAVE_DC1394_2_FOUND "no")  # for ViSP-third-party.txt
 SET(VISP_HAVE_V4L2_FOUND "no")  # for ViSP-third-party.txt
 SET(VISP_HAVE_DIRECTSHOW_FOUND "no")  # for ViSP-third-party.txt
 
 # library for firewire cameras
-IF(USE_DC1394_1 OR USE_DC1394_2)
+IF(USE_DC1394)
   #FIND_PACKAGE(DC1394)
-  IF(DC1394_FOUND)
-    SET(VISP_HAVE_DC1394 TRUE) # for header vpConfig.h
-    IF(DC1394_2_FOUND AND USE_DC1394_2)
-      MESSAGE(STATUS "libdc1394-2.x found")
-      SET(VISP_HAVE_DC1394_2 TRUE) # for header vpConfig.h
-      SET(VISP_HAVE_DC1394_2_FOUND "yes")  # for ViSP-third-party.txt
-      IF(DC1394_CAMERA_ENUMERATE_FOUND)
-        SET(VISP_HAVE_DC1394_2_CAMERA_ENUMERATE TRUE) # for header vpConfig.h
-      ENDIF(DC1394_CAMERA_ENUMERATE_FOUND)
-      IF(DC1394_FIND_CAMERAS_FOUND)
-        SET(VISP_HAVE_DC1394_2_FIND_CAMERAS TRUE) # for header vpConfig.h
-      ENDIF(DC1394_FIND_CAMERAS_FOUND)
-      LIST(APPEND VISP_EXTERN_INCLUDE_DIRS ${DC1394_2_INCLUDE_DIRS})
-      LIST(APPEND VISP_EXTERN_LIBRARIES ${DC1394_2_LIBRARY})
-
-      #MESSAGE("DBG VISP_HAVE_DC1394_2= ${VISP_HAVE_DC1394_2}")
-    ELSE(DC1394_2_FOUND AND USE_DC1394_2)
-      MESSAGE(STATUS "libdc1394-2.x not found")
-      SET(VISP_HAVE_DC1394_2_FOUND "no")  # for ViSP-third-party.txt
-    ENDIF(DC1394_2_FOUND AND USE_DC1394_2)
-    
-    IF(DC1394_1_FOUND AND USE_DC1394_1)
-      MESSAGE(STATUS "libdc1394-1.x found")
-      SET(VISP_HAVE_DC1394_1 TRUE) # for header vpConfig.h
-      SET(VISP_HAVE_DC1394_1_FOUND "yes")  # for ViSP-third-party.txt
-      #MESSAGE("DBG VISP_HAVE_DC1394_1= ${VISP_HAVE_DC1394_1}")
-      LIST(APPEND VISP_EXTERN_INCLUDE_DIRS ${DC1394_1_INCLUDE_DIRS})
-      LIST(APPEND VISP_EXTERN_LIBRARIES ${DC1394_1_LIBRARY})
-    ELSE(DC1394_1_FOUND AND USE_DC1394_1)
-      MESSAGE(STATUS "libdc1394-1.x not found")
-      SET(VISP_HAVE_DC1394_1_FOUND "no")  # for ViSP-third-party.txt
-    ENDIF(DC1394_1_FOUND AND USE_DC1394_1)
+  if(DC1394_FOUND)
+    set(VISP_HAVE_DC1394 TRUE) # for header vpConfig.h
+
+    MESSAGE(STATUS "libdc1394-2.x found")
+    SET(VISP_HAVE_DC1394_2 TRUE) # for header vpConfig.h
+    SET(VISP_HAVE_DC1394_2_FOUND "yes")  # for ViSP-third-party.txt
+    IF(DC1394_CAMERA_ENUMERATE_FOUND)
+      SET(VISP_HAVE_DC1394_2_CAMERA_ENUMERATE TRUE) # for header vpConfig.h
+    ENDIF(DC1394_CAMERA_ENUMERATE_FOUND)
+    IF(DC1394_FIND_CAMERAS_FOUND)
+      SET(VISP_HAVE_DC1394_2_FIND_CAMERAS TRUE) # for header vpConfig.h
+    ENDIF(DC1394_FIND_CAMERAS_FOUND)
+    LIST(APPEND VISP_EXTERN_INCLUDE_DIRS ${DC1394_INCLUDE_DIRS})
+    LIST(APPEND VISP_EXTERN_LIBRARIES ${DC1394_LIBRARY})
+
+    #MESSAGE("DBG VISP_HAVE_DC1394_2= ${VISP_HAVE_DC1394_2}")
     #MESSAGE("DBG DC1394_INCLUDE_DIRS=${DC1394_INCLUDE_DIRS}")
     
-
     IF(APPLE)
       #SET(VISP_EXTERN_LIBRARIES ${VISP_EXTERN_LIBRARIES} IOkit "-framework Carbon")
       LIST(APPEND VISP_EXTERN_LIBRARIES "-framework IOkit -framework Carbon")
     ENDIF(APPLE)
-     #MESSAGE("DC1394_LIBRARIES = ${DC1394_LIBRARIES}")
+    #MESSAGE("DC1394_LIBRARIES = ${DC1394_LIBRARIES}")
   ELSE(DC1394_FOUND)
-    MESSAGE(STATUS "libdc1394-1.x not found")
     MESSAGE(STATUS "libdc1394-2.x not found")
-    SET(VISP_HAVE_DC1394_1_FOUND "no")  # for ViSP-third-party.txt
     SET(VISP_HAVE_DC1394_2_FOUND "no")  # for ViSP-third-party.txt
     #MESSAGE("Firewire dc1394 requested but not found. Turn off USE_DC1394!")
     # SET(USE_DC1394 OFF)
   ENDIF(DC1394_FOUND)
-ENDIF(USE_DC1394_1 OR USE_DC1394_2)
+ENDIF(USE_DC1394)
 
 # library for CMU1394 pan-tilt head
 IF(USE_CMU1394)
@@ -1604,7 +1747,6 @@ SET(VISP_HAVE_PTU46_FOUND "no")  # for ViSP-third-party.txt
 SET(VISP_HAVE_PIONEER_FOUND "no")  # for ViSP-third-party.txt
 SET(VISP_HAVE_VIPER650_FOUND "no")  # for ViSP-third-party.txt
 SET(VISP_HAVE_VIPER850_FOUND "no")  # for ViSP-third-party.txt
-SET(VISP_HAVE_CYCAB_FOUND "no")  # for ViSP-third-party.txt
 
 # library for Irisa's Afma4 cylindrical robot
 IF(USE_AFMA4)
@@ -1766,26 +1908,6 @@ IF(USE_PTU46)
   ENDIF(PTU46_FOUND)
 ENDIF(USE_PTU46)
 
-# library for Cycab car-like mobile robot
-IF(USE_CYCAB)
-  IF(CycabTk_FOUND)
-    IF(CycabTk_NEW_FOUND)
-      SET(VISP_HAVE_CYCABTK TRUE) # for header vpConfig.h
-    ENDIF(CycabTk_NEW_FOUND)
-    IF(CycabTk_OLD_FOUND)
-      SET(VISP_HAVE_CYCABTK_OLD TRUE) # for header vpConfig.h
-    ENDIF(CycabTk_OLD_FOUND)
-    SET(VISP_HAVE_CYCAB TRUE) # for header vpConfig.h
-    SET(VISP_HAVE_CYCAB_FOUND "yes")  # for ViSP-third-party.txt
-    LIST(APPEND VISP_EXTERN_INCLUDE_DIRS ${CycabTk_INCLUDE_DIRS})
-    LIST(APPEND VISP_EXTERN_LIBRARIES ${CycabTk_LIBRARIES})
-  ELSE(CycabTk_FOUND)
-    MESSAGE(STATUS "Cycab interface not found")
-    MESSAGE("Cycab requested but not found. Turn off USE_CYCAB option!")
-    SET(VISP_HAVE_CYCAB_FOUND "no")  # for ViSP-third-party.txt
-  ENDIF(CycabTk_FOUND)
-ENDIF(USE_CYCAB)
-
 # libraries for Pioneer mobile robots
 if(USE_ARIA)
   if(UNIX)
@@ -1865,8 +1987,7 @@ ENDIF(DOXYGEN_FOUND)
 # warnings. To suppress it, we add the _CRT_SECURE_NO_DEPRECATE preprocessor
 # definition
 if(WIN32 AND MSVC)
-  #MESSAGE("Add -D_CRT_SECURE_NO_DEPRECATE ")
-  list(APPEND VISP_DEFS "-D_CRT_SECURE_NO_DEPRECATE")
+  add_definitions("-D_CRT_SECURE_NO_DEPRECATE")
 endif()
 
 #MESSAGE("Definitions: ${VISP_DEFS}")
@@ -1874,7 +1995,7 @@ IF(VISP_DEFS)
   LIST(REMOVE_DUPLICATES VISP_DEFS)
 ENDIF(VISP_DEFS)
 #MESSAGE("Definitions without duplicates: ${VISP_DEFS}")
-ADD_DEFINITIONS(${VISP_DEFS})
+add_definitions(${VISP_DEFS})
 
 #----------------------------------------------------------------------
 # Add intern and third party include dirs
@@ -1896,6 +2017,14 @@ ENDIF(VISP_EXTERN_LINK_DIR)
 #MESSAGE("VISP_EXTERN_LINK_DIR without duplicates: ${VISP_EXTERN_LINK_DIR}")
 LINK_DIRECTORIES(${VISP_EXTERN_LINK_DIR})
 
+#----------------------------------------------------------------------
+# Use statically or dynamically linked CRT?
+# Default: dynamic
+#----------------------------------------------------------------------
+if(MSVC)
+   include(${VISP_CMAKE_MODULE_PATH}/VISPCRTLinkage.cmake)
+endif(MSVC)
+
 #----------------------------------------------------------------------
 # Cleanify the libraries list
 #----------------------------------------------------------------------
@@ -1903,14 +2032,6 @@ IF(APPLE)
   LIST(REMOVE_DUPLICATES VISP_EXTERN_LIBRARIES)
 ENDIF()
 
-#----------------------------------------------------------------------
-# Generate the package dependent visp-config shell script for projects which
-# are not using CMake:
-# Usage:
-#    visp-config --cflags ...
-#----------------------------------------------------------------------
-INCLUDE(${VISP_CMAKE_MODULE_PATH}/GenerateConfigScript.cmake)
-
 #----------------------------------------------------------------------
 # add distclean target
 #----------------------------------------------------------------------
@@ -1943,29 +2064,13 @@ ADD_CUSTOM_TARGET(uninstall
   "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
 
 #----------------------------------------------------------------------
-# Configure the file describing how to use ViSP. VISPConfig.cmake
-# is the main file configuring a CMake package.
-# . Exports build settings and dependencies for projects using ViSP as a
-#   third party project.
-# . Create and install files for simple use of FIND_PACKAGE(VISP)
-#   by other cmakified "user" projects and libraries depending on ViSP.
-#   (see "Mastering CMake", pp.72)
-# . To use ViSP in a third party project based on CMake:
-#   FIND_PACKAGE(VISP REQUIRED)
-#   IF(VISP_FOUND)
-#     INCLUDE(${VISP_USE_FILE})
-#   ENDIF(VISP_FOUND)
+# Configure the files that depend on the build <binary dir> or
+# installation <install dir> usage. This is the case of:
+# vpConfig.h
 #----------------------------------------------------------------------
 
-# Installation for ViSPConfig.cmake
-# case 1: <binary dir>/ViSPConfig.cmake for use with make
-# case 2: <install dir>/ViSPConfig.cmake for use with make install
-
-# case 1
+# case 1: when ViSP is build with make; files are used in <binary dir>
 #--------------
-
-set(VISP_ROOT_DIR_CONFIGCMAKE "${VISP_BINARY_DIR}")
-set(VISP_ROOT_DIR_CMAKE_CONFIGCMAKE "${VISP_BINARY_DIR}")
 set(VISP_ROOT_DIR_DATA_CONFIGCMAKE "${VISP_BINARY_DIR}")
 
 SET(VISP_SCENES_DIR ${VISP_ROOT_DIR_DATA_CONFIGCMAKE}/data/wireframe-simulator)
@@ -1976,32 +2081,11 @@ CONFIGURE_FILE(${VISP_SOURCE_DIR}/include/vpConfig.h.cmake
   ${VISP_INCLUDE_DIR}/vpConfig.h
 )
 
-CONFIGURE_FILE(
-  ${VISP_CMAKE_MODULE_PATH}/VISPConfig.cmake.in
-  ${VISP_BINARY_DIR}/VISPConfig.cmake
-  IMMEDIATE @ONLY)
-
-# Just to copy ./CMakeModule/VISPUse.cmake.in <binary dir>/UseVISP.cmake
-CONFIGURE_FILE(
-  ${VISP_CMAKE_MODULE_PATH}/VISPUse.cmake.in
-  ${VISP_BINARY_DIR}/VISPUse.cmake
-  IMMEDIATE @ONLY)
-
-# Generate the package dependent file include/visp/vpConfig.h
-CONFIGURE_FILE(${VISP_SOURCE_DIR}/ViSP-third-party.txt.cmake
-  ${VISP_BINARY_DIR}/ViSP-third-party.txt
-)
-
-
-# case 2
+# case 2: when ViSP is build with make install; files are used in <install dir>
 #--------------
-
-set(VISP_ROOT_DIR_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}")
 IF(UNIX)
-  set(VISP_ROOT_DIR_CMAKE_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/visp")
   set(VISP_ROOT_DIR_DATA_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/visp")
 ELSE()
-  set(VISP_ROOT_DIR_CMAKE_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}")
   set(VISP_ROOT_DIR_DATA_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}")
 ENDIF()
 
@@ -2021,24 +2105,6 @@ CONFIGURE_FILE(${VISP_SOURCE_DIR}/include/vpConfig.h.cmake
   ${VISP_BINARY_DIR}/install/vpConfig.h
 )
 
-CONFIGURE_FILE(
-  ${VISP_CMAKE_MODULE_PATH}/VISPConfig.cmake.in
-  ${VISP_BINARY_DIR}/install/VISPConfig.cmake
-  IMMEDIATE @ONLY)
-
-# Just to copy ./CMakeModule/VISPUse.cmake.in in <install dir>/UseVISP.cmake
-CONFIGURE_FILE(
-  ${VISP_CMAKE_MODULE_PATH}/VISPUse.cmake.in
-  ${VISP_BINARY_DIR}/install/VISPUse.cmake
-  IMMEDIATE @ONLY)
-
-# Export our build settings and library dependencies for use by the third party
-# user projects
-INCLUDE(${CMAKE_ROOT}/Modules/CMakeExportBuildSettings.cmake)
-CMAKE_EXPORT_BUILD_SETTINGS(
-  ${VISP_BINARY_DIR}/install/VISPBuildSettings.cmake
-  )
-
 # Install vpConfig.h that may differ from the one in include/visp
 INSTALL(FILES ${VISP_BINARY_DIR}/install/vpConfig.h
   DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/visp
@@ -2046,7 +2112,16 @@ INSTALL(FILES ${VISP_BINARY_DIR}/install/vpConfig.h
   COMPONENT headers
   )
 
+#----------------------------------------------------------------------
+# Generate the ViSP-third-party.txt information file
+#----------------------------------------------------------------------
+CONFIGURE_FILE(${VISP_SOURCE_DIR}/ViSP-third-party.txt.cmake
+  ${VISP_BINARY_DIR}/ViSP-third-party.txt
+)
+
+#----------------------------------------------------------------------
 # Create and install visp-config.1.gz man page
+#----------------------------------------------------------------------
 if(UNIX)
   FIND_PROGRAM(GZIP gzip)
   file(MAKE_DIRECTORY ${VISP_BINARY_DIR}/doc/man/man1)
@@ -2075,7 +2150,6 @@ IF(UNIX)
   INSTALL(FILES
     ${VISP_BINARY_DIR}/install/VISPUse.cmake
     ${VISP_BINARY_DIR}/install/VISPConfig.cmake
-    ${VISP_BINARY_DIR}/install/VISPBuildSettings.cmake
     DESTINATION ${CMAKE_INSTALL_LIBDIR}/visp
     PERMISSIONS OWNER_READ GROUP_READ WORLD_READ OWNER_WRITE
     COMPONENT libraries
@@ -2100,7 +2174,6 @@ ELSE()
   INSTALL(FILES
     ${VISP_BINARY_DIR}/install/VISPUse.cmake
     ${VISP_BINARY_DIR}/install/VISPConfig.cmake
-    ${VISP_BINARY_DIR}/install/VISPBuildSettings.cmake
     DESTINATION .
     PERMISSIONS OWNER_READ GROUP_READ WORLD_READ OWNER_WRITE
     COMPONENT libraries
@@ -2146,26 +2219,99 @@ if (BUILD_PACKAGE)
   include (${VISP_SOURCE_DIR}/CMakeModules/CPackConfig.cmake)
 endif(BUILD_PACKAGE)
 
+#----------------------------------------------------------------------
+# Propagation in src to build the library
+#----------------------------------------------------------------------
+add_subdirectory(src)
+
+#----------------------------------------------------------------------
+# Configure the file describing how to use ViSP. VISPConfig.cmake
+# is the main file configuring a CMake package.
+# . Exports build settings and dependencies for projects using ViSP as a
+#   third party project.
+# . Create and install files for simple use of FIND_PACKAGE(VISP)
+#   by other cmakified "user" projects and libraries depending on ViSP.
+#   (see "Mastering CMake", pp.72)
+# . To use ViSP in a third party project based on CMake:
+#   FIND_PACKAGE(VISP REQUIRED)
+#   IF(VISP_FOUND)
+#     INCLUDE(${VISP_USE_FILE})
+#   ENDIF(VISP_FOUND)
+#----------------------------------------------------------------------
+
+# Installation for ViSPConfig.cmake and VISPUse.cmake
+# case 1: <binary dir>/ViSPConfig.cmake for use with make
+# case 2: <install dir>/ViSPConfig.cmake for use with make install
+
+get_target_property(VISP_LIBNAME_DBG ${VISP_INTERN_LIBRARY} LOCATION_Debug)
+get_target_property(VISP_LIBNAME_OPT ${VISP_INTERN_LIBRARY} LOCATION_Release)
+
+get_filename_component(VISP_LIBNAME_DBG "${VISP_LIBNAME_DBG}" NAME)
+get_filename_component(VISP_LIBNAME_OPT "${VISP_LIBNAME_OPT}" NAME)
+
+#message("VISP_LIBNAME_DBG: ${VISP_LIBNAME_DBG}")
+#message("VISP_LIBNAME_OPT: ${VISP_LIBNAME_OPT}")
+
+# case 1
+#--------------
+set(VISP_ROOT_DIR_CONFIGCMAKE "${VISP_BINARY_DIR}")
+set(VISP_ROOT_DIR_CMAKE_CONFIGCMAKE "${VISP_BINARY_DIR}")
+CONFIGURE_FILE(
+  ${VISP_CMAKE_MODULE_PATH}/VISPConfig.cmake.in
+  ${VISP_BINARY_DIR}/VISPConfig.cmake
+  IMMEDIATE @ONLY)
+
+# Just to copy ./CMakeModule/VISPUse.cmake.in <binary dir>/UseVISP.cmake
+CONFIGURE_FILE(
+  ${VISP_CMAKE_MODULE_PATH}/VISPUse.cmake.in
+  ${VISP_BINARY_DIR}/VISPUse.cmake
+  IMMEDIATE @ONLY)
+
+# case 2
+#--------------
+set(VISP_ROOT_DIR_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}")
+if(UNIX)
+  set(VISP_ROOT_DIR_CMAKE_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/visp")
+else()
+  set(VISP_ROOT_DIR_CMAKE_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}")
+endif()
+CONFIGURE_FILE(
+  ${VISP_CMAKE_MODULE_PATH}/VISPConfig.cmake.in
+  ${VISP_BINARY_DIR}/install/VISPConfig.cmake
+  IMMEDIATE @ONLY)
+
+# Just to copy ./CMakeModule/VISPUse.cmake.in in <install dir>/UseVISP.cmake
+CONFIGURE_FILE(
+  ${VISP_CMAKE_MODULE_PATH}/VISPUse.cmake.in
+  ${VISP_BINARY_DIR}/install/VISPUse.cmake
+  IMMEDIATE @ONLY)
+
+#----------------------------------------------------------------------
+# Generate the package dependent visp-config shell script for projects which
+# are not using CMake:
+# Usage:
+#    visp-config --cflags ...
+#----------------------------------------------------------------------
+INCLUDE(${VISP_CMAKE_MODULE_PATH}/GenerateConfigScript.cmake)
 
 #----------------------------------------------------------------------
-# Propagation in sub dirs
+# Propagation in sub dirs to build demo, example, test, tutorial
 #----------------------------------------------------------------------
-SUBDIRS(src)
 if(BUILD_DEMOS)
-  subdirs(demo)
+  add_subdirectory(demo)
 endif()
 if(BUILD_EXAMPLES)
-  subdirs(example)
+  add_subdirectory(example)
 endif()
 if(BUILD_TUTORIAL)
   set(VISP_DIR ${PROJECT_BINARY_DIR})
   mark_as_advanced(VISP_DIR)
   mark_as_advanced(VISP_INCLUDE_DIRS)
   mark_as_advanced(VISP_LIBRARY_DIRS)
-  subdirs(tutorial)
+  add_subdirectory(tutorial)
 endif()
 
-IF(BUILD_TESTING)
+if(BUILD_TESTING)
   #
   # Test coverage specific code
   #
@@ -2184,5 +2330,5 @@ IF(BUILD_TESTING)
     SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ftest-coverage -fprofile-arcs")
   ENDIF(BUILD_TEST_COVERAGE)
 
-  SUBDIRS(test)
-ENDIF(BUILD_TESTING)
+  add_subdirectory(test)
+endif(BUILD_TESTING)
diff --git a/CMakeModules/AddExtraCompilationFlags.cmake b/CMakeModules/AddExtraCompilationFlags.cmake
index f496f28c..c75a6940 100644
--- a/CMakeModules/AddExtraCompilationFlags.cmake
+++ b/CMakeModules/AddExtraCompilationFlags.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: AddExtraCompilationFlags.cmake 4308 2013-07-08 08:47:09Z fspindle $
+# $Id: AddExtraCompilationFlags.cmake 4608 2014-01-21 16:37:58Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -146,6 +146,12 @@ MACRO(ADD_EXTRA_COMPILATION_FLAGS)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
   endif()
 
+  if(UNIX)
+    if(CMAKE_COMPILER_IS_GNUCXX OR CV_ICC)
+      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
+    endif()
+  endif()
+
   # Remove duplicates compilation flags
   separate_arguments(CMAKE_CXX_FLAGS)
   list(REMOVE_DUPLICATES CMAKE_CXX_FLAGS)
diff --git a/CMakeModules/CPackConfig.cmake b/CMakeModules/CPackConfig.cmake
index 85cf0c3e..cb4e00d1 100644
--- a/CMakeModules/CPackConfig.cmake
+++ b/CMakeModules/CPackConfig.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CPackConfig.cmake 4335 2013-07-23 09:53:54Z fspindle $
+# $Id: CPackConfig.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/CPackConfigDeb.cmake b/CMakeModules/CPackConfigDeb.cmake
index 729f7113..b7aaa400 100644
--- a/CMakeModules/CPackConfigDeb.cmake
+++ b/CMakeModules/CPackConfigDeb.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CPackConfigDeb.cmake 4132 2013-02-11 21:04:12Z fspindle $
+# $Id: CPackConfigDeb.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/CPackConfigNsis.cmake b/CMakeModules/CPackConfigNsis.cmake
index dfd71e2f..9ccb97cd 100644
--- a/CMakeModules/CPackConfigNsis.cmake
+++ b/CMakeModules/CPackConfigNsis.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CPackConfigNsis.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CPackConfigNsis.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/CPackConfigRpm.cmake b/CMakeModules/CPackConfigRpm.cmake
index ca677cde..92d76170 100644
--- a/CMakeModules/CPackConfigRpm.cmake
+++ b/CMakeModules/CPackConfigRpm.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CPackConfigRpm.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CPackConfigRpm.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindARIA.cmake b/CMakeModules/FindARIA.cmake
index 3de03f21..e3c32aa1 100644
--- a/CMakeModules/FindARIA.cmake
+++ b/CMakeModules/FindARIA.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindARIA.cmake 4288 2013-06-27 11:56:18Z fspindle $
+# $Id: FindARIA.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindBICLOPS.cmake b/CMakeModules/FindBICLOPS.cmake
index 754b4827..c5fa981f 100644
--- a/CMakeModules/FindBICLOPS.cmake
+++ b/CMakeModules/FindBICLOPS.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindBICLOPS.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindBICLOPS.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindCALINUX.cmake b/CMakeModules/FindCALINUX.cmake
index 617dcfbd..19d58d05 100644
--- a/CMakeModules/FindCALINUX.cmake
+++ b/CMakeModules/FindCALINUX.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindCALINUX.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindCALINUX.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindCMU1394.cmake b/CMakeModules/FindCMU1394.cmake
index 09a2cbff..a01b813a 100644
--- a/CMakeModules/FindCMU1394.cmake
+++ b/CMakeModules/FindCMU1394.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindCMU1394.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindCMU1394.cmake 4603 2014-01-21 13:40:58Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -52,22 +52,40 @@ if(WIN32)
     )
   #MESSAGE("DBG CMU1394_INCLUDE_DIR=${CMU1394_INCLUDE_DIR}")  
   
-  FIND_LIBRARY(CMU1394_LIBRARY_DEBUG
-    NAMES 1394camerad
-    PATHS 
-    $ENV{CMU1394_HOME}/lib
-	"C:/Program Files (x86)/CMU/1394Camera/lib"
-	"C:/Program Files/CMU/1394Camera/lib"
-    )
-  #MESSAGE("DBG CMU1394_LIBRARY_DEBUG=${CMU1394_LIBRARY_DEBUG}")
+  if(CMAKE_CL_64)
+    FIND_LIBRARY(CMU1394_LIBRARY_DEBUG
+      NAMES 1394camerad
+      PATHS 
+      $ENV{CMU1394_HOME}/lib64/x64
+	  "C:/Program Files (x86)/CMU/1394Camera/lib64/x64"
+	  "C:/Program Files/CMU/1394Camera/lib64/x64"
+      )
   
-  FIND_LIBRARY(CMU1394_LIBRARY_RELEASE
-    NAMES 1394camera
-    PATHS 
-    $ENV{CMU1394_HOME}/lib
-	"C:/Program Files (x86)/CMU/1394Camera/lib"
-	"C:/Program Files/CMU/1394Camera/lib"
-    )
+    FIND_LIBRARY(CMU1394_LIBRARY_RELEASE
+      NAMES 1394camera
+      PATHS 
+      $ENV{CMU1394_HOME}/lib64/x64
+	  "C:/Program Files (x86)/CMU/1394Camera/lib64/x64"
+	  "C:/Program Files/CMU/1394Camera/lib64/x64"
+      )
+  else()
+    FIND_LIBRARY(CMU1394_LIBRARY_DEBUG
+      NAMES 1394camerad
+      PATHS 
+      $ENV{CMU1394_HOME}/lib
+	  "C:/Program Files (x86)/CMU/1394Camera/lib"
+	  "C:/Program Files/CMU/1394Camera/lib"
+      )
+  
+    FIND_LIBRARY(CMU1394_LIBRARY_RELEASE
+      NAMES 1394camera
+      PATHS 
+      $ENV{CMU1394_HOME}/lib
+	  "C:/Program Files (x86)/CMU/1394Camera/lib"
+	  "C:/Program Files/CMU/1394Camera/lib"
+      )
+  endif()
+  #MESSAGE("DBG CMU1394_LIBRARY_DEBUG=${CMU1394_LIBRARY_DEBUG}")
   #MESSAGE("DBG CMU1394_LIBRARY_RELEASE=${CMU1394_LIBRARY_RELEASE}")
 
   set(CMU1394_LIBRARIES "")
diff --git a/CMakeModules/FindCPP11.cmake b/CMakeModules/FindCPP11.cmake
index 4e45c223..69001799 100644
--- a/CMakeModules/FindCPP11.cmake
+++ b/CMakeModules/FindCPP11.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindCPP11.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindCPP11.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindCycabTk.cmake b/CMakeModules/FindCycabTk.cmake
deleted file mode 100644
index 6eac6c5b..00000000
--- a/CMakeModules/FindCycabTk.cmake
+++ /dev/null
@@ -1,146 +0,0 @@
-#############################################################################
-#
-# $Id: FindCycabTk.cmake 4056 2013-01-05 13:04:42Z fspindle $
-#
-# This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
-# 
-# This software is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# ("GPL") version 2 as published by the Free Software Foundation.
-# See the file LICENSE.txt at the root directory of this source
-# distribution for additional information about the GNU GPL.
-#
-# For using ViSP with software that can not be combined with the GNU
-# GPL, please contact INRIA about acquiring a ViSP Professional 
-# Edition License.
-#
-# See http://www.irisa.fr/lagadic/visp/visp.html for more information.
-# 
-# This software was developed at:
-# INRIA Rennes - Bretagne Atlantique
-# Campus Universitaire de Beaulieu
-# 35042 Rennes Cedex
-# France
-# http://www.irisa.fr/lagadic
-#
-# If you have questions regarding the use of this file, please contact
-# INRIA at visp@inria.fr
-# 
-# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Description:
-# Try to find CycabTk toolkit to control the Cycab car-like mobile robot.
-# Once run this will define: 
-#
-# CycabTk_FOUND
-# CycabTk_INCLUDE_DIRS
-# CycabTk_LIBRARIES
-#
-# Additional var set when the new version of cycabtk exists (to use)
-# CycabTk_NEW_FOUND
-# CycabTk_NEW_INCLUDE_DIRS
-# CycabTk_NEW_LIBRARIES
-#
-# Additional var set when the old version of cycabtk exists (obsolete)
-# CycabTk_OLD_FOUND
-# CycabTk_OLD_INCLUDE_DIRS
-# CycabTk_OLD_LIBRARIES
-#
-# Authors:
-# Fabien Spindler
-#
-#############################################################################
-
-#
-# check first if the old version of cycabtk exists
-# This old version is to use with the Syndex base low level control of the Cycab
-# running on cycab-hf1 computer
-#
-FIND_PATH(CycabTk_OLD_INCLUDE_DIR EtherCycab/EtherCycab.hpp
-  $ENV{CycabTk_OLD_HOME}/include
-  $ENV{HOME}/soft/Cycab/third-party/cycabtk-old/cycabtk-old/include
-  /local/fspindle/soft/Cycab/third-party/cycabtk-old/cycabtk-old/include
-)
-#MESSAGE("DBG CycabTk_OLD_INCLUDE_DIR=${CycabTk_OLD_INCLUDE_DIR}")  
-
-FIND_LIBRARY(CycabTk_OLD_LIBRARY
-  NAMES cycabtk
-  PATHS 
-  $ENV{CycabTk_OLD_HOME}/lib
-  $ENV{HOME}/soft/Cycab/third-party/cycabtk-old/cycabtk-old/lib
-  /local/fspindle/soft/Cycab/third-party/cycabtk-old/cycabtk-old/lib
-)
-#MESSAGE("DBG CycabTk_OLD_LIBRARY=${CycabTk_OLD_LIBRARY}")
-
-
-IF(CycabTk_OLD_INCLUDE_DIR AND CycabTk_OLD_LIBRARY)
-  SET(CycabTk_OLD_FOUND TRUE)
-  SET(CycabTk_OLD_INCLUDE_DIRS ${CycabTk_OLD_INCLUDE_DIR})
-  SET(CycabTk_OLD_LIBRARIES ${CycabTk_OLD_LIBRARY})
-ELSE(CycabTk_OLD_INCLUDE_DIR AND CycabTk_OLD_LIBRARY)
-  SET(CycabTk_OLD_FOUND FALSE)
-ENDIF(CycabTk_OLD_INCLUDE_DIR AND CycabTk_OLD_LIBRARY)
-
-#
-# check secondly if the new version of cycabtk exists
-# This new version is to use with the C base low level control of the Cycab
-# throw the Peak CAN dongle
-#
-# --- Check library dependency
-include(FindPkgConfig)
-	
-set( Boost_USE_MULTITHREADED ON )
-find_package( Boost COMPONENTS serialization)
-
-FIND_LIBRARY(HUGR_LIBRARY
-  NAMES hugr
-  PATHS 
-  /usr/lib
-  /usr/local/lib
-)
-
-IF(Boost_SERIALIZATION_FOUND AND HUGR_LIBRARY)
-  SET(CycabTk_NEW_FOUND TRUE)
-  SET(CycabTk_NEW_LIBRARIES ${HUGR_LIBRARY} ${Boost_SERIALIZATION_LIBRARIES})
-ELSE(Boost_SERIALIZATION_FOUND AND HUGR_LIBRARY)
-  SET(CycabTk_NEW_FOUND FALSE)
-ENDIF(Boost_SERIALIZATION_FOUND AND HUGR_LIBRARY)
-
-#MESSAGE("CycabTk new: ${CycabTk_NEW_FOUND} old: ${CycabTk_OLD_FOUND}")
-
-IF(CycabTk_NEW_FOUND AND CycabTk_OLD_FOUND)
-  OPTION(USE_CYCAB_WITH_OLD_CYCABTK "Use the old and obsolete CycabTk" FALSE)
-ENDIF(CycabTk_NEW_FOUND AND CycabTk_OLD_FOUND)
-
-IF(USE_CYCAB_WITH_OLD_CYCABTK)
-  # either old or new cycabtk is detected
-  SET(CycabTk_FOUND TRUE)
-  SET(CycabTk_NEW_FOUND FALSE)
-  SET(CycabTk_INCLUDE_DIRS ${CycabTk_OLD_INCLUDE_DIRS})
-  SET(CycabTk_LIBRARIES ${CycabTk_OLD_LIBRARIES})
-ELSE(USE_CYCAB_WITH_OLD_CYCABTK)
-  IF(CycabTk_NEW_FOUND)
-    SET(CycabTk_FOUND TRUE)
-    SET(CycabTk_OLD_FOUND FALSE)
-    SET(CycabTk_LIBRARIES ${CycabTk_NEW_LIBRARIES})
-  ELSE(CycabTk_NEW_FOUND)
-    IF(CycabTk_OLD_FOUND)
-      SET(CycabTk_FOUND TRUE)
-      SET(CycabTk_INCLUDE_DIRS ${CycabTk_OLD_INCLUDE_DIRS})
-      SET(CycabTk_LIBRARIES ${CycabTk_OLD_LIBRARIES})
-    ENDIF(CycabTk_OLD_FOUND)
-  ENDIF(CycabTk_NEW_FOUND)
-ENDIF(USE_CYCAB_WITH_OLD_CYCABTK)
-
-MARK_AS_ADVANCED(
-  CycabTk_INCLUDE_DIR
-  CycabTk_LIBRARIES
-  CycabTk_NEW_INCLUDE_DIR
-  CycabTk_NEW_LIBRARIES
-  CycabTk_OLD_INCLUDE_DIR
-  CycabTk_OLD_LIBRARY
-  CycabTk_OLD_LIBRARIES
-  HUGR_LIBRARY
-)
\ No newline at end of file
diff --git a/CMakeModules/FindDC1394.cmake b/CMakeModules/FindDC1394.cmake
index 797a7545..01b4db77 100644
--- a/CMakeModules/FindDC1394.cmake
+++ b/CMakeModules/FindDC1394.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindDC1394.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindDC1394.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -36,15 +36,8 @@
 # Once run this will define: 
 #
 # DC1394_FOUND
-# DC1394_1_FOUND
-# DC1394_2_FOUND
-# DC1394_VERSION
 # DC1394_INCLUDE_DIRS
-# DC1394_1_INCLUDE_DIRS
-# DC1394_2_INCLUDE_DIRS
 # DC1394_LIBRARIES
-# DC1394_1_LIBRARY
-# DC1394_2_LIBRARY
 #
 # The two defines below are only useful to compile with libdc1394-2.x. In
 # that case DC1394_VERSION=2. Since the libdc1394-2.x API is not stable, we 
@@ -64,53 +57,24 @@
 IF(NOT UNIX)
   # MESSAGE("FindDC1394.cmake: libdc1394 only available for Unix.")
   SET(DC1394_FOUND FALSE)
-ELSE(NOT UNIX)
-# Search for libdc1394-1.x
-  
-  FIND_PATH(DC1394_1_INCLUDE_DIR libdc1394/dc1394_control.h
-    $ENV{DC1394_HOME}/include
-    $ENV{DC1394_DIR}/include
-    /usr/include )
-#MESSAGE("DBG DC1394_1_INCLUDE_DIR=${DC1394_1_INCLUDE_DIR}")
-
-  FIND_LIBRARY(DC1394_1_LIBRARY
-    NAMES dc1394_control
-    PATHS
-    $ENV{DC1394_HOME}/lib
-    $ENV{DC1394_DIR}/lib
-    /usr/lib
-    )
-#MESSAGE("DBG DC1394_1_LIBRARY=${DC1394_LIBRARY}")
-
-  IF(DC1394_1_LIBRARY AND DC1394_1_INCLUDE_DIR)
-    SET(DC1394_FOUND TRUE)
-    SET(DC1394_1_FOUND TRUE)
-    SET(DC1394_VERSION 1)
-    SET(DC1394_LIBRARIES ${DC1394_1_LIBRARY})
-    SET(DC1394_1_INCLUDE_DIRS ${DC1394_1_INCLUDE_DIR})
-    SET(DC1394_INCLUDE_DIRS ${DC1394_1_INCLUDE_DIRS})
-  ELSE(DC1394_1_LIBRARY AND DC1394_1_INCLUDE_DIR)
-    SET(DC1394_FOUND FALSE)
-    SET(DC1394_1_FOUND FALSE)
-  ENDIF(DC1394_1_LIBRARY AND DC1394_1_INCLUDE_DIR)
-  
+ELSE(NOT UNIX)  
   # Search for libdc1394-2.x
-  FIND_PATH(DC1394_2_INCLUDE_DIR dc1394/control.h
+  FIND_PATH(DC1394_INCLUDE_DIR dc1394/control.h
     $ENV{DC1394_HOME}/include
     $ENV{DC1394_DIR}/include
     /usr/include )
-  #MESSAGE("DBG DC1394_2_INCLUDE_DIR=${DC1394_2_INCLUDE_DIR}")  
+  #MESSAGE("DBG DC1394_INCLUDE_DIR=${DC1394_INCLUDE_DIR}")  
 
-  FIND_LIBRARY(DC1394_2_LIBRARY
+  FIND_LIBRARY(DC1394_LIBRARY
     NAMES dc1394
     PATHS 
     $ENV{DC1394_HOME}/lib
     $ENV{DC1394_DIR}/lib
     /usr/lib
     )
-  #MESSAGE("DBG DC1394_2_LIBRARY=${DC1394_2_LIBRARY}")
+  #MESSAGE("DBG DC1394_LIBRARY=${DC1394_LIBRARY}")
 
-  IF(DC1394_2_LIBRARY AND DC1394_2_INCLUDE_DIR)
+  IF(DC1394_LIBRARY AND DC1394_INCLUDE_DIR)
 
     # Since the libdc1394-2.x API is not stable, try to compile a
     # sample code to determine if we have to use dc1394_find_cameras() or
@@ -119,8 +83,8 @@ ELSE(NOT UNIX)
 
     include(CheckCXXSourceCompiles)
 	
-    SET(CMAKE_REQUIRED_LIBRARIES ${DC1394_2_LIBRARY})
-    SET(CMAKE_REQUIRED_INCLUDES ${DC1394_2_INCLUDE_DIR})
+    SET(CMAKE_REQUIRED_LIBRARIES ${DC1394_LIBRARY})
+    SET(CMAKE_REQUIRED_INCLUDES ${DC1394_INCLUDE_DIR})
 	
     CHECK_CXX_SOURCE_COMPILES("
       #include <dc1394/control.h>
@@ -153,28 +117,23 @@ ELSE(NOT UNIX)
     ENDIF(NOT DC1394_CAMERA_ENUMERATE_FOUND)
 
     IF(NOT DC1394_CAMERA_ENUMERATE_FOUND AND NOT DC1394_FIND_CAMERAS_FOUND)
-       SET(DC1394_2_FOUND FALSE)
+       SET(DC1394_FOUND FALSE)
        MESSAGE("libdc1394-2.x found but not compatible with ViSP...")
     ELSE(NOT DC1394_CAMERA_ENUMERATE_FOUND AND NOT DC1394_FIND_CAMERAS_FOUND)
        SET(DC1394_FOUND TRUE)
-       SET(DC1394_2_FOUND TRUE)
     ENDIF(NOT DC1394_CAMERA_ENUMERATE_FOUND AND NOT DC1394_FIND_CAMERAS_FOUND)
 
-    SET(DC1394_VERSION 2)
-    SET(DC1394_LIBRARIES ${DC1394_2_LIBRARY})
-    SET(DC1394_2_INCLUDE_DIRS ${DC1394_2_INCLUDE_DIR})
-    SET(DC1394_INCLUDE_DIRS ${DC1394_2_INCLUDE_DIRS})
-  ENDIF(DC1394_2_LIBRARY AND DC1394_2_INCLUDE_DIR)
+    SET(DC1394_LIBRARIES ${DC1394_LIBRARY})
+    SET(DC1394_INCLUDE_DIRS ${DC1394_INCLUDE_DIR})
+  ENDIF(DC1394_LIBRARY AND DC1394_INCLUDE_DIR)
   
 
 
   ## --------------------------------
 
   MARK_AS_ADVANCED(
-    DC1394_1_LIBRARY
-    DC1394_1_INCLUDE_DIR
-    DC1394_2_LIBRARY
-    DC1394_2_INCLUDE_DIR
+    DC1394_LIBRARY
+    DC1394_INCLUDE_DIR
     DC1394_INCLUDE_DIR
     DC1394_LIBRARIES
     DC1394_LIBRARY
diff --git a/CMakeModules/FindDIRECT3D.cmake b/CMakeModules/FindDIRECT3D.cmake
index f6bb4a4f..18eb6a17 100755
--- a/CMakeModules/FindDIRECT3D.cmake
+++ b/CMakeModules/FindDIRECT3D.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindDIRECT3D.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindDIRECT3D.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindDIRECTSHOW.cmake b/CMakeModules/FindDIRECTSHOW.cmake
index 7d3d6260..95ecea8e 100644
--- a/CMakeModules/FindDIRECTSHOW.cmake
+++ b/CMakeModules/FindDIRECTSHOW.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindDIRECTSHOW.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindDIRECTSHOW.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindDL.cmake b/CMakeModules/FindDL.cmake
index 62b57046..f62ab6b0 100644
--- a/CMakeModules/FindDL.cmake
+++ b/CMakeModules/FindDL.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindDL.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindDL.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindFFMPEG.cmake b/CMakeModules/FindFFMPEG.cmake
index 017bfc35..9d6c9b32 100644
--- a/CMakeModules/FindFFMPEG.cmake
+++ b/CMakeModules/FindFFMPEG.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindFFMPEG.cmake 4160 2013-03-12 08:34:49Z fspindle $
+# $Id: FindFFMPEG.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindGDI.cmake b/CMakeModules/FindGDI.cmake
index c39a3e1c..4bb65bff 100644
--- a/CMakeModules/FindGDI.cmake
+++ b/CMakeModules/FindGDI.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindGDI.cmake 4293 2013-07-01 16:05:01Z fspindle $
+# $Id: FindGDI.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -107,6 +107,7 @@ IF(WIN32)
                    "C:/Program Files/Microsoft SDKs/Windows/v7.0A/Lib"
                    "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib"
                    "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1/Lib"
+                   "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib"
                    "C:/Program Files/Microsoft Platform SDK/Lib"
                    "C:/DXSDK/Include/Lib"
                    "C:/Program Files/Microsoft SDKs/Windows/v6.0a/Lib"
diff --git a/CMakeModules/FindGSL.cmake b/CMakeModules/FindGSL.cmake
index 406888c7..adecf198 100644
--- a/CMakeModules/FindGSL.cmake
+++ b/CMakeModules/FindGSL.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindGSL.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindGSL.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindICONV.cmake b/CMakeModules/FindICONV.cmake
index 23579cf1..b460dc70 100755
--- a/CMakeModules/FindICONV.cmake
+++ b/CMakeModules/FindICONV.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindICONV.cmake 4160 2013-03-12 08:34:49Z fspindle $
+# $Id: FindICONV.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindIRISA.cmake b/CMakeModules/FindIRISA.cmake
index fdb37f33..01f72099 100644
--- a/CMakeModules/FindIRISA.cmake
+++ b/CMakeModules/FindIRISA.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindIRISA.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindIRISA.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindLAPACK_C.cmake b/CMakeModules/FindLAPACK_C.cmake
index 5deff69b..577944d7 100644
--- a/CMakeModules/FindLAPACK_C.cmake
+++ b/CMakeModules/FindLAPACK_C.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindLAPACK_C.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindLAPACK_C.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 #
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindLIBFREENECT.cmake b/CMakeModules/FindLIBFREENECT.cmake
index 0ce94fb1..a73a38dc 100644
--- a/CMakeModules/FindLIBFREENECT.cmake
+++ b/CMakeModules/FindLIBFREENECT.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindLIBFREENECT.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindLIBFREENECT.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindLIBUSB-1.cmake b/CMakeModules/FindLIBUSB-1.cmake
index 79d57a41..4a9432c0 100644
--- a/CMakeModules/FindLIBUSB-1.cmake
+++ b/CMakeModules/FindLIBUSB-1.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindLIBUSB-1.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindLIBUSB-1.cmake 4678 2014-02-19 09:52:35Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -35,6 +35,7 @@
 #
 # LIBUSB_1_FOUND
 # LIBUSB_1_LIBRARIES
+# LIBUSB_1_INCLUDE_DIRS
 #
 # Authors:
 # Celine Teuliere
@@ -55,11 +56,18 @@ ELSE(WIN32)
     /usr/lib
     /usr/local/lib
     )
+  FIND_PATH(LIBUSB_1_INCLUDE_DIR libusb.h
+    $ENV{LIBUSB_1_HOME}/include/libusb-1.0
+    $ENV{LIBUSB_1_HOME}/build/include/libusb-1.0
+    /usr/include/libusb-1.0
+    /usr/local/include/libusb-1.0
+    )
 ENDIF(WIN32)
 
 ## --------------------------------
 
-IF(LIBUSB_1_LIBRARY)
+IF(LIBUSB_1_LIBRARY AND LIBUSB_1_INCLUDE_DIR)
+  SET(LIBUSB_1_INCLUDE_DIRS ${LIBUSB_1_INCLUDE_DIR})
   SET(LIBUSB_1_LIBRARIES ${LIBUSB_1_LIBRARY})
   SET(LIBUSB_1_FOUND TRUE)
 ELSE()
@@ -67,6 +75,8 @@ ELSE()
 ENDIF()
 
 MARK_AS_ADVANCED(
+  LIBUSB_1_INCLUDE_DIRS
+  LIBUSB_1_INCLUDE_DIR
   LIBUSB_1_LIBRARIES
   LIBUSB_1_LIBRARY
   )
diff --git a/CMakeModules/FindMyCoin3D.cmake b/CMakeModules/FindMyCoin3D.cmake
index 60c5a286..1cefd161 100644
--- a/CMakeModules/FindMyCoin3D.cmake
+++ b/CMakeModules/FindMyCoin3D.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindMyCoin3D.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindMyCoin3D.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindMyGTK2.cmake b/CMakeModules/FindMyGTK2.cmake
index a6c95b05..674de22d 100644
--- a/CMakeModules/FindMyGTK2.cmake
+++ b/CMakeModules/FindMyGTK2.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindMyGTK2.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindMyGTK2.cmake 4637 2014-02-04 09:48:33Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -69,7 +69,7 @@ IF(UNIX OR WIN32)
     /usr/lib/i386-linux-gnu/glib-2.0/include
     /usr/lib/x86_64-linux-gnu/glib-2.0/include
     /opt/gnome/lib/glib-2.0/include
-    "C:/GTK/lib/glib-2.0/include"glib
+    C:/GTK/lib/glib-2.0/include
     /sw/lib/glib-2.0/include
   )
 
@@ -78,7 +78,7 @@ IF(UNIX OR WIN32)
     $ENV{GTK2_HOME}/include/glib-2.0
     /usr/include/glib-2.0
     /opt/gnome/include/glib-2.0
-    "C:/GTK/include/glib-2.0"
+    C:/GTK/include/glib-2.0
     /sw/include/glib-2.0
   )
 
@@ -87,7 +87,7 @@ IF(UNIX OR WIN32)
     $ENV{GTK2_HOME}/include/pango-1.0
     /usr/include/pango-1.0
     /opt/gnome/include/pango-1.0
-    "C:/GTK/include/pango-1.0"
+    C:/GTK/include/pango-1.0
     /sw/include/pango-1.0
   )
 
@@ -96,7 +96,7 @@ IF(UNIX OR WIN32)
     $ENV{GTK2_HOME}/include/cairo
     /usr/include/cairo
     /opt/gnome/include/cairo
-    "C:/GTK/include/cairo"
+    C:/GTK/include/cairo
     /sw/include/cairo
   )
 
@@ -106,7 +106,7 @@ IF(UNIX OR WIN32)
     /usr/lib/gtk-2.0/include
     /usr/lib64/gtk-2.0/include
     /opt/gnome/lib/gtk-2.0/include
-    "C:/GTK/lib/gtk-2.0/include"
+    C:/GTK/lib/gtk-2.0/include
     /sw/lib/gtk-2.0/include
     /usr/lib/i386-linux-gnu/gtk-2.0/include
     /usr/lib/x86_64-linux-gnu/gtk-2.0/include
@@ -117,7 +117,7 @@ IF(UNIX OR WIN32)
     $ENV{GTK2_HOME}/gdk-pixbuf-2.0
     /usr/include/gdk-pixbuf-2.0
     /usr/include/gtk-2.0
-    "C:/GTK/include/gtk-2.0"
+    C:/GTK/include/gtk-2.0
     /sw/include/gtk-2.0
   )
 
@@ -128,7 +128,7 @@ IF(UNIX OR WIN32)
     $ENV{GTK2_HOME}/include/atk-1.0
     /usr/include/atk-1.0
     /opt/gnome/include/atk-1.0
-    "C:/GTK/include/atk-1.0"
+    C:/GTK/include/atk-1.0
     /sw/include/atk-1.0
   )
 
@@ -141,7 +141,7 @@ IF(UNIX OR WIN32)
           /usr/openwin/lib
           /usr/X11R6/lib
           /opt/gnome/lib
-          "C:/GTK/lib"
+          C:/GTK/lib
 	  /sw/lib
   )
 
@@ -154,7 +154,7 @@ IF(UNIX OR WIN32)
            /usr/openwin/lib
            /usr/X11R6/lib
            /opt/gnome/lib
-           "C:/GTK/lib"
+           C:/GTK/lib
 	   /sw/lib
   )
 
@@ -167,7 +167,7 @@ IF(UNIX OR WIN32)
            /usr/openwin/lib
            /usr/X11R6/lib
            /opt/gnome/lib
-           "C:/GTK/lib"
+           C:/GTK/lib
 	   /sw/lib
   )
 
@@ -180,7 +180,7 @@ IF(UNIX OR WIN32)
            /usr/openwin/lib
            /usr/X11R6/lib
            /opt/gnome/lib
-           "C:/GTK/lib"
+           C:/GTK/lib
 	   /sw/lib
   )
 
@@ -193,7 +193,7 @@ IF(UNIX OR WIN32)
            /usr/openwin/lib
            /usr/X11R6/lib
            /opt/gnome/lib
-           "C:/GTK/lib"
+           C:/GTK/lib
 	   /sw/lib
   )
 
@@ -203,7 +203,7 @@ IF(UNIX OR WIN32)
     PATHS  $ENV{GTK2_HOME}/lib
            /usr/lib
            /opt/gnome/lib
-           "C:/GTK/lib"
+           C:/GTK/lib
 	   /sw/lib
   )
 
diff --git a/CMakeModules/FindMyJPEG.cmake b/CMakeModules/FindMyJPEG.cmake
index d6268970..5c4a8b62 100644
--- a/CMakeModules/FindMyJPEG.cmake
+++ b/CMakeModules/FindMyJPEG.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindMyJPEG.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindMyJPEG.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindMyPNG.cmake b/CMakeModules/FindMyPNG.cmake
index b23f1b9c..e27f2a9f 100644
--- a/CMakeModules/FindMyPNG.cmake
+++ b/CMakeModules/FindMyPNG.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindMyPNG.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindMyPNG.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindMyZLIB.cmake b/CMakeModules/FindMyZLIB.cmake
index 8cc7163a..f3ccdbad 100644
--- a/CMakeModules/FindMyZLIB.cmake
+++ b/CMakeModules/FindMyZLIB.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindMyZLIB.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindMyZLIB.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindNAS.cmake b/CMakeModules/FindNAS.cmake
index 71324eff..4e927af4 100644
--- a/CMakeModules/FindNAS.cmake
+++ b/CMakeModules/FindNAS.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindNAS.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindNAS.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindPARPORT.cmake b/CMakeModules/FindPARPORT.cmake
index 58f414d8..8450d1eb 100644
--- a/CMakeModules/FindPARPORT.cmake
+++ b/CMakeModules/FindPARPORT.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindPARPORT.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindPARPORT.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindPTHREAD.cmake b/CMakeModules/FindPTHREAD.cmake
index 0627c6d0..e6da44d7 100644
--- a/CMakeModules/FindPTHREAD.cmake
+++ b/CMakeModules/FindPTHREAD.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindPTHREAD.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindPTHREAD.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindPTU46.cmake b/CMakeModules/FindPTU46.cmake
index 9960f5d5..46fdae34 100644
--- a/CMakeModules/FindPTU46.cmake
+++ b/CMakeModules/FindPTU46.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindPTU46.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindPTU46.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindRAW1394.cmake b/CMakeModules/FindRAW1394.cmake
index 1c7a7f75..db332958 100644
--- a/CMakeModules/FindRAW1394.cmake
+++ b/CMakeModules/FindRAW1394.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindRAW1394.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindRAW1394.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindRT.cmake b/CMakeModules/FindRT.cmake
index 87d75694..4554ea78 100644
--- a/CMakeModules/FindRT.cmake
+++ b/CMakeModules/FindRT.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindRT.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindRT.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindSOQT.cmake b/CMakeModules/FindSOQT.cmake
index f52e23e4..ad7d73ca 100644
--- a/CMakeModules/FindSOQT.cmake
+++ b/CMakeModules/FindSOQT.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindSOQT.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindSOQT.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindSOWIN.cmake b/CMakeModules/FindSOWIN.cmake
index 4c224c4d..632fb721 100644
--- a/CMakeModules/FindSOWIN.cmake
+++ b/CMakeModules/FindSOWIN.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindSOWIN.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindSOWIN.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindSOXT.cmake b/CMakeModules/FindSOXT.cmake
index d41d911a..2d178304 100644
--- a/CMakeModules/FindSOXT.cmake
+++ b/CMakeModules/FindSOXT.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindSOXT.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindSOXT.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindV4L2.cmake b/CMakeModules/FindV4L2.cmake
index 884dd5c4..fe068c3d 100644
--- a/CMakeModules/FindV4L2.cmake
+++ b/CMakeModules/FindV4L2.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindV4L2.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: FindV4L2.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/FindXML2.cmake b/CMakeModules/FindXML2.cmake
index 1e0e7397..abac264c 100755
--- a/CMakeModules/FindXML2.cmake
+++ b/CMakeModules/FindXML2.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: FindXML2.cmake 4069 2013-01-21 14:28:56Z fspindle $
+# $Id: FindXML2.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/GenerateConfigScript.cmake b/CMakeModules/GenerateConfigScript.cmake
index cb21dd3b..225899db 100644
--- a/CMakeModules/GenerateConfigScript.cmake
+++ b/CMakeModules/GenerateConfigScript.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: GenerateConfigScript.cmake 4209 2013-04-16 07:04:20Z fspindle $
+# $Id: GenerateConfigScript.cmake 4676 2014-02-17 22:08:37Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -67,8 +67,13 @@ IF (UNIX)
   #---------------------------------------------------------------------
   # Updates VISP_CONFIG_CFLAGS
   #----------------------------------------------------------------------
-  SET(VISP_CONFIG_CFLAGS ${VISP_OPENMP_FLAGS})
-  LIST(APPEND VISP_CONFIG_CFLAGS "${VISP_DEFS}")
+  if(NOT ${VISP_OPENMP_FLAGS} STREQUAL "")
+    list(APPEND VISP_CONFIG_CFLAGS ${VISP_OPENMP_FLAGS})
+  endif()
+  if(NOT ${VISP_CPP11_FLAGS} STREQUAL "")
+    list(APPEND VISP_CONFIG_CFLAGS ${VISP_CPP11_CFLAGS})
+  endif()
+  list(APPEND VISP_CONFIG_CFLAGS "${VISP_DEFS}")
 
   FOREACH(INCDIR ${VISP_EXTERN_INCLUDE_DIRS})
     LIST(APPEND VISP_CONFIG_CFLAGS "-I${INCDIR}")
@@ -107,11 +112,11 @@ IF (UNIX)
   # Manage the lib path
   SET(VISP_CONFIG_SCRIPT_TMP_LDFLAGS)
   FOREACH(dir ${VISP_EXTERN_LINK_DIR})
-    LIST(APPEND VISP_CONFIG_SCRIPT_TMP_LDFLAGS "-L${dir}") 
+    LIST(APPEND VISP_CONFIG_SCRIPT_TMP_LDFLAGS "-L${dir}")
   ENDFOREACH(dir)
   #MESSAGE("VISP_EXTERN_LINK_DIR: ${VISP_EXTERN_LINK_DIR}")
   #MESSAGE("VISP_CONFIG_SCRIPT_TMP_LDFLAGS: ${VISP_CONFIG_SCRIPT_TMP_LDFLAGS}")
-  # convert semicolon-separated vector to space-separated string 
+  # convert semicolon-separated vector to space-separated string
   FOREACH(val ${VISP_CONFIG_SCRIPT_TMP_LDFLAGS})
      SET(VISP_CONFIG_LIBS "${VISP_CONFIG_LIBS} ${val}")
   ENDFOREACH(val)
@@ -160,13 +165,8 @@ IF (UNIX)
   # prepend with ViSP own include dir
   set(VISP_CONFIG_CFLAGS_SCRIPT "-I$PREFIX/${CMAKE_INSTALL_INCLUDEDIR} ${VISP_CONFIG_CFLAGS}")
 
-  # prepend with ViSP own lib dir
-  SET(VISP_CONFIG_LIBS_SCRIPT  "-L$PREFIX/${CMAKE_INSTALL_LIBDIR} -l${VISP_INTERN_LIBRARY} ${VISP_CONFIG_LIBS}")
-  IF(UNIX)
-    IF(NOT APPLE)
-      SET(VISP_CONFIG_LIBS_SCRIPT "-Wl,-rpath,$PREFIX/${CMAKE_INSTALL_LIBDIR} ${VISP_CONFIG_LIBS_SCRIPT}")
-    ENDIF(NOT APPLE)
-  ENDIF(UNIX)
+  # prepend with ViSP own lib and -L<lib dir>
+  SET(VISP_CONFIG_LIBS_SCRIPT  "$PREFIX/${CMAKE_INSTALL_LIBDIR}/${VISP_LIBNAME_OPT} -L$PREFIX/${CMAKE_INSTALL_LIBDIR} ${VISP_CONFIG_LIBS}")
 
   SET(VISP_ECHO_NO_NEWLINE_CHARACTER "")
   SET(VISP_ECHO_NO_NEWLINE_OPTION "")
@@ -196,13 +196,8 @@ IF (UNIX)
   # prepend with ViSP own include dir
   set(VISP_CONFIG_CFLAGS_PC "-I\${includedir} ${VISP_CONFIG_CFLAGS}")
 
-  # prepend with ViSP own lib dir
-  SET(VISP_CONFIG_LIBS_PC  "-L\${libdir} -l${VISP_INTERN_LIBRARY} ${VISP_CONFIG_LIBS}")
-  IF(UNIX)
-    IF(NOT APPLE)
-      SET(VISP_CONFIG_LIBS_PC "-Wl,-rpath,\${libdir} ${VISP_CONFIG_LIBS_PC}")
-    ENDIF(NOT APPLE)
-  ENDIF(UNIX)
+  # prepend with ViSP own lib dir and append -L<lib dir>
+  SET(VISP_CONFIG_LIBS_PC  "\${libdir}/${VISP_LIBNAME_OPT} ${VISP_CONFIG_LIBS} -L\${libdir}")
   CONFIGURE_FILE(${FILE_VISP_CONFIG_PC_INSTALL_IN} ${FILE_VISP_CONFIG_PC_INSTALL})
 
 ELSE(UNIX)
@@ -222,7 +217,14 @@ ELSE(UNIX)
   #---------------------------------------------------------------------
   # Updates VISP_CONFIG_SCRIPT_DEF
   #----------------------------------------------------------------------
-  SET(VISP_CONFIG_SCRIPT_DEFS "")
+  set(VISP_CONFIG_SCRIPT_DEFS "")
+  if(NOT ${VISP_OPENMP_FLAGS} STREQUAL "")
+    set(VISP_CONFIG_SCRIPT_DEFS "${VISP_OPENMP_FLAGS}")
+  endif()
+  if(NOT ${VISP_CPP11_FLAGS} STREQUAL "")
+    set(VISP_CONFIG_SCRIPT_DEFS "${VISP_CPP11_FLAGS}, ${VISP_CONFIG_SCRIPT_DEFS}")
+  endif()
+
   FOREACH(def ${VISP_DEFS})
     #MESSAGE("def to process: ${def}")
     IF("${def}" MATCHES "[-][D]+.")
@@ -247,15 +249,6 @@ ELSE(UNIX)
 
 #  MESSAGE(VISP_CONFIG_SCRIPT_INC ${VISP_CONFIG_SCRIPT_INC})
 
-  #---------------------------------------------------------------------
-  # Updates VISP_OPENMP_SUPPORT
-  #----------------------------------------------------------------------
-  IF(VISP_OPENMP_FLAGS)
-    SET(VISP_OPENMP_SUPPORT "OpenMP support: Yes")
-  ELSE()
-    SET(VISP_OPENMP_SUPPORT "OpenMP support: No")
-  ENDIF()
-  
   #---------------------------------------------------------------------
   # Updates VISP_CONFIG_SCRIPT_LIBDIR
   #----------------------------------------------------------------------
@@ -266,9 +259,9 @@ ELSE(UNIX)
   FOREACH(var ${VISP_EXTERN_LINK_DIR})
     #MESSAGE("var to process: ${var}")
     IF("${var}" MATCHES "[-][L]+.")
-    	#MESSAGE("${var} matches -L")
+        #MESSAGE("${var} matches -L")
         STRING(REGEX REPLACE "[-][L]" "" var ${var})
-	#MESSAGE("new ${newvar} without -L")
+        #MESSAGE("new ${newvar} without -L")
     ENDIF("${var}" MATCHES "[-][L]+.")
     LIST(APPEND TMP_SCRIPT_LIBDIR ${var})
     LIST(APPEND TMP_SCRIPT_LIBDIR "${var}\\$(ConfigurationName)")
diff --git a/CMakeModules/OgreTools.cmake b/CMakeModules/OgreTools.cmake
index 301b7377..6d8c458a 100755
--- a/CMakeModules/OgreTools.cmake
+++ b/CMakeModules/OgreTools.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: OgreTools.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: OgreTools.cmake 4588 2014-01-15 17:29:53Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -38,18 +38,72 @@
 #
 #############################################################################
 
+#########################################################
+# Find Ogre plugins
+#
+# This is a modified version of the macro provided with Ogre
+# except that should be used only in a desparate way when the one original
+# one doesn't detect anything
+#########################################################
+
+macro(ogre_find_plugin_lib_visp PLUGIN)
+  # On Unix, the plugins might have no prefix
+  if (CMAKE_FIND_LIBRARY_PREFIXES)
+    set(TMP_CMAKE_LIB_PREFIX ${CMAKE_FIND_LIBRARY_PREFIXES})
+    set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "")
+  endif()
+
+  # strip RenderSystem_ or Plugin_ prefix from plugin name
+  string(REPLACE "RenderSystem_" "" PLUGIN_TEMP ${PLUGIN})
+  string(REPLACE "Plugin_" "" PLUGIN_NAME ${PLUGIN_TEMP})
+
+  set(OGRE_PLUGIN_PATH_SUFFIXES
+    PlugIns PlugIns/${PLUGIN_NAME} Plugins Plugins/${PLUGIN_NAME} ${PLUGIN}
+    RenderSystems RenderSystems/${PLUGIN_NAME} ${ARGN})
+  # find link libraries for plugins
+  set(OGRE_${PLUGIN}_LIBRARY_NAMES "${PLUGIN}${OGRE_LIB_SUFFIX}")
+  get_debug_names(OGRE_${PLUGIN}_LIBRARY_NAMES)
+  find_library(OGRE_${PLUGIN}_LIBRARY_REL NAMES ${OGRE_${PLUGIN}_LIBRARY_NAMES}
+    HINTS ${OGRE_LIBRARY_DIRS} ${OGRE_LIBRARY_DIRS}/OGRE ${OGRE_LIBRARY_DIRS}/OGRE-${OGRE_VERSION_MAJOR}.${OGRE_VERSION_MINOR}.${OGRE_VERSION_PATCH}
+    PATH_SUFFIXES "" OGRE opt release release/opt relwithdebinfo relwithdebinfo/opt minsizerel minsizerel/opt)
+  find_library(OGRE_${PLUGIN}_LIBRARY_DBG NAMES ${OGRE_${PLUGIN}_LIBRARY_NAMES_DBG}
+    HINTS ${OGRE_LIBRARY_DIRS} ${OGRE_LIBRARY_DIRS}/OGRE ${OGRE_LIBRARY_DIRS}/OGRE-${OGRE_VERSION_MAJOR}.${OGRE_VERSION_MINOR}.${OGRE_VERSION_PATCH}
+    PATH_SUFFIXES "" OGRE opt debug debug/opt)
+  make_library_set(OGRE_${PLUGIN}_LIBRARY)
+
+  if (OGRE_${PLUGIN}_LIBRARY)
+    set(OGRE_${PLUGIN}_FOUND TRUE)
+  endif ()
+
+  mark_as_advanced(OGRE_${PLUGIN}_LIBRARY_REL OGRE_${PLUGIN}_LIBRARY_DBG OGRE_${PLUGIN}_LIBRARY_FWK)
+
+endmacro(ogre_find_plugin_lib_visp)
+
 MACRO(CREATE_OGRE_PLUGIN_CONFIG_FILE)
     	SET(VISP_HAVE_OGRE_PLUGINS_PATH ${VISP_BINARY_DIR}/data/ogre-simulator)
 
 	# If OGRE_PLUGIN_DIR_REL and OGRE_PLUGIN_DIR_DBG are not defined we 
-        # try to find these path manually
+        # try to find them manually
 	IF(NOT OGRE_PLUGIN_DIR_REL AND NOT OGRE_PLUGIN_DIR_DBG)
-	  IF(OGRE_RenderSystem_GL_LIBRARY_REL)
+          ogre_find_plugin_lib_visp(RenderSystem_Direct3D9)
+          ogre_find_plugin_lib_visp(RenderSystem_Direct3D10)
+          ogre_find_plugin_lib_visp(RenderSystem_Direct3D11)
+          ogre_find_plugin_lib_visp(RenderSystem_GL)
+          ogre_find_plugin_lib_visp(RenderSystem_GLES)
+          ogre_find_plugin_lib_visp(Plugin_ParticleFX)
+          ogre_find_plugin_lib_visp(Plugin_BSPSceneManager)
+          ogre_find_plugin_lib_visp(Plugin_CgProgramManager)
+          ogre_find_plugin_lib_visp(Plugin_PCZSceneManager)
+          ogre_find_plugin_lib_visp(Plugin_OctreeSceneManager)
+          ogre_find_plugin_lib_visp(Plugin_OctreeZone)
+
+
+          IF(OGRE_RenderSystem_GL_LIBRARY_REL)
 	    GET_FILENAME_COMPONENT(OGRE_PLUGIN_DIR_REL ${OGRE_RenderSystem_GL_LIBRARY_REL} PATH)
-	    #message("set manually OGRE_PLUGIN_DIR_REL to ${OGRE_PLUGIN_DIR_REL}")
+            #message("set manually OGRE_PLUGIN_DIR_REL to ${OGRE_PLUGIN_DIR_REL}")
           ELSEIF(OGRE_RenderSystem_GL_LIBRARY_DBG)
 	    GET_FILENAME_COMPONENT(OGRE_PLUGIN_DIR_DBG ${OGRE_RenderSystem_GL_LIBRARY_DBG} PATH)
-	    #message("set manually OGRE_PLUGIN_DIR_DBG to ${OGRE_PLUGIN_DIR_DBG}")
+            #message("set manually OGRE_PLUGIN_DIR_DBG to ${OGRE_PLUGIN_DIR_DBG}")
  	  ENDIF()
 	ENDIF()
 
diff --git a/CMakeModules/TargetDistclean.cmake b/CMakeModules/TargetDistclean.cmake
index c46819a2..9acff5dc 100644
--- a/CMakeModules/TargetDistclean.cmake
+++ b/CMakeModules/TargetDistclean.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: TargetDistclean.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: TargetDistclean.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/VISPCRTLinkage.cmake b/CMakeModules/VISPCRTLinkage.cmake
new file mode 100644
index 00000000..20675fa7
--- /dev/null
+++ b/CMakeModules/VISPCRTLinkage.cmake
@@ -0,0 +1,44 @@
+if(NOT MSVC)
+  message(FATAL_ERROR "CRT options are available only for MSVC")
+endif()
+
+if(NOT BUILD_SHARED_LIBS AND BUILD_WITH_STATIC_CRT)
+  foreach(flag_var
+          CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
+          CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
+          CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
+          CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
+    if(${flag_var} MATCHES "/MD")
+      string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+    endif()
+    if(${flag_var} MATCHES "/MDd")
+      string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")
+    endif()
+  endforeach(flag_var)
+
+  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcrtd.lib")
+  set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libcmt.lib")
+  set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libcmtd.lib")
+else()
+  foreach(flag_var
+          CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
+          CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
+          CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
+          CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
+    if(${flag_var} MATCHES "/MT")
+      string(REGEX REPLACE "/MT" "/MD" ${flag_var} "${${flag_var}}")
+    endif()
+    if(${flag_var} MATCHES "/MTd")
+      string(REGEX REPLACE "/MTd" "/MDd" ${flag_var} "${${flag_var}}")
+    endif()
+  endforeach(flag_var)
+endif()
+
+if(NOT ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.8 AND NOT ${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} LESS 8.6)
+  include(ProcessorCount)
+  ProcessorCount(N)
+  if(NOT N EQUAL 0)
+    SET(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}   /MP${N} ")
+    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP${N} ")
+  endif()
+endif()
diff --git a/CMakeModules/VISPConfig.cmake.in b/CMakeModules/VISPConfig.cmake.in
index bb63a359..15db8bbe 100644
--- a/CMakeModules/VISPConfig.cmake.in
+++ b/CMakeModules/VISPConfig.cmake.in
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: VISPConfig.cmake.in 4221 2013-04-17 10:13:34Z fspindle $
+# $Id: VISPConfig.cmake.in 4616 2014-01-24 18:43:25Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -33,34 +33,37 @@
 # Description:
 # CMake package config file for ViSP.
 #
+# ** File generated automatically, do not modify **
+#
 # This file will define the following CMake variables:
 # VISP_ROOT_DIR       : ViSP base directory location
 # VISP_INCLUDE_DIRS   : ViSP and third-party headers location
-# VISP_LIBRARY_DIRS   : ViSP and third-party libraries location
-# VISP_LIBRARY        : ViSP library name
-# VISP_LIBRARIES      : ViSP and third-party libraries name
-# VISP_DEFINITIONS    : Defines required to build ViSP
+# VISP_LIBRARY_DIRS   : ViSP and third-party libraries location. Calling LINK_DIRECTORIES
+#                       with this path is NOT needed under Unix.
+# VISP_LIBNAME_DBG    : ViSP library name when build in debug (libvisp.so, libvisp.a, vispd.dll, vispd.lib)
+# VISP_LIBNAME_OPT    : ViSP library name when build in release (libvisp.so, libvisp.a, visp.dll, visp.lib)
 #
-# VISP_SOURCE_DIR     : Location of ViSP source code 
+# VISP_LIBRARIES      : ViSP and third-party libraries to link against.
+# VISP_DEFINITIONS    : Defines used to build ViSP. Calling ADD_DEFINITIONS with this
+#                       variable is not needed.
 #
-# VISP_VERSION_STRING : Full ViSP version, eg 2.6.1
+# VISP_VERSION_STRING : Full ViSP version, eg 2.9.0
 # VISP_VERSION_MAJOR  : Major version part of VISP_VERSION, eg 2. 
-# VISP_VERSION_MINOR  : Minor version part of VISP_VERSION, eg 6. 
-# VISP_VERSION_PATCH  : Patch version part of VISP_VERSION, eg 1. 
+# VISP_VERSION_MINOR  : Minor version part of VISP_VERSION, eg 9.
+# VISP_VERSION_PATCH  : Patch version part of VISP_VERSION, eg 0.
 #
 # Typical usage in user project:
-#   FIND_PACKAGE(VISP)
-#   IF (VISP_FOUND)
-#     INCLUDE(${VISP_USE_FILE})
-#   ENDIF (VISP_FOUND)
+#   find_package(VISP)
+#   add_definitions(${VISP_DEFINITIONS})
+#   link_directories(${VISP_LIBRARY_DIRS})
+#   include_directories(${VISP_INCLUDE_DIRS})
+#   target_link_libraries(MY_TARGET_NAME ${VISP_LIBRARIES})
 #
 # Authors:
 # Fabien Spindler
 #
 #############################################################################
 
-SET(VISP_LIBRARY "@VISP_INTERN_LIBRARY@")
-
 # Set VISP_ROOT_DIR
 SET(VISP_ROOT_DIR "@VISP_ROOT_DIR_CONFIGCMAKE@")
 #MESSAGE("VISP_ROOT_DIR: ${VISP_ROOT_DIR}")
@@ -93,6 +96,7 @@ ENDFOREACH(val ${VISP_EXTERN_INCLUDE_DIRS})
 
 # Tells the user project where to find ViSP library
 SET(VISP_LIBRARY_DIRS "${VISP_ROOT_DIR}/@CMAKE_INSTALL_LIBDIR@" CACHE FILEPATH "Location of ViSP library")
+#MESSAGE("VISP_LIBRARY_DIRS: ${VISP_LIBRARY_DIRS}")
 
 # Tells the user project where to find third party libraries used to
 # compile ViSP
@@ -103,17 +107,22 @@ FOREACH(val ${VISP_EXTERN_LINK_DIR})
 ENDFOREACH(val ${VISP_EXTERN_LINK_DIR})
 #MESSAGE("VISP_LIBRARY_DIRS: ${VISP_LIBRARY_DIRS}")
 
-# export source dir for doxygen eventually
-SET(VISP_SOURCE_DIR "@VISP_SOURCE_DIR@")
+# Set the full library name for debug and release
+set(VISP_LIBNAME_DBG "@VISP_LIBNAME_DBG@")
+set(VISP_LIBNAME_OPT "@VISP_LIBNAME_OPT@")
 
 # Tells the user project ViSP library name
-SET(VISP_LIBRARIES debug "@VISP_INTERN_LIBRARY@@CMAKE_DEBUG_POSTFIX@" optimized "@VISP_INTERN_LIBRARY@")
+if(UNIX)
+  set(VISP_LIBRARIES debug ${VISP_ROOT_DIR}/@CMAKE_INSTALL_LIBDIR@/${VISP_LIBNAME_DBG} optimized ${VISP_ROOT_DIR}/@CMAKE_INSTALL_LIBDIR@/${VISP_LIBNAME_OPT})
+else()
+  set(VISP_LIBRARIES debug "@VISP_INTERN_LIBRARY@@CMAKE_DEBUG_POSTFIX@" optimized "@VISP_INTERN_LIBRARY@")
+endif()
 
 # Tells the user project libraries name used to build ViSP library
 SET(VISP_EXTERN_LIBRARIES "@VISP_EXTERN_LIBRARIES@")
 FOREACH(val ${VISP_EXTERN_LIBRARIES})
   LIST(APPEND VISP_LIBRARIES "${val}")
-ENDFOREACH(val ${VISP_EXTERN_LIBRARIES})
+ENDFOREACH()
 #MESSAGE("VISP_LIBRARIES: ${VISP_LIBRARIES}")
 
 # where to find the USE file to be used by user project
@@ -129,10 +138,22 @@ IF(BUILD_TEST_COVERAGE)
 ENDIF(BUILD_TEST_COVERAGE)
 
 
-#
-# Remember VISP' third party libs configuration: 
-#
+#----------------------------------------------------------------------
+# Add CXX flags used in ViSP that should be also used when ViSP is a 3rd party
+#----------------------------------------------------------------------
+set(VISP_OPENMP_FLAGS "@VISP_OPENMP_FLAGS@")
+if(VISP_OPENMP_FLAGS)
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${VISP_OPENMP_FLAGS}")
+endif()
+set(VISP_CPP11_FLAGS "@VISP_CPP11_FLAGS@")
+if(VISP_CPP11_FLAGS)
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${VISP_CPP11_FLAGS}")
+endif()
+
 
+#----------------------------------------------------------------------
+# Remember VISP' third party libs configuration:
+#----------------------------------------------------------------------
 SET(VISP_HAVE_X11            "@VISP_HAVE_X11@")
 SET(VISP_HAVE_PTHREAD        "@VISP_HAVE_PTHREAD@")
 SET(VISP_HAVE_GTK            "@VISP_HAVE_GTK@")
@@ -157,7 +178,6 @@ SET(VISP_HAVE_QT             "@VISP_HAVE_QT@")
 SET(VISP_HAVE_SOQT           "@VISP_HAVE_SOQT@")
 SET(VISP_HAVE_SOWIN          "@VISP_HAVE_SOWIN@")
 SET(VISP_HAVE_SOXT           "@VISP_HAVE_SOXT@")
-SET(VISP_HAVE_DC1394_1       "@VISP_HAVE_DC1394_1@")
 SET(VISP_HAVE_DC1394_2       "@VISP_HAVE_DC1394_2@")
 SET(VISP_HAVE_CMU1394        "@VISP_HAVE_CMU1394@")
 SET(VISP_HAVE_V4L2           "@VISP_HAVE_V4L2@")
@@ -168,9 +188,6 @@ SET(VISP_HAVE_BICLOPS        "@VISP_HAVE_BICLOPS@")
 SET(VISP_HAVE_PTU46          "@VISP_HAVE_PTU46@")
 SET(VISP_HAVE_VIPER650       "@VISP_HAVE_VIPER650@")
 SET(VISP_HAVE_VIPER850       "@VISP_HAVE_VIPER850@")
-SET(VISP_HAVE_CYCAB          "@VISP_HAVE_CYCAB@")
-SET(VISP_HAVE_CYCABTK        "@VISP_HAVE_CYCABTK@")
-SET(VISP_HAVE_CYCABTK_OLD    "@VISP_HAVE_CYCABTK_OLD@")
 SET(VISP_HAVE_PIONEER        "@VISP_HAVE_PIONEER@")
 SET(VISP_HAVE_PARPORT        "@VISP_HAVE_PARPORT@")
 SET(VISP_HAVE_XML2           "@VISP_HAVE_XML2@")
@@ -181,3 +198,34 @@ SET(VISP_HAVE_YARP           "@VISP_HAVE_YARP@")
 SET(VISP_HAVE_OPENMP         "@VISP_HAVE_OPENMP@")
 SET(VISP_HAVE_ACCESS_TO_NAS  "@VISP_HAVE_ACCESS_TO_NAS@")
 SET(VISP_HAVE_CPP11_COMPATIBILITY "@VISP_HAVE_CPP11_COMPATIBILITY@")
+
+#----------------------------------------------------------------------
+# Some useful macro to be able to build the tutorials along side ViSP
+#----------------------------------------------------------------------
+# Create a target from the *.cpp file, link against ViSP libraries and add a dependency to ViSP library
+# tu ensure that the library is build before this target.
+macro(visp_add_target file_cpp)
+  get_filename_component(target ${file_cpp} NAME_WE)
+  include_directories(${VISP_INCLUDE_DIRS})
+  if(VISP_LIBRARY_DIRS)
+    # should be called before add_executable()
+    link_directories(${VISP_LIBRARY_DIRS})
+  endif()
+  add_executable(${target} ${file_cpp})
+  target_link_libraries(${target} ${VISP_LIBRARIES})
+  if(VISP_INTERN_LIBRARY)
+    add_dependencies(${target} ${VISP_INTERN_LIBRARY})
+  endif()
+endmacro()
+
+# Copy the data files to the same location than the target associated to the cpp files
+macro(visp_copy_data file_cpp file_data)
+  get_filename_component(target ${file_cpp} NAME_WE)
+  get_target_property(target_location ${target} LOCATION)
+  get_filename_component(target_location "${target_location}" PATH)
+  add_custom_command(
+    TARGET ${target}
+    POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E copy "${file_data}" "${target_location}"
+  )
+endmacro()
diff --git a/CMakeModules/VISPUse.cmake.in b/CMakeModules/VISPUse.cmake.in
index 0d04dd84..aeeaa405 100644
--- a/CMakeModules/VISPUse.cmake.in
+++ b/CMakeModules/VISPUse.cmake.in
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: VISPUse.cmake.in 4057 2013-01-05 13:10:29Z fspindle $
+# $Id: VISPUse.cmake.in 4616 2014-01-24 18:43:25Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -38,10 +38,6 @@
 #
 #############################################################################
 
-# Add extra build flags to be able to consider especially for OpenMP
-list(APPEND CMAKE_CXX_FLAGS "@VISP_OPENMP_FLAGS@")
-list(APPEND CMAKE_CXX_FLAGS "@VISP_CPP11_FLAGS@")
-
 # Remove duplicates compilation flags
 separate_arguments(CMAKE_CXX_FLAGS)
 list(REMOVE_DUPLICATES CMAKE_CXX_FLAGS)
@@ -58,6 +54,5 @@ ADD_DEFINITIONS(${VISP_DEFINITIONS})
 # Tell the compiler where to find ViSP's libraries
 # and the third party libraries we depend on
 LINK_DIRECTORIES(${VISP_LIBRARY_DIRS})
-
 LINK_LIBRARIES(${VISP_LIBRARIES})
 
diff --git a/CMakeModules/checkForItifg8Version.cpp b/CMakeModules/checkForItifg8Version.cpp
deleted file mode 100644
index 8a96303c..00000000
--- a/CMakeModules/checkForItifg8Version.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <itifgExt.h>
-#include <libitifg.h>
-
-
-int main()
-{
-  struct iti_setup_t setup;
-  char file_name[FILENAME_MAX];
-  int error;
-  int version = 0;
-
-  strcpy (file_name, ITI_PFS_PREFIX);
-  strcat (file_name, ITI_PFS_STRING);
-
-  if ((error = iti_parse_info (file_name, &setup)))
-    {
-      switch (error)
-	{
-	case -ITI_EARG:
-	  fprintf (stderr, "read_procfs: Wrong call argument\n"
-		   "(file_name:%s, setup%p).\n", file_name, &setup);
-	  exit (-1);
-	  break;
-	case -ITI_EFMT:
-	  fprintf (stderr, "read_procfs: Wrong data format (%s%s).\n",
-		   ITI_PFS_PREFIX, ITI_PFS_STRING);
-	  exit (-1);
-	  break;
-	case -ITI_EENT:
-	  fprintf (stderr, "read_procfs: File not found (%s%s).\n",
-		   ITI_PFS_PREFIX, ITI_PFS_STRING);
-	  exit (-1);
-	  break;
-	case -ITI_ESYS:
-	  fprintf (stderr, "read_procfs: Error while system call (%s).\n",
-		   strerror (errno));
-	  exit (-1);
-	  break;
-	default:
-	  fprintf (stderr, "read_procfs: Error not specified!\n");
-	  exit (-1);
-	}
-    }
-//   fprintf (stderr, "Driver version %0x = %d: %d.%d.%d-%d.\n",
-// 	   setup.version, setup.version,
-// 	   (setup.version & 0xFF000000) >> 24,
-// 	   (setup.version & 0x00FF0000) >> 16,
-// 	   (setup.version & 0x0000FF00) >> 8,
-// 	   setup.version & 0x000000FF);
-
-  int major = (setup.version & 0xFF000000) >> 24;
-  int minor = (setup.version & 0x00FF0000) >> 16;
-
-  return (major*10 + minor);
-
-}
diff --git a/CMakeModules/cmake_uninstall.cmake.in b/CMakeModules/cmake_uninstall.cmake.in
index e788ba1d..fb9072b6 100644
--- a/CMakeModules/cmake_uninstall.cmake.in
+++ b/CMakeModules/cmake_uninstall.cmake.in
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: cmake_uninstall.cmake.in 4057 2013-01-05 13:10:29Z fspindle $
+# $Id: cmake_uninstall.cmake.in 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/CMakeModules/resources.cfg.in b/CMakeModules/resources.cfg.in
index 759b13ad..64f25245 100755
--- a/CMakeModules/resources.cfg.in
+++ b/CMakeModules/resources.cfg.in
@@ -1,11 +1,11 @@
 # Resources required by the sample browser and most samples.
 [Essential]
-Zip=@OGRE_MEDIA_DIR@/packs/SdkTrays.zip
+#Zip=@OGRE_MEDIA_DIR@/packs/SdkTrays.zip
 
 # Resource locations to be added to the default path
 [General]
 FileSystem=@OGRE_MEDIA_DIR@
-FileSystem=@OGRE_MEDIA_DIR@/materials/programs
+#FileSystem=@OGRE_MEDIA_DIR@/materials/programs
 FileSystem=@OGRE_MEDIA_DIR@/materials/scripts
 FileSystem=@OGRE_MEDIA_DIR@/materials/textures
 FileSystem=@OGRE_MEDIA_DIR@/models
diff --git a/CMakeModules/visp-config.bat.in b/CMakeModules/visp-config.bat.in
index d75e3b1c..62209e74 100755
--- a/CMakeModules/visp-config.bat.in
+++ b/CMakeModules/visp-config.bat.in
@@ -1,9 +1,9 @@
 @rem #############################################################################
 @rem #
-@rem # $Id: visp-config.bat.in 4057 2013-01-05 13:10:29Z fspindle $
+@rem # $Id: visp-config.bat.in 4574 2014-01-09 08:48:51Z fspindle $
 @rem #
 @rem # This file is part of the ViSP software.
-@rem # Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+@rem # Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 @rem # 
 @rem # This software is free software; you can redistribute it and/or
 @rem # modify it under the terms of the GNU General Public License
@@ -106,7 +106,7 @@ for %%a in (%*) do (
   if "%%a" == "--version" (
 	echo ViSP %VERSION% Visual Servoing Platform
 	echo.
-	echo Copyright 2005 - 2013 Inria. All rights reserved.
+	echo Copyright 2005 - 2014 Inria. All rights reserved.
 	goto END
   )
   if "%%a" == "--dumpversion" (
@@ -118,7 +118,7 @@ for %%a in (%*) do (
 
 :USAGE
 echo ViSP %VERSION% (Visual Servoing Platform)
-echo Copyright (C) 2005 - 2013 Inria. All rights reserved.
+echo Copyright (C) 2005 - 2014 Inria. All rights reserved.
 echo.
 echo Usage: %0 [--prefix] [--def] [--include] [--openmp] [--libpath] 
 echo [--libs-debug] [--libs-optimized] [--version] [--dumpversion] [--help]
diff --git a/CMakeModules/visp-config.in b/CMakeModules/visp-config.in
index 7d39279a..317c434b 100755
--- a/CMakeModules/visp-config.in
+++ b/CMakeModules/visp-config.in
@@ -2,10 +2,10 @@
 
 #############################################################################
 #
-# $Id: visp-config.in 4203 2013-04-08 16:56:12Z fspindle $
+# $Id: visp-config.in 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -61,7 +61,7 @@ usage()
     cat <<EOF
 
 ViSP $VERSION (Visual Servoing Platform)
-Copyright (C) 2005 - 2013 Inria. All rights reserved.
+Copyright (C) 2005 - 2014 Inria. All rights reserved.
 
 Usage: $0 [--prefix] [--cflags] [--libs] [--version] [--dumpversion]  [--help]
 
@@ -91,7 +91,7 @@ for arg in $@; do
 	--version) 
 	    echo "ViSP $VERSION (Visual Servoing Platform)"
 	    echo ""
-	    echo "Copyright (C) 2005 - 2013 Inria. All rights reserved.";;
+	    echo "Copyright (C) 2005 - 2014 Inria. All rights reserved.";;
 	--dumpversion) echo $NO_NEWLINE_OPTION "$VERSION$NO_NEWLINE_CHARACTER";;
 	*) usage; exit -1 ;;
     esac;
diff --git a/CMakeModules/visp-config.install.in b/CMakeModules/visp-config.install.in
index e797f269..0376f577 100755
--- a/CMakeModules/visp-config.install.in
+++ b/CMakeModules/visp-config.install.in
@@ -5,7 +5,7 @@
 # $Id: visp-config.in 4057 2013-01-05 13:10:29Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -48,20 +48,20 @@ relpath=`(cd $relpath/..; pwd)`
 
 PREFIX=$relpath
 
-CFLAGS="${VISP_CONFIG_CFLAGS_SCRIPT}"
+#CFLAGS="${VISP_CONFIG_CFLAGS_SCRIPT}"
 
-LIBS="${VISP_CONFIG_LIBS_SCRIPT}"
+#LIBS="${VISP_CONFIG_LIBS_SCRIPT}"
 
-VERSION="${VISP_VERSION}"
+#VERSION="${VISP_VERSION}"
 
-#CFLAGS_CMD=`pkg-config --cflags visp`
-#CFLAGS=$CFLAGS_CMD
+CFLAGS_CMD=`pkg-config --cflags visp`
+CFLAGS=$CFLAGS_CMD
 
-#LIBS_CMD=`pkg-config --libs visp`
-#LIBS=$LIBS_CMD
+LIBS_CMD=`pkg-config --libs visp`
+LIBS=$LIBS_CMD
 
-#VERSION_CMD=`pkg-config --modversion visp`
-#VERSION=$VERSION_CMD
+VERSION_CMD=`pkg-config --modversion visp`
+VERSION=$VERSION_CMD
 
 NO_NEWLINE_CHARACTER="${VISP_ECHO_NO_NEWLINE_CHARACTER}"
 NO_NEWLINE_OPTION="${VISP_ECHO_NO_NEWLINE_OPTION}"
@@ -71,7 +71,7 @@ usage()
     cat <<EOF
 
 ViSP $VERSION (Visual Servoing Platform)
-Copyright (C) 2005 - 2013 Inria. All rights reserved.
+Copyright (C) 2005 - 2014 Inria. All rights reserved.
 
 Usage: $0 [--prefix] [--cflags] [--libs] [--version] [--dumpversion]  [--help]
 
@@ -101,7 +101,7 @@ for arg in $@; do
 	--version) 
 	    echo "ViSP $VERSION (Visual Servoing Platform)"
 	    echo ""
-	    echo "Copyright (C) 2005 - 2013 Inria. All rights reserved.";;
+	    echo "Copyright (C) 2005 - 2014 Inria. All rights reserved.";;
 	--dumpversion) echo $NO_NEWLINE_OPTION "$VERSION$NO_NEWLINE_CHARACTER";;
 	*) usage; exit -1 ;;
     esac;
diff --git a/CMakeModules/visp.pc.in b/CMakeModules/visp.pc.in
index 93ab39cf..4594265e 100644
--- a/CMakeModules/visp.pc.in
+++ b/CMakeModules/visp.pc.in
@@ -7,7 +7,7 @@ includedir=@includedir@
 
 Name: ViSP
 Description: Visual Servoing Platform
-URL: http://www.irisa.fr/lagadic/visp
+URL: http://team.inria.fr/lagadic/visp
 Version: ${VISP_VERSION}
 Libs: ${VISP_CONFIG_LIBS_PC}
 
diff --git a/CMakeSourceFileList.cmake b/CMakeSourceFileList.cmake
index b8e8a55e..c7734ee4 100644
--- a/CMakeSourceFileList.cmake
+++ b/CMakeSourceFileList.cmake
@@ -3,7 +3,7 @@
 # $Id: CMakeSourceFileList.cmake,v 1.29 2008-12-17 14:45:01 fspindle Exp $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -81,9 +81,6 @@ SET (SRC_DEVICE_FRAMEGRABBER
   device/framegrabber/disk/vpDiskGrabber.cpp
   )
 
-IF(VISP_HAVE_DC1394_1)
-  LIST(APPEND SRC_DEVICE_FRAMEGRABBER device/framegrabber/1394/vp1394Grabber.cpp)
-ENDIF()
 IF(VISP_HAVE_DC1394_2)
   LIST(APPEND SRC_DEVICE_FRAMEGRABBER device/framegrabber/1394/vp1394TwoGrabber.cpp)
 ENDIF()
@@ -216,9 +213,6 @@ IF(VISP_HAVE_BICLOPS)
   LIST(APPEND SRC_ROBOT robot/real-robot/biclops/vpRobotBiclopsController.cpp)
   LIST(APPEND SRC_ROBOT robot/real-robot/biclops/vpRobotBiclops.cpp)
 ENDIF()
-IF(VISP_HAVE_CYCAB)
-  LIST(APPEND SRC_ROBOT robot/real-robot/cycab/vpRobotCycab.cpp)
-ENDIF()
 IF(VISP_HAVE_PTU46)
   LIST(APPEND SRC_ROBOT robot/real-robot/ptu46/vpRobotPtu46.cpp)
 ENDIF()
@@ -233,7 +227,6 @@ IF(VISP_HAVE_VIPER850)
 ENDIF()
 
 SET (SRC_SERVO
-  servo/vpAdaptativeGain.cpp
   servo/vpAdaptiveGain.cpp
   servo/vpServo.cpp
   servo/vpServoData.cpp
@@ -343,12 +336,33 @@ SET (SRC_TRACKING
   tracking/moments/vpMomentGravityCenter.cpp
   tracking/moments/vpMomentGravityCenterNormalized.cpp
   tracking/moments/vpMomentObject.cpp
+
+  tracking/template-tracker/vpTemplateTracker.cpp
+  tracking/template-tracker/ssd/vpTemplateTrackerSSD.cpp
+  tracking/template-tracker/ssd/vpTemplateTrackerSSDESM.cpp
+  tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardAdditional.cpp
+  tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardCompositional.cpp
+  tracking/template-tracker/ssd/vpTemplateTrackerSSDInverseCompositional.cpp
+  tracking/template-tracker/zncc/vpTemplateTrackerZNCC.cpp
+  tracking/template-tracker/zncc/vpTemplateTrackerZNCCForwardAdditional.cpp
+  tracking/template-tracker/zncc/vpTemplateTrackerZNCCInverseCompositional.cpp
+  tracking/template-tracker/tools/vpTemplateTrackerBSpline.cpp
+  tracking/template-tracker/tools/vpTemplateTrackerZone.cpp
+  tracking/template-tracker/tools/vpTemplateTrackerTriangle.cpp
+  tracking/template-tracker/warp/vpTemplateTrackerWarp.cpp
+  tracking/template-tracker/warp/vpTemplateTrackerWarpAffine.cpp
+  tracking/template-tracker/warp/vpTemplateTrackerWarpHomography.cpp
+  tracking/template-tracker/warp/vpTemplateTrackerWarpHomographySL3.cpp
+  tracking/template-tracker/warp/vpTemplateTrackerWarpSRT.cpp
+  tracking/template-tracker/warp/vpTemplateTrackerWarpTranslation.cpp
   )
 
-IF(VISP_HAVE_XML2)
-  LIST(APPEND SRC_TRACKING tracking/mbt/edge/vpMbtXmlParser.cpp)
-  LIST(APPEND SRC_TRACKING tracking/mbt/klt/vpMbtKltXmlParser.cpp)
-ENDIF()
+if(VISP_HAVE_XML2)
+  list(APPEND SRC_TRACKING tracking/mbt/vpMbXmlParser.cpp)
+  list(APPEND SRC_TRACKING tracking/mbt/edge/vpMbtXmlParser.cpp)
+  list(APPEND SRC_TRACKING tracking/mbt/klt/vpMbtKltXmlParser.cpp)
+  list(APPEND SRC_TRACKING tracking/mbt/hybrid/vpMbtEdgeKltXmlParser.cpp)
+endif()
 
 IF(VISP_HAVE_OPENCV)
   LIST(APPEND SRC_TRACKING tracking/klt/vpKltOpencv.cpp)
diff --git a/CTestConfig.cmake b/CTestConfig.cmake
index 1a01ddb6..5496d548 100644
--- a/CTestConfig.cmake
+++ b/CTestConfig.cmake
@@ -3,7 +3,7 @@
 # $Id: CTestConfig.cmake,v 1.9 2008-12-11 13:19:44 fspindle Exp $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -72,6 +72,8 @@ elseif(MSVC10)
   set(BUILDNAME "${BUILDNAME}-msvc10")
 elseif(MSVC11)
   set(BUILDNAME "${BUILDNAME}-msvc11")
+elseif(MSVC12)
+  set(BUILDNAME "${BUILDNAME}-msvc12")
 elseif(MSVC)
   set(BUILDNAME "${BUILDNAME}-msvc")
 elseif(BORLAND)
@@ -141,10 +143,6 @@ endif()
 IF(VISP_HAVE_DC1394_2)
   SET(BUILDNAME "${BUILDNAME}-dc1394.2")
 ENDIF(VISP_HAVE_DC1394_2)
-# Firewire dc1394-1.x 
-IF(VISP_HAVE_DC1394_1)
-  SET(BUILDNAME "${BUILDNAME}-dc1394.1")
-ENDIF(VISP_HAVE_DC1394_1)
 # Video 4 linux 2 (V4L2)
 IF(VISP_HAVE_V4L2)
   SET(BUILDNAME "${BUILDNAME}-v4l2")
diff --git a/ChangeLog b/ChangeLog
index 5a19e429..259376ef 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,10 +2,57 @@
                      Visual Servoing Platform
                      Resume of the change log
 
-     Copyright Projet Lagadic / IRISA-INRIA Rennes, 2005-2013
-                    http://www.irisa.fr/lagadic
+     Copyright Projet Lagadic / IRISA-INRIA Rennes, 2005 - 2014
+                    http://team.inria.fr/lagadic
 
 
+ViSP 2.9.0 (released February 18th, 2014)
+  - New features
+    . Introduction of a new template tracker using SSD (vpTemplateTrackerSSD
+      classes) or ZNCC (vpTemplateTrackerZNCC classes). These trackers are able
+      to estimate 2D transformations such as translation, SRT (scale, rotation
+      and translation), affine and homography. A video
+      illustrating this tracker capabilities is available on:
+      http://team.inria.fr/lagadic/visp/computer-vision.html
+    . In vpServo introduction of a new controller able to ensure continuous
+      sequencing
+  - Improvements
+    . Add missing const to member functions and arguments passed by reference.
+    . Introduction of a new option BUILD_WITH_STATIC_CRT that allows to set
+      /MT (default) or /MD msvc build option
+    . Compatibility with mingw, msvc11 (2012), msvc12 (2013)
+      and open solaris 11
+    . Trace and debug can now be enabled/disabled using CMake
+      ACTIVATE_DEBUG_TRACE option
+    . Fix errors detected by Covery Scan static code analyser
+    . Fix warnings detected with Gnu g++ -Weffc++ -Wshadow compiler flags
+    . Improve a lot of classes
+  - New examples
+    . New example that shows how to use the template tracker
+    . A lot of new sample code provided in tutorial folder
+  - New tutorials
+    . Installation from source on Linux Fedora
+    . Image filtering
+    . Template tracking
+    . Homography estimation from points
+    . Keypoint matching
+    . How to boost your visual servo control law
+    . Debug and trace printings
+  - Bug fixed
+    . [16263] libopencv_nonfree for Surf not detected by CMake.
+    . [16307] vpVideoReader::setLastFrameIndex() doesn't work.
+    . [16371] No convergence in SVDcmp
+    . [16465] FTBFS on armhf, ppc, s390: Errors while running CTest
+    . [16696] Build with OpenCV fails with msvc (/MT conflicts with /MD)
+    . [16781] Unable to open .pgm saved with Matlab imwrite
+    . [16823] Problems with camera calibration code
+    . [16889] Link error with CMU 1394 on win x64 arch
+    . [16895] undefined reference to `vpGaussRand::gaussianDraw()'
+    . [16919] Unable to link with OpenCV 2.4.8 under Windows
+    . [16924] MinGW: unable to build ViSP as a shared library
+    . [16928] vpVideoReader is unable to find the number of the first image
+	      from a generic sequence of images
+----------------------------------------------
 ViSP 2.8.0 (released July 24th, 2013)
   - New features
     . New camera calibration tool: example/camera_calibration.cpp
diff --git a/INSTALL.txt b/INSTALL.txt
index e5d7bb24..f39d4f03 100644
--- a/INSTALL.txt
+++ b/INSTALL.txt
@@ -1,7 +1,7 @@
                             ViSP-2.7.0
                      Visual Servoing Platform
 
-      Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+      Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
                  www: http://www.irisa.fr/lagadic
 
 
diff --git a/README.txt b/README.txt
index 39ca54d4..dbe8a696 100644
--- a/README.txt
+++ b/README.txt
@@ -1,7 +1,7 @@
                             ViSP-2.7.0
                      Visual Servoing Platform
 
-      Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+      Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
                   www: http://www.irisa.fr/lagadic
 
 
diff --git a/ViSP-third-party.txt.cmake b/ViSP-third-party.txt.cmake
index 7bcfbfb8..3b539d6a 100644
--- a/ViSP-third-party.txt.cmake
+++ b/ViSP-third-party.txt.cmake
@@ -25,15 +25,13 @@ Robots
   Pioneer                     : ${VISP_HAVE_PIONEER_FOUND}
   Viper S650                  : ${VISP_HAVE_VIPER650_FOUND}
   Viper S850                  : ${VISP_HAVE_VIPER850_FOUND}
-  Cycab                       : ${VISP_HAVE_CYCAB_FOUND}
-Video devices (display)                  
+Video devices (display)
   X11                         : ${VISP_HAVE_X11_FOUND}
   GTK                         : ${VISP_HAVE_GTK_FOUND} 
   OpenCV                      : ${VISP_HAVE_OPENCV_FOUND} 
   GDI                         : ${VISP_HAVE_GDI_FOUND}
   Direct3D                    : ${VISP_HAVE_D3D9_FOUND}
 Framegrabbers
-  Firewire libdc1394-1.x      : ${VISP_HAVE_DC1394_1_FOUND}
   Firewire libdc1394-2.x      : ${VISP_HAVE_DC1394_2_FOUND}
   Video For Linux Two         : ${VISP_HAVE_V4L2_FOUND}
   DirectShow                  : ${VISP_HAVE_DIRECTSHOW_FOUND}
diff --git a/data/ogre-simulator/media/materials/scripts/Examples.material b/data/ogre-simulator/media/materials/scripts/Examples.material
new file mode 100644
index 00000000..306da3ee
--- /dev/null
+++ b/data/ogre-simulator/media/materials/scripts/Examples.material
@@ -0,0 +1,33 @@
+
+
+material Examples/Robot
+{
+	// Software blending technique
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture r2skin.jpg
+			}
+		}
+	}
+}
+
+material Examples/GrassFloor
+{
+	technique
+	{
+		pass
+		{
+			texture_unit
+			{
+				texture grass_1024.jpg
+			}
+		}
+	}
+}
+
+
diff --git a/data/ogre-simulator/media/materials/textures/grass_1024.jpg b/data/ogre-simulator/media/materials/textures/grass_1024.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e65691b3ade1d22b29624f885015865c6d3aa4b6
GIT binary patch
literal 202003
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%0A4{k
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
Xu2XUxA8-vn4>LCY6;mVdpb!7qO@a;b

literal 0
HcmV?d00001

diff --git a/data/ogre-simulator/media/materials/textures/r2skin.jpg b/data/ogre-simulator/media/materials/textures/r2skin.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3e83a1246c0ee2f665e7b6df2ee92313e7ad2681
GIT binary patch
literal 44863
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

literal 0
HcmV?d00001

diff --git a/data/ogre-simulator/media/models/robot.mesh b/data/ogre-simulator/media/models/robot.mesh
new file mode 100644
index 0000000000000000000000000000000000000000..a191498e89d75db3c3509f56abdbd03af7bc002e
GIT binary patch
literal 42612
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%0Dp0I3hV7Z$xvVJY<m5<snt-m7{5}}o#%b+
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

literal 0
HcmV?d00001

diff --git a/data/ogre-simulator/media/models/robot.skeleton b/data/ogre-simulator/media/models/robot.skeleton
new file mode 100644
index 0000000000000000000000000000000000000000..0aa8bde538159fee69f9f86311d4191f0821bf9b
GIT binary patch
literal 18984
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
R`*UW{ltA?^97o0(>%S(!c+CI+

literal 0
HcmV?d00001

diff --git a/demo/CMakeLists.txt b/demo/CMakeLists.txt
index 9793b560..b5531f13 100644
--- a/demo/CMakeLists.txt
+++ b/demo/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/demo/wireframe-simulator/CMakeLists.txt b/demo/wireframe-simulator/CMakeLists.txt
index 2455aded..4fa6ebe6 100644
--- a/demo/wireframe-simulator/CMakeLists.txt
+++ b/demo/wireframe-simulator/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/demo/wireframe-simulator/servoSimu4Points.cpp b/demo/wireframe-simulator/servoSimu4Points.cpp
index 7436e7d4..cfb20507 100644
--- a/demo/wireframe-simulator/servoSimu4Points.cpp
+++ b/demo/wireframe-simulator/servoSimu4Points.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoSimu4Points.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoSimu4Points.cpp 4659 2014-02-09 14:11:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -71,6 +71,9 @@
 
 #ifdef VISP_HAVE_DISPLAY
 
+void usage(const char *name, std::string ipath, const char *badparam);
+bool getOptions(int argc, const char **argv, std::string &ipath, bool &display);
+
 /*!
 
   Print the program options.
@@ -132,17 +135,17 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv, std::string &ipath, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'i': ipath = optarg; break;
+    case 'i': ipath = optarg_; break;
     case 'd': display = false; break;
     case 'h': usage(argv[0],ipath, NULL); return false; break;
 
     default:
-      usage(argv[0],ipath, optarg);
+      usage(argv[0],ipath, optarg_);
       return false; break;
     }
   }
@@ -151,7 +154,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, bool &display)
     // standalone param or error
     usage(argv[0], ipath, NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -162,36 +165,35 @@ bool getOptions(int argc, const char **argv, std::string &ipath, bool &display)
 int
 main(int argc, const char ** argv)
 {
-  bool opt_display = true;
-  std::string opt_ipath;
-  std::string env_ipath;
-  std::string ipath ;
-  std::string filename;
-  
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_display) == false) {
-    exit (-1);
-  }
-  
-  vpImage<vpRGBa> Iint(480,640,255);
-  vpImage<vpRGBa> Iext1(480,640,255);
-  vpImage<vpRGBa> Iext2(480,640,255);
+  try {
+    bool opt_display = true;
+    std::string opt_ipath;
+    std::string env_ipath;
+    std::string ipath ;
+    std::string filename;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_display) == false) {
+      exit (-1);
+    }
+
+    vpImage<vpRGBa> Iint(480,640,255);
+    vpImage<vpRGBa> Iext1(480,640,255);
+    vpImage<vpRGBa> Iext2(480,640,255);
 
 #if defined VISP_HAVE_X11
-  vpDisplayX display[3];
+    vpDisplayX display[3];
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV display[3];
+    vpDisplayOpenCV display[3];
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display[3];
+    vpDisplayGDI display[3];
 #elif defined VISP_HAVE_D3D9
-  vpDisplayD3D display[3];
+    vpDisplayD3D display[3];
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display[3];
+    vpDisplayGTK display[3];
 #endif
-  
-  if (opt_display)
-  {
-    try
+
+    if (opt_display)
     {
       // Display size is automatically defined by the image (I) size
       display[0].init(Iint, 100, 100,"The internal view") ;
@@ -207,236 +209,146 @@ main(int argc, const char ** argv)
       vpDisplay::display(Iext2);
       vpDisplay::flush(Iext2);
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
 
-  vpServo task;
-  vpSimulatorCamera robot ;
-  float sampling_time = 0.040f; // Sampling period in second
-  robot.setSamplingTime(sampling_time);
-
-  // Since the task gain lambda is very high, we need to increase default max velocities
-  robot.setMaxTranslationVelocity(10);
-  robot.setMaxRotationVelocity(vpMath::rad(180));
-
-  // Set initial position of the object in the camera frame
-  vpHomogeneousMatrix cMo(0,0.1,2.0,vpMath::rad(35),vpMath::rad(25),0);
-  // Set desired position of the object in the camera frame
-  vpHomogeneousMatrix cdMo(0.0,0.0,1.0,vpMath::rad(0),vpMath::rad(0),vpMath::rad(0));
-  // Set initial position of the object in the world frame
-  vpHomogeneousMatrix wMo(0.0,0.0,0.2,0,0,0);
-  // Position of the camera in the world frame
-  vpHomogeneousMatrix wMc, cMw;
-  wMc = wMo * cMo.inverse();
-  cMw = wMc.inverse();
-
-  //The four point used as visual features
-  vpPoint point[4] ;
-  point[0].setWorldCoordinates(-0.1,-0.1,0) ;
-  point[3].setWorldCoordinates(-0.1,0.1,0) ;
-  point[2].setWorldCoordinates(0.1,0.1,0) ;
-  point[1].setWorldCoordinates(0.1,-0.1,0) ;
-  
-  // Projection of the points
-  for (int i = 0 ; i < 4 ; i++)
-    point[i].track(cMo);
-
-  //Set the current visual feature
-  vpFeaturePoint p[4];
-  for (int i = 0 ; i < 4 ; i++)
-    vpFeatureBuilder::create(p[i], point[i]);
-  
-  // Projection of the points
-  for (int i = 0 ; i < 4 ; i++)
-    point[i].track(cdMo);
-
-  vpFeaturePoint pd[4];
-  for (int i = 0 ; i < 4 ; i++)
-    vpFeatureBuilder::create(pd[i], point[i]);
-
-  task.setServo(vpServo::EYEINHAND_L_cVe_eJe);
-  task.setInteractionMatrixType(vpServo::DESIRED);
-  
-  vpHomogeneousMatrix cMe; // Identity
-  vpVelocityTwistMatrix cVe(cMe);
-  task.set_cVe(cVe);
-
-  vpMatrix eJe;
-  robot.get_eJe(eJe);
-  task.set_eJe(eJe);
-  
-  for (int i = 0 ; i < 4 ; i++)
-    task.addFeature(p[i],pd[i]) ;
-  
-  task.setLambda(10);
-  
-  std::list<vpImageSimulator> list;
-  vpImageSimulator imsim;
-  
-  vpColVector X[4];
-  for (int i = 0; i < 4; i++) X[i].resize(3);
-  X[0][0] = -0.2;
-  X[0][1] = -0.2;
-  X[0][2] = 0;
-  
-  X[1][0] = 0.2;
-  X[1][1] = -0.2;
-  X[1][2] = 0;
-  
-  X[2][0] = 0.2;
-  X[2][1] = 0.2;
-  X[2][2] = 0;
-  
-  X[3][0] = -0.2;
-  X[3][1] = 0.2;
-  X[3][2] = 0;
-  
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-  
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-  
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  
-  filename = ipath +  vpIoTools::path("/ViSP-images/mire/mire.pgm");
-
-  try
-  {
-    imsim.init(filename.c_str(), X);
-  }
-  catch(...)
-  {
-    vpTRACE("You need the ViSP data ");
-    task.kill();
-    return 1;
-  }
-  
-  list.push_back(imsim);
-  
-  vpWireFrameSimulator sim;
-  
-  // Set the scene
-  sim.initScene(vpWireFrameSimulator::PLATE, vpWireFrameSimulator::D_STANDARD,list);
-
-  // Initialize simulator frames
-  sim.set_fMo( wMo );  // Position of the object in the world reference frame
-  sim.setCameraPositionRelObj(cMo) ; // initial position of the camera
-  sim.setDesiredCameraPosition(cdMo); // desired position of the camera
-  
-  // Set the External camera position
-  vpHomogeneousMatrix camMf(vpHomogeneousMatrix(0.0,0,3.5,vpMath::rad(0),vpMath::rad(30),0));
-  sim.setExternalCameraPosition(camMf);
-  
-  //Computes the position of a camera which is fixed in the object frame
-  vpHomogeneousMatrix camoMf(0,0.0,1.5,0,vpMath::rad(140),0);
-  camoMf = camoMf*(sim.get_fMo().inverse());
-  
-  //Set the parameters of the cameras (internal and external)
-  vpCameraParameters camera(1000,1000,320,240);
-  sim.setInternalCameraParameters(camera);
-  sim.setExternalCameraParameters(camera);
-  
-  int stop = 10;
-  
-  if (opt_display)
-  {
-    stop = 2500;
-    
-    //Get the internal and external views
-    sim.getInternalImage(Iint);
-    sim.getExternalImage(Iext1);
-    sim.getExternalImage(Iext2, camoMf);
-
-    //Display the object frame (current and desired position)
-    vpDisplay::displayFrame(Iint,cMo,camera,0.2,vpColor::none);
-    vpDisplay::displayFrame(Iint,cdMo,camera,0.2,vpColor::none);
-
-    //Display the object frame the world reference frame and the camera frame
-    vpDisplay::displayFrame(Iext1,camMf*sim.get_fMo()*cMo.inverse(),camera,0.2,vpColor::none);
-    vpDisplay::displayFrame(Iext1,camMf*sim.get_fMo(),camera,0.2,vpColor::none);
-    vpDisplay::displayFrame(Iext1,camMf,camera,0.2,vpColor::none);
-
-    //Display the world reference frame and the object frame
-    vpDisplay::displayFrame(Iext2,camoMf,camera,0.2,vpColor::none);
-    vpDisplay::displayFrame(Iext2,camoMf*sim.get_fMo(),camera,0.05,vpColor::none);
-
-    vpDisplay::flush(Iint);
-    vpDisplay::flush(Iext1);
-    vpDisplay::flush(Iext2);
-    
-    std::cout << "Click on a display" << std::endl;
-    while (!vpDisplay::getClick(Iint,false) && !vpDisplay::getClick(Iext1,false) && !vpDisplay::getClick(Iext2,false)){};
-  }
+    vpServo task;
+    vpSimulatorCamera robot ;
+    float sampling_time = 0.040f; // Sampling period in second
+    robot.setSamplingTime(sampling_time);
+
+    // Since the task gain lambda is very high, we need to increase default max velocities
+    robot.setMaxTranslationVelocity(10);
+    robot.setMaxRotationVelocity(vpMath::rad(180));
+
+    // Set initial position of the object in the camera frame
+    vpHomogeneousMatrix cMo(0,0.1,2.0,vpMath::rad(35),vpMath::rad(25),0);
+    // Set desired position of the object in the camera frame
+    vpHomogeneousMatrix cdMo(0.0,0.0,1.0,vpMath::rad(0),vpMath::rad(0),vpMath::rad(0));
+    // Set initial position of the object in the world frame
+    vpHomogeneousMatrix wMo(0.0,0.0,0.2,0,0,0);
+    // Position of the camera in the world frame
+    vpHomogeneousMatrix wMc, cMw;
+    wMc = wMo * cMo.inverse();
+    cMw = wMc.inverse();
+
+    //The four point used as visual features
+    vpPoint point[4] ;
+    point[0].setWorldCoordinates(-0.1,-0.1,0) ;
+    point[3].setWorldCoordinates(-0.1,0.1,0) ;
+    point[2].setWorldCoordinates(0.1,0.1,0) ;
+    point[1].setWorldCoordinates(0.1,-0.1,0) ;
+
+    // Projection of the points
+    for (int i = 0 ; i < 4 ; i++)
+      point[i].track(cMo);
 
-  robot.setPosition( wMc );
-  //Print the task
-  task.print() ;
+    //Set the current visual feature
+    vpFeaturePoint p[4];
+    for (int i = 0 ; i < 4 ; i++)
+      vpFeatureBuilder::create(p[i], point[i]);
 
-  int iter = 0;
-  vpColVector v ;
+    // Projection of the points
+    for (int i = 0 ; i < 4 ; i++)
+      point[i].track(cdMo);
 
-  while(iter++ < stop)
-  {
-    if (opt_display)
-    {
-      vpDisplay::display(Iint) ;
-      vpDisplay::display(Iext1) ;
-      vpDisplay::display(Iext2) ;
-    }
+    vpFeaturePoint pd[4];
+    for (int i = 0 ; i < 4 ; i++)
+      vpFeatureBuilder::create(pd[i], point[i]);
+
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe);
+    task.setInteractionMatrixType(vpServo::DESIRED);
 
-    double t = vpTime::measureTimeMs();
+    vpHomogeneousMatrix cMe; // Identity
+    vpVelocityTwistMatrix cVe(cMe);
+    task.set_cVe(cVe);
 
-    robot.get_eJe(eJe) ;
-    task.set_eJe(eJe) ;
+    vpMatrix eJe;
+    robot.get_eJe(eJe);
+    task.set_eJe(eJe);
 
-    robot.getPosition(wMc) ;
-    cMo = wMc.inverse() * wMo;
     for (int i = 0 ; i < 4 ; i++)
-    {
-      point[i].track(cMo) ;
-      vpFeatureBuilder::create(p[i],point[i])  ;
-    }
+      task.addFeature(p[i],pd[i]) ;
+
+    task.setLambda(10);
 
-    v = task.computeControlLaw() ;
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
-    
-    //Compute the movement of the object around the world reference frame.
-    vpHomogeneousMatrix a(0, 0, 0.2, 0, 0, 0);
-    vpHomogeneousMatrix b(0, 0, 0,   vpMath::rad(1.5*iter), 0, 0);
-    vpHomogeneousMatrix c(0, 0, 0,   0, vpMath::rad(2.5*iter), 0);
+    std::list<vpImageSimulator> list;
+    vpImageSimulator imsim;
 
-    // Move the object in the world frame
-    wMo = b*c*a;
+    vpColVector X[4];
+    for (int i = 0; i < 4; i++) X[i].resize(3);
+    X[0][0] = -0.2;
+    X[0][1] = -0.2;
+    X[0][2] = 0;
 
-    sim.set_fMo( wMo );  //Move the object in the simulator
-    sim.setCameraPositionRelObj(cMo);
+    X[1][0] = 0.2;
+    X[1][1] = -0.2;
+    X[1][2] = 0;
 
-    //Compute the position of the external view which is fixed in the object frame
-    camoMf.buildFrom(0,0.0,1.5,0,vpMath::rad(150),0);
+    X[2][0] = 0.2;
+    X[2][1] = 0.2;
+    X[2][2] = 0;
+
+    X[3][0] = -0.2;
+    X[3][1] = 0.2;
+    X[3][2] = 0;
+
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    filename = ipath +  vpIoTools::path("/ViSP-images/mire/mire.pgm");
+
+    imsim.init(filename.c_str(), X);
+
+    list.push_back(imsim);
+
+    vpWireFrameSimulator sim;
+
+    // Set the scene
+    sim.initScene(vpWireFrameSimulator::PLATE, vpWireFrameSimulator::D_STANDARD,list);
+
+    // Initialize simulator frames
+    sim.set_fMo( wMo );  // Position of the object in the world reference frame
+    sim.setCameraPositionRelObj(cMo) ; // initial position of the camera
+    sim.setDesiredCameraPosition(cdMo); // desired position of the camera
+
+    // Set the External camera position
+    vpHomogeneousMatrix camMf(vpHomogeneousMatrix(0.0,0,3.5,vpMath::rad(0),vpMath::rad(30),0));
+    sim.setExternalCameraPosition(camMf);
+
+    //Computes the position of a camera which is fixed in the object frame
+    vpHomogeneousMatrix camoMf(0,0.0,1.5,0,vpMath::rad(140),0);
     camoMf = camoMf*(sim.get_fMo().inverse());
 
+    //Set the parameters of the cameras (internal and external)
+    vpCameraParameters camera(1000,1000,320,240);
+    sim.setInternalCameraParameters(camera);
+    sim.setExternalCameraParameters(camera);
+
+    int stop = 10;
+
     if (opt_display)
     {
+      stop = 2500;
+
       //Get the internal and external views
       sim.getInternalImage(Iint);
       sim.getExternalImage(Iext1);
-      sim.getExternalImage(Iext2,camoMf);
+      sim.getExternalImage(Iext2, camoMf);
 
       //Display the object frame (current and desired position)
       vpDisplay::displayFrame(Iint,cMo,camera,0.2,vpColor::none);
       vpDisplay::displayFrame(Iint,cdMo,camera,0.2,vpColor::none);
 
-      //Display the camera frame, the object frame the world reference frame
-      vpDisplay::displayFrame(Iext1,sim.getExternalCameraPosition()*sim.get_fMo()*cMo.inverse(),camera,0.2,vpColor::none);
-      vpDisplay::displayFrame(Iext1,sim.getExternalCameraPosition()*sim.get_fMo(),camera,0.2,vpColor::none);
-      vpDisplay::displayFrame(Iext1,sim.getExternalCameraPosition(),camera,0.2,vpColor::none);
+      //Display the object frame the world reference frame and the camera frame
+      vpDisplay::displayFrame(Iext1,camMf*sim.get_fMo()*cMo.inverse(),camera,0.2,vpColor::none);
+      vpDisplay::displayFrame(Iext1,camMf*sim.get_fMo(),camera,0.2,vpColor::none);
+      vpDisplay::displayFrame(Iext1,camMf,camera,0.2,vpColor::none);
 
       //Display the world reference frame and the object frame
       vpDisplay::displayFrame(Iext2,camoMf,camera,0.2,vpColor::none);
@@ -445,17 +357,97 @@ main(int argc, const char ** argv)
       vpDisplay::flush(Iint);
       vpDisplay::flush(Iext1);
       vpDisplay::flush(Iext2);
+
+      std::cout << "Click on a display" << std::endl;
+      while (!vpDisplay::getClick(Iint,false) && !vpDisplay::getClick(Iext1,false) && !vpDisplay::getClick(Iext2,false)){};
     }
 
-    vpTime::wait(t, sampling_time * 1000); // Wait 40 ms
+    robot.setPosition( wMc );
+    //Print the task
+    task.print() ;
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
-  }
+    int iter = 0;
+    vpColVector v ;
 
-  task.print() ;
-  task.kill() ;
+    while(iter++ < stop)
+    {
+      if (opt_display)
+      {
+        vpDisplay::display(Iint) ;
+        vpDisplay::display(Iext1) ;
+        vpDisplay::display(Iext2) ;
+      }
+
+      double t = vpTime::measureTimeMs();
+
+      robot.get_eJe(eJe) ;
+      task.set_eJe(eJe) ;
+
+      robot.getPosition(wMc) ;
+      cMo = wMc.inverse() * wMo;
+      for (int i = 0 ; i < 4 ; i++)
+      {
+        point[i].track(cMo) ;
+        vpFeatureBuilder::create(p[i],point[i])  ;
+      }
+
+      v = task.computeControlLaw() ;
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      //Compute the movement of the object around the world reference frame.
+      vpHomogeneousMatrix a(0, 0, 0.2, 0, 0, 0);
+      vpHomogeneousMatrix b(0, 0, 0,   vpMath::rad(1.5*iter), 0, 0);
+      vpHomogeneousMatrix c(0, 0, 0,   0, vpMath::rad(2.5*iter), 0);
+
+      // Move the object in the world frame
+      wMo = b*c*a;
+
+      sim.set_fMo( wMo );  //Move the object in the simulator
+      sim.setCameraPositionRelObj(cMo);
+
+      //Compute the position of the external view which is fixed in the object frame
+      camoMf.buildFrom(0,0.0,1.5,0,vpMath::rad(150),0);
+      camoMf = camoMf*(sim.get_fMo().inverse());
+
+      if (opt_display)
+      {
+        //Get the internal and external views
+        sim.getInternalImage(Iint);
+        sim.getExternalImage(Iext1);
+        sim.getExternalImage(Iext2,camoMf);
+
+        //Display the object frame (current and desired position)
+        vpDisplay::displayFrame(Iint,cMo,camera,0.2,vpColor::none);
+        vpDisplay::displayFrame(Iint,cdMo,camera,0.2,vpColor::none);
+
+        //Display the camera frame, the object frame the world reference frame
+        vpDisplay::displayFrame(Iext1,sim.getExternalCameraPosition()*sim.get_fMo()*cMo.inverse(),camera,0.2,vpColor::none);
+        vpDisplay::displayFrame(Iext1,sim.getExternalCameraPosition()*sim.get_fMo(),camera,0.2,vpColor::none);
+        vpDisplay::displayFrame(Iext1,sim.getExternalCameraPosition(),camera,0.2,vpColor::none);
+
+        //Display the world reference frame and the object frame
+        vpDisplay::displayFrame(Iext2,camoMf,camera,0.2,vpColor::none);
+        vpDisplay::displayFrame(Iext2,camoMf*sim.get_fMo(),camera,0.05,vpColor::none);
+
+        vpDisplay::flush(Iint);
+        vpDisplay::flush(Iext1);
+        vpDisplay::flush(Iext2);
+      }
+
+      vpTime::wait(t, sampling_time * 1000); // Wait 40 ms
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    }
+
+    task.print() ;
+    task.kill() ;
 
-  return 0;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 #else
 int
diff --git a/demo/wireframe-simulator/servoSimuCylinder.cpp b/demo/wireframe-simulator/servoSimuCylinder.cpp
index 0dc0fa01..6e3fd352 100644
--- a/demo/wireframe-simulator/servoSimuCylinder.cpp
+++ b/demo/wireframe-simulator/servoSimuCylinder.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoSimuCylinder.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoSimuCylinder.cpp 4659 2014-02-09 14:11:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -71,6 +71,8 @@
 #define GETOPTARGS	"dh"
 
 #ifdef VISP_HAVE_DISPLAY
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &display);
 
 /*!
 
@@ -126,16 +128,16 @@ OPTIONS:                                          \n\
 */
 bool getOptions(int argc, const char **argv, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'd': display = false; break;
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -144,7 +146,7 @@ bool getOptions(int argc, const char **argv, bool &display)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -155,31 +157,30 @@ bool getOptions(int argc, const char **argv, bool &display)
 int
 main(int argc, const char ** argv)
 {
-  bool opt_display = true;
-  
-  // Read the command line options
-  if (getOptions(argc, argv, opt_display) == false) {
-    exit (-1);
-  }
-  
-  vpImage<vpRGBa> Iint(480,640,255);
-  vpImage<vpRGBa> Iext(480,640,255);
+  try {
+    bool opt_display = true;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_display) == false) {
+      exit (-1);
+    }
+
+    vpImage<vpRGBa> Iint(480,640,255);
+    vpImage<vpRGBa> Iext(480,640,255);
 
 #if defined VISP_HAVE_X11
-  vpDisplayX display[2];
+    vpDisplayX display[2];
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV display[2];
+    vpDisplayOpenCV display[2];
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display[2];
+    vpDisplayGDI display[2];
 #elif defined VISP_HAVE_D3D9
-  vpDisplayD3D display[2];
+    vpDisplayD3D display[2];
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display[2];
+    vpDisplayGTK display[2];
 #endif
-  
-  if (opt_display)
-  {
-    try
+
+    if (opt_display)
     {
       // Display size is automatically defined by the image (I) size
       display[0].init(Iint, 100, 100,"The internal view") ;
@@ -191,197 +192,82 @@ main(int argc, const char ** argv)
       vpDisplay::display(Iext);
       vpDisplay::flush(Iext);
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
 
-  vpServo task;
-  vpRobotCamera robot ;
-  float sampling_time = 0.040f; // Sampling period in second
-  robot.setSamplingTime(sampling_time);
-
-  // Set initial position of the object in the camera frame
-  vpHomogeneousMatrix cMo(0,0.1,0.3,vpMath::rad(35),vpMath::rad(25),vpMath::rad(75));
-  // Set desired position of the object in the camera frame
-  vpHomogeneousMatrix cdMo(0.0,0.0,0.5,vpMath::rad(90),vpMath::rad(0),vpMath::rad(0));
-  // Set initial position of the object in the world frame
-  vpHomogeneousMatrix wMo(0.0,0.0,0,0,0,0);
-  // Position of the camera in the world frame
-  vpHomogeneousMatrix wMc, cMw;
-  wMc = wMo * cMo.inverse();
-  cMw = wMc.inverse();
-  
-  // Create a cylinder
-  vpCylinder cylinder(0,0,1,0,0,0,0.1);
-  
-  // Projection of the cylinder
-  cylinder.track(cMo);
-
-  //Set the current visual feature
-  vpFeatureLine l[2];
-  vpFeatureBuilder::create(l[0], cylinder, vpCylinder::line1);
-  vpFeatureBuilder::create(l[1], cylinder, vpCylinder::line2);
-    
-  // Projection of the cylinder
-  cylinder.track(cdMo);
-
-  vpFeatureLine ld[2];
-  vpFeatureBuilder::create(ld[0], cylinder, vpCylinder::line1);
-  vpFeatureBuilder::create(ld[1], cylinder, vpCylinder::line2);
-
-  task.setServo(vpServo::EYEINHAND_L_cVe_eJe);
-  task.setInteractionMatrixType(vpServo::DESIRED);
-  
-  vpHomogeneousMatrix cMe;
-  vpVelocityTwistMatrix cVe(cMe);
-  task.set_cVe(cVe);
-
-  vpMatrix eJe;
-  robot.get_eJe(eJe);
-  task.set_eJe(eJe);
-  
-  for (int i = 0 ; i < 2 ; i++)
-    task.addFeature(l[i],ld[i]) ;
-  
-  task.setLambda(1);
-  
-  vpWireFrameSimulator sim;
-  
-  // Set the scene
-  sim.initScene(vpWireFrameSimulator::CYLINDER, vpWireFrameSimulator::D_STANDARD);
-  
-  // Initialize simulator frames
-  sim.set_fMo( wMo );  // Position of the object in the world reference frame
-  sim.setCameraPositionRelObj(cMo) ; // initial position of the camera
-  sim.setDesiredCameraPosition(cdMo); // desired position of the camera
-
-  // Set the External camera position
-  vpHomogeneousMatrix camMf(vpHomogeneousMatrix(0.0,0,3.5,vpMath::rad(0),vpMath::rad(30),0));
-  sim.setExternalCameraPosition(camMf);
-    
-  // Set the parameters of the cameras (internal and external)
-  vpCameraParameters camera(1000,1000,320,240);
-  sim.setInternalCameraParameters(camera);
-  sim.setExternalCameraParameters(camera);
-  
-  int stop = 10;
-  
-  if (opt_display)
-  {
-    stop = 2500;
+    vpServo task;
+    vpRobotCamera robot ;
+    float sampling_time = 0.040f; // Sampling period in second
+    robot.setSamplingTime(sampling_time);
+
+    // Set initial position of the object in the camera frame
+    vpHomogeneousMatrix cMo(0,0.1,0.3,vpMath::rad(35),vpMath::rad(25),vpMath::rad(75));
+    // Set desired position of the object in the camera frame
+    vpHomogeneousMatrix cdMo(0.0,0.0,0.5,vpMath::rad(90),vpMath::rad(0),vpMath::rad(0));
+    // Set initial position of the object in the world frame
+    vpHomogeneousMatrix wMo(0.0,0.0,0,0,0,0);
+    // Position of the camera in the world frame
+    vpHomogeneousMatrix wMc, cMw;
+    wMc = wMo * cMo.inverse();
+    cMw = wMc.inverse();
+
+    // Create a cylinder
+    vpCylinder cylinder(0,0,1,0,0,0,0.1);
+
+    // Projection of the cylinder
+    cylinder.track(cMo);
+
+    //Set the current visual feature
+    vpFeatureLine l[2];
+    vpFeatureBuilder::create(l[0], cylinder, vpCylinder::line1);
+    vpFeatureBuilder::create(l[1], cylinder, vpCylinder::line2);
     
-    //Get the internal and external views
-    sim.getInternalImage(Iint);
-    sim.getExternalImage(Iext);
+    // Projection of the cylinder
+    cylinder.track(cdMo);
 
-    //Display the object frame (current and desired position)
-    vpDisplay::displayFrame(Iint,cMo,camera,0.2,vpColor::none);
-    vpDisplay::displayFrame(Iint,cdMo,camera,0.2,vpColor::none);
+    vpFeatureLine ld[2];
+    vpFeatureBuilder::create(ld[0], cylinder, vpCylinder::line1);
+    vpFeatureBuilder::create(ld[1], cylinder, vpCylinder::line2);
 
-    //Display the object frame the world reference frame and the camera frame
-    vpDisplay::displayFrame(Iext,camMf*sim.get_fMo()*cMo.inverse(),camera,0.2,vpColor::none);
-    vpDisplay::displayFrame(Iext,camMf*sim.get_fMo(),camera,0.2,vpColor::none);
-    vpDisplay::displayFrame(Iext,camMf,camera,0.2,vpColor::none);
-
-    vpDisplay::flush(Iint);
-    vpDisplay::flush(Iext);
-    
-    std::cout << "Click on a display" << std::endl;
-    while (!vpDisplay::getClick(Iint,false) && !vpDisplay::getClick(Iext,false)){};
-  }
-  
-  robot.setPosition( cMw );
-
-  //Print the task
-  task.print();
-
-  int iter = 0;
-  vpColVector v ;
-
-  //Set the secondary task parameters
-  vpColVector e1(6) ; e1 = 0 ;
-  vpColVector e2(6) ; e2 = 0 ;
-  vpColVector proj_e1 ;
-  vpColVector proj_e2 ;
-  iter = 0;
-  double rapport = 0;
-  double vitesse = 0.3;
-  int tempo = 600;
-
-  while(iter++ < stop)
-  {
-    if (opt_display)
-    {
-      vpDisplay::display(Iint) ;
-      vpDisplay::display(Iext) ;
-    }
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe);
+    task.setInteractionMatrixType(vpServo::DESIRED);
 
-    double t = vpTime::measureTimeMs();
+    vpHomogeneousMatrix cMe;
+    vpVelocityTwistMatrix cVe(cMe);
+    task.set_cVe(cVe);
 
-    robot.get_eJe(eJe) ;
-    task.set_eJe(eJe) ;
+    vpMatrix eJe;
+    robot.get_eJe(eJe);
+    task.set_eJe(eJe);
 
-    robot.getPosition(cMw) ;
-    cMo = cMw * wMo;
+    for (int i = 0 ; i < 2 ; i++)
+      task.addFeature(l[i],ld[i]) ;
 
-    cylinder.track(cMo) ;
-    vpFeatureBuilder::create(l[0], cylinder, vpCylinder::line1);
-    vpFeatureBuilder::create(l[1], cylinder, vpCylinder::line2);
+    task.setLambda(1);
 
-    v = task.computeControlLaw() ;
-    
-    //Compute the velocity with the secondary task
-    if ( iter%tempo < 200  &&  iter%tempo >= 0)
-    {
-      e2 = 0;
-      e1[0] = -fabs(vitesse)  ;
-      proj_e1 = task.secondaryTask(e1);
-      rapport = -vitesse/proj_e1[0];
-      proj_e1 *= rapport ;
-      v += proj_e1 ;
-    }
+    vpWireFrameSimulator sim;
 
-    if ( iter%tempo < 300 &&  iter%tempo >= 200)
-    {
-      e1 = 0;
-      e2[1] = -fabs(vitesse)  ;
-      proj_e2 = task.secondaryTask(e2);
-      rapport = -vitesse/proj_e2[1];
-      proj_e2 *= rapport ;
-      v += proj_e2 ;
-    }
+    // Set the scene
+    sim.initScene(vpWireFrameSimulator::CYLINDER, vpWireFrameSimulator::D_STANDARD);
 
-    if ( iter%tempo < 500 &&  iter%tempo >= 300)
-    {
-      e2 = 0;
-      e1[0] = -fabs(vitesse)  ;
-      proj_e1 = task.secondaryTask(e1);
-      rapport = vitesse/proj_e1[0];
-      proj_e1 *= rapport ;
-      v += proj_e1 ;
-    }
+    // Initialize simulator frames
+    sim.set_fMo( wMo );  // Position of the object in the world reference frame
+    sim.setCameraPositionRelObj(cMo) ; // initial position of the camera
+    sim.setDesiredCameraPosition(cdMo); // desired position of the camera
 
-    if ( iter%tempo < 600 &&  iter%tempo >= 500)
-    {
-      e1 = 0;
-      e2[1] = -fabs(vitesse)  ;
-      proj_e2 = task.secondaryTask(e2);
-      rapport = vitesse/proj_e2[1];
-      proj_e2 *= rapport ;
-      v += proj_e2 ;
-    }
+    // Set the External camera position
+    vpHomogeneousMatrix camMf(vpHomogeneousMatrix(0.0,0,3.5,vpMath::rad(0),vpMath::rad(30),0));
+    sim.setExternalCameraPosition(camMf);
     
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    // Set the parameters of the cameras (internal and external)
+    vpCameraParameters camera(1000,1000,320,240);
+    sim.setInternalCameraParameters(camera);
+    sim.setExternalCameraParameters(camera);
 
-    // Update the simulator frames
-    sim.set_fMo( wMo ); // This line is not really requested since the object doesn't move
-    sim.setCameraPositionRelObj( cMo );
+    int stop = 10;
 
     if (opt_display)
     {
+      stop = 2500;
+
       //Get the internal and external views
       sim.getInternalImage(Iint);
       sim.getExternalImage(Iext);
@@ -391,23 +277,137 @@ main(int argc, const char ** argv)
       vpDisplay::displayFrame(Iint,cdMo,camera,0.2,vpColor::none);
 
       //Display the object frame the world reference frame and the camera frame
-      vpDisplay::displayFrame(Iext,sim.getExternalCameraPosition()*sim.get_fMo()*cMo.inverse(),camera,0.2,vpColor::none);
-      vpDisplay::displayFrame(Iext,sim.getExternalCameraPosition()*sim.get_fMo(),camera,0.2,vpColor::none);
-      vpDisplay::displayFrame(Iext,sim.getExternalCameraPosition(),camera,0.2,vpColor::none);;
+      vpDisplay::displayFrame(Iext,camMf*sim.get_fMo()*cMo.inverse(),camera,0.2,vpColor::none);
+      vpDisplay::displayFrame(Iext,camMf*sim.get_fMo(),camera,0.2,vpColor::none);
+      vpDisplay::displayFrame(Iext,camMf,camera,0.2,vpColor::none);
 
       vpDisplay::flush(Iint);
       vpDisplay::flush(Iext);
+
+      std::cout << "Click on a display" << std::endl;
+      while (!vpDisplay::getClick(Iint,false) && !vpDisplay::getClick(Iext,false)){};
     }
 
-    vpTime::wait(t, sampling_time * 1000); // Wait 40 ms
+    robot.setPosition( cMw );
 
-    std::cout << "|| s - s* || = " << (task.getError() ).sumSquare() <<std::endl ;
-  }
+    //Print the task
+    task.print();
+
+    int iter = 0;
+    vpColVector v ;
+
+    //Set the secondary task parameters
+    vpColVector e1(6) ; e1 = 0 ;
+    vpColVector e2(6) ; e2 = 0 ;
+    vpColVector proj_e1 ;
+    vpColVector proj_e2 ;
+    iter = 0;
+    double rapport = 0;
+    double vitesse = 0.3;
+    int tempo = 600;
 
-  task.print() ;
-  task.kill() ;
+    while(iter++ < stop)
+    {
+      if (opt_display)
+      {
+        vpDisplay::display(Iint) ;
+        vpDisplay::display(Iext) ;
+      }
+
+      double t = vpTime::measureTimeMs();
+
+      robot.get_eJe(eJe) ;
+      task.set_eJe(eJe) ;
+
+      robot.getPosition(cMw) ;
+      cMo = cMw * wMo;
+
+      cylinder.track(cMo) ;
+      vpFeatureBuilder::create(l[0], cylinder, vpCylinder::line1);
+      vpFeatureBuilder::create(l[1], cylinder, vpCylinder::line2);
+
+      v = task.computeControlLaw() ;
+
+      //Compute the velocity with the secondary task
+      if ( iter%tempo < 200  &&  iter%tempo >= 0)
+      {
+        e2 = 0;
+        e1[0] = -fabs(vitesse)  ;
+        proj_e1 = task.secondaryTask(e1);
+        rapport = -vitesse/proj_e1[0];
+        proj_e1 *= rapport ;
+        v += proj_e1 ;
+      }
+
+      if ( iter%tempo < 300 &&  iter%tempo >= 200)
+      {
+        e1 = 0;
+        e2[1] = -fabs(vitesse)  ;
+        proj_e2 = task.secondaryTask(e2);
+        rapport = -vitesse/proj_e2[1];
+        proj_e2 *= rapport ;
+        v += proj_e2 ;
+      }
+
+      if ( iter%tempo < 500 &&  iter%tempo >= 300)
+      {
+        e2 = 0;
+        e1[0] = -fabs(vitesse)  ;
+        proj_e1 = task.secondaryTask(e1);
+        rapport = vitesse/proj_e1[0];
+        proj_e1 *= rapport ;
+        v += proj_e1 ;
+      }
+
+      if ( iter%tempo < 600 &&  iter%tempo >= 500)
+      {
+        e1 = 0;
+        e2[1] = -fabs(vitesse)  ;
+        proj_e2 = task.secondaryTask(e2);
+        rapport = vitesse/proj_e2[1];
+        proj_e2 *= rapport ;
+        v += proj_e2 ;
+      }
+
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      // Update the simulator frames
+      sim.set_fMo( wMo ); // This line is not really requested since the object doesn't move
+      sim.setCameraPositionRelObj( cMo );
+
+      if (opt_display)
+      {
+        //Get the internal and external views
+        sim.getInternalImage(Iint);
+        sim.getExternalImage(Iext);
+
+        //Display the object frame (current and desired position)
+        vpDisplay::displayFrame(Iint,cMo,camera,0.2,vpColor::none);
+        vpDisplay::displayFrame(Iint,cdMo,camera,0.2,vpColor::none);
+
+        //Display the object frame the world reference frame and the camera frame
+        vpDisplay::displayFrame(Iext,sim.getExternalCameraPosition()*sim.get_fMo()*cMo.inverse(),camera,0.2,vpColor::none);
+        vpDisplay::displayFrame(Iext,sim.getExternalCameraPosition()*sim.get_fMo(),camera,0.2,vpColor::none);
+        vpDisplay::displayFrame(Iext,sim.getExternalCameraPosition(),camera,0.2,vpColor::none);;
+
+        vpDisplay::flush(Iint);
+        vpDisplay::flush(Iext);
+      }
+
+      vpTime::wait(t, sampling_time * 1000); // Wait 40 ms
+
+      std::cout << "|| s - s* || = " << (task.getError() ).sumSquare() <<std::endl ;
+    }
+
+    task.print() ;
+    task.kill() ;
 
-  return 0;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 #else
 int
diff --git a/demo/wireframe-simulator/servoSimuSphere.cpp b/demo/wireframe-simulator/servoSimuSphere.cpp
index fce1d042..b26af02a 100644
--- a/demo/wireframe-simulator/servoSimuSphere.cpp
+++ b/demo/wireframe-simulator/servoSimuSphere.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoSimuSphere.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoSimuSphere.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -74,6 +74,11 @@
 
 #ifdef VISP_HAVE_DISPLAY
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &display);
+void computeVisualFeatures(const vpSphere &sphere, vpGenericFeature &s);
+void computeInteractionMatrix(const vpGenericFeature &s,const vpSphere &sphere, vpMatrix &L);
+
 /*!
 
   Print the program options.
@@ -119,16 +124,16 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'd': display = false; break;
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -137,7 +142,7 @@ bool getOptions(int argc, const char **argv, bool &display)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -157,7 +162,7 @@ bool getOptions(int argc, const char **argv, bool &display)
   with h2 = (gx²+gy²)/(4*n20*gy²+4*n02*gx²-8n11gxgy)
   with n20,n02,n11 the second order moments of the sphere
 */
-void computeVisualFeatures(const vpSphere sphere, vpGenericFeature &s)
+void computeVisualFeatures(const vpSphere &sphere, vpGenericFeature &s)
 {
   double gx = sphere.get_x();
   double gy = sphere.get_y();
@@ -185,7 +190,7 @@ void computeVisualFeatures(const vpSphere sphere, vpGenericFeature &s)
   with I3 the 3x3 identity matrix
   with [s]x the skew matrix related to s
 */
-void computeInteractionMatrix(const vpGenericFeature s,const vpSphere sphere, vpMatrix &L)
+void computeInteractionMatrix(const vpGenericFeature &s,const vpSphere &sphere, vpMatrix &L)
 {
   L = 0;
   L[0][0] = -1/sphere.getR();
@@ -208,32 +213,31 @@ void computeInteractionMatrix(const vpGenericFeature s,const vpSphere sphere, vp
 int
 main(int argc, const char ** argv)
 {
-  bool opt_display = true;
-  
-  // Read the command line options
-  if (getOptions(argc, argv, opt_display) == false) {
-    exit (-1);
-  }
-  
-  vpImage<vpRGBa> Iint(480,640,255);
-  vpImage<vpRGBa> Iext1(480,640,255);
-  vpImage<vpRGBa> Iext2(480,640,255);
+  try {
+    bool opt_display = true;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_display) == false) {
+      exit (-1);
+    }
+
+    vpImage<vpRGBa> Iint(480,640,255);
+    vpImage<vpRGBa> Iext1(480,640,255);
+    vpImage<vpRGBa> Iext2(480,640,255);
 
 #if defined VISP_HAVE_X11
-  vpDisplayX display[3];
+    vpDisplayX display[3];
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV display[3];
+    vpDisplayOpenCV display[3];
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display[3];
+    vpDisplayGDI display[3];
 #elif defined VISP_HAVE_D3D9
-  vpDisplayD3D display[3];
+    vpDisplayD3D display[3];
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display[3];
+    vpDisplayGTK display[3];
 #endif
-  
-  if (opt_display)
-  {
-    try
+
+    if (opt_display)
     {
       // Display size is automatically defined by the image (I) size
       display[0].init(Iint, 100, 100,"The internal view") ;
@@ -249,162 +253,92 @@ main(int argc, const char ** argv)
       vpDisplay::display(Iext2);
       vpDisplay::flush(Iext2);
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
 
-  vpServo task;
-  vpRobotCamera robot ;
-  float sampling_time = 0.040f; // Sampling period in second
-  robot.setSamplingTime(sampling_time);
-
-  // Since the task gain lambda is very high, we need to increase default max velocities
-  robot.setMaxTranslationVelocity(10);
-  robot.setMaxRotationVelocity(vpMath::rad(180));
-
-  // Set initial position of the object in the camera frame
-  vpHomogeneousMatrix cMo(0,0.1,2.0,vpMath::rad(35),vpMath::rad(25),0);
-  // Set desired position of the object in the camera frame
-  vpHomogeneousMatrix cdMo(0.0,0.0,0.8,vpMath::rad(0),vpMath::rad(0),vpMath::rad(0));
-  // Set initial position of the object in the world frame
-  vpHomogeneousMatrix wMo(0.0,0.0,0,0,0,0);
-  // Position of the camera in the world frame
-  vpHomogeneousMatrix wMc, cMw;
-  wMc = wMo * cMo.inverse();
-  cMw = wMc.inverse();
-
-  robot.setPosition( cMw );
-  
-  //The sphere
-  vpSphere sphere(0,0,0,0.15);
-  
-  // Projection of the sphere
-  sphere.track(cMo);
+    vpServo task;
+    vpRobotCamera robot ;
+    float sampling_time = 0.040f; // Sampling period in second
+    robot.setSamplingTime(sampling_time);
 
-  //Set the current visual feature
-  vpGenericFeature s(3);
-  computeVisualFeatures(sphere, s);
-    
-  // Projection of the points
-  sphere.track(cdMo);
+    // Since the task gain lambda is very high, we need to increase default max velocities
+    robot.setMaxTranslationVelocity(10);
+    robot.setMaxRotationVelocity(vpMath::rad(180));
 
-  vpGenericFeature sd(3);
-  computeVisualFeatures(sphere, sd);
-  
-  vpMatrix L(3,6);
-  computeInteractionMatrix(sd,sphere,L);
-  sd.setInteractionMatrix(L);
+    // Set initial position of the object in the camera frame
+    vpHomogeneousMatrix cMo(0,0.1,2.0,vpMath::rad(35),vpMath::rad(25),0);
+    // Set desired position of the object in the camera frame
+    vpHomogeneousMatrix cdMo(0.0,0.0,0.8,vpMath::rad(0),vpMath::rad(0),vpMath::rad(0));
+    // Set initial position of the object in the world frame
+    vpHomogeneousMatrix wMo(0.0,0.0,0,0,0,0);
+    // Position of the camera in the world frame
+    vpHomogeneousMatrix wMc, cMw;
+    wMc = wMo * cMo.inverse();
+    cMw = wMc.inverse();
 
-  task.setServo(vpServo::EYEINHAND_L_cVe_eJe);
-  task.setInteractionMatrixType(vpServo::DESIRED);
-  
-  vpHomogeneousMatrix cMe;
-  vpVelocityTwistMatrix cVe(cMe);
-  task.set_cVe(cVe);
+    robot.setPosition( cMw );
 
-  vpMatrix eJe;
-  robot.get_eJe(eJe);
-  task.set_eJe(eJe);
+    //The sphere
+    vpSphere sphere(0,0,0,0.15);
 
-  task.addFeature(s,sd) ;
-  
-  task.setLambda(7);
-  
-  vpWireFrameSimulator sim;
-  
-  // Set the scene
-  sim.initScene(vpWireFrameSimulator::SPHERE, vpWireFrameSimulator::D_STANDARD);
+    // Projection of the sphere
+    sphere.track(cMo);
 
-  // Initialize simulator frames
-  sim.set_fMo( wMo );  // Position of the object in the world reference frame
-  sim.setCameraPositionRelObj(cMo) ; // initial position of the camera
-  sim.setDesiredCameraPosition(cdMo); // desired position of the camera
-  
-  // Set the External camera position
-  vpHomogeneousMatrix camMf(0.0,0,3.5,vpMath::rad(0),vpMath::rad(30),0);
-  sim.setExternalCameraPosition(camMf);
-  
-  // Computes the position of a camera which is fixed in the object frame
-  vpHomogeneousMatrix camoMf(0,0.0,2.5,0,vpMath::rad(140),0);
-  camoMf = camoMf*(sim.get_fMo().inverse());
-  
-  // Set the parameters of the cameras (internal and external)
-  vpCameraParameters camera(1000,1000,320,240);
-  sim.setInternalCameraParameters(camera);
-  sim.setExternalCameraParameters(camera);
-  
-  int stop = 10;
-  
-  if (opt_display)
-  {
-    stop = 1000;
-    //Get the internal and external views
-    sim.getInternalImage(Iint);
-    sim.getExternalImage(Iext1);
-    sim.getExternalImage(Iext2,camoMf);
-
-    //Display the object frame (current and desired position)
-    vpDisplay::displayFrame(Iint,cMo,camera,0.2,vpColor::none);
-    vpDisplay::displayFrame(Iint,cdMo,camera,0.2,vpColor::none);
-
-    //Display the object frame the world reference frame and the camera frame
-    vpDisplay::displayFrame(Iext1,camMf*sim.get_fMo()*cMo.inverse(),camera,0.2,vpColor::none);
-    vpDisplay::displayFrame(Iext1,camMf*sim.get_fMo(),camera,0.2,vpColor::none);
-    vpDisplay::displayFrame(Iext1,camMf,camera,0.2,vpColor::none);
-
-    //Display the world reference frame and the object frame
-    vpDisplay::displayFrame(Iext2,camoMf,camera,0.2,vpColor::none);
-    vpDisplay::displayFrame(Iext2,camoMf*sim.get_fMo(),camera,0.05,vpColor::none);
-
-    vpDisplay::flush(Iint);
-    vpDisplay::flush(Iext1);
-    vpDisplay::flush(Iext2);
+    //Set the current visual feature
+    vpGenericFeature s(3);
+    computeVisualFeatures(sphere, s);
     
-    std::cout << "Click on a display" << std::endl;
-    while (!vpDisplay::getClick(Iint,false) && !vpDisplay::getClick(Iext1,false) && !vpDisplay::getClick(Iext2,false)){};
-  }
+    // Projection of the points
+    sphere.track(cdMo);
 
-  //Print the task
-  task.print() ;
+    vpGenericFeature sd(3);
+    computeVisualFeatures(sphere, sd);
 
-  int iter = 0;
-  vpColVector v ;
+    vpMatrix L(3,6);
+    computeInteractionMatrix(sd,sphere,L);
+    sd.setInteractionMatrix(L);
 
-  while(iter++ < stop)
-  {
-    if (opt_display)
-    {
-      vpDisplay::display(Iint) ;
-      vpDisplay::display(Iext1) ;
-      vpDisplay::display(Iext2) ;
-    }
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe);
+    task.setInteractionMatrixType(vpServo::DESIRED);
 
-    double t = vpTime::measureTimeMs();
+    vpHomogeneousMatrix cMe;
+    vpVelocityTwistMatrix cVe(cMe);
+    task.set_cVe(cVe);
 
-    robot.get_eJe(eJe) ;
-    task.set_eJe(eJe) ;
+    vpMatrix eJe;
+    robot.get_eJe(eJe);
+    task.set_eJe(eJe);
 
-    robot.getPosition(cMw) ;
-    cMo = cMw * wMo;
+    task.addFeature(s,sd) ;
 
-    sphere.track(cMo);
+    task.setLambda(7);
 
-    //Set the current visual feature
-    computeVisualFeatures(sphere, s);
+    vpWireFrameSimulator sim;
+
+    // Set the scene
+    sim.initScene(vpWireFrameSimulator::SPHERE, vpWireFrameSimulator::D_STANDARD);
+
+    // Initialize simulator frames
+    sim.set_fMo( wMo );  // Position of the object in the world reference frame
+    sim.setCameraPositionRelObj(cMo) ; // initial position of the camera
+    sim.setDesiredCameraPosition(cdMo); // desired position of the camera
 
-    v = task.computeControlLaw() ;
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v);
-    sim.setCameraPositionRelObj(cMo);
+    // Set the External camera position
+    vpHomogeneousMatrix camMf(0.0,0,3.5,vpMath::rad(0),vpMath::rad(30),0);
+    sim.setExternalCameraPosition(camMf);
 
-    //Compute the position of the external view which is fixed in the object frame
-    camoMf.buildFrom(0,0.0,2.5,0,vpMath::rad(150),0);
+    // Computes the position of a camera which is fixed in the object frame
+    vpHomogeneousMatrix camoMf(0,0.0,2.5,0,vpMath::rad(140),0);
     camoMf = camoMf*(sim.get_fMo().inverse());
 
+    // Set the parameters of the cameras (internal and external)
+    vpCameraParameters camera(1000,1000,320,240);
+    sim.setInternalCameraParameters(camera);
+    sim.setExternalCameraParameters(camera);
+
+    int stop = 10;
+
     if (opt_display)
     {
+      stop = 1000;
       //Get the internal and external views
       sim.getInternalImage(Iint);
       sim.getExternalImage(Iext1);
@@ -414,10 +348,10 @@ main(int argc, const char ** argv)
       vpDisplay::displayFrame(Iint,cMo,camera,0.2,vpColor::none);
       vpDisplay::displayFrame(Iint,cdMo,camera,0.2,vpColor::none);
 
-      //Display the camera frame, the object frame the world reference frame
-      vpDisplay::displayFrame(Iext1,sim.getExternalCameraPosition()*sim.get_fMo()*cMo.inverse(),camera,0.2,vpColor::none);
-      vpDisplay::displayFrame(Iext1,sim.getExternalCameraPosition()*sim.get_fMo(),camera,0.2,vpColor::none);
-      vpDisplay::displayFrame(Iext1,sim.getExternalCameraPosition(),camera,0.2,vpColor::none);
+      //Display the object frame the world reference frame and the camera frame
+      vpDisplay::displayFrame(Iext1,camMf*sim.get_fMo()*cMo.inverse(),camera,0.2,vpColor::none);
+      vpDisplay::displayFrame(Iext1,camMf*sim.get_fMo(),camera,0.2,vpColor::none);
+      vpDisplay::displayFrame(Iext1,camMf,camera,0.2,vpColor::none);
 
       //Display the world reference frame and the object frame
       vpDisplay::displayFrame(Iext2,camoMf,camera,0.2,vpColor::none);
@@ -426,17 +360,85 @@ main(int argc, const char ** argv)
       vpDisplay::flush(Iint);
       vpDisplay::flush(Iext1);
       vpDisplay::flush(Iext2);
+
+      std::cout << "Click on a display" << std::endl;
+      while (!vpDisplay::getClick(Iint,false) && !vpDisplay::getClick(Iext1,false) && !vpDisplay::getClick(Iext2,false)){};
     }
 
-    vpTime::wait(t, sampling_time * 1000); // Wait 40 ms
+    //Print the task
+    task.print() ;
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
-  }
+    int iter = 0;
+    vpColVector v ;
+
+    while(iter++ < stop)
+    {
+      if (opt_display)
+      {
+        vpDisplay::display(Iint) ;
+        vpDisplay::display(Iext1) ;
+        vpDisplay::display(Iext2) ;
+      }
+
+      double t = vpTime::measureTimeMs();
 
-  task.print() ;
-  task.kill() ;
+      robot.get_eJe(eJe) ;
+      task.set_eJe(eJe) ;
 
-  return 0;
+      robot.getPosition(cMw) ;
+      cMo = cMw * wMo;
+
+      sphere.track(cMo);
+
+      //Set the current visual feature
+      computeVisualFeatures(sphere, s);
+
+      v = task.computeControlLaw() ;
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+      sim.setCameraPositionRelObj(cMo);
+
+      //Compute the position of the external view which is fixed in the object frame
+      camoMf.buildFrom(0,0.0,2.5,0,vpMath::rad(150),0);
+      camoMf = camoMf*(sim.get_fMo().inverse());
+
+      if (opt_display)
+      {
+        //Get the internal and external views
+        sim.getInternalImage(Iint);
+        sim.getExternalImage(Iext1);
+        sim.getExternalImage(Iext2,camoMf);
+
+        //Display the object frame (current and desired position)
+        vpDisplay::displayFrame(Iint,cMo,camera,0.2,vpColor::none);
+        vpDisplay::displayFrame(Iint,cdMo,camera,0.2,vpColor::none);
+
+        //Display the camera frame, the object frame the world reference frame
+        vpDisplay::displayFrame(Iext1,sim.getExternalCameraPosition()*sim.get_fMo()*cMo.inverse(),camera,0.2,vpColor::none);
+        vpDisplay::displayFrame(Iext1,sim.getExternalCameraPosition()*sim.get_fMo(),camera,0.2,vpColor::none);
+        vpDisplay::displayFrame(Iext1,sim.getExternalCameraPosition(),camera,0.2,vpColor::none);
+
+        //Display the world reference frame and the object frame
+        vpDisplay::displayFrame(Iext2,camoMf,camera,0.2,vpColor::none);
+        vpDisplay::displayFrame(Iext2,camoMf*sim.get_fMo(),camera,0.05,vpColor::none);
+
+        vpDisplay::flush(Iint);
+        vpDisplay::flush(Iext1);
+        vpDisplay::flush(Iext2);
+      }
+
+      vpTime::wait(t, sampling_time * 1000); // Wait 40 ms
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    }
+
+    task.print() ;
+    task.kill() ;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 #else
 int
diff --git a/distclean.sh b/distclean.sh
index cf5bc403..7e78704e 100755
--- a/distclean.sh
+++ b/distclean.sh
@@ -4,7 +4,7 @@
 # $Id: distclean.sh,v 1.3 2006-05-29 09:58:22 fspindle Exp $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/doc/biblio/references.bib b/doc/biblio/references.bib
index dbd4e3e0..02028dec 100644
--- a/doc/biblio/references.bib
+++ b/doc/biblio/references.bib
@@ -1,3 +1,16 @@
+@Article{Fischler81,
+  author =	 {Fischler, N. and Bolles, R.C.},
+  title =	 {Random Sample Consensus: A Paradigm for Model
+                  Fitting with Application to Image Analysis and
+                  Automated Cartography},
+  journal =	 {Communication of the ACM},
+  year =	 1981,
+  volume =	 24,
+  number =	 6,
+  pages =	 {381--395},
+  month =	 jun
+}
+
 @Article{Tsai89a,
   author =	 {Tsai, R. and Lenz, R.},
   title =	 {A New Technique for Fully Autonomous and Efficient
@@ -73,6 +86,14 @@ x-advisor = {Chaumette, F.},
                   {http://www.irisa.fr/lagadic/pdf/1998_these_malis_transp.pdf}
 }
 
+@inproceedings{Irani98a,
+  title =	 {Robust multi-sensor image alignment},
+  author =	 {Irani, M. and Anandan, P.},
+  booktitle =	 {IEEE Int. Conf. on Computer Vision, ICCV'98},
+  pages =	 {959-966},
+  address =	 {Bombay, India},
+  year =	 1998
+}
 @article{Malis00b,
   author =	 {Malis, E. and Chaumette, F. and Boudet, S.},
   title =	 {2 1/2 {D} Visual Servoing with Respect to Unknown
@@ -97,6 +118,13 @@ x-advisor = {Chaumette, F.},
   keyword =	 {pose}
 }
 
+@Book{Hartley01a,
+  author =	 { Hartley, R. and Zisserman,A.},
+  title =	 { Multiple View Geometry in Computer Vision },
+  publisher =	 {Cambridge University Press},
+  year =	 2001
+}
+
 @InProceedings{Marchand02c,
   author =	 {Marchand, E. and Chaumette, F.},
   title =	 {Virtual Visual Servoing: a framework for real-time
@@ -111,6 +139,16 @@ x-advisor = {Chaumette, F.},
   month =	 sep
 }
 
+@Article{Baker04a,
+  author =	 {Baker, S. and Matthews, I.},
+  title =	 { Lucas-kanade 20 years on: A unifying framework},
+  journal =	 {Int. Journal of Computer Vision},
+  year =	 2004,
+  volume =	 56,
+  number =	 3,
+  pages =	 {221-255}
+}
+
 @Article{Chaumette04a,
   author =	 {Chaumette, F.},
   title =	 {Image moments: a general and useful set of features
@@ -240,4 +278,83 @@ x-advisor = {Chaumette, F.},
    Address = {St Louis, USA},
    Month = {October},
    Year = {2009}
-} 
\ No newline at end of file
+} 
+
+@article{Mansard07e,
+   Author = {Mansard, N. and Chaumette, F.},
+   Title = {Task sequencing for high level sensor-based control},
+   Journal = {IEEE Trans. on Robotics},
+   Volume = {    23},
+   Number = {1},
+   Pages = {60--72},
+   Month = {February},
+   Year = {2007}
+} 
+
+@Article{Ozuysal10,
+  author =	 {Ozuysal, M. and Calonder, M. and Lepetit, V. and Fua, P.},
+  title =	 {Fast keypoint recognition using random ferns},
+  journal =	 {IEEE Trans. on Pattern Analysis and Machine Intelligence},
+  year =	 2010,
+  volume =	 32,
+  number =	 3,
+  pages =	 {448-461},
+  month =	 {March}
+}
+
+@techreport{Lepetit04c,
+  author = {Lepetit, V. and Fua, P.},
+  title = {Towards Recognizing Feature Points using Classification Trees},
+  institution = {EPFL},
+  year = 2004,
+  type = {Technical Report},
+  number = {IC/2004/74}
+}
+
+@inproceedings{collewet:inria-00261398,
+    hal_id = {inria-00261398},
+    url = {http://hal.inria.fr/inria-00261398},
+    title = {Visual servoing set free from image processing},
+    author = {Collewet, C. and Marchand, E. and Chaumette, F.},
+    abstract = {This paper proposes a new way to achieve robotic tasks by visual servoing. Instead of using geometric features (points, straight lines, pose, homography, etc.) as it is usually done, we use directly the luminance of all pixels in the image. Since most of the classical control laws fail in this case, we turn the visual servoing problem into an optimization problem leading to a new control law. Experimental results validate the proposed approach and show its robustness regarding to approximated depths, non Lambertian objects and partial occlusions.},
+    language = {English},
+    affiliation = {LAGADIC - INRIA - IRISA},
+    booktitle = {IEEE Int. Conf. on Robotics and Automation, ICRA'08},
+    address = {Pasadena, United States},
+    organization = {IEEE},
+    audience = {international},
+    year = {2008},
+}
+
+@InProceedings{Marchand96f,
+   Author = {Marchand, E. and Chaumette, F. and Rizzo, A.},
+   Title = {Using the task function approach to avoid robot joint limits and kinematic singularities in visual servoing},
+   BookTitle = {IEEE/RSJ Int. Conf. on Intelligent Robots and Systems, IROS'96},
+   Volume = {3},
+   Pages = {1083--1090},
+   Address = {Osaka, Japan},
+   Month = {November},
+   Year = {1996}
+} 
+
+@article{Chaumette01c,
+   Author = {Chaumette, F. and Marchand, E.},
+   Title = {A redundancy-based iterative approach for avoiding joint limits: Application to visual servoing},
+   Journal = {IEEE Trans. on Robotics and Automation},
+   Volume = {17},
+   Number = {5},
+   Pages = {719--730},
+   Publisher = {IEEE},
+   Month = {October},
+   Year = {2001}
+} 
+
+@InProceedings{Collewet08c,
+   Author = {Collewet, C. and Marchand, E. and Chaumette, F.},
+   Title = {Visual servoing set free from image processing},
+   BookTitle = {IEEE Int. Conf. on Robotics and Automation, ICRA'08},
+   Pages = {81--86},
+   Address = {Pasadena, California},
+   Month = {May},
+   Year = {2008}
+} 
diff --git a/doc/config-doxygen.in b/doc/config-doxygen.in
index fe2037b3..92a583b5 100644
--- a/doc/config-doxygen.in
+++ b/doc/config-doxygen.in
@@ -1564,7 +1564,6 @@ PREDEFINED             = DOXYGEN_SHOULD_SKIP_THIS \
                          VISP_HAVE_SOQT \
                          VISP_HAVE_SOWIN \
                          VISP_HAVE_SOXT \
-                         VISP_HAVE_DC1394_1 \
                          VISP_HAVE_DC1394_2 \
                          VISP_HAVE_CMU1394 \
                          VISP_HAVE_V4L2 \
@@ -1575,7 +1574,6 @@ PREDEFINED             = DOXYGEN_SHOULD_SKIP_THIS \
                          VISP_HAVE_PTU46 \
                          VISP_HAVE_VIPER650 \
                          VISP_HAVE_VIPER850 \
-                         VISP_HAVE_CYCABTK \
                          VISP_HAVE_PIONEER \
                          VISP_HAVE_PARPORT \
                          VISP_HAVE_XML2 \
@@ -1592,7 +1590,8 @@ PREDEFINED             = DOXYGEN_SHOULD_SKIP_THIS \
                          WIN32 \
                          APPLE \
                          UNIX \
-                         VP_DEBUG
+                         VP_DEBUG \
+                         VP_TRACE
 
 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
 # this tag can be used to specify a list of macro names that should be expanded.
diff --git a/doc/image/img-chessboard-01.png b/doc/image/img-chessboard-01.png
index 721f13bc39532224768e958d8364fcf02897b600..4e92fd62c1a9c709e8da7d7e1c3c034a38db5612 100644
GIT binary patch
literal 33459
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

literal 22994
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
ZIyy0UF$y8;2y_4d002ovPDHLkV1m8XA*TQU

diff --git a/doc/image/img-circles-grid-02.png b/doc/image/img-circles-grid-02.png
index 684ef7567f32d2cb21f7b982911f2a6ce0c29275..44504e36409d294546396a8958e0bea55bd6f53e 100644
GIT binary patch
literal 32432
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

literal 23952
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

diff --git a/doc/image/img-cmake-debug-trace.jpg b/doc/image/img-cmake-debug-trace.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1ef2ed23df1d189dc71a4f3b6419df80d9fddbb8
GIT binary patch
literal 86382
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
L{)5to{W0=aZV!jk

literal 0
HcmV?d00001

diff --git a/doc/image/img-ibvs-control-law-adaptive.png b/doc/image/img-ibvs-control-law-adaptive.png
new file mode 100644
index 0000000000000000000000000000000000000000..4dc71cd2f3abeedc8f3e4f796677d731ba4d1fff
GIT binary patch
literal 35616
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%0DGKPD?M>}+p}bLWo^8Lnc=5Z9
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

literal 0
HcmV?d00001

diff --git a/doc/image/img-ibvs-control-law-continuous-adaptive.png b/doc/image/img-ibvs-control-law-continuous-adaptive.png
new file mode 100644
index 0000000000000000000000000000000000000000..a6e51e639c3de096d4c8400ac6617c495006cf77
GIT binary patch
literal 37074
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
QRxkj8r>mdKI;Vst0BQtFlK=n!

literal 0
HcmV?d00001

diff --git a/doc/image/img-ibvs-control-law-exponential.png b/doc/image/img-ibvs-control-law-exponential.png
new file mode 100644
index 0000000000000000000000000000000000000000..6b430e7e65bb9dff6fe52903f285492d35189861
GIT binary patch
literal 35316
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

literal 0
HcmV?d00001

diff --git a/doc/image/img-lena-blured-default.png b/doc/image/img-lena-blured-default.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f83f88335aebb24e4f270d41e8e61c3adfc1ca6
GIT binary patch
literal 24562
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

literal 0
HcmV?d00001

diff --git a/doc/image/img-lena-blured-var2.png b/doc/image/img-lena-blured-var2.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f75fe53a0b56c9ccde27c8dd0495e3966c73d63
GIT binary patch
literal 21714
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

literal 0
HcmV?d00001

diff --git a/doc/image/img-lena-canny.png b/doc/image/img-lena-canny.png
new file mode 100644
index 0000000000000000000000000000000000000000..2ce75eba9043bf13065e11a9c6122894c2846bcb
GIT binary patch
literal 7297
zcmV-{9Dd`8P)<h;3K|Lk000e1NJLTq007|t007|#000008`zDe0010FNkl<Zc%02$
z*_Pxw3WPlM|G&&UNI(Q2*;(Cv&uHd$deH(B1dC;tNECyA;}A}zpZ?84!(YZR_`Q*{
z@7w26Mf)}Vhb;2of2$)+4kw2GFAFgLG~p`NYFIg*r1amc<CfACQ?pJU4*x)l?cP59
z@?-gzi|u`@nX1ksy<<^DOtf-n|CIW7Ws~gObq*ANZ}cv1${Ic~_z#h0cU>u%D0*1L
z5Ofu39PWGB>OTX|FNz9G#&J!$JO-|SviBMKhfwpv7S@`^=YC=$1Bhlt!_(2?|Axaa
z=zdWXSu|c0#^llBUv%*gZRX!I<A+~y5|@bDlTX$q^8GBkIs1mGFM6j%#71QW#RzHs
zs(P86%-K`9f}1(WAo5xW7p~y03mpDsW4Jm~oZP=Kh0NOSQ)dRNwFuFr@>jjpYhU)x
zGARqQqArmR?*2lY-3LUF{Sz#Gba*dq?%j`?2a0FKR_ry@J;C-$cXT#30~tB4+HAeD
z1&WKA9T}Zi)V!eS2v}`W2S2XiW4SKUJz|iyDnmU((nzk%`n4lrll$@)u;M`aG|fXz
zXw4RbJQ)Mp$y)rYzybrkw}?HvhuE6Ty=Azxe;m1fp!Hv65Q$Sz76kIzMBzte1&Lh6
z?H|?@F)iJ)79vgEf%&B#8aRu5_0-YjR`0(4vVwO#Zf+}9JdklE;0(1!RLq0Duq*X8
z@s#GG_%yG~?VC#G@p(|49II|iqq7jT0pad6alqnIK66n;@je0UxY!emDJ+EIrGF%~
z4n<wh#^jE`*?i#U81QB#n7yMJCWAhk+Pqq%YqV^o`+jNaX#kENbYk_86;VgyL$L%o
z083N!iLtpF;CT)@nLq8Vv9Q``Op<yd&2G)=M3ot}F12(g7K5e}<fOwv8K7S9E-%P6
z!sr1Wy9RZ!wP_-jSlWP+#bgvkIpW55h>GqDoiOV-%WXWGZmZWyKZ7F79287w7oK$!
z)?mgGp2PtJ$GMz@lmVspQpB%PFlQu;tDmvdN=sU_GJQoOUP_B48#c@VOfl*t(LIBy
zjcdvj;}q4va36j431QU<HBSbAL)Su1$}jBeS!)lq4SxKTHfuC=GTYrnOkk!s<YNvX
zmu)h^<J`?M%3?T(>C#+-Gq_DiF^+OnMHX^D4xXC$j2vEYBd%b8hF6Aeh#i!%dWa*O
zRItc&Q2;08Gm`yPi4>MgRXC=8S_oEIE|BLNENTtvVK%w2SvRJ22|p^F#))(OyoS?I
zlP6$h5sUg4KdmfXC*!34Ic|t&i=gaBs<OW;5t<rmJ6(gC>L^1FU|`b<bT1M3@fM>D
zjEqDbz3RS(RlB0~=<gAzg^WbDk0zVC>|{(p0c}DE*u?h^Ck&g0Ly2w-p3ux;ARD6T
z>VR5?lv;4$6v<ZOC5KE3Ie$$T`m_w37|?{OIAQ6Cubn{$&w;@~^eTs~YwY$FIUFOf
z<59(6<ggAG16izc1-m-bq3?ru?8)zUOE)A%p)J!GcQ|-tyVBYiJa%*B@Njq1nIeHk
z3Hwyc4h%@zKnP6Sfk80|i$AZ%Lz&nwF0P3z3m+ERgi;CWs_2G&whWq!5K^!$g6<(S
z@3{4-((<L0o;ajhgrMUSuB?4<+PKbC+g#DTD(QO_=F;_zLu=26Y8W*Bj3Retu}N{K
zz9@dq=ZSc#JytUKe;c*nBQIkgrmx6>sDhOf#YDxvciDX@B7@&7Y9}WuTqwwOZAIA+
z^-av$vxu#QM~Z`#-2qf&o((F7Dn4>Jj-<&(xnt&Co9Cc2BDNKFlr51S1)Ds1$7&{~
zx|E}M!{%KG^Z9HKn~dl2D8v!987N$Ibg~FE#z{)ixEY_r&<)GJ+#`G`8^JSIk>Qz|
zm0f7VbMlz(L$1Uq^1~k_*Ci<LeJ!QdB{Zj2Vgp1-=n_F)V4lSHuofTZjN{(IYVXva
zJD%iy1i7&i3zN%ZIM#wE-cNe%r(*D5CF2R_36k-SKLh^V17JW0_bfyekTf10?5ny#
zVml#YpE{g6Ob^jE-FLNsN*|ARu9JH#x=1#6oBWAPm<n0as%E}JHsy01bbPSrn}Af%
z*np@i{&rN3%`1;mnvpuliN(DTk<q@_*b+s(g_w0zY#;xju7H+Y7VDYAI);!#i1e1{
zpvXaqY0OG+SEQ;jSSV<NoEdz_VGstjG7p0!kTs-9$0ass#60ce?1kWr)(;oIaQGwN
z7TOcC58U`gW_>{njI|UocNS(QGmy&s02>-;m<i)kX6!@_(B?+`aMmH&NP}d{SgK`H
zK@>B=W*~7qhGCs(;J3^A4T^x}`!%e_)J<%Rqd1$sa{E7pH5)KbWO+qoaNG)w#B@Zv
zn!U$0>?oK}F>082Iwu#)N?%n>+@Ymtx%3L4R$=Zcq;EKk1eEcmGJXtfAk#n<^l!{+
z01t~eT!@-boksp64jHPwf{|LqG+1j?#@V&Eaj{<YNN?0NIDTgE4To{fT1}E5f^RF7
z+k9Yk%x?S3`qw5CgM>8tm3NBnlOn)u=hIZzu|_oG&T66p*cU0(?kE=@@|*~`!OSnP
zw2oj4{Uo14W!U7qkkl!*q+_|_22aL;UFVN!_6$n=6K&Hmf1tUa-K4ZaM#W7RJ--%G
zX5^_6gc#sV4dM}B`khB5e90jx3{**%lif<gxhNWpemDXRO<Ac8Q&<7%1%t&hjm?<D
zK$Suj5?Uu0Cyp@%_cj`_&rNpk$szJt3+dtaVX&(eM5qS21Q8RZHykzw`ABLJ5EnIU
zX_89+j!0AE58lk5AdPcDumBg-c!SMuVG0i}pk2HuVGzkir6K*aw>a|s`zj4;I4U&=
z9*L5rX2t)rosr<-IEM0>@;-{4;h0U2pNb8q2R#g}2*pFhgtmSA+%zzPRU;T2H-2hq
z?cbsNp_GR4)?x>@j>Hv=CR;%T1Y;OuI16L?>Ip~xltZK=cb2Iw+q{F}U{$sGD3N^&
zJxcyKYwxM8fHNcg{OcSR56?UZbT=c|TK}r;uup@nf-1gkI{8y%Fl#X#e)`S~e4~ew
z5dlQ_X(m%EjT#}ENVy!>nll4vGHc<#kkU2VCVPEQ2hpcYN%LhBobXL^F59}z=)`U-
zjxnE{%bPWXYgSJ%kngCMCzexBH>RPCnzhAx!kOnad~kCN7btUKo@&XUi1xwZu@KIb
zZUI!S*0Z|Shw|%eBA=zLaFC<r+ZW3=3>LqBz46Bt)1A5U`71pH94!pSt$c2g`x4Fl
zIAFxwgSAS#RrcCUP)D}{`SW^Xnx4FxE}BI*lrSR4BsI1Gqh%jZy=9;foBj7$3kTxA
z;1CVLlr5|bF831yrMz2$!J26+qtRIJJklh-o_2f4ELveOZ!rs$83U@Kkxg?`nXc<O
zQCP|^_F@3p@if$<HHRA8!4QtVv}^CpQYSf}LaE<jx>Xi>TJ-kIc($DOH53_@$d>_i
zDik#YD%Y7J2^Ri7dX4ypDyQ<BH3V!E36IpBY8AADg#cZPK$eZQwO<rp)wTk#>}Ni|
z=P;LHN#+)w_1L9Qr(qxQodOjxgQwlGc98CH7kw|2(hm?bJ=(t!Kb+QUAfA3y<5G~#
z!4!mqVpYU0HYadisDyC)HJZNRFsXzC>s9DxqAj&AfrcT~!ko4RNAj)=hLpaYhF(v_
zry9oGB4+V$R@Dsr8+Z=vTZO!445TnXfbT%aJ4ijQSLX<U4<wQ;d5TyQB6NE|-dVli
zXIM18S%rwp=Nl>J0YwDNl5Mn8hyWWtEOz+|F)qi04~-iE3@m0@K9x5>^L`Cc;R6RM
z3NR!Au$1WD$|zP(afuDDgb3XiD8GdDg?E4)DLWS+R=Go+f~2%-D2cG+LU)^5*xJCM
zD!gV5RCswpnx@6M)gZZa4Qv4qu~P+cJ9*%swdKIQjORsAjgL`y-H{b(Tn?8)&<y|2
zYZ8*@a-0$^(K7yFA;zJJ1Q2O#&7=*hWZ(NVN`6^cDk5#Y2vIT?t4-8W>}>G29}Co{
zh0N>U@1SiHO@LQ?DEM3(rY|-t>s=Gd_0)D)G#Z2A(!!-q=4fAMG3rW`ot+}_WuSOu
zW;$t+X1*J`K5XwDm)0MX*FK1tKZ*|>G^x+^7I1><T2ul~Bw68I9-uK!jIKrigH?2`
z9Q3L>>Er=v&ew?OgpKv%|066S1X>kI&?m%Cbb+5&IMZ018ch}bqV-A}7&k{iH3Psr
zyJalq(0Dfh!D}{odN%Nm!x)+S-lX_c#|j0TyjYExBeUbGjSM!bHj}@}m+ojbAgd*G
z_c=zy7}e8`nLjE`Cl`wWSK21;^%{~=q!QAMhiv848=Z4<l}4dVPdmncx(cI$Kd>`$
z7)%9TfM$Y}X5e20Z*v*)I*@`BQC0pxSJlE{?gp_wF&#@mDFzGDg2lRo(obsyj|&S^
z_sn4}Ti3t#+CuMEdM%#Vnwo}-wo{w#Zn*YMI@_NgW%$^A{&~Jnr0#waY2M@lw!5Y2
zp28lw+{hP~2Abf7l7&9;aYWv?CnZo86Eyd+FX_nOK>b}x<F^S^=9s$h*4#?rx50i_
z%OGpOnOg}9w&XQWD~ARr&VUbsDnt*kYF;W-u)#waXZE$M9lXoD3?O;quntI(Utj{F
zOHDD9I6Si-c`z)zL8UWUBZFqbLms7cu4Yasx>U(xF@15InHU#`^iyLYZydfuQi->f
zUidVd0LaY4LBXfkA|?FWfI{5!!1f0aJzqRi?2oEMe(b5SxfA3YdI0jYhcgFAhCN*x
z@0H}E9H{k50Iwu-UinA)N-v&H+YKtcMPl3tn$jJA$iIT&x}iPDE+O$qK4t{Qs<dB2
z<>zTal6HyVa|2r(Z_|i7wP2|5gd=5P{ydH*YmHJjE{wFy>=`95TSRciQa3E?givrc
zQ4BNb%!1R#XV^gtCvB*7Dpq^>_&}Er=u#@iFiUYtsj!0iGwtQe?TdO`hpU_x=|46$
zR=u!Zoz`mJI9xHB=A7!wYC+6^w4w;{D7=Q(b<B2PrhcNqW#ZJ9S!nQnDP_MMX2UG5
z&p4d#=M^%z+Bjr)?|+`4)Tsg!;WJ6^h&EajPMD_SaIvxKNQm9Ithlzy=h|WREVeU$
z9uZ8B64(_1Dc7OKSl-xH>lMp=(!f{oq2*&ii!Sof(&&rCpVs*9FGjto{pg|ifryBH
zo*L+0J=sySI?-Wx05jNm+=8u%e|tO8b-Y&-GFI{_Ef+E6QW}D(Gk~X#mF#^(9W<#m
zeZg>Q<-CYF)i^Q8nC;h=*Y@bvfG0`YE5V6D^y`$w2K#5VM`8$r`|Uzx>wSA|FOVid
zC4FO+E)w}ZlZ3*KJ8tJunkRlJ=T52+>dU8V*-kYRP7)r<3iLFp2HL%}o$^-wyx);X
zEi=B{{6`MMI%fispsKhFWeJn^sIc|=$k1((rzed}C^EQD9%GAm14LbyJQ9MTa6>bg
zj=RRpuO0jR-H00RDKefWjMs4NcJH59p^k;I@VhP>5Y$?}7D#KQp6;e4c>HUr_E;x$
z1iYGH<&%ygHo*Ro?ZvAW%G5s_!6~HCv()3C7wv>smnmJNvpsA>PkQ)3fJ<h|>bC5X
zn|nh>A5DYEs8y4jbR;p721!ho7f4eOSp9QIENjv8xPNQv*=ykEuBY*bi)Vi|h>7w!
zHi+6<ssN%zK(;=FM<%j&8p??k+$TH`JCzf?^W_)z@GzXI`qK|Ha0>L+2w-^Ep2?c7
zzTIS5>ODqJMqwcBtxj^ZMzdqgnHwt*klG{fD>ZWD6q8w4J{OT#?}5^Lj(8WMCv%1M
ztu$L;k3HjI2iFoXmwv7()qd-9slL5xnE6ymOK~(065};e6D_Hrc@VWB;<y%6gj)?L
z9v@zWT*GwNgzeU+P%DFnn@Uqp+xW@NrKhS;snKv-xNz_XHa=OWP+o@6oouz`KzL{$
zseYGG)5-?+f3T4&vM!obseSLpQ~9j^iJ*Bs^Ih0oO91y>Dx3c+F2b?=efrE4cfMUn
znbz@1ygwpRH`cM9XHWi$q&c<tI4bu}`acCB;PE!k=<sMi4=I9~3Pbp?HuGN|AN$A*
zjS`XhH8|TIs@z0M?=zb7FiiBgI~x7bp-dc}qVk<_H4)YPbWm=B4e#*afZY@c!<9?5
zxdhNmP4jQb9)>{m*YK*Hs*MTYhn*iRoI;?Bhi-0e57zum`Lx$J>lm(Ru5W-Z8CV2c
z;E-hxPTtA?qX9fXP-@Y>kv)~M%8y>yTdnrjW6jquzTB060&mgjGRm?0^bDe4P@k6U
zM6u2ng%POw6$xOmjf?NbCeqb9T!JkRUfXbCvG4O@f{U7C+PTT`c3g04aVYL_sFRx#
z8hJ(XMEByJNg1OCiBbA}!z%Af^z+mAQ-JM-S3?UTgpU+9W4SjX!&gtD-^8Z+>5JXx
zY%1iSVz0{2AyN&h`RRmL2&0z~{U$o*V@gCsHrcXUM3xs1`o1itpP|<r)16Q8)sc`T
z7h2#WW2Q4McnT!iF{9wuy$g7$B8}>SC*?~k2*zVtEj_G{1;K;0b%vM=bx#CApD8CP
zK(ARGOU(U`bAlQdr4F2<uUGN$GeWcs!!Por(yBXAYTYNAn8kGgL7LJ;0O_@7LjZR>
zkQd!Pgq;|8nI3tyeZjbSft}1^sA}(d;BX8zx0rrN)5kKoVJqgeoU%Y197+R#)51oV
z(b5vFPQw?L>J7N2c&w^lycM*B81aC`0aUdpqHOco>aJPNG|g4-I{(v*4A(wST_X}?
z@qj|97FLX9S*zKVYcm%{@HaMnNwWHMH)Sw+-hIiqZzz)%p#~cAsGt>`D65RO5XQc+
z6sBe3lhrhEZ!^Mma<)m_oGCo%-Zl6$7MmaFg`UrV&==!;;dFKmvd`$hayZEfSwjm8
zvcurBaWCm(9r2dvvMS9sR`ZhzJ!AJze}@#kO7F&EK~%<>j0PKb+>ueta9>j05F-XS
zUso)fRW8kbMmBo#(KXJUw@49<Ig70kl)X>iXi2w9J~06AU`o&I4qj;|)-mots^W;4
zZxeLGyDRPJFjpZT@`qzU`g;O)<5M4$ZpWCor{~-c+*nrwOF2dDm3Y?RQ=XjT*D1-M
z;BK9>HxhZ|2dk(I+XH=eUO&7{zaq4Tyog>C0)AgWt38GUlpDv}duc#^fTa2rvEuIq
zr4o90E(Mcw5qB)Ho=%x5t)jJQCew)B=Twio*pK+q>rPMiO!V;8h;SK;k0L&$k;Mqo
z5pie}gZMO8i8o=V#xu>87$2A^^!K$x>^g&c%MgG>?HPiK5Ebv#=<<@z_>&0OO%WoL
z?+J&>Yo!#0^oObbg}Y`VxL^EkA00Si3Md05*?`2j4tkgq#AFiV%uA_Y+y&JmmP!wW
zExgC9;@o4_kmtzoA4?8%N2YOYh9av6h+2iLO*!FANR`#*tL)ffnwVWbt+DM>QzYGB
znACrhaDvzpWlnC_b3IHVw#R#Ld33u*{RZ^dJzAE2yjpHJEA!UdecWU#WwMB5Z(SrV
zn>Ssv5C>Ld9x$KGv^lW_Zi-`C_+APyiNrpY5<#RN&owkfgRaA=>f~wD`ve9Yo&?n&
zS=dJBMIg*jiks=UYrV}fq&_O~sp8ub-5=i{ttCdLxmW+@)$WLX|Fu+8?e*>SXrS79
z)<W{scKXte^o*Lxj$8B^l7HN7($bs(lnSuor_E<MP5t~(+80iD>>PUJFT^eQY5Q*a
zJcLq(tMoaMQeO^q%?k-AOd(pFQ{D_9@MynO(?M_AXWp<jRdk5XO$OPfl2%ZWBb(_A
z)Xqxt3e2d^gob`@+-jn%9LBhgzV>b>`ve~lPs0->zkk{a$7<*5Y&|D&bJw59^Bn$`
zg3nE+pp7Q2A+S}Fo{8zS4Pu&mu-+ITj1CsW;FD>+|2^Pn*9Ov%u<xHf15Yp|b>qy_
z`axckYniBmB3?NJ;Q~Xo*i(hMd){=0y`~q4-HVpVI&n7uAdi%qu&Tby>MKsw{!`*t
zdMsu8-f`|N?mdhW!k{#m3*(!gLqEF`#kP=79w0CndI=CuTBfNbL=g;fHo=x}O}xTV
zu)-8t>~7$3KG*?yWE1w_PEt_yORSqd7&HKVQ?uZZ0=>Z=CaP_prkFeod}%P~0&V7n
zyfm8CI960`)Xrwz?ep^*`T{QHqtUm?Nn>ck$L>lPF%@5OWaIp1O-pN&sKPX@Evv7;
zW;XegxmP1*RP*<{QXf@S(oY2+Hbpn;l(6G_kkWl*lDVdkf+|-%C6R)3z?CUW1m{!3
z7_sWuK0wuZqla*0`9^<|?L7FM5p&KQ!YEA-Q=PavSL_^iX6_t9?y1~B9w=E>KQ;FN
zG*$?}#shZckqs9q$0={D#d@ZvkPclv8b#7zHWhZ@zfwn=@)1Nm-;T2yVC^Y^S9IkK
zhvBB9)@lvl+>^Vo@i55tc5R>0=XtCDWN|o*sIe$8di;!f=u2)iogurC@t(25JD6Ex
zNr!p{DZ8P~pav8brp~N<>1FO$dtdr+ZY2LyI{sVQz4A+Ay>jx5{oazzCkGox-8amC
zOyu2H1^sQGZKE8AHHdNMW75B2wupB73Wb{ZmvnFKM3TPP0vVkg!PMHZkzf>*EmcC2
zMxJ{CscewCJ0gOt*TFRPmf7nXVk&2xF(K)+xKcd->)U4M(v*i+a*EgjM_p>}P7T^8
z)NG5{blql{sq;z$TuNQT0|KJCg|GmT#tAlg9RU~YHPzJWz11`sWZVGeM?`CAIu-hC
zzV1(C!(->5CK1E$z2Z<y7_Jd`Ig62;8l)(PYx};4xH4iPK}R^{$@JHa6c_#T;uY2P
zm_B7iMa%${A=#BXz=kEf1sv5xOO+ephibSL1m-`tww2&y)I(ImDopDh3qJKgIQkZ6
z`WSJPV2MsFh1X7l2?7Iw!hypAK0z`vQ8|0VptaM2N7imZ-(@m`B1p8Z+n-^qQa}bV
zrxLQkJM!S3CjnGWY~sc7P49lU=`1?Tx$iv7XL(3B9<5BRpJXFdk2GixrAd0gFM<q(
zKl){MX%pnCc*@%%qEE$i4xdNnf}4C$mur%blIx?G3=Cv%-~bD4736yU+MJJM<-Uk~
z;G}hw{h^HL&`;S>=-an5F+M*)J*-j{w6V_8zR&=ePd3Q)iv#$e$U^A+n*vaeUD`Ul
zZ$@&)#@MPh_jke}s2)q8m}`J5L(hs)M1}Y2=-W8RMr(&=i26JAXE*uCB3<I<6T~*)
zC%|CS^T6TOhv3s~hQ+N)={MiHAR;@B6J?D=uu4{1e}gof4&Jamt$~^7tauN_P^fbt
zIw59b`yTj2#Y6n&jS?)nFlR!_-?HbegUG?m)L6}yF9!_b3W`YX7<wsFyW4dbE11wO
z#Tfmz)Gjo%N^!82;8sNj(ISg}X%Az~#Bve+8<?Rn9CUtJJSh)47{<xq&n+zBQ~@6&
zZf#OmTl*L+%jJP&{MnDJiD}Hx%9zXVk%kJUgCGnGJ~WsU7*$Nze4FU>maN}pD_&uR
zHXPd849!8|w}pUAg|rUn*p_mAE!{kPBM*v1jXEbLDo&@FATzj*|8U7*5To;YTFv5k
bN*DhJWqa#`IY0+R00000NkvXXu0mjfy~h28

literal 0
HcmV?d00001

diff --git a/doc/image/img-lena-dIxy.png b/doc/image/img-lena-dIxy.png
new file mode 100644
index 0000000000000000000000000000000000000000..b24bf0bdc48346306847bbe4ebe62d5f7c0af1f6
GIT binary patch
literal 53066
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%0Dxie#Cvqs
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

literal 0
HcmV?d00001

diff --git a/doc/image/img-lena-gray.png b/doc/image/img-lena-gray.png
new file mode 100644
index 0000000000000000000000000000000000000000..696820dbe5758473bb422bac19bd390a3089fd8e
GIT binary patch
literal 39372
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

literal 0
HcmV?d00001

diff --git a/doc/image/img-lena-pyr.png b/doc/image/img-lena-pyr.png
new file mode 100644
index 0000000000000000000000000000000000000000..092de5137179bccf3caa7ae1185365e84b38a2a8
GIT binary patch
literal 38446
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

literal 0
HcmV?d00001

diff --git a/doc/image/img-lena-sobel.png b/doc/image/img-lena-sobel.png
new file mode 100644
index 0000000000000000000000000000000000000000..3672e0b875c2b16751c3289d9eb0746ea30bad45
GIT binary patch
literal 25691
zcmV(_K-9m9P)<h;3K|Lk000e1NJLTq007|t007|#000008`zDe001BWNkl<Zc%0n4
zS(hcpktSw~yGO)bbE(WK6i@(2kRS-MIo+e9Y3V^T=jaFN7wT2gjMVC$>1j3>0K`^X
zR_=F+#of(J4-s+mW>yv0&x%tg>)wdC5pHh#XXcLo8~p$LZ~%Z{py<#<AsYh{!OTfX
z-KNRx`Wul<Rnd?D4ABq`01!a|06~HJ+rR(-zyJXa5QgvLbpRZ$!|pqR0Wm^sGNe!?
z@e|)Bw(+t7+W33DxvdVJ;?c9^>e~zR+&>N&WVm_wS+IzktK!Q`+Pw+PY#adM-VlE3
zF#C!74Dhc$#Q<RU3?f2P15g<zVwfTW9KVN<YV_LHQcWQ<={S(P=K%nSvZe6BM<qA_
zFa$vChl_xKh`X2WJ|NtG#Dgh7c<cD<<iYUr;c>(UWLXhZtp7Cv8VthFKeUXicIK>G
zP3H%fD-fXv&+8wliJY%yz5%xziH!_F#D41Vo-B<6!k=Q>Uq2oQX)iX`lS&LEq7HRX
zg8ue_$o{)8x2a>y>#ACwWXW$&6d(Y&Y_s_UHn%{#x0#vs(twD2XMcLYKYjV`>iC?8
z;&0<014CxU9S;GapJuSTnE{|s!lp)SZ`b_j0Og@<jqky*oZ<GO1%e0SgxK?N{}(&`
z9Pin^^e6OnPqcpO*y)b}5+j-#pvh>MaQHXsApuW#yCrAsbvr$9<N1erh?7T)_G+7Y
z3$>F6GebleHPQe9aX5LWng7PI4>#@2fEkP<#rt=TL+GbhRlyVo>K;5*aZ*W}4f6Vy
z4=cxJW@<<{5}=BNlcPz#x$c;Nz--`1|42dtRn=i+M5@-y?R}B7o_*tmyScP|O7^AG
z_Jv`0evm>m129BnN16>)`isM}c9dGSVlheUPNlhti)Be!!BmkD(NvK@1dD1p%hwxG
zqJf7yZ2%<LeFgxaJ;U-)SnrYcfF->sz}+kigx%ea_~5r@05~`d)CWJ@eL%A?b9E!C
z%~gJKXjy<5MEmI=%V0Kn<hy3wA&~;@WJztutNTR$TaLY(aUB1>@8fOnw_MhHVSFGe
zcjOxa06I)It)$5ca(;dEm@S)kAUfQx3VyPfH#b?#K<^@rUiFCX9PPiAs0X%jFQgf0
z+PekcOQH4G_PL5XE4OzbV}`22HiF9fG9Mo~6CfK+UpAuoX|=s>4Zu=Fpxq<1SJwwp
z_r59LdEkd582#A5k2^C4aF5vcJ@?LE+Mc1_i=7aFi&8qtDz~rs@gj(r;Yf(m;$+sG
z*O~+w4fdi%RY0V-==*6BaqrG|jdZwYZ`glDO80H8!QS7&G^?V6>=tF$X3_R+y*Qmi
z*4_J=!|}X1UlX(uyyxESAONDN8PNTK{TmP5Cuj_|;GP`caq_Q7={*;*H-s@}Ho<@$
z9W3HXRBUsBj}KV^CHGRzv!klHTqQ&?W&+yzLxX(*wb9_;H>3c2w7gqmM<>ubQ3L=}
z0Kg%nMjb7}&IRrsV|U;2ojSOi3Pr!5byBc=vz;DKz(5pLkYM(xYA)7ds^p!Cxn4>Q
zOpTcE?$u^UxRZ?sbl`4I@7zou_Q4nw$&k#@5Ha9*d2s6krFX+d0~>DLMIB}jVhaQ$
z74R6#dEN?ZY;Mxg5oJIG$>xfa`Fd4nKofAJ$^-<1%SR$YFjLz%4sWsW9dmk*7d-_%
zuXdqi@8ir2jJTH%+g;z+OtU?i-y_iW9u8sz85Yx68%Vsp;?tQz0ZCP>M`gWjMF*8O
zpgsczfZi|uq`M-+cM$r1+i0Vp^`5=A6Ue9lX29c+;Vu{$PvCxx^d8;K#qrJBO;|P;
zv!nG!IVa%Ba=N||6Ek2Qf3&lujD)5-c+Pj&8T%>Yvp3131elqs<!q*E#-S)Zs2CD~
zs^WvRZZDe|o^x-a-a3TmRa$kd-TKl$o`V>|>~vaRHzJ~d%%cYFc*qI>YCTHvP7?3W
z<$I__&@s$3FobMD2@Jp$EHMdz03d<vxCjq<g!_*l^S=A)XrSn4T^%N1>3TCeZd!G-
z)A{zY#UYN~$-p?3L_}a}@?L9x|3$kIJQ%_t2nt}PW=3SDY9J|PDyEZZ=tr=#H1|Xw
z-_q-Qo__C>DOMG>ouX~t#Nz{p;ds$q)v9KOM6k0_BM*@b)eIEhj#KtYeBW{BLsSh2
z14L8owEz)-tU>1(LQs;FZ9o4rK)cgI=#$@Z5W8%D_%^-=5z8vAW(4`XTApm(QPtgS
zl?T6PJ6r8Q0f+#RR1H*V_jE*nyUYT?3?C5RI|oG|v=IwYRRjaZIOqY}kh!TOMD$ew
z^}2N^ghpgaJG%DNW8drU63za~V8NV=ZgIP24z#+Q&W>f7uGYfXC$)$mL<nH$AcJEE
zKwL+&!O&nI-w>kqvu6FI++lD#)Q~X|5*Uaf6OalrnrZJe&=3I)Oo7Z4a7%%w!EIW>
zOpb=98V;$0X&=}0x(omS+5<<nGdb3ypA4>OH;t<}t}l*$wYq86TVI&=!a*tqOlsi3
zdc(tP9nc=f?j@ePsOcUH5kSq6k!B<TCI>8rL@Jqj#HSA-42Q@PMNIQ_Ik~98kU(}U
zy!WD!zA+QK2QiFK0~bney%2Y2hrj*in<NCP+UuPfA(#Mx14KkJa1Npdei)REp|~jz
zx^fo}_mKyZB*KmzF|!Q-G3stSu%|r$KpbN{@Ta%89z_Y29$GOQL#g5Uz0BF@`>od;
z6(Cp5Zrh|zy71(O3*u6eaxVfA3)2jMK!C(d<Q!_(3DA9L8b;@_=kV_F5iy%z!=Y#h
zY%%Jf1v^c*9;F=OO+W;b`uYlvPZp%T@D4%M`1ld@LqyzJ1iKgIA)pBo6*Je?qIUG*
z=4F?WLC3H!sb>=b1Og&v#^7>HS@$F1VSsz?X)i+^rG_bq-?|e9P{}D9j_^c3FE-FP
zK9DgPS-ZWcm&XUCr9NyN^Qyrn?Zvk^#=8$R1Wf^qCriCeviRc3KmTiRpays8ADS3D
z4-Sxs$O>xO%%-~}f9H<|O9Kxu`ax<4RIDffOaOo&=ib{Q8k&s(HyUA|)H)M01Zq+|
zd{kU)#-L^3mJRsM4$xy2RG^)O7&8L`MN8%nntFTu#YZpy@v=ftBcgt09ZO6U3P=Nm
zTG+NT8cpX;7(j>EgY3Sx*hsf=?mqBuY=FAV5D@RMg8^aNo7rCIFkQvtdAPpKXm^S_
zWQijtfd&lO5CCaUOwkO{096sIWfwkscK+vcr-XpU)MvwiVwcLY+yDVH5j%@r>VdUA
zqd6jjFow?$0&@gVqYS5diOd8lVuWa8*wjPI11A9hkTeVWKxUBFXK(yxCxqEt&SWD@
zGu&zb0L+L4Dx!ux3NbLzNX1hU#PabkKfL_sSL{+&WMb-(P-m@D2yg}jj@gA!uVFOH
z21IuTZqO*TKDioYbQe8pic{ZFAjx8gY7SKtho=Fd7@`UEXssy_s1buAwa;I<qs8$Y
zH7BGV>+AD3>?>;M3NR+kSrr_rqQha{Nwjcc5Q|^^V)MsyRYO%^N2X#x1YO6Ish)ie
z4#+tMtJ@JA8=!<;7Cs6;8r(nIAKF!AlO0B}UeB>tyg?G!gaAwd4H3kAKTz6Y$QsXr
za~~Cd{IRrdnv7w@fC0_W446EKh&URth*8{?F$saf$<OGAH$YJd5RpbCIdvN5{^FY}
zZ~z=QH*t`x_oIF9IV*MuTNEConNVy$vSrOmpeBe!rY43CQ6+n5XeKXx(fyJx09E?w
z+bd!M09fH_%gGpEbS%RKFI)Cvi;w0%oJFUq4hYe*_C6*jnpKzIpD(}xIuBiw5pWkT
z{lszSE=C7Zlrgzh8NslJ%zF|?|7KudChWl!*vz4&WahwdlGkG2pZxOnAGoXu#)u2x
z&PxT$NuqgEFfx$Qs1n8G0IDa8%|!#5R2dM>GB^MO$Xb=%^YiI3IB*VfjKG73{Ykju
z&eDz{KXM@rc#-K)O4)g{F_Y~ljTlvo*bq`o;0nf4g+q+?rw@Mn?JWomzVkk|fxZ$<
z790Q(=-_n#z>p<RK6u=`SUHQbvmwKOshHR27vWh61O?}|lig_k3J)K$)Cbo^RT`_u
zedcSs*hmc#3DH9xu_#!&wo~?w)dEBcmi6pk%fDR;*`5sE&8pCR>ZD64sS&}h`mO4H
z)JISG)vN5lj2wcgDl>vf7ODKJm;T8~2@VQwnq;bP!QBtuHI|+Cc?u9LD<t(OG#V-}
zLm-r4BtQhDB<*DC>bgabp25Tl1_LDr?H><**8F}$wl6^A$5_q8t0ZU0WT3kN2qMfL
zSFheknL0)y08@oP0xE_~tMhz(7|aM*yH*Gk2z9?S1Zqe_wZ?kx41WO;QP8Q9V@-yV
zozvczWg{H>0fsxl1cFLcaeI4fg?EVL&{Tj_D6p>naP`H9j>Sj;dS5XP#1umCjFPg7
z?pN8&q<ngC^Ro4vgb<y>oQ=rTKm=TKkr&Hg00f%41di00B_j>?3>mX9Lm#QC659x&
zssRyZ3`t#)J2PYgBm^|otbt8|`fdsYb_6M!M>n;rt5nX4K9wd`VaP~|=r8}f{Q4s&
zW@4aXgeEvhEwL$AUPW`tMm&b%37sB%2rsS)5(P8?k2zC-EM{sX>o{4IoLg{^x@bfo
zMkqQ&uGTlo5RD;?@qjR?4Xqml$sD0%XGVQyt-E3?u_yroAd5LoTtL0;GF73^_y<7K
zGLoV9>H9}tJnMKH$)tay0qGbd7!|4_0^(>0(h(G(IGtRqG8mvoFckq}%7$4<+9tX%
z3n`|;K^q0|K05JlX%q?CaCxWsFoatSNst)LhT@ZEM_f#9u8b!^WAF%OI>y)lMh>w1
z3xuCF-(3@^*?s)b09_F2qJzFeqbHHXpFC>bBuos93?Ti4E1DuVwS`a>m|6ycw$pc*
zn7>LQ=U5b)cmAU{F+iA&9PeV&h@sWP$?auyMddXC6O-+V=skeL<?Vm}(LetDRFof}
z(gp?`il8Z{EM_$1k0y&x-0PcYWCp}c+KTg-)r>i9wltlVkdk_E5CsqvNe1?fkNye6
z3IHa_O;Pq|!pscV6q!-Swt$FUNmpB4l#r1tNMr_JG@t;CYQ{xdpLZYsV)kF^(P`|N
z6d-TNIYaUY+~b`H{`Aq0FLO4Z`!Ga>nN<}T>+8ClPn@+$eJ}?KND9p99)W-LXyfr>
zm1!^aHtT~)awrN62xvxXzS|@}DT4|!YNo-h4>1o5un-1#6+igw_P;i87a9Zfc`Q1!
zs!irR4Xr+C;pnJ)y)Fe<kw8JgF{mmKb+;>jv>?o#vL_)xV$}Q)W&dkZYIQuEbpo<4
zZU$gR%qR)Dr@^`Qa_twM7|4+dQBHZN*!J0Ov<f0)cB_AFfBS*JL&vWQ#5}8Vj9Es=
zz@{IU-(Gk{$d1WW1Or<Z2)@3&<>jovE*g7QpfN$(HA3xD2qM$II<{we5C8#z?8Z(w
zJ`A$V6di+_k(nbPOxtzimovxM4-Zkb?-=MU6PXw@kTuLd{3ZP6G>I_?kr<*GGMbtZ
zS0$pRl)6-uNtqs>+&=HTASn@=sv)BYxQV_w*TW+xl9W9Gfa~*HR3t<&W$a@T6L!=I
zy1v$lqm>>&7;Y|}o_rt4+<@=xW`G%06j{}oN^@zIpOOXA<Q?P$+*d3a6buakJhec|
zD44!0K3~7e44}@{>{N{%C|aTbT!O7`W^;eSSLNJ))PCDhRvb|aHUU8AaQ#M~98I+r
z*E=2Q>xW2cW9Yh*QX=b7g%N-<08nB?A$*-a2^(Y?Q^}qo+<Qh-btPu7&DGi;&nX)s
z5Rpk%WFi_u7eFxcm<-Kf_U`N(|La4Q7MQemg$SaKL>b)D-MqNy$N^As{JZ7%SAcy=
zHVjsi6+Yiw=kjolu`}oTnmxTo<KCG@Ay{^7EY!Z7f6_G`rROd5APqa0Gl2nnaun;!
zOIl9K3AZgeW{c4r8WJJ)Jx_c3u8N-P%hykTp0g-`?jme7bfj3xH-D0+k4j$OFooaE
zUTaol1_kJGFUVBU`qg@Rcv!@ZIwGRJW2k@8opm0RZ7_8Y04M+y^K6&f$BS*|J5S0a
zqCmtbS-B_?bak_q#gP+ssAfQxGcXze62eH~&YpN5#kYU3--cMExU+i-i~vM<_4{wD
zUw=01+Pe0#S)P!pA=8N4D4>$hx99orAZSeN5s47@I))x34R2MqMsyFNaG78EkEABZ
z%sSxHy?R;Y>khp~$m^?awsfJ$t<9=jXCeTzF{^r*D7gYU3+bD0KmCPS-b=K}6Ogt)
z{NwXa|KqdfHUXfQ%Qq*_hG7jiiV#EGY+`jh&2{b_3nJcCNbivccL>z|i-@d>Qq<?O
zCz3&Ig!&<Z10;Yf2nI~`X3NzS$mfOv0GqZ*ti7!tA^W}ekqWbE{ofA$hZpNm$k@LP
zg>S8V^Zj4=Z+~`tb~&Asnab)<pMU-*0F%A}2mu7RfYntqIh<LWp>#G@v}ka?_oVb~
zg74~s;-IFqtriYM81it3sPhb_QL6$~^zt<y&s`uhBW<#;ppIM?WZGB1>4E>v$_~W4
zZ~yS=m)S6mC1UT?<mT(&>)-u{`Sa_^lA)jm;9Gl2j!cBOmj=mP+VyolICLn=0i_S_
za3`g`1K#Vo8X5z4$;D6wBy}$7T9*#lgiMJf8<=x|7Na`Ua-z4_jhjupr>;e>LL|zJ
zNT|qQk`2gV1~x@hHDu1_ErWNPKXt!6wWLC9#%vxEzW#^rkN^Jje6gAw2Sl|9d@TzC
zRX{==`X`Cn%WZL3^*ILYa6vavWIft2o*!bvyPAapgPH*;1(MhJ)Hdc!JtByDQzqaX
zsf0v<Zmw)n6b#82Ql{W?CvIxlD43awA(_{jLegHr2?YoU(ct1w%U^zD)KzTA4xL?n
z_xtl_zd5M4-E8j7w;g*W!C)c~9QAFN;ykt&SA4v%Xh<}~O8|FO?x8rm(~iB`?|8XK
zO*Q)fH~g5k8No;+I5Gu9v@EWuaV|HvR#lbH8IV)~(Tr6cq^_JaEdm3G6oC;CGnbmO
zvY8=+K}df-ng8ni7P2ET40iVCAK>4AI=O0m>7AkE?0kkmSrnK+6+scu2f4jW2S+aV
z*frT$J?|;JS1RwF#ho=648stYfojmUIH0Z*B#K=K)IqS!YR&<bba?>>6GKSiwJXYK
z(Xs2YkuPm4sO%uCCSV3LDvGvCrQfACxM`0*#ZCdm9CTODU(cRB)|;&h$Y>hH5rWQX
zozRnIBQF`qJFYKRlSea6yMYh!y@UGzli~R1EvwTXoPjsp;auBjM4((iQsSJ2eZa_c
zbD570%yJ#vRzet5oRSt3zP+i+L}-Mpjj9mNeceREU4xIJZ_gHs<4x=^z;#p0C(CNp
z@`N0sWytE00FK~Noue$oCK&>ATHWZuVb}-*-s?ATJGyq(@;*g7kB_}(vLIfiM}C_G
z2#p=L;yDU|QP60%)#=jLh74J`$jXe?0XeL2+c>hI8JILFWi8otEA>nf$HhlRVf*rn
zqne{{*R7vVL%c~oFaTH&p(r3e&S$+=5oI$llg(9}A5|iKqr%{lc9!OChTWB!ACRo%
z7|!eiX$^=>3hXjDZK=d02D$~e4A5ovabpvTxhx@f5sInHH_=V9I8|T*u}TzSlb8@;
zhx8I4@w%xryX{7**_^gptqQXNYGzPFa*w++hYIM}vJqI;)uuRESW?(;7rNu&eusJg
zc^7Iw;A}?k?F~Ij5y(-pV8SHIj?Gka6MZP4Q!aC@p3sYNPMKXG*|xr5)dU2Z8L^7n
zh{+eJ)xztzx~GyY^XsRx+uVg&kk&fy9D)iCT^eGJ{Be8fHM1j12^lQKjm(cjzSpeY
zX8{hdFYsDl=fhEGcVz8g^!|%6HLJ-a!O#_+w9KuqP&2T0k(r84oXf3xC%%%@sJNn#
zO~i^VJ4wWr^Q1IP5j-(M4{9od0vV}P?%a7z)xyPu2EMSQ2uf%~A}B`1e7kW;%n_)m
zqa4?5c`&t1xQD(NfZ?z@4-ia^$Yft3?=2VTkzfGJuxU>ryJUtADW$0xp=Kzcj)9n>
zl$=_1#0VWxgGFGiJ9f?#0U7!dW^RNLEPHgoK%|0*lpCy^%K5Y^0(B7rWDqk$074_z
zrh-ror_WoD3c^4r%DG<I;hdu|_m%%Wy>dOT4Ei+0?#w9O<rsJF6HydesZ3B!fe{eR
zQ38PA>MbrD%67pw3h2>Mv-MLDgxICfTbP7FvJr_1IabZU=m8a+Hc}QK!kn_R98!)z
z=+Qt7SP7z=QWrHlzkTMvkG`)jn_z+URhrKW%?4!qaZ0b*dpz1B?!8D2A|wl#QZMmV
z6oM4hk;Et*3ed`L))>f@F1BDcnZbH3RS;t~=}|9J(LRPk&E^~=AaoYBa4IQ5F`?LX
zLOy^F*%5PsdDV81+40Zoulht&QInt8>WU63%Gn;a;`cn<wawil-R>%cu&<6}5Us!j
z3Wf++SnCkOWVJ4+a-dR8E^a1l!BOgPB4U;!c`t?trXDi_n34lcz#en<Y*|>9g8`)4
zQ%Rac3D_~_5zJF6CVtxhfwZU3eth8-7(i9gLAy=Gtjt--9wKT04*Djex1zMY)e^Wz
zps`wKC5kB+5RgkTyRyKhcC#G2a>}>YVUcoyb#^5vraBe{CU7c1&cInxBC>w@1B0Le
zKqgM)VY7vRq)Ey33z_n``ZkAyNnFW{ZxjB{2mg6fDl(X6W8K{9Y!XP7SsdSMErLEj
zd{-WL|E|3l0TH4WDA0QzhYC3asbeUEnS|=%yj+M6F)K2oWXZ%#osJ!M9=#ZtC^A?K
z4nY8&s`IJI;DbwzxuVC#%*KKPnqR=>cCu`0TmCwIrCneK5kTykl|P)DB=aQvfWpzz
z-0^VF6%K(;U#8yufB+Ks{v;xD%w8O=8aFL-^d;Tgx;b^Fk4liaNVN-2qGJ#uP$3j%
z$ZCK@1}N-Ij9gYjX<$-nt>`@x=&m~o08ri3t#0rLw-ir4`r##;GJ&YG99PZsQK>m{
zVNoBZ^t<e7ByR_N+B;U{4RTvkX-1d`#DieS+B7h$w6(ITuW1J2V-DC^f!kCNGIUZh
zU?ybdxGmX8)qy(9ktvxvp9E7bor~GXJ5m|kQ$p@@)5$d5<|S`qkY9y=?#h^h%K~h1
zTjOMgox-^6`Myj(Top8?!Vhtjfnp>DyKz$iq=eWSP=U~F!@{X>Ve8tJZ0I<5N>%7?
zVCiE-4s4J*MDHnYvLka0WaiK~$AU7(R=|0TiHd^3Ag7*xV;2uDi|aJubq?F=Z&$x}
zB?>~y<S?z{WZ|+>pd^moQn~x4=U(65JthvdUmyc(kX3<zQ4B&En@kg*#Fw_+TH(>L
zu{JRE+qx)>Fl+GWDfyz_KqC_nZ-Q82lR2Q8<9OR}RbrR0@crTp?S&MGdZ@aX##LD*
zfc3?vzx?h7T3=w-K><0|u$bj&#Hh+6h4{8Ve8=&w#jr#Gsv=;(h#*?HuJu!&g@bNd
za_AhHN=I|rtZ}xmJPRqcG9f;gU4It=rlq!K<~@iSLMURr-Bt@t(R>w1MO1ZH(d-xQ
z&=RlxymEB*BmI5#d(xT%Bqi3i$;Be%JOp5GcUruU!uQpnkib+#7?nUFsb_`4Ck;i~
zL|668HnMQQrg4i|0h!ptDy2(t^MkwvOOvqjRR<{?mEGmW@n!|fd0Mwzg&tZ~HFiT{
zgO(yrmqo)*d?#<dYk&Fg-+T*-24YM(ZMS||_O|d{y%u;6O}v*2kACs3-w>IK1Q15E
zI3eZ2YgbOvrY$A}rlz7Wqnpmnj>5&&#IagOZ=OF{J^DOra(M$(mDfU5knn0<w)JdE
z>*!qJL_8T7-1TxGX%?PUW>dVn=w3IE|KsBSYO*<?q(s`R;^85-I7Vx4M`HUF?!%bx
z>pamx_f5eQVm8grfpCy@?Pflb>-yEGkfoaQ=Ef#LG9Aj<>TztQhuLQNO*u6`4cs-=
zqxx(aW{d9HLP3z!cF^-UpP=lg(-7@;mA991`J4ag#XpHovxH8V^>!T=b8Y*G`<*1-
za~}_ax3Sf6{}6P90FcB56qigBS)!?~8Y~%*hNY+t6rs@T&14A;vT=^ihbB*@^%3SE
zLS!kiyS~DMxNh^jKotWTz3{k`0AiSy6Kb3GCdHfRkN(r)|NdOKz)qAr#OruGbup!4
z+`{C&JRCK24A#cgRS%`q0BN?~&ZAV`ipDHum(#4g+_=IiI8A^+h}O)W=ta%P?z%(g
zmR6jQLYl_ag&ZudT;XFxK40gbJ&tF^e8PrEW}pUS!rYOIOxaBfEG(`guIlP$wOIb`
z7k~bvkju=SmPL1a9S(v5q|(bh+i?%4K>+Aid&7WlSTB#vDE814k-~>RzI-C;y)op}
zNttSDR#<w62(5%Z5BE5`Ub(qmSP_-0b~1_EN0Qq{4i98I<*E@o|6%f*lX#gIQ|tr*
zhfGP7$&8d}x;)Trx2ct|-gK~d_Ny<S|39}5Fth8B!EWn=nak2A<NJZjUEbh&Xkg?a
z-UZxtw|-=Qa-628^h!wL!ZmHD2@A}*&82sYk~1J<&N4lc>swgPZ?-2Pa=vP3(z(XE
z##IN^x(S@oJ^w2F%3pVU5)uOH057m8TgQ|ODxOVOx3#pbFf^@IPyd(4fBF6z5WrNG
z(CT$q1W1B@*9VSw0EG?k!6@$!yq^t!9+(^@Xdg{4x_}YAB-7+Q__nP|M$K7}(XycP
zhwx*XPuW%3g3GH;8?3O{Zb}QNO*+D>@BeuCzaE~g++vPh!lCMI<Z@!^TyUocep0`<
z?vkW>oh-}_|Nd9!|MGfRWZDUX-ZY0xe05;D001BWNkl<ZhAdow?2mh&D`Rf)&~y$R
z=x_T)1)H7x<$B??#atwDB}Q#+;+;l8Cgz;XJLGP4SXLVHnyVzVeltHlo!6J?sNO!R
z8Y}Xj&rbfs{15HXfs<^zPIXlPAPZqO2^ZHFd5aL+M4m!<@Vn2y{?E-s5de$?NaZFU
zOel*vf7hFOf5d2aJbXamd(LAthabr+B3*5H=CN?GZlx%khn&%S>k@cJBC$MONV|>|
zq=@)>b@ahw_;!8dR5^C;`kOZ&|Bv}!+9!{u+L}|~!P*(3syjWMmlv<D&KgT8YM3pU
zmw)rc_y2SaZh*&-G2L#<8TZEffzjU^^=@_EJN@5-${PScEP_6rzV0wJr7K*R#ceV-
zEmO)0U}d`r6}557(`mK7jx={QBW!L@Pbcx)zdZZwe0os7cI`jC`TWb(_tVo^$k75u
z8~VAJG~>MZIR7hkfG=mv5=sI|)$ji1<v(7R*fIiuW#_Rw&nFX6B|;r~hwswZ-6uDC
z5xh^zeqYl5?3gIo^6=(rK~A??&C2Vold^Jg15D6)Qa7=t^YmnUxoP|nT*}f`uNS}K
z`0Cr)Qs>Kyi8Pn?^V91W?sST|vB2Op^(iTdx+g!os+)f~{)FOXJ}PSOw8_Qq{@ts8
z-o&M~69fS0LXqM*o|d(OXAs7nseHgi8owc-$+#A8w@U?%{c59$RWpO~S@(mw5^vh+
zfn96q0(VWcP>^)V)E_NMTSL0;!kn(^Sru>P)5Usy9zJZhCs!|yyC2;rPp-ZW&lp_J
z#D+oRu%1Hr!(Si2{x8>l6C63xNT?kwe)F4)|MwLHP%t1g5#n5T<$@&}GTxzQZ+ZRQ
z9%SfQvl!A~(s1nS8DYd>=NZ<N-7hBJu8c~l%Y%ATgy8kI4uvPPXr<w#EXviZE)>D9
zek?!K&Gz`CZnL(JY<+b3Uq6_AS3PxSm(|IPV?qK$L<NT;=#b}6r)TF^+mGO!786Sy
z#1=pNyH8&H!=+hJWd$b5%z3k_4xLC}9UWU`aAeU={_Z*z2tn^qw*e>J1#Y9Bdd@k^
z>F4XO+Jw`#!rKz9qB??e9wp^sTIvl<%5<sAIc;BEK0VoP({z?PoGsRQ@#ov8uj$L~
z>&^VMPzMSiiVXcK0z_4!b{*#1>EgVbPhtnDE`Ras(^voa2HdW9*wj<pbjt&6W$+&N
z>Vy5?9)fuovb?vGeNTtA;V)0VeyweoOmFJrtfg#S1(y5e_A|axuVB8aZ2bnF!UY~s
zOyUZIVtYA%^XBhn-_-MisYUakhyZF}hK|uB)(uRiu7e|3wPn$^>G0Q|<5%Bo_ZT5S
z49x})=CaMiObB;-G}t|A5%#@>!JQv`Pmv8;Ef8`#{IdO%H0>j|auY;tW2jh~mdeU_
zfo<Jx;$os%lP&P(_V6RStbNW_RF`=2vOc_q<H9ilV9X(qq(nTf9%?tKTuh)VjyEsD
zfy$%be02MV@45k;CngXDBH1?Xpo)z$GlA)Y^@;DM5a1mhLJtlFPT8q^{OHG9*P^<a
zd8}LK5G@NZ^K#N?tIc*+#Mbh`;`Q}>S<xz&SrNMJVkw(f>Er;T`2aaeztaIhRshWu
zbaewqC(CB@h+n7D&7M8peEm9)I~0;55HYfLtJ67kLd<*nckIdFXnGz-0{6OC-@!yr
zl9H#^KW<-F)ZpC5pbbu_YZDcv?{b-?V$^8TDd(f`Rr?FS_UJqZ*<R;UZnv97K$pR>
zbijRYlV(vQ6AIXDw3?huZgr`*shn4GweGvV0ifrh0LrEf%Me=%)OVcW!;wDZ;k`L{
zhc1r(lvP;(5>8<i-E6L_#G;e3ZA7q`&55>ecv1jhyWLvpXYSkPQ{Ipx@U&eE&FWfU
zQKEV8EOy3-2x>V4G6R@%xyde6C-|aTUey>1sWt3&Lcm_<C~e|oNlgp|ps6bDZP9@D
za=y13XR+_lwPAm;y@s}4Q^g#Mf(M|L|D-zKK#E~vTVWqkIGOX+1tA$xo9Z|TZoWCw
zY00eU>*w%+zDf%wU!YVasi=Z?n7hsh36ao%rRm%hCkNN*V6`Sb<V^xHLog$ve!0KJ
ztt_TpLxscruJImQ9bJb3;;^gWU6Ryy%o2)`2+@!q8kqGsJGd-t;LHa}vy;sYYYl~L
zVFIpd^k}xaVFz6b)RA>;a(w*!&tX|qp5pg!P9C4XeEK9i%*2jCMA;!oiiryb5nvEN
zP3nmjlU2wU%tv~Q20#dE<R~X3VrgnV^y@S&5ls|WbMG}ohhAVEaeKPQz+wF#0;-K`
zQDIE<`#%gyD%PD=7jQyn=sNS#q-s8)OkFIl(j!W34ka|qEf78KzNZ3;qWjCsr;pC-
z<>O^CO^(e>RYQ=R4UoByX*4Tg&fr5i>olxdS4iZ3HIMb>RRPa&ou`$wQ2M?rfrdp4
z!>aJR2(+j0T|V$#xdwtk8-r&MiI0z7x2JNURQl9tF`rB!O*Su5EKl;KI-2<{`r2$W
zTej25w#`32KmGXn)uShgOR!81aui>2j!}SlTo`C-ph=jE(o>$s8_MJdQ#mY3O<Hh$
zOH0>f$IShC1XEKTcc=iOk>GcG{4p7M+p2C`Uw8t^?vs30>9%!KYsI<1<fdhNagFm?
zedP-Eg%`;6W&QZsrdy`=)i;N~xq7oa=B-u^3_PY<Cx^C8QD9u{)6b%GnF*`ltkO%3
zRE*2L`<53mC+oUgLL-ic2Ct#P*`Qy-y4P*7+k508zwR^i?t>1U<JvxZ^kNHEKyAUP
zqC!zwz}r~B)`PN!c@$n>=IZhG;&FBMP58N<&rYlbE;KVaGbAQS+V8f~zZeM(waZL7
z6eT&oY9kdxWZds$V945RU@?&f0{{){_V4NuyNXp0Io<7jIr8w`j%C1gtSCf8#30T;
z**?#qiYr&ClrsXjX%9lqZ4C!qE;F+@&IMmFoX?AY?S2P8&X!=}iXwFye5R7SwfLbh
zF-qdVLrhqd9?EW=I1EjxhzO9g58cgnc0_GQe%MlMjG}v7-^Q|>jXd0^V!u>)7vS0M
zn`aR*L<0Dr{BAq#n&1qoqiIgv4|o`Pesz14(+mVxG__(*sVu*_Slxbpe4)qIQgGf{
z2n8fXh>bdSv}X!T3^WU|N>K(Y;5MNjO+6w)%4KM7n&pwU(RmXXR_6frdwKPY*sWTz
zv6J1#weTYb*YA~O5B5z%1W`sKkJ?rrtuA<#3x(Nyikp<L3)mE=`JC$cL9MiLL6&}9
zE)QP+AFsdo_!T}PvDSfurkFX&Ib~G>KpwU;=;LBj0LhM05gd8ERYo!(8(I++n6@i-
zRK|piXgYX1L_!)17YM5NEY0W~M^P~VMkP`uyxSHA0L<9bp|G=*{Acu{2A?2Qq1dh}
z6Ir>cnw-Cyegs>JI9s((;JOS)_J6w1&YRPzk;PoY)KwuxQ3C`f1td@!mjM$9bF*@#
zdPhFkZT8^A97J;-B~s9|Y7P!^Eu~Y&-0#+efa9)@!+PdXSP2HObg;AITIYK_+_N@F
zkUL{kOVz>Vk{3QzlxO(`9K|+P({78BPpVqOHJqMp9%pp5w&lsoHz!kM%3|r3PZzx1
ziWm{$uwUtDDU?VN+Kro{0#M;^H-$GP1~p=n%t5v_EXx?7@M_~O6T8@(aJTHG=gZF0
zyf2x!Paqh(n7!*(!Ut8|`iYt+US2;xC|B*|q}kMPuq@UMa4N!C2=ya7`vL#m`uXWJ
z7A1D#Xj^_()SCuU%F2rUno}EBm>^p=FbFOhSXEtL6je4Rq#kBqPU~1rF)Ie&?~MX5
zWSDlhpAPew81Ls6y(Jn+c~2UJpy2ZAZ1&qH<>cn~SLLDEtUc4?c!j6_7Py>KylsQ<
z(e3S`afjVkufODPj-Rw?5j0!IgAb3_w}_b9rn4>+6Cw8fW{7|&<_eAqQ4osB?Q5QZ
zA|mx!AaPvf*;J#k?;8_`;r4*iShpq`d!FC1-eTY`-akF)Cz=3hv(;z+F03Y(|9JEG
z7Y^tz=O4|lHpMb&a0IE#S|-JML7P*4{@v-PU-_roR8_I{NXsKR+f3)haz^dC-Zt6T
zG2|hhL{OR?P4a4!QZ}NAT;xd@*1Ve<fW@uNCn*y5x;vuxV5)bXfT)k%@UP&d_Xz|5
z;G8{l<_?^Xx3tYib0;poq7UnD=aPaK)HYU&Z8SWqehKx_)jySA{un>Q>-mAM+xc=i
zzj=`Z+j5z%a*|E+$OV^D9%{ZExICKNtT$5y<RW^$t;@-^IOrn{FijoL!c8h1DDp_s
z-3l0lz5Xp@rF(ST=i(kKcL$?bs`+?vew%SF^H2GQ=&tN3e|z=o*|)`HRTS-}JD35K
z_4UG=ygdJqe*9?K`NizwCOmpJxq5zU)9qEk)$HJ8X}7Dbk|rI5ba8r6<=Z#sn>rPt
zoC3IJ6K0mo5YbFcvuLQe$px!`8#kn)!FrCnB95>d59<#R`hBhUeLUS6Rsb-@h~6@j
z<|e|deDm@eKm7Pn=^AXFmyfPr9skPzu{qpK4sm^f)1cv)Zu9izSD#M4J3YMC$%4<C
zk3XxfZ!q{OUFqh$c9Y_0nq!h-yGG=2wBU5JY7;?gz+QYvjZRPv9f}wd#s(*)MDT2i
zbms?loEf)nf_{00gPy5o>?HeL`<gm3CGMkjM37QrfdDD>{gZzEytAXfe_7XpFWQgf
zwf*b>Z(dG-7XdGCj*At}U1!Tbb$|CJ{<_&71*`SLFYMLEm%;{Ko0|lsUvSQm4NMc4
z;*V#W#OjEoO(rZ_p`^A5VC1b!%8bno9lFMRZy3f+7WQgtJE=7U-0gOarv2V7yG5b6
z%MW|~SM!+2U0%rIm^tapPq*DK9>4khD&L--Ubg;#WOCDaV_ez~^<rspHnneGd}Nys
z{WVRC=Hk=;6n@+|%Ozg9quNcHA72VjN>&A6=@hGj55p!2XmYZaB&y~$QnaGq`$d2l
zx7%VW(YXh<V<?o3=XPtp_u^86y#<!LAMbu4!r=VNAKTN94N9}g=_9#qH{Z9#_Q~n<
z?G#z`C~ZIpj}Bjd?H;lE(EV|Ka`t$!1&`E*zdbrzqimz6dUat>k00@yi|mOI0dnU+
zKK)#->iYGzoQ16Y02x{*F(9IvAtI->OhXj!-p*@x8Q9qCq^kFF{INoD|5pRs85JzR
zS67ce_N%g;95qCb(x1=b&#LC<^xyK-aT_MmrPdd8<lkJi<)P{G>o4m3LEV*w#l_#y
z*U@cOTp)C>{;55A{L9DTW{pG$rnMA!^5y*H+4-yU&B4!>My6_Jo@>-DFrz5|A+{Tw
zxhTPpQh9H*JNmNpJtMTM%+Nb`Pub5Z$VqlB9?7lu-J-~x!u5~Er_<G}Y%gn?g-yj^
zcAF0pJ(+FJQnA@yJSndqw^E|R>KBv0tgyS@ObbgHUVOJb`FL`A&<P@_Y9^ijcK+2F
zHdpbod-kLPGgY<VTg8OVVV_6lO<PSslpjjz-DronwBOkv?|8@r?<7$NRTgweeijP<
z)$@5cTBZf9-n_<7K6n|ID>V{V)rEoc7gtAK$|YO3>V616e>pw60_V_w6289iYTcH&
zgK38L<z{|7KMe^$B?~Hly!`e>bjwM7-b@Y(GBq^|Mc1+B;ChIH;;kKo1cvUtnffj+
zRms}jQTSlHhFv7QL(4TR0u>;yziOWR%@c1gFV5w3vRRk17Qaj~>wwhHyBiFYnMzl$
zE>0yrZB!-9Kk(oF*lpdDkhTzDbN=kf?d9gAEDjXFL_}rr>E-{;huyTi2?r587?>LP
zLRyC8UEkh@?TQXvM_>=3?7flq8ylMBlyZW8>&bqXj-gn12QT)FHzihI`YN4YE%4Si
z?u!pwY<_%`j~}HQudO!KJVsB!vRh2sYhgijVg1c=_Uh^6+Lt_gTD*L@U2o#zbiTUu
z@m29RhX}7_Vg(I@!R37QqABurGyBDHTdOgkWn!P}fEw5Y5dgMLIRPcwfe!n*>tIaH
z04>KZiUIU{UmAcw;9+IXxQ?}7<N#)dT%SIEbMv))csz@<FMm7z>gySu>A^?EdP~sF
zg$iw&vg`odVRr?l0HOPF^~)Q0Qp==T9NQ0TrPwmfpWR+S@}GU6d0ku4sW)#bNs*g8
zze(2emp_y4YUS7<w$5>07sw7Rm8d8yor4h@4P~S|?*<59Xh^1pC@BlD=d|mB);`s^
zU)O*>wn>`1<I_KW_xgkCvD6>_&j0?~KRrEKrukvBx_(@&OORY_FIqmit#zuAjoIMl
z#m98{scgz}@(KLm%oi*<uWgPunGX(JliFz&s3BtmP}22zcW^C5G5KJ6RlmwdB4EOV
z+F<ag29}ss?Q{kifcH9Ohq#+?<PPO*CaT1q_Od7318?>%jS+$5oa&qH;_2z*g<tT?
z?-PENex=bFTNbOxHnMnWk6nt+J55lOc>9%oR>Pw@74uK4?_Vc0AQWj*H4R}_p-QuE
zz@q{pBC&2aotsR`>D0yBi%l^l?9n)Fq;#gh(lTGigBj(l{C4N>2<E7Pv~@!EjuH7@
z$B;eT{bryXi0HdNg{MzXPA30fcW>GyN0MEMy~WIYi6vJo37`N}Rqq=|B%2~Rl168a
z=9_-Y{J;68Ge;U~D3NS7yPH*AD^N%v6UZ$#U(D>irw{HCnLsuFfczXRfeb{rxvlTM
z`|gFZKkK{xME-aaycYZWO-{?%gJumk$Fr+gkvT~eoW44J?wbQqIQ-G{<yUP<h6Iv8
z6QC<OL0O=PsS*w%3zF54kf7_L__|;+LnhWungq?}RlVJGvk7Dcy4~HkAk45;5LxcJ
zUeG!38Smx~@8FDgFGdk`!C$?E`zQNFTxGSmu=(-k<uR^jT4pR><|hSZObgGXMykZJ
zc`^IZ>;5=u`HN?teIZ6<Kq!eU0wP3V=e;9RMH(XDlmv*xFh-%OVn$P9CS9j#&}3x6
z_iHIaR>t>Qcz0GIXt!y>2WIE!Zj29O{o41>G-`lMp1@c6;);($d$I9t^~t@w$*JME
zd5+&~j-SY~3zoAvRABAS*FPyvxg!4Q^H*Oisxl5HH#sH@WYYV}$UBfReUCPvun3GX
zDVAi6X2?vk$y2XlrWGyPP(p-o>r#bVaC>a3N#FJmDmVHB==bK~hnE=>NXqWeFRXiI
zPan27E$G@mI#|!9Z+gNT_fQuJvYX+8ojEh&ym@`}^gBJs_Q|i`{9W=8C>tPZPQsKk
zv1di^q&EU2LKMZJ#>YEVHIG7QhD>O!l-?9XO1n<8Dn~5%&b_{O+ot`dr>YL7JAD{{
zAzUOhFu99(8z7=0fi_L%U{Z5D-e2AHIXEf$<@_-%A{@Y%`EmX3^7!eCZ}$(%K>$Y2
zS3k~Q-`j7F{s#WvQ&%T)He_88HAnRY4ANwIfE$=Kn*yRLGpk63!izdUWQv`yR3V%1
zZ+PD&BVy7IN@KRPr*<O{%0NSoMh$_sC^(@JWZfcC+ZF=$kz(XZ%a3Op;pJ88q!w~F
z?rAvhoty1lT~-|KA7A}n@9yo@B;diiuV){<NXIh$o1=etfk+O3$+Dnh%h`}f%#&s@
zWCR0tCYs1m%4iN0vJ|10!oYlxh3sKcbFggcd5jK~oo+QvY)gz80*A$>tURg`4Pyd!
zeotm-fO_XNJ4DGWEmWS0qNpaD8{aK7H3!8xmGvQCuM|B@>+H08)c^JzZ5p(o<l)uk
zhnuq#O27We@Bh#{0tYtwO_`_-!Z(g>OlJ-W8Oeisq#^(tFo>~&c@NEUT1kY$R{f;R
zncaKhYuo-nChfb3W#LBL*KS8C+&zDeOYc_bUa4R+zc<;ue&;3_R*UIL_pUlRPM3WF
zjRUvOgpI~)vZk!eV_!7i9zFd!o#@AZ`R?!6I2MHrpS;DJX*)f}+aydG8PEg_2+3hK
z5M%R*`J$L=!ctdKvk7{q5%~SsLX|z`&5EmmUo%7|+YBjw&_di{#0Fr*YUU^HqQRnJ
zT2#+;g+)>H4aY22c~_=BcIqm6y?DGImEg4fq(7e)^S=#$cY(Nt+Yw;ky$l=Ihy;#}
zWR5*DAjr6OV>S>a4x+H23Nra_MH5m(&z5&=&GD8Mm@KxfuX)%cOl5%5cgi1kPeHJK
zz6hco#CyEFoE#P_PH*mg!k1;a?8rrFLz%pq?<du|=Sg+;S@^ira`oc=M}JJm_Gdr%
z?2j}S{O`Q7wjs`4NqYcr6npY8hVsPDl9?!bFOk|@5fH7Ls!}D!9rAk@j3AAD)KJj4
zhz=k0J;u=Yu7x~s%cLnCJfg3<hYR?Dev3!>I%5HyoB3phv6)ZWWH!0~=I;)E==gN?
zF@0Cm5B_@jPd$4Zw2y~S8*x;w+SLY($;@pZ5*Pq6ktG9BcFdiocH)iXCe1@O&o&CR
z-o0mHNKFSJFcFw2*l_0Ct~4K-ya8<WN*8jNuO-m4=j+ek9J=sWzI=CVN|M4}^5|Gx
zT&G-E2d)0){r_X}(Ima79=(!-$zSjP<Eva1gA2<R4WV&^whvZ&raX%H3~?Z;n28c_
z-N)R{f>M8DdoEdE$%EL%-JOse^qbyQ9sq{YOc>39b{-`-1Wh})hf$xByQ^I9P0Ct7
zKmF<C`ow*+z+zMHr6xY09Lu6lecP9lX65qo(?5&n9bMl%@?ZOtU;Xg2&${FSqv;?r
zhzKwwd|`Cb7;-J7MvR)GV`VS|L+^5LssS@hWs~#Nqcx4INzBuLliv2l@Zs8ZP!x=&
zI_eG#y+$Lj!DuMTAU68Bj&C@S@906*Yu?<<KZ;#icN5Gwahc-8tuq111~_y#cyh3a
zCm$`()-UU4uUAJu`|Gp6i`3>29Gb$`$!XZR)WDPoNp;ZLaRd-oMI|WUP_PbNW0I%X
zV{I!j7hJl@Rlu!OuH6oELnH!?Z4MRls4Gr1D%EZAQa}I#wXF@44UAUcx=hJZa@<!3
z*Rj4{?H69LzG)uVrdDY!aPJOQUvy7?{1i@CN1K=LR?jAXJoxF)s=q(=+*mQV_S~{t
zhciAPnmW#6QHY%bfYgRk#Rvd>sZBz$01(Qw)|jVtTF4|QFnkcn!my&`K0*<A=W>W!
zV$`jQ5)KE|Ej}}7utQH3LWEg&d01aj*&4~?baBwVy`SIS^RZ*ET(!$C-@mtaZ}p9j
z|M=#UPf~mQ_~^|yELn)*cED^e1T*JTaz1C&l(}#Un3aMhBQsz6c7tdHfJN1BY}4&c
z;!>s|;jXNAOrvc>d}+lwM=H35Ww!J0&eww7W&l);J@)I3->;l<(XCiy<{-R=A2z3x
z{fi=B%sB>P@OW80k8k1ry~}su;`j0S9PdvK;H4COhYYu^8%~bn--#u&%Na0>3k(bb
zMvwuF$`Usl9K?utrYr2)S!h=@^J%N{@<D1EAU0M6VjbjL?sW03row>M?e0bgzFB!x
z=T)viU0%_YrmNHYQ%UV%b2Gh3bK*w!Laz7Abe0~#8PV^S$FVJ*KYM)n9YteRy6wX6
z!(ssD3X6i~yduX0fM%iM*z`n707>`VlB6wg(-$=gxj*?yV10+B2N(=)5dK6TS{5be
zZvCG$MyO_cuuNG(Y&|FNW%0Fp`ZnCV@cHFqy*a^UEJ8h>w5Q$4e6d2mc|r5k!7u&-
z{`E3$>S^i`-W#L19atjla%Mk24x44Cp0W$g20e)tHLQCZ`Y`8NSQvI}4a|yUe0M;M
zO+^5dn7HIoRUhvjTz5OZ=B(u1ZOku5p(<gybb+|pP*DJuSLe?sFN?hfinF<2KeRRU
zxHk{4znlETzsU9GvOG|4)n6Qb_M+{v;;4-8Kl1J0Q}QlnUj~l`prE-3>lFsfP?WOD
z0{~&5Rk0H4$T~mccw0@lYvO<pN)#?gWCRr7n};L5s5v1aZ<PpD(FG^5*MK>cmUFRJ
z+1oFUo-fx%==Lv`rS6lz`2F6qYIe5z#q{&HCX4jbPvTYe<N3FLY_X_wBi@k$548;d
zux02DM8uRhbQj(9xXglK!fgkRlq%P5#0`4lh+(=}QzU81sU@acZ{M+{gbHkZas``;
z?SlT@&jC%uP(>1Z1J5v~p+*k~cCkk}+FQiwar;m4FZG-|U^>3}ru5akxcE$-KS<rd
z{mXCq#W_6vi+h{%AOHNfpEZ4P;Je-ddND_2G9E>@+ZbVzoY3cWbY8ojkM}790zx%Q
zH`!1l5UWygoG(c<Z6*^{M<Zs9BX+3ZD1*~Ys%jIo(fr{(w#jhh0LvMfZkHMyosvz_
zZ59vjExOW97r*@E?UilJrw5a-x&)8GrE^y;A3p!~3-F6~CqJqCtH*z}`oGr`p@0gM
zh4s!6@;3TJ6fp%+woPkE%Ka&VcUkzLyxKSt6GVapVb3j7?h;jg%eyhy5+}d_(U2sX
z_k%qad~n^K+C+?)N1usX>`E}`8cHzVzgYkD)7Uh*r?LqTm+j5jeLH;CygjQw&Yykf
zot*r{oxhs=@8Q2)7X@V@Vv53K3WE;k-Df+*r>27ab(|EgE?5P<=K45ZBu5d9*&rd7
zW!LFVKQC#!Ol^Zr9CC&Od!In{Psr1Zd5a-VG9>=+IWTJ9h5fjg+Uxx6qva(rTT!;_
zeV;dfEQo$lUMwsAdI5&@pC6sSZT|KLzxk%r>|=K9sn3pVr}cj4gg+)^QFGkLbb{zv
z#YpYAy6V(W44BP;#Ft%m*UetFJw?AC;VTeIGUCytVEY6=?8Eo+PIjjceRowIVc&*D
z^NXiv-}Qb<Sa9r1Xz`*W`E;`Ki#MAv>G6|i*QYnX_?s_&!?hUnnaNQvp7fU0^`54f
znSlW?B+uI<1yHI`275vb_sqV%3;+Ni07*naRJwCV(S|x?W$LNyq_}Bke#`tFAJEv1
ziUg9B33ZTj{WnHwRwgu+-DbIa)=j)uuOxNy=*jwQZS_RW6OdxEd={TRwAUA@JD#S#
z_;L8=oBjVNzgao&S)wpIO6JJqjylYE-WW5omSf`5V({6>vt>FcFK(QdOoGHHh}o50
zc5SXGgBvimJL6zLp)?PDcxy`i{T7Ncqsm|{dFNfWlm|uUyT*lw{i*X^@V$iKwK)uz
z=@tLlUw-ptaqmHB_CGGZ`*!m`Kl+zbt2}5(!o(!NWCJb!_LgAK*DwRntYMn2ZOQ`9
zN#qCV!m_7Kf<!0=!#orUmd)|q<jSxu7$RsM<{|v)d1z(^XgJt+?+7%8q{{K;;K|MP
zkxA$&cCNNA_Zob~i|I+Xye<yp{4!lxS<HX_(>MR{?pMEjdAiOAt_9C3<cP$a$#7a6
zZpsvc8`*@2YHmJD*J&?Aldg^X2N!GK0|^qKs1xzNjD5-l?~udy8>oYCCV~RrRcpI#
z;mCQgOqR**Ty7Nui0MuFjNWc0d(=Q~2}9Yh*2YlprRBkW?Kj^o+QXAqr+WO$Pvdu=
zPybW<ubEs(y;%i4u`6OORC2;FB3=gOXA|h6sv(gNRC>cuVIP~zB|pJ4L5qM;0CY0X
z$zdU}>kH>l#dupAb0-2OGE=a~CGH^YJItqX;YJk#yFHYfP!NO5^l5dzE(+KAXZ@R4
zs#WPq$x7SPGk<a{r~edxwAV%W=;z(<zr(-2|HrkjpfS?yEde_x>Of5fA}c}`_C-~C
z%|oS2S!3+5_J*=tuhRY5RRcg-fdXh}l}08HeXkyw?jTUxl<#)QF*HF(cBkRv=CqrK
zS%K)*dX=3-mYeS6(Yw>hJzVz(5BkfVu&K&xnB?4)dsjF6pWMItoy{ZR<kRZgZ_obS
zpMU<wbKP&eHyLR4BVx4k1yun;F|G;(Q&DA(oskK{I)=li{p*1<Yz$@@(K3g?o6hkT
zANXJp4g`MPHv0Xwc8iw|-#o0&+m(Q;yoTlFvrpGAHxFi;zJTn5tzAlWOAq8Sw|;LL
zV_2k8_uT67;j6E%9{;cHZ;h>lga&{nMs6EC-Hv|M)J6&p(Ntx<HbelfOO&|($^7z4
zjL4K-G>4E($Q6Fo`N4|v&YHYyBESfZ-i;}S#-h=!$DJrJ-vx$AH=FsV#W(Nvk8Pc4
z1JeoKfNNFVJ-3XF9Y5K8ac=vryl4KScfUEG|EJk+8wBzgGZUbyk{kLEQ3SS5qmaAA
zAOjxMEjw2;_!`mM@zdr_uRvttT%(1v4pdzT>)z2oBKfcn2frAVo#g-R6WFfWTR1=m
z4fkCWJ1zR@C;IwrdJ<HY*ZROi%og;fthI8WOJ7NQVfUx*8h;sn^ZDL?c=XvD&KLl5
z7o5SJJ{&Ri0p$kiGcyt~m=Q>*S@L?tb$w7@UYo$shrK$qL?+-vmw6i$jZM7MhX^L)
zbG#j%J7x4cIpE>MAloQMfWlFI{<=9n*<g9|W_qvdS5*MJJUV!V^J;o^-iNwe(>;7q
z{rJ1j!(adW+i%d!ESIhY$7pKg#`>JyvnMo@f%?pZ0A)$!3SD0Gp**bCi!^9`i#Y_#
zh%90hlA(>6f!nQO*N3*Pk-dYXZ`a&gZlVf|iD)%IFbO^vVZFJAPyLcyvp6i)akDp#
z{mtHk*VmJ9fA92E!((W?b|rl&|Kp#XekI7Ll0uMdgp64|i!mC&Xm&8pbIl4!#7w@#
zK9jYbbM?MmG^Bu{%nAmW(NR`(logP+g`#!`O9TX<A+7U1lD3VY47P<)Iija*#ek0u
zMcxbvSM|vftIZ7`N{Tu!U~wJx={)-I$elIy-X5)&y<c7Z<ZrrvUO54ABnrWjVQ?uG
zKBnNn)M++EQ$Ysu&?PWKW@d7!je?<|Bfna=goIrxO3M)f0D+h*Ac}dPWQ)<;hyx=4
znGreHc7w5o;8ssxcjFa?x5h+_KukJ1PnZG%LSGbJ2<y#pv4C8beX&^0+L>IHF&-am
z(sTxTb3^N+|7G&qa|bz@ClhspftXrgi%=1&3<_++xr!_SiHMr1A^`a!=<H~91tLt4
zg&jx&Mg%1T2U&qgx1~?x@Vp(X1X;%FsqM*0b-?x+XmC-|UKr5vK%2gk6A0G2GA`WH
z^p<qu*O+a7-A@|BcK*1#tb@_AZ;QWr@cB!2QFl0xW66p{KsisCxEC`u)m?O8np4V}
zm3$})Z}6}@UlAk%BQnISgn(*ZvZwD$9qldzMaw!?AM7f%b$7xe7}l<+4B*`NHq^OX
z6_aK$dE8xd4n>T!Ddcl<4SHWxtEC+k8?R5FfBCO6wcd6!eCu}sjN*U`QxlQF%FWCy
z=OMpf=)GrxG=IFjvS>!ALkoofNwts^D1Xo6c6%A2f<<Mzi(CxvL_`!IP#X%sS(RCL
z&J1Hyr??>yp-FC7!C_zT$0D|FwPZ)f@lAX9%+vh%=F1jI9c(OYTR4zcjC~e^Dv+v(
zs*USJmf>p#gA5{lxc9Oz8zn$xQp6;LKv@e(1!raWH!eg4i^4o`5^poETaGb-4u*3~
zs>4`^yX3@ziCT0k^$DFKNi48_DEa1%LY{;s%Dto6y{m7Nx2Pqj-Fi)gprTApG7Haw
zsj8UBh+gOr@H<LT$op`VPJ?fW42?*UvJh_jkj4J(J|sm;$^-~FI{ewLIsrTojJ0D9
zRS@OF@Pi>ta<*kIBTP`#r9}RCs;f=6+PFhS>1LmteEEhI1-&xn?XzV@l^jq+%Pg~c
zPz%gyh}O0d@PIQSP3w1?NtR$Rj?#fkB<dwQ7X7#8p&=?*Hl}eI8hb~S**QlOa3ia|
zh`rlt(jc0lAt@4w)|0&H*$ld1*^034bC|CRUNRMXy+)hMWTn`lchWN}E3%-dGu4b9
z#fY`rE4`Q^X?A7+Hn@u!8Zx4Z?ZE~3G@SB)NwYcxP%vY#p%m6xwp&W#t#=(->evI0
zhkQXs6GSW=q0MgyJgWdzuoef|0BLK{2uj>v&L>^f#0Ro0*EUPw%H~}cirKw(HRB6%
zvWQ_R&-ONgNKp{jW$^}*oo7%<gvda#f!V~7FHluPL<gS|Qy?NT)grG!&?#9aB2KN9
zWEc_p+I3Poa8zQ<1JhxQ^UVNQ(P^`(Y8a6y9A=ygVgKI#bQ*zx5Rjc^W0F1*kH<T2
zxwM;a<>xnxA3)kqivV0j#Ud{jGCiDio7vH_lO?Z~{o>(Mbd<6L)dI6QfUWDNAR!p(
zy7%5W=Lv?acb1{1Q;nDgZ+cdc#AptZfPqItK@_H>g?HW@4gb#!%tVH&SX3Zw`=Y>M
zhY%=0(1&X8_^`5OaR~&X$j*rt9%4+$!#Gx8r0d^pe*O3b98}y$)}n$8N;RLoJ(^dO
zHkTW$mgc9`H@^!%JOt~7Gqa2yAwwb=)X>mj*Y<r<Rrc)tz>6dz#4HGsW7_od<HE#{
z9OeX$6u<`GV^i_Ydoda`F>G9mhw~pGXs157;V5V199S_we6TO?-d$aF;6M?Hj2)w7
z+<E_Cs{QL%_&@#hbX_exuOG{`FPFjhH1X}b>1?upei72%K3~a$boO7mKRf>2>l#}L
zFzE0gDgY9o7#Vo!K$9S8Kpj*1hGZlNsv?Hxp*|wL={2e23}gvWX-G^<E`kFwa-)8g
zq3OujRsfKV7NsBHeljbQ^7J@dUz}$Y$J+?i7i40{ISwl_VZS+r|LsR_UxfNPMhL!F
zcauvh>J-v<bg);PzJ7eDdv>utdj94g-qb&=kOh#E5aHk;2S}(&298qSCtwEWwjSn4
zNQ91Z>id{Cr>ARo|H<(@03r=pKqE5(wVaE>BpW$4_IQ`Csfq}BBcX63$xE>e5Du#5
z>Uxtz2pl+M1R&=blreKL;F;2-{huEGW_kYL@DEHeg9~|89@ovi{&MEtX)(Ro|1&-<
z>l-+k)_QaGgJ1oDC=q8Ju!}LFtcHeORMId`a44oSBP2jFk)gP<N!m&^nIEhcZQ(m}
z36#`GR3%SCp9CCb^%M~RfJf4r5~4I3czaMK#8B?n>+_pNz<UG-fzbremnCc7MZhWR
z^!bB7zH0PGu<(0V7scLe6&EsFKC*v&@GE`23iZ>&Z#yo#HomPtdidWLfBVsE%fvG9
z0=M4d3TWUEArI;~gReCb0FohQ%VNmPqPTgB`1p7}yG#P92OOkK)l|Lfdm%yr=7b1l
zJjStV0NSY^v`o;@d7AJ0>$g{(d8N7`2f)sfVyGNL92`Uev9D&c^6je&`t|b{y-d=D
z|IzfEm+d4znE%V!v&YNMCil<2*+Vh7Zl}jbC%>tGex0YB6$UPjDmqd{%uLEY3xfge
zLOU7|2~{vaBB$c9i{dxsgOkg%D1AUcLN&#l3tsm_#57bgnG%o!NLB~IrEF?~Z06AU
z=}GnK%V;^cq(VT@C-9!RDv@38k!(<6aHTG;y5-})YR)A?l@`-U53S@l*?*Q^ENsv1
z*Jtmf4qYSDlXUrf_Foqt7Xc#>q|8W`g}sS)9bj@!(P0+4^`LjCqA0?S3BVkRW^k)F
zFJ93nKRkefT2DZNKwT~=Wrrd_lE#3~dB-emHkg)@B0v%*^K~`Zudcs5%|#$!$_xZK
zMj@_hN6bTp!2poha(iAKKAybl$fZs6sFtdOs6lZ5@aCIz@Tl+HDpvWroIIs}v7a>m
zIDaN74c$j%s)L^}<;)I*J?qZt01Sq;NNv!1FhoN|GHAa3*Tuu1KDlp;0KKAT+-Qj+
zgr<P9Rq-4|O|l|8vBBts(RljsgipVC$ANh;>jnZ$O)Fd!-aCYC9jzIoT)sQ`SvXsv
z4;0t_;$=8^Ugu){=IZG$;~P76SBsgyY`xPw`}p$zIr;N{dHI97-=0f{JqI938T&d6
z8alEoB^y~khV=en+LGb<Z_n@j<)?twsbns2W#wHr!MkKA1oCMGlR||Vf%y2N>g^xi
z_<bLfl5?a$psDMXiG1*6reg%ji1{1$<OzMH0VtH^{>2~Z$>W=)KYw@lBl>dh6IiS|
zt;3BRZC0D-AOF`E|GxbF^dyaUqPu<7T;COyr<j50E+RGL54Rx0`0u&5f-k=K`tawU
z)+?qyqsIkRa_i^{+uW)e5+S&_pjn~n7}<yWdzUZHq^>|j$ur6@O0%k=FFb>83lc&W
zJ%3ns`<pB=TR6P$dI)m4LV$;pmoFbaUa#Z4Z6DEEd)RD#2>)mJ_vh!&Fuiy32NJNp
zqe<o3&YY)hj+w@U361(PV@M847_nUZ;q$%!c(j?yh7ob?>fY#X`^*Na0}%jpt1x#4
zgzT!S>d&sNbfTu{9I66A+ohb6atNMw@FF@%$oIRqN0UvPwYOURaUIY5$#mbX&bs^U
zX41u3y+{xAocI0jnqPN+_*wDK_xAg-We5O<KxjGjT2Cpak&`iw(xE_S2zu@yxlB2u
ztUv$u>7UO<l|`*B%hq->q~l64^4CbDYs)DD15z=W#EWaG0$5JSo(BQ#O_Orp3OUcC
zZ|v}>1dc<ZUQ;5@RIha(H)nXy2mj{c;Sb+_u~!Kk=&O3ZM(<z0{`8k$ynXhW`=s6V
z9|8c7mz0zE3JnSL?mQgMUt0>(ZCFH*h1$=){`s$f5K^{Oga-U>Sd630%#aW@^{K2B
z7!1Q?vU#(jsS{Ko=SZ^wK^J3;eKITyP^0a4k-}X3-rE&BpS#H{8K(6jOcGUjF?ncb
zt9cb|KQ89Atk-!n{d4*6ht1*#3XqKu3<i5~FHumW^n|8aaZ4;8meV^Fjq$b-)d&S{
z{(159Pn`zMDODVSx7>@}_#gZ#pzpBogI83TS663J6qdzY=`G1nZ=suYR>`@ZLew$D
zG)4jHsmzH2ZTh_+8cF)HXmfF}xj2~HRWpt4y`xp!x3+6<=Fgvg@twbUP@qNOA?O1`
zK<cEF7%Ipy!)^Lc4RELo+2#1R1Jx9m^4V|0|8NKaWfiBSFv7q)W+8f1Q9x=obx8pe
zdGmYp_9hgPOtqN$ev_R8g2I-I>^P@TxtzAhxFVI4%bUHjSLkI@_L;>XR+FZ62b0&$
z9`U+!9XzbN$)>GiQ-mk>+tydL86<KxiWe(lqL9@Sm?-gGE)2ZKjv4U>LjpC&*1mfA
z;Adq<SV?`G6T1WF6Io6<H8P)~I*06Qw^<}66+#XSDJc>V)VN+|?@ZCNWgREI7#H`i
z&kv|WiD5r)jGXrUq-epr`<riyP=`g4F5J-`U0>5|zgTYe&X>o`Vr36Ljt&C|eV!Cu
zCL1CJ+seh6jq>QY<L}(^D-a0s=Cl6aJ?xDZR^fK@+0kjp5<2VqzRNtFV(%)z>9l{>
z4oWvzg_wrVB?y%JY=(|NZI?SWGbp*|Y(7#+ouV+_*r89+iLVz_DvMEEhP@=s`d&@x
z?Ou|5ZO%~i;4%;)nvtw!KIwZxAXD1$ci&^Tz%5J3cEbLYzkB)QCkl2$rM@T9X#hZ)
zk#o~0<xm6$WA@Wxb&<Up5L4;;sDx%fK<qH5M1_+K&SX1HD6M9Dsqxs9l?XvHy_y_2
zys_Nen>$z~ZbQ*#MUUn;%h{A~4h~;yCeB8t13yMmrT_|Lz-9zP{QDs{>o#$FyOI>R
z{(b+;Ii+P0(#`>Lhbo$qHcf_57i1hHhpNukYvQ3I)I*<u2n`639ZJmL84Pf{;|m47
zE*^DjPEtA}MUGeLBy<y4^|C)xY7rV2jl-muYE73Hj|zSM?&YyKG&2%n0<+k2nL1an
z8mZAJyN26N+geNBws-_=4Lr$<Z=QVOy0*lwaCbeR$GtYL8}LQxP05>;Q@^}~U^b{Q
z<|ODGBGBkLqNeCr)Aq21WR&s#`r35rBU)e7&CBXpT+hl&sU)a|LV&L~^J85oZw}Kx
zL;2|Oe@nj*uc+!|$du#`ONql*nGxugC31VW?<Eq3&>0X>%-S!*&s~=*>k2oX*|%$x
z0b#%HsSJZ!FL61=>l+`$0FY2pR&q=X1c;V1kj7jTlw_NCu;^=Y%MH32^p?msOL#C}
zwIwWydRhCMP^7wUu6%VB=TR%SIBkCR__YM{9#eLr#2~6M`+^Wv(U29%-fJR$(7IdB
zp{X*zSbjWfrKT8oIMLfUk-><hZ`FG?L61sR&CN<2s0jwvG`Lxy1A<J>6bSm>mtOMN
zLK2}mtXm%#B0>)Nwf=N}+4V@htFv*NYQU-M&#z_wC>^G^^xA&?>ER!LR}=wKa+1ht
zmXyFv3iEyIghPVc(Y8yY4D0E*km9HwFUnZr*{j1Rja8&O!?-Qu0SQx^U2v?u1u~vY
zx_7aHOr~79)LP*{fd~kU9Lm6hbbM=~U>p(GGzl6bA*{RU{d?<+0nIAHCYKwioAA-}
zn=j~bg%9C;*-R=fFP8H%d)!cAh?*^dCqnWuGO&}u<LnOm>%*SBP0u@2ZC{kn8w%=M
zEw=Xs+nFoLd_krem@ourR#rj=LL#y#ZtN=uv@N9BYOn(UK(5M|e4eaqaFDw>c-n6^
zzF~?rM!)hb(G;J;oAuG7maTkr-r=iFoH<`~C1zjrAX!YQ#AGG)g0ywJ8Q}c)o3s-*
z+9f>+d%~CTsd6E81Je!Oc^d$LWOIR341u_IZJUhLj6CU3dP6wm@!2t`4yj+>k&2Ws
zBZ0FX0145fi4?q1$a{1Rl@qU5lLBUxT6DZj&pt&cKD+j>TV3e%peBZ#vZ*gDL4|7}
zb_TG^-remt+r7RcRK=W-Pfs82TaAeNUSthJ38gW65+I;3;Z2hOflNbTF)I)gf(Z~f
zM<ybw3Pc1u?W`6;$*E7w1Ypy=&|*T`<WR~AN~JPwDt{%@g2eIWZS(2<?taC37Q0r{
znx+gnilO(WT;-J#`JL_XdwQe83iDoe6F?0J$ge)HpJ_o|;ogfo0l*Z9K^YSuP$;qM
z1<VM|dFc}JQ1_IF7J`bJ0TAEnpQ*7(!C9D5QX+Psb&(fZ=d4J*FPAlL<hpoJuc3sS
zuiOt%?}wIa2vv8wEC_PU;0jRiWn3z;1Ay<Pt9N}lE;YN&UzO0=m+i*|L3B=b0m<+L
zL|t7%6v;q9!E4F}ra;bX8_ChgDgy#`WGXuDLc4F!!0X0W<Onr&J=GQW<a-6v0wM~y
zX5YP<`eiwbR_vFrem{G*3}ri=8Y@?;6@g?m?^QX3eyv12j8gn?q4^UH1?HU5s5m`)
zcnIul9HgVX9-0c2^9jVZ%Rs}j1c)l?YS*rE834dUlz;%(Q&v>T;D~8^a#F%xC>2x8
zo8Gy)>_L;Uj~z^WCxmOi7vAO{G_SZu*gJ{;@aAAqf8+`k*V~~iRn^oy3A^CdYxcAi
zqTbaRzgNApn}{}OAZ0}rzkV@&%vG79ZY7XxoP_AAy@{<?5deGveFjG=LIrgjEBzoc
zIOKr2;-r*gX8}Cx5Je*>3*}{~DK2%s7xJb<;v%=EIKjsA+r6VKXY*&8;JT>~itDdl
z!ViwE?4`uaoMQq4WrW~LyjX{tA`-%uy)=YrxGhz%k+y{}I0zUZF=W#h^t_l;Qc)EV
z9noe{1cCXn-z<6nDkr+>pde9n5EDA2LBEa)AW#gP6*VUaL^wuijN%Jv1uy_Q=d_iC
z1=$8_jzH#PnsWn}>mNU@@%1-Y)wAW7M^Ddlk(CeuEoDPA1kW_@uapA{BHYp1e!pgK
zJO4oezy|3uFm<QhCkK@&iRPTQBxV%_1`D<8IwN+$r5+e1i}!IOb(xJtjJ@+f0Om-<
z%oM!amFE%&PGrMkjFZqMO$O|#Z~Zjn9s;fR+=c08HG4Ff*6%Jsr^hy5edS0&fl+nf
zmLNK;>Z^sLtsCW^x^BbTu{*aryYa=%CnutgZO9#~fvV(eK;DzYsNQ++Bw|6aS1zd8
z*rd#gBETWQ*uo@gAQ-&r_+<htCACUECm&J*R7Q54kaq|G;_IuGa($Lg)IELh?%j$W
z9`nmhP$M%2$vG=BJD0<8K5v{Kjl(`zVm>UrgmGWr9SFM1M<+`t#w;M_WRhdd2H*n4
zHgXX{<wV%!P0O|K*4cYR6IJxVD-f7DPFYO_3$I&FRD{q6-(~MR@dayd=mmUFn9Mm%
zX+K>~mUMFcUAfOZ%hxum>->%>qccHGDhlkK_d3}-KhqG12~F`&w($MM6-Uku0)WyY
z9IYUbW9PkR$!0mFoWzES$weqCmyD%vvaf9&Lj}T+4T&9RZ~*2wXH^gygn74p7^~b8
zLH5o`8!@<+f_iKnTg>3GoSpVQd{x}1t4&dTd`R}r9A)Q{YR&=*>^->YJifRt3P&LJ
z{cU2Khr6AL<LmK8#I>ub>x~>U0+<s*HMN-4b71Fu@MY~bDs2yJ(#B8)$*h@}8BxFi
z7?bEQ581Y(lt5^5y*YqnC5p8+EjT$Qz+{Z1m_wQO<-+o*_cane<CQD|n}(2tQUU;U
z-id!upT6n$s*$|<-pLZ)dpTMgZ|C8Vt`U}ZPmjN*!XW{GmL{YbK^E`k4{8KoIu{C)
z+^w*7vF}~!4KZh99tvm(3@`*q24v)hf^Gn0O`(i^g&XtIYYrs=XeMIICR#cdqs~vd
zrQN)1>XZ69@23<>NHzqVVhHTnbo!wCa$S_gxFNt$Y4O2)yt4+~F}yP{K$SCmoO?q6
zBEqs{AA;xp>`fE)IJ(k>vcSG=BiEt7N!5f6EF~cCP%{7l5KND(%fQJzv#OXOqH2LX
z&$-Q(v#Uc&5}+|A0yL=zWi2#0oTRg57iOv1%qGzXA<R8-%qWTLpm};vU!3B8$xenu
znr&58#_iwkAXA7qtixkTje$9n^K?I0w6X9WkwaOy%kOMj`z8erv$=0qH+}G!V-6)U
z<g5nHG32B`K#cW%$Vn`L4}7Z?RrGxkSW;5(6~%0UvRY!+!mIQXTVyysDdYK>YEkr3
zO|&y671Jc8HK9`6zXvZ)rK*^DlraF<GGK34(%mWCw*7hgHnPRd{!xxHg!fs9oeO?>
z<>y6epf2j8S$nZs<%#PXag#z#Q!?PdnsuwtN@c~GV*+2$77rmTx;CHz8loYBf+K>Q
znHrq*k*Jc!yxV&ySFbN;hs7%H=az}da?HwswYQ^>+_ztB_U7K<_jbbD-~zXQ*zN1>
zx+9Fu`Rt>V)YMEZ%fN8*m_ZwzP3QNf{pD4gxrC<0s$x^gS;#w*Y$QOC`ULC(<(ME8
zyE`H9F?r1Dh@sES3LeoC2V1QwGIv!x=(DZq(S7c&PwS`60y73Nw44+oPnGW9(>E`#
z_+a9K_V2gvdvz1r!zylZ8W?vA?9bdsJgkLg1|V6G=hGD1O?iL+@SuP7woR^p*hw`D
zDmjUocLoTWhU}UW6SGNH4qI(yKpQ|@MHzUgVh&L|Dyd)iNk~_C;5&e>t~ZBAH*1G6
z4J2<(0#2!(-aA@<cA8yXJG_NQK4{?%{~Vx2+hJ+rVrm9@wYj%vy46V0+$W=I>LkkE
z{d;wD`Sv<e$z89-bc!j(tVo_SILbYMgH2HvU2gz7cx(>es9;hQqF~tq8-ZqJGl>#{
zW~uvkG1~mHJh+T~yZ%xA^5t>a7znb)B+mOHIJ|iCwwx3-WmEdV)%{ixeRm+;wi9qW
zPYnUpxIKSzvb>f0$QhW62@6j5oNF$j>#XKJ=5kuG#9j>9IW#1Z?0{esT|p9!QT5g-
zz(8|dWfMh3G$6=|X6lmp99CF|vc+<JIXmgQ@H+lv_HI=mr~sImE6Pbl?VInGE|fD5
zOd0+($#>_)fOiI}-L@N0E#%j9!ejDR)KnCynxGU1`><TDRy~!aY<il_UCf%2Q1E6B
zB`Y}~09yaePyhe}{z*hZR1*cw207n>qrs@J=F)XQo+K%<0vMTB!wf5_r}G8W@-E&l
zI>j^n*l&iKGa+AAfm5@*yvgMx_(0@YbqnThpWxUhxclwy8e=dX(~ShYo%atb&~coO
zHE##gqVWCVs>!WXrS%ERSt+er%!V8QONu>s4+N9Y^=OLPMe;P>hB09qj_Iml^AH6x
zgCP?o_M*!^)ibxgKEB_+)_t)3)z`&I6;nV(P%1dLn@z9Ig)%U}of?8|>^p7;+sgXk
z=ewF117L=sv{o2xaeaI!q5vv{NfAx_{U<ZqT&?=9gQ}2C^po0ajFO|GQE==rXJ7z=
z%Bg@PQBewRn;jvL%u`;A8{~%6e55M*z9@5Q_{JSdIxjz-ynQ>J23Nj)bu{ZboPt0f
zMRHQ)qHyfl;LdsF&Xl`z;rIFw0B_?9F}Wxo4E-knW<;PgKQ8;5WzLz4pnastG{jbY
zYK@tQ9S!j4fJCvgxQT#Zh2Noxic{>9Z2tkZ>{G4Q*S=RS-gHNGdYe9aBrn>JiVcLA
zva-0O)OWoAI!Dg=q2v*_t+)$XY#aRnZfbXdH~;|FMEKTDc-Sm*MnXbj?<uuSCw>~F
z7c3_wG>!Vcao#&ZhcO!w2oMBzEbY2CFssTfd@fcW$T}KrAs{Jv;isEs<`Wk6&8zBB
zvAN<$legy&p0sb_sJZb4v=J>O0b<8QL(mJ~Z`Pk^;oVxap$c!r*2om$ZU3+u>ojDL
znj$i=)U;fCOhRSp5F{q;QYZ?~#1NB>+LxY*a?^^LNLg$>=#)xq$;TbapWS4U4sOzn
z)u=8$UqAndzq_ao{JYI3)745kH$~`BIs@EFhu#V4Ka30i%@%GmFT4M0fOd1ee>l9#
z;|(F9res)nNg2z^NfLzACh|oQ9HFLcno|S<M~Jym9=N!4%LZwi$t<ODOBRD#R@_eN
z-o&c=r{A7D@#i->J<<zzESrnf?9fTHl$jmV-BQ3mnU~m2%@0~=TR>`iDLB-4?jGD$
zYz@p(k}ms6keI*)Z!s!jY|Z<k2o5Eys>D760fRyAT&0?`bK3~mt2)b2SlWJ3_LJoe
zJ_+aMyqgza-8`<}=@iN`HIs7Ftlw4-EQ{ix>bJ$tzSoC#=hvO<y+q9&l+hF%2%gD(
zpuz0ORMiwrl2TbY%SH|@XET$W$&cE$Sxr;l8xSZGK}H6YOt_0|GR=6|OsQcMR7B3Q
z*Sx8o+gtSB!@cF-PafUiJ!I(m@?n?U*Kg+)A`&wW{zQYm!ENHq?qC*ot`P;@_2t0f
zAAA@QL4iQ|dNr*A4QQjN0b1%a6@dwX9p)~<n91-=>}UWVbIu6(pW*-K*Z&8-M_e!@
S11{VE0000<MNUMnLSTZNNUZGu

literal 0
HcmV?d00001

diff --git a/doc/image/img-template-tracker.jpg b/doc/image/img-template-tracker.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0bf3caacb85f4010fccdadfc7e3ffd27b706b070
GIT binary patch
literal 10207
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
PC&$@=7+q2%Kpg)+&AE6x

literal 0
HcmV?d00001

diff --git a/doc/image/initClickTemplateTracker.png b/doc/image/initClickTemplateTracker.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c1ee211e8c005c7055286c0e3fc3700258eb515
GIT binary patch
literal 6039
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

literal 0
HcmV?d00001

diff --git a/doc/mainpage.doc.in b/doc/mainpage.doc.in
index e012fb14..66b493c5 100644
--- a/doc/mainpage.doc.in
+++ b/doc/mainpage.doc.in
@@ -8,11 +8,11 @@
 
 <p>ViSP \cite Marchand05b is a modular C++ library that allows fast development of visual
 servoing applications. ViSP is developed and maintained by the Inria
-<a href="http://www.irisa.fr/lagadic" target="_parent">Lagadic</a> team located at <a
-href="http://www.inria.fr/rennes" target="_parent">Inria Rennes</a>.</p>
+<a href="http://team.inria.fr/lagadic" target="_parent">Lagadic</a> team located at <a
+href="http://www.inria.fr/en/centre/rennes" target="_parent">Inria Rennes</a>.</p>
 
 <p>ViSP official site is <a
-href="http://www.irisa.fr/lagadic/visp/visp.html" target="_parent">http://www.irisa.fr/lagadic/visp/visp.html</a></p>
+href="http://team.inria.fr/lagadic/visp" target="_parent">http://team.inria.fr/lagadic/visp</a></p>
  
 <p>If you have any problems or find any bugs, please report them at
 <a href="http://gforge.inria.fr/tracker/?group_id=397" target="_parent">http://gforge.inria.fr/tracker/?group_id=397</a>. If you may need help, please use the available forums <a href="http://gforge.inria.fr/forum/?group_id=397" target="_parent">http://gforge.inria.fr/forum/?group_id=397</a> or mailing lists <a href="http://gforge.inria.fr/mail/?group_id=397" target="_parent">http://gforge.inria.fr/mail/?group_id=397</a>.<p> 
@@ -22,7 +22,7 @@ It is also possible to contact ViSP main developers using: <a href="mailto:visp@
 \section download_sec Download
 
 <p>From <a
-href="http://www.irisa.fr/lagadic/visp/download.html" target="_parent">http://www.irisa.fr/lagadic/visp/download.html</a>
+href="http://team.inria.fr/lagadic/visp/download.html" target="_parent">http://team.inria.fr/lagadic/visp/download.html</a>
 you can either download the latest stable release or the current
 development distribution using Subversion.</p>
 
@@ -35,31 +35,61 @@ href="http://www.cmake.org" target="_parent">http://www.cmake.org</a>. Furthermo
 depending on your operation system and the capabilities (framegrabber,
 display, simulation, ...) you need, prior to install ViSP you may
 install third party libraries <a
-href="http://www.irisa.fr/lagadic/visp/libraries.html" target="_parent">http://www.irisa.fr/lagadic/visp/libraries.html</a>.</p>
+href="http://team.inria.fr/lagadic/visp/libraries.html" target="_parent">http://team.inria.fr/lagadic/visp/libraries.html</a>.</p>
 
-<p>ViSP full installation procedure using CMake is explained in the getting started documents available from <a
-href="http://www.irisa.fr/lagadic/visp/publication.html" target="_parent">http://www.irisa.fr/lagadic/visp/publication.html</a>.</p>
+<p>ViSP full installation procedure using CMake is detailed in the \ref tuto_intro "introduction tutorials". Getting started documents in pdf are also available from <a
+href="http://team.inria.fr/lagadic/visp/publication.html" target="_parent">http://team.inria.fr/lagadic/visp/publication.html</a>.</p>
  
 \section Tutorial_sec Tutorials
 
-<p>Here after you will find a list of tutorials that shows the basic use of <a href="classes.html">ViSP classes</a> with a small first code.
+<p>Here after you will find a list of tutorials that show the basic use of <a href="classes.html">ViSP classes</a> with a small first code.
+
+\subsection tuto_intro Introduction
+
 - \ref tutorial-install-ubuntu <br>In this first tutorial you will learn how to install ViSP from source on Linux Ubuntu.
+- \ref tutorial-install-fedora <br>In this other tutorial you will learn how to install ViSP from source on Linux Fedora.
 - \ref tutorial-install-win <br>In this tutorial you will learn how to install ViSP from source on Windows.
 - \ref tutorial-install-iOS <br>In this tutorial you will learn how to install ViSP from source on OSX for iOS project.
 - \ref tutorial-getting-started <br>This tutorial shows how to build a project that uses ViSP to read and display an image.
 - \ref tutorial-getting-started-iOS <br>This tutorial shows how to build a project that uses ViSP on iOS devices.
+
+\subsection tuto_image Image manipulation
+
 - \ref tutorial-grabber <br>This tutorial shows how to acquire images from a camera.
+- \ref tutorial-image-filtering <br>This tutorial shows how to filter an image with ViSP.
+- \ref tutorial-simu-image <br>This tutorial shows how to project the image of a planar scene to a given camera position. 
+
+\subsection tuto_calib Camera calibration
+
 - \ref tutorial-calibration <br>This tutorial explains how to calibrate a camera.
+
+\subsection tuto_tracking Tracking
+
 - \ref tutorial-tracking-blob <br>This tutorial introduces blob tracking and detection.
 - \ref tutorial-tracking-keypoint <br>This tutorial focuses on keypoint tracking using Kanade-Lucas-Tomasi feature tracker.
 - \ref tutorial-tracking-me <br>This tutorial focuses on line and ellipse tracking using moving-edges. 
 - \ref tutorial-tracking-mb <br>This tutorial focuses on model-based trackers using either edges, keypoints or and hybrid scheme that uses edges and keypoints. 
-- \ref tutorial-simu-image <br>This tutorial shows how to project the image of a planar scene to a given camera position. 
+- \ref tutorial-tracking-tt <br>This tutorial focuses on template trackers based on image registration approaches.
+
+\subsection tuto_keypoint Keypoint 
+
+- \ref tutorial-matching <br>This tutorial shows how to detect and match SURF keypoints.
+
+\subsection tuto_computer_vision Computer vision
+
 - \ref tutorial-pose-estimation <br>This tutorial focuses on pose estimation from planar or non planar points.
+- \ref tutorial-homography <br>Here we explain how to estimate an homography from couples of matched points.
+
+\subsection tuto_vs Visual servoing
+
 - \ref tutorial-ibvs <br>This tutorial explains how to simulate an IBVS.
 - \ref tutorial-simu-robot-pioneer <br>This tutorial focuses on visual servoing simulation on a unicycle robot. The study case is a Pioneer P3-DX mobile robot equipped with a camera.
-- \ref tutorial-plotter <br>This tutorial explains how to plot curves in real-time during a visual servo.
+- \ref tutorial-boost-vs <br>This tutorial explains how to speed up the time to convergence of a visual servo.
 
+\subsection tuto_tools Other tools
+
+- \ref tutorial-plotter <br>This tutorial explains how to plot curves in real-time during a visual servo.
+- \ref tutorial-trace <br>This tutorial explains how to introduce trace in the code that could be enabled for debugging or disabled.
 
 \section Examples_sec Using ViSP
 
@@ -75,7 +105,7 @@ scheme, ...</p>
 
 <p>ViSP library is an open source C++ library which is developed at <a href="http://www.inria.fr/en/centre/rennes">Inria</a> by <a href="http://team.inria.fr/lagadic/welcome-eng.html">Lagadic team</a>. If you enjoy using ViSP, you may contribute to the project in different ways. This will motivate us to continue the efforts.
 
-- You can help VISP to be more widely known, by displaying a <a href="http://www.irisa.fr/lagadic/visp/documentation/visp-flyers.pdf">ViSP flyer</a> at work, in your lab or school.
+- You can help VISP to be more widely known, by displaying a <a href="http://team.inria.fr/lagadic/visp/documentation/visp-flyers.pdf">ViSP flyer</a> at work, in your lab or school.
 - You can submit a <a href="https://gforge.inria.fr/tracker/?atid=1867&group_id=397&func=browse">bug report using the tracker</a>.
 - You can submit <a href="https://gforge.inria.fr/tracker/?func=browse&group_id=397&atid=1660">patches or new functionalities here</a>.
 - You can write new tutorials, new documentations or simply improve the existing documentation.
@@ -94,23 +124,55 @@ scheme, ...</p>
 /*!
   \defgroup Tutorial ViSP tutorials
 
+
 Here after you will find a list of tutorials that shows the basic use of <a href="classes.html">ViSP classes</a> with a small first code.
+
+\section tuto_intro Introduction
+
 - \ref tutorial-install-ubuntu <br>In this first tutorial you will learn how to install ViSP from source on Linux Ubuntu.
+- \ref tutorial-install-fedora <br>In this other tutorial you will learn how to install ViSP from source on Linux Fedora.
 - \ref tutorial-install-win <br>In this tutorial you will learn how to install ViSP from source on Windows.
 - \ref tutorial-install-iOS <br>In this tutorial you will learn how to install ViSP from source on OSX for iOS project.
 - \ref tutorial-getting-started <br>This tutorial shows how to build a project that uses ViSP to read and display an image.
 - \ref tutorial-getting-started-iOS <br>This tutorial shows how to build a project that uses ViSP on iOS devices.
+
+\section tuto_image Image manipulation
+
 - \ref tutorial-grabber <br>This tutorial shows how to acquire images from a camera.
+- \ref tutorial-image-filtering <br>This tutorial shows how to filter an image with ViSP.
+- \ref tutorial-simu-image <br>This tutorial shows how to project the image of a planar scene to a given camera position. 
+
+\section tuto_calib Camera calibration
+
 - \ref tutorial-calibration <br>This tutorial explains how to calibrate a camera.
-- \ref tutorial-tracking-blob <br>This tutorial focuses on blob tracking and detection.
+
+\section tuto_tracking Tracking
+
+- \ref tutorial-tracking-blob <br>This tutorial introduces blob tracking and detection.
 - \ref tutorial-tracking-keypoint <br>This tutorial focuses on keypoint tracking using Kanade-Lucas-Tomasi feature tracker.
 - \ref tutorial-tracking-me <br>This tutorial focuses on line and ellipse tracking using moving-edges. 
 - \ref tutorial-tracking-mb <br>This tutorial focuses on model-based trackers using either edges, keypoints or and hybrid scheme that uses edges and keypoints. 
-- \ref tutorial-simu-image <br>This tutorial shows how to project the image of a planar scene to a given camera position. 
+- \ref tutorial-tracking-tt <br>This tutorial focuses on template trackers based on image registration approaches.
+
+\section tuto_keypoint Keypoint 
+
+- \ref tutorial-matching <br>This tutorial shows how to detect and match SURF keypoints.
+
+\section tuto_computer_vision Computer vision
+
 - \ref tutorial-pose-estimation <br>This tutorial focuses on pose estimation from planar or non planar points.
+- \ref tutorial-homography <br>Here we explain how to estimate an homography from couples of matched points.
+
+\section tuto_vs Visual servoing
+
 - \ref tutorial-ibvs <br>This tutorial explains how to simulate an IBVS.
 - \ref tutorial-simu-robot-pioneer <br>This tutorial focuses on visual servoing simulation on a unicycle robot. The study case is a Pioneer P3-DX mobile robot equipped with a camera.
+- \ref tutorial-boost-vs <br>This tutorial explains how to speed up the time to convergence of a visual servo.
+
+\section tuto_tools Other tools
+
 - \ref tutorial-plotter <br>This tutorial explains how to plot curves in real-time during a visual servo.
+- \ref tutorial-trace <br>This tutorial explains how to introduce trace in the code that could be enabled for debugging or disabled.
 
 */
 
diff --git a/doc/tutorial-boost-vs.doc b/doc/tutorial-boost-vs.doc
new file mode 100644
index 00000000..647e1e9e
--- /dev/null
+++ b/doc/tutorial-boost-vs.doc
@@ -0,0 +1,98 @@
+/**
+
+\page tutorial-boost-vs Tutorial: How to boost your visual servo control law
+\tableofcontents
+
+\section intro Introduction
+
+This tutorial gives some hints to boost your visual servo control law in order to speed up the time to convergence.
+
+To illustrate this tutorial let us consider the example tutorial-ibvs-4pts-plotter.cpp introduced in \ref tutorial-ibvs. This example consider an image based visual servoing using four points as visual features.
+
+In the general case, considering \f$ \dot {\bf q} \f$ as the input velocities to the robot controller, the control laws provided in vpServo class lead to the following control law \f$ \dot {\bf q} = \pm \lambda {{\bf \widehat J}_e}^+ {\bf e}\f$ where the sign is negative for an eye in hand servo and positive for an eye to hand servo, \f$\lambda\f$ is a constant gain, \f$ {\bf \widehat J}_e\f$ is the task Jacobian and \f$\bf e \f$ is the error to regulate to zero. As described in \cite Chaumette06a, this control law ensure an exponential decoupled decrease of the error \f${\dot {\bf e}} =  \pm \lambda {\bf e}\f$.
+
+This behavior is illustrated with the next figure, where we see the exponential decrease of the eight visual features (x and y for each point) and the corresponding six velocities that are applied to the robot controller. As a consequence, velocities are high when the error is important, and very low when the error is small near the convergence. At the beginning, we can also notice velocity discontinuities with velocities varying from zero to high values in one iteration. 
+
+\image html img-ibvs-control-law-exponential.png "Convergence in 191 iterations with a constant gain."
+
+This behavior can be reproduced running tutorial-ibvs-4pts-plotter.cpp example. Here after we recall the important lines of code used to compute the control law:
+
+\code
+    vpServo task ;
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::CURRENT);
+    task.setLambda(0.5);                              // Set the constant gain value
+    for (unsigned int i = 0 ; i < 4 ; i++) {
+      ...
+      task.addFeature(p[i], pd[i]);                   // Add visual features to the task
+    }
+    while(1) {
+      for (unsigned int i = 0 ; i < 4 ; i++) {
+        ...
+        vpFeatureBuilder::create(p[i], point[i]);     // Update the visual features used in the task
+      }
+      vpColVector v = task.computeControlLaw();       // Compute the control law
+    }
+\endcode
+
+
+\section adaptive_gain Using an adaptive gain
+
+As implemented in tutorial-ibvs-4pts-plotter-gain-adaptive.cpp it is possible to adapt the gain  \f$ \lambda \f$ in order to depend on the infinity norm of the task Jacobian. The usage of an adaptive gain rather than a constant gain allows to reduce the convergence time. In that case the gain becomes:
+
+  \f[ \lambda (x) = a * exp (-b*x) + c \f]
+  
+  where \f$ a \f$, \f$ b \f$ and \f$ c \f$ are constant parameters and \f$ x \f$ is the infinity norm of the task Jacobian to consider.
+  
+  The parameters \f$a,b,c\f$ are not set directly. They are computed from three other parameters
+  \f$\lambda(0), \lambda(\infty), {\dot \lambda}(0)\f$ that are more intuitive to tune:
+  \f[ a = \lambda(0) - \lambda(\infty) \f]
+  \f[ b = {\dot \lambda}(0) / a \f]
+  \f[ c = \lambda(\infty) \f]
+  
+  Here \f$ \lambda(0)\f$ represents the gain when \f$x=0\f$, \f$ \lambda(\infty)\f$ represents the gain when \f$x=\infty\f$
+  and \f$ {\dot \lambda}(0)\f$ represents the slope of \f$\lambda(x)\f$ when \f$x=0\f$.
+
+The impact of the adaptive gain is illustrated in the next figure. During the servo, velocities applied to the controller are higher, especially when the visual error \f${\bf e}\f$ is small. But as in the previous section, using an adaptive gain doesn't insure continuous velocities especially at the first iteration.
+
+\image html img-ibvs-control-law-adaptive.png "Convergence in 91 iterations with an adaptive gain."
+
+This behavior can be reproduced running tutorial-ibvs-4pts-plotter-gain-adaptive.cpp example. Compared to the previous code given in \ref intro and available in tutorial-ibvs-4pts-plotter.cpp, here after we give the new lines of code that were introduced to use an adaptive gain:
+
+\code
+    vpAdaptiveGain lambda(4, 0.4, 30);   // lambda(0)=4, lambda(oo)=0.4 and lambda_dot(0)=30
+    task.setLambda(lambda);
+\endcode
+
+
+\section continuous_adaptive_gain Continuous sequencing
+
+As implemented in tutorial-ibvs-4pts-plotter-continuous-gain-adaptive.cpp it is also possible to ensure continuous sequencing to avoid velocity discontinuities. This behavior is achieved by introducing an additional term to the general form of the control law. This additional term comes from the task sequencing approach described in \cite Mansard07e equation (17). It allows to compute continuous velocities by avoiding abrupt changes in the command.
+
+  The form of the control law considered here is the following:
+
+  \f[
+  {\bf \dot q} = \pm \lambda {{\bf \widehat J}_e}^+ {\bf e} \mp \lambda {{\bf \widehat J}_{e(0)}}^+ {{\bf e}(0)} \exp(-\mu t)
+  \f]
+
+  where :
+  - \f${\bf \dot q}\f$ is the resulting continuous velocity command to apply to the robot controller.
+  - the sign of the control law depends on the eye in hand or eye to hand configuration.
+  - \f$\bf J\f$ is the Jacobian of the task. 
+  - \f$\bf e = (s-s^*)\f$ is the error to regulate.
+  - \f$t\f$ is the time.
+  - \f$\mu\f$ is a gain. We recommend to set this value to 4.
+  - \f${\bf \widehat J}_{e(0)}^+ {\bf e}(0)\f$ is the value of \f${\bf \widehat J}_e^+ {\bf e}\f$ when \f$t=0\f$.
+
+
+The effect of continuous sequencing is illustrated in the next figure where during the first iterations velocities are starting from zero.
+
+\image html img-ibvs-control-law-continuous-adaptive.png "Convergence in 98 iterations with an adaptive gain and continuous sequencing."
+
+This behavior can be reproduced running tutorial-ibvs-4pts-plotter-continuous-gain-adaptive.cpp example. Compared to the previous code given in \ref adaptive_gain and available in tutorial-ibvs-4pts-plotter-gain-adaptive.cpp, here after we give the new line of code that were introduced to ensure continuous sequencing:
+
+\code
+      vpColVector v = task.computeControlLaw(iter*robot.getSamplingTime());
+\endcode
+
+*/
diff --git a/doc/tutorial-calibration.doc b/doc/tutorial-calibration.doc
index 16c33c61..4df3bee7 100644
--- a/doc/tutorial-calibration.doc
+++ b/doc/tutorial-calibration.doc
@@ -48,16 +48,16 @@ The source code of the calibration tool is available in \c camera_calibration.cp
 We will not describe in detail the source, but just mention that:
 - the image processing is performed using OpenCV;
 - the estimation of the parameters is done using a virtual visual servoing scheme;
-- the calibration tool takes as input a configuration file that allows to precise the kind of pattern used in the images (chessboard or circle grid), and the location of the images used as input. If \c libjpeg and \c libpng 3rd party libraries are installed and detected during ViSP configuration, you may consider .pgm, .ppm, .jpg, .png images. Default configuration files are provided in \c example/calibration folder;
+- the calibration tool takes as input a configuration file that allows to precise the kind of pattern used in the images (chessboard or circles grid), and the location of the images used as input. If \c libjpeg and \c libpng 3rd party libraries are installed and detected during ViSP configuration, you may consider .pgm, .ppm, .jpg, .png images. Default configuration files are provided in \c example/calibration folder;
 - the resulting parameters are saved in \c camera.xml file. 
 
 \section calibration_chessboard Calibration from a chessboard
 
-In this section we consider the OpenCV chessboard pattern that has a size of 9 by 6. Each square of the chessboard is 0.025 meters large. We took 5 images called \c chessboard-01.png, \c chessboard-02.png, \c chessboard-03.png, \c chessboard-04.png, \c chessboard-05.png. Hereafter we give an example of such an image. These images are located in \c /tmp folder.
+In this section we consider the OpenCV chessboard pattern that has a size of 9 by 6. Each square of the chessboard is 0.025 meters large. We took 5 images called \c chessboard-01.png, \c chessboard-02.png, ..., \c chessboard-05.png. Hereafter we give an example of one of these images. 
 
 \image html img-chessboard-01.png Snapshot example of the chessboard used to calibrate the camera.
 
-Before starting the calibration we need to create a configuration file. We create \c /tmp/chessboard.cfg with the following content:
+Before starting the calibration we need to create a configuration file. We create \c default-chessboard.cfg with the following content:
 \code
 # Number of inner corners per a item row and column. (square, circle)
 BoardSize_Width: 9
@@ -71,12 +71,17 @@ Square_Size: 0.025
 Calibrate_Pattern: CHESSBOARD
 
 # The input image sequence to use for calibration
-Input: /tmp/chessboard-%02d.png
+Input: chessboard-%02d.png
+
+# Tempo in seconds between two images. If > 10 wait a click to continue
+Tempo: 1
 \endcode
 
+\note The images and the configuration file used in this tutorial are available in ViSP source code and copied in the same folder than the \c camera_calibration binary. 
+
 To estimate the camera parameters, just enter in ViSP \c \<binary_dir\>/examples/calibration and run:
 \code
-./camera_calibration /tmp/chessboard.cfg
+./camera_calibration default-chessboard.cfg
 \endcode
 
 This command will produce the following output:
@@ -85,41 +90,48 @@ grid width : 9
 grid height: 6
 square size: 0.025
 pattern    : CHESSBOARD
-input seq  : /tmp/chessboard-%02d.png
-frame: 1 status: 1
-frame: 2 status: 1
-frame: 3 status: 1
-frame: 4 status: 1
-frame: 5 status: 1
-
-Calibration without distortion in progress on 5 images...
+input seq  : chessboard-%02d.png
+tempo      : 1
+frame: 1, status: 1, image used as input data
+frame: 2, status: 1, image used as input data
+frame: 3, status: 1, image used as input data
+frame: 4, status: 1, image used as input data
+frame: 5, status: 1, image used as input data
+
+Calibration without distorsion in progress on 5 images...
 Camera parameters for perspective projection without distortion:
-  px = 547.3080992	 py = 546.9825167
-  u0 = 324.6299338	 v0 = 229.9072033
+  px = 278.5184659	 py = 273.9720502
+  u0 = 162.1161106	 v0 = 113.1789595
 
-Global reprojection error: 2.632851934
+Global reprojection error: 0.2784261067
 Camera parameters without distortion successfully saved in "camera.xml"
 
-Calibration with distortion in progress on 5 images...
+Calibration with distorsion in progress on 5 images...
 Camera parameters for perspective projection with distortion:
-  px = 582.7521622	 py = 580.6586412
-  u0 = 326.5736348	 v0 = 214.9591392
-  kud = -0.3372254753
-  kdu = 0.4021511255
+  px = 276.3370556	 py = 271.9804892
+  u0 = 162.3656808	 v0 = 113.4484506
+  kud = 0.02739893948
+  kdu = -0.02719442967
 
-Global reprojection error: 0.6350883328
+Global reprojection error: 0.2602153289
 Camera parameters without distortion successfully saved in "camera.xml"
+
+Estimated pose on input data 0: 0.1004079988  0.07228624926  0.2759094615  0.1622201484  -0.04594748279  -3.067523182  
+Estimated pose on input data 1: 0.1126235389  0.09590025615  0.2967542475  0.5743609549  -0.1960511892  -2.915893698  
+Estimated pose on input data 2: 0.09983133876  0.08044014071  0.2920209765  -0.02917708148  -0.6751719307  3.046437745  
+Estimated pose on input data 3: 0.07481330068  0.0832284992  0.2825482261  -0.09487329058  -0.220597075  -2.747906623  
+Estimated pose on input data 4: 0.08061439562  0.08765353523  0.2837166409  0.1009190234  -0.09325252997  -2.906079819
 \endcode
 
 The resulting parameters are also saved in \c ./camera.xml file.
 
-\section calibration_circle Calibration from a circle grid
+\section calibration_circle Calibration from a circles grid
 
-In this section we consider the ViSP symmetric circle grid pattern that has a size of 6 by 6. Each circle center of gravity is 0.034 meters distant from it's horizontal or vertical neighbor. We took 6 images called \c circles-02.pgm, \c circles-03.pgm, ..., \c circles-07.pgm. Hereafter we give an example of such an image. These images are located in \c /tmp folder.
+In this section we consider the ViSP symmetric circles grid pattern that has a size of 6 by 6. Each circle center of gravity is 0.034 meters distant from it's horizontal or vertical neighbor. We took 5 images called \c circles-01.pgm, \c circles-02.pgm, ..., \c circles-05.pgm. Hereafter we give an example of such an image. 
 
 \image html img-circles-grid-02.png Snapshot example of the symmetric circles grid used to calibrate the camera.
 
-Before starting the calibration we need to create a configuration file. We create \c /tmp/circles-grid.cfg with the following content:
+Before starting the calibration we need to create a configuration file. We create \c circles-grid.cfg with the following content:
 \code
 # Number of inner corners per a item row and column. (square, circle)
 BoardSize_Width: 6
@@ -133,12 +145,17 @@ Square_Size: 0.034
 Calibrate_Pattern: CIRCLES_GRID
 
 # The input image sequence to use for calibration
-Input: /tmp/circles-%02d.pgm
+Input: circles-%02d.pgm
+
+# Tempo in seconds between two images. If > 10 wait a click to continue
+Tempo: 1
 \endcode
 
+\note The images and the configuration file used in this tutorial are available in ViSP source code and copied in the same folder than the \c camera_calibration binary. 
+
 To estimate the camera parameters, just enter in ViSP \c \<binary_dir\>/examples/calibration and run:
 \code
-./camera_calibration /tmp/circles-grid.cfg
+./camera_calibration circles-grid.cfg
 \endcode
 
 This command will produce the following output:
@@ -147,39 +164,41 @@ grid width : 6
 grid height: 6
 square size: 0.034
 pattern    : CIRCLES_GRID
-input seq  : /tmp/circles-%02d.pgm
-frame: 2 status: 1
-frame: 3 status: 1
-frame: 4 status: 1
-frame: 5 status: 0
-frame: 6 status: 1
-frame: 7 status: 1
-
-Calibration without distortion in progress on 6 images...
+input seq  : circles-%02d.png
+tempo      : 1
+frame: 1, status: 1, image used as input data
+frame: 2, status: 1, image used as input data
+frame: 3, status: 1, image used as input data
+frame: 4, status: 1, image used as input data
+frame: 5, status: 1, image used as input data
+
+Calibration without distorsion in progress on 5 images...
 Camera parameters for perspective projection without distortion:
-  px = 552.4774691	 py = 544.8066862
-  u0 = 308.732533	 v0 = 245.8146982
+  px = 276.7844987	 py = 273.2284128
+  u0 = 164.029061	 v0 = 113.2926414
 
-Global reprojection error: 0.2888553796
+Global reprojection error: 0.3245572722
 Camera parameters without distortion successfully saved in "camera.xml"
 
-Calibration with distortion in progress on 6 images...
+Calibration with distorsion in progress on 5 images...
 Camera parameters for perspective projection with distortion:
-  px = 550.9009948	 py = 543.1425164
-  u0 = 309.1726232	 v0 = 245.7667949
-  kud = 0.01091468479
-  kdu = -0.01088523009
+  px = 272.6576029	 py = 268.9209423
+  u0 = 163.3267494	 v0 = 112.9548567
+  kud = 0.03132515383
+  kdu = -0.03098719022
 
-Global reprojection error: 0.2763660773
+Global reprojection error: 0.2985458516
 Camera parameters without distortion successfully saved in "camera.xml"
+
+Estimated pose on input data 0: -0.08883802146  -0.07573082723  0.254649414  0.009277810667  -0.1162730223  -0.06217958144  
+Estimated pose on input data 1: -0.03031929668  -0.07792577124  0.226777101  0.04390110018  -0.474640394  0.09584680839  
+Estimated pose on input data 2: 0.02757364367  -0.08075508106  0.2416734821  0.2541005213  -0.469141926  0.5746851856  
+Estimated pose on input data 3: -0.08528071  -0.0552184701  0.216359278  0.433944401  -0.01692119727  -0.01151973247  
+Estimated pose on input data 4: -0.1104723502  -0.0854285443  0.2684946566  0.4130829919  0.1926077657  0.2736623762
 \endcode
 
 The resulting parameters are also saved in \c ./camera.xml file.
 
-Note here that the following line indicates that the 5th frame corresponding to the image \c circles-05.pgm was not used in the calibration process since the status of the image processing is false.
-\code
-frame: 5 status: 0
-\endcode
 
 \section calibration_undistort Distorsion removal
 
diff --git a/doc/tutorial-getting-started.doc b/doc/tutorial-getting-started.doc
index 4532c3ef..e8bc1c9d 100644
--- a/doc/tutorial-getting-started.doc
+++ b/doc/tutorial-getting-started.doc
@@ -86,13 +86,46 @@ The title of the display is then set to \c "My image".
 
 \section image_cmake Create a CMake file
 
-Now you have to create your CMakeLists.txt file. It should look like this:
+Now you have to create your \c CMakeLists.txt file. It should look like this:
 
 \code
 project(tutorial-image)
 
 cmake_minimum_required(VERSION 2.6)
 
+find_package(VISP REQUIRED)
+if(VISP_FOUND)
+  add_definitions(${VISP_DEFINITIONS})
+  include_directories(${VISP_INCLUDE_DIRS})
+  link_directories(${VISP_LIBRARY_DIRS})
+  link_libraries(${VISP_LIBRARIES})
+endif(VISP_FOUND)
+
+add_executable(tutorial-viewer tutorial-viewer.cpp)
+\endcode
+
+The \c find_package() CMake command searches for a \c VISPConfig.cmake file that will define the corresponding variables:
+- \c VISP_ROOT_DIR       : ViSP base directory location
+- \c VISP_INCLUDE_DIRS   : ViSP and third-party headers location
+- \c VISP_LIBRARY_DIRS   : ViSP and third-party libraries location
+- \c VISP_LIBRARY        : ViSP library name
+- \c VISP_LIBRARIES      : ViSP and third-party libraries name
+- \c VISP_DEFINITIONS    : Defines required to build with ViSP
+
+In the previous \c CMakeLists.txt file, it is also possible to remove the line that started with \c link_libraries() and to specifically link a binary with ViSP using:
+
+\code
+...
+add_executable(tutorial-viewer tutorial-viewer.cpp)
+target_link_libraries(tutorial-viewer ${VISP_LIBRARIES})
+\endcode
+
+Note also that the previous \c CMakeLists.txt file can also be:
+\code
+project(tutorial-image)
+
+cmake_minimum_required(VERSION 2.6)
+
 find_package(VISP REQUIRED)
 if(VISP_FOUND)
   include(${VISP_USE_FILE})
@@ -101,6 +134,19 @@ endif(VISP_FOUND)
 add_executable(tutorial-viewer tutorial-viewer.cpp)
 \endcode
 
+where \c VISP_USE_FILE variable is set to the full path to \c VISPUse.cmake file that contains all the CMake material that allow to build your project with ViSP. In other terms, the line
+\code
+  include(${VISP_USE_FILE})
+\endcode
+will include the following lines to your \c CMakeFile.txt
+\code
+  add_definitions(${VISP_DEFINITIONS})
+  include_directories(${VISP_INCLUDE_DIRS})
+  link_directories(${VISP_LIBRARY_DIRS})
+  link_libraries(${VISP_LIBRARIES})
+\endcode
+
+
 \section image_unix On Unix-like systems
 
 \subsection image_unix_config Configure your project
@@ -111,6 +157,31 @@ Proceed as with any other project using CMake:
 cmake .
 \endcode
 
+By default \c cmake searches \c VISPConfig.cmake file in folders like \c /usr/share or \c /usr/local/share. If ViSP was not installed in \c /usr or \c /usr/local it is possible that you get the following error:
+\code
+CMake Error at CMakeLists.txt:5 (find_package):
+  Could not find module FindVISP.cmake or a configuration file for package
+  VISP.
+
+  Adjust CMAKE_MODULE_PATH to find FindVISP.cmake or set VISP_DIR to the
+  directory containing a CMake configuration file for VISP.  The file will
+  have one of the following names:
+
+    VISPConfig.cmake
+    visp-config.cmake
+\endcode
+
+To help \c cmake to find \c VISPConfig.cmake file, just set \c VISP_DIR environment variable and call \c cmake again:
+\code
+export VISP_DIR=/home/ViSP-install-folder
+cmake .
+\endcode
+or run cmake with the additional VISP_DIR definition
+\code
+cmake -DVISP_DIR=/home/ViSP-install-folder .
+\endcode
+ 
+
 \subsection image_unix_build Generate the executable
 
 Just run:
@@ -180,5 +251,5 @@ We suppose from now, that you have created a folder (let say \c C:/ViSP/ViSP-sta
   \image html img-lena-win.jpg
 
 
-You are now ready to see the next \ref tutorial-grabber.
+You are now ready to see the \ref tutorial-grabber or \ref tutorial-image-filtering.
 */
diff --git a/doc/tutorial-homography.doc b/doc/tutorial-homography.doc
new file mode 100644
index 00000000..ba3cc607
--- /dev/null
+++ b/doc/tutorial-homography.doc
@@ -0,0 +1,250 @@
+/**
+
+\page tutorial-homography Tutorial: Homography estimation from points
+
+\tableofcontents
+
+\section intro Introduction
+
+This tutorial shows how to estimate an homography from points. Two cases are considered in the next sections:
+- points are matched without possible mismatches. In that case vpHomography::DLT() or vpHomography::HLM() are used to estimate the homography,
+- points are matched with possible mismatches. In that case vpHomography::ransac() or vpHomography::robust() are used.
+
+\section homography Homography estimation
+
+Let us consider the following source code also available in tutorial-homography.cpp. To resume, we do the following:
+- define four 3D points \c oP in an object frame, 
+- define an homogeneous transformation \c aMo from frame \c a to to the object frame \c o,
+- define a similar homogeneous transformation \c bMo from frame \c b to to the object frame \c o,
+- compute the coordinates of the four 3D points in the image plane \c a and \c b. These are the matched coordinates \c (xa,ya) and \c (xb,yb) that are then used to estimate the homography using either vpHomography::DLT() or vpHomography::HLM().
+    
+\include tutorial-matching-surf-homography.cpp
+
+Now we give a line by line explanation of the code:
+
+First we have to include the header of the vpHomography class.
+\code
+#include <visp/vpHomography.h>
+\endcode
+
+In the main() function we first define the 3D coordinates of 4 points that are localized in the plane Z=0:
+\code
+  double L = 0.1;
+  std::vector<vpPoint> oP(4);
+  oP[0].setWorldCoordinates( -L,-L,   0);
+  oP[1].setWorldCoordinates(2*L,-L,   0);
+  oP[2].setWorldCoordinates(  L, 3*L, 0);
+  oP[3].setWorldCoordinates( -L, 4*L, 0);
+\endcode
+
+Then we define the homogeneous transformations between frames \c a, \c b and object frame \c o:
+\code
+  vpHomogeneousMatrix bMo(0.1, 0, 1,   0, vpMath::rad(15), 0);
+  vpHomogeneousMatrix aMb(0.2, -0.1, 0.1, vpMath::rad(-3), vpMath::rad(20), vpMath::rad(5));
+  vpHomogeneousMatrix aMo = aMb*bMo;
+\endcode
+
+From these transformations we compute the homogeneous coordinates of the points in the image plane \c a and \c b. For each point we have its coordinates \c (xa,ya) in frame \c a and \c (xb,yb) in frame \c b:
+\code
+  std::vector<vpPoint> aP(4), bP(4);
+  std::vector<double> xa(4), ya(4), xb(4), yb(4);
+  for(int i=0 ; i < 4; i++)
+  {
+    oP[i].project(aMo);
+    xa[i] = oP[i].get_x();
+    ya[i] = oP[i].get_y();
+    oP[i].project(bMo);
+    xb[i] = oP[i].get_x();
+    yb[i] = oP[i].get_y();
+  }
+\endcode
+
+We have now matched couples of coordinates of four points that are used to estimate an homography between image plane \c a and \c b. Two methods are available, either using the DLT (Direct Linear Transform) algorithm or the HLM algorithm.
+\code
+  vpHomography aHb ;
+
+  // Compute the homography using DLT
+  vpHomography::DLT(xb, yb, xa, ya, aHb, true);
+  std::cout << "Estimated homography using DLT:\n" << aHb/aHb[2][2] << std::endl;
+
+  // Compute the homography using HLM
+  vpHomography::HLM(xb, yb, xa, ya, true, aHb);
+  std::cout << "Estimated homography using HLM:\n" << aHb/aHb[2][2] << std::endl;
+\endcode
+
+\note Note that vpHomography::HLM() allows to consider points that are not coplanar.
+  
+Once the homography is estimated, the vpHomography class allows to extract the 3D homogeneous transformation between frames \c a and \c b:
+\code
+  vpRotationMatrix aRb;
+  vpTranslationVector atb;
+  vpColVector n;
+  aHb.computeDisplacement(aRb, atb, n);
+\endcode
+
+Just for fun we print the values to this transformation using:
+\code
+  std::cout << "\nEstimated displacement:"  << std::endl;
+  std::cout << " atb: " << atb.t() << std::endl;
+  vpThetaUVector atub;
+  atub.buildFrom(aRb);
+  std::cout << " athetaub: ";
+  for(unsigned int i=0; i<3; i++)
+    std::cout << vpMath::deg(atub[i]) << " ";
+  std::cout << std::endl;
+  std::cout << " n: " << n.t() << std::endl;
+\endcode
+
+This code lead to the following output:
+\code
+Estimated displacement:
+ atb: 0.2016519874  -0.1008259937  0.1008259937  
+ athetaub: -3 20 5 
+ n: 0.2588190451  -1.124100812e-14  0.9659258263  
+\endcode
+where we can see that the values for \c atb and \c athetaub are the one specified at the beginning of the source code during \c aMb initialization.
+
+After we show how to retrieve the coordinates in pixels of a point (here point [3]) in the corresponding images using camera parameters:
+\code
+  vpImagePoint iPa, iPb;
+  vpCameraParameters cam;
+  vpMeterPixelConversion::convertPoint(cam, xb[3], yb[3], iPb);
+  vpMeterPixelConversion::convertPoint(cam, xa[3], ya[3], iPa);
+
+  std::cout << " Ground truth: Point 3 in pixels in frame b: " << iPb << std::endl;
+  std::cout << " Ground truth: Point 3 in pixels in frame a: " << iPa << std::endl;
+\endcode
+
+At the end, we show how to project a point with pixel coordinates from image \c b to image \c a using the homography:
+\code
+  std::cout << "Estimation from homography: Point 3 in pixels in frame a: "
+            << vpHomography::project(cam, aHb, iPb) << std::endl;
+\endcode
+
+This last part of the code produce the following output:
+\code
+Ground truth: Point 3 in pixels in frame b: 377.9450564, 193.9928711
+Ground truth: Point 3 in pixels in frame a: 353.8501593, 486.1851856
+Estimation from homography: Point 3 in pixels in frame a: 353.8501593, 486.1851856
+\endcode
+
+
+\section ransac Ransac or robust homography estimation
+
+This section  follows the \ref tutorial-matching. It explains how to exploit couples of matched points obtained using SURF detector in order to estimate an homography that allows to reject mismatched couples of points. The homography is then used to track a postcard from its initial position in the reference image.
+
+
+Let us consider the following source code also available in tutorial-matching-surf-homography.cpp. 
+
+\include tutorial-matching-surf-homography.cpp
+
+The command line allows to use either Ransac algorithm of a robust M-estimator approach:
+\code
+% ./tutorial-matching-surf-homography 0 // to run Ransac
+% ./tutorial-matching-surf-homography 1 // to run the robust M-estimator
+\endcode
+
+Here after is the resulting video. The left image represents the reference image. The right images correspond to the successive images of the input video. All the green lines extremities represent the points that are well matched and used in the homography estimation process. All the red lines represent couple of matched points that are rejected by the robust estimator.
+
+\htmlonly
+<iframe width="560" height="315" src="http://www.youtube.com/embed/g-aEH5Chmsg" frameborder="0" allowfullscreen></iframe>
+\endhtmlonly
+
+Now, let us explain the new lines that were introduced to estimate the homography.
+
+First we detect the command line arguments to be able later to user either Ransac or the robust M-estimator:
+\code
+  int method = 0;
+
+  if (argc > 1)
+    method = atoi(argv[1]);
+
+  if (method == 0)
+    std::cout << "Uses Ransac to estimate the homography" << std::endl;
+  else
+    std::cout << "Uses a robust scheme to estimate the homography" << std::endl;
+\endcode
+
+We also initialize the coordinates of the pixels in the reference image that correspond to the postcard corners. These coordinates were obtained after a user initial click. To simplify the code, we set directly the coordinates of the points:
+\code
+  vpImagePoint corner_ref[4];
+  corner_ref[0].set_ij(115,  64);
+  corner_ref[1].set_ij( 83, 253);
+  corner_ref[2].set_ij(282, 307);
+  corner_ref[3].set_ij(330,  72);
+\endcode
+
+Using these coordinates, we display red lines around the postcard:
+\code
+  for (unsigned int i=0; i<4; i++) {
+    vpDisplay::displayCross(Idisp, corner_ref[i], 12, vpColor::red);
+  }
+  vpDisplay::flush(Idisp);
+\endcode
+
+We need also to define roughly the parameters of our camera:
+\code
+  vpCameraParameters cam(840, 840, I.getWidth()/2, I.getHeight()/2);
+\endcode
+
+For each new image, once points are matched using:
+\code
+    unsigned int nbMatch = surf.matchPoint(I);
+\endcode
+
+We allocate new containers useful for the homography estimation. The coordinates of the points in the reference image will be stored in \c (mPref_x, mPref_y), while the corresponding coordinates in the current image will be stored in \c (mPcur_x, mPcur_y). We also allocate \c inliers a vector of boolean that will indicate if a couple of point is an inlier or an outlier:
+\code
+    std::vector<double> mPref_x(nbMatch), mPref_y(nbMatch);
+    std::vector<double> mPcur_x(nbMatch), mPcur_y(nbMatch); 
+    std::vector<bool> inliers(nbMatch);
+\endcode
+
+To estimate the homography we need first to convert the points from pixel to meters:
+\code
+      vpPixelMeterConversion::convertPoint(cam, matched_ref, mPref_x[i], mPref_y[i]);
+      vpPixelMeterConversion::convertPoint(cam, matched_cur, mPcur_x[i], mPcur_y[i]);
+\endcode
+
+We can now estimate the homography using either Ransac or the robust M-estimator approach:
+\code
+    double residual;
+    if (method == 0)
+      vpHomography::ransac(mPref_x, mPref_y, mPcur_x, mPcur_y, curHref, inliers, residual,
+                           mPref_x.size()/2, 2.0/cam.get_px(), true);
+    else
+      vpHomography::robust(mPref_x, mPref_y, mPcur_x, mPcur_y, curHref, inliers, residual, 
+                           0.4, 4, true);
+\endcode
+
+For Ransac we consider that at least 50 percent of the points should be inliers (\c mPref_x.size()/2) to reach a consensus and that a couple of point is stated as an inlier if the reprojection error is lower than 2 pixels (\c 2.0/cam.get_px()).
+
+Then using the homography, we project the coordinates of the postcard corners in the current image:
+\code
+    vpImagePoint corner_ref[4], corner_cur[4];
+    for (int i=0; i< 4; i++) {
+      corner_cur[i] = vpHomography::project(cam, curHref, corner_ref[i]);
+    }
+\endcode
+
+We use these coordinates to draw blue lines arround the postcard:
+\code
+    vpImagePoint offset(0, I.getWidth());
+    for (int i=0; i< 4; i++) {
+      vpDisplay::displayLine(Idisp,
+                             corner_cur[i]       + offset,
+                             corner_cur[(i+1)%4] + offset,
+                             vpColor::blue, 3);
+    }
+\endcode
+
+Since the homography estimation updates the status of the couples of matched points as inliers or outliers, between the matched points we are able to draw green lines when they are inliers, or red lines when they are outliers.
+\code
+    for (unsigned int i = 0; i < nbMatch; i++) {
+      if(inliers[i] == true)
+        vpDisplay::displayLine(Idisp, iPref[i], iPcur[i] + offset, vpColor::green);
+      else
+        vpDisplay::displayLine(Idisp, iPref[i], iPcur[i] + offset, vpColor::red);
+    }
+\endcode
+
+*/
diff --git a/doc/tutorial-ibvs.doc b/doc/tutorial-ibvs.doc
index 694fd20c..be371d3c 100644
--- a/doc/tutorial-ibvs.doc
+++ b/doc/tutorial-ibvs.doc
@@ -104,7 +104,7 @@ It is now time to define four visual features as points in the image-plane. To t
 
 Each feature is obtained by computing the position of the 3D points in the corresponding camera frame, and then by applying the perspective projection. Once current and desired features are created, they are added to the visual servo task.
 \code
-  for (int i = 0 ; i < 4 ; i++) {
+  for (unsigned int i = 0 ; i < 4 ; i++) {
     point[i].track(cdMo);
     vpFeatureBuilder::create(pd[i], point[i]);
     point[i].track(cMo);
@@ -141,7 +141,7 @@ Now we can enter in the visual servo loop. When a velocity is applied to our fre
 
 The current visual features are then updated by projecting the 3D points in the image-plane associated to the new camera location \c cMo.
 \code
-   for (int i = 0 ; i < 4 ; i++) {
+   for (unsigned int i = 0 ; i < 4 ; i++) {
       point[i].track(cMo);
       vpFeatureBuilder::create(p[i], point[i]);
     }
@@ -232,7 +232,7 @@ We create an instance of the vpProjectionDisplay class. This class is only avail
 \code
 #if defined(VISP_HAVE_DISPLAY)
   vpProjectionDisplay externalview;
-  for (int i = 0 ; i < 4 ; i++)
+  for (unsigned int i = 0 ; i < 4 ; i++)
     externalview.insert(point[i]) ;
 #endif
 \endcode
@@ -354,7 +354,7 @@ To retrieve the simulated image that depends on the simulated camera position we
 The current visual features are computed using a vpDot2 blob tracker. Once four trackers are instantiated, we are waiting for a mouse click in each blob to initialize the tracker. Then we compute the current visual features \f$(x,y) \f$ from the camera parameters and the cog position of each blob.
 
 \code
-  for (int i = 0 ; i < 4 ; i++) {
+  for (unsigned int i = 0 ; i < 4 ; i++) {
     ...
     dot[i].setGraphics(true);
     dot[i].initTracking(I);
@@ -372,7 +372,7 @@ In the visual servo loop, at each iteration we get a new image of the target.
 
 We track each blob and update the values of the current visual features as previously.
 \code
-    for (int i = 0 ; i < 4 ; i++) {
+    for (unsigned int i = 0 ; i < 4 ; i++) {
       dot[i].track(I);
       vpFeatureBuilder::create(p[i], cam, dot[i].getCog());    
 \endcode
@@ -387,4 +387,5 @@ depends on \f$(x,y)\f$ but also on \f$Z\f$ the depth of the feature, we need to
     }
 \endcode
 
+You are now ready to see the \ref tutorial-simu-robot-pioneer and \ref tutorial-boost-vs. 
 */
diff --git a/doc/tutorial-image-filtering.doc b/doc/tutorial-image-filtering.doc
new file mode 100644
index 00000000..f7120c07
--- /dev/null
+++ b/doc/tutorial-image-filtering.doc
@@ -0,0 +1,152 @@
+/**
+
+\page tutorial-image-filtering Tutorial: Image filtering
+\tableofcontents
+
+This tutorial supposes that you have followed the \ref tutorial-getting-started.
+
+\section intro Introduction
+
+In this tutorial you will learn how to use ViSP filtering functions implemented in vpImageFilter class.
+
+Let us consider the following source code that comes from tutorial-image-filter.cpp.
+
+\include tutorial-image-filter.cpp
+
+Once build, you should have \c tutorial-image-filter binary. It shows how to apply different filters on an input image. Here we will consider lena.pgm as input image. 
+
+\image html img-lena-gray.png
+
+To see the resulting filtered images, just run:
+
+\code 
+./tutorial-image-filter lena.pgm
+\endcode 
+
+The following sections give a line by line explanation of the source code dedicated to image filtering capabilities.
+ 
+\section blur Gaussian blur
+
+Lena input image is read from disk and is stored in  \c I which is a gray level image declared as 
+
+\code 
+vpImage<unsigned char> I;
+\endcode 
+
+To apply a Gaussian blur to this image we first have to declare a resulting floating-point image \c F. Then the blurred image could be obtained using the default Gaussian filter: 
+
+\code 
+vpImage<double> F;
+vpImageFilter::gaussianBlur(I, F);
+\endcode 
+
+The resulting image is the following:
+
+\image html img-lena-blured-default.png
+
+It is also possible to specify the Gaussian filter kernel size and the Gaussian standard deviation (sigma) using:
+
+\code 
+vpImageFilter::gaussianBlur(I, F, 7, 2); // Kernel size: 7, sigma: 2
+\endcode 
+
+We thus obtain the following image:
+
+\image html img-lena-blured-var2.png
+
+\section gradient Gradients computation
+
+To compute the gradients or the spatial derivative along X use:
+
+\code 
+vpImage<double> dIx;
+vpImageFilter::getGradX(I, dIx);
+\endcode 
+
+Gradients along Y could be obtained using:
+
+\code 
+vpImage<double> dIy;
+vpImageFilter::getGradY(I, dIy);
+\endcode 
+
+The resulting floating-point images \c dIx, \c dIy are the following:
+
+\image html img-lena-dIxy.png
+
+\section canny Canny edge detector
+
+Canny edge detector function is only available if ViSP was build with OpenCV 2.1 or higher.
+
+After the declaration of a new image container \c C, Canny edge detector is applied using:
+\code 
+#if (VISP_HAVE_OPENCV_VERSION >= 0x020100)
+    vpImage<unsigned char> C;
+    vpImageFilter::canny(I, C, 5, 15, 3);
+#endif
+\endcode 
+
+Where:
+- 5: is the low threshold
+- 15: is the high threshold set in the program as three times the lower threshold (following Canny’s recommendation)
+- 3: is the size of the Sobel kernel used internally.
+
+The resulting image \c C is the following:
+ 
+\image html img-lena-canny.png
+
+
+\section convolution Convolution 
+
+To apply a convolution to an image, we first have to define a kernel.
+For example, let us consider the 3x3 Sobel kernel defined in \c K.
+
+  \f[
+  {\bf K} = \begin{tabular}{|c|c|c|}
+  \hline
+  1 & 0 & -1 \\
+  \hline
+  2 & 0 & -2 \\
+  \hline
+  1 & 0 & -1 \\
+  \hline
+  \end{tabular}
+  \f]
+
+
+\code 
+    vpMatrix K(3,3); // Sobel kernel along x
+    K[0][0] = 1; K[0][1] = 0; K[0][2] = -1;
+    K[1][0] = 2; K[1][1] = 0; K[1][2] = -2;
+    K[2][0] = 1; K[2][1] = 0; K[2][2] = -1;
+\endcode 
+
+After the declaration of a new floating-point image \c Gx, the convolution is obtained using: 
+\code 
+    vpImage<double> Gx;
+    vpImageFilter::filter(I, Gx, K);
+\endcode 
+
+The content of the filtered image \c Gx is the following.
+
+\image html img-lena-sobel.png
+
+\section pyramid Gaussian image pyramid
+
+To construct a pyramid of Gaussian filtered images as a vector of images implemented in \c pyr[] you may use:
+\code 
+    size_t nlevel = 3;
+    std::vector< vpImage<unsigned char> > pyr(nlevel);
+    pyr[0] = I;
+    for (size_t i=1; i < nlevel; i++) {
+      vpImageFilter::getGaussPyramidal(pyr[i-1], pyr[i]);
+      display(pyr[i], "Pyramid");
+    }
+\endcode 
+
+The content of \c pyr[0], \c pyr[1], \c pyr[2] is the following:
+\image html img-lena-pyr.png
+
+You are now ready to see the next \ref tutorial-tracking-blob.
+
+*/
diff --git a/doc/tutorial-install-fedora.doc b/doc/tutorial-install-fedora.doc
new file mode 100644
index 00000000..d61fce64
--- /dev/null
+++ b/doc/tutorial-install-fedora.doc
@@ -0,0 +1,227 @@
+/**
+
+\page tutorial-install-fedora Tutorial: Installation from source on Linux Fedora
+\tableofcontents
+
+In this tutorial you will learn how to install ViSP from source on Linux Fedora. These steps have been tested for Fedora 18 (64 bit) distribution, but should work with any other distribution as well. 
+
+Concerning ViSP installation, we provide also other tutorials
+- \ref tutorial-install-ubuntu
+- \ref tutorial-install-win
+- \ref tutorial-install-iOS
+
+ViSP can also be installed on other platforms including OSX, CentOS, openSUZE (see <a href="http://www.irisa.fr/lagadic/visp/install.html">Install from source page</a>).
+
+
+\section install_ubuntu_required Required packages
+
+- gcc 4.4.x or later. This can be installed with:
+\code
+su -c "yum install gcc-c++"
+\endcode
+- CMake 2.6 or higher that could be installed with:
+\code
+su -c "yum install cmake"
+\endcode
+
+
+ViSP is interfaced with several optional <a href="http://www.irisa.fr/lagadic/visp/libraries.html">third-party libraries</a>. The installation of the corresponding packages is described in \ref install_fedora_3rdparty section.
+
+\section install_fedora_get_source Getting ViSP source code
+
+There are different ways to get ViSP source code:
+
+- You can download the <a href="http://www.irisa.fr/lagadic/visp/download.html#latest">latest stable release</a> as a zip or a tarball. Once downloaded, uncompress the file using either
+\code
+tar xvzf ViSP-2.9.0.tar.gz 
+\endcode
+or
+\code
+unzip ViSP-2.9.0.zip
+\endcode
+
+- You can also download a more <a href="http://www.irisa.fr/lagadic/visp/download.html#snapshot">recent snapshot</a>. Once downloaded, uncompress the file using
+\code
+unzip ViSP-2.y.z-snapshot-2014.mm.dd.zip
+\endcode
+- Or you get the cutting-edge ViSP from Subversion repository. To this end you have first to install subversion
+\code
+su -c "yum install subversion"
+\endcode
+and then use the following command
+\code
+svn checkout svn://scm.gforge.inria.fr/svn/visp/trunk/ViSP ViSP-trunk
+\endcode
+
+We suppose now that ViSP source is in a directory denoted  \<source_dir\>, for example \c $HOME/ViSP-2.9.0
+
+\section install_fedora_config Configuring ViSP from source
+
+- Create first a directory denoted \<binary_dir\> where you want to build ViSP. This directory will contain generated Makefiles, object files, and output libraries and binaries.
+\code
+cd $HOME; mkdir ViSP-build-release
+\endcode
+
+- Enter the \<binary_dir\> and to configure the build type:
+\code
+cmake [<optional parameters>] <source_dir>
+\endcode
+For example:
+\code
+cd $HOME/ViSP-build-release
+cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_SHARED_LIBS=ON ../ViSP-2.9.0
+\endcode
+A more versatile way to configure the build is to use \c ccmake, the CMake GUI:
+\code
+ccmake ../ViSP-2.9.0
+\endcode
+The following image shows that this command allows to configure (just by pressing [c] key) the build in a more advanced way where some options could be easily turned On/Off. It allows also to see which are the 3rd party that will be used.
+\image html img-ccmake-ubuntu.png Snapshot of the ccmake \c ../ViSP-2.9.0 command used to configure ViSP.
+
+- There is an other way to see which are the 3rd party that are found during the configuration stage and that will be used by ViSP during the build. To this end you can have a look to the text file named ViSP-third-party.txt and located in \<binary_dir\>. We provide hereafter an example of a possible content of this file:
+\code
+                    ViSP third-party libraries
+
+Below you will find the list of third party libraries used to 
+build ViSP on your computer.
+
+Mathematics:
+  Gnu Scientific Library      : no
+  Lapack/blas                 : no
+Simulator:
+  Ogre simulator              : no
+  \- Ogre3D                   : no
+  \- OIS                      : no
+  Coin simulator              : 
+  \- Coin3D                   : no
+  \- SoWin                    : no
+  \- SoXt                     : no
+  \- SoQt                     : no
+  \- Qt4                      : no
+  \- Qt3                      : no
+Robots
+  Afma6                       : no
+  Afma4                       : no
+  Biclops                     : no
+  Ptu46                       : no
+  Pioneer                     : no
+  Viper S650                  : no
+  Viper S850                  : no
+  Cycab                       : no
+Video devices (display)                  
+  X11                         : no
+  GTK                         : no 
+  OpenCV                      : no 
+  GDI                         : no
+  Direct3D                    : no
+Framegrabbers
+  Firewire libdc1394-1.x      : no
+  Firewire libdc1394-2.x      : no
+  Video For Linux Two         : no
+  DirectShow                  : no
+  CMU 1394 Digital Camera SDK : no
+  OpenCV                      : no 
+Specific devices
+  Yarp                        : no
+  Kinect                      : no
+  \-libfreenect               : no
+  \-libusb-1.0                : no
+  \-pthread                   : yes
+Video and image Read/Write:
+  FFMPEG                      : no
+  libjpeg                     : no
+  libpng                      : no
+Misc:
+  XML2                        : no
+  pthread                     : yes
+  OpenMP                      : yes
+Documentation:
+  Doxygen                     : no
+  Graphviz dot                : no
+ViSP built with C++11 features: no
+\endcode
+In our case, only \c pthread an OpenMP 3rd party are detected.  
+
+\subsection install_fedora_3rdparty Optional 3rd party packages
+
+As mentioned previously, ViSP is interfaced with some 3rd party libraries. The <a href="http://www.irisa.fr/lagadic/visp/libraries.html">complete list is provided here</a>. We recommand to install the following:
+
+- OpenCV
+\code
+su -c "yum install opencv-devel"
+\endcode
+- libX11 to be able to open a window to display images
+\code
+su -c "yum install libX11-devel"
+\endcode
+- lapack and gsl to benefit from optimized mathematical capabilities
+\code
+su -c "yum install lapack-devel gsl-devel"
+\endcode
+- libdc1394 to grab images from firewire cameras
+\code
+su -c "yum install libdc1394-devel"
+\endcode
+- libv4l to grab images from usb or analogic cameras
+\code
+su -c "yum install libv4l-devel"
+\endcode
+- Coin, to be able to support vrml cad model used by the model-based trackers
+\code
+su -c "yum install Coin2-devel"
+\endcode
+- libxml2 to be able to configure the model-based trackers from xml files
+\code
+su -c "yum install libxml2-devel"
+\endcode
+- libjpeg, libpng to support jpeg and png images
+\code
+su -c "yum install libjpeg-devel libpng-devel"
+\endcode
+- ffmpeg, to be able to read or encode compressed video streams
+\code
+su -c "yum install ffmpeg-devel"
+\endcode
+- Ogre 3D if you want to do augmented reality or simulation
+\code
+su -c "yum install ogre-devel ogre-samples ois-devel"
+\endcode
+
+Once installed, if you want that ViSP exploit the new 3rd party, you have to configure ViSP again.
+
+\code
+ccmake ../ViSP-2.9.0
+\endcode
+The following image shows now that all the previous optional 3rd party are detected.
+\image html img-ccmake-ubuntu-all.png Snapshot of the ccmake \c ../ViSP-2.9.0 command used to configure ViSP after installation of optional 3rd party libraries.
+
+\subsection install_ubuntu_generate Generating Makefiles
+
+To generate the makefiles, just press [g] key in the ccmake gui.
+
+Now we can build ViSP.
+
+\section install_fedora_build Building ViSP from source
+
+- To build ViSP proceed with:
+\code
+make
+\endcode
+
+- To install ViSP proceed with:
+\code
+sudo make install
+\endcode
+
+- To build ViSP documentation, you have first to install Doxygen package:
+\code
+su -c "yum install doxygen graphviz"
+\endcode
+Then you can proceed with:
+\code
+make html-doc
+\endcode
+
+You are now ready to see the next \ref tutorial-getting-started that will show you how to use ViSP as a 3rd party to build your own project.
+
+*/
diff --git a/doc/tutorial-install-iOS.doc b/doc/tutorial-install-iOS.doc
index e327c6f3..628258be 100644
--- a/doc/tutorial-install-iOS.doc
+++ b/doc/tutorial-install-iOS.doc
@@ -6,10 +6,11 @@
 In this tutorial you will learn how to install ViSP from source on OSX in order to be able to compile and use it for iOS development. These steps have been tested for OSX 10.8.4  but should work with any other distribution as well.
 
 Concerning ViSP installation, we provide also other tutorials
-- \ref tutorial-install-win
 - \ref tutorial-install-ubuntu
+- \ref tutorial-install-fedora
+- \ref tutorial-install-win
 
-ViSP can also be installed on other platforms including OSX, Fedora, CentOS, openSUZE (see <a href="http://www.irisa.fr/lagadic/visp/install.html">Install from source page</a>).
+ViSP can also be installed on other platforms including OSX, CentOS, openSUZE (see <a href="http://www.irisa.fr/lagadic/visp/install.html">Install from source page</a>).
 
 
 \section install_iOS_required Required software
@@ -25,23 +26,23 @@ There are different ways to get ViSP source code:
 
 - You can download the <a href="http://www.irisa.fr/lagadic/visp/download.html#latest">latest stable release</a> as a zip or a tarball. Once downloaded, uncompress the file using either
 \code
-tar xvzf ViSP-2.7.0.tar.gz 
+tar xvzf ViSP-2.9.0.tar.gz 
 \endcode
 or
 \code
-unzip ViSP-2.7.0.zip
+unzip ViSP-2.9.0.zip
 \endcode
 
 - You can also download a more <a href="http://www.irisa.fr/lagadic/visp/download.html#snapshot">recent snapshot</a>. Once downloaded, uncompress the file using
 \code
-unzip ViSP-2.7.1-snapshot-2013.05.02.zip
+unzip ViSP-2.y.z-snapshot-2014.mm.dd.zip
 \endcode
 - Or you get the cutting-edge ViSP from Subversion repository. To this end you have first to install subversion and then use the following command
 \code
 svn checkout svn://scm.gforge.inria.fr/svn/visp/trunk/ViSP ViSP-trunk
 \endcode
 
-We suppose now that ViSP source is in a directory denoted  \<source_dir\>, for example \c $HOME/ViSP-2.7.0
+We suppose now that ViSP source is in a directory denoted  \<source_dir\>, for example \c $HOME/ViSP-2.9.0
 
 \section install_iOS_config Configuring ViSP from source
 
diff --git a/doc/tutorial-install-ubuntu.doc b/doc/tutorial-install-ubuntu.doc
index fa0a25e1..c022a36c 100644
--- a/doc/tutorial-install-ubuntu.doc
+++ b/doc/tutorial-install-ubuntu.doc
@@ -6,10 +6,11 @@
 In this tutorial you will learn how to install ViSP from source on Linux Ubuntu. These steps have been tested for Ubuntu 13.04 (64 bit) distribution, but should work with any other distribution as well. 
 
 Concerning ViSP installation, we provide also other tutorials
+- \ref tutorial-install-fedora
 - \ref tutorial-install-win
 - \ref tutorial-install-iOS
 
-ViSP can also be installed on other platforms including OSX, Fedora, CentOS, openSUZE (see <a href="http://www.irisa.fr/lagadic/visp/install.html">Install from source page</a>).
+ViSP can also be installed on other platforms including OSX, CentOS, openSUZE (see <a href="http://www.irisa.fr/lagadic/visp/install.html">Install from source page</a>).
 
 
 \section install_ubuntu_required Required packages
@@ -32,16 +33,16 @@ There are different ways to get ViSP source code:
 
 - You can download the <a href="http://www.irisa.fr/lagadic/visp/download.html#latest">latest stable release</a> as a zip or a tarball. Once downloaded, uncompress the file using either
 \code
-tar xvzf ViSP-2.7.0.tar.gz 
+tar xvzf ViSP-2.9.0.tar.gz 
 \endcode
 or
 \code
-unzip ViSP-2.7.0.zip
+unzip ViSP-2.9.0.zip
 \endcode
 
 - You can also download a more <a href="http://www.irisa.fr/lagadic/visp/download.html#snapshot">recent snapshot</a>. Once downloaded, uncompress the file using
 \code
-unzip ViSP-2.7.1-snapshot-2013.05.02.zip
+unzip ViSP-2.y.z-snapshot-2014.mm.dd.zip
 \endcode
 - Or you get the cutting-edge ViSP from Subversion repository. To this end you have first to install subversion
 \code
@@ -52,7 +53,7 @@ and then use the following command
 svn checkout svn://scm.gforge.inria.fr/svn/visp/trunk/ViSP ViSP-trunk
 \endcode
 
-We suppose now that ViSP source is in a directory denoted  \<source_dir\>, for example \c $HOME/ViSP-2.7.0
+We suppose now that ViSP source is in a directory denoted  \<source_dir\>, for example \c $HOME/ViSP-2.9.0
 
 \section install_ubuntu_config Configuring ViSP from source
 
@@ -64,20 +65,20 @@ cd $HOME; mkdir ViSP-build-release
 - Enter the \<binary_dir\> and to configure the build type:
 \code
 cmake [<optional parameters>] <source_dir>
-For example:
 \endcode
+For example:
 \code
 cd $HOME/ViSP-build-release
-cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_SHARED_LIBS=ON ../ViSP-2.7.0
+cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_SHARED_LIBS=ON ../ViSP-2.9.0
 \endcode
 A more versatile way to configure the build is to use \c ccmake, the CMake GUI:
 \code
-ccmake ../ViSP-2.7.0
+ccmake ../ViSP-2.9.0
 \endcode
 The following image shows that this command allows to configure (just by pressing [c] key) the build in a more advanced way where some options could be easily turned On/Off. It allows also to see which are the 3rd party that will be used.
-\image html img-ccmake-ubuntu.png Snapshot of the ccmake \c ../ViSP-2.7.0 command used to configure ViSP.
+\image html img-ccmake-ubuntu.png Snapshot of the ccmake \c ../ViSP-2.9.0 command used to configure ViSP.
 
-- There is an other way to see which are the 3rd party that are found during the configuration stage and that will be used by ViSP during the build. To this end you can have a look to the text file named ViSP-third-party.txt and located in \<binary_dir\>. We provide hereafter the content of this file:
+- There is an other way to see which are the 3rd party that are found during the configuration stage and that will be used by ViSP during the build. To this end you can have a look to the text file named ViSP-third-party.txt and located in \<binary_dir\>. We provide hereafter an example of a possible content of this file:
 \code
                     ViSP third-party libraries
 
@@ -153,9 +154,9 @@ sudo apt-get install libopencv-dev
 \code
 sudo apt-get install libx11-dev
 \endcode
-- liblapack to benefit from optimized mathematical capabilities
+- lapack and GSL to benefit from optimized mathematical capabilities
 \code
-sudo apt-get install liblapack-dev
+sudo apt-get install liblapack-dev libgsl0-dev
 \endcode
 - libdc1394 to grab images from firewire cameras
 \code
@@ -189,10 +190,10 @@ sudo apt-get install libogre-dev libois-dev
 Once installed, if you want that ViSP exploit the new 3rd party, you have to configure ViSP again.
 
 \code
-ccmake ../ViSP-2.7.0
+ccmake ../ViSP-2.9.0
 \endcode
 The following image shows now that all the previous optional 3rd party are detected.
-\image html img-ccmake-ubuntu-all.png Snapshot of the ccmake \c ../ViSP-2.7.0 command used to configure ViSP after installation of optional 3rd party libraries.
+\image html img-ccmake-ubuntu-all.png Snapshot of the ccmake \c ../ViSP-2.9.0 command used to configure ViSP after installation of optional 3rd party libraries.
 
 \subsection install_ubuntu_generate Generating Makefiles
 
diff --git a/doc/tutorial-install-win.doc b/doc/tutorial-install-win.doc
index 95e81bf9..7b7ee169 100644
--- a/doc/tutorial-install-win.doc
+++ b/doc/tutorial-install-win.doc
@@ -7,9 +7,10 @@ In this tutorial you will learn how to install ViSP from source on Windows. Thes
 
 Concerning ViSP installation, we provide also other tutorials
 - \ref tutorial-install-ubuntu
+- \ref tutorial-install-fedora
 - \ref tutorial-install-iOS
 
-ViSP can also be installed on other platforms OSX, Fedora, CentOS, openSUZE (see <a href="http://www.irisa.fr/lagadic/visp/install.html">Install from source page</a>).
+ViSP can also be installed on other platforms OSX, CentOS, openSUZE (see <a href="http://www.irisa.fr/lagadic/visp/install.html">Install from source page</a>).
 
 
 \section install_win_required Required packages
@@ -26,11 +27,11 @@ There are different ways to get ViSP source code:
 - You can also download a more <a href="http://www.irisa.fr/lagadic/visp/download.html#snapshot">recent snapshot</a>. 
 - Or you can get the cutting-edge ViSP from Subversion repository svn://scm.gforge.inria.fr/svn/visp/trunk/ViSP.
 
-We suppose now that ViSP source is in a directory denoted  \<source_dir\>, for example \c C:\\ViSP\\ViSP-2.7.1
+We suppose now that ViSP source is in a directory denoted  \<source_dir\>, for example \c C:\\ViSP\\ViSP-2.9.0
 
 \section install_win_config Configuring ViSP from source 
 
-The goal of the configuration step is now to use CMake to produce a Visual Studio C++ solution that will be located in \<binary_dir\>, for example \c C:\\ViSP\\ViSP-2.7.1-build.
+The goal of the configuration step is now to use CMake to produce a Visual Studio C++ solution that will be located in \<binary_dir\>, for example \c C:\\ViSP\\ViSP-2.9.0-build.
 
 - Launch CMake (cmake-gui) and complete the \<source_dir\> and \<binary_dir\> locations as in the next image.
 
@@ -40,7 +41,7 @@ The goal of the configuration step is now to use CMake to produce a Visual Studi
 
 \image html img-cmake-win-2.jpg 
 
-- Click on "Yes" to create the \c C:\\ViSP\\ViSP-2.7.1-build folder.
+- Click on "Yes" to create the \c C:\\ViSP\\ViSP-2.9.0-build folder.
 - Select then your compiler, for example here Visual Studio 11 Win64, and click on "Finish" button. 
 
 \image html img-cmake-win-msvc-version.jpg 
@@ -117,13 +118,13 @@ setx OPENCV_DIR C:\OpenCV\opencv\build
 
 \image html img-cmake-win-generate.jpg 
 
-- Once the generation is done, in \c C:/ViSP/ViSP-2.7.1-build folder you have the Visual Studio \c VISP.sln generated solution file.
+- Once the generation is done, in \c C:/ViSP/ViSP-2.9.0-build folder you have the Visual Studio \c VISP.sln generated solution file.
 
 \image html img-cmake-win-solution.jpg 
 
 \section install_win_build Building ViSP from source
 
-- To build ViSP just double click on \c C:/ViSP/ViSP-2.7.1-build/VISP.sln solution file. This action will open ViSP project in Visual Studio C++. As shown in the next image, by default, Visual Studio position the solution configuration to \c Debug.
+- To build ViSP just double click on \c C:/ViSP/ViSP-2.9.0-build/VISP.sln solution file. This action will open ViSP project in Visual Studio C++. As shown in the next image, by default, Visual Studio position the solution configuration to \c Debug.
 
 \image html img-msvc-1.jpg 
 
@@ -170,7 +171,7 @@ C:\ViSP\ViSP-install\bin; C:\OpenCV\opencv\build\x64\vc11\bin
 
 Some ViSP examples and tests require data set (images, models). These data set is provided as a compressed zip files. 
 
-- Download ViSP-images-2.7.0.zip from http://www.irisa.fr/lagadic/visp/download.html#dataDownloadForExample and uncompress it for example in \c C:/ViSP. 
+- Download ViSP-images-2.9.0.zip from http://www.irisa.fr/lagadic/visp/download.html#dataDownloadForExample and uncompress it for example in \c C:/ViSP. 
 
 \image html img-ViSP-images.jpg 
 
diff --git a/doc/tutorial-matching.doc b/doc/tutorial-matching.doc
new file mode 100644
index 00000000..5becda59
--- /dev/null
+++ b/doc/tutorial-matching.doc
@@ -0,0 +1,94 @@
+/**
+
+\page tutorial-matching Tutorial: Keypoint matching
+\tableofcontents
+
+\section intro Introduction
+
+This tutorial focuses on SURF key points manipulation. You will learn how to detect SURF key points on a reference image considered here as the first image of an mpeg video. Then in the next images of the video, key points that match those detected in the reference image using SURF descriptor are displayed.
+
+\note We assume that you are familiar with video framegrabbing described in \ref tutorial-grabber and with the way to display an image in a window described in \ref tutorial-getting-started.
+
+\section surf SURF key points detection and matching
+
+Let us consider the following source code also available in tutorial-matching-surf.cpp.
+
+\include tutorial-matching-surf.cpp
+
+Here after is the resulting video. The left image represents the reference image. The right images correspond to the successive images of the input video. All the green lines extremities represent the points that are matched.
+
+\htmlonly
+<iframe width="560" height="315" src="http://www.youtube.com/embed/sMbed_oYJgQ" frameborder="0" allowfullscreen></iframe>
+\endhtmlonly
+
+Now, let us explain the lines dedicated to the SURF keypoint usage.
+
+First we have to include the header of the vpKeyPointSurf class that is a wrapper over OpenCV classes.
+\code
+#include <visp/vpKeyPointSurf.h>
+\endcode
+
+Note that this class is only available if ViSP was build with OpenCV non free module. This is ensured by the check of VISP_HAVE_OPENCV_NONFREE macro. To grab the images from the mpeg video stream we need also that ViSP was build with ffmpeg 3rd party. That's why we check VISP_HAVE_FFMPEG macro definition:
+\code
+#if defined(VISP_HAVE_OPENCV_NONFREE) && defined(VISP_HAVE_FFMPEG)
+\endcode
+
+Then we open the mpeg video stream and grab the first image of the video that is stored in \c I container. A Surf keypoint class is instantiated and keypoints are detected on the first image which is considered as the reference image:
+\code
+  vpKeyPointSurf surf;
+  surf.buildReference(I);
+\endcode
+
+The next lines are used to create image \c Idisp to render the matching results; left image for the reference image, right image for the current image that is processed:
+\code
+  vpImage<unsigned char> Idisp;
+  Idisp.resize(I.getHeight(), 2*I.getWidth());
+  Idisp.insert(I, vpImagePoint(0, 0));
+  Idisp.insert(I, vpImagePoint(0, I.getWidth()));
+\endcode
+
+Then a display using OpenCV is created and image \c Idisp is rendered:
+\code
+  vpDisplayOpenCV d(Idisp, 0, 0, "Matching surf keypoints") ;
+  vpDisplay::display(Idisp);
+  vpDisplay::flush(Idisp);
+\endcode
+
+We enter then in the \c while() loop where a new image is acquired from the video stream and inserted in the right part of image \c Idisp dedicated to rendering of the matching results.
+\code
+    reader.acquire(I);
+    Idisp.insert(I, vpImagePoint(0, I.getWidth()));
+\endcode
+
+We start the rendering by displaying the rendered image and by drawing a white vertical line to separate the reference image from the current one:
+\code
+    vpDisplay::display(Idisp);
+    vpDisplay::displayLine(Idisp, vpImagePoint(0, I.getWidth()), vpImagePoint(I.getHeight(), I.getWidth()), vpColor::white, 2);
+\endcode
+
+Keypoint matches between the reference image and the current image \c I are detected using:
+\code
+    int nbMatch = surf.matchPoint(I);
+\endcode
+
+Then we parse all the matches to retrieve the coordinates of the points in the reference image (in \c iPref variable) and in the current image (in \c iPcur variable):
+\code
+    vpImagePoint iPref, iPcur;
+    for (int i = 0; i < nbMatch; i++)
+    {
+      surf.getMatchedPoints(i, iPref, iPcur);
+\endcode
+
+Next we draw green lines between the matched points:
+\code
+      vpDisplay::displayLine(Idisp, iPref, iPcur + vpImagePoint(0, I.getWidth()), vpColor::green);
+\endcode
+
+At the end of the iteration, we flush all the previous display to the render window:
+\code
+    vpDisplay::flush(Idisp);
+\endcode
+
+You can now follow \ref tutorial-homography to see how to exploit couple of matched points in order to estimate an homography that allows to track the position of an object.
+
+*/
diff --git a/doc/tutorial-simu-robot-pioneer.doc b/doc/tutorial-simu-robot-pioneer.doc
index 2d08a051..2ffcdec8 100644
--- a/doc/tutorial-simu-robot-pioneer.doc
+++ b/doc/tutorial-simu-robot-pioneer.doc
@@ -233,4 +233,5 @@ The following control law is used:
   \end{array}\right]
  = -0.2 \left( {\bf L_{s} {^c}V_e {^e}J_e}\right)^{+} ({\bf s} - {\bf s}^*) \f]
 
+You are now ready to see the next \ref tutorial-boost-vs. 
 */
diff --git a/doc/tutorial-trace.doc b/doc/tutorial-trace.doc
new file mode 100644
index 00000000..0717f7fc
--- /dev/null
+++ b/doc/tutorial-trace.doc
@@ -0,0 +1,116 @@
+/**
+
+\page tutorial-trace Tutorial: Debug and trace printings 
+\tableofcontents
+
+
+\section intro Introduction
+
+ViSP allows to introduce trace and debug printings that may help debugging. To this end ViSP provides C or C++ macros that allows to print messages to the standard output std::cout or to std::cerr.
+
+~~~
+|----------|-------|-------------------------------------|---------------------------------------|
+| output   | type  | std::cout                           | std::cerr                             |
+|----------|-------|-------------------------------------|---------------------------------------|
+| C-like   | trace | vpTRACE, vpTRACE(level)             | vpERROR_TRACE, vpERROR_TRACE(level)   |
+|          | trace | vpIN_FCT, vpOUT_FCT                 |                                       |
+|          | debug | vpDEBUG_TRACE, vpDEBUG_TRACE(level) | vpDERROR_TRACE, vpDERROR_TRACE(level) |
+|----------|-------|-------------------------------------|---------------------------------------|
+| C++-like | trace | vpCTRACE                            | vpCERROR                              |
+|          | debug | vpCDEBUG(level)                     |                                       |
+|----------|-------|-------------------------------------|---------------------------------------|
+~~~
+
+\subsection trace Macros for trace
+
+Macro for tracing vpTRACE(), vpTRACE(level), vpERROR_TRACE(), vpERROR_TRACE(level), 
+vpIN_FCT() and vpOUT_FCT() 
+work like printf with carrier return at the end of the string, while 
+vpCTRACE() and vpCERROR() work like the C++ output streams std::cout 
+and std::cerr. All these macro print messages only if VP_TRACE macro is defined.
+
+\subsection debug Macros for debug
+
+Macros for debug vpDEBUG_TRACE(level) and vpDERROR_TRACE(level)
+work like printf while vpCDEBUG(level) works like the C++ output stream std::cout. 
+These macro print messages only if VP_DEBUG macro is defined and 
+if the debug \e level is greater than the one defined in VP_DEBUG_MODE 
+macro. Moreover vpDEBUG_ENABLE(level) can be used to check if a given debug level is active; vpDEBUG_ENABLE(level) is
+equal to 1 if the debug \e level is greater than the debug mode
+VP_DEBUG_MODE, 0 else.
+
+\section visp Debug and trace usage in ViSP library
+
+In ViSP, before an exception is thrown, trace macro are widely used to inform the user that an error occur. This is redundant, since the same trace message in generally associated to the exception that is thrown. Since ViSP 2.9.0, during CMake configuration it is possible to disable debug and trace printings by turning \c ACTIVATE_DEBUG_TRACE cmake variable to \c OFF.
+
+- Using cmake command just run: 
+\code 
+%cmake -DACTIVATE_DEBUG_TRACE=OFF <path to ViSP source code>
+\endcode 
+
+- or using ccmake GUI as shown in the next snapshot:
+
+\image html img-cmake-debug-trace.jpg
+
+\note When \c ACTIVATE_DEBUG_TRACE is turned to \c ON (this is the default behavior in ViSP), we simply define VP_TRACE and VP_DEBUG macro using the compiler -D option.
+ 
+\section example Debug and trace usage in your own project
+
+If you develop a project that uses ViSP library as a 3rd party, there are different ways to benefit from debug and trace macro described previously.
+
+- If ViSP was build with debug and trace enabled using \c cmake \c ACTIVATE_DEBUG_TRACE=ON, debug and trace are also enabled in your development.
+- If debug and trace were disabled in ViSP (\c ACTIVATE_DEBUG_TRACE=OFF), you can enable debug and trace in your own development either by defining \c VP_DEBUG and/or \c VP_TRACE macro in your code using
+\code 
+#define VP_TRACE
+#define VP_DEBUG
+
+#include <visp/vpDebug.h>
+\endcode 
+either by modifying your \c CMakeLists.txt file by adding an option as in ViSP:
+\code 
+option(ACTIVATE_DEBUG_TRACE "Enable debug and trace printings" ON)
+
+if(ACTIVATE_DEBUG_TRACE)
+  add_definitions("-DVP_DEBUG -DVP_TRACE")
+endif()
+\endcode 
+
+
+The following example also available in tutorial-trace.cpp shows how to use the previous macro.
+
+\includelineno tutorial-trace.cpp
+
+When ViSP library was built without debug and trace the previous example produces the output:
+\code 
+%./tutorial-trace
+Debug level 1 active: 0
+Debug level 2 active: 0
+Debug level 3 active: 0
+\endcode 
+
+When ViSP is rather build with debug and trace the previous example produces the output:
+\code 
+%./tutorial-trace
+(L0) begin /tmp/tutorial-trace.cpp: main(#9) : main()
+Debug level 1 active: 1
+Debug level 2 active: 1
+Debug level 3 active: 0
+(L0) /tmp/tutorial-trace.cpp: main(#17) : C-like trace
+(L1) /tmp/tutorial-trace.cpp: main(#18) : C-like trace level 1
+(L0) !!	/tmp/tutorial-trace.cpp: main(#20) : C-like error trace
+(L1) !!	/tmp/tutorial-trace.cpp: main(#21) : C-like error trace level 1
+(L0) /tmp/tutorial-trace.cpp: main(#24) : C-like debug trace
+(L0) !!	/tmp/tutorial-trace.cpp: main(#25) : C-like error trace
+(L2) /tmp/tutorial-trace.cpp: main(#27) : C-like debug trace level 2
+(L2) !!	/tmp/tutorial-trace.cpp: main(#28) : C-like error trace level 2
+(L0) /tmp/tutorial-trace.cpp: main(#31) : C++-like trace
+(L0) !!	/tmp/tutorial-trace.cpp: main(#32) : C++-like error trace
+(L2) /tmp/tutorial-trace.cpp: main(#35) : C++-like debug trace level 2
+(L0) end /tmp/tutorial-trace.cpp: main(#37) : main()
+\endcode 
+
+In the previous printings:
+- the number after "L" indicates the debug or trace level; example (L2) is for level 2.
+- the number after "#" indicates the line of the code that produce the printing; example main(#37) means in function main() at line 37.
+- the "!!" indicate that the printing is on std::cerr. Others are on std::cout.
+*/
diff --git a/doc/tutorial-tracking-mb.doc b/doc/tutorial-tracking-mb.doc
index 351cda16..974a6c86 100644
--- a/doc/tutorial-tracking-mb.doc
+++ b/doc/tutorial-tracking-mb.doc
@@ -82,6 +82,13 @@ The content of the xml file is the following:
     <px>839.21470</px> 
     <py>839.44555</py> 
   </camera>
+  <face>
+    <angle_appear>70</angle_appear> 
+    <angle_disappear>80</angle_disappear> 
+    <near_clipping>0.1</near_clipping>
+    <far_clipping>100</far_clipping>
+    <fov_clipping>1</fov_clipping>
+  </face>
 </conf>
 \endcode
 
@@ -99,40 +106,44 @@ The content of the xml file is the following:
   tracker.setMovingEdge(me);
   cam.initPersProjWithoutDistortion(839, 839, 325, 243);
   tracker.setCameraParameters(cam);
+  tracker.setAngleAppear( vpMath::rad(70) );
+  tracker.setAngleDisappear( vpMath::rad(80) );
+  tracker.setNearClippingDistance(0.1);
+  tracker.setFarClippingDistance(100.0);
+  tracker.setClipping(tracker.getClipping() | vpMbtPolygon::FOV_CLIPPING);
 \endcode
 
-The display in the image window of additional drawings in overlay such as the moving edges positions, is then enabled by:
+An important setting concerns the visibility test that is used to determine if a face is visible. Note that moving-edges are tracked only on visible faces. Two different visibility tests are implemented; with or without Ogre ray tracing. The default test is the one without Ogre. The function vpMbEdgeTracker::setOgreVisibilityTest() allow to select which test is to use. 
+
+Let us now highlight how the visibility test works. As illustrated in the following figure, the angle \f$ \alpha \f$ between the normal of the face and the line going from the camera to the center of gravity of the face is used to determine if the face is visible. If we consider two parameters; the angle to determine if a face is appearing \f$ \alpha_{appear} \f$, and the angle to determine if the face is disappearing \f$ \alpha_{disappear} \f$, a face will be considered as visible if  \f$  \alpha \leq \alpha_{disappear} \f$. We consider also that a new face is appearing if \f$  \alpha \geq \alpha_{appear} \f$. These two parameters can be set either in the xml file:
 \code
-  tracker.setDisplayFeatures(true);
+<conf>
+  ...
+  <face>
+    <angle_appear>70</angle_appear> 
+    <angle_disappear>80</angle_disappear> 
+  </face>
 \endcode
-
-An important setting concerns the visibility test that is used to determine if a face is visible. Note that moving-edges are tracked only on visible faces. Two different visibility tests are implemented; with or without Ogre ray tracing. With the next line, we disable Ogre visibility test.
-
+or in the code:
 \code
-  tracker.setOgreVisibilityTest(false);
+  tracker.setAngleAppear( vpMath::rad(70) );
+  tracker.setAngleDisappear( vpMath::rad(80) );
 \endcode
 
-As illustrated in the following figure, the angle \f$ \alpha \f$ between the normal of the face and the line going from the camera to the center of gravity of the face is then used to determine if the face is visible.
+\note When these two angle parameters are not set, their default values set to 89 degrees are used.
 
 \image html img-tracker-mb-visibility.jpg Principle of the visibility test used to determine if a face is visible.
 
-- When Ogre visibility test is disabled, the algorithm that computes the normal of the face is very simple. It makes the assumption that faces are convex and oriented counter clockwise. Faces are considered as visible if  \f$ \alpha < 90\f$ degrees. When only moving-edges are used (nor keypoints) and when the object to track is simple like a single box, we suggest as here to disable Ogre visibility test. It will help the tracker to detect as soon as possible new faces when only one face is currently tracked.  
-- When Ogre visibility test is enabled, the algorithm used to determine the visibility of a face is the same than previously except that once visible faces are detected thanks to their normal, we add an other test to reject faces that are partially occluded by an other one. This additional test is performed using Ogre ray-tracing capability. Note also that two additional parameters need to be introduced; the angle to determine if a face is appearing, and the angle to determine if the face is disappearing.
+- When Ogre visibility test is disabled (we recall that this is the default behavior), the algorithm that computes the normal of the face is very simple. It makes the assumption that faces are convex and oriented counter clockwise. Here the face is considered as appearing if \f$ \alpha < 70\f$ degrees, and disappearing if \f$ \alpha > 80\f$ degrees. When only moving-edges are used (nor keypoints) and when the object to track is simple like a single box, we suggest as here to disable Ogre visibility test.
 \code
-  tracker.setOgreVisibilityTest(true);
-  tracker.setAngleAppear(70);
-  tracker.setAngleDisappear(80);
+  tracker.setOgreVisibilityTest(false); // Default behavior
 \endcode
-It is also possible to introduce these two parameters in the xml file. It should be modified by adding the following lines:
+
+- When Ogre visibility test is enabled, the algorithm used to determine the visibility of a face is the same than previously except that once visible faces are detected thanks to their normal, we add an other test to reject faces that are partially occluded by an other one. This additional test is performed using Ogre ray-tracing capability. 
 \code
-<conf>
-  ...
-  <face>
-    <angle_appear>70</angle_appear> 
-    <angle_disappear>80</angle_disappear> 
-  </face>
+  tracker.setOgreVisibilityTest(true);
 \endcode
-Here the face is considered as appearing if \f$ \alpha < 70\f$ degrees, and disappearing if \f$ \alpha > 80\f$ degrees.
+
 
 Additionally to the visibility test described above, it is also possible to use clipping. Firstly, the algorithm removes the faces that are not visibles, according to the visibility test used, then it will also remove the faces or parts of the faces that are out of the clipping planes. As illustrated in the following figure, different clipping planes can be enabled.  
 
@@ -165,14 +176,14 @@ For the Near and Far clipping it is quite different. Indeed, thoses planes requi
   tracker.setClipping(vpMbtPolygon::NEAR_CLIPPING | vpMbtPolygon::FAR_CLIPPING);
 \endcode
 
-Or specify the distances in meters, which will automatically activate the clipping for thoses planes:
+or the user can specify the distances in meters, which will automatically activate the clipping for thoses planes:
 
 \code
   tracker.setNearClippingDistance(0.1);
   tracker.setFarClippingDistance(100.0);
 \endcode
 
-It is also possible to enable them in the xml file. It should be modified by adding the following lines:
+It is also possible to enable them in the xml file. This is done with the following lines:
 
 \code
 <conf>
@@ -187,19 +198,32 @@ It is also possible to enable them in the xml file. It should be modified by add
 
 Here for simplicity, the user just has the possibility to either activate all the FOV clipping planes or none of them (fov_clipping requires a boolean).
 
-Now we are ready to load the cad model of the object in cao format with:
+\note When clipping parameters are not set in the xml file, nor in the code, clipping is not used. Usually clipping is not helpfull when the oject to track is simple.  
+
+Now we are ready to load the cad model of the object. ViSP supports cad model in cao format or in vrml format. The cao format is a particular format only supported by ViSP. It doesn't require an additional 3rd party rather then vrml format that require Coin 3rd party. We load the cad model in cao format with:
 \code
   tracker.loadModel("teabox.cao");
 \endcode
-The file \c teabox.cao describes first the vertexes of the box, then the edges that corresponds to the faces. A more complete description of this file is provided in \ref tracking_mb_cao (\ref tracking_mb_cao_face). The next figure gives the index of the vertices that are defined in \c teabox.cao.
+The file \c teabox.cao describes first the vertices of the box, then the edges that corresponds to the faces. A more complete description of this file is provided in \ref tracking_mb_cao (\ref tracking_mb_cao_face). The next figure gives the index of the vertices that are defined in \c teabox.cao.
+
+To load the cad model in vrml the user has to replace the previous line by the following:
+\code
+  tracker.loadModel("teabox.wrl");
+\endcode
+As for the cao format, \c teabox.wrl describes first the vertices of the box, then the edges that corresponds to the faces. A more complete description of this file is provided in \ref tracking_mb_wrl.
 
 \image html img-teabox-cao.jpg Index of the vertices used to model the tea box in cao format.
 
-Four vertices with their 3D coordinates are then used to initialize the tracker:
+Once the model of the object to track is loaded, with the next line the display in the image window of additional drawings in overlay such as the moving edges positions, is then enabled by:
+\code
+  tracker.setDisplayFeatures(true);
+\endcode
+
+Now we have to initialize the tracker. With the next line we choose to use a user interaction. As explained later, the user has to match in the image four vertices with their 3D coordinates. Matched 2D and 3D coordinates are then used to compute an initial pose used to initialize the tracker:
 \code
   tracker.initClick(I, "teabox.init");
 \endcode
-The content of \c teabox.init file is provided hereafter:
+The content of \c teabox.init file that defines 3D coordinates of some points of the model used during user intialization is provided hereafter:
 
 \includelineno teabox.init
 
@@ -267,10 +291,6 @@ The \c teabox.xml file used here contains the following:
 \code
 <?xml version="1.0"?>
 <conf>
-  <face>
-    <angle_appear>70</angle_appear> 
-    <angle_disappear>80</angle_disappear> 
-  </face>
   <klt>
     <mask_border>5</mask_border> 
     <max_features>300</max_features> 
@@ -287,6 +307,13 @@ The \c teabox.xml file used here contains the following:
     <px>839.21470</px> 
     <py>839.44555</py> 
   </camera>
+  <face>
+    <angle_appear>70</angle_appear> 
+    <angle_disappear>80</angle_disappear> 
+    <near_clipping>0.1</near_clipping>
+    <far_clipping>100</far_clipping>
+    <fov_clipping>1</fov_clipping>
+  </face>
 </conf>
 \endcode
 - The second one consists in initializing the parameters directly in the source code: 
@@ -311,7 +338,7 @@ Note also that in this example we model the tea box with triangles:
 \code
   tracker.loadModel("teabox-triangle.cao");
 \endcode
-The file \c teabox-triangle.cao describes first the vertexes of the box, then the triangular faces. A more complete description of this file is provided in \ref tracking_mb_cao (\ref tracking_mb_cao_triangle).
+The file \c teabox-triangle.cao describes first the vertices of the box, then the triangular faces. A more complete description of this file is provided in \ref tracking_mb_cao (\ref tracking_mb_cao_triangle).
 
 Note that this is the only tracker for which lines of the model are not necessary edges of the object.
 
@@ -351,10 +378,6 @@ We provide just hereafter the content of the \c teabox.xml file:
     <step>4</step>
     <nb_sample>250</nb_sample>
   </sample>
-  <face>
-    <angle_appear>70</angle_appear> 
-    <angle_disappear>80</angle_disappear> 
-  </face>
   <klt>
     <mask_border>5</mask_border> 
     <max_features>300</max_features> 
@@ -371,6 +394,13 @@ We provide just hereafter the content of the \c teabox.xml file:
     <px>839.21470</px> 
     <py>839.44555</py> 
   </camera>
+  <face>
+    <angle_appear>70</angle_appear> 
+    <angle_disappear>80</angle_disappear> 
+    <near_clipping>0.1</near_clipping>
+    <far_clipping>100</far_clipping>
+    <fov_clipping>1</fov_clipping>
+  </face>
 </conf>
 \endcode
 
@@ -398,7 +428,7 @@ We make the choice to describe the faces of the box from the 3D points that corr
 - line 11: Number of single lines of the model. Sometimes, it could be useful to track a single line that doesn't lead to a face. 
 - line 12: Deprecated parameter that should always be set to 0. 
 - line 13: The number of faces defined by a set of points. Here our tea box has 6 faces. Thus, next 6 lines describe each face from the 3D points defined previously line 3 to 10.
-- line 14: First face defined by 4 points, respectively vertices 0,1,2,3. The orientation of the face is counter clockwise by going from vertex 0 to vertex 1, than 2 and 3. This fixes the orientation of the normal of the face going outside the object.
+- line 14: First face defined by 4 points, respectively vertices 0,1,2,3. The orientation of the face is counter clockwise by going from vertex 0 to vertex 1, then 2 and 3. This fixes the orientation of the normal of the face going outside the object.
 - line 15: Second face also defined by 4 points, respectively vertices 1,6,5,2 to have a counter clockwise orientation.
 - line 16 to 19: The four other faces of the box.
 - line 20: Number of cylinders describing the model. Since we model a simple box, the number of cylinders is 0.
@@ -416,5 +446,26 @@ This file describes the model of the tea box corresponding to the next image:
 Until line 12, the content of this file is similar to the one described in 
 \ref tracking_mb_cao_face. Line 13 we specify that the model contains 12 faces. Each face is then described as a triangle.
 
+\section tracking_mb_wrl CAD model in vrml format
+
+ViSP support vrml format only if Coin 3rd party is installed. This format allows to describe the CAD model of an object using a text file with extension \c .wrl.
+
+\subsection tracking_mb_vrml_face teabox.wrl example
+
+The content of the teabox.wrl file used in the \ref tracking_mb_edges is given hereafter. This content is to make into relation with teabox.cao described in \ref tracking_mb_cao_face.
+
+\includelineno teabox.wrl
+
+This file describes the model of the tea box corresponding to the next image:
+
+\image html img-teabox-cao.jpg Index of the vertices used to model the tea box in vrml format.
+
+We provide now a line by line description of the file where the faces of the box are defined from the vertices:
+- line 1 to 10: Header of the \c .wrl file.
+- line 13 to 20: 3D coordinates of the 8 tea box vertices.
+- line 34 to 29: Each line describe a face. In this example, a face is defined by 4 vertices. For example, the first face join vertices 0,1,2,3. The orientation of the face is counter clockwise by going from vertex 0 to vertex 1, then 2 and 3. This fixes the orientation of the normal of the face going outside the object.
+
+You are now ready to see the next \ref tutorial-tracking-tt.
+
 
 */
diff --git a/doc/tutorial-tracking-me.doc b/doc/tutorial-tracking-me.doc
index cde4ac39..33c35d03 100644
--- a/doc/tutorial-tracking-me.doc
+++ b/doc/tutorial-tracking-me.doc
@@ -72,7 +72,7 @@ We then open the connection with the grabber and acquire an image in \c I.
 
 To be able to display image \c I and the tracking results in overlay in a window, we create a display instance.
 \code
-#if defined UNIX
+#if defined(VISP_HAVE_X11)
   vpDisplayX d(I, 0, 0, "Camera view");
 #else
   vpDisplayGDI d(I, 0, 0, "Camera view");
diff --git a/doc/tutorial-tracking-tt.doc b/doc/tutorial-tracking-tt.doc
new file mode 100644
index 00000000..c48d6ba5
--- /dev/null
+++ b/doc/tutorial-tracking-tt.doc
@@ -0,0 +1,223 @@
+/**
+
+\page tutorial-tracking-tt Tutorial: Template tracking
+\tableofcontents
+
+With ViSP it is possible to track a template using image registration algorithms. Contrary to the common approaches based on visual features, this method allows to be much more robust to scene variations.
+
+In the following sections, we consider the tracking of a pattern. To simplify the source code, the tracking is performed on a single image. The extension to a sequence of images or to images acquired from a camera is easy. To this end see \ref tutorial-grabber. 
+
+\section tracking_tt Track the painting
+
+The following example that comes from tutorial-template-tracker.cpp allows to track a template using vpTemplateTrackerSSDInverseCompositional class.
+Let us denote that "SSDInverseCompositional" refers to the similarity function used for the image registration. In ViSP, we have implemented, for now, two different similarity functions: the "Sum of Square Differences" (vpTemplateTrackerSSD classes \cite Baker04a) and the "Zero-mean Normalized Cross Correlation" (vpTemplateTrackerZNCC classes \cite Irani98a). Both methods can be used in different ways: Inverse Compositional, Forward Compositional, Forward Additional, or ESM.
+
+\include tutorial-template-tracker.cpp
+
+The video below shows the result of the template tracking. 
+
+\htmlonly
+<iframe width="420" height="315" src="http://www.youtube.com/embed/hniUcaUSVBM" frameborder="0" allowfullscreen></iframe>
+\endhtmlonly
+
+Hereafter is the description of the new lines introduced in this example.
+
+\code
+#include <visp/vpTemplateTrackerSSDInverseCompositional.h>
+#include <visp/vpTemplateTrackerWarpHomography.h>
+\endcode
+
+Here we include the header of the vpTemplateTrackerSSDInverseCompositional class that allows to track the template. Actually, the tracker estimates the displacement of the template in the current image according to its initial pose. The computed displacement can be represented by multiple transformations, also called warps (vpTemplateTrackerWarp classes). In this example, we include the header vpTemplateTrackerWarpHomography class to define the possible transformation of the template as an homography.
+
+\code
+vpTemplateTrackerWarpHomography warp;
+vpTemplateTrackerSSDInverseCompositional tracker(&warp);
+\endcode
+
+Once the tracker is created with the desired warp, parameters can be tuned to be more consistent with the expected behavior.
+
+\code
+tracker.setSampling(2,2);     // Will consider only one pixel from two along rows and columns 
+                              // to create the reference template
+tracker.setLambda(0.001);     // Gain used in the optimization loop
+tracker.setIterationMax(200); // Maximum number of iterations for the optimization loop
+tracker.setPyramidal(2, 1);   // First and last level of the pyramid
+\endcode
+
+The last step of the initialization is to select the template that will be tracked during the sequence. 
+
+\code
+tracker.initClick(I);
+\endcode
+
+The vpTemplateTracker classes proposed in ViSP offer you the possibility to defined your template as multiple planar triangles. When calling vpTemplateTracker::initClick(I), you will have to specify the triangles that define the template.
+
+\image html initClickTemplateTracker.png Initialization of the template without Delaunay triangulation.
+
+Let us denote that those triangles don't have to be spatially tied up. However, if you want to track a simple image as in this example, you should initialize the template as on the figure above. Left clicks on zero, one and two points create the green triangle. Left clicks on three, four and right click on five point create the red triangle and ends the initialization.
+If ViSP is build with OpenCV, we also provide an initialization with automatic triangulation using Delaunay. To use it, you just have to call vpTemplateTracker::initClick(I, true). Then by left clicking on zero, one, two, four and right clicking on five it initializes the tracker as on the image above.    
+
+Next, in the infinite while loop, after displaying the next image, we track the object on a new image I.
+
+\code
+tracker.track(I);
+\endcode
+
+If you need to get the parameters of the current transformation of the template, it can be done by calling:
+
+\code
+vpColVector p = tracker.getp();
+\endcode
+
+For further information about the warping parameters, see the following section of \ref warp_tt. Next line is used to display the template using red lines and according to the computed transformation from the last call to track.
+
+\code
+tracker.display(I, vpColor::red);
+\endcode
+
+\subsection warp_tt Warping classes
+
+In the example presented above, we focused on the vpTemplateTrackerWarpHomography warping class which is the most generic transformation available in ViSP for the template trackers. However, if you know that the template you want to track is constrained, other warps might be more suitable.
+
+\b vpTemplateTrackerWarpTranslation
+
+\f$w({\bf x},{\bf p}) = {\bf x} + {\bf t}\f$ with the following estimated parameters \f$ {\bf p} = (t_x, t_y)\f$
+
+This class is the most simple transformation available for the template trackers. It only considers translation on two-axis (x-axis and y-axis).
+
+\b vpTemplateTrackerWarpSRT
+
+\f$w({\bf x},{\bf p}) = (1+s){\bf Rx} + {\bf t}\f$ with \f${\bf p} = (s, \theta, t_x, t_y)\f$
+
+The SRT warp considers a scale factor, a rotation on z-axis and a 2D translation as in vpTemplateTrackerWarpTranslation.
+
+\b vpTemplateTrackerWarpAffine
+
+
+\f$ w({\bf x},{\bf p}) = {\bf Ax} + {\bf t}\f$ with \f${\bf A} = \left( \begin{array}{cc}
+  1+a_0 & a_2 \\
+  a_1 & 1+a_3
+  \end{array} \right)\f$, \f${\bf t} = \left( \begin{array}{c}
+  t_x \\
+  t_y
+  \end{array} \right)\f$ and the estimated parameters \f${\bf p} = (a_0 ... a_3, t_x, t_y)\f$
+
+The template transformation can also be defined as an affine transformation. This warping function preserves points, straight lines, and planes.
+
+\b vpTemplateTrackerWarpHomography
+
+\f$w({\bf x},{\bf p}) = {\bf Hx}\f$ with \f$ {\bf H}=\left( \begin{array}{ccc}
+  1 + p_0 & p_3 & p_6 \\
+  p_1 & 1+p_4 & p_7 \\
+  p_2 & p_5 & 1.0 
+  \end{array} \right) \f$ and the estimated parameters \f${\bf p} = (p_0 ... p_7)\f$
+
+As remind, the vpTemplateTrackerWarpHomography estimates the eight parameters of the homography matrix \f$ {\bf H}\f$. 
+
+\b vpTemplateTrackerWarpHomographySL3
+
+\f$w({\bf x},{\bf p}) = {\bf Hx}\f$ with \f${\bf p} = (p_0 ... p_7)\f$
+
+The vpTemplateTrackerWarpHomographySL3 warp works exactly the same as the vpTemplateTrackerWarpHomography warp. The only difference is that here, the parameters of the homography are estimated in the SL3 reference frame.
+
+\subsection tune_tt How to tune the tracker
+
+When you want to obtain a perfect pose estimation, it is often time-consuming. However, by tuning the tracker, you can find a good compromise between speed and efficiency. Basically, what will make the difference is the size of the reference template. The more pixels it contains, the more time-consuming it will be. Fortunately, the solutions to avoid this problem are multiple. First of all lets come back on the vpTemplateTracker::setSampling() function.
+
+\code
+tracker.setSampling(4,4);     // Will consider only one pixel from four along rows and columns
+                              // to create the reference template.
+\endcode
+
+In the example above, we decided to consider only one pixel from 16 (4 by 4) to create the reference template. Obviously, by increasing those values it will consider much less pixels, which unfortunately decrease the efficiency, but the tracking phase will be much faster. 
+
+The tracking phase relies on an iterative algorithm minimizing a cost function. What does it mean? It means this algorithm has, at some point, to stop! Once again, you have the possibility to reduce the number of iterations of the algorithm by taking the risk to fall in a local minimum. 
+
+\code
+tracker.setIterationMax(50);  // Maximum number of iterations for the optimization loop.
+\endcode
+
+If this is still not enough for you, let's remember that all of our trackers can be used in a pyramidal way. By reducing the number of levels considered by the algorithm, you will consider, once again, much less pixels and be faster. 
+
+\code
+tracker.setPyramidal(3, 2);   // First and last level of the pyramid
+\endcode
+Note here that when vpTemplateTracker::setPyramidal() function is not used, the pyramidal approach to speed up the algorithm is not used.
+
+Let us denote that if you're using vpTemplateTrackerSSDInverseCompositional or vpTemplateTrackerZNCCInverseCompositional, you also have another interesting option to speed up your tracking phase.
+
+\code
+tracker.setUseTemplateSelect(true);
+\endcode
+
+This function will force the tracker to only consider, in the reference template, the pixels that have an high gradient value. This is another solution to limit the number of considered pixels.
+
+As well as vpTemplateTrackerSSDInverseCompositional::setUseTemplateSelect() or vpTemplateTrackerZNCCInverseCompositional::setUseTemplateSelect(), another function, only available in vpTemplateTrackerSSDInverseCompositional and vpTemplateTrackerZNCCInverseCompositional is:
+
+\code
+tracker.setThresholdRMS(1e-6);
+\endcode
+
+By increasing this root mean square threshold value, the algorithm will reduce its number of iterations which should also speed up the tracking phase. This function should be used wisely with the vpTemplateTracker::setIterationMax() function.
+
+\subsection points_tt How to get the points of the template
+
+The previous code provided in tutorial-template-tracker.cpp can be modified to get the coordinates of the corners of the triangles that define the zone to track. To this end, as shown in the next lines, before the while loop we first define a reference zone and the corresponding warped zone. Then in the loop, we update the warped zone using the parameters of the warping model that is estimated by the tracker. From the warped zone, we extract all the triangles, and then for each triangles, we get the corners coordinates. 
+
+\code
+  // Instantiate and get the reference zone
+  vpTemplateTrackerZone zone_ref = tracker.getZoneRef();
+  // Instantiate a warped zone
+  vpTemplateTrackerZone zone_warped;
+
+  while(!g.end()){
+    g.acquire(I);
+    vpDisplay::display(I);
+    tracker.track(I);
+
+    tracker.display(I, vpColor::red);
+
+    // Get the estimated parameters
+    vpColVector p = tracker.getp();
+
+    // Update the warped zone given the tracker estimated parameters
+    warp.warpZone(zone_ref, p, zone_warped);
+
+    // Parse all the triangles that describe the zone
+    for (int i=0; i < zone_warped.getNbTriangle(); i++) {
+      vpTemplateTrackerTriangle triangle;
+      // Get a triangle 
+      zone_warped.getTriangle(i, triangle);
+      std::vector<vpImagePoint> corners;
+      // Get the 3 triangle corners
+      triangle.getCorners( corners );
+
+      // From here, each corner triangle is available in 
+      // corners[0], corners[1] and corners[2]
+
+      // Display a green cross over each corner
+      for(unsigned int j=0; j<corners.size(); j++)
+        vpDisplay::displayCross(I, corners[j], 15, vpColor::green, 2);
+    }
+    vpDisplay::displayRectangle(I, zone_warped.getBoundingBox(), vpColor::orange);
+\endcode
+
+With the last line, we also sho how to get and display an orange rectangle that corresponds to the bounding box of all the triangles that define the zone.
+
+The resulting drawings introduced previously are shown in the next image. Here we initialize the tracker with 2 triangles that are not connex.
+
+\image html img-template-tracker.jpg 
+
+
+\section tracking_tt_example More examples
+
+The templateTracker.cpp source code provided in the example/tracking folder allows to test all the template tracker classes that derive from vpTemplateTracker as well as all the warping classes that derive from vpTemplateTrackerWarp.
+
+Once build, in a terminal just run:
+
+\code
+./templateTracker -h
+\endcode
+
+to see which are the command lines options.
+*/
diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt
index e75ea1a1..f8bda594 100644
--- a/example/CMakeLists.txt
+++ b/example/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -64,7 +64,6 @@ SET (SRC_SUBDIRS
   servo-afma4
   servo-afma6
   servo-biclops
-  servo-cycab
   servo-pioneer
   servo-ptu46
   servo-viper650
@@ -72,7 +71,7 @@ SET (SRC_SUBDIRS
   tools
   tracking
   video
-  wireframe-simulator  
+  wireframe-simulator
 )
 
 # Build process propagation in the sub directories
diff --git a/example/calibration/CMakeLists.txt b/example/calibration/CMakeLists.txt
index b634146a..95ba217d 100644
--- a/example/calibration/CMakeLists.txt
+++ b/example/calibration/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4277 2013-06-25 13:09:01Z fspindle $
+# $Id: CMakeLists.txt 4598 2014-01-20 17:07:30Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -65,3 +65,25 @@ ENDFOREACH(source)
 # of acquired images
 ADD_TEST(calibrateTsai calibrateTsai)
 
+# copy the data
+get_target_property(target_location camera_calibration LOCATION)
+get_filename_component(target_location "${target_location}" PATH)
+list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/default-chessboard.cfg" )
+list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/default-circles.cfg" )
+list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/chessboard-01.png" )
+list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/chessboard-02.png" )
+list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/chessboard-03.png" )
+list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/chessboard-04.png" )
+list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/chessboard-05.png" )
+list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/circles-01.png" )
+list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/circles-02.png" )
+list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/circles-03.png" )
+list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/circles-04.png" )
+list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/circles-05.png" )
+foreach(data ${data2copy})
+  add_custom_command(
+    TARGET camera_calibration
+    POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E copy "${data}" "${target_location}"
+  )
+endforeach()
diff --git a/example/calibration/calibrateTsai.cpp b/example/calibration/calibrateTsai.cpp
index 9d053053..77b299d2 100644
--- a/example/calibration/calibrateTsai.cpp
+++ b/example/calibration/calibrateTsai.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: calibrateTsai.cpp 4273 2013-06-25 12:33:27Z fspindle $
+ * $Id: calibrateTsai.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,85 +58,86 @@
 
 int main()
 {
-  // We want to calibrate the hand to eye extrinsic camera parameters from 6 couple of poses: cMo and wMe
-  const int N = 6;
-  // Input: six couple of poses used as input in the calibration proces
-  std::vector<vpHomogeneousMatrix> cMo(N) ; // eye (camera) to object transformation. The object frame is attached to the calibrartion grid
-  std::vector<vpHomogeneousMatrix>  wMe(N) ; // world to hand (end-effector) transformation
-  // Output: Result of the calibration
-  vpHomogeneousMatrix  eMc; // hand (end-effector) to eye (camera) transformation
+  try {
+    // We want to calibrate the hand to eye extrinsic camera parameters from 6 couple of poses: cMo and wMe
+    const unsigned int N = 6;
+    // Input: six couple of poses used as input in the calibration proces
+    std::vector<vpHomogeneousMatrix> cMo(N) ; // eye (camera) to object transformation. The object frame is attached to the calibrartion grid
+    std::vector<vpHomogeneousMatrix>  wMe(N) ; // world to hand (end-effector) transformation
+    // Output: Result of the calibration
+    vpHomogeneousMatrix  eMc; // hand (end-effector) to eye (camera) transformation
 
-  // Initialize an eMc transformation used to produce the simulated input transformations cMo and wMe
-  vpTranslationVector etc(0.1, 0.2, 0.3); 
-  vpThetaUVector erc;
-  erc[0] = vpMath::rad(10); // 10 deg
-  erc[1] = vpMath::rad(-10); // -10 deg
-  erc[2] = vpMath::rad(25); // 25 deg
+    // Initialize an eMc transformation used to produce the simulated input transformations cMo and wMe
+    vpTranslationVector etc(0.1, 0.2, 0.3);
+    vpThetaUVector erc;
+    erc[0] = vpMath::rad(10); // 10 deg
+    erc[1] = vpMath::rad(-10); // -10 deg
+    erc[2] = vpMath::rad(25); // 25 deg
 
-  eMc.buildFrom(etc, erc);
-  std::cout << "Simulated hand to eye transformation: eMc " << std::endl ;
-  std::cout << eMc << std::endl ;
-  std::cout << "Theta U rotation: " << vpMath::deg(erc[0]) << " " << vpMath::deg(erc[1]) << " " << vpMath::deg(erc[2]) << std::endl;
+    eMc.buildFrom(etc, erc);
+    std::cout << "Simulated hand to eye transformation: eMc " << std::endl ;
+    std::cout << eMc << std::endl ;
+    std::cout << "Theta U rotation: " << vpMath::deg(erc[0]) << " " << vpMath::deg(erc[1]) << " " << vpMath::deg(erc[2]) << std::endl;
 
-  vpColVector v_c(6) ; // camera velocity used to produce 6 simulated poses
-  for (int i=0 ; i < N ; i++)
-  {
-    v_c = 0 ;
-    if (i==0) {
-      // Initialize first poses 
-      cMo[0].buildFrom(0, 0, 0.5, 0, 0, 0); // z=0.5 m
-      wMe[0].buildFrom(0, 0, 0, 0, 0, 0); // Id
-    }
-    else if (i==1)
-      v_c[3] = M_PI/8 ;
-    else if (i==2)
-      v_c[4] = M_PI/8 ;
-    else if (i==3)
-      v_c[5] = M_PI/10 ;
-    else if (i==4)
-      v_c[0] = 0.5 ;
-    else if (i==5)
-      v_c[1] = 0.8 ;
+    vpColVector v_c(6) ; // camera velocity used to produce 6 simulated poses
+    for (unsigned int i=0 ; i < N ; i++)
+    {
+      v_c = 0 ;
+      if (i==0) {
+        // Initialize first poses
+        cMo[0].buildFrom(0, 0, 0.5, 0, 0, 0); // z=0.5 m
+        wMe[0].buildFrom(0, 0, 0, 0, 0, 0); // Id
+      }
+      else if (i==1)
+        v_c[3] = M_PI/8 ;
+      else if (i==2)
+        v_c[4] = M_PI/8 ;
+      else if (i==3)
+        v_c[5] = M_PI/10 ;
+      else if (i==4)
+        v_c[0] = 0.5 ;
+      else if (i==5)
+        v_c[1] = 0.8 ;
 
-    vpHomogeneousMatrix cMc; // camera displacement
-    cMc = vpExponentialMap::direct(v_c) ; // Compute the camera displacement due to the velocity applied to the camera
-    if (i > 0) {
-      // From the camera displacement cMc, compute the wMe and cMo matrices
-      cMo[i] = cMc.inverse() * cMo[i-1];
-      wMe[i] = wMe[i-1] * eMc * cMc * eMc.inverse();
+      vpHomogeneousMatrix cMc; // camera displacement
+      cMc = vpExponentialMap::direct(v_c) ; // Compute the camera displacement due to the velocity applied to the camera
+      if (i > 0) {
+        // From the camera displacement cMc, compute the wMe and cMo matrices
+        cMo[i] = cMc.inverse() * cMo[i-1];
+        wMe[i] = wMe[i-1] * eMc * cMc * eMc.inverse();
+      }
     }
-  }
 
-  if (0) {
-    for (int i=0 ; i < N ; i++) {
-      vpHomogeneousMatrix wMo;
-      wMo = wMe[i] * eMc * cMo[i];
-      std::cout << std::endl << "wMo[" << i << "] " << std::endl ;
-      std::cout << wMo << std::endl ;
-      std::cout << "cMo[" << i << "] " << std::endl ;
-      std::cout << cMo[i] << std::endl ;
-      std::cout << "wMe[" << i << "] " << std::endl ;
-      std::cout << wMe[i] << std::endl ;
+    if (0) {
+      for (unsigned int i=0 ; i < N ; i++) {
+        vpHomogeneousMatrix wMo;
+        wMo = wMe[i] * eMc * cMo[i];
+        std::cout << std::endl << "wMo[" << i << "] " << std::endl ;
+        std::cout << wMo << std::endl ;
+        std::cout << "cMo[" << i << "] " << std::endl ;
+        std::cout << cMo[i] << std::endl ;
+        std::cout << "wMe[" << i << "] " << std::endl ;
+        std::cout << wMe[i] << std::endl ;
+      }
     }
-  }
 
-  // Reset the eMc matrix to eye
-  eMc.eye();
+    // Reset the eMc matrix to eye
+    eMc.eye();
 
-  // Compute the eMc hand to eye transformation from six poses
-  // - cMo[6]: camera to object poses as six homogeneous transformations
-  // - wMe[6]: world to hand (end-effector) poses as six homogeneous transformations
-  vpCalibration::calibrationTsai(cMo, wMe, eMc) ;
+    // Compute the eMc hand to eye transformation from six poses
+    // - cMo[6]: camera to object poses as six homogeneous transformations
+    // - wMe[6]: world to hand (end-effector) poses as six homogeneous transformations
+    vpCalibration::calibrationTsai(cMo, wMe, eMc) ;
 
-  std::cout << std::endl << "Output: hand to eye calibration result: eMc estimated " << std::endl ;
-  std::cout << eMc << std::endl ;
-  eMc.extract(erc);
-  std::cout << "Theta U rotation: " << vpMath::deg(erc[0]) << " " << vpMath::deg(erc[1]) << " " << vpMath::deg(erc[2]) << std::endl;
-  return 0 ;
+    std::cout << std::endl << "Output: hand to eye calibration result: eMc estimated " << std::endl ;
+    std::cout << eMc << std::endl ;
+    eMc.extract(erc);
+    std::cout << "Theta U rotation: " << vpMath::deg(erc[0]) << " " << vpMath::deg(erc[1]) << " " << vpMath::deg(erc[2]) << std::endl;
+    return 0 ;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1 ;
+  }
 }
 
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/example/calibration/camera_calibration.cpp b/example/calibration/camera_calibration.cpp
index 701a77e5..dff88631 100644
--- a/example/calibration/camera_calibration.cpp
+++ b/example/calibration/camera_calibration.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: camera_calibration.cpp 4286 2013-06-26 20:28:16Z fspindle $
+ * $Id: camera_calibration.cpp 4663 2014-02-14 10:32:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -61,10 +61,19 @@
 #include <visp/vpVideoReader.h>
 #include <visp/vpXmlParserCamera.h>
 
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
 class Settings
 {
 public:
-  Settings() : goodInput(false) {}
+  Settings() {
+    boardSize = cv::Size(0, 0);
+    calibrationPattern = UNDEFINED;
+    squareSize = 0.025f;
+    goodInput = false;
+    tempo = 1.f;
+
+  }
   enum Pattern { UNDEFINED, CHESSBOARD, CIRCLES_GRID};
 
   bool read(const std::string &filename)    // Read the parameters
@@ -77,12 +86,14 @@ public:
     vpIoTools::readConfigVar("Square_Size:", squareSize);
     vpIoTools::readConfigVar("Calibrate_Pattern:", patternToUse);
     vpIoTools::readConfigVar("Input:", input);
+    vpIoTools::readConfigVar("Tempo:", tempo);
 
     std::cout << "grid width : " << boardSize.width << std::endl;
     std::cout << "grid height: " << boardSize.height << std::endl;
     std::cout << "square size: " << squareSize << std::endl;
     std::cout << "pattern    : " << patternToUse << std::endl;
     std::cout << "input seq  : " << input << std::endl;
+    std::cout << "tempo      : " << tempo << std::endl;
     interprate();
     return true;
   }
@@ -102,8 +113,8 @@ public:
       goodInput = false;
 
     calibrationPattern = UNDEFINED;
-    if (!patternToUse.compare("CHESSBOARD")) calibrationPattern = CHESSBOARD;
-    if (!patternToUse.compare("CIRCLES_GRID")) calibrationPattern = CIRCLES_GRID;
+    if (patternToUse.compare("CHESSBOARD") == 0) calibrationPattern = CHESSBOARD;
+    else if (patternToUse.compare("CIRCLES_GRID") == 0) calibrationPattern = CIRCLES_GRID;
     if (calibrationPattern == UNDEFINED) {
       std::cerr << " Inexistent camera calibration mode: " << patternToUse << std::endl;
       goodInput = false;
@@ -115,172 +126,206 @@ public:
   Pattern calibrationPattern;// One of the Chessboard, circles, or asymmetric circle pattern
   float squareSize;          // The size of a square in your defined unit (point, millimeter,etc).
   std::string input;         // The input image sequence
+  float tempo;               // Tempo in seconds between two images. If > 10 wait a click to continue
   bool goodInput;
 
 private:
   std::string patternToUse;
 };
 
+#endif
 int main(int argc, const char ** argv)
 {
-  std::string outputFileName = "camera.xml";
-
-  Settings s;
-  const std::string inputSettingsFile = argc > 1 ? argv[1] : "default.cfg";
-  if (! s.read(inputSettingsFile) ) {
-    std::cout << "Could not open the configuration file: \"" << inputSettingsFile << "\"" << std::endl;
-    std::cout << std::endl << "Usage: " << argv[0] << " <configuration file>.cfg" << std::endl;
-    return -1;
-  }
+  try {
+    std::string outputFileName = "camera.xml";
+
+    Settings s;
+    const std::string inputSettingsFile = argc > 1 ? argv[1] : "default.cfg";
+    if (! s.read(inputSettingsFile) ) {
+      std::cout << "Could not open the configuration file: \"" << inputSettingsFile << "\"" << std::endl;
+      std::cout << std::endl << "Usage: " << argv[0] << " <configuration file>.cfg" << std::endl;
+      return -1;
+    }
 
-  if (! s.goodInput)
-  {
-    std::cout << "Invalid input detected. Application stopping. " << std::endl;
-    return -1;
-  }
+    if (! s.goodInput)
+    {
+      std::cout << "Invalid input detected. Application stopping. " << std::endl;
+      return -1;
+    }
 
-  // Start the calibration code
-  vpImage<unsigned char> I;
-  vpVideoReader reader;
-  reader.setFileName(s.input);
-  reader.open(I);
+    // Start the calibration code
+    vpImage<unsigned char> I;
+    vpVideoReader reader;
+    reader.setFileName(s.input);
+    reader.open(I);
 
 #ifdef VISP_HAVE_X11
-  vpDisplayX d(I);
+    vpDisplayX d(I);
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI d(I);
+    vpDisplayGDI d(I);
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK d(I);
+    vpDisplayGTK d(I);
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV d(I);
+    vpDisplayOpenCV d(I);
 #endif
 
-  std::vector<vpPoint> model;
-  std::vector<vpCalibration> calibrator;
-
-  for (int i=0; i< s.boardSize.height; i++) {
-    for (int j=0; j< s.boardSize.width; j++) {
-      vpPoint P;
-      P.setWorldCoordinates(j*s.squareSize, i*s.squareSize, 0);
-      model.push_back(P);
-    }
-  }
-
-  long frame_index;
-  while(! reader.end()) {
-    frame_index = reader.getFrameIndex();
-    reader.acquire(I);
-    vpDisplay::display(I);
+    std::vector<vpPoint> model;
+    std::vector<vpCalibration> calibrator;
 
-    cv::Mat cvI;
-    std::vector<cv::Point2f> pointBuf;
-    vpImageConvert::convert(I, cvI);
-
-    bool found;
-    switch( s.calibrationPattern ) // Find feature points on the input format
-    {
-    case Settings::CHESSBOARD:
-      found = findChessboardCorners( cvI, s.boardSize, pointBuf,
-                                     CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FAST_CHECK | CV_CALIB_CB_NORMALIZE_IMAGE);
-      break;
-    case Settings::CIRCLES_GRID:
-      found = findCirclesGrid( cvI, s.boardSize, pointBuf, cv::CALIB_CB_SYMMETRIC_GRID  );
-      break;
-    default:
-      break;
+    for (int i=0; i< s.boardSize.height; i++) {
+      for (int j=0; j< s.boardSize.width; j++) {
+        vpPoint P;
+        P.setWorldCoordinates(j*s.squareSize, i*s.squareSize, 0);
+        model.push_back(P);
+      }
     }
 
-    std::cout << "frame: " << frame_index << " status: " << found << std::endl;
-
-    if ( found)                // If done with success,
-    {
-      std::vector<vpImagePoint> data;
-
-      if (s.calibrationPattern == Settings::CHESSBOARD) {
-        // improve the found corners' coordinate accuracy for chessboard
-        cornerSubPix( cvI, pointBuf, cv::Size(11,11),
-                      cv::Size(-1,-1), cv::TermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 30, 0.1 ));
+    long frame_index;
+    while(! reader.end()) {
+      frame_index = reader.getFrameIndex();
+      reader.acquire(I);
+      vpDisplay::display(I);
+
+      cv::Mat cvI;
+      std::vector<cv::Point2f> pointBuf;
+      vpImageConvert::convert(I, cvI);
+
+      bool found = false;
+      switch( s.calibrationPattern ) // Find feature points on the input format
+      {
+      case Settings::CHESSBOARD:
+        //std::cout << "Use chessboard " << std::endl;
+        found = findChessboardCorners( cvI, s.boardSize, pointBuf,
+                                       CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FAST_CHECK | CV_CALIB_CB_NORMALIZE_IMAGE);
+        break;
+      case Settings::CIRCLES_GRID:
+        //std::cout << "Use circle grid " << std::endl;
+        found = findCirclesGrid( cvI, s.boardSize, pointBuf, cv::CALIB_CB_SYMMETRIC_GRID  );
+        break;
+      case Settings::UNDEFINED:
+      default:
+        std::cout << "Unkown calibration grid " << std::endl;
+        break;
       }
-      char title[20]; sprintf(title, "image %ld", frame_index);
-      vpDisplay::setTitle(I, title);
-      for (unsigned int i=0; i < pointBuf.size(); i++) {
-        vpImagePoint ip(pointBuf[i].y, pointBuf[i].x);
-        data.push_back(ip);
-        vpDisplay::displayCross(I, ip, 10, vpColor::red);
 
+      std::cout << "frame: " << frame_index << ", status: " << found;
+      if (!found)
+        std::cout << ", image rejected" << std::endl;
+      else
+        std::cout << ", image used as input data" << std::endl;
+
+      if ( found)                // If done with success,
+      {
+        std::vector<vpImagePoint> data;
+
+        if (s.calibrationPattern == Settings::CHESSBOARD) {
+          // improve the found corners' coordinate accuracy for chessboard
+          cornerSubPix( cvI, pointBuf, cv::Size(11,11),
+                        cv::Size(-1,-1), cv::TermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 30, 0.1 ));
+        }
+        char title[20]; sprintf(title, "image %ld", frame_index);
+        vpDisplay::setTitle(I, title);
+        for (unsigned int i=0; i < pointBuf.size(); i++) {
+          vpImagePoint ip(pointBuf[i].y, pointBuf[i].x);
+          data.push_back(ip);
+          vpDisplay::displayCross(I, ip, 10, vpColor::red);
+        }
+
+        // Calibration on a single mono image
+        vpCalibration calib;
+        calib.setLambda(0.5);
+        calib.clearPoint();
+        for (unsigned int i=0; i<model.size(); i++) {
+          calib.addPoint(model[i].get_oX(), model[i].get_oY(), model[i].get_oZ(), data[i]);
+        }
+        vpHomogeneousMatrix cMo;
+        vpCameraParameters cam;
+
+        // Set (u0,v0) in the middle of the image
+        double px = cam.get_px();
+        double py = cam.get_px();
+        double u0 = I.getWidth()/2;
+        double v0 = I.getHeight()/2;
+        cam.initPersProjWithoutDistortion(px, py, u0, v0);
+
+        if (calib.computeCalibration(vpCalibration::CALIB_VIRTUAL_VS, cMo, cam, false) == 0) {
+          //std::cout << "camera parameters: " << cam << std::endl;
+          calibrator.push_back(calib);
+        }
       }
 
-      // Calibration on a single mono image
-      vpCalibration calib;
-      calib.setLambda(0.5);
-      calib.clearPoint();
-      for (unsigned int i=0; i<model.size(); i++) {
-        calib.addPoint(model[i].get_oX(), model[i].get_oY(), model[i].get_oZ(), data[i]);
+      if (found)
+        vpDisplay::displayCharString(I, 15, 15, "Image processing succeed", vpColor::green);
+      else
+        vpDisplay::displayCharString(I, 15, 15, "Image processing fails", vpColor::green);
+
+      if (s.tempo > 10.f) {
+        vpDisplay::displayCharString(I, 35, 15, "A click to process the next image", vpColor::green);
+        vpDisplay::flush(I);
+        vpDisplay::getClick(I);
       }
-      vpHomogeneousMatrix cMo;
-      vpCameraParameters cam;
-
-      // Set (u0,v0) in the middle of the image
-      double px = cam.get_px();
-      double py = cam.get_px();
-      double u0 = I.getWidth()/2;
-      double v0 = I.getHeight()/2;
-      cam.initPersProjWithoutDistortion(px, py, u0, v0);
-
-      if (calib.computeCalibration(vpCalibration::CALIB_VIRTUAL_VS, cMo, cam, false) == 0) {
-        //std::cout << "camera parameters: " << cam << std::endl;
-        calibrator.push_back(calib);
+      else {
+        vpDisplay::flush(I);
+        vpTime::wait(s.tempo*1000);
       }
     }
 
-    vpDisplay::flush(I);
-    //vpDisplay::getClick(I);
-  }
-
-  // Now we consider the multi image calibration
-  // Calibrate by a non linear method based on virtual visual servoing
-  if (calibrator.empty()) {
-    std::cerr << "Unable to calibrate. Image processing failed !" << std::endl;
-    return 0;
-  }
+    // Now we consider the multi image calibration
+    // Calibrate by a non linear method based on virtual visual servoing
+    if (calibrator.empty()) {
+      std::cerr << "Unable to calibrate. Image processing failed !" << std::endl;
+      return 0;
+    }
 
-  std::cout << "\nCalibration without distorsion in progress on " << calibrator.size() << " images..." << std::endl;
-  vpCameraParameters cam;
-  double error;
-  if (vpCalibration::computeCalibrationMulti(vpCalibration::CALIB_VIRTUAL_VS, calibrator, cam, error, false) == 0) {
-    std::cout << cam << std::endl;
-    std::cout << "Global reprojection error: " << error << std::endl;
+    std::cout << "\nCalibration without distorsion in progress on " << calibrator.size() << " images..." << std::endl;
+    vpCameraParameters cam;
+    double error;
+    if (vpCalibration::computeCalibrationMulti(vpCalibration::CALIB_VIRTUAL_VS, calibrator, cam, error, false) == 0) {
+      std::cout << cam << std::endl;
+      std::cout << "Global reprojection error: " << error << std::endl;
 #ifdef VISP_HAVE_XML2
-    vpXmlParserCamera xml;
+      vpXmlParserCamera xml;
 
-    if(xml.save(cam, outputFileName.c_str(), "Camera", I.getWidth(), I.getHeight()) == vpXmlParserCamera::SEQUENCE_OK)
-      std::cout << "Camera parameters without distortion successfully saved in \"" << outputFileName << "\"" << std::endl;
-    else {
-      std::cout << "Failed to save the camera parameters without distortion in \"" << outputFileName << "\"" << std::endl;
-      std::cout << "A file with the same name exists. Remove it to be able to save the parameters..." << std::endl;
-    }
+      if(xml.save(cam, outputFileName.c_str(), "Camera", I.getWidth(), I.getHeight()) == vpXmlParserCamera::SEQUENCE_OK)
+        std::cout << "Camera parameters without distortion successfully saved in \"" << outputFileName << "\"" << std::endl;
+      else {
+        std::cout << "Failed to save the camera parameters without distortion in \"" << outputFileName << "\"" << std::endl;
+        std::cout << "A file with the same name exists. Remove it to be able to save the parameters..." << std::endl;
+      }
 #endif
-  }
-  else
-    std::cout << "Calibration without distortion failed." << std::endl;
+    }
+    else
+      std::cout << "Calibration without distortion failed." << std::endl;
+
+    std::cout << "\nCalibration with distorsion in progress on " << calibrator.size() << " images..." << std::endl;
+    if (vpCalibration::computeCalibrationMulti(vpCalibration::CALIB_VIRTUAL_VS_DIST, calibrator, cam, error, false) == 0) {
+      std::cout << cam << std::endl;
+      std::cout << "Global reprojection error: " << error << std::endl;
 
-  std::cout << "\nCalibration with distorsion in progress on " << calibrator.size() << " images..." << std::endl;
-  if (vpCalibration::computeCalibrationMulti(vpCalibration::CALIB_VIRTUAL_VS_DIST, calibrator, cam, error, false) == 0) {
-    std::cout << cam << std::endl;
-    std::cout << "Global reprojection error: " << error << std::endl;
 #ifdef VISP_HAVE_XML2
-    vpXmlParserCamera xml;
+      vpXmlParserCamera xml;
 
-    if(xml.save(cam, outputFileName.c_str(), "Camera", I.getWidth(), I.getHeight()) == vpXmlParserCamera::SEQUENCE_OK)
-      std::cout << "Camera parameters without distortion successfully saved in \"" << outputFileName << "\"" << std::endl;
-    else {
-      std::cout << "Failed to save the camera parameters without distortion in \"" << outputFileName << "\"" << std::endl;
-      std::cout << "A file with the same name exists. Remove it to be able to save the parameters..." << std::endl;
-    }
+      if(xml.save(cam, outputFileName.c_str(), "Camera", I.getWidth(), I.getHeight()) == vpXmlParserCamera::SEQUENCE_OK)
+        std::cout << "Camera parameters without distortion successfully saved in \"" << outputFileName << "\"" << std::endl;
+      else {
+        std::cout << "Failed to save the camera parameters without distortion in \"" << outputFileName << "\"" << std::endl;
+        std::cout << "A file with the same name exists. Remove it to be able to save the parameters..." << std::endl;
+      }
 #endif
+      std::cout << std::endl;
+      for (unsigned int i=0; i<calibrator.size(); i++)
+        std::cout << "Estimated pose on input data " << i << ": " << vpPoseVector(calibrator[i].cMo_dist).t() << std::endl;
+
+    }
+    else
+      std::cout << "Calibration with distortion failed." << std::endl;
+
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  else
-    std::cout << "Calibration with distortion failed." << std::endl;
 }
 #else
 int main()
diff --git a/example/calibration/chessboard-01.png b/example/calibration/chessboard-01.png
new file mode 100644
index 0000000000000000000000000000000000000000..4e92fd62c1a9c709e8da7d7e1c3c034a38db5612
GIT binary patch
literal 33459
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

literal 0
HcmV?d00001

diff --git a/example/calibration/chessboard-02.png b/example/calibration/chessboard-02.png
new file mode 100644
index 0000000000000000000000000000000000000000..ab56b8e5dfb10c5c23b00ef7c5fd346b6a2dd2af
GIT binary patch
literal 34739
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
X1q}ayl9*+t00000NkvXXu0mjf*@UGd

literal 0
HcmV?d00001

diff --git a/example/calibration/chessboard-03.png b/example/calibration/chessboard-03.png
new file mode 100644
index 0000000000000000000000000000000000000000..089bc3290052fb1ebcaa56b25e72d40459005278
GIT binary patch
literal 34043
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
DULJhS

literal 0
HcmV?d00001

diff --git a/example/calibration/chessboard-04.png b/example/calibration/chessboard-04.png
new file mode 100644
index 0000000000000000000000000000000000000000..048515907dfc902e693bd1fd8afe9b6887ba0846
GIT binary patch
literal 41700
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
Q;{X5v07*qoM6N<$g8Nd}<^TWy

literal 0
HcmV?d00001

diff --git a/example/calibration/chessboard-05.png b/example/calibration/chessboard-05.png
new file mode 100644
index 0000000000000000000000000000000000000000..efaa34ab37de9c43ea872990bed6b3cb533b06ff
GIT binary patch
literal 38847
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
X6Tvo0+=3-b00000NkvXXu0mjf4Hl^&

literal 0
HcmV?d00001

diff --git a/example/calibration/circles-01.png b/example/calibration/circles-01.png
new file mode 100644
index 0000000000000000000000000000000000000000..a0340a054a6b07f730037f2e36c1dcf2b042e7ab
GIT binary patch
literal 33023
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
XO!5>Hzm2`a00000NkvXXu0mjf!zEb^

literal 0
HcmV?d00001

diff --git a/example/calibration/circles-02.png b/example/calibration/circles-02.png
new file mode 100644
index 0000000000000000000000000000000000000000..44504e36409d294546396a8958e0bea55bd6f53e
GIT binary patch
literal 32432
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

literal 0
HcmV?d00001

diff --git a/example/calibration/circles-03.png b/example/calibration/circles-03.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a01fadaa4bb8c63f644c12b1b5a6fdf2c832c3b
GIT binary patch
literal 36957
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%0Dx3U*1U4b0f`H@ui
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
FV1mUY1M&a>

literal 0
HcmV?d00001

diff --git a/example/calibration/circles-04.png b/example/calibration/circles-04.png
new file mode 100644
index 0000000000000000000000000000000000000000..48d0993e0da9e9822635d6c30ecbf82be79accdb
GIT binary patch
literal 34362
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
KMNUMnLSTaMZD}L`

literal 0
HcmV?d00001

diff --git a/example/calibration/circles-05.png b/example/calibration/circles-05.png
new file mode 100644
index 0000000000000000000000000000000000000000..05fb8dcc42c36fa7cddf263b4263ca18cd6b3d75
GIT binary patch
literal 38327
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%0DfujgOV#B42AC
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
Xsr>!l%i>-A00000NkvXXu0mjfs-uV6

literal 0
HcmV?d00001

diff --git a/example/calibration/default-chessboard.cfg b/example/calibration/default-chessboard.cfg
index 4b040be2..9de6af08 100644
--- a/example/calibration/default-chessboard.cfg
+++ b/example/calibration/default-chessboard.cfg
@@ -11,3 +11,6 @@ Calibrate_Pattern: CHESSBOARD
 
 # The input image sequence to use for calibration
 Input: chessboard-%02d.png
+
+# Tempo in seconds between two images. If > 10 wait a click to continue
+Tempo: 1
diff --git a/example/calibration/default-circles.cfg b/example/calibration/default-circles.cfg
index 2c540bae..bb68c648 100644
--- a/example/calibration/default-circles.cfg
+++ b/example/calibration/default-circles.cfg
@@ -10,4 +10,7 @@ Square_Size: 0.034
 Calibrate_Pattern: CIRCLES_GRID
 
 # The input image sequence to use for calibration
-Input: circle-grid-%02d.pgm
+Input: circles-%02d.png
+
+# Tempo in seconds between two images. If > 10 wait a click to continue
+Tempo: 1
diff --git a/example/coin-simulator/CMakeLists.txt b/example/coin-simulator/CMakeLists.txt
index 3e619cc7..1b5d93d9 100644
--- a/example/coin-simulator/CMakeLists.txt
+++ b/example/coin-simulator/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/coin-simulator/simulateCircle2DCamVelocity.cpp b/example/coin-simulator/simulateCircle2DCamVelocity.cpp
index 728c2e94..f56f2038 100644
--- a/example/coin-simulator/simulateCircle2DCamVelocity.cpp
+++ b/example/coin-simulator/simulateCircle2DCamVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: simulateCircle2DCamVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: simulateCircle2DCamVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -189,8 +189,6 @@ void *mainLoop (void *_simu)
   unsigned int pos = 2 ;
   while (pos!=0)
   {
-
-
     vpServo task ;
     vpRobotCamera robot ;
 
@@ -321,77 +319,84 @@ void *mainLoop (void *_simu)
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string filename;
-  std::string username;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string filename;
+    std::string username;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_INPUT_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_INPUT_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL, ipath);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
+      exit(-1);
+    }
 
-  vpCameraParameters cam ;
-  vpHomogeneousMatrix fMo ; fMo[2][3] = 0 ;
+    vpCameraParameters cam ;
+    vpHomogeneousMatrix fMo ; fMo[2][3] = 0 ;
 
-  if (opt_display) {
+    if (opt_display) {
 
-    vpSimulator simu ;
-    simu.initInternalViewer(300, 300) ;
-    simu.initExternalViewer(300, 300) ;
+      vpSimulator simu ;
+      simu.initInternalViewer(300, 300) ;
+      simu.initExternalViewer(300, 300) ;
 
-    vpTime::wait(1000) ;
-    simu.setZoomFactor(1.0f) ;
-    simu.addAbsoluteFrame() ;
+      vpTime::wait(1000) ;
+      simu.setZoomFactor(1.0f) ;
+      simu.addAbsoluteFrame() ;
 
-    // Load the cad model
-    filename = ipath +  vpIoTools::path("/ViSP-images/iv/circle.iv");
-    simu.load(filename.c_str(),fMo) ;
+      // Load the cad model
+      filename = ipath +  vpIoTools::path("/ViSP-images/iv/circle.iv");
+      simu.load(filename.c_str(),fMo) ;
 
-    simu.setInternalCameraParameters(cam) ;
+      simu.setInternalCameraParameters(cam) ;
 
-    simu.initApplication(&mainLoop) ;
-    simu.mainLoop() ;
+      simu.initApplication(&mainLoop) ;
+      simu.mainLoop() ;
 
+    }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 
diff --git a/example/coin-simulator/simulateFourPoints2DCartesianCamVelocity.cpp b/example/coin-simulator/simulateFourPoints2DCartesianCamVelocity.cpp
index 729a1844..9ececb27 100644
--- a/example/coin-simulator/simulateFourPoints2DCartesianCamVelocity.cpp
+++ b/example/coin-simulator/simulateFourPoints2DCartesianCamVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: simulateFourPoints2DCartesianCamVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: simulateFourPoints2DCartesianCamVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -318,76 +318,83 @@ void *mainLoop (void *_simu)
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string filename;
-  std::string username;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string filename;
+    std::string username;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL, ipath);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
+      exit(-1);
+    }
 
-  vpCameraParameters cam ;
-  vpHomogeneousMatrix fMo ; fMo[2][3] = 0 ;
+    vpCameraParameters cam ;
+    vpHomogeneousMatrix fMo ; fMo[2][3] = 0 ;
 
 
-  if (opt_display) {
-    vpSimulator simu ;
-    simu.initInternalViewer(300, 300) ;
-    simu.initExternalViewer(300, 300) ;
+    if (opt_display) {
+      vpSimulator simu ;
+      simu.initInternalViewer(300, 300) ;
+      simu.initExternalViewer(300, 300) ;
 
-    vpTime::wait(1000) ;
-    simu.setZoomFactor(1.0f) ;
+      vpTime::wait(1000) ;
+      simu.setZoomFactor(1.0f) ;
 
-    // Load the cad model
-    filename = ipath +  vpIoTools::path("/ViSP-images/iv/4points.iv");
-    simu.load(filename.c_str()) ;
+      // Load the cad model
+      filename = ipath +  vpIoTools::path("/ViSP-images/iv/4points.iv");
+      simu.load(filename.c_str()) ;
 
-    simu.setInternalCameraParameters(cam) ;
-    simu.setExternalCameraParameters(cam) ;
-    simu.initApplication(&mainLoop) ;
+      simu.setInternalCameraParameters(cam) ;
+      simu.setExternalCameraParameters(cam) ;
+      simu.initApplication(&mainLoop) ;
 
-    simu.mainLoop() ;
+      simu.mainLoop() ;
+    }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 
diff --git a/example/coin-simulator/simulateFourPoints2DPolarCamVelocity.cpp b/example/coin-simulator/simulateFourPoints2DPolarCamVelocity.cpp
index b891e707..8a5033ac 100644
--- a/example/coin-simulator/simulateFourPoints2DPolarCamVelocity.cpp
+++ b/example/coin-simulator/simulateFourPoints2DPolarCamVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: simulateFourPoints2DPolarCamVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: simulateFourPoints2DPolarCamVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -345,76 +345,83 @@ void *mainLoop (void *_simu)
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string filename;
-  std::string username;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string filename;
+    std::string username;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL, ipath);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
+      exit(-1);
+    }
 
-  vpCameraParameters cam ;
-  vpHomogeneousMatrix fMo ; fMo[2][3] = 0 ;
+    vpCameraParameters cam ;
+    vpHomogeneousMatrix fMo ; fMo[2][3] = 0 ;
 
 
-  if (opt_display) {
-    vpSimulator simu ;
-    simu.initInternalViewer(300, 300) ;
-    simu.initExternalViewer(300, 300) ;
+    if (opt_display) {
+      vpSimulator simu ;
+      simu.initInternalViewer(300, 300) ;
+      simu.initExternalViewer(300, 300) ;
 
-    vpTime::wait(1000) ;
-    simu.setZoomFactor(1.0f) ;
+      vpTime::wait(1000) ;
+      simu.setZoomFactor(1.0f) ;
 
-    // Load the cad model
-    filename = ipath +  vpIoTools::path("/ViSP-images/iv/4points.iv");
-    simu.load(filename.c_str()) ;
+      // Load the cad model
+      filename = ipath +  vpIoTools::path("/ViSP-images/iv/4points.iv");
+      simu.load(filename.c_str()) ;
 
-    simu.setInternalCameraParameters(cam) ;
-    simu.setExternalCameraParameters(cam) ;
-    simu.initApplication(&mainLoop) ;
+      simu.setInternalCameraParameters(cam) ;
+      simu.setExternalCameraParameters(cam) ;
+      simu.initApplication(&mainLoop) ;
 
-    simu.mainLoop() ;
+      simu.mainLoop() ;
+    }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 
diff --git a/example/device/CMakeLists.txt b/example/device/CMakeLists.txt
index 7a3d65cd..f4114f85 100644
--- a/example/device/CMakeLists.txt
+++ b/example/device/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/device/display/CMakeLists.txt b/example/device/display/CMakeLists.txt
index 6c30fe5d..9c609bf1 100644
--- a/example/device/display/CMakeLists.txt
+++ b/example/device/display/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/device/display/displayD3D.cpp b/example/device/display/displayD3D.cpp
index 375340aa..a6e95777 100755
--- a/example/device/display/displayD3D.cpp
+++ b/example/device/display/displayD3D.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: displayD3D.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: displayD3D.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -180,255 +180,251 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string opt_opath;
-  std::string ipath;
-  std::string opath;
-  std::string filename;
-  std::string username;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Set the default output path
-  opt_opath = "C:\\temp";
-
-
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_opath,
-                 opt_click_allowed, username, opt_display) == false) {
-    exit (-1);
-  }
-
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  if (!opt_opath.empty())
-    opath = opt_opath;
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string opt_opath;
+    std::string ipath;
+    std::string opath;
+    std::string filename;
+    std::string username;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Set the default output path
+    opt_opath = "C:\\temp";
+
+
+    // Get the user login name
+    vpIoTools::getUserName(username);
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_opath,
+                   opt_click_allowed, username, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Append to the output path string, the login name of the user
-  std::string odirname = opath +  vpIoTools::path("/") + username;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+    if (!opt_opath.empty())
+      opath = opt_opath;
+
+    // Append to the output path string, the login name of the user
+    std::string odirname = opath +  vpIoTools::path("/") + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(odirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(odirname);
+      }
+      catch (...) {
+        usage(argv[0], NULL, ipath, opath, username);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << odirname << std::endl;
+        std::cerr << "  Check your -o " << opath << " option " << std::endl;
+        exit(-1);
+      }
+    }
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(odirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(odirname);
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-    catch (...) {
+
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
       usage(argv[0], NULL, ipath, opath, username);
       std::cerr << std::endl
                 << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << odirname << std::endl;
-      std::cerr << "  Check your -o " << opath << " option " << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
       exit(-1);
     }
-  }
 
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
-    }
-  }
+    // Create a grey level image
+    vpImage<unsigned char> I ;
+    vpImagePoint ip, ip1, ip2;
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opath, username);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Load a grey image from the disk
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+    vpImageIo::read(I, filename) ;
 
-  // Create a grey level image
-  vpImage<unsigned char> I ;
-  vpImagePoint ip, ip1, ip2;
+    // For this grey level image, open a D3D display at position 100,100
+    // in the screen, and with title "D3D display"
+    vpDisplayD3D display;
 
-  // Load a grey image from the disk
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-  try {
-    vpImageIo::read(I, filename) ;
-  }
-  catch (...) {
-    return -1;
-  }
+    if (opt_display) {
+      // We open a window using D3D.
+      // Its size is automatically defined by the image (I) size
+      display.init(I, 100, 100, "D3D display") ;
 
-  // For this grey level image, open a D3D display at position 100,100
-  // in the screen, and with title "D3D display"
-  vpDisplayD3D display;
+      // Display the image
+      vpDisplay::display(I) ;
 
-  if (opt_display) {
-    // We open a window using D3D.
-    // Its size is automatically defined by the image (I) size
-    display.init(I, 100, 100, "D3D display") ;
+      // Display in overlay a red cross at position 10,10 in the
+      // image. The lines are 10 pixels long
+      ip.set_i( 100 );
+      ip.set_j( 10 );
 
-    // Display the image
-    vpDisplay::display(I) ;
+      vpDisplay::displayCross(I, ip, 20, vpColor::red) ;
 
-    // Display in overlay a red cross at position 10,10 in the
-    // image. The lines are 10 pixels long
-    ip.set_i( 100 );
-    ip.set_j( 10 );
-    
-    vpDisplay::displayCross(I, ip, 20, vpColor::red) ;
+      // Display in overlay horizontal red lines
+      for (unsigned i=0 ; i < I.getHeight() ; i+=20) {
+        ip1.set_i( i );
+        ip1.set_j( 0 );
+        ip2.set_i( i );
+        ip2.set_j( I.getWidth() );
+        vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
+      }
 
-    // Display in overlay horizontal red lines
-    for (unsigned i=0 ; i < I.getHeight() ; i+=20) {
-      ip1.set_i( i );
-      ip1.set_j( 0 );
-      ip2.set_i( i );
-      ip2.set_j( I.getWidth() );
-      vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
-    }
+      // Display a ligne in the diagonal
+      ip1.set_i( -10 );
+      ip1.set_j( -10 );
+      ip2.set_i( I.getHeight() + 10 );
+      ip2.set_j( I.getWidth()  + 10 );
 
-    // Display a ligne in the diagonal
-    ip1.set_i( -10 );
-    ip1.set_j( -10 );
-    ip2.set_i( I.getHeight() + 10 );
-    ip2.set_j( I.getWidth()  + 10 );
-    
-    vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
+      vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
 
-    // Display in overlay vertical green dot lines
-    for (unsigned i=0 ; i < I.getWidth() ; i+=20) {
+      // Display in overlay vertical green dot lines
+      for (unsigned i=0 ; i < I.getWidth() ; i+=20) {
+        ip1.set_i( 0 );
+        ip1.set_j( i );
+        ip2.set_i( I.getWidth() );
+        ip2.set_j( i );
+        vpDisplay::displayDotLine(I, ip1, ip2, vpColor::green) ;
+      }
+
+      // Display a rectangle
+      ip.set_i( I.getHeight() - 45 );
+      ip.set_j( -10 );
+      vpDisplay::displayRectangle(I, ip, 60, 80, vpColor::orange) ;
+
+      // Display in overlay a blue arrow
       ip1.set_i( 0 );
-      ip1.set_j( i );
-      ip2.set_i( I.getWidth() );
-      ip2.set_j( i );
-      vpDisplay::displayDotLine(I, ip1, ip2, vpColor::green) ;
-    }
-
-    // Display a rectangle 
-    ip.set_i( I.getHeight() - 45 );
-    ip.set_j( -10 );
-    vpDisplay::displayRectangle(I, ip, 60, 80, vpColor::orange) ;
-    
-    // Display in overlay a blue arrow
-    ip1.set_i( 0 );
-    ip1.set_j( 0 );
-    ip2.set_i( 100 );
-    ip2.set_j( 100 );
-    vpDisplay::displayArrow(I, ip1, ip2, vpColor::blue) ;
-
-    // Display in overlay some circles. The position of the center is 200, 200
-    // the radius is increased by 20 pixels for each circle
-
-    for (unsigned int i=0 ; i < 100 ; i+=20) {
-      ip.set_i( 80 );
-      ip.set_j( 80 );
-      vpDisplay::displayCircle(I, ip, 20+i, vpColor::yellow) ;
+      ip1.set_j( 0 );
+      ip2.set_i( 100 );
+      ip2.set_j( 100 );
+      vpDisplay::displayArrow(I, ip1, ip2, vpColor::blue) ;
+
+      // Display in overlay some circles. The position of the center is 200, 200
+      // the radius is increased by 20 pixels for each circle
+
+      for (unsigned int i=0 ; i < 100 ; i+=20) {
+        ip.set_i( 80 );
+        ip.set_j( 80 );
+        vpDisplay::displayCircle(I, ip, 20+i, vpColor::yellow) ;
+      }
+
+      ip.set_i( -10 );
+      ip.set_j( 300 );
+      vpDisplay::displayCircle(I, ip, 100,vpColor::yellow) ;
+
+      // Display in overlay a yellow string
+      ip.set_i( 85 );
+      ip.set_j( 100 );
+      vpDisplay::displayCharString(I, ip,
+                                   "ViSP is a marvelous software",
+                                   vpColor::yellow) ;
+      //Flush the display
+      vpDisplay::flush(I);
+
+      // Create a color image
+      vpImage<vpRGBa> Ioverlay ;
+      // Updates the color image with the original loaded image and the overlay
+      vpDisplay::getImage(I, Ioverlay) ;
+
+      // Write the color image on the disk
+      filename = odirname +  vpIoTools::path("/Klimt_grey.overlay.ppm");
+      vpImageIo::write(Ioverlay, filename) ;
+
+      // If click is allowed, wait for a mouse click to close the display
+      if (opt_click_allowed) {
+        std::cout << "\nA click to close the windows..." << std::endl;
+        // Wait for a blocking mouse click
+        vpDisplay::getClick(I) ;
+      }
+
+      // Close the display
+      vpDisplay::close(I);
     }
 
-    ip.set_i( -10 );
-    ip.set_j( 300 );
-    vpDisplay::displayCircle(I, ip, 100,vpColor::yellow) ;
-    
-    // Display in overlay a yellow string
-    ip.set_i( 85 );
-    ip.set_j( 100 );
-    vpDisplay::displayCharString(I, ip,
-                                 "ViSP is a marvelous software",
-                                 vpColor::yellow) ;
-    //Flush the display    
-    vpDisplay::flush(I);
-
     // Create a color image
-    vpImage<vpRGBa> Ioverlay ;
-    // Updates the color image with the original loaded image and the overlay
-    vpDisplay::getImage(I, Ioverlay) ;
-
-    // Write the color image on the disk
-    filename = odirname +  vpIoTools::path("/Klimt_grey.overlay.ppm");
-    vpImageIo::write(Ioverlay, filename) ;
-
-    // If click is allowed, wait for a mouse click to close the display
-    if (opt_click_allowed) {
-      std::cout << "\nA click to close the windows..." << std::endl;
-      // Wait for a blocking mouse click
-      vpDisplay::getClick(I) ;
-    }
-
-    // Close the display
-    vpDisplay::close(I);
-  }
+    vpImage<vpRGBa> Irgba ;
 
-  // Create a color image
-  vpImage<vpRGBa> Irgba ;
-
-  // Load a grey image from the disk and convert it to a color image
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-  try {
+    // Load a grey image from the disk and convert it to a color image
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
     vpImageIo::read(Irgba, filename) ;
-  }
-  catch (...) {
-    return -1;
-  }
 
-  // For this color image, open a D3D display at position 100,100
-  // in the screen, and with title "D3D color display"
-  vpDisplayD3D displayRGBa;
-
-  if (opt_display) {
-    // We open a window using D3D.
-    // Its size is automatically defined by the image (Irgba) size
-    displayRGBa.init(Irgba, 100, 100, "D3D color display");
-
-    // Display the color image
-    vpDisplay::display(Irgba) ;
-    vpDisplay::flush(Irgba) ;
-
-    // If click is allowed, wait for a blocking mouse click to display a cross
-    // at the clicked pixel position
-    if (opt_click_allowed) {
-      std::cout << "\nA click to display a cross..." << std::endl;
-      // Blocking wait for a click. Get the position of the selected pixel
-      // (i correspond to the row and j to the column coordinates in the image)
-      vpDisplay::getClick(Irgba, ip);
-      // Display a red cross on the click pixel position
-      std::cout << "Cross position: " << ip << std::endl;
-      vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
-    }
-    else {
-      ip.set_i( 10 );
-      ip.set_j( 20 );
-      // Display a red cross at position i, j (i correspond to the row
-      // and j to the column coordinates in the image)
-      std::cout << "Cross position: " << ip << std::endl;
-      vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
-
-    }
-    // Flush the display. Sometimes the display content is
-    // bufferized. Force to display the content that has been bufferized.
-    vpDisplay::flush(Irgba);
-
-    // If click is allowed, wait for a blocking mouse click to exit.
-    if (opt_click_allowed) {
-      std::cout << "\nA click to exit the program..." << std::endl;
-      vpDisplay::getClick(Irgba) ;
-      std::cout << "Bye" << std::endl;
+    // For this color image, open a D3D display at position 100,100
+    // in the screen, and with title "D3D color display"
+    vpDisplayD3D displayRGBa;
+
+    if (opt_display) {
+      // We open a window using D3D.
+      // Its size is automatically defined by the image (Irgba) size
+      displayRGBa.init(Irgba, 100, 100, "D3D color display");
+
+      // Display the color image
+      vpDisplay::display(Irgba) ;
+      vpDisplay::flush(Irgba) ;
+
+      // If click is allowed, wait for a blocking mouse click to display a cross
+      // at the clicked pixel position
+      if (opt_click_allowed) {
+        std::cout << "\nA click to display a cross..." << std::endl;
+        // Blocking wait for a click. Get the position of the selected pixel
+        // (i correspond to the row and j to the column coordinates in the image)
+        vpDisplay::getClick(Irgba, ip);
+        // Display a red cross on the click pixel position
+        std::cout << "Cross position: " << ip << std::endl;
+        vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
+      }
+      else {
+        ip.set_i( 10 );
+        ip.set_j( 20 );
+        // Display a red cross at position i, j (i correspond to the row
+        // and j to the column coordinates in the image)
+        std::cout << "Cross position: " << ip << std::endl;
+        vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
+
+      }
+      // Flush the display. Sometimes the display content is
+      // bufferized. Force to display the content that has been bufferized.
+      vpDisplay::flush(Irgba);
+
+      // If click is allowed, wait for a blocking mouse click to exit.
+      if (opt_click_allowed) {
+        std::cout << "\nA click to exit the program..." << std::endl;
+        vpDisplay::getClick(Irgba) ;
+        std::cout << "Bye" << std::endl;
+      }
     }
   }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 #else
 int
diff --git a/example/device/display/displayGDI.cpp b/example/device/display/displayGDI.cpp
index 3176cf0a..aa104abc 100755
--- a/example/device/display/displayGDI.cpp
+++ b/example/device/display/displayGDI.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: displayGDI.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: displayGDI.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -50,7 +50,7 @@
 #include <visp/vpDebug.h>
 #include <visp/vpConfig.h>
 
-#if ( defined(WIN32) && defined(VISP_HAVE_GDI) )
+#if ( defined(_WIN32) && defined(VISP_HAVE_GDI) )
 
 #include <visp/vpDisplayGDI.h>
 
@@ -179,255 +179,250 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string opt_opath;
-  std::string ipath;
-  std::string opath;
-  std::string filename;
-  std::string username;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Set the default output path
-  opt_opath = "C:\\temp";
-
-
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_opath,
-                 opt_click_allowed, username, opt_display) == false) {
-    exit (-1);
-  }
-
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  if (!opt_opath.empty())
-    opath = opt_opath;
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string opt_opath;
+    std::string ipath;
+    std::string opath;
+    std::string filename;
+    std::string username;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Set the default output path
+    opt_opath = "C:\\temp";
+
+    // Get the user login name
+    vpIoTools::getUserName(username);
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_opath,
+                   opt_click_allowed, username, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Append to the output path string, the login name of the user
-  std::string odirname = opath +  vpIoTools::path("/") + username;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+    if (!opt_opath.empty())
+      opath = opt_opath;
+
+    // Append to the output path string, the login name of the user
+    std::string odirname = opath +  vpIoTools::path("/") + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(odirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(odirname);
+      }
+      catch (...) {
+        usage(argv[0], NULL, ipath, opath, username);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << odirname << std::endl;
+        std::cerr << "  Check your -o " << opath << " option " << std::endl;
+        exit(-1);
+      }
+    }
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(odirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(odirname);
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-    catch (...) {
+
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
       usage(argv[0], NULL, ipath, opath, username);
       std::cerr << std::endl
                 << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << odirname << std::endl;
-      std::cerr << "  Check your -o " << opath << " option " << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
       exit(-1);
     }
-  }
 
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
-    }
-  }
+    // Create a grey level image
+    vpImage<unsigned char> I ;
+    vpImagePoint ip, ip1, ip2;
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opath, username);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Load a grey image from the disk
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+    vpImageIo::read(I, filename) ;
 
-  // Create a grey level image
-  vpImage<unsigned char> I ;
-  vpImagePoint ip, ip1, ip2;
+    // For this grey level image, open a GDI display at position 100,100
+    // in the screen, and with title "GDI display"
+    vpDisplayGDI display;
 
-  // Load a grey image from the disk
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-  try {
-    vpImageIo::read(I, filename) ;
-  }
-  catch (...) {
-    return -1;
-  }
+    if (opt_display) {
+      // We open a window using GDI.
+      // Its size is automatically defined by the image (I) size
+      display.init(I, 100, 100, "GDI display") ;
 
-  // For this grey level image, open a GDI display at position 100,100
-  // in the screen, and with title "GDI display"
-  vpDisplayGDI display;
+      // Display the image
+      vpDisplay::display(I) ;
 
-  if (opt_display) {
-    // We open a window using GDI.
-    // Its size is automatically defined by the image (I) size
-    display.init(I, 100, 100, "GDI display") ;
+      // Display in overlay a red cross at position 10,10 in the
+      // image. The lines are 10 pixels long
+      ip.set_i( 100 );
+      ip.set_j( 10 );
 
-    // Display the image
-    vpDisplay::display(I) ;
+      vpDisplay::displayCross(I, ip, 20, vpColor::red) ;
 
-    // Display in overlay a red cross at position 10,10 in the
-    // image. The lines are 10 pixels long
-    ip.set_i( 100 );
-    ip.set_j( 10 );
-    
-    vpDisplay::displayCross(I, ip, 20, vpColor::red) ;
+      // Display in overlay horizontal red lines
+      for (unsigned i=0 ; i < I.getHeight() ; i+=20) {
+        ip1.set_i( i );
+        ip1.set_j( 0 );
+        ip2.set_i( i );
+        ip2.set_j( I.getWidth() );
+        vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
+      }
 
-    // Display in overlay horizontal red lines
-    for (unsigned i=0 ; i < I.getHeight() ; i+=20) {
-      ip1.set_i( i );
-      ip1.set_j( 0 );
-      ip2.set_i( i );
-      ip2.set_j( I.getWidth() );
-      vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
-    }
+      // Display a ligne in the diagonal
+      ip1.set_i( -10 );
+      ip1.set_j( -10 );
+      ip2.set_i( I.getHeight() + 10 );
+      ip2.set_j( I.getWidth()  + 10 );
 
-    // Display a ligne in the diagonal
-    ip1.set_i( -10 );
-    ip1.set_j( -10 );
-    ip2.set_i( I.getHeight() + 10 );
-    ip2.set_j( I.getWidth()  + 10 );
-    
-    vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
+      vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
 
-    // Display in overlay vertical green dot lines
-    for (unsigned i=0 ; i < I.getWidth() ; i+=20) {
+      // Display in overlay vertical green dot lines
+      for (unsigned i=0 ; i < I.getWidth() ; i+=20) {
+        ip1.set_i( 0 );
+        ip1.set_j( i );
+        ip2.set_i( I.getWidth() );
+        ip2.set_j( i );
+        vpDisplay::displayDotLine(I, ip1, ip2, vpColor::green) ;
+      }
+
+      // Display a rectangle
+      ip.set_i( I.getHeight() - 45 );
+      ip.set_j( -10 );
+      vpDisplay::displayRectangle(I, ip, 60, 80, vpColor::orange) ;
+
+      // Display in overlay a blue arrow
       ip1.set_i( 0 );
-      ip1.set_j( i );
-      ip2.set_i( I.getWidth() );
-      ip2.set_j( i );
-      vpDisplay::displayDotLine(I, ip1, ip2, vpColor::green) ;
-    }
-
-    // Display a rectangle 
-    ip.set_i( I.getHeight() - 45 );
-    ip.set_j( -10 );
-    vpDisplay::displayRectangle(I, ip, 60, 80, vpColor::orange) ;
-    
-    // Display in overlay a blue arrow
-    ip1.set_i( 0 );
-    ip1.set_j( 0 );
-    ip2.set_i( 100 );
-    ip2.set_j( 100 );
-    vpDisplay::displayArrow(I, ip1, ip2, vpColor::blue) ;
-
-    // Display in overlay some circles. The position of the center is 200, 200
-    // the radius is increased by 20 pixels for each circle
-
-    for (unsigned int i=0 ; i < 100 ; i+=20) {
-      ip.set_i( 80 );
-      ip.set_j( 80 );
-      vpDisplay::displayCircle(I, ip, 20+i, vpColor::yellow) ;
+      ip1.set_j( 0 );
+      ip2.set_i( 100 );
+      ip2.set_j( 100 );
+      vpDisplay::displayArrow(I, ip1, ip2, vpColor::blue) ;
+
+      // Display in overlay some circles. The position of the center is 200, 200
+      // the radius is increased by 20 pixels for each circle
+
+      for (unsigned int i=0 ; i < 100 ; i+=20) {
+        ip.set_i( 80 );
+        ip.set_j( 80 );
+        vpDisplay::displayCircle(I, ip, 20+i, vpColor::yellow) ;
+      }
+
+      ip.set_i( -10 );
+      ip.set_j( 300 );
+      vpDisplay::displayCircle(I, ip, 100,vpColor::yellow) ;
+
+      // Display in overlay a yellow string
+      ip.set_i( 85 );
+      ip.set_j( 100 );
+      vpDisplay::displayCharString(I, ip,
+                                   "ViSP is a marvelous software",
+                                   vpColor::yellow) ;
+      //Flush the display
+      vpDisplay::flush(I);
+
+      // Create a color image
+      vpImage<vpRGBa> Ioverlay ;
+      // Updates the color image with the original loaded image and the overlay
+      vpDisplay::getImage(I, Ioverlay) ;
+
+      // Write the color image on the disk
+      filename = odirname +  vpIoTools::path("/Klimt_grey.overlay.ppm");
+      vpImageIo::write(Ioverlay, filename) ;
+
+      // If click is allowed, wait for a mouse click to close the display
+      if (opt_click_allowed) {
+        std::cout << "\nA click to close the windows..." << std::endl;
+        // Wait for a blocking mouse click
+        vpDisplay::getClick(I) ;
+      }
+
+      // Close the display
+      vpDisplay::close(I);
     }
 
-    ip.set_i( -10 );
-    ip.set_j( 300 );
-    vpDisplay::displayCircle(I, ip, 100,vpColor::yellow) ;
-    
-    // Display in overlay a yellow string
-    ip.set_i( 85 );
-    ip.set_j( 100 );
-    vpDisplay::displayCharString(I, ip,
-                                 "ViSP is a marvelous software",
-                                 vpColor::yellow) ;
-    //Flush the display    
-    vpDisplay::flush(I);
-
     // Create a color image
-    vpImage<vpRGBa> Ioverlay ;
-    // Updates the color image with the original loaded image and the overlay
-    vpDisplay::getImage(I, Ioverlay) ;
-
-    // Write the color image on the disk
-    filename = odirname +  vpIoTools::path("/Klimt_grey.overlay.ppm");
-    vpImageIo::write(Ioverlay, filename) ;
-
-    // If click is allowed, wait for a mouse click to close the display
-    if (opt_click_allowed) {
-      std::cout << "\nA click to close the windows..." << std::endl;
-      // Wait for a blocking mouse click
-      vpDisplay::getClick(I) ;
-    }
-
-    // Close the display
-    vpDisplay::close(I);
-  }
+    vpImage<vpRGBa> Irgba ;
 
-  // Create a color image
-  vpImage<vpRGBa> Irgba ;
-
-  // Load a grey image from the disk and convert it to a color image
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-  try {
+    // Load a grey image from the disk and convert it to a color image
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
     vpImageIo::read(Irgba, filename) ;
-  }
-  catch (...) {
-    return -1;
-  }
 
-  // For this color image, open a GDI display at position 100,100
-  // in the screen, and with title "GDI color display"
-  vpDisplayGDI displayRGBa;
-
-  if (opt_display) {
-    // We open a window using GDI.
-    // Its size is automatically defined by the image (Irgba) size
-    displayRGBa.init(Irgba, 100, 100, "GDI color display");
-
-    // Display the color image
-    vpDisplay::display(Irgba) ;
-    vpDisplay::flush(Irgba) ;
-
-    // If click is allowed, wait for a blocking mouse click to display a cross
-    // at the clicked pixel position
-    if (opt_click_allowed) {
-      std::cout << "\nA click to display a cross..." << std::endl;
-      // Blocking wait for a click. Get the position of the selected pixel
-      // (i correspond to the row and j to the column coordinates in the image)
-      vpDisplay::getClick(Irgba, ip);
-      // Display a red cross on the click pixel position
-      std::cout << "Cross position: " << ip << std::endl;
-      vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
-    }
-    else {
-      ip.set_i( 10 );
-      ip.set_j( 20 );
-      // Display a red cross at position i, j (i correspond to the row
-      // and j to the column coordinates in the image)
-      std::cout << "Cross position: " << ip << std::endl;
-      vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
-
-    }
-    // Flush the display. Sometimes the display content is
-    // bufferized. Force to display the content that has been bufferized.
-    vpDisplay::flush(Irgba);
-
-    // If click is allowed, wait for a blocking mouse click to exit.
-    if (opt_click_allowed) {
-      std::cout << "\nA click to exit the program..." << std::endl;
-      vpDisplay::getClick(Irgba) ;
-      std::cout << "Bye" << std::endl;
+    // For this color image, open a GDI display at position 100,100
+    // in the screen, and with title "GDI color display"
+    vpDisplayGDI displayRGBa;
+
+    if (opt_display) {
+      // We open a window using GDI.
+      // Its size is automatically defined by the image (Irgba) size
+      displayRGBa.init(Irgba, 100, 100, "GDI color display");
+
+      // Display the color image
+      vpDisplay::display(Irgba) ;
+      vpDisplay::flush(Irgba) ;
+
+      // If click is allowed, wait for a blocking mouse click to display a cross
+      // at the clicked pixel position
+      if (opt_click_allowed) {
+        std::cout << "\nA click to display a cross..." << std::endl;
+        // Blocking wait for a click. Get the position of the selected pixel
+        // (i correspond to the row and j to the column coordinates in the image)
+        vpDisplay::getClick(Irgba, ip);
+        // Display a red cross on the click pixel position
+        std::cout << "Cross position: " << ip << std::endl;
+        vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
+      }
+      else {
+        ip.set_i( 10 );
+        ip.set_j( 20 );
+        // Display a red cross at position i, j (i correspond to the row
+        // and j to the column coordinates in the image)
+        std::cout << "Cross position: " << ip << std::endl;
+        vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
+
+      }
+      // Flush the display. Sometimes the display content is
+      // bufferized. Force to display the content that has been bufferized.
+      vpDisplay::flush(Irgba);
+
+      // If click is allowed, wait for a blocking mouse click to exit.
+      if (opt_click_allowed) {
+        std::cout << "\nA click to exit the program..." << std::endl;
+        vpDisplay::getClick(Irgba) ;
+        std::cout << "Bye" << std::endl;
+      }
     }
   }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 #else
 int
diff --git a/example/device/display/displayGTK.cpp b/example/device/display/displayGTK.cpp
index 83a13af1..db2208be 100644
--- a/example/device/display/displayGTK.cpp
+++ b/example/device/display/displayGTK.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: displayGTK.cpp 4294 2013-07-01 16:05:49Z fspindle $
+ * $Id: displayGTK.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -183,250 +183,252 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string opt_opath;
-  std::string ipath;
-  std::string opath;
-  std::string filename;
-  std::string username;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Set the default output path
-#ifdef UNIX
-  opt_opath = "/tmp";
-#elif WIN32
-  opt_opath = "C:\\temp";
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string opt_opath;
+    std::string ipath;
+    std::string opath;
+    std::string filename;
+    std::string username;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Set the default output path
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
+    opt_opath = "/tmp";
+#elif defined(_WIN32)
+    opt_opath = "C:\\temp";
 #endif
 
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_opath,
-                 opt_click_allowed, username, opt_display) == false) {
-    exit (-1);
-  }
+    // Get the user login name
+    vpIoTools::getUserName(username);
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  if (!opt_opath.empty())
-    opath = opt_opath;
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_opath,
+                   opt_click_allowed, username, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Append to the output path string, the login name of the user
-  std::string odirname = opath +  vpIoTools::path("/") + username;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+    if (!opt_opath.empty())
+      opath = opt_opath;
+
+    // Append to the output path string, the login name of the user
+    std::string odirname = opath +  vpIoTools::path("/") + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(odirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(odirname);
+      }
+      catch (...) {
+        usage(argv[0], NULL, ipath, opath, username);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << odirname << std::endl;
+        std::cerr << "  Check your -o " << opath << " option " << std::endl;
+        exit(-1);
+      }
+    }
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(odirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(odirname);
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-    catch (...) {
+
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
       usage(argv[0], NULL, ipath, opath, username);
       std::cerr << std::endl
                 << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << odirname << std::endl;
-      std::cerr << "  Check your -o " << opath << " option " << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
       exit(-1);
     }
-  }
 
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
-    }
-  }
+    // Create a grey level image
+    vpImage<unsigned char> I ;
+    vpImagePoint ip, ip1, ip2;
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opath, username);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Load a grey image from the disk
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.png");
+    vpImageIo::read(I, filename) ;
 
-  // Create a grey level image
-  vpImage<unsigned char> I ;
-  vpImagePoint ip, ip1, ip2;
+    // Create a display using GTK
+    vpDisplayGTK display;
 
-  // Load a grey image from the disk
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.png");
-  try {
-    vpImageIo::read(I, filename) ;
-  }
-  catch (...) {
-    return -1;
-  }
+    if (opt_display) {
+      // For this grey level image, open a GTK display at position 100,100
+      // in the screen, and with title "GTK display"
+      display.init(I, 100, 100, "GTK display") ;
 
-  // Create a display using GTK
-  vpDisplayGTK display;
+      // Display the image
+      vpDisplay::display(I) ;
 
-  if (opt_display) {
-    // For this grey level image, open a GTK display at position 100,100
-    // in the screen, and with title "GTK display"
-    display.init(I, 100, 100, "GTK display") ;
+      // Display in overlay a red cross at position 10,10 in the
+      // image. The lines are 10 pixels long
+      ip.set_i( 100 );
+      ip.set_j( 10 );
 
-    // Display the image
-    vpDisplay::display(I) ;
+      vpDisplay::displayCross(I, ip, 20, vpColor::red) ;
 
-    // Display in overlay a red cross at position 10,10 in the
-    // image. The lines are 10 pixels long
-    ip.set_i( 100 );
-    ip.set_j( 10 );
-    
-    vpDisplay::displayCross(I, ip, 20, vpColor::red) ;
+      // Display in overlay horizontal red lines
+      for (unsigned i=0 ; i < I.getHeight() ; i+=20) {
+        ip1.set_i( i );
+        ip1.set_j( 0 );
+        ip2.set_i( i );
+        ip2.set_j( I.getWidth() );
+        vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
+      }
 
-    // Display in overlay horizontal red lines
-    for (unsigned i=0 ; i < I.getHeight() ; i+=20) {
-      ip1.set_i( i );
-      ip1.set_j( 0 );
-      ip2.set_i( i );
-      ip2.set_j( I.getWidth() );
-      vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
-    }
+      // Display a ligne in the diagonal
+      ip1.set_i( -10 );
+      ip1.set_j( -10 );
+      ip2.set_i( I.getHeight() + 10 );
+      ip2.set_j( I.getWidth()  + 10 );
 
-    // Display a ligne in the diagonal
-    ip1.set_i( -10 );
-    ip1.set_j( -10 );
-    ip2.set_i( I.getHeight() + 10 );
-    ip2.set_j( I.getWidth()  + 10 );
-    
-    vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
+      vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
 
-    // Display in overlay vertical green dot lines
-    for (unsigned i=0 ; i < I.getWidth() ; i+=20) {
+      // Display in overlay vertical green dot lines
+      for (unsigned i=0 ; i < I.getWidth() ; i+=20) {
+        ip1.set_i( 0 );
+        ip1.set_j( i );
+        ip2.set_i( I.getWidth() );
+        ip2.set_j( i );
+        vpDisplay::displayDotLine(I, ip1, ip2, vpColor::green) ;
+      }
+
+      // Display a rectangle
+      ip.set_i( I.getHeight() - 45 );
+      ip.set_j( -10 );
+      vpDisplay::displayRectangle(I, ip, 60, 80, vpColor::orange) ;
+
+      // Display in overlay a blue arrow
       ip1.set_i( 0 );
-      ip1.set_j( i );
-      ip2.set_i( I.getWidth() );
-      ip2.set_j( i );
-      vpDisplay::displayDotLine(I, ip1, ip2, vpColor::green) ;
-    }
-
-    // Display a rectangle 
-    ip.set_i( I.getHeight() - 45 );
-    ip.set_j( -10 );
-    vpDisplay::displayRectangle(I, ip, 60, 80, vpColor::orange) ;
-    
-    // Display in overlay a blue arrow
-    ip1.set_i( 0 );
-    ip1.set_j( 0 );
-    ip2.set_i( 100 );
-    ip2.set_j( 100 );
-    vpDisplay::displayArrow(I, ip1, ip2, vpColor::blue) ;
-
-    // Display in overlay some circles. The position of the center is 200, 200
-    // the radius is increased by 20 pixels for each circle
-
-    for (unsigned int i=0 ; i < 100 ; i+=20) {
-      ip.set_i( 80 );
-      ip.set_j( 80 );
-      vpDisplay::displayCircle(I, ip, 20+i, vpColor::yellow) ;
+      ip1.set_j( 0 );
+      ip2.set_i( 100 );
+      ip2.set_j( 100 );
+      vpDisplay::displayArrow(I, ip1, ip2, vpColor::blue) ;
+
+      // Display in overlay some circles. The position of the center is 200, 200
+      // the radius is increased by 20 pixels for each circle
+
+      for (unsigned int i=0 ; i < 100 ; i+=20) {
+        ip.set_i( 80 );
+        ip.set_j( 80 );
+        vpDisplay::displayCircle(I, ip, 20+i, vpColor::yellow) ;
+      }
+
+      ip.set_i( -10 );
+      ip.set_j( 300 );
+      vpDisplay::displayCircle(I, ip, 100,vpColor::yellow) ;
+
+      // Display in overlay a yellow string
+      ip.set_i( 85 );
+      ip.set_j( 100 );
+      //vpDisplay::setFont(I, "-*-courier 10 pitch-medium-r-normal-*-16-*-*-*-*-*-*-*");
+      vpDisplay::displayCharString(I, ip,
+                                   "ViSP is a marvelous software",
+                                   vpColor::yellow) ;
+      //Flush the display
+      vpDisplay::flush(I);
+
+      // Create a color image
+      vpImage<vpRGBa> Ioverlay ;
+      // Updates the color image with the original loaded image and the overlay
+      vpDisplay::getImage(I, Ioverlay) ;
+
+      // Write the color image on the disk
+      filename = odirname +  vpIoTools::path("/Klimt_grey.overlay.ppm");
+      vpImageIo::write(Ioverlay, filename) ;
+
+      // If click is allowed, wait for a mouse click to close the display
+      if (opt_click_allowed) {
+        std::cout << "\nA click to close the windows..." << std::endl;
+        // Wait for a blocking mouse click
+        vpDisplay::getClick(I) ;
+      }
+
+      // Close the display
+      vpDisplay::close(I);
     }
 
-    ip.set_i( -10 );
-    ip.set_j( 300 );
-    vpDisplay::displayCircle(I, ip, 100,vpColor::yellow) ;
-    
-    // Display in overlay a yellow string
-    ip.set_i( 85 );
-    ip.set_j( 100 );
-    vpDisplay::displayCharString(I, ip,
-                                 "ViSP is a marvelous software",
-                                 vpColor::yellow) ;
-    //Flush the display    
-    vpDisplay::flush(I);
-
     // Create a color image
-    vpImage<vpRGBa> Ioverlay ;
-    // Updates the color image with the original loaded image and the overlay
-    vpDisplay::getImage(I, Ioverlay) ;
-
-    // Write the color image on the disk
-    filename = odirname +  vpIoTools::path("/Klimt_grey.overlay.ppm");
-    vpImageIo::write(Ioverlay, filename) ;
-
-    // If click is allowed, wait for a mouse click to close the display
-    if (opt_click_allowed) {
-      std::cout << "\nA click to close the windows..." << std::endl;
-      // Wait for a blocking mouse click
-      vpDisplay::getClick(I) ;
+    vpImage<vpRGBa> Irgba ;
+
+    // Load a grey image from the disk and convert it to a color image
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+    vpImageIo::read(Irgba, filename) ;
+
+    // Create a new GTK display
+    vpDisplayGTK displayRGBa;
+
+    if (opt_display) {
+      // For this color image, open a GTK display at position 100,100
+      // in the screen, and with title "GTK color display"
+      displayRGBa.init(Irgba, 100, 100, "GTK color display");
+
+      // Display the color image
+      vpDisplay::display(Irgba) ;
+      vpDisplay::flush(Irgba) ;
+
+      // If click is allowed, wait for a blocking mouse click to display a cross
+      // at the clicked pixel position
+      if (opt_click_allowed) {
+        std::cout << "\nA click to display a cross..." << std::endl;
+        // Blocking wait for a click. Get the position of the selected pixel
+        // (i correspond to the row and j to the column coordinates in the image)
+        vpDisplay::getClick(Irgba, ip);
+        // Display a red cross on the click pixel position
+        std::cout << "Cross position: " << ip << std::endl;
+        vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
+      }
+      else {
+        ip.set_i( 10 );
+        ip.set_j( 20 );
+        // Display a red cross at position i, j (i correspond to the row
+        // and j to the column coordinates in the image)
+        std::cout << "Cross position: " << ip << std::endl;
+        vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
+
+      }
+      // Flush the display. Sometimes the display content is
+      // bufferized. Force to display the content that has been bufferized.
+      vpDisplay::flush(Irgba);
+
+      // If click is allowed, wait for a blocking mouse click to exit.
+      if (opt_click_allowed) {
+        std::cout << "\nA click to exit the program..." << std::endl;
+        vpDisplay::getClick(Irgba) ;
+        std::cout << "Bye" << std::endl;
+      }
     }
-
-    // Close the display
-    vpDisplay::close(I);
   }
-
-  // Create a color image
-  vpImage<vpRGBa> Irgba ;
-
-  // Load a grey image from the disk and convert it to a color image
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-  vpImageIo::read(Irgba, filename) ;
-
-  // Create a new GTK display
-  vpDisplayGTK displayRGBa;
-
-  if (opt_display) {
-    // For this color image, open a GTK display at position 100,100
-    // in the screen, and with title "GTK color display"
-    displayRGBa.init(Irgba, 100, 100, "GTK color display");
-
-    // Display the color image
-    vpDisplay::display(Irgba) ;
-    vpDisplay::flush(Irgba) ;
-
-    // If click is allowed, wait for a blocking mouse click to display a cross
-    // at the clicked pixel position
-    if (opt_click_allowed) {
-      std::cout << "\nA click to display a cross..." << std::endl;
-      // Blocking wait for a click. Get the position of the selected pixel
-      // (i correspond to the row and j to the column coordinates in the image)
-      vpDisplay::getClick(Irgba, ip);
-      // Display a red cross on the click pixel position
-      std::cout << "Cross position: " << ip << std::endl;
-      vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
-    }
-    else {
-      ip.set_i( 10 );
-      ip.set_j( 20 );
-      // Display a red cross at position i, j (i correspond to the row
-      // and j to the column coordinates in the image)
-      std::cout << "Cross position: " << ip << std::endl;
-      vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
-
-    }
-    // Flush the display. Sometimes the display content is
-    // bufferized. Force to display the content that has been bufferized.
-    vpDisplay::flush(Irgba);
-
-    // If click is allowed, wait for a blocking mouse click to exit.
-    if (opt_click_allowed) {
-      std::cout << "\nA click to exit the program..." << std::endl;
-      vpDisplay::getClick(Irgba) ;
-      std::cout << "Bye" << std::endl;
-    }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
@@ -437,4 +439,3 @@ main()
 }
 
 #endif
-
diff --git a/example/device/display/displayOpenCV.cpp b/example/device/display/displayOpenCV.cpp
index 4512285a..fcc27e34 100644
--- a/example/device/display/displayOpenCV.cpp
+++ b/example/device/display/displayOpenCV.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: displayOpenCV.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: displayOpenCV.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -72,6 +72,10 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:o:p:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath,
+                bool &click_allowed, std::string user, bool &display);
+
 /*!
 
   Print the program options.
@@ -83,8 +87,7 @@
   \param user : Username.
 
  */
-void usage(const char *name, const char *badparam, std::string ipath,
-	   std::string opath, std::string user)
+void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user)
 {
   fprintf(stdout, "\n\
 Read an image on the disk, display it using OpenCV, display some\n\
@@ -150,23 +153,22 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv,
-                std::string &ipath, std::string &opath, bool &click_allowed,
-                std::string user, bool &display)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath,
+                bool &click_allowed, std::string user, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
-    case 'o': opath = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'o': opath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath, opath, user); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, opath, user); return false; break;
+      usage(argv[0], optarg_, ipath, opath, user); return false; break;
     }
   }
 
@@ -174,7 +176,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, opath, user);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -184,257 +186,253 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string opt_opath;
-  std::string ipath;
-  std::string opath;
-  std::string filename;
-  std::string username;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-  //  std::cout << "env_ipath: " << env_ipath << std::endl;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Set the default output path
-#ifdef UNIX
-  opt_opath = "/tmp";
-#elif WIN32
-  opt_opath = "C:\\temp";
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string opt_opath;
+    std::string ipath;
+    std::string opath;
+    std::string filename;
+    std::string username;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+    //  std::cout << "env_ipath: " << env_ipath << std::endl;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Set the default output path
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
+    opt_opath = "/tmp";
+#elif defined(_WIN32)
+    opt_opath = "C:\\temp";
 #endif
 
-  // Get the user login name
-  vpIoTools::getUserName(username);
+    // Get the user login name
+    vpIoTools::getUserName(username);
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_opath,
-                 opt_click_allowed, username, opt_display) == false) {
-    exit (-1);
-  }
-
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  if (!opt_opath.empty())
-    opath = opt_opath;
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_opath,
+                   opt_click_allowed, username, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Append to the output path string, the login name of the user
-  std::string odirname = opath +  vpIoTools::path("/") + username;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+    if (!opt_opath.empty())
+      opath = opt_opath;
+
+    // Append to the output path string, the login name of the user
+    std::string odirname = opath +  vpIoTools::path("/") + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(odirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(odirname);
+      }
+      catch (...) {
+        usage(argv[0], NULL, ipath, opath, username);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << odirname << std::endl;
+        std::cerr << "  Check your -o " << opath << " option " << std::endl;
+        exit(-1);
+      }
+    }
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(odirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(odirname);
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-    catch (...) {
+
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
       usage(argv[0], NULL, ipath, opath, username);
       std::cerr << std::endl
                 << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << odirname << std::endl;
-      std::cerr << "  Check your -o " << opath << " option " << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
       exit(-1);
     }
-  }
 
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
-    }
-  }
+    // Create a grey level image
+    vpImage<unsigned char> I ;
+    vpImagePoint ip, ip1, ip2;
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opath, username);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Load a grey image from the disk
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+    vpImageIo::read(I, filename) ;
 
-  // Create a grey level image
-  vpImage<unsigned char> I ;
-  vpImagePoint ip, ip1, ip2;
+    // Create a display using OpenCV
+    vpDisplayOpenCV display;
 
-  // Load a grey image from the disk
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-  try {
-    vpImageIo::read(I, filename) ;
-  }
-  catch (...) {
-    return -1;
-  }
+    if (opt_display) {
+      // For this grey level image, open a X11 display at position 100,100
+      // in the screen, and with title "X11 display"
+      display.init(I, 100, 100, "OpenCV display") ;
 
-  // Create a display using OpenCV
-  vpDisplayOpenCV display;
+      // Display the image
+      vpDisplay::display(I) ;
 
-  if (opt_display) {
-    // For this grey level image, open a X11 display at position 100,100
-    // in the screen, and with title "X11 display"
-    display.init(I, 100, 100, "OpenCV display") ;
+      // Display in overlay a red cross at position 10,10 in the
+      // image. The lines are 10 pixels long
+      ip.set_i( 100 );
+      ip.set_j( 10 );
 
-    // Display the image
-    vpDisplay::display(I) ;
+      vpDisplay::displayCross(I, ip, 20, vpColor::red) ;
 
-    // Display in overlay a red cross at position 10,10 in the
-    // image. The lines are 10 pixels long
-    ip.set_i( 100 );
-    ip.set_j( 10 );
-    
-    vpDisplay::displayCross(I, ip, 20, vpColor::red) ;
+      // Display in overlay horizontal red lines
+      for (unsigned i=0 ; i < I.getHeight() ; i+=20) {
+        ip1.set_i( i );
+        ip1.set_j( 0 );
+        ip2.set_i( i );
+        ip2.set_j( I.getWidth() );
+        vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
+      }
 
-    // Display in overlay horizontal red lines
-    for (unsigned i=0 ; i < I.getHeight() ; i+=20) {
-      ip1.set_i( i );
-      ip1.set_j( 0 );
-      ip2.set_i( i );
-      ip2.set_j( I.getWidth() );
-      vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
-    }
+      // Display a ligne in the diagonal
+      ip1.set_i( -10 );
+      ip1.set_j( -10 );
+      ip2.set_i( I.getHeight() + 10 );
+      ip2.set_j( I.getWidth()  + 10 );
 
-    // Display a ligne in the diagonal
-    ip1.set_i( -10 );
-    ip1.set_j( -10 );
-    ip2.set_i( I.getHeight() + 10 );
-    ip2.set_j( I.getWidth()  + 10 );
-    
-    vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
+      vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
 
-    // Display in overlay vertical green dot lines
-    for (unsigned i=0 ; i < I.getWidth() ; i+=20) {
+      // Display in overlay vertical green dot lines
+      for (unsigned i=0 ; i < I.getWidth() ; i+=20) {
+        ip1.set_i( 0 );
+        ip1.set_j( i );
+        ip2.set_i( I.getWidth() );
+        ip2.set_j( i );
+        vpDisplay::displayDotLine(I, ip1, ip2, vpColor::green) ;
+      }
+
+      // Display a rectangle
+      ip.set_i( I.getHeight() - 45 );
+      ip.set_j( -10 );
+      vpDisplay::displayRectangle(I, ip, 60, 80, vpColor::orange) ;
+
+      // Display in overlay a blue arrow
       ip1.set_i( 0 );
-      ip1.set_j( i );
-      ip2.set_i( I.getWidth() );
-      ip2.set_j( i );
-      vpDisplay::displayDotLine(I, ip1, ip2, vpColor::green) ;
-    }
-
-    // Display a rectangle 
-    ip.set_i( I.getHeight() - 45 );
-    ip.set_j( -10 );
-    vpDisplay::displayRectangle(I, ip, 60, 80, vpColor::orange) ;
-    
-    // Display in overlay a blue arrow
-    ip1.set_i( 0 );
-    ip1.set_j( 0 );
-    ip2.set_i( 100 );
-    ip2.set_j( 100 );
-    vpDisplay::displayArrow(I, ip1, ip2, vpColor::blue) ;
-
-    // Display in overlay some circles. The position of the center is 200, 200
-    // the radius is increased by 20 pixels for each circle
-
-    for (unsigned int i=0 ; i < 100 ; i+=20) {
-      ip.set_i( 80 );
-      ip.set_j( 80 );
-      vpDisplay::displayCircle(I, ip, 20+i, vpColor::yellow) ;
+      ip1.set_j( 0 );
+      ip2.set_i( 100 );
+      ip2.set_j( 100 );
+      vpDisplay::displayArrow(I, ip1, ip2, vpColor::blue) ;
+
+      // Display in overlay some circles. The position of the center is 200, 200
+      // the radius is increased by 20 pixels for each circle
+
+      for (unsigned int i=0 ; i < 100 ; i+=20) {
+        ip.set_i( 80 );
+        ip.set_j( 80 );
+        vpDisplay::displayCircle(I, ip, 20+i, vpColor::yellow) ;
+      }
+
+      ip.set_i( -10 );
+      ip.set_j( 300 );
+      vpDisplay::displayCircle(I, ip, 100,vpColor::yellow) ;
+
+      // Display in overlay a yellow string
+      ip.set_i( 85 );
+      ip.set_j( 100 );
+      vpDisplay::displayCharString(I, ip,
+                                   "ViSP is a marvelous software",
+                                   vpColor::yellow) ;
+      //Flush the display
+      vpDisplay::flush(I);
+
+      // Create a color image
+      vpImage<vpRGBa> Ioverlay ;
+      // Updates the color image with the original loaded image and the overlay
+      vpDisplay::getImage(I, Ioverlay) ;
+
+      // Write the color image on the disk
+      filename = odirname +  vpIoTools::path("/Klimt_grey.overlay.ppm");
+      vpImageIo::write(Ioverlay, filename) ;
+
+      // If click is allowed, wait for a mouse click to close the display
+      if (opt_click_allowed) {
+        std::cout << "\nA click to close the windows..." << std::endl;
+        // Wait for a blocking mouse click
+        vpDisplay::getClick(I) ;
+      }
+
+      // Close the display
+      vpDisplay::close(I);
     }
 
-    ip.set_i( -10 );
-    ip.set_j( 300 );
-    vpDisplay::displayCircle(I, ip, 100,vpColor::yellow) ;
-    
-    // Display in overlay a yellow string
-    ip.set_i( 85 );
-    ip.set_j( 100 );
-    vpDisplay::displayCharString(I, ip,
-                                 "ViSP is a marvelous software",
-                                 vpColor::yellow) ;
-    //Flush the display    
-    vpDisplay::flush(I);
-
     // Create a color image
-    vpImage<vpRGBa> Ioverlay ;
-    // Updates the color image with the original loaded image and the overlay
-    vpDisplay::getImage(I, Ioverlay) ;
-
-    // Write the color image on the disk
-    filename = odirname +  vpIoTools::path("/Klimt_grey.overlay.ppm");
-    vpImageIo::write(Ioverlay, filename) ;
-
-    // If click is allowed, wait for a mouse click to close the display
-    if (opt_click_allowed) {
-      std::cout << "\nA click to close the windows..." << std::endl;
-      // Wait for a blocking mouse click
-      vpDisplay::getClick(I) ;
-    }
-
-    // Close the display
-    vpDisplay::close(I);
-  }
+    vpImage<vpRGBa> Irgba ;
 
-  // Create a color image
-  vpImage<vpRGBa> Irgba ;
-
-  // Load a grey image from the disk and convert it to a color image
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-  try {
+    // Load a grey image from the disk and convert it to a color image
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
     vpImageIo::read(Irgba, filename) ;
-  }
-  catch (...) {
-    return -1;
-  }
 
-  // Create a new display
-  vpDisplayOpenCV displayRGBa;
-
-  if (opt_display) {
-    // For this color image, open a display at position 100,100
-    // in the screen, and with title "OpenCV color display"
-    displayRGBa.init(Irgba, 100, 100, "OpenCV color display");
-
-    // Display the color image
-    vpDisplay::display(Irgba) ;
-    vpDisplay::flush(Irgba) ;
-
-    // If click is allowed, wait for a blocking mouse click to display a cross
-    // at the clicked pixel position
-    if (opt_click_allowed) {
-      std::cout << "\nA click to display a cross..." << std::endl;
-      // Blocking wait for a click. Get the position of the selected pixel
-      // (i correspond to the row and j to the column coordinates in the image)
-      vpDisplay::getClick(Irgba, ip);
-      // Display a red cross on the click pixel position
-      std::cout << "Cross position: " << ip << std::endl;
-      vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
-    }
-    else {
-      ip.set_i( 10 );
-      ip.set_j( 20 );
-      // Display a red cross at position i, j (i correspond to the row
-      // and j to the column coordinates in the image)
-      std::cout << "Cross position: " << ip << std::endl;
-      vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
-
-    }
-    // Flush the display. Sometimes the display content is
-    // bufferized. Force to display the content that has been bufferized.
-    vpDisplay::flush(Irgba);
-
-    // If click is allowed, wait for a blocking mouse click to exit.
-    if (opt_click_allowed) {
-      std::cout << "\nA click to exit the program..." << std::endl;
-      vpDisplay::getClick(Irgba) ;
-      std::cout << "Bye" << std::endl;
+    // Create a new display
+    vpDisplayOpenCV displayRGBa;
+
+    if (opt_display) {
+      // For this color image, open a display at position 100,100
+      // in the screen, and with title "OpenCV color display"
+      displayRGBa.init(Irgba, 100, 100, "OpenCV color display");
+
+      // Display the color image
+      vpDisplay::display(Irgba) ;
+      vpDisplay::flush(Irgba) ;
+
+      // If click is allowed, wait for a blocking mouse click to display a cross
+      // at the clicked pixel position
+      if (opt_click_allowed) {
+        std::cout << "\nA click to display a cross..." << std::endl;
+        // Blocking wait for a click. Get the position of the selected pixel
+        // (i correspond to the row and j to the column coordinates in the image)
+        vpDisplay::getClick(Irgba, ip);
+        // Display a red cross on the click pixel position
+        std::cout << "Cross position: " << ip << std::endl;
+        vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
+      }
+      else {
+        ip.set_i( 10 );
+        ip.set_j( 20 );
+        // Display a red cross at position i, j (i correspond to the row
+        // and j to the column coordinates in the image)
+        std::cout << "Cross position: " << ip << std::endl;
+        vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
+
+      }
+      // Flush the display. Sometimes the display content is
+      // bufferized. Force to display the content that has been bufferized.
+      vpDisplay::flush(Irgba);
+
+      // If click is allowed, wait for a blocking mouse click to exit.
+      if (opt_click_allowed) {
+        std::cout << "\nA click to exit the program..." << std::endl;
+        vpDisplay::getClick(Irgba) ;
+        std::cout << "Bye" << std::endl;
+      }
     }
   }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 #else
 int
diff --git a/example/device/display/displaySequence.cpp b/example/device/display/displaySequence.cpp
index 9a5057a4..525332ed 100644
--- a/example/device/display/displaySequence.cpp
+++ b/example/device/display/displaySequence.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: displaySequence.cpp 4294 2013-07-01 16:05:49Z fspindle $
+ * $Id: displaySequence.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -84,6 +84,11 @@
 // List of allowed command line options
 #define GETOPTARGS	"di:p:hf:n:s:w"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string ppath,
+           unsigned first, unsigned nimages, unsigned step);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath,
+                unsigned &first, unsigned &nimages, unsigned &step, bool &display, bool &wait);
+
 /*!
 
   Print the program options.
@@ -98,7 +103,7 @@
 
  */
 void usage(const char *name, const char *badparam, std::string ipath, std::string ppath,
-	   unsigned first, unsigned nimages, unsigned step)
+           unsigned first, unsigned nimages, unsigned step)
 {
   fprintf(stdout, "\n\
 Read an image sequence from the disk and display it.\n\
@@ -180,26 +185,25 @@ SYNOPSIS\n\
 
 */
 bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath,
-                unsigned &first, unsigned &nimages, unsigned &step,
-                bool &display, bool &wait)
+                unsigned &first, unsigned &nimages, unsigned &step, bool &display, bool &wait)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
-    case 'p': ppath = optarg; break;
-    case 'f': first = (unsigned) atoi(optarg); break;
-    case 'n': nimages = (unsigned) atoi(optarg); break;
-    case 's': step = (unsigned) atoi(optarg); break;
+    case 'i': ipath = optarg_; break;
+    case 'p': ppath = optarg_; break;
+    case 'f': first = (unsigned) atoi(optarg_); break;
+    case 'n': nimages = (unsigned) atoi(optarg_); break;
+    case 's': step = (unsigned) atoi(optarg_); break;
     case 'w': wait = true; break;
     case 'h': usage(argv[0], NULL, ipath, ppath, first, nimages, step);
       return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, ppath, first, nimages, step);
+      usage(argv[0], optarg_, ipath, ppath, first, nimages, step);
       return false; break;
     }
   }
@@ -208,7 +212,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &pp
     // standalone param or error
     usage(argv[0], NULL, ipath, ppath, first, nimages, step);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -218,140 +222,141 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &pp
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string opt_ppath;
-  std::string dirname;
-  std::string filename;
-  unsigned opt_first = 0;
-  unsigned opt_nimages = 80;
-  unsigned opt_step = 1;
-  bool opt_display = true;
-  bool opt_wait = false;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_ppath,opt_first, opt_nimages,
-                 opt_step, opt_display, opt_wait) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string opt_ppath;
+    std::string dirname;
+    std::string filename;
+    unsigned opt_first = 0;
+    unsigned opt_nimages = 80;
+    unsigned opt_step = 1;
+    bool opt_display = true;
+    bool opt_wait = false;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_ppath,opt_first, opt_nimages,
+                   opt_step, opt_display, opt_wait) == false) {
+      exit (-1);
+    }
 
-  if ( ! opt_display )
-    opt_wait = false; // turn off the waiting
-
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    if ( ! opt_display )
+      opt_wait = false; // turn off the waiting
+
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty() ){
-    usage(argv[0], NULL, ipath, opt_ppath, opt_first, opt_nimages, opt_step);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl
-              << "  Use -p <personal image path> option if you want to "<<std::endl
-              << "  use personal images." << std::endl
-              << std::endl;
-
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty() ){
+      usage(argv[0], NULL, ipath, opt_ppath, opt_first, opt_nimages, opt_step);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl
+                << "  Use -p <personal image path> option if you want to "<<std::endl
+                << "  use personal images." << std::endl
+                << std::endl;
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  vpImage<unsigned char> I ;
+      exit(-1);
+    }
 
-  unsigned iter = opt_first;
-  std::ostringstream s;
-  char cfilename[FILENAME_MAX];
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    vpImage<unsigned char> I ;
 
-  if (opt_ppath.empty()){
+    unsigned iter = opt_first;
+    std::ostringstream s;
+    char cfilename[FILENAME_MAX];
 
+    if (opt_ppath.empty()){
 
-    // Warning :
-    // the image sequence is not provided with the ViSP package
-    // therefore the program will return you an error :
-    //  !!    vpImageIoPnm.cpp: readPGM(#210) :couldn't read file
-    //        ViSP-images/cube/image.0001.pgm
-    //  !!    vpDotExample.cpp: main(#95) :Error while reading the image
-    //  terminate called after throwing an instance of 'vpImageException'
-    //
-    //  The sequence is available on the visp www site
-    //  http://www.irisa.fr/lagadic/visp/visp.html
-    //  in the download section. It is named "ViSP-images.tar.gz"
 
-    // Set the path location of the image sequence
-    dirname = ipath + vpIoTools::path("/ViSP-images/cube/");
+      // Warning :
+      // the image sequence is not provided with the ViSP package
+      // therefore the program will return you an error :
+      //  !!    vpImageIoPnm.cpp: readPGM(#210) :couldn't read file
+      //        ViSP-images/cube/image.0001.pgm
+      //  !!    vpDotExample.cpp: main(#95) :Error while reading the image
+      //  terminate called after throwing an instance of 'vpImageException'
+      //
+      //  The sequence is available on the visp www site
+      //  http://www.irisa.fr/lagadic/visp/visp.html
+      //  in the download section. It is named "ViSP-images.tar.gz"
 
-    // Build the name of the image file
+      // Set the path location of the image sequence
+      dirname = ipath + vpIoTools::path("/ViSP-images/cube/");
 
-    s.setf(std::ios::right, std::ios::adjustfield);
-    s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-    filename = dirname + s.str();
-  }
-  else {
+      // Build the name of the image file
 
-    sprintf(cfilename,opt_ppath.c_str(), iter) ;
-    filename = cfilename;
-  }
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    vpImageIo::read(I, filename) ;
-  }
-  catch(...)
-  {
-    // an exception is throwned if an exception from readPGM has been catched
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option, " << std::endl
-              << "  or your -p " << opt_ppath << " option " <<std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable"
-              << std::endl;
-    exit(-1);
-  }
+      s.setf(std::ios::right, std::ios::adjustfield);
+      s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+      filename = dirname + s.str();
+    }
+    else {
+
+      sprintf(cfilename,opt_ppath.c_str(), iter) ;
+      filename = cfilename;
+    }
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
+    try{
+      vpImageIo::read(I, filename) ;
+    }
+    catch(...)
+    {
+      // an exception is throwned if an exception from readPGM has been catched
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option, " << std::endl
+                << "  or your -p " << opt_ppath << " option " <<std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable"
+                << std::endl;
+      exit(-1);
+    }
 
 #if defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
-  if (opt_display) {
-    try {
+    if (opt_display) {
+
       // We open a window using either X11 or GTK or GDI.
       // Its size is automatically defined by the image (I) size
       display.init(I, 100, 100,"Display...") ;
@@ -364,17 +369,11 @@ main(int argc, const char ** argv)
       vpDisplay::display(I) ;
       vpDisplay::flush(I) ;
     }
-    catch(...) {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
 
-  //  double tms_1 = vpTime::measureTimeMs() ;
-  unsigned niter=0 ;
-  // this is the loop over the image sequence
-  while (iter < opt_first + opt_nimages*opt_step) {
-    try {
+    //  double tms_1 = vpTime::measureTimeMs() ;
+    unsigned niter=0 ;
+    // this is the loop over the image sequence
+    while (iter < opt_first + opt_nimages*opt_step) {
       double tms = vpTime::measureTimeMs() ;
 
       // set the new image name
@@ -409,16 +408,18 @@ main(int argc, const char ** argv)
         vpTime::wait(tms, 40) ;
       }
       niter++ ;
+
+      iter += opt_step ;
     }
-    catch(...) {
-      exit(-1) ;
-    }
-    iter += opt_step ;
+    //  double tms_2 = vpTime::measureTimeMs() ;
+    //  double tms_total = tms_2 - tms_1 ;
+    //  std::cout << "Total Time : "<< tms_total<<std::endl;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  //  double tms_2 = vpTime::measureTimeMs() ;
-  //  double tms_total = tms_2 - tms_1 ;
-  //  std::cout << "Total Time : "<< tms_total<<std::endl;
-
 }
 #else
 int
diff --git a/example/device/display/displayX.cpp b/example/device/display/displayX.cpp
index 2188a5dd..c35e5c31 100644
--- a/example/device/display/displayX.cpp
+++ b/example/device/display/displayX.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: displayX.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: displayX.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -73,6 +73,10 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:o:p:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, bool &click_allowed,
+                std::string user, bool &display);
+
 /*!
 
   Print the program options.
@@ -84,8 +88,7 @@
   \param user : Username.
 
  */
-void usage(const char *name, const char *badparam, std::string ipath,
-	   std::string opath, std::string user)
+void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user)
 {
   fprintf(stdout, "\n\
 Read an image on the disk, display it using X11, display some\n\
@@ -151,23 +154,22 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv,
-                std::string &ipath, std::string &opath, bool &click_allowed,
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, bool &click_allowed,
                 std::string user, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
-    case 'o': opath = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'o': opath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath, opath, user); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, opath, user); return false; break;
+      usage(argv[0], optarg_, ipath, opath, user); return false; break;
     }
   }
 
@@ -175,7 +177,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, opath, user);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -185,256 +187,253 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string opt_opath;
-  std::string ipath;
-  std::string opath;
-  std::string filename;
-  std::string username;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-  //  std::cout << "env_ipath: " << env_ipath << std::endl;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Set the default output path
-#ifdef UNIX
-  opt_opath = "/tmp";
-#elif WIN32
-  opt_opath = "C:\\temp";
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string opt_opath;
+    std::string ipath;
+    std::string opath;
+    std::string filename;
+    std::string username;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+    //  std::cout << "env_ipath: " << env_ipath << std::endl;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Set the default output path
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
+    opt_opath = "/tmp";
+#elif defined(_WIN32)
+    opt_opath = "C:\\temp";
 #endif
 
-  // Get the user login name
-  vpIoTools::getUserName(username);
+    // Get the user login name
+    vpIoTools::getUserName(username);
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_opath,
-                 opt_click_allowed, username, opt_display) == false) {
-    exit (-1);
-  }
-
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  if (!opt_opath.empty())
-    opath = opt_opath;
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_opath,
+                   opt_click_allowed, username, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Append to the output path string, the login name of the user
-  std::string odirname = opath +  vpIoTools::path("/") + username;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+    if (!opt_opath.empty())
+      opath = opt_opath;
+
+    // Append to the output path string, the login name of the user
+    std::string odirname = opath +  vpIoTools::path("/") + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(odirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(odirname);
+      }
+      catch (...) {
+        usage(argv[0], NULL, ipath, opath, username);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << odirname << std::endl;
+        std::cerr << "  Check your -o " << opath << " option " << std::endl;
+        exit(-1);
+      }
+    }
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(odirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(odirname);
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-    catch (...) {
+
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
       usage(argv[0], NULL, ipath, opath, username);
       std::cerr << std::endl
                 << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << odirname << std::endl;
-      std::cerr << "  Check your -o " << opath << " option " << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
       exit(-1);
     }
-  }
 
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
-    }
-  }
+    // Create a grey level image
+    vpImage<unsigned char> I ;
+    vpImagePoint ip, ip1, ip2;
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opath, username);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Load a grey image from the disk
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+    vpImageIo::read(I, filename) ;
 
-  // Create a grey level image
-  vpImage<unsigned char> I ;
-  vpImagePoint ip, ip1, ip2;
+    // Create a display using X11
+    vpDisplayX display;
 
-  // Load a grey image from the disk
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-  try {
-    vpImageIo::read(I, filename) ;
-  }
-  catch (...) {
-    return -1;
-  }
+    if (opt_display) {
+      // For this grey level image, open a X11 display at position 100,100
+      // in the screen, and with title "X11 display"
+      display.init(I, 100, 100, "X11 display") ;
 
-  // Create a display using X11
-  vpDisplayX display;
+      // Display the image
+      vpDisplay::display(I) ;
 
-  if (opt_display) {
-    // For this grey level image, open a X11 display at position 100,100
-    // in the screen, and with title "X11 display"
-    display.init(I, 100, 100, "X11 display") ;
+      // Display in overlay a red cross at position 10,10 in the
+      // image. The lines are 10 pixels long
+      ip.set_i( 100 );
+      ip.set_j( 10 );
 
-    // Display the image
-    vpDisplay::display(I) ;
+      vpDisplay::displayCross(I, ip, 20, vpColor::red) ;
 
-    // Display in overlay a red cross at position 10,10 in the
-    // image. The lines are 10 pixels long
-    ip.set_i( 100 );
-    ip.set_j( 10 );
-    
-    vpDisplay::displayCross(I, ip, 20, vpColor::red) ;
+      // Display in overlay horizontal red lines
+      for (unsigned i=0 ; i < I.getHeight() ; i+=20) {
+        ip1.set_i( i );
+        ip1.set_j( 0 );
+        ip2.set_i( i );
+        ip2.set_j( I.getWidth() );
+        vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
+      }
 
-    // Display in overlay horizontal red lines
-    for (unsigned i=0 ; i < I.getHeight() ; i+=20) {
-      ip1.set_i( i );
-      ip1.set_j( 0 );
-      ip2.set_i( i );
-      ip2.set_j( I.getWidth() );
-      vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
-    }
+      // Display a ligne in the diagonal
+      ip1.set_i( -10 );
+      ip1.set_j( -10 );
+      ip2.set_i( I.getHeight() + 10 );
+      ip2.set_j( I.getWidth()  + 10 );
 
-    // Display a ligne in the diagonal
-    ip1.set_i( -10 );
-    ip1.set_j( -10 );
-    ip2.set_i( I.getHeight() + 10 );
-    ip2.set_j( I.getWidth()  + 10 );
-    
-    vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
+      vpDisplay::displayLine(I, ip1, ip2, vpColor::red) ;
 
-    // Display in overlay vertical green dot lines
-    for (unsigned i=0 ; i < I.getWidth() ; i+=20) {
+      // Display in overlay vertical green dot lines
+      for (unsigned i=0 ; i < I.getWidth() ; i+=20) {
+        ip1.set_i( 0 );
+        ip1.set_j( i );
+        ip2.set_i( I.getWidth() );
+        ip2.set_j( i );
+        vpDisplay::displayDotLine(I, ip1, ip2, vpColor::green) ;
+      }
+
+      // Display a rectangle
+      ip.set_i( I.getHeight() - 45 );
+      ip.set_j( -10 );
+      vpDisplay::displayRectangle(I, ip, 60, 80, vpColor::orange) ;
+
+      // Display in overlay a blue arrow
       ip1.set_i( 0 );
-      ip1.set_j( i );
-      ip2.set_i( I.getWidth() );
-      ip2.set_j( i );
-      vpDisplay::displayDotLine(I, ip1, ip2, vpColor::green) ;
-    }
-
-    // Display a rectangle 
-    ip.set_i( I.getHeight() - 45 );
-    ip.set_j( -10 );
-    vpDisplay::displayRectangle(I, ip, 60, 80, vpColor::orange) ;
-    
-    // Display in overlay a blue arrow
-    ip1.set_i( 0 );
-    ip1.set_j( 0 );
-    ip2.set_i( 100 );
-    ip2.set_j( 100 );
-    vpDisplay::displayArrow(I, ip1, ip2, vpColor::blue) ;
-
-    // Display in overlay some circles. The position of the center is 200, 200
-    // the radius is increased by 20 pixels for each circle
-
-    for (unsigned int i=0 ; i < 100 ; i+=20) {
-      ip.set_i( 80 );
-      ip.set_j( 80 );
-      vpDisplay::displayCircle(I, ip, 20+i, vpColor::yellow) ;
+      ip1.set_j( 0 );
+      ip2.set_i( 100 );
+      ip2.set_j( 100 );
+      vpDisplay::displayArrow(I, ip1, ip2, vpColor::blue) ;
+
+      // Display in overlay some circles. The position of the center is 200, 200
+      // the radius is increased by 20 pixels for each circle
+
+      for (unsigned int i=0 ; i < 100 ; i+=20) {
+        ip.set_i( 80 );
+        ip.set_j( 80 );
+        vpDisplay::displayCircle(I, ip, 20+i, vpColor::yellow) ;
+      }
+
+      ip.set_i( -10 );
+      ip.set_j( 300 );
+      vpDisplay::displayCircle(I, ip, 100,vpColor::yellow) ;
+
+      // Display in overlay a yellow string
+      ip.set_i( 85 );
+      ip.set_j( 100 );
+      vpDisplay::displayCharString(I, ip,
+                                   "ViSP is a marvelous software",
+                                   vpColor::yellow) ;
+      //Flush the display
+      vpDisplay::flush(I);
+
+      // Create a color image
+      vpImage<vpRGBa> Ioverlay ;
+      // Updates the color image with the original loaded image and the overlay
+      vpDisplay::getImage(I, Ioverlay) ;
+
+      // Write the color image on the disk
+      filename = odirname +  vpIoTools::path("/Klimt_grey.overlay.ppm");
+      vpImageIo::write(Ioverlay, filename) ;
+
+      // If click is allowed, wait for a mouse click to close the display
+      if (opt_click_allowed) {
+        std::cout << "\nA click to close the windows..." << std::endl;
+        // Wait for a blocking mouse click
+        vpDisplay::getClick(I) ;
+      }
+
+      // Close the display
+      vpDisplay::close(I);
     }
 
-    ip.set_i( -10 );
-    ip.set_j( 300 );
-    vpDisplay::displayCircle(I, ip, 100,vpColor::yellow) ;
-    
-    // Display in overlay a yellow string
-    ip.set_i( 85 );
-    ip.set_j( 100 );
-    vpDisplay::displayCharString(I, ip,
-                                 "ViSP is a marvelous software",
-                                 vpColor::yellow) ;
-    //Flush the display    
-    vpDisplay::flush(I);
-
     // Create a color image
-    vpImage<vpRGBa> Ioverlay ;
-    // Updates the color image with the original loaded image and the overlay
-    vpDisplay::getImage(I, Ioverlay) ;
-
-    // Write the color image on the disk
-    filename = odirname +  vpIoTools::path("/Klimt_grey.overlay.ppm");
-    vpImageIo::write(Ioverlay, filename) ;
-
-    // If click is allowed, wait for a mouse click to close the display
-    if (opt_click_allowed) {
-      std::cout << "\nA click to close the windows..." << std::endl;
-      // Wait for a blocking mouse click
-      vpDisplay::getClick(I) ;
-    }
-
-    // Close the display
-    vpDisplay::close(I);
-  }
+    vpImage<vpRGBa> Irgba ;
 
-  // Create a color image
-  vpImage<vpRGBa> Irgba ;
-
-  // Load a grey image from the disk and convert it to a color image
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-  try {
+    // Load a grey image from the disk and convert it to a color image
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
     vpImageIo::read(Irgba, filename) ;
-  }
-  catch (...) {
-    return -1;
-  }
 
-  // Create a new display
-  vpDisplayX displayRGBa;
-
-  if (opt_display) {
-    // For this color image, open a X11 display at position 100,100
-    // in the screen, and with title "X11 color display"
-    displayRGBa.init(Irgba, 100, 100, "X11 color display");
-
-    // Display the color image
-    vpDisplay::display(Irgba) ;
-    vpDisplay::flush(Irgba) ;
-
-    // If click is allowed, wait for a blocking mouse click to display a cross
-    // at the clicked pixel position
-    if (opt_click_allowed) {
-      std::cout << "\nA click to display a cross..." << std::endl;
-      // Blocking wait for a click. Get the position of the selected pixel
-      // (i correspond to the row and j to the column coordinates in the image)
-      vpDisplay::getClick(Irgba, ip);
-      // Display a red cross on the click pixel position
-      std::cout << "Cross position: " << ip << std::endl;
-      vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
-    }
-    else {
-      ip.set_i( 10 );
-      ip.set_j( 20 );
-      // Display a red cross at position i, j (i correspond to the row
-      // and j to the column coordinates in the image)
-      std::cout << "Cross position: " << ip << std::endl;
-      vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
-
-    }
-    // Flush the display. Sometimes the display content is
-    // bufferized. Force to display the content that has been bufferized.
-    vpDisplay::flush(Irgba);
-
-    // If click is allowed, wait for a blocking mouse click to exit.
-    if (opt_click_allowed) {
-      std::cout << "\nA click to exit the program..." << std::endl;
-      vpDisplay::getClick(Irgba) ;
-      std::cout << "Bye" << std::endl;
+    // Create a new display
+    vpDisplayX displayRGBa;
+
+    if (opt_display) {
+      // For this color image, open a X11 display at position 100,100
+      // in the screen, and with title "X11 color display"
+      displayRGBa.init(Irgba, 100, 100, "X11 color display");
+
+      // Display the color image
+      vpDisplay::display(Irgba) ;
+      vpDisplay::flush(Irgba) ;
+
+      // If click is allowed, wait for a blocking mouse click to display a cross
+      // at the clicked pixel position
+      if (opt_click_allowed) {
+        std::cout << "\nA click to display a cross..." << std::endl;
+        // Blocking wait for a click. Get the position of the selected pixel
+        // (i correspond to the row and j to the column coordinates in the image)
+        vpDisplay::getClick(Irgba, ip);
+        // Display a red cross on the click pixel position
+        std::cout << "Cross position: " << ip << std::endl;
+        vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
+      }
+      else {
+        ip.set_i( 10 );
+        ip.set_j( 20 );
+        // Display a red cross at position i, j (i correspond to the row
+        // and j to the column coordinates in the image)
+        std::cout << "Cross position: " << ip << std::endl;
+        vpDisplay::displayCross(Irgba, ip, 15, vpColor::red);
+
+      }
+      // Flush the display. Sometimes the display content is
+      // bufferized. Force to display the content that has been bufferized.
+      vpDisplay::flush(Irgba);
+
+      // If click is allowed, wait for a blocking mouse click to exit.
+      if (opt_click_allowed) {
+        std::cout << "\nA click to exit the program..." << std::endl;
+        vpDisplay::getClick(Irgba) ;
+        std::cout << "Bye" << std::endl;
+      }
     }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
diff --git a/example/device/display/displayXMulti.cpp b/example/device/display/displayXMulti.cpp
index b624901f..b34340c0 100644
--- a/example/device/display/displayXMulti.cpp
+++ b/example/device/display/displayXMulti.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: displayXMulti.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: displayXMulti.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -76,6 +76,10 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:o:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, bool &click_allowed,
+                std::string user, bool &display);
+
 /*!
 
   Print the program options.
@@ -151,23 +155,22 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv,
-                std::string &ipath, std::string &opath, bool &click_allowed,
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, bool &click_allowed,
                 std::string user, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
-    case 'o': opath = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'o': opath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath, opath, user); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, opath, user); return false; break;
+      usage(argv[0], optarg_, ipath, opath, user); return false; break;
     }
   }
 
@@ -175,7 +178,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, opath, user);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -185,221 +188,228 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string opt_opath;
-  std::string ipath;
-  std::string opath;
-  std::string filename;
-  std::string username;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-  //  std::cout << "env_ipath: " << env_ipath << std::endl;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Set the default output path
-#ifdef UNIX
-  opt_opath = "/tmp";
-#elif WIN32
-  opt_opath = "C:\\temp";
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string opt_opath;
+    std::string ipath;
+    std::string opath;
+    std::string filename;
+    std::string username;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+    //  std::cout << "env_ipath: " << env_ipath << std::endl;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Set the default output path
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
+    opt_opath = "/tmp";
+#elif defined(_WIN32)
+    opt_opath = "C:\\temp";
 #endif
 
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_opath,
-                 opt_click_allowed, username, opt_display) == false) {
-    exit (-1);
-  }
+    // Get the user login name
+    vpIoTools::getUserName(username);
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  if (!opt_opath.empty())
-    opath = opt_opath;
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_opath,
+                   opt_click_allowed, username, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Append to the output path string, the login name of the user
-  std::string odirname = opath +  vpIoTools::path("/") + username;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+    if (!opt_opath.empty())
+      opath = opt_opath;
+
+    // Append to the output path string, the login name of the user
+    std::string odirname = opath +  vpIoTools::path("/") + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(odirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(odirname);
+      }
+      catch (...) {
+        usage(argv[0], NULL, ipath, opath, username);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << odirname << std::endl;
+        std::cerr << "  Check your -o " << opath << " option " << std::endl;
+        exit(-1);
+      }
+    }
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(odirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(odirname);
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-    catch (...) {
+
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
       usage(argv[0], NULL, ipath, opath, username);
       std::cerr << std::endl
                 << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << odirname << std::endl;
-      std::cerr << "  Check your -o " << opath << " option " << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
       exit(-1);
     }
-  }
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
-    }
-  }
-
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opath, username);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
 
-  // Create two color images
-  vpImage<vpRGBa> I1, I2 ;
-  vpImagePoint ip, ip1, ip2;
+    // Create two color images
+    vpImage<vpRGBa> I1, I2 ;
+    vpImagePoint ip, ip1, ip2;
 
-  try {
-    // Load a grey image from the disk
-    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-    vpImageIo::read(I1, filename) ;
-  }
-  catch(...)
-  {
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
-  try {
-    // Load a color image from the disk
-    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-    vpImageIo::read(I2, filename) ;
-  }
-  catch(...)
-  {
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
-
-  // For each image, open a X11 display
-  vpDisplayX display1;
-  vpDisplayX display2;
-
-  if (opt_display) {
-    // Attach image 1 to display 1
-    display1.init(I1, 0,     0,"X11 Display 1...") ;
-    // Attach image 2 to display 2
-    display2.init(I2, 200, 200,"X11 Display 2...") ;
-    // Display the images
-    vpDisplay::display(I1) ;
-    vpDisplay::display(I2) ;
-
-    // In the first display, display in overlay horizontal red lines
-    for (unsigned int i=0 ; i < I1.getHeight() ; i+=20) {
-      ip1.set_i( i );
-      ip1.set_j( 0 );
-      ip2.set_i( i );
-      ip2.set_j( I1.getWidth() );
-      vpDisplay::displayLine(I1, ip1, ip2, vpColor::red) ;
-    }
-
-    // In the first display, display in overlay vertical green dot lines
-    for (unsigned int i=0 ; i < I1.getWidth() ; i+=20) {
-      ip1.set_i( 0 );
-      ip1.set_j( i );
-      ip2.set_i( I1.getWidth() );
-      ip2.set_j( i );
-      vpDisplay::displayDotLine(I1, ip1, ip2, vpColor::green) ;
+    try {
+      // Load a grey image from the disk
+      filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+      vpImageIo::read(I1, filename) ;
     }
-
-    // In the first display, display in overlay a blue arrow
-    ip1.set_i( 0 );
-    ip1.set_j( 0 );
-    ip2.set_i( 100 );
-    ip2.set_j( 100 );
-    vpDisplay::displayArrow(I1, ip1, ip2, vpColor::blue) ;
-
-    // In the first display, display in overlay some circles. The
-    // position of the center is 200, 200 the radius is increased by 20
-    // pixels for each circle
-    for (unsigned int i=0 ; i < 100 ; i+=20) {
-      ip.set_i( 200 );
-      ip.set_j( 200 );
-      vpDisplay::displayCircle(I1, ip, 20+i,vpColor::yellow) ;
+    catch(...)
+    {
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
+      exit(-1);
     }
-
-    // In the first display, display in overlay a yellow string
-    ip.set_i( 100 );
-    ip.set_j( 100 );
-    vpDisplay::displayCharString(I1, ip,
-                                 "ViSP is a marvelous software",
-                                 vpColor::blue) ;
-
-    //Flush displays. The displays must be flushed to show the overlay.
-    //without this line, nothing will be displayed.
-    vpDisplay::flush(I1);
-    vpDisplay::flush(I2);
-
-    // If click is allowed, wait for a blocking mouse click in the first
-    // display, to display a cross at the clicked pixel position
-    if (opt_click_allowed) {
-      std::cout << "\nA click in the first display to draw a cross..." << std::endl;
-      // Blocking wait for a click. Get the position of the selected pixel
-      // (i correspond to the row and j to the column coordinates in the image)
-      vpDisplay::getClick(I1, ip);
-      // Display a red cross on the click pixel position
-      std::cout << "Cross position: " << ip << std::endl;
-      vpDisplay::displayCross(I1, ip, 15,vpColor::red);
-      vpDisplay::flush(I1);
+    try {
+      // Load a color image from the disk
+      filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
+      vpImageIo::read(I2, filename) ;
     }
-    else {
-      ip.set_i( 50 );
-      ip.set_j( 50 );
-      // Display a red cross at position ip in the first display
-      std::cout << "Cross position: " << ip<< std::endl;
-      vpDisplay::displayCross(I1, ip, 15, vpColor::red);
-      vpDisplay::flush(I1);
+    catch(...)
+    {
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
+      exit(-1);
     }
 
-    // Create a color image
-    vpImage<vpRGBa> Ioverlay ;
-    // Updates the color image with the original loaded image 1 and the overlay
-    vpDisplay::getImage(I1, Ioverlay) ;
-
-    // Write the color image on the disk
-    filename = odirname +  vpIoTools::path("/Klimt_grey.overlay.ppm");
-    vpImageIo::write(Ioverlay, filename) ;
-
-    // If click is allowed, wait for a mouse click to close the display
-    if (opt_click_allowed) {
-      std::cout << "\nA click in the second display to close the windows and exit..." << std::endl;
-      // Wait for a blocking mouse click
-      vpDisplay::getClick(I2) ;
+    // For each image, open a X11 display
+    vpDisplayX display1;
+    vpDisplayX display2;
+
+    if (opt_display) {
+      // Attach image 1 to display 1
+      display1.init(I1, 0,     0,"X11 Display 1...") ;
+      // Attach image 2 to display 2
+      display2.init(I2, 200, 200,"X11 Display 2...") ;
+      // Display the images
+      vpDisplay::display(I1) ;
+      vpDisplay::display(I2) ;
+
+      // In the first display, display in overlay horizontal red lines
+      for (unsigned int i=0 ; i < I1.getHeight() ; i+=20) {
+        ip1.set_i( i );
+        ip1.set_j( 0 );
+        ip2.set_i( i );
+        ip2.set_j( I1.getWidth() );
+        vpDisplay::displayLine(I1, ip1, ip2, vpColor::red) ;
+      }
+
+      // In the first display, display in overlay vertical green dot lines
+      for (unsigned int i=0 ; i < I1.getWidth() ; i+=20) {
+        ip1.set_i( 0 );
+        ip1.set_j( i );
+        ip2.set_i( I1.getWidth() );
+        ip2.set_j( i );
+        vpDisplay::displayDotLine(I1, ip1, ip2, vpColor::green) ;
+      }
+
+      // In the first display, display in overlay a blue arrow
+      ip1.set_i( 0 );
+      ip1.set_j( 0 );
+      ip2.set_i( 100 );
+      ip2.set_j( 100 );
+      vpDisplay::displayArrow(I1, ip1, ip2, vpColor::blue) ;
+
+      // In the first display, display in overlay some circles. The
+      // position of the center is 200, 200 the radius is increased by 20
+      // pixels for each circle
+      for (unsigned int i=0 ; i < 100 ; i+=20) {
+        ip.set_i( 200 );
+        ip.set_j( 200 );
+        vpDisplay::displayCircle(I1, ip, 20+i,vpColor::yellow) ;
+      }
+
+      // In the first display, display in overlay a yellow string
+      ip.set_i( 100 );
+      ip.set_j( 100 );
+      vpDisplay::displayCharString(I1, ip,
+                                   "ViSP is a marvelous software",
+                                   vpColor::blue) ;
+
+      //Flush displays. The displays must be flushed to show the overlay.
+      //without this line, nothing will be displayed.
+      vpDisplay::flush(I1);
+      vpDisplay::flush(I2);
+
+      // If click is allowed, wait for a blocking mouse click in the first
+      // display, to display a cross at the clicked pixel position
+      if (opt_click_allowed) {
+        std::cout << "\nA click in the first display to draw a cross..." << std::endl;
+        // Blocking wait for a click. Get the position of the selected pixel
+        // (i correspond to the row and j to the column coordinates in the image)
+        vpDisplay::getClick(I1, ip);
+        // Display a red cross on the click pixel position
+        std::cout << "Cross position: " << ip << std::endl;
+        vpDisplay::displayCross(I1, ip, 15,vpColor::red);
+        vpDisplay::flush(I1);
+      }
+      else {
+        ip.set_i( 50 );
+        ip.set_j( 50 );
+        // Display a red cross at position ip in the first display
+        std::cout << "Cross position: " << ip<< std::endl;
+        vpDisplay::displayCross(I1, ip, 15, vpColor::red);
+        vpDisplay::flush(I1);
+      }
+
+      // Create a color image
+      vpImage<vpRGBa> Ioverlay ;
+      // Updates the color image with the original loaded image 1 and the overlay
+      vpDisplay::getImage(I1, Ioverlay) ;
+
+      // Write the color image on the disk
+      filename = odirname +  vpIoTools::path("/Klimt_grey.overlay.ppm");
+      vpImageIo::write(Ioverlay, filename) ;
+
+      // If click is allowed, wait for a mouse click to close the display
+      if (opt_click_allowed) {
+        std::cout << "\nA click in the second display to close the windows and exit..." << std::endl;
+        // Wait for a blocking mouse click
+        vpDisplay::getClick(I2) ;
+      }
     }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
diff --git a/example/device/framegrabber/CMakeLists.txt b/example/device/framegrabber/CMakeLists.txt
index 53c18727..48e78d67 100644
--- a/example/device/framegrabber/CMakeLists.txt
+++ b/example/device/framegrabber/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/device/framegrabber/grab1394CMU.cpp b/example/device/framegrabber/grab1394CMU.cpp
index 2f538ef9..fdca9c3e 100644
--- a/example/device/framegrabber/grab1394CMU.cpp
+++ b/example/device/framegrabber/grab1394CMU.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: grab1394CMU.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: grab1394CMU.cpp 4659 2014-02-09 14:11:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -64,6 +64,10 @@
 // List of allowed command line options
 #define GETOPTARGS	"dhn:o:"
 
+void usage(const char *name, const char *badparam, unsigned &nframes, std::string &opath);
+bool getOptions(int argc, const char **argv, bool &display,
+                unsigned int &nframes, bool &save, std::string &opath);
+
 /*!
 
   Print the program options.
@@ -123,21 +127,21 @@ OPTIONS:                                               Default\n\
 bool getOptions(int argc, const char **argv, bool &display,
                 unsigned int &nframes, bool &save, std::string &opath)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'd': display = false; break;
     case 'n':
-      nframes = (unsigned int)atoi(optarg); break;
+      nframes = (unsigned int)atoi(optarg_); break;
     case 'o':
       save = true;
-      opath = optarg; break;
+      opath = optarg_; break;
     case 'h': usage(argv[0], NULL, nframes, opath); return false; break;
 
     default:
-      usage(argv[0], optarg, nframes, opath);
+      usage(argv[0], optarg_, nframes, opath);
       return false; break;
     }
   }
@@ -146,7 +150,7 @@ bool getOptions(int argc, const char **argv, bool &display,
     // standalone param or error
     usage(argv[0], NULL, nframes, opath);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -255,10 +259,9 @@ main(int argc, const char ** argv)
     std::cout << "Mean loop time: " << ttotal / nframes << " ms" << std::endl;
     std::cout << "Mean frequency: " << 1000./(ttotal / nframes) << " fps" << std::endl;
   }
-  catch(...)
-  {
-    std::cout << "Failure: exit" << std::endl;
-    return(-1);
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
diff --git a/example/device/framegrabber/grab1394Two.cpp b/example/device/framegrabber/grab1394Two.cpp
index 6b1e28a1..401e31d7 100644
--- a/example/device/framegrabber/grab1394Two.cpp
+++ b/example/device/framegrabber/grab1394Two.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: grab1394Two.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: grab1394Two.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -78,10 +78,29 @@
 
 // List of allowed command line options
 #define GETOPTARGS	"b:c:df:g:hH:L:mn:io:p:rsT:v:W:"
-
-
 #define DUAL_ACQ
 
+void usage(const char *name, const char *badparam, unsigned int camera,
+           const unsigned int &nframes, const std::string &opath,
+           const unsigned int &roi_left, const unsigned int &roi_top,
+           const unsigned int &roi_width, const unsigned int &roi_height,
+           const unsigned int &ringbuffersize, const unsigned int &panControl);
+void read_options(int argc, const char **argv, bool &multi, unsigned int &camera,
+                  unsigned int &nframes, bool &verbose_info,
+                  bool &verbose_settings,
+                  bool &videomode_is_set,
+                  vp1394TwoGrabber::vp1394TwoVideoModeType &videomode,
+                  bool &framerate_is_set,
+                  vp1394TwoGrabber::vp1394TwoFramerateType &framerate,
+                  bool &colorcoding_is_set,
+                  vp1394TwoGrabber::vp1394TwoColorCodingType &colorcoding,
+                  bool &ringbuffersize_is_set,
+                  unsigned int &ringbuffersize,
+                  bool &display, bool &save, std::string &opath,
+                  unsigned int &roi_left, unsigned int &roi_top,
+                  unsigned int &roi_width, unsigned int &roi_height,
+                  bool &reset,
+                  unsigned int &panControl, bool & panControl_is_set);
 
 /*!
 
@@ -277,41 +296,41 @@ void read_options(int argc, const char **argv, bool &multi, unsigned int &camera
   /*
    * Lecture des options.
    */
-  const char *optarg;
+  const char *optarg_;
   int	c;
 
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
     switch (c) {
     case 'c':
-      camera = (unsigned int)atoi(optarg); break;
+      camera = (unsigned int)atoi(optarg_); break;
     case 'd':
       display = false; break;
     case 'f':
       framerate_is_set = true;
-      framerate = (vp1394TwoGrabber::vp1394TwoFramerateType) atoi(optarg);
+      framerate = (vp1394TwoGrabber::vp1394TwoFramerateType) atoi(optarg_);
       break;
     case 'g':
       colorcoding_is_set = true;
-      colorcoding = (vp1394TwoGrabber::vp1394TwoColorCodingType) atoi(optarg);
+      colorcoding = (vp1394TwoGrabber::vp1394TwoColorCodingType) atoi(optarg_);
       break;
     case 'H':
-      roi_height = (unsigned int) atoi(optarg); break;
+      roi_height = (unsigned int) atoi(optarg_); break;
     case 'i':
       verbose_info = true; break;
     case 'L':
-      roi_left = (unsigned int) atoi(optarg); break;
+      roi_left = (unsigned int) atoi(optarg_); break;
     case 'm':
       multi = true; break;
     case 'n':
-      nframes = (unsigned int)atoi(optarg); break;
+      nframes = (unsigned int)atoi(optarg_); break;
     case 'o':
       save = true;
-      opath = optarg; break;
+      opath = optarg_; break;
     case 'b':
       ringbuffersize_is_set = true;
-      ringbuffersize = (unsigned int) atoi(optarg); break;
+      ringbuffersize = (unsigned int) atoi(optarg_); break;
     case 'p':
-      panControl = (unsigned int) atoi(optarg);
+      panControl = (unsigned int) atoi(optarg_);
       panControl_is_set = true;
       break;
     case 'r':
@@ -319,13 +338,13 @@ void read_options(int argc, const char **argv, bool &multi, unsigned int &camera
     case 's':
       verbose_settings = true; break;
     case 'T':
-      roi_top = (unsigned int) atoi(optarg); break;
+      roi_top = (unsigned int) atoi(optarg_); break;
     case 'v':
       videomode_is_set = true;
-      videomode = (vp1394TwoGrabber::vp1394TwoVideoModeType) atoi(optarg);
+      videomode = (vp1394TwoGrabber::vp1394TwoVideoModeType) atoi(optarg_);
       break;
     case 'W':
-      roi_width = (unsigned int) atoi(optarg); break;
+      roi_width = (unsigned int) atoi(optarg_); break;
     case 'h':
     case '?':
       usage(argv[0], NULL, camera, nframes, opath,
@@ -341,7 +360,7 @@ void read_options(int argc, const char **argv, bool &multi, unsigned int &camera
     usage(argv[0], NULL, camera, nframes, opath,
           roi_left, roi_top, roi_width, roi_height, ringbuffersize, panControl);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     exit(-1);
   }
 }
@@ -488,10 +507,10 @@ main(int argc, const char ** argv)
             vp1394TwoGrabber::vp1394TwoVideoModeType supmode = *it_lmode;
             if (curmode == supmode)
               std::cout << " * " << vp1394TwoGrabber::videoMode2string(supmode)
-                        << " (-v " << supmode << ")" << std::endl;
+                        << " (-v " << (int)supmode << ")" << std::endl;
             else
               std::cout << "   " << vp1394TwoGrabber::videoMode2string(supmode)
-                        << " (-v " << supmode << ")" << std::endl;
+                        << " (-v " << (int)supmode << ")" << std::endl;
 
             if (g.isVideoModeFormat7(supmode)){
               // Format 7 video mode; no framerate setting, but color
@@ -503,11 +522,11 @@ main(int argc, const char ** argv)
                 if ( (curmode == supmode) && (supcoding == curcoding) )
                   std::cout << "    * "
                             << vp1394TwoGrabber::colorCoding2string(supcoding)
-                            << " (-g " << supcoding << ")" << std::endl;
+                            << " (-g " << (int)supcoding << ")" << std::endl;
                 else
                   std::cout << "      "
                             << vp1394TwoGrabber::colorCoding2string(supcoding)
-                            << " (-g " << supcoding << ")" << std::endl;
+                            << " (-g " << (int)supcoding << ")" << std::endl;
               }
             }
             else {
@@ -519,11 +538,11 @@ main(int argc, const char ** argv)
                 if ( (curmode == supmode) && (supfps == curfps) )
                   std::cout << "    * "
                             << vp1394TwoGrabber::framerate2string(supfps)
-                            << " (-f " << supfps << ")" << std::endl;
+                            << " (-f " << (int)supfps << ")" << std::endl;
                 else
                   std::cout << "      "
                             << vp1394TwoGrabber::framerate2string(supfps)
-                            << " (-f " << supfps << ")" << std::endl;
+                            << " (-f " << (int)supfps << ")" << std::endl;
               }
             }
           }
@@ -695,12 +714,12 @@ main(int argc, const char ** argv)
     if (display)
       delete [] d;
 #endif
+    return 0;
   }
-  catch (...) {
-    vpCERROR << "Failure: exit" << std::endl;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-
-  std::cout << " the end" << std::endl;
 }
 #else
 int
diff --git a/example/device/framegrabber/grabDirectShow.cpp b/example/device/framegrabber/grabDirectShow.cpp
index 225e357c..cea7264c 100644
--- a/example/device/framegrabber/grabDirectShow.cpp
+++ b/example/device/framegrabber/grabDirectShow.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: grabDirectShow.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: grabDirectShow.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -167,35 +167,34 @@ bool getOptions(int argc, const char **argv, bool &display,
 int
 main(int argc, const char ** argv)
 {
-  bool opt_display = true;
-  unsigned nframes = 50;
-  bool save = false;
+  try {
+    bool opt_display = true;
+    unsigned nframes = 50;
+    bool save = false;
 
-  // Declare an image. It size is not defined yet. It will be defined when the
-  // image will acquired the first time.
+    // Declare an image. It size is not defined yet. It will be defined when the
+    // image will acquired the first time.
 #ifdef GRAB_COLOR
-  vpImage<vpRGBa> I; // This is a color image (in RGBa format)
+    vpImage<vpRGBa> I; // This is a color image (in RGBa format)
 #else
-  vpImage<unsigned char> I; // This is a B&W image
+    vpImage<unsigned char> I; // This is a B&W image
 #endif
 
-  // Set default output image name for saving
+    // Set default output image name for saving
 #ifdef GRAB_COLOR
-  // Color images will be saved in PGM P6 format
-  std::string opath = "C:/temp/I%04d.ppm";
+    // Color images will be saved in PGM P6 format
+    std::string opath = "C:/temp/I%04d.ppm";
 #else
-  // B&W images will be saved in PGM P5 format
-  std::string opath = "C:/temp/I%04d.pgm";
+    // B&W images will be saved in PGM P5 format
+    std::string opath = "C:/temp/I%04d.pgm";
 #endif
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_display, nframes, save, opath) == false) {
-    exit (-1);
-  }
-  vpDirectShowGrabber* grabber = NULL;
-  try {
+    // Read the command line options
+    if (getOptions(argc, argv, opt_display, nframes, save, opath) == false) {
+      exit (-1);
+    }
     // Create the grabber
-    grabber = new vpDirectShowGrabber();
+    vpDirectShowGrabber* grabber = new vpDirectShowGrabber();
 
     //test if a camera is connected
     if(grabber->getDeviceNumber() == 0)
@@ -209,29 +208,22 @@ main(int argc, const char ** argv)
 
     // Acquire an image
     grabber->acquire(I);
-  }
-  catch(...)
-  {
-    if (grabber !=NULL) delete grabber;
-    vpCTRACE << "Cannot acquire an image... " << std::endl ;
-    exit(-1);
-  }
 
-  std::cout << "Image size: width : " << I.getWidth() <<  " height: "
-            << I.getHeight() << std::endl;
 
-  // Creates a display
+    std::cout << "Image size: width : " << I.getWidth() <<  " height: "
+              << I.getHeight() << std::endl;
+
+    // Creates a display
 #if defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
 
-  if (opt_display) {
-    display.init(I,100,100,"DirectShow Framegrabber");
-  }
+    if (opt_display) {
+      display.init(I,100,100,"DirectShow Framegrabber");
+    }
 
-  try {
     double tbegin=0, tend=0, tloop=0, ttotal=0;
 
     ttotal = 0;
@@ -242,8 +234,8 @@ main(int argc, const char ** argv)
       grabber->acquire(I);
 
       if (opt_display) {
-	      //Displays the grabbed rgba image
-	      vpDisplay::display(I);
+        //Displays the grabbed rgba image
+        vpDisplay::display(I);
         vpDisplay::flush(I);
       }
 
@@ -264,14 +256,12 @@ main(int argc, const char ** argv)
     std::cout << "Mean frequency: " << 1000./(ttotal / nframes) << " fps" << std::endl;
 
     // Release the framegrabber
-    if (grabber !=NULL) delete grabber;
-
+    delete grabber;
+    return 0;
   }
-  catch(...)
-  {
-    vpCERROR << "Failure: exit" << std::endl;
-    if (grabber !=NULL) delete grabber;
-    return(-1);
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 #else // (defined (VISP_HAVE_GTK) || defined(VISP_HAVE_GDI))
diff --git a/example/device/framegrabber/grabDirectShowMulti.cpp b/example/device/framegrabber/grabDirectShowMulti.cpp
index dcebf89f..312c80a6 100644
--- a/example/device/framegrabber/grabDirectShowMulti.cpp
+++ b/example/device/framegrabber/grabDirectShowMulti.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: grabDirectShowMulti.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: grabDirectShowMulti.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -455,12 +455,12 @@ main(int argc, const char ** argv)
 		if (display)
 			delete [] d;
 
-	}
-	catch (...) {
-		vpCERROR << "Failure: exit" << std::endl;
-	}
-
-	std::cout << " the end" << std::endl;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 #else // (defined (VISP_HAVE_GTK) || defined(VISP_HAVE_GDI))
 
diff --git a/example/device/framegrabber/grabDisk.cpp b/example/device/framegrabber/grabDisk.cpp
index 1ef12c91..f70181d8 100644
--- a/example/device/framegrabber/grabDisk.cpp
+++ b/example/device/framegrabber/grabDisk.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: grabDisk.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: grabDisk.cpp 4659 2014-02-09 14:11:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -44,13 +44,13 @@
 #include <visp/vpDebug.h>
 #include <visp/vpConfig.h>
 #include <stdlib.h>
-#if (defined (VISP_HAVE_X11) || defined(VISP_HAVE_GTK))
+#if (defined (VISP_HAVE_X11) || defined(VISP_HAVE_GDI))
 
 #include <visp/vpDiskGrabber.h>
 #include <visp/vpImage.h>
 #include <visp/vpDisplay.h>
 #include <visp/vpDisplayX.h>
-#include <visp/vpDisplayGTK.h>
+#include <visp/vpDisplayGDI.h>
 #include <visp/vpTime.h>
 #include <visp/vpParseArgv.h>
 
@@ -66,6 +66,12 @@
 // List of allowed command line options
 #define GETOPTARGS	"b:de:f:i:hn:s:z:"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string basename,
+     std::string ext, int first, unsigned int nimages, int step, unsigned int nzero);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &basename,
+                std::string &ext, int &first, unsigned int &nimages,
+                int &step, unsigned int &nzero, bool &display);
+
 /*
 
   Print the program options.
@@ -82,8 +88,7 @@
 
  */
 void usage(const char *name, const char *badparam, std::string ipath, std::string basename,
-	   std::string ext, int first, unsigned int nimages, int step,
-	   unsigned int nzero)
+     std::string ext, int first, unsigned int nimages, int step, unsigned int nzero)
 {
   fprintf(stdout, "\n\
 Read an image sequence from the disk. Display it using X11 or GTK.\n\
@@ -163,25 +168,24 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ba
                 std::string &ext, int &first, unsigned int &nimages,
                 int &step, unsigned int &nzero, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'b': basename = optarg; break;
+    case 'b': basename = optarg_; break;
     case 'd': display = false; break;
-    case 'e': ext = optarg; break;
-    case 'f': first = atoi(optarg); break;
-    case 'i': ipath = optarg; break;
-    case 'n': nimages = (unsigned) atoi(optarg); break;
-    case 's': step = atoi(optarg); break;
-    case 'z': nzero = (unsigned) atoi(optarg); break;
+    case 'e': ext = optarg_; break;
+    case 'f': first = atoi(optarg_); break;
+    case 'i': ipath = optarg_; break;
+    case 'n': nimages = (unsigned) atoi(optarg_); break;
+    case 's': step = atoi(optarg_); break;
+    case 'z': nzero = (unsigned) atoi(optarg_); break;
     case 'h': usage(argv[0], NULL, ipath, basename, ext, first, nimages,
                     step, nzero); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, basename, ext, first, nimages,
-            step, nzero);
+      usage(argv[0], optarg_, ipath, basename, ext, first, nimages, step, nzero);
       return false; break;
     }
   }
@@ -190,7 +194,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ba
     // standalone param or error
     usage(argv[0], NULL, ipath, basename, ext, first, nimages, step, nzero);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -207,112 +211,107 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ba
   images. Each image corresponds to a PGM file. Display these images using X11
   or GTK.
 */
-int
-main(int argc, const char ** argv)
+int main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string opt_basename = "ViSP-images/cube/image.";
-  std::string opt_ext = "pgm";
-  bool opt_display = true;
-
-  int opt_first = 5;
-  unsigned int opt_nimages = 70;
-  int opt_step = 1;
-  unsigned int opt_nzero = 4;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_basename, opt_ext, opt_first,
-                 opt_nimages, opt_step, opt_nzero, opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string opt_basename = "ViSP-images/cube/image.";
+    std::string opt_ext = "pgm";
+    bool opt_display = true;
+
+    int opt_first = 5;
+    unsigned int opt_nimages = 70;
+    int opt_step = 1;
+    unsigned int opt_nzero = 4;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_basename, opt_ext, opt_first,
+                   opt_nimages, opt_step, opt_nzero, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opt_basename, opt_ext, opt_first,
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL, ipath, opt_basename, opt_ext, opt_first,
           opt_nimages, opt_step, opt_nzero);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
+      exit(-1);
+    }
 
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  vpImage<unsigned char> I ;
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    vpImage<unsigned char> I ;
 
 
-  // Declare a framegrabber able to read a sequence of successive
-  // images from the disk
-  vpDiskGrabber g;
+    // Declare a framegrabber able to read a sequence of successive
+    // images from the disk
+    vpDiskGrabber g;
 
-  // Set the path to the directory containing the sequence
-  g.setDirectory(ipath.c_str());
-  // Set the image base name. The directory and the base name constitute
-  // the constant part of the full filename
-  g.setBaseName(opt_basename.c_str());
-  // Set the step between two images of the sequence
-  g.setStep(opt_step);
-  // Set the number of digits to build the image number
-  g.setNumberOfZero(opt_nzero);
-  // Set the first frame number of the sequence
-  g.setImageNumber(opt_first);
-  // Set the image extension
-  g.setExtension(opt_ext.c_str());
+    // Set the path to the directory containing the sequence
+    g.setDirectory(ipath.c_str());
+    // Set the image base name. The directory and the base name constitute
+    // the constant part of the full filename
+    g.setBaseName(opt_basename.c_str());
+    // Set the step between two images of the sequence
+    g.setStep(opt_step);
+    // Set the number of digits to build the image number
+    g.setNumberOfZero(opt_nzero);
+    // Set the first frame number of the sequence
+    g.setImageNumber(opt_first);
+    // Set the image extension
+    g.setExtension(opt_ext.c_str());
 
-  // Open the framegrabber by loading the first image of the sequence
-  try {
+    // Open the framegrabber by loading the first image of the sequence
     g.open(I) ;
-  }
-  catch (...) {
-    vpERROR_TRACE("Cannot open the first image of the sequence... ") ;
-    exit(-1);
-  }
 
-  std::cout << "Image size: width : " << I.getWidth() <<  " height: "
-            << I.getHeight() << std::endl;
+    std::cout << "Image size: width : " << I.getWidth() <<  " height: "
+              << I.getHeight() << std::endl;
 
-  // We open a window using either X11 or GTK.
-  // Its size is automatically defined by the image (I) size
-#if defined VISP_HAVE_X11
-  vpDisplayX display;
-#elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    // We open a window using either X11 or GDI.
+    // Its size is automatically defined by the image (I) size
+#if defined(VISP_HAVE_X11)
+    vpDisplayX display(I);
+#elif defined(VISP_HAVE_GDI)
+    vpDisplayGDI display(I);
+#else
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  if (opt_display) {
-    try {
+    if (opt_display) {
       display.init(I,100,100,"Disk Framegrabber");
 
       // display the image
@@ -323,16 +322,10 @@ main(int argc, const char ** argv)
       vpDisplay::display(I) ;
       vpDisplay::flush(I) ;
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Cannot display the image ") ;
-      exit(-1);
-    }
-  }
 
-  unsigned cpt = 1;
-  // this is the loop over the image sequence
-  try {
+    unsigned cpt = 1;
+    // this is the loop over the image sequence
+
     while(cpt ++ < opt_nimages)
     {
       double tms = vpTime::measureTimeMs();
@@ -347,11 +340,12 @@ main(int argc, const char ** argv)
       }
       // Synchronise the loop to 40 ms
       vpTime::wait(tms, 40) ;
-
     }
+    return 0;
   }
-  catch(...) {
-    vpERROR_TRACE("Error during the framegrabbing...");
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 
diff --git a/example/device/framegrabber/grabOpenCV-2.cpp b/example/device/framegrabber/grabOpenCV-2.cpp
index c7d7e1e8..e6fca745 100644
--- a/example/device/framegrabber/grabOpenCV-2.cpp
+++ b/example/device/framegrabber/grabOpenCV-2.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: grabOpenCV-2.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: grabOpenCV-2.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -65,41 +65,47 @@
 //              1 to dial with a second camera attached to the computer
 int main(int argc, char** argv)
 {
-  int device = 0;
-  if (argc > 1)
-    device = atoi(argv[1]);
-
-  std::cout << "Use device: " << device << std::endl;
-  cv::VideoCapture cap(device); // open the default camera
-  cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
-  cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
-  if(!cap.isOpened())  // check if we succeeded
-    return -1;
-  cv::Mat frame;
-  cap >> frame; // get a new frame from camera
-
-  IplImage iplimage = frame;
-  std::cout << "Image size: " << iplimage.width << " " 
-            << iplimage.height << std::endl;
-
-  //vpImage<vpRGBa> I; // for color images
-  vpImage<unsigned char> I; // for gray images
-  vpImageConvert::convert(&iplimage, I);
-  vpDisplayOpenCV d(I);
-
-  for(;;) {
+  try {
+    int device = 0;
+    if (argc > 1)
+      device = atoi(argv[1]);
+
+    std::cout << "Use device: " << device << std::endl;
+    cv::VideoCapture cap(device); // open the default camera
+    cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
+    cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
+    if(!cap.isOpened())  // check if we succeeded
+      return -1;
+    cv::Mat frame;
     cap >> frame; // get a new frame from camera
-    iplimage = frame;
 
-    // Convert the image in ViSP format and display it 
+    IplImage iplimage = frame;
+    std::cout << "Image size: " << iplimage.width << " "
+              << iplimage.height << std::endl;
+
+    //vpImage<vpRGBa> I; // for color images
+    vpImage<unsigned char> I; // for gray images
     vpImageConvert::convert(&iplimage, I);
-    vpDisplay::display(I);
-    vpDisplay::flush(I);
-    if (vpDisplay::getClick(I, false)) // a click to exit
-      break;
+    vpDisplayOpenCV d(I);
+
+    for(;;) {
+      cap >> frame; // get a new frame from camera
+      iplimage = frame;
+
+      // Convert the image in ViSP format and display it
+      vpImageConvert::convert(&iplimage, I);
+      vpDisplay::display(I);
+      vpDisplay::flush(I);
+      if (vpDisplay::getClick(I, false)) // a click to exit
+        break;
+    }
+    // the camera will be deinitialized automatically in VideoCapture destructor
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  // the camera will be deinitialized automatically in VideoCapture destructor
-  return 0;
 }
 
 #else
diff --git a/example/device/framegrabber/grabOpenCV.cpp b/example/device/framegrabber/grabOpenCV.cpp
index 012d5d4c..2ca991e2 100644
--- a/example/device/framegrabber/grabOpenCV.cpp
+++ b/example/device/framegrabber/grabOpenCV.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: grabOpenCV.cpp 4088 2013-02-04 07:59:35Z fspindle $
+ * $Id: grabOpenCV.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -63,6 +63,10 @@
 // List of allowed command line options
 #define GETOPTARGS	"dhn:o:D:"
 
+void usage(const char *name, const char *badparam, unsigned int &nframes, std::string &opath);
+bool getOptions(int argc, const char **argv, bool &display,
+                unsigned int &nframes, bool &save, std::string &opath, int &deviceType);
+
 /*!
 
   Print the program options.
@@ -126,33 +130,33 @@ OPTIONS:                                               Default\n\
 bool getOptions(int argc, const char **argv, bool &display,
                 unsigned int &nframes, bool &save, std::string &opath, int &deviceType)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'd': display = false; break;
     case 'D':
-      if (strcmp( optarg ,"ANY") == 0 ) {deviceType = CV_CAP_ANY;}
-      else if ( strcmp( optarg ,"MIL") == 0) {deviceType = CV_CAP_MIL;}
-      else if ( strcmp( optarg ,"VFW") == 0) {deviceType = CV_CAP_VFW;}
-      else if ( strcmp( optarg ,"V4L") == 0) {deviceType = CV_CAP_V4L;}
-      else if ( strcmp( optarg ,"V4L2") == 0) {deviceType = CV_CAP_V4L2;}
-      else if ( strcmp( optarg ,"DC1394") == 0) {deviceType = CV_CAP_DC1394;}
-      else if ( strcmp( optarg ,"CMU1394") == 0) {deviceType = CV_CAP_CMU1394;}
-      else if ( strcmp( optarg ,"DSHOW") == 0) {deviceType = CV_CAP_DSHOW;}
+      if (strcmp( optarg_ ,"ANY") == 0 ) {deviceType = CV_CAP_ANY;}
+      else if ( strcmp( optarg_ ,"MIL") == 0) {deviceType = CV_CAP_MIL;}
+      else if ( strcmp( optarg_ ,"VFW") == 0) {deviceType = CV_CAP_VFW;}
+      else if ( strcmp( optarg_ ,"V4L") == 0) {deviceType = CV_CAP_V4L;}
+      else if ( strcmp( optarg_ ,"V4L2") == 0) {deviceType = CV_CAP_V4L2;}
+      else if ( strcmp( optarg_ ,"DC1394") == 0) {deviceType = CV_CAP_DC1394;}
+      else if ( strcmp( optarg_ ,"CMU1394") == 0) {deviceType = CV_CAP_CMU1394;}
+      else if ( strcmp( optarg_ ,"DSHOW") == 0) {deviceType = CV_CAP_DSHOW;}
       else {std::cout << "Unknown type of device" << std::endl;
 	      deviceType = 0;}
       break;
     case 'n':
-      nframes = (unsigned int)atoi(optarg); break;
+      nframes = (unsigned int)atoi(optarg_); break;
     case 'o':
       save = true;
-      opath = optarg; break;
+      opath = optarg_; break;
     case 'h': usage(argv[0], NULL, nframes, opath); return false; break;
 
     default:
-      usage(argv[0], optarg, nframes, opath);
+      usage(argv[0], optarg_, nframes, opath);
       return false; break;
     }
   }
@@ -161,7 +165,7 @@ bool getOptions(int argc, const char **argv, bool &display,
     // standalone param or error
     usage(argv[0], NULL, nframes, opath);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -179,71 +183,71 @@ bool getOptions(int argc, const char **argv, bool &display,
 int
 main(int argc, const char ** argv)
 {
-  bool opt_display = true;
-  unsigned nframes = 50;
-  bool save = false;
-  int deviceType = CV_CAP_ANY;
+  try {
+    bool opt_display = true;
+    unsigned nframes = 50;
+    bool save = false;
+    int deviceType = CV_CAP_ANY;
 
-  // Declare an image. It size is not defined yet. It will be defined when the
-  // image will acquired the first time.
+    // Declare an image. It size is not defined yet. It will be defined when the
+    // image will acquired the first time.
 #ifdef GRAB_COLOR
-  vpImage<vpRGBa> I; // This is a color image (in RGBa format)
+    vpImage<vpRGBa> I; // This is a color image (in RGBa format)
 #else
-  vpImage<unsigned char> I; // This is a B&W image
+    vpImage<unsigned char> I; // This is a B&W image
 #endif
 
-  // Set default output image name for saving
+    // Set default output image name for saving
 #ifdef GRAB_COLOR
-  // Color images will be saved in PGM P6 format
-#  if defined(UNIX)
-  std::string opath = "/tmp/I%04d.ppm";
-#  elif defined(WIN32)
-  std::string opath = "C:/temp/I%04d.ppm";
+    // Color images will be saved in PGM P6 format
+#  if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
+    std::string opath = "/tmp/I%04d.ppm";
+#  elif defined(_WIN32)
+    std::string opath = "C:/temp/I%04d.ppm";
 #  endif
 #else
-  // B&W images will be saved in PGM P5 format
-#  if defined(UNIX)
-  std::string opath = "/tmp/I%04d.pgm";
-#  elif defined(WIN32)
-  std::string opath = "C:/temp/I%04d.pgm";
+    // B&W images will be saved in PGM P5 format
+#  if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
+    std::string opath = "/tmp/I%04d.pgm";
+#  elif defined(_WIN32)
+    std::string opath = "C:/temp/I%04d.pgm";
 #  endif
 #endif
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_display, nframes, save, opath, deviceType) == false) {
-    exit (-1);
-  }
-  // Create the grabber
-  vpOpenCVGrabber grabber ;
-  try {
-    // Set the type of device to detect. Here for example we expect to find a firewire camera.
-    grabber.setDeviceType(deviceType);
+    // Read the command line options
+    if (getOptions(argc, argv, opt_display, nframes, save, opath, deviceType) == false) {
+      exit (-1);
+    }
+    // Create the grabber
+    vpOpenCVGrabber grabber ;
+    try {
+      // Set the type of device to detect. Here for example we expect to find a firewire camera.
+      grabber.setDeviceType(deviceType);
 
-    // Initialize the grabber
-    grabber.open(I);
+      // Initialize the grabber
+      grabber.open(I);
 
-    // Acquire an image
-    grabber.acquire(I);
-  }
-  catch(...)
-  {
-    vpCTRACE << "Cannot acquire an image... " 
-             << "Check if a camera is connected to your computer."
-             << std::endl ;
-    return 0;
-  }
+      // Acquire an image
+      grabber.acquire(I);
+    }
+    catch(...)
+    {
+      vpCTRACE << "Cannot acquire an image... "
+               << "Check if a camera is connected to your computer."
+               << std::endl ;
+      return 0;
+    }
 
-  std::cout << "Image size: width : " << I.getWidth() <<  " height: "
-            << I.getHeight() << std::endl;
+    std::cout << "Image size: width : " << I.getWidth() <<  " height: "
+              << I.getHeight() << std::endl;
 
-  // Creates a display
-  vpDisplayOpenCV display;
+    // Creates a display
+    vpDisplayOpenCV display;
 
-  if (opt_display) {
-    display.init(I,100,100,"OpenCV framegrabber");
-  }
+    if (opt_display) {
+      display.init(I,100,100,"OpenCV framegrabber");
+    }
 
-  try {
     double tbegin=0, tend=0, tloop=0, ttotal=0;
 
     ttotal = 0;
@@ -275,11 +279,11 @@ main(int argc, const char ** argv)
     std::cout << "Mean loop time: " << ttotal / nframes << " ms" << std::endl;
     std::cout << "Mean frequency: " << 1000./(ttotal / nframes) << " fps" << std::endl;
 
+    return 0;
   }
-  catch(...)
-  {
-    vpCERROR << "Failure: exit" << std::endl;
-    return(-1);
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 #else // defined (VISP_HAVE_OPENCV) 
diff --git a/example/device/framegrabber/grabV4l2.cpp b/example/device/framegrabber/grabV4l2.cpp
index 3ed234a4..51bbf5e2 100644
--- a/example/device/framegrabber/grabV4l2.cpp
+++ b/example/device/framegrabber/grabV4l2.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: grabV4l2.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: grabV4l2.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -235,39 +235,39 @@ bool getOptions(int argc, const char **argv, unsigned &fps, unsigned &input,
 int
 main(int argc, const char ** argv)
 {
-  unsigned int opt_fps = 25;
-  unsigned int opt_input = 0;
-  unsigned int opt_scale = 1;
-  vpV4l2Grabber::vpV4l2PixelFormatType opt_pixelformat = vpV4l2Grabber::V4L2_YUYV_FORMAT;
-  long opt_iter = 100;
-  bool opt_verbose = false;
-  bool opt_display = true;
-  char opt_device[20];
-  bool opt_save = false;
-  sprintf(opt_device, "/dev/video0");
-  // Default output path for image saving
-  std::string opt_opath = "/tmp/I%04d.ppm";
-
-  vpImage_type opt_image_type = color_image;
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_fps, opt_input, opt_scale, opt_display, 
-                 opt_verbose, opt_iter, opt_device,
-                 opt_pixelformat, opt_image_type, opt_save, opt_opath) == false) {
-    exit (-1);
-  }
+  try {
+    unsigned int opt_fps = 25;
+    unsigned int opt_input = 0;
+    unsigned int opt_scale = 1;
+    vpV4l2Grabber::vpV4l2PixelFormatType opt_pixelformat = vpV4l2Grabber::V4L2_YUYV_FORMAT;
+    long opt_iter = 100;
+    bool opt_verbose = false;
+    bool opt_display = true;
+    char opt_device[20];
+    bool opt_save = false;
+    sprintf(opt_device, "/dev/video0");
+    // Default output path for image saving
+    std::string opt_opath = "/tmp/I%04d.ppm";
+
+    vpImage_type opt_image_type = color_image;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_fps, opt_input, opt_scale, opt_display,
+                   opt_verbose, opt_iter, opt_device,
+                   opt_pixelformat, opt_image_type, opt_save, opt_opath) == false) {
+      exit (-1);
+    }
 
-  // Declare an image, this is a gray level image (unsigned char) and
-  // an other one that is a color image. There size is not defined
-  // yet. It will be defined when the image will acquired the first
-  // time.
-  vpImage<unsigned char> Ig ; // grey level image
-  vpImage<vpRGBa> Ic ; // color image
+    // Declare an image, this is a gray level image (unsigned char) and
+    // an other one that is a color image. There size is not defined
+    // yet. It will be defined when the image will acquired the first
+    // time.
+    vpImage<unsigned char> Ig ; // grey level image
+    vpImage<vpRGBa> Ic ; // color image
 
-  // Creates the grabber
-  vpV4l2Grabber g;
+    // Creates the grabber
+    vpV4l2Grabber g;
 
-  try{
     // Initialize the grabber
     g.setVerboseMode(opt_verbose);
     g.setDevice(opt_device);
@@ -294,28 +294,17 @@ main(int argc, const char ** argv)
       std::cout << "Color image size: width : " << Ic.getWidth() <<  " height: "
                 << Ic.getHeight() << std::endl;
     }
-  }
-  catch (vpException e) {
-    std::cout << "Catched exception: " << e.getMessage() << std::endl;
-    return 0;
-  }
-  catch(...)
-  {
-    vpERROR_TRACE("Cannot acquire an image...") ;
-    return 0;
-  }
 
 
-  // We open a window using either X11 or GTK.
-  // Its size is automatically defined by the image (I) size
+    // We open a window using either X11 or GTK.
+    // Its size is automatically defined by the image (I) size
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #endif
 
-  if (opt_display) {
-    try{
+    if (opt_display) {
       // Display the image
       // The image class has a member that specify a pointer toward
       // the display that has been initialized in the display declaration
@@ -331,18 +320,7 @@ main(int argc, const char ** argv)
         vpDisplay::display(Ic) ;
         vpDisplay::flush(Ic) ;
       }
-
     }
-    catch (vpException e) {
-      std::cout << "Exception: " << e.getMessage() << std::endl;
-    }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
-  try {
     // Acquisition loop
     long cpt = 1;
     while(cpt ++ < opt_iter)
@@ -387,12 +365,12 @@ main(int argc, const char ** argv)
     }
 
     g.close();
+    return 0;
   }
-  catch (vpException e) {
-    std::cout << "Exception: " << e.getMessage() << std::endl;
-    g.close();
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-
 }
 #else
 int
diff --git a/example/device/kinect/CMakeLists.txt b/example/device/kinect/CMakeLists.txt
index 82b76841..3df40641 100644
--- a/example/device/kinect/CMakeLists.txt
+++ b/example/device/kinect/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/device/kinect/kinectAcquisition.cpp b/example/device/kinect/kinectAcquisition.cpp
index 391bda7f..695fdbfb 100644
--- a/example/device/kinect/kinectAcquisition.cpp
+++ b/example/device/kinect/kinectAcquisition.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: kinectAcquisition.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: kinectAcquisition.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -64,62 +64,63 @@
 #include <visp/vpTime.h>
 
 int main() {
-  // Init Kinect
+  try {
+    // Init Kinect
 #ifdef VISP_HAVE_LIBFREENECT_OLD
-  // This is the way to initialize Freenect with an old version of libfreenect packages under ubuntu lucid 10.04
-  Freenect::Freenect<vpKinect> freenect;
-  vpKinect & kinect = freenect.createDevice(0);
+    // This is the way to initialize Freenect with an old version of libfreenect packages under ubuntu lucid 10.04
+    Freenect::Freenect<vpKinect> freenect;
+    vpKinect & kinect = freenect.createDevice(0);
 #else
-  Freenect::Freenect freenect;
-  vpKinect & kinect = freenect.createDevice<vpKinect>(0);
+    Freenect::Freenect freenect;
+    vpKinect & kinect = freenect.createDevice<vpKinect>(0);
 #endif
 
-  // Set tilt angle in degrees
-  if (0) {
-    float angle = -3;
-    kinect.setTiltDegrees(angle);
-  }
+    // Set tilt angle in degrees
+    if (0) {
+      float angle = -3;
+      kinect.setTiltDegrees(angle);
+    }
 
-  // Init display
+    // Init display
 #if 1
-  kinect.start(vpKinect::DMAP_MEDIUM_RES); // Start acquisition thread with a depth map resolution of 480x640
-  vpImage<unsigned char> Idmap(480,640);//for medium resolution
-  vpImage<float> dmap(480,640);//for medium resolution
+    kinect.start(vpKinect::DMAP_MEDIUM_RES); // Start acquisition thread with a depth map resolution of 480x640
+    vpImage<unsigned char> Idmap(480,640);//for medium resolution
+    vpImage<float> dmap(480,640);//for medium resolution
 #else
-  kinect.start(vpKinect::DMAP_LOW_RES); // Start acquisition thread with a depth map resolution of 240x320 (default resolution)
-  vpImage<unsigned char> Idmap(240,320);//for low resolution
-  vpImage<float> dmap(240,320);//for low resolution
+    kinect.start(vpKinect::DMAP_LOW_RES); // Start acquisition thread with a depth map resolution of 240x320 (default resolution)
+    vpImage<unsigned char> Idmap(240,320);//for low resolution
+    vpImage<float> dmap(240,320);//for low resolution
 #endif
-  vpImage<vpRGBa> Irgb(480,640),Iwarped(480,640);
+    vpImage<vpRGBa> Irgb(480,640),Iwarped(480,640);
 
 #if defined VISP_HAVE_X11
-  vpDisplayX display, displayRgb, displayRgbWarped;
+    vpDisplayX display, displayRgb, displayRgbWarped;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
-  vpDisplayGTK displayRgb;
-  vpDisplayGTK displayRgbWarped;
+    vpDisplayGTK display;
+    vpDisplayGTK displayRgb;
+    vpDisplayGTK displayRgbWarped;
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV display;
-  vpDisplayOpenCV displayRgb;
-  vpDisplayOpenCV displayRgbWarped;
+    vpDisplayOpenCV display;
+    vpDisplayOpenCV displayRgb;
+    vpDisplayOpenCV displayRgbWarped;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
-  vpDisplayGDI displayRgb;
-  vpDisplayGDI displayRgbWarped;
+    vpDisplayGDI display;
+    vpDisplayGDI displayRgb;
+    vpDisplayGDI displayRgbWarped;
 #endif
 
-  display.init(Idmap, 100, 200,"Depth map");
-  displayRgb.init(Irgb, 900, 200,"Color Image");
-  displayRgbWarped.init(Iwarped,900,700,"Warped Color Image");
+    display.init(Idmap, 100, 200,"Depth map");
+    displayRgb.init(Irgb, 900, 200,"Color Image");
+    displayRgbWarped.init(Iwarped,900,700,"Warped Color Image");
 
-  // A click to stop acquisition
-  std::cout << "Click in one image to stop acquisition" << std::endl;
+    // A click to stop acquisition
+    std::cout << "Click in one image to stop acquisition" << std::endl;
 
-  while(!vpDisplay::getClick(Idmap,false) && !vpDisplay::getClick(Irgb,false))
-  {
-    kinect.getDepthMap(dmap);
-    kinect.getDepthMap(dmap, Idmap);
-    kinect.getRGB(Irgb);
+    while(!vpDisplay::getClick(Idmap,false) && !vpDisplay::getClick(Irgb,false))
+    {
+      kinect.getDepthMap(dmap);
+      kinect.getDepthMap(dmap, Idmap);
+      kinect.getRGB(Irgb);
 
       vpDisplay::display(Idmap);
       vpDisplay::flush(Idmap);
@@ -128,12 +129,21 @@ int main() {
 
       //Warped RGB image:
       kinect.warpRGBFrame(Irgb,dmap, Iwarped);
-	  vpDisplay::display(Iwarped);
-	  vpDisplay::flush(Iwarped);
-     }
-  std::cout << "Stop acquisition" << std::endl;
-  kinect.stop(); // Stop acquisition thread
-  return 0;
+      vpDisplay::display(Iwarped);
+      vpDisplay::flush(Iwarped);
+    }
+    std::cout << "Stop acquisition" << std::endl;
+    kinect.stop(); // Stop acquisition thread
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
+  catch(...) {
+    std::cout << "Catch an exception " << std::endl;
+    return 1;
+  }
 }
 
 #else
diff --git a/example/device/laserscanner/CMakeLists.txt b/example/device/laserscanner/CMakeLists.txt
index 192ea37e..4f8e78d6 100644
--- a/example/device/laserscanner/CMakeLists.txt
+++ b/example/device/laserscanner/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/device/laserscanner/SickLDMRS-Acq.cpp b/example/device/laserscanner/SickLDMRS-Acq.cpp
index bf81bbbd..940a7ac0 100644
--- a/example/device/laserscanner/SickLDMRS-Acq.cpp
+++ b/example/device/laserscanner/SickLDMRS-Acq.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: SickLDMRS-Acq.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: SickLDMRS-Acq.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -55,28 +55,34 @@
 #include <visp/vpParseArgv.h>
 
 
-#if ( defined(UNIX) && ( ! defined(WIN32) ) )
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
 
 int main()
 {
-  vpSickLDMRS laser;
-  std::string ip = "131.254.12.119";
-  
-  laser.setIpAddress(ip);
-  laser.setup();
-  unsigned long int iter = 0;
+  try {
+    vpSickLDMRS laser;
+    std::string ip = "131.254.12.119";
 
-  for ( ; ; ) {
-    double t1 = vpTime::measureTimeMs();
-    vpLaserScan laserscan[4];
-    if (laser.measure(laserscan) == false)
-      continue;
-    
-    iter ++;
-    std::cout << "iter: " << iter << " time: " 
-              << vpTime::measureTimeMs() - t1 << " ms" << std::endl;
+    laser.setIpAddress(ip);
+    laser.setup();
+    unsigned long int iter = 0;
+
+    for ( ; ; ) {
+      double t1 = vpTime::measureTimeMs();
+      vpLaserScan laserscan[4];
+      if (laser.measure(laserscan) == false)
+        continue;
+
+      iter ++;
+      std::cout << "iter: " << iter << " time: "
+                << vpTime::measureTimeMs() - t1 << " ms" << std::endl;
+    }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  return 0;
 }
 
 #else // #ifdef UNIX
diff --git a/example/device/laserscanner/SickLDMRS-Process.cpp b/example/device/laserscanner/SickLDMRS-Process.cpp
index c4f43b9b..9a2ad7ba 100644
--- a/example/device/laserscanner/SickLDMRS-Process.cpp
+++ b/example/device/laserscanner/SickLDMRS-Process.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: SickLDMRS-Process.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: SickLDMRS-Process.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -74,7 +74,7 @@
 #include <visp/vp1394TwoGrabber.h>
 #include <visp/vpIoTools.h>
  
-#if ( defined(UNIX) && ( ! defined(WIN32) ) ) && (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_GTK)) 
+#if ( !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) ) && (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_GTK))
 
 static int save = 0;
 static int layerToDisplay = 0xF; // 0xF = 1111 => all the layers are selected
@@ -85,6 +85,9 @@ pthread_mutex_t shm_mutex;
 #endif
 std::string output_path;
 
+void *laser_display_and_save_loop(void *);
+void *laser_acq_loop(void *);
+void *camera_acq_and_display_loop(void *);
 
 void *laser_display_and_save_loop(void *)
 {
@@ -307,60 +310,66 @@ void *camera_acq_and_display_loop(void *)
 
 int main(int argc, const char ** argv)
 {
-  output_path = "data";
-  // Test if the output path directory exist. If no try to create it
-  if (vpIoTools::checkDirectory(output_path) == false) {
-    try {
-      // Create a directory with name "username"
-      vpIoTools::makeDirectory(output_path);
+  try {
+    output_path = "data";
+    // Test if the output path directory exist. If no try to create it
+    if (vpIoTools::checkDirectory(output_path) == false) {
+      try {
+        // Create a directory with name "username"
+        vpIoTools::makeDirectory(output_path);
+      }
+      catch (...) {
+        std::cout << "Cannot create " << output_path << " directory" << std::endl;
+        return false;
+      }
     }
-    catch (...) {
-      std::cout << "Cannot create " << output_path << " directory" << std::endl;
-      return false;
+
+    // Parse the command line to set the variables
+    vpParseArgv::vpArgvInfo argTable[] =
+    {
+      {"-layer", vpParseArgv::ARGV_INT, (char*) NULL, (char *) &layerToDisplay,
+       "The layer to display:\n"
+       "\t\t. 0x1 for layer 1.\n"
+       "\t\t. 0x2 for layer 2.\n"
+       "\t\t. 0x4 for layer 3.\n"
+       "\t\t. 0x8 for layer 4.\n"
+       "\t\tTo display all the layers you should set 0xF value."
+      },
+      {"-save", vpParseArgv::ARGV_INT, (char*) NULL, (char *) &save,
+       "Turn to 1 in order to save data."
+      },
+      {"-h", vpParseArgv::ARGV_HELP, (char*) NULL, (char *) NULL,
+       "Display one or more measured layers form a Sick LD-MRS laser scanner."},
+      {(char*) NULL, vpParseArgv::ARGV_END, (char*) NULL, (char*) NULL, (char*) NULL}
+    } ;
+
+    // Read the command line options
+    if(vpParseArgv::parse(&argc, argv, argTable,
+                          vpParseArgv::ARGV_NO_LEFTOVERS |
+                          vpParseArgv::ARGV_NO_ABBREV |
+                          vpParseArgv::ARGV_NO_DEFAULTS)) {
+      return (false);
     }
-  }
 
-  // Parse the command line to set the variables
-  vpParseArgv::vpArgvInfo argTable[] =
-  {
-    {"-layer", vpParseArgv::ARGV_INT, (char*) NULL, (char *) &layerToDisplay,
-     "The layer to display:\n"
-     "\t\t. 0x1 for layer 1.\n"
-     "\t\t. 0x2 for layer 2.\n"
-     "\t\t. 0x4 for layer 3.\n"
-     "\t\t. 0x8 for layer 4.\n"
-     "\t\tTo display all the layers you should set 0xF value."
-    },
-    {"-save", vpParseArgv::ARGV_INT, (char*) NULL, (char *) &save,
-     "Turn to 1 in order to save data."
-    },
-    {"-h", vpParseArgv::ARGV_HELP, (char*) NULL, (char *) NULL,
-     "Display one or more measured layers form a Sick LD-MRS laser scanner."},
-    {(char*) NULL, vpParseArgv::ARGV_END, (char*) NULL, (char*) NULL, (char*) NULL}
-  } ;
-
-  // Read the command line options
-  if(vpParseArgv::parse(&argc, argv, argTable, 
-                        vpParseArgv::ARGV_NO_LEFTOVERS |
-                        vpParseArgv::ARGV_NO_ABBREV |
-                        vpParseArgv::ARGV_NO_DEFAULTS)) {
-    return (false);
-  }
-  
-  time_offset = vpTime::measureTimeSecond();
+    time_offset = vpTime::measureTimeSecond();
 #ifdef VISP_HAVE_PTHREAD
-  pthread_t thread_camera_acq;
-  pthread_t thread_laser_acq;
-  pthread_t thread_laser_display;
-  pthread_create(&thread_camera_acq, NULL, &camera_acq_and_display_loop, NULL);
-  pthread_create(&thread_laser_acq, NULL, &laser_acq_loop, NULL);
-  pthread_create(&thread_laser_display, NULL, &laser_display_and_save_loop, NULL);
-  pthread_join(thread_camera_acq, 0);
-  pthread_join(thread_laser_acq, 0);
-  pthread_join(thread_laser_display, 0);
+    pthread_t thread_camera_acq;
+    pthread_t thread_laser_acq;
+    pthread_t thread_laser_display;
+    pthread_create(&thread_camera_acq, NULL, &camera_acq_and_display_loop, NULL);
+    pthread_create(&thread_laser_acq, NULL, &laser_acq_loop, NULL);
+    pthread_create(&thread_laser_display, NULL, &laser_display_and_save_loop, NULL);
+    pthread_join(thread_camera_acq, 0);
+    pthread_join(thread_laser_acq, 0);
+    pthread_join(thread_laser_display, 0);
 #endif
 
-  return 0;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 #else // #ifdef UNIX and display
diff --git a/example/device/light/CMakeLists.txt b/example/device/light/CMakeLists.txt
index 52bbd0db..ca12b775 100644
--- a/example/device/light/CMakeLists.txt
+++ b/example/device/light/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/device/light/ringLight.cpp b/example/device/light/ringLight.cpp
index f9307a29..324ea038 100644
--- a/example/device/light/ringLight.cpp
+++ b/example/device/light/ringLight.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: ringLight.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: ringLight.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -166,15 +166,15 @@ bool getOptions(int argc, const char **argv, bool &on, int &nsec, double &nmsec)
 int
 main(int argc, const char **argv)
 {
-  bool on = false;
-  int nsec = 5; // Time while the ring light is turned on
-  double nmsec = 0; // Pulse duration
-
-  // Read the command line options
-  if (getOptions(argc, argv, on, nsec, nmsec) == false) {
-    exit (-1);
-  }
   try {
+    bool on = false;
+    int nsec = 5; // Time while the ring light is turned on
+    double nmsec = 0; // Pulse duration
+
+    // Read the command line options
+    if (getOptions(argc, argv, on, nsec, nmsec) == false) {
+      exit (-1);
+    }
 
     vpRingLight light;
 
diff --git a/example/direct-visual-servoing/CMakeLists.txt b/example/direct-visual-servoing/CMakeLists.txt
index 1df6f762..f70cd77e 100644
--- a/example/direct-visual-servoing/CMakeLists.txt
+++ b/example/direct-visual-servoing/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/direct-visual-servoing/photometricVisualServoing.cpp b/example/direct-visual-servoing/photometricVisualServoing.cpp
index 2027f649..1686d88f 100755
--- a/example/direct-visual-servoing/photometricVisualServoing.cpp
+++ b/example/direct-visual-servoing/photometricVisualServoing.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: photometricVisualServoing.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: photometricVisualServoing.cpp 4664 2014-02-16 16:17:54Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -41,10 +41,7 @@
 /*!
   \example photometricVisualServoing.cpp
 
-  Implemented from C. Collewet, E. Marchand, F. Chaumette. Visual
-  servoing set free from image processing. In IEEE Int. Conf. on
-  Robotics and Automation, ICRA'08, Pages 81-86, Pasadena, Californie,
-  Mai 2008.
+  Implemented from \cite Collewet08c.
 */
 
 
@@ -79,6 +76,10 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:n:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, int niter);
+bool getOptions(int argc, const char **argv, std::string &ipath,
+                bool &click_allowed, bool &display, int &niter);
+
 /*!
 
   Print the program options.
@@ -141,19 +142,19 @@ OPTIONS:                                               Default\n\
 bool getOptions(int argc, const char **argv, std::string &ipath,
                 bool &click_allowed, bool &display, int &niter)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
-    case 'n': niter = atoi(optarg); break;
+    case 'i': ipath = optarg_; break;
+    case 'n': niter = atoi(optarg_); break;
     case 'h': usage(argv[0], NULL, ipath, niter); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, niter);
+      usage(argv[0], optarg_, ipath, niter);
       return false; break;
     }
   }
@@ -162,7 +163,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
     // standalone param or error
     usage(argv[0], NULL, ipath, niter);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -174,321 +175,328 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string filename;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-  int opt_niter = 400;
-  
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_click_allowed,
-                 opt_display, opt_niter) == false) {
-    return (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string filename;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+    int opt_niter = 400;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_click_allowed,
+                   opt_display, opt_niter) == false) {
+      return (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opt_niter);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL, ipath, opt_niter);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
+      exit(-1);
+    }
+
+    vpImage<unsigned char> Itexture ;
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+    vpImageIo::read(Itexture,filename) ;
+
+    vpColVector X[4];
+    for (int i = 0; i < 4; i++) X[i].resize(3);
+    // Top left corner
+    X[0][0] = -0.3;
+    X[0][1] = -0.215;
+    X[0][2] = 0;
+
+    // Top right corner
+    X[1][0] = 0.3;
+    X[1][1] = -0.215;
+    X[1][2] = 0;
+
+    // Bottom right corner
+    X[2][0] = 0.3;
+    X[2][1] = 0.215;
+    X[2][2] = 0;
+
+    //Bottom left corner
+    X[3][0] = -0.3;
+    X[3][1] = 0.215;
+    X[3][2] = 0;
+
+    vpImageSimulator sim;
+
+    sim.setInterpolationType(vpImageSimulator::BILINEAR_INTERPOLATION) ;
+    sim.init(Itexture, X);
+
+
+
 
-  vpImage<unsigned char> Itexture ;
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-  vpImageIo::read(Itexture,filename) ;
-
-  vpColVector X[4];
-  for (int i = 0; i < 4; i++) X[i].resize(3);
-  // Top left corner
-  X[0][0] = -0.3;
-  X[0][1] = -0.215;
-  X[0][2] = 0;
-  
-  // Top right corner
-  X[1][0] = 0.3;
-  X[1][1] = -0.215;
-  X[1][2] = 0;
-  
-  // Bottom right corner
-  X[2][0] = 0.3;
-  X[2][1] = 0.215;
-  X[2][2] = 0;
-  
-  //Bottom left corner
-  X[3][0] = -0.3;
-  X[3][1] = 0.215;
-  X[3][2] = 0;
-
-  vpImageSimulator sim;
-
-  sim.setInterpolationType(vpImageSimulator::BILINEAR_INTERPOLATION) ;
-  sim.init(Itexture, X);
-
-
-
-  
-  vpCameraParameters cam(870, 870, 160, 120);
-
-  // ----------------------------------------------------------
-  // Create the framegraber (here a simulated image)
-  vpImage<unsigned char> I(240,320,0) ;
-  vpImage<unsigned char> Id ;
-
-  //camera desired position
-  vpHomogeneousMatrix cdMo ;
-  cdMo[2][3] = 1 ;
-
-  //set the robot at the desired position
-  sim.setCameraPosition(cdMo) ;
-  sim.getImage(I,cam);  // and aquire the image Id
-  Id = I ;
-
-
-  // display the image
+    vpCameraParameters cam(870, 870, 160, 120);
+
+    // ----------------------------------------------------------
+    // Create the framegraber (here a simulated image)
+    vpImage<unsigned char> I(240,320,0) ;
+    vpImage<unsigned char> Id ;
+
+    //camera desired position
+    vpHomogeneousMatrix cdMo ;
+    cdMo[2][3] = 1 ;
+
+    //set the robot at the desired position
+    sim.setCameraPosition(cdMo) ;
+    sim.getImage(I,cam);  // and aquire the image Id
+    Id = I ;
+
+
+    // display the image
 #if defined VISP_HAVE_X11
-  vpDisplayX d;
+    vpDisplayX d;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI d;
+    vpDisplayGDI d;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK d;
+    vpDisplayGTK d;
 #endif
 
 #if defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_GTK) 
-  if (opt_display) {
-    d.init(I, 20, 10, "Photometric visual servoing : s") ;
-    vpDisplay::display(I);
-    vpDisplay::flush(I);
-  }
-  if (opt_display && opt_click_allowed) {
-    std::cout << "Click in the image to continue..." << std::endl;
-    vpDisplay::getClick(I) ;
-  }
+    if (opt_display) {
+      d.init(I, 20, 10, "Photometric visual servoing : s") ;
+      vpDisplay::display(I);
+      vpDisplay::flush(I);
+    }
+    if (opt_display && opt_click_allowed) {
+      std::cout << "Click in the image to continue..." << std::endl;
+      vpDisplay::getClick(I) ;
+    }
 #endif
 
 
-  // ----------------------------------------------------------
-  // position the robot at the initial position
-  // ----------------------------------------------------------
+    // ----------------------------------------------------------
+    // position the robot at the initial position
+    // ----------------------------------------------------------
+
+    //camera desired position
+    vpHomogeneousMatrix cMo ;
+    cMo.buildFrom(0,0,1.2,vpMath::rad(15),vpMath::rad(-5),vpMath::rad(20));
+
+    //set the robot at the desired position
+    sim.setCameraPosition(cMo) ;
+    I =0 ;
+    sim.getImage(I,cam);  // and aquire the image Id
 
-  //camera desired position
-  vpHomogeneousMatrix cMo ;
-  cMo.buildFrom(0,0,1.2,vpMath::rad(15),vpMath::rad(-5),vpMath::rad(20));
-  
-  //set the robot at the desired position
-  sim.setCameraPosition(cMo) ;
-  I =0 ;
-  sim.getImage(I,cam);  // and aquire the image Id
-  
 #if defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_GTK) 
-  if (opt_display) {
-    vpDisplay::display(I) ;
-    vpDisplay::flush(I) ;
-  }
-  if (opt_display && opt_click_allowed) {
-    std::cout << "Click in the image to continue..." << std::endl;
-    vpDisplay::getClick(I) ;
-  }
+    if (opt_display) {
+      vpDisplay::display(I) ;
+      vpDisplay::flush(I) ;
+    }
+    if (opt_display && opt_click_allowed) {
+      std::cout << "Click in the image to continue..." << std::endl;
+      vpDisplay::getClick(I) ;
+    }
 #endif  
 
-  vpImage<unsigned char> Idiff ;
-  Idiff = I ;
+    vpImage<unsigned char> Idiff ;
+    Idiff = I ;
 
 
-  vpImageTools::imageDifference(I,Id,Idiff) ;
+    vpImageTools::imageDifference(I,Id,Idiff) ;
 
 
-  // Affiche de l'image de difference
+    // Affiche de l'image de difference
 #if defined VISP_HAVE_X11
-  vpDisplayX d1;
+    vpDisplayX d1;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI d1;
+    vpDisplayGDI d1;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK d1;
+    vpDisplayGTK d1;
 #endif
 #if defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_GTK) 
-  if (opt_display) {
-    d1.init(Idiff, 40+(int)I.getWidth(), 10, "photometric visual servoing : s-s* ") ;
-    vpDisplay::display(Idiff) ;
-    vpDisplay::flush(Idiff) ;
-  }
+    if (opt_display) {
+      d1.init(Idiff, 40+(int)I.getWidth(), 10, "photometric visual servoing : s-s* ") ;
+      vpDisplay::display(Idiff) ;
+      vpDisplay::flush(Idiff) ;
+    }
 #endif
-  // create the robot (here a simulated free flying camera)
-  vpRobotCamera robot ;
-  robot.setSamplingTime(0.04);
-  robot.setPosition(cMo) ;
+    // create the robot (here a simulated free flying camera)
+    vpRobotCamera robot ;
+    robot.setSamplingTime(0.04);
+    robot.setPosition(cMo) ;
+
+    // ------------------------------------------------------
+    // Visual feature, interaction matrix, error
+    // s, Ls, Lsd, Lt, Lp, etc
+    // ------------------------------------------------------
+
+    // current visual feature built from the image
+    // (actually, this is the image...)
+    vpFeatureLuminance sI ;
+    sI.init( I.getHeight(), I.getWidth(), Z) ;
+    sI.setCameraParameters(cam) ;
+    sI.buildFrom(I) ;
+
 
-  // ------------------------------------------------------
-  // Visual feature, interaction matrix, error
-  // s, Ls, Lsd, Lt, Lp, etc
-  // ------------------------------------------------------
+    // desired visual feature built from the image
+    vpFeatureLuminance sId ;
+    sId.init(I.getHeight(), I.getWidth(),  Z) ;
+    sId.setCameraParameters(cam) ;
+    sId.buildFrom(Id) ;
 
-  // current visual feature built from the image 
-  // (actually, this is the image...)
-  vpFeatureLuminance sI ;
-  sI.init( I.getHeight(), I.getWidth(), Z) ;
-  sI.setCameraParameters(cam) ;
-  sI.buildFrom(I) ;
-  
 
-  // desired visual feature built from the image 
-  vpFeatureLuminance sId ;
-  sId.init(I.getHeight(), I.getWidth(),  Z) ;
-  sId.setCameraParameters(cam) ;
-  sId.buildFrom(Id) ;
 
+    // Matrice d'interaction, Hessien, erreur,...
+    vpMatrix Lsd;   // matrice d'interaction a la position desiree
+    vpMatrix Hsd;  // hessien a la position desiree
+    vpMatrix H ; // Hessien utilise pour le levenberg-Marquartd
+    vpColVector error ; // Erreur I-I*
 
-  
-  // Matrice d'interaction, Hessien, erreur,...
-  vpMatrix Lsd;   // matrice d'interaction a la position desiree
-  vpMatrix Hsd;  // hessien a la position desiree
-  vpMatrix H ; // Hessien utilise pour le levenberg-Marquartd
-  vpColVector error ; // Erreur I-I*
+    // Compute the interaction matrix
+    // link the variation of image intensity to camera motion
 
-  // Compute the interaction matrix
-  // link the variation of image intensity to camera motion
+    // here it is computed at the desired position
+    sId.interaction(Lsd) ;
 
-  // here it is computed at the desired position
-  sId.interaction(Lsd) ;
 
-  
-  // Compute the Hessian H = L^TL
-  Hsd = Lsd.AtA() ;
+    // Compute the Hessian H = L^TL
+    Hsd = Lsd.AtA() ;
 
-  // Compute the Hessian diagonal for the Levenberg-Marquartd 
-  // optimization process
-  unsigned int n = 6 ;
-  vpMatrix diagHsd(n,n) ;
-  diagHsd.eye(n);
-  for(unsigned int i = 0 ; i < n ; i++) diagHsd[i][i] = Hsd[i][i];
+    // Compute the Hessian diagonal for the Levenberg-Marquartd
+    // optimization process
+    unsigned int n = 6 ;
+    vpMatrix diagHsd(n,n) ;
+    diagHsd.eye(n);
+    for(unsigned int i = 0 ; i < n ; i++) diagHsd[i][i] = Hsd[i][i];
 
 
 
-  // ------------------------------------------------------
-  // Control law
-  double lambda ; //gain
-  vpColVector e ;
-  vpColVector v ; // camera velocity send to the robot
+    // ------------------------------------------------------
+    // Control law
+    double lambda ; //gain
+    vpColVector e ;
+    vpColVector v ; // camera velocity send to the robot
 
 
-  // ----------------------------------------------------------
-  // Minimisation
+    // ----------------------------------------------------------
+    // Minimisation
 
-  double mu ;  // mu = 0 : Gauss Newton ; mu != 0  : LM
-  double lambdaGN;
+    double mu ;  // mu = 0 : Gauss Newton ; mu != 0  : LM
+    double lambdaGN;
 
 
-  mu       =  0.01;
-  lambda   = 30 ;
-  lambdaGN = 30;
+    mu       =  0.01;
+    lambda   = 30 ;
+    lambdaGN = 30;
 
 
 
 
 
 
-  // set a velocity control mode 
-  robot.setRobotState(vpRobot::STATE_VELOCITY_CONTROL) ;
+    // set a velocity control mode
+    robot.setRobotState(vpRobot::STATE_VELOCITY_CONTROL) ;
 
-  // ----------------------------------------------------------
-  int iter   = 1;
-  int iterGN = 90 ; // swicth to Gauss Newton after iterGN iterations
-  
-  double normeError = 0;
-  do
-  {
+    // ----------------------------------------------------------
+    int iter   = 1;
+    int iterGN = 90 ; // swicth to Gauss Newton after iterGN iterations
 
-    std::cout << "--------------------------------------------" << iter++ << std::endl ;
+    double normeError = 0;
+    do
+    {
 
+      std::cout << "--------------------------------------------" << iter++ << std::endl ;
 
-    //  Acquire the new image
-    sim.setCameraPosition(cMo) ;
-    sim.getImage(I,cam) ;
+
+      //  Acquire the new image
+      sim.setCameraPosition(cMo) ;
+      sim.getImage(I,cam) ;
 #if defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_GTK) 
-    if (opt_display) {
-      vpDisplay::display(I) ;
-      vpDisplay::flush(I) ;
-    }
+      if (opt_display) {
+        vpDisplay::display(I) ;
+        vpDisplay::flush(I) ;
+      }
 #endif
-    vpImageTools::imageDifference(I,Id,Idiff) ;
+      vpImageTools::imageDifference(I,Id,Idiff) ;
 #if defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_GTK) 
-    if (opt_display) {
-      vpDisplay::display(Idiff) ;
-      vpDisplay::flush(Idiff) ;
-    }
+      if (opt_display) {
+        vpDisplay::display(Idiff) ;
+        vpDisplay::flush(Idiff) ;
+      }
 #endif
-    // Compute current visual feature
-    sI.buildFrom(I) ;
+      // Compute current visual feature
+      sI.buildFrom(I) ;
 
-    // compute current error
-    sI.error(sId,error) ;
+      // compute current error
+      sI.error(sId,error) ;
 
-    normeError = (error.sumSquare());
-    std::cout << "|e| "<<normeError <<std::endl ;
+      normeError = (error.sumSquare());
+      std::cout << "|e| "<<normeError <<std::endl ;
 
-    // double t = vpTime::measureTimeMs() ;
+      // double t = vpTime::measureTimeMs() ;
 
-    // ---------- Levenberg Marquardt method --------------
-    {
-      if (iter > iterGN)
+      // ---------- Levenberg Marquardt method --------------
       {
-        mu = 0.0001 ;
-        lambda = lambdaGN;
+        if (iter > iterGN)
+        {
+          mu = 0.0001 ;
+          lambda = lambdaGN;
+        }
+
+        // Compute the levenberg Marquartd term
+        {
+          H = ((mu * diagHsd) + Hsd).inverseByLU();
+        }
+        //	compute the control law
+        e = H * Lsd.t() *error ;
+
+        v = - lambda*e;
       }
 
-      // Compute the levenberg Marquartd term
-      {
-        H = ((mu * diagHsd) + Hsd).inverseByLU();
-      }
-      //	compute the control law
-      e = H * Lsd.t() *error ;
+      std::cout << "lambda = " << lambda << "  mu = " << mu ;
+      std::cout << " |Tc| = " << sqrt(v.sumSquare()) << std::endl;
 
-      v = - lambda*e;
-    }
+      // send the robot velocity
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+      robot.getPosition(cMo) ;
 
-    std::cout << "lambda = " << lambda << "  mu = " << mu ;
-    std::cout << " |Tc| = " << sqrt(v.sumSquare()) << std::endl;
+    }
+    while(normeError > 10000 && iter < opt_niter);
 
-    // send the robot velocity
+    v = 0 ;
     robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
-    robot.getPosition(cMo) ;
 
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  while(normeError > 10000 && iter < opt_niter);
-
-  v = 0 ;
-  robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
-
 }
diff --git a/example/homography/CMakeLists.txt b/example/homography/CMakeLists.txt
index 39967e82..06e81b36 100644
--- a/example/homography/CMakeLists.txt
+++ b/example/homography/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/homography/homographyHLM2DObject.cpp b/example/homography/homographyHLM2DObject.cpp
index 34e62d4c..3966301a 100644
--- a/example/homography/homographyHLM2DObject.cpp
+++ b/example/homography/homographyHLM2DObject.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: homographyHLM2DObject.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: homographyHLM2DObject.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -73,6 +73,9 @@
 #define L 0.1
 #define nbpt 5
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
   Print the program options.
@@ -112,15 +115,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -129,7 +132,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -140,124 +143,79 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
-
-  int i ;
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  vpPoint P[nbpt]  ;  //  Point to be tracked
-  double xa[nbpt], ya[nbpt] ;
-  double xb[nbpt], yb[nbpt] ;
+    vpPoint P[nbpt]  ;  //  Point to be tracked
+    std::vector<double> xa(nbpt), ya(nbpt) ;
+    std::vector<double> xb(nbpt), yb(nbpt) ;
 
-  vpPoint aP[nbpt]  ;  //  Point to be tracked
-  vpPoint bP[nbpt]  ;  //  Point to be tracked
+    vpPoint aP[nbpt]  ;  //  Point to be tracked
+    vpPoint bP[nbpt]  ;  //  Point to be tracked
 
-  P[0].setWorldCoordinates(-L,-L, 0 ) ;
-  P[1].setWorldCoordinates(2*L,-L, 0 ) ;
-  P[2].setWorldCoordinates(L,L, 0 ) ;
-  P[3].setWorldCoordinates(-L,3*L, 0 ) ;
-  P[4].setWorldCoordinates(0,0, 0 ) ;
-  /*
+    P[0].setWorldCoordinates(-L,-L, 0 ) ;
+    P[1].setWorldCoordinates(2*L,-L, 0 ) ;
+    P[2].setWorldCoordinates(L,L, 0 ) ;
+    P[3].setWorldCoordinates(-L,3*L, 0 ) ;
+    P[4].setWorldCoordinates(0,0, 0 ) ;
+    /*
     P[5].setWorldCoordinates(10,20, 0 ) ;
     P[6].setWorldCoordinates(-10,12, 0 ) ;
   */
-  vpHomogeneousMatrix bMo(0,0,1, 0,0,0) ;
-  vpHomogeneousMatrix aMb(1,0,0.0,vpMath::rad(10),0,vpMath::rad(40)) ;
-  vpHomogeneousMatrix aMo =aMb*bMo ;
-  for(i=0 ; i < nbpt ; i++)
-  {
-    P[i].project(aMo) ;
-    aP[i] = P[i] ;
-    xa[i] = P[i].get_x() ;
-    ya[i] = P[i].get_y() ;
-  }
+    vpHomogeneousMatrix bMo(0,0,1, 0,0,0) ;
+    vpHomogeneousMatrix aMb(1,0,0.0,vpMath::rad(10),0,vpMath::rad(40)) ;
+    vpHomogeneousMatrix aMo =aMb*bMo ;
+    for(unsigned int i=0 ; i < nbpt ; i++)
+    {
+      P[i].project(aMo) ;
+      aP[i] = P[i] ;
+      xa[i] = P[i].get_x() ;
+      ya[i] = P[i].get_y() ;
+    }
 
-  for(i=0 ; i < nbpt ; i++)
-  {
-    P[i].project(bMo) ;
-    bP[i] = P[i] ;
-    xb[i] = P[i].get_x() ;
-    yb[i] = P[i].get_y() ;
-  }
-  std::cout << "-------------------------------" <<std::endl ;
-  std::cout << "aMb "<<std::endl <<aMb << std::endl ;
-  std::cout << "-------------------------------" <<std::endl ;
-  vpHomography aHb ;
-
-  vpHomography::HLM(nbpt,xb,yb,xa,ya,true, aHb) ;
-
-  vpTRACE("aHb computed using the Malis paralax  algorithm") ;
-  aHb /= aHb[2][2] ;
-  std::cout << std::endl << aHb<< std::endl ;
-
-  vpRotationMatrix aRb  ;
-  vpTranslationVector aTb ;
-  vpColVector n ;
-
-  std::cout << "-------------------------------" <<std::endl ;
-  vpTRACE("extract R, T and n ") ;
-  aHb.computeDisplacement(aRb, aTb, n) ;
-  std::cout << "Rotation: aRb" <<std::endl ;
-  std::cout << aRb << std::endl ;
-  std::cout << "Translation: aTb" <<std::endl;
-  std::cout << (aTb).t() <<std::endl   ;
-  std::cout << "Normal to the plane: n" <<std::endl;
-  std::cout << (n).t() <<std::endl ;
-
-
-  std::cout << "-------------------------------" <<std::endl ;
-  vpTRACE("Compare with built homography H = R + t/d ") ;
-  vpPlane bp(0,0,1,1) ;
-  vpHomography aHb_built(aMb,bp) ;
-  vpTRACE( "aHb built from the displacement ") ;
-  std::cout <<  std::endl <<aHb_built/aHb_built[2][2] << std::endl ;
-
-  aHb_built.computeDisplacement(aRb, aTb, n) ;
-  std::cout << "Rotation: aRb" <<std::endl ;
-  std::cout << aRb << std::endl ;
-  std::cout << "Translation: aTb" <<std::endl;
-  std::cout << (aTb).t() <<std::endl ;
-  std::cout << "Normal to the plane: n" <<std::endl;
-  std::cout << (n).t() <<std::endl ;
-
-  std::cout << "-------------------------------" <<std::endl ;
-  vpTRACE("test if ap = aHb bp") ;
-
-  for(i=0 ; i < nbpt ; i++)
-  {
-    std::cout << "Point "<< i<< std::endl ;
-    vpPoint p ;
-    std::cout << "(" ;
-    std::cout << aP[i].get_x()/aP[i].get_w()<<", "<< aP[i].get_y()/aP[i].get_w() ;
-    std::cout <<") =  (" ;
-    p = aHb*bP[i] ;
-    std::cout << p.get_x() /p.get_w()<<",  "<< p.get_y()/ p.get_w() <<")"<<std::endl ;
-  }
+    for(unsigned int i=0 ; i < nbpt ; i++)
+    {
+      P[i].project(bMo) ;
+      bP[i] = P[i] ;
+      xb[i] = P[i].get_x() ;
+      yb[i] = P[i].get_y() ;
+    }
+    std::cout << "-------------------------------" <<std::endl ;
+    std::cout << "aMb "<<std::endl <<aMb << std::endl ;
+    std::cout << "-------------------------------" <<std::endl ;
+    vpHomography aHb ;
+
+    vpHomography::HLM(xb, yb, xa, ya, true, aHb) ;
 
-  std::cout << "-------------------------------" <<std::endl ;
-  vpTRACE("test displacement") ;
+    aHb /= aHb[2][2] ;
+    std::cout << "aHb computed using the Malis paralax  algorithm: \n" << aHb<< std::endl ;
 
-  std::list<vpRotationMatrix> laRb ;
-  std::list<vpTranslationVector> laTb ;
-  std::list<vpColVector> lnb ;
+    vpRotationMatrix aRb  ;
+    vpTranslationVector aTb ;
+    vpColVector n ;
 
-  vpHomography::computeDisplacement(aHb,bP[0].get_x(),bP[0].get_y(),
-                                    laRb, laTb, lnb) ;
+    std::cout << "-------------------------------" <<std::endl ;
+    std::cout << "extract R, T and n " << std::endl;
+    aHb.computeDisplacement(aRb, aTb, n) ;
+    std::cout << "Rotation: aRb" <<std::endl ;
+    std::cout << aRb << std::endl ;
+    std::cout << "Translation: aTb" <<std::endl;
+    std::cout << (aTb).t() <<std::endl   ;
+    std::cout << "Normal to the plane: n" <<std::endl;
+    std::cout << (n).t() <<std::endl ;
 
-  std::list<vpRotationMatrix>::const_iterator it_laRb = laRb.begin();
-  std::list<vpTranslationVector>::const_iterator it_laTb = laTb.begin();
-  std::list<vpColVector>::const_iterator it_lnb = lnb.begin();
 
-  int k =1 ;
-  while (it_lnb != lnb.end())
-  {
-    std::cout << "Solution " << k++ << std::endl ;
+    std::cout << "-------------------------------" <<std::endl ;
+    std::cout << "Compare with built homography H = R + t/d " << std::endl ;
+    vpPlane bp(0,0,1,1) ;
+    vpHomography aHb_built(aMb,bp) ;
+    std::cout << "aHb built from the displacement " << std::endl ;
+    std::cout <<  std::endl <<aHb_built/aHb_built[2][2] << std::endl ;
 
-    aRb = *it_laRb;
-    aTb = *it_laTb;
-    n = *it_lnb;
+    aHb_built.computeDisplacement(aRb, aTb, n) ;
     std::cout << "Rotation: aRb" <<std::endl ;
     std::cout << aRb << std::endl ;
     std::cout << "Translation: aTb" <<std::endl;
@@ -265,9 +223,57 @@ main(int argc, const char ** argv)
     std::cout << "Normal to the plane: n" <<std::endl;
     std::cout << (n).t() <<std::endl ;
 
-    ++ it_laRb;
-    ++ it_laTb;
-    ++ it_lnb;
-  }
+    std::cout << "-------------------------------" << std::endl ;
+    std::cout << "test if ap = aHb bp" << std::endl ;
+
+    for(unsigned int i=0 ; i < nbpt ; i++)
+    {
+      std::cout << "Point "<< i<< std::endl ;
+      vpPoint p ;
+      std::cout << "(" ;
+      std::cout << aP[i].get_x()/aP[i].get_w()<<", "<< aP[i].get_y()/aP[i].get_w() ;
+      std::cout <<") =  (" ;
+      p = aHb*bP[i] ;
+      std::cout << p.get_x() /p.get_w()<<",  "<< p.get_y()/ p.get_w() <<")"<<std::endl ;
+    }
 
+    std::cout << "-------------------------------" <<std::endl ;
+    std::cout << "test displacement" << std::endl ;
+
+    std::list<vpRotationMatrix> laRb ;
+    std::list<vpTranslationVector> laTb ;
+    std::list<vpColVector> lnb ;
+
+    vpHomography::computeDisplacement(aHb,bP[0].get_x(),bP[0].get_y(),
+        laRb, laTb, lnb) ;
+
+    std::list<vpRotationMatrix>::const_iterator it_laRb = laRb.begin();
+    std::list<vpTranslationVector>::const_iterator it_laTb = laTb.begin();
+    std::list<vpColVector>::const_iterator it_lnb = lnb.begin();
+
+    int k =1 ;
+    while (it_lnb != lnb.end())
+    {
+      std::cout << "Solution " << k++ << std::endl ;
+
+      aRb = *it_laRb;
+      aTb = *it_laTb;
+      n = *it_lnb;
+      std::cout << "Rotation: aRb" <<std::endl ;
+      std::cout << aRb << std::endl ;
+      std::cout << "Translation: aTb" <<std::endl;
+      std::cout << (aTb).t() <<std::endl ;
+      std::cout << "Normal to the plane: n" <<std::endl;
+      std::cout << (n).t() <<std::endl ;
+
+      ++ it_laRb;
+      ++ it_laTb;
+      ++ it_lnb;
+    }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
diff --git a/example/homography/homographyHLM3DObject.cpp b/example/homography/homographyHLM3DObject.cpp
index 03fd41bb..ffe94ae7 100644
--- a/example/homography/homographyHLM3DObject.cpp
+++ b/example/homography/homographyHLM3DObject.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: homographyHLM3DObject.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: homographyHLM3DObject.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -72,6 +72,9 @@
 #define L 0.1
 #define nbpt 11
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
   Print the program options.
@@ -111,15 +114,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -128,7 +131,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -139,106 +142,105 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  int i ;
-
-  vpPoint P[nbpt]  ;  //  Point to be tracked
-  double xa[nbpt], ya[nbpt] ;
-  double xb[nbpt], yb[nbpt] ;
-
-  vpPoint aP[nbpt]  ;  //  Point to be tracked
-  vpPoint bP[nbpt]  ;  //  Point to be tracked
-
-  P[0].setWorldCoordinates(-L,-L, 0 ) ;
-  P[1].setWorldCoordinates(2*L,-L, 0 ) ;
-  P[2].setWorldCoordinates(L,L, 0 ) ;
-  P[3].setWorldCoordinates(-L,3*L, 0 ) ;
-  P[4].setWorldCoordinates(0,0, L ) ;
-  P[5].setWorldCoordinates(L,-2*L, L ) ;
-  P[6].setWorldCoordinates(L,-4*L, 2*L ) ;
-  P[7].setWorldCoordinates(-2*L,-L, -L ) ;
-  P[8].setWorldCoordinates(-5*L,-5*L, L ) ;
-  P[9].setWorldCoordinates(-2*L,+3*L, 2*L ) ;
-  P[10].setWorldCoordinates(-2*L,-0.5*L, 2*L ) ;
-  /*
-    P[5].setWorldCoordinates(10,20, 0 ) ;
-    P[6].setWorldCoordinates(-10,12, 0 ) ;
-  */
-  vpHomogeneousMatrix bMo(0,0,1, 0,0,0) ;
-  vpHomogeneousMatrix aMb(0.1,0.1,0.1,vpMath::rad(10),0,vpMath::rad(40)) ;
-  vpHomogeneousMatrix aMo =aMb*bMo ;
-  for(i=0 ; i < nbpt ; i++)
-  {
-    P[i].project(aMo) ;
-    aP[i] = P[i] ;
-    xa[i] = P[i].get_x() ;
-    ya[i] = P[i].get_y() ;
-  }
+    vpPoint P[nbpt]  ;  //  Point to be tracked
+    std::vector<double> xa(nbpt), ya(nbpt) ;
+    std::vector<double> xb(nbpt), yb(nbpt) ;
+
+    vpPoint aP[nbpt]  ;  //  Point to be tracked
+    vpPoint bP[nbpt]  ;  //  Point to be tracked
+
+    P[0].setWorldCoordinates(-L,-L, 0 ) ;
+    P[1].setWorldCoordinates(2*L,-L, 0 ) ;
+    P[2].setWorldCoordinates(L,L, 0 ) ;
+    P[3].setWorldCoordinates(-L,3*L, 0 ) ;
+    P[4].setWorldCoordinates(0,0, L ) ;
+    P[5].setWorldCoordinates(L,-2*L, L ) ;
+    P[6].setWorldCoordinates(L,-4*L, 2*L ) ;
+    P[7].setWorldCoordinates(-2*L,-L, -L ) ;
+    P[8].setWorldCoordinates(-5*L,-5*L, L ) ;
+    P[9].setWorldCoordinates(-2*L,+3*L, 2*L ) ;
+    P[10].setWorldCoordinates(-2*L,-0.5*L, 2*L ) ;
+
+    vpHomogeneousMatrix bMo(0,0,1, 0,0,0) ;
+    vpHomogeneousMatrix aMb(0.1,0.1,0.1,vpMath::rad(10),0,vpMath::rad(40)) ;
+    vpHomogeneousMatrix aMo =aMb*bMo ;
+    for(unsigned int i=0 ; i < nbpt ; i++)
+    {
+      P[i].project(aMo) ;
+      aP[i] = P[i] ;
+      xa[i] = P[i].get_x() ;
+      ya[i] = P[i].get_y() ;
+    }
 
-  for(i=0 ; i < nbpt ; i++)
-  {
-    P[i].project(bMo) ;
-    bP[i] = P[i] ;
-    xb[i] = P[i].get_x() ;
-    yb[i] = P[i].get_y() ;
-  }
+    for(unsigned int i=0 ; i < nbpt ; i++)
+    {
+      P[i].project(bMo) ;
+      bP[i] = P[i] ;
+      xb[i] = P[i].get_x() ;
+      yb[i] = P[i].get_y() ;
+    }
 
-  vpRotationMatrix aRb  ;
-  vpTranslationVector aTb ;
-  vpColVector n ;
-  std::cout << "-------------------------------" <<std::endl ;
-  vpTRACE("Compare with built homography H = R + t/d n ") ;
-  vpPlane bp(0,0,1,1) ;
-  vpHomography aHb_built(aMb,bp) ;
-  vpTRACE( "aHb built from the displacement ") ;
-  std::cout <<  std::endl <<aHb_built/aHb_built[2][2] << std::endl ;
-
-  aHb_built.computeDisplacement(aRb, aTb, n) ;
-  std::cout << "Rotation: aRb" <<std::endl ;
-  std::cout << aRb << std::endl ;
-  std::cout << "Translation: aTb" <<std::endl;
-  std::cout << (aTb).t() <<std::endl ;
-  std::cout << "Normal to the plane: n" <<std::endl;
-  std::cout << (n).t() <<std::endl ;
-
-  std::cout << "-------------------------------" <<std::endl ;
-  std::cout << "aMb "<<std::endl <<aMb << std::endl ;
-  std::cout << "-------------------------------" <<std::endl ;
-  vpHomography aHb ;
-
-  vpHomography::HLM(nbpt,xb,yb,xa,ya,false, aHb) ;
-
-  vpTRACE("aHb computed using the Malis paralax  algorithm") ;
-  aHb /= aHb[2][2] ;
-  std::cout << std::endl << aHb<< std::endl ;
-
-
-  std::cout << "-------------------------------" <<std::endl ;
-  vpTRACE("extract R, T and n ") ;
-  aHb.computeDisplacement(aRb, aTb, n) ;
-  std::cout << "Rotation: aRb" <<std::endl ;
-  std::cout << aRb << std::endl ;
-  std::cout << "Translation: aTb" <<std::endl;
-  std::cout << (aTb).t() <<std::endl   ;
-  std::cout << "Normal to the plane: n" <<std::endl;
-  std::cout << (n).t() <<std::endl ;
-
-
-  std::cout << "-------------------------------" <<std::endl ;
-  vpTRACE("test if ap = aHb bp") ;
-
-  for(i=0 ; i < nbpt ; i++)
-  {
-    std::cout << "Point "<< i<< std::endl ;
-    vpPoint p ;
-    std::cout << "(" ;
-    std::cout << aP[i].get_x()/aP[i].get_w()<<", "<< aP[i].get_y()/aP[i].get_w() ;
-    std::cout <<") =  (" ;
-    p = aHb*bP[i] ;
-    std::cout << p.get_x() /p.get_w()<<",  "<< p.get_y()/ p.get_w() <<")"<<std::endl ;
-  } 
+    vpRotationMatrix aRb  ;
+    vpTranslationVector aTb ;
+    vpColVector n ;
+    std::cout << "-------------------------------" << std::endl ;
+    std::cout << "Compare with built homography H = R + t/d n " << std::endl ;
+    vpPlane bp(0,0,1,1) ;
+    vpHomography aHb_built(aMb,bp) ;
+    std::cout << "aHb built from the displacement: \n" << aHb_built/aHb_built[2][2] << std::endl ;
+
+    aHb_built.computeDisplacement(aRb, aTb, n) ;
+    std::cout << "Rotation: aRb" <<std::endl ;
+    std::cout << aRb << std::endl ;
+    std::cout << "Translation: aTb" <<std::endl;
+    std::cout << (aTb).t() <<std::endl ;
+    std::cout << "Normal to the plane: n" <<std::endl;
+    std::cout << (n).t() <<std::endl ;
+
+    std::cout << "-------------------------------" <<std::endl ;
+    std::cout << "aMb "<<std::endl <<aMb << std::endl ;
+    std::cout << "-------------------------------" <<std::endl ;
+    vpHomography aHb ;
+
+    vpHomography::HLM(xb, yb, xa, ya, false, aHb) ;
+
+    std::cout << "aHb computed using the Malis paralax  algorithm" << std::endl ;
+    aHb /= aHb[2][2] ;
+    std::cout << std::endl << aHb<< std::endl ;
+
+    std::cout << "-------------------------------" <<std::endl ;
+    std::cout << "extract R, T and n " << std::endl ;
+    aHb.computeDisplacement(aRb, aTb, n) ;
+    std::cout << "Rotation: aRb" <<std::endl ;
+    std::cout << aRb << std::endl ;
+    std::cout << "Translation: aTb" <<std::endl;
+    std::cout << (aTb).t() <<std::endl   ;
+    std::cout << "Normal to the plane: n" <<std::endl;
+    std::cout << (n).t() <<std::endl ;
+
+    std::cout << "-------------------------------" <<std::endl ;
+    std::cout << "test if ap = aHb bp" << std::endl ;
+
+    for(unsigned int i=0 ; i < nbpt ; i++)
+    {
+      std::cout << "Point "<< i<< std::endl ;
+      vpPoint p ;
+      std::cout << "(" ;
+      std::cout << aP[i].get_x()/aP[i].get_w()<<", "<< aP[i].get_y()/aP[i].get_w() ;
+      std::cout <<") =  (" ;
+      p = aHb*bP[i] ;
+      std::cout << p.get_x() /p.get_w()<<",  "<< p.get_y()/ p.get_w() <<")"<<std::endl ;
+    }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
diff --git a/example/homography/homographyHartleyDLT2DObject.cpp b/example/homography/homographyHartleyDLT2DObject.cpp
index 9ddd2296..86561fd7 100644
--- a/example/homography/homographyHartleyDLT2DObject.cpp
+++ b/example/homography/homographyHartleyDLT2DObject.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: homographyHartleyDLT2DObject.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: homographyHartleyDLT2DObject.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -73,6 +73,9 @@
 #define L 0.1
 #define nbpt 5
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
   Print the program options.
@@ -113,15 +116,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -130,7 +133,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -141,99 +144,102 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
-
-  int i ;
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  vpPoint P[nbpt]  ;  //  Point to be tracked
-  double xa[nbpt], ya[nbpt] ;
-  double xb[nbpt], yb[nbpt] ;
+    vpPoint P[nbpt]  ;  //  Point to be tracked
+    std::vector<double> xa(nbpt), ya(nbpt), xb(nbpt), yb(nbpt);
 
-  vpPoint aP[nbpt]  ;  //  Point to be tracked
-  vpPoint bP[nbpt]  ;  //  Point to be tracked
+    vpPoint aP[nbpt]  ;  //  Point to be tracked
+    vpPoint bP[nbpt]  ;  //  Point to be tracked
 
-  P[0].setWorldCoordinates(-L,-L, 0 ) ;
-  P[1].setWorldCoordinates(2*L,-L, 0 ) ;
-  P[2].setWorldCoordinates(L,L, 0 ) ;
-  P[3].setWorldCoordinates(-L,3*L, 0 ) ;
-  P[4].setWorldCoordinates(0,0, 0 ) ;
-  /*
+    P[0].setWorldCoordinates(-L,-L, 0 ) ;
+    P[1].setWorldCoordinates(2*L,-L, 0 ) ;
+    P[2].setWorldCoordinates(L,L, 0 ) ;
+    P[3].setWorldCoordinates(-L,3*L, 0 ) ;
+    P[4].setWorldCoordinates(0,0, 0 ) ;
+    /*
     P[5].setWorldCoordinates(10,20, 0 ) ;
     P[6].setWorldCoordinates(-10,12, 0 ) ;
   */
-  vpHomogeneousMatrix bMo(0,0,1, 0,0,0) ;
-  vpHomogeneousMatrix aMb(1,0,0.0,vpMath::rad(10),0,vpMath::rad(40)) ;
-  vpHomogeneousMatrix aMo =aMb*bMo ;
-  for(i=0 ; i < nbpt ; i++)
-  {
-    P[i].project(aMo) ;
-    aP[i] = P[i] ;
-    xa[i] = P[i].get_x() ;
-    ya[i] = P[i].get_y() ;
-  }
+    vpHomogeneousMatrix bMo(0,0,1, 0,0,0) ;
+    vpHomogeneousMatrix aMb(1,0,0.0,vpMath::rad(10),0,vpMath::rad(40)) ;
+    vpHomogeneousMatrix aMo =aMb*bMo ;
+    for(unsigned int i=0 ; i < nbpt ; i++)
+    {
+      P[i].project(aMo) ;
+      aP[i] = P[i] ;
+      xa[i] = P[i].get_x() ;
+      ya[i] = P[i].get_y() ;
+    }
 
-  for(i=0 ; i < nbpt ; i++)
-  {
-    P[i].project(bMo) ;
-    bP[i] = P[i] ;
-    xb[i] = P[i].get_x() ;
-    yb[i] = P[i].get_y() ;
+    for(unsigned int i=0 ; i < nbpt ; i++)
+    {
+      P[i].project(bMo) ;
+      bP[i] = P[i] ;
+      xb[i] = P[i].get_x() ;
+      yb[i] = P[i].get_y() ;
+    }
+    std::cout << "-------------------------------" <<std::endl ;
+    std::cout << "aMb "<<std::endl <<aMb << std::endl ;
+    std::cout << "-------------------------------" <<std::endl ;
+    vpHomography aHb ;
+
+    vpHomography::DLT(xb, yb, xa, ya, aHb, true) ;
+
+    vpTRACE("aHb computed using the DLT algorithm") ;
+    aHb /= aHb[2][2] ;
+    std::cout << std::endl << aHb<< std::endl ;
+
+    vpRotationMatrix aRb  ;
+    vpTranslationVector aTb ;
+    vpColVector n ;
+
+    std::cout << "-------------------------------" <<std::endl ;
+    vpTRACE("extract R, T and n ") ;
+    aHb.computeDisplacement(aRb, aTb, n) ;
+    std::cout << "Rotation: aRb" <<std::endl ;
+    std::cout << aRb << std::endl ;
+    std::cout << "Translation: aTb" <<std::endl;
+    std::cout << (aTb).t() <<std::endl   ;
+    std::cout << "Normal to the plane: n" <<std::endl;
+    std::cout << (n).t() <<std::endl ;
+
+    std::cout << "-------------------------------" <<std::endl ;
+    vpTRACE("Compare with built homoraphy H = R + t/d ") ;
+    vpPlane bp(0,0,1,1) ;
+    vpHomography aHb_built(aMb,bp) ;
+    vpTRACE( "aHb built from the displacement ") ;
+    std::cout <<  std::endl <<aHb_built/aHb_built[2][2] << std::endl ;
+
+    aHb_built.computeDisplacement(aRb, aTb, n) ;
+    std::cout << "Rotation: aRb" <<std::endl ;
+    std::cout << aRb << std::endl ;
+    std::cout << "Translation: aTb" <<std::endl;
+    std::cout << (aTb).t() <<std::endl ;
+    std::cout << "Normal to the plane: n" <<std::endl;
+    std::cout << (n).t() <<std::endl ;
+
+    std::cout << "-------------------------------" <<std::endl ;
+    vpTRACE("test if ap = aHb bp") ;
+
+    for(unsigned int i=0 ; i < nbpt ; i++)
+    {
+      std::cout << "Point "<< i<< std::endl ;
+      vpPoint p ;
+      std::cout << "(" ;
+      std::cout << aP[i].get_x()/aP[i].get_w()<<", "<< aP[i].get_y()/aP[i].get_w() ;
+      std::cout <<") =  (" ;
+      p = aHb*bP[i] ;
+      std::cout << p.get_x() /p.get_w()<<",  "<< p.get_y()/ p.get_w() <<")"<<std::endl ;
+    }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  std::cout << "-------------------------------" <<std::endl ;
-  std::cout << "aMb "<<std::endl <<aMb << std::endl ;
-  std::cout << "-------------------------------" <<std::endl ;
-  vpHomography aHb ;
-
-  vpHomography::HartleyDLT(nbpt,xb,yb,xa,ya,aHb) ;
-
-  vpTRACE("aHb computed using the DLT algorithm") ;
-  aHb /= aHb[2][2] ;
-  std::cout << std::endl << aHb<< std::endl ;
-
-  vpRotationMatrix aRb  ;
-  vpTranslationVector aTb ;
-  vpColVector n ;
-
-  std::cout << "-------------------------------" <<std::endl ;
-  vpTRACE("extract R, T and n ") ;
-  aHb.computeDisplacement(aRb, aTb, n) ;
-  std::cout << "Rotation: aRb" <<std::endl ;
-  std::cout << aRb << std::endl ;
-  std::cout << "Translation: aTb" <<std::endl;
-  std::cout << (aTb).t() <<std::endl   ;
-  std::cout << "Normal to the plane: n" <<std::endl;
-  std::cout << (n).t() <<std::endl ;
-
-
-  std::cout << "-------------------------------" <<std::endl ;
-  vpTRACE("Compare with built homoraphy H = R + t/d ") ;
-  vpPlane bp(0,0,1,1) ;
-  vpHomography aHb_built(aMb,bp) ;
-  vpTRACE( "aHb built from the displacement ") ;
-  std::cout <<  std::endl <<aHb_built/aHb_built[2][2] << std::endl ;
-
-  aHb_built.computeDisplacement(aRb, aTb, n) ;
-  std::cout << "Rotation: aRb" <<std::endl ;
-  std::cout << aRb << std::endl ;
-  std::cout << "Translation: aTb" <<std::endl;
-  std::cout << (aTb).t() <<std::endl ;
-  std::cout << "Normal to the plane: n" <<std::endl;
-  std::cout << (n).t() <<std::endl ;
-
-  std::cout << "-------------------------------" <<std::endl ;
-  vpTRACE("test if ap = aHb bp") ;
-
-  for(i=0 ; i < nbpt ; i++)
-  {
-    std::cout << "Point "<< i<< std::endl ;
-    vpPoint p ;
-    std::cout << "(" ;
-    std::cout << aP[i].get_x()/aP[i].get_w()<<", "<< aP[i].get_y()/aP[i].get_w() ;
-    std::cout <<") =  (" ;
-    p = aHb*bP[i] ;
-    std::cout << p.get_x() /p.get_w()<<",  "<< p.get_y()/ p.get_w() <<")"<<std::endl ;
-  } 
 }
diff --git a/example/homography/homographyRansac2DObject.cpp b/example/homography/homographyRansac2DObject.cpp
index 2fdb479c..7e092a20 100644
--- a/example/homography/homographyRansac2DObject.cpp
+++ b/example/homography/homographyRansac2DObject.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: homographyRansac2DObject.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: homographyRansac2DObject.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -74,8 +74,8 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
-#define L 0.1
-#define nbpt 11
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
 
 /*!
 
@@ -115,15 +115,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -132,7 +132,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -143,76 +143,102 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  int i ;
-
-  vpPoint P[nbpt]  ;  //  Point to be tracked
-  double xa[nbpt], ya[nbpt] ;
-  double xb[nbpt], yb[nbpt] ;
-
-  vpPoint aP[nbpt]  ;  //  Point to be tracked
-  vpPoint bP[nbpt]  ;  //  Point to be tracked
-
-  P[0].setWorldCoordinates(-L,-L, 0 ) ;   // inlier
-  P[1].setWorldCoordinates(2*L,-L, 0 ) ;  // inlier
-  P[2].setWorldCoordinates(L,L, 0 ) ;  // inlier
-  P[3].setWorldCoordinates(-L,3*L, 0 ) ;  // inlier
-  P[4].setWorldCoordinates(0,0, L ) ;
-  P[5].setWorldCoordinates(L,-2*L, L ) ;
-  P[6].setWorldCoordinates(L,-4*L, 2*L ) ;
-  P[7].setWorldCoordinates(-2*L,-L, -3*L ) ;
-  P[8].setWorldCoordinates(-5*L,-5*L, 0 ) ;  // inlier
-  P[9].setWorldCoordinates(-2*L,+3*L, 4*L ) ;
-  P[10].setWorldCoordinates(-2*L,-0.5*L, 0 ) ;
-  /*
-    P[5].setWorldCoordinates(10,20, 0 ) ;
-    P[6].setWorldCoordinates(-10,12, 0 ) ;
-  */
-  vpHomogeneousMatrix bMo(0,0,1, 0,0,0) ;
-  vpHomogeneousMatrix aMb(0.1,0.1,0.1,vpMath::rad(10),0,vpMath::rad(40)) ;
-  vpHomogeneousMatrix aMo =aMb*bMo ;
-  for(i=0 ; i < nbpt ; i++)
-  {
-    P[i].project(aMo) ;
-    aP[i] = P[i] ;
-    xa[i] = P[i].get_x() ;
-    ya[i] = P[i].get_y() ;
-  }
+    double L=0.1;
+    unsigned int nbpt = 11;
+
+    std::vector<vpPoint> P(nbpt);  //  Point to be tracked
+    std::vector<double> xa(nbpt), ya(nbpt), xb(nbpt), yb(nbpt);
+
+	std::vector<vpPoint> aP(nbpt);  //  Point to be tracked
+	std::vector<vpPoint> bP(nbpt);  //  Point to be tracked
+
+    P[0].setWorldCoordinates(-L,-L, 0 ) ;   // inlier
+    P[1].setWorldCoordinates(2*L,-L, 0 ) ;  // inlier
+    P[2].setWorldCoordinates(L,L, 0 ) ;  // inlier
+    P[3].setWorldCoordinates(-L,3*L, 0 ) ;  // inlier
+    P[4].setWorldCoordinates(0,0, L ) ;
+    P[5].setWorldCoordinates(L,-2*L, L ) ;
+    P[6].setWorldCoordinates(L,-4*L, 2*L ) ;
+    P[7].setWorldCoordinates(-2*L,-L, -3*L ) ;
+    P[8].setWorldCoordinates(-5*L,-5*L, 0 ) ;  // inlier
+    P[9].setWorldCoordinates(-2*L,+3*L, 4*L ) ;
+    P[10].setWorldCoordinates(-2*L,-0.5*L, 0 ) ; // inlier
+
+    std::vector<bool> inliers_ground_truth(nbpt, false);
+    inliers_ground_truth[0] = true;
+    inliers_ground_truth[1] = true;
+    inliers_ground_truth[2] = true;
+    inliers_ground_truth[3] = true;
+    inliers_ground_truth[8] = true;
+    inliers_ground_truth[10] = true;
+
+    vpHomogeneousMatrix bMo(0,0,1, 0,0,0) ;
+    vpHomogeneousMatrix aMb(0.1,0.1,0.1,vpMath::rad(10),0,vpMath::rad(40)) ;
+    vpHomogeneousMatrix aMo =aMb*bMo ;
+    for(unsigned int i=0 ; i < nbpt ; i++)
+    {
+      P[i].project(aMo) ;
+      aP[i] = P[i] ;
+      xa[i] = P[i].get_x() ;
+      ya[i] = P[i].get_y() ;
+    }
 
-  for(i=0 ; i < nbpt ; i++)
-  {
-    P[i].project(bMo) ;
-    bP[i] = P[i] ;
-    xb[i] = P[i].get_x() ;
-    yb[i] = P[i].get_y() ;
+    for(unsigned int i=0 ; i < nbpt ; i++)
+    {
+      P[i].project(bMo) ;
+      bP[i] = P[i] ;
+      xb[i] = P[i].get_x() ;
+      yb[i] = P[i].get_y() ;
+    }
+    std::cout << "-------------------------------" <<std::endl ;
+
+    vpRotationMatrix aRb  ;
+    vpTranslationVector aTb ;
+    vpColVector n ;
+    std::cout << "Compare with built homography H = R + t/d n " << std::endl;
+    vpPlane bp(0,0,1,1) ;
+    vpHomography aHb_built(aMb,bp) ;
+    std::cout << "aHb built from the displacement: \n" << aHb_built/aHb_built[2][2] << std::endl ;
+
+    aHb_built.computeDisplacement(aRb, aTb, n) ;
+    std::cout << "Rotation aRb: " <<std::endl ;
+    std::cout << aRb << std::endl ;
+    std::cout << "Translation: aTb" <<std::endl;
+    std::cout << (aTb).t() <<std::endl ;
+    std::cout << "Normal to the plane: n" <<std::endl;
+    std::cout << (n).t() <<std::endl ;
+
+    std::cout << "-------------------------------" <<std::endl ;
+    vpHomography aHb;
+    std::vector<bool> inliers;
+    double residual;
+    // Suppose px=1000. Set the threshold to 2 pixels => 2/1000
+    // In the data we have 6 inliers. We request that at least 6 are retrieved
+    vpHomography::ransac(xb, yb, xa, ya, aHb, inliers, residual, 6, 2./1000) ;
+
+    std::cout << "aHb estimated using ransac:\n" << aHb << std::endl ;
+    std::cout << "Inliers indexes (should be 0,1,2,3,8,10): ";
+    for (unsigned int i=0; i< inliers.size(); i++)
+      if (inliers[i]) std::cout << i << ",";
+    std::cout << std::endl;
+
+    if (inliers == inliers_ground_truth) {
+      std::cout << "Ransac estimation succeed" << std::endl;
+      return 0;
+    }
+    else {
+      std::cout << "Ransac estimation fails" << std::endl;
+      return 1;
+    }
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  std::cout << "-------------------------------" <<std::endl ;
-
-  vpRotationMatrix aRb  ;
-  vpTranslationVector aTb ;
-  vpColVector n ;
-  vpTRACE("Compare with built homography H = R + t/d n ") ;
-  vpPlane bp(0,0,1,1) ;
-  vpHomography aHb_built(aMb,bp) ;
-  vpTRACE( "aHb built from the displacement ") ;
-  std::cout <<  std::endl <<aHb_built/aHb_built[2][2] << std::endl ;
-
-  aHb_built.computeDisplacement(aRb, aTb, n) ;
-  std::cout << "Rotation aRb: " <<std::endl ;
-  std::cout << aRb << std::endl ;
-  std::cout << "Translation: aTb" <<std::endl;
-  std::cout << (aTb).t() <<std::endl ;
-  std::cout << "Normal to the plane: n" <<std::endl;
-  std::cout << (n).t() <<std::endl ;
-
-  std::cout << "-------------------------------" <<std::endl ;
-  vpTRACE(" ") ;
-  vpHomography aHb ;
-  vpHomography::ransac(nbpt,xb,yb,xa,ya, aHb) ;
-
-  std::cout << aHb << std::endl ; 
 }
diff --git a/example/image/CMakeLists.txt b/example/image/CMakeLists.txt
index 59e38c69..fd85035f 100644
--- a/example/image/CMakeLists.txt
+++ b/example/image/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/image/imageDiskRW.cpp b/example/image/imageDiskRW.cpp
index f153c6b0..5d94c68c 100644
--- a/example/image/imageDiskRW.cpp
+++ b/example/image/imageDiskRW.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: imageDiskRW.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: imageDiskRW.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -69,6 +69,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"i:o:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, std::string user);
+
 /*!
 
 Print the program options.
@@ -127,20 +130,19 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv,
-                std::string &ipath, std::string &opath, std::string user)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, std::string user)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'i': ipath = optarg; break;
-    case 'o': opath = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'o': opath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath, opath, user); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, opath, user); return false; break;
+      usage(argv[0], optarg_, ipath, opath, user); return false; break;
     }
   }
 
@@ -148,7 +150,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, opath, user);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -160,183 +162,179 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
-
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string opt_opath;
-  std::string ipath;
-  std::string opath;
-  std::string filename;
-  std::string username;
-
-  std::cout <<  "-------------------------------------------------------" << std::endl ;
-  std::cout <<  "  imageDiskRW.cpp" <<std::endl << std::endl ;
-
-  std::cout <<  "  reading and writting of PPM image" << std::endl ;
-  std::cout <<  "  read an image that does not exist" << std::endl ;
-  std::cout <<  "  write in a directory that does no exist" << std::endl ;
-  std::cout <<  "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Set the default output path
-#if defined(UNIX) && !defined(WIN32)
-  opt_opath = "/tmp";
-#elif WIN32
-  opt_opath = "C:\\temp";
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string opt_opath;
+    std::string ipath;
+    std::string opath;
+    std::string filename;
+    std::string username;
+
+    std::cout <<  "-------------------------------------------------------" << std::endl ;
+    std::cout <<  "  imageDiskRW.cpp" <<std::endl << std::endl ;
+
+    std::cout <<  "  reading and writting of PPM image" << std::endl ;
+    std::cout <<  "  read an image that does not exist" << std::endl ;
+    std::cout <<  "  write in a directory that does no exist" << std::endl ;
+    std::cout <<  "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Set the default output path
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
+    opt_opath = "/tmp";
+#elif defined(_WIN32)
+    opt_opath = "C:\\temp";
 #endif
 
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_opath, username) == false) {
-    exit (-1);
-  }
+    // Get the user login name
+    vpIoTools::getUserName(username);
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  if (!opt_opath.empty())
-    opath = opt_opath;
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_opath, username) == false) {
+      exit (-1);
+    }
 
-  // Append to the output path string, the login name of the user
-  std::string dirname = opath + vpIoTools::path("/") + username;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+    if (!opt_opath.empty())
+      opath = opt_opath;
+
+    // Append to the output path string, the login name of the user
+    std::string dirname = opath + vpIoTools::path("/") + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(dirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(dirname);
+      }
+      catch (...) {
+        usage(argv[0], NULL, ipath, opath, username);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << dirname << std::endl;
+        std::cerr << "  Check your -o " << opath << " option " << std::endl;
+        exit(-1);
+      }
+    }
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(dirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(dirname);
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-    catch (...) {
+
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
       usage(argv[0], NULL, ipath, opath, username);
       std::cerr << std::endl
                 << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << dirname << std::endl;
-      std::cerr << "  Check your -o " << opath << " option " << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
       exit(-1);
     }
-  }
 
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
-    }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opath, username);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    /////////////////////////////////////////////////////////////////////
 
 
-  /////////////////////////////////////////////////////////////////////
 
+    // First we wanted to have gray level image (8bits)
+    // vpImage is a template class you can declare vpImage of ... everything...
+    vpImage<unsigned char> I ;
 
+    // Although I is a gray level image you can read and write
+    // color image. Obviously the color will be translated as a gray level
 
-  // First we wanted to have gray level image (8bits)
-  // vpImage is a template class you can declare vpImage of ... everything...
-  vpImage<unsigned char> I ;
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
+    vpImageIo::read(I, filename);
 
-  // Although I is a gray level image you can read and write
-  // color image. Obviously the color will be translated as a gray level
+    filename = dirname +  vpIoTools::path("/IoPPM.Klimt_char.ppm");
+    vpImageIo::write(I, filename) ;
 
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-  vpImageIo::read(I, filename);
 
-  filename = dirname +  vpIoTools::path("/IoPPM.Klimt_char.ppm");
-  vpImageIo::write(I, filename) ;
+    // test io error
+    // if the image you want to read on the disk does not exist
+    // an exception is thrown
+    //Try to load a non existing image
+    try {
+      filename = ipath + vpIoTools::path("/ViSP-images/image-that-does-not-exist.ppm");
+      vpImageIo::read(I,filename) ;
+    }
+    catch(vpException e) {
+      std::cout << "Catch an exception: " << e << std::endl;
+    }
 
 
-  // test io error
-  // if the image you want to read on the disk does not exist
-  // an exception is thrown
-  try
-  {
-    //Try to load a non existing image
-    filename = ipath + vpIoTools::path("/ViSP-images/image-that-does-not-exist.ppm");
+    // same thing if you to write in a directory that does not exist
+    // or where you are not allowd to write.
+    try {
+      filename = dirname + vpIoTools::path("/directory-that-does-not-exist/Klimt.ppm");
+      vpImageIo::write(I,filename) ;
+    }
+    catch(vpException e) {
+      std::cout << "Catch an exception: " << e << std::endl;
+    }
 
-    vpImageIo::read(I,filename) ;
-  }
-  catch(vpImageException e)
-  {
-    vpERROR_TRACE("at main level");
-    std::cout << e << std::endl ;
-  }
 
-  // same thing if you to write in a directory that does not exist
-  // or where you are not allowd to write.
-  try
-  {
-    filename = dirname + vpIoTools::path("/directory-that-does-not-exist/Klimt.ppm");
-    vpImageIo::write(I,filename) ;
-  }
-  catch(vpImageException e)
-  {
-    vpERROR_TRACE("at main level");
-    std::cout << e << std::endl ;
-  }
+    std::cout << "----------------------------------------------------" << std::endl ;
 
-  std::cout << "----------------------------------------------------" << std::endl ;
+    // Let's consider that the image is now a color image (32 bits RGBa)
+    vpImage<vpRGBa> Irgba ;
 
-  // Let's consider that the image is now a color image (32 bits RGBa)
-  vpImage<vpRGBa> Irgba ;
+    // read write unsigned char ppm image.
 
-  // read write unsigned char ppm image.
+    // Load a color image from the disk
+    filename = ipath + vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
+    vpImageIo::read(Irgba, filename);
 
-  // Load a color image from the disk
-  filename = ipath + vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-  vpImageIo::read(Irgba, filename);
+    // Write the content of the color image on the disk
+    filename = dirname + vpIoTools::path("/IoPGM.Klimt_rgba.ppm");
+    vpImageIo::write(Irgba, filename) ;
 
-  // Write the content of the color image on the disk
-  filename = dirname + vpIoTools::path("/IoPGM.Klimt_rgba.ppm");
-  vpImageIo::write(Irgba, filename) ;
+    // test io error
+    try {
+      filename = ipath + vpIoTools::path("/ViSP-images/image-that-does-not-exist.ppm");
+      vpImageIo::read(Irgba,filename) ;
+    }
+    catch(vpException e) {
+      std::cout << "Catch an exception: " << e << std::endl;
+    }
 
-  // test io error
-  try
-  {
-    filename = ipath + vpIoTools::path("/ViSP-images/image-that-does-not-exist.ppm");
-    vpImageIo::read(Irgba,filename) ;
-  }
-  catch(vpImageException e)
-  {
-    vpERROR_TRACE("at main level");
-    std::cout << e << std::endl ;
-  }
+    // test io error
+    try {
+      filename = dirname + vpIoTools::path("/directory-that-does-not-exist/Klimt.ppm");
+      vpImageIo::write(Irgba,filename) ;
+    }
 
-  // test io error
-  try
-  {
-    filename = dirname + vpIoTools::path("/directory-that-does-not-exist/Klimt.ppm");
-    vpImageIo::write(Irgba,filename) ;
+    catch(vpException e) {
+      std::cout << "Catch an exception: " << e << std::endl;
+    }
+    return 0;
   }
-  catch(vpImageException e)
-  {
-    vpERROR_TRACE("at main level");
-    std::cout << e << std::endl ;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 
diff --git a/example/key-point/CMakeLists.txt b/example/key-point/CMakeLists.txt
index 45f66f3d..cbf84578 100644
--- a/example/key-point/CMakeLists.txt
+++ b/example/key-point/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/key-point/fernClassifier.cpp b/example/key-point/fernClassifier.cpp
index 7d222515..2f38f4bc 100644
--- a/example/key-point/fernClassifier.cpp
+++ b/example/key-point/fernClassifier.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: fernClassifier.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: fernClassifier.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -73,6 +73,10 @@
 
 #define GETOPTARGS  "hlcdb:i:sp"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &isLearning, std::string& dataFile, bool& click_allowed,
+                bool& display, bool& displayPoints, bool& useSequence, std::string& ipath);
+
 /*!
 
   Print the program options.
@@ -145,24 +149,24 @@ OPTIONS:                                               \n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv,
-                bool &isLearning, std::string& dataFile, bool& click_allowed, bool& display, bool& displayPoints, bool& useSequence, std::string& ipath)
+bool getOptions(int argc, const char **argv, bool &isLearning, std::string& dataFile, bool& click_allowed,
+                bool& display, bool& displayPoints, bool& useSequence, std::string& ipath)
 {
-  const char *optarg;
+  const char *optarg_;
   int   c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
     case 'l': isLearning = true; break;
     case 'h': usage(argv[0], NULL); return false; break;
-    case 'b': dataFile = optarg; break;
+    case 'b': dataFile = optarg_; break;
     case 'p': displayPoints = true; break;
     case 's': useSequence = false; break;
-    case 'i': ipath = optarg; break;
+    case 'i': ipath = optarg_; break;
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -171,7 +175,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -183,284 +187,289 @@ bool getOptions(int argc, const char **argv,
 int 
 main(int argc, const char** argv)
 {
-  bool isLearning = false;
-  std::string dataFile("./dataFern");
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-  std::string objectName("object");
-  bool displayPoints = false;
-  bool useSequence = true;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string env_ipath;
-  std::string dirname;
-  std::string filename;
-
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL){
-    env_ipath = ptenv;
-  }
-
-  // Set the default input path
-  if (! env_ipath.empty()){
-    ipath = env_ipath;
-  } 
+  try {
+    bool isLearning = false;
+    std::string dataFile("./dataFern");
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+    std::string objectName("object");
+    bool displayPoints = false;
+    bool useSequence = true;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string env_ipath;
+    std::string dirname;
+    std::string filename;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL){
+      env_ipath = ptenv;
+    }
 
-  // Read the command line options
-	if (getOptions(argc, argv,
-                 isLearning, dataFile, opt_click_allowed, opt_display, displayPoints, useSequence, opt_ipath) == false) {
-    exit (-1);
-  }
+    // Set the default input path
+    if (! env_ipath.empty()){
+      ipath = env_ipath;
+    }
 
-  // Get the option values
-  if (useSequence && !opt_ipath.empty()){
-    ipath = opt_ipath;
-  }
+    // Read the command line options
+    if (getOptions(argc, argv,
+                   isLearning, dataFile, opt_click_allowed, opt_display, displayPoints, useSequence, opt_ipath) == false) {
+      exit (-1);
+    }
 
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (useSequence && !opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (useSequence && !opt_ipath.empty()){
+      ipath = opt_ipath;
     }
-  }
 
-  // Test if an input path is set
-  if (useSequence && opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (useSequence && !opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
+    }
 
-  
-  // Declare two images, these are gray level images (unsigned char)
-  vpImage <unsigned char> I;
-  vpImage <unsigned char> Iref;
-
-
-  // Set the path location of the image sequence
-  dirname = ipath +  vpIoTools::path("/ViSP-images/cube/");
-
-  // Build the name of the image file
-  unsigned iter = 0; // Image number
-  std::ostringstream s;
-  s.setf(std::ios::right, std::ios::adjustfield);
-  s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-  filename = dirname + s.str();
-
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    if(useSequence){
-      vpCTRACE << "Load: " << filename << std::endl;
-      vpImageIo::read(Iref, filename) ;
-      I = Iref;
+    // Test if an input path is set
+    if (useSequence && opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
+      exit(-1);
     }
-  }
-  catch(...)
-  {
-    // an exception is throwned if an exception from readPGM has been catched
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
 
-  
-  // Declare a framegrabber
-  vpOpenCVGrabber g;
-  if(!useSequence){
+
+    // Declare two images, these are gray level images (unsigned char)
+    vpImage <unsigned char> I;
+    vpImage <unsigned char> Iref;
+
+
+    // Set the path location of the image sequence
+    dirname = ipath +  vpIoTools::path("/ViSP-images/cube/");
+
+    // Build the name of the image file
+    unsigned iter = 0; // Image number
+    std::ostringstream s;
+    s.setf(std::ios::right, std::ios::adjustfield);
+    s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+    filename = dirname + s.str();
+
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
     try{
-      g.open(I);
+      if(useSequence){
+        vpCTRACE << "Load: " << filename << std::endl;
+        vpImageIo::read(Iref, filename) ;
+        I = Iref;
+      }
     }
-    catch(...){
-      std::cout << "problem to initialise the framegrabber" << std::endl;
+    catch(...)
+    {
+      // an exception is throwned if an exception from readPGM has been catched
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
       exit(-1);
     }
-    g.acquire(I);
-    // initialise the reference image
-    g.acquire(Iref);
-  }
+
+
+    // Declare a framegrabber
+    vpOpenCVGrabber g;
+    if(!useSequence){
+      try{
+        g.open(I);
+      }
+      catch(...){
+        std::cout << "problem to initialise the framegrabber" << std::endl;
+        exit(-1);
+      }
+      g.acquire(I);
+      // initialise the reference image
+      g.acquire(Iref);
+    }
 
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
-  
+
 #if defined VISP_HAVE_X11
-  vpDisplayX displayRef;
+    vpDisplayX displayRef;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK displayRef;
+    vpDisplayGTK displayRef;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI displayRef;
+    vpDisplayGDI displayRef;
 #endif
 
-  // declare a planar object detector
-  vpFernClassifier fern;
+    // declare a planar object detector
+    vpFernClassifier fern;
 
-  if(isLearning){  
-    if(opt_display){
-      displayRef.init(Iref, 100, 100, "Reference image") ;
-      vpDisplay::display(Iref);
-      vpDisplay::flush(Iref);
-    }
-    vpImagePoint corners[2];
-    if (opt_display && opt_click_allowed){
-      std::cout << "Click on the top left and the bottom right corners to define the reference plane" << std::endl;
-      for (int i=0 ; i < 2 ; i++){
-        vpDisplay::getClick(Iref, corners[i]);
-        std::cout << corners[i] << std::endl;
+    if(isLearning){
+      if(opt_display){
+        displayRef.init(Iref, 100, 100, "Reference image") ;
+        vpDisplay::display(Iref);
+        vpDisplay::flush(Iref);
+      }
+      vpImagePoint corners[2];
+      if (opt_display && opt_click_allowed){
+        std::cout << "Click on the top left and the bottom right corners to define the reference plane" << std::endl;
+        for (int i=0 ; i < 2 ; i++){
+          vpDisplay::getClick(Iref, corners[i]);
+          std::cout << corners[i] << std::endl;
+        }
+      }
+      else{
+        corners[0].set_ij(1,1);
+        corners[1].set_ij(I.getHeight()-2,I.getWidth()-2);
       }
-    }
-    else{
-      corners[0].set_ij(1,1);
-      corners[1].set_ij(I.getHeight()-2,I.getWidth()-2);
-    }
 
-    if (opt_display) {
-      //Display the rectangle which defines the part of the image where the reference points are computed.
-      vpDisplay::displayRectangle(Iref, corners[0], corners[1], vpColor::green);
-      vpDisplay::flush(Iref);
-    }
+      if (opt_display) {
+        //Display the rectangle which defines the part of the image where the reference points are computed.
+        vpDisplay::displayRectangle(Iref, corners[0], corners[1], vpColor::green);
+        vpDisplay::flush(Iref);
+      }
 
-    if (opt_click_allowed){
-      std::cout << "Click on the image to continue" << std::endl;
-      vpDisplay::getClick(Iref);
-    }  
+      if (opt_click_allowed){
+        std::cout << "Click on the image to continue" << std::endl;
+        vpDisplay::getClick(Iref);
+      }
 
-    vpRect roi(corners[0], corners[1]);
+      vpRect roi(corners[0], corners[1]);
 
-    std::cout << "> train the classifier on the selected plane. (may take up to several minutes)." << std::endl;
-    if(opt_display) {
-      vpDisplay::display(Iref);
-      vpDisplay::flush(Iref);
-    }
-    
-    try{
-      fern.buildReference(Iref, roi); 
-    }
-    catch(vpException e){
-      std::cout << e.getMessage() << std::endl;
-    }
-    catch(...){
-      std::cout << "unknown error, line " << __LINE__ << std::endl;
-    }
-    try{
-      fern.record(objectName, dataFile);
-    }
-    catch(vpException e){
-      std::cout << e.getMessage() << std::endl;
-    }
-    catch(...){
-      std::cout << "unknown error, line " << __LINE__ << std::endl;
-    }
-    std::cout << __LINE__ << std::endl;
-  }
-  else{
-    if(!vpIoTools::checkFilename(dataFile)){
-      vpERROR_TRACE("cannot load the database with the specified name. Has the object been learned with the -l option? ");
-      exit(-1);
-    }
-    try{
-      // load a previously recorded file
-      fern.load(dataFile, objectName);
-    }
-    catch(...){
-      vpERROR_TRACE("cannot load the database with the specified name. Has the object been learned with the -l option? ");
-      exit(-1);
-    }
-  }
-  
-  
-  if(opt_display){
-    display.init(I, 110 + (int)Iref.getWidth(), 100, "Current image") ;
-    vpDisplay::display(I);
-    vpDisplay::flush(I);
-  }
+      std::cout << "> train the classifier on the selected plane. (may take up to several minutes)." << std::endl;
+      if(opt_display) {
+        vpDisplay::display(Iref);
+        vpDisplay::flush(Iref);
+      }
 
-  if (opt_display && opt_click_allowed){
-    std::cout << "Click on the current image to continue" << std::endl;
-    vpDisplay::displayCharString (I, vpImagePoint(15,15),
-                                  (char*)"Click on the current image to continue", vpColor::red);
-    vpDisplay::flush(I);
-    vpDisplay::getClick(I);
-  }  
-  
-  for ( ; ; ) {
-    // acquire a new image
-    if(useSequence){
-      iter++;
-      if(iter >= 80){
-        break;
-      }      
-      s.str("");
-      s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-      filename = dirname + s.str();
-      // read the image
-      vpImageIo::read(I, filename);
+      try{
+        fern.buildReference(Iref, roi);
+      }
+      catch(vpException e){
+        std::cout << e.getMessage() << std::endl;
+      }
+      catch(...){
+        std::cout << "unknown error, line " << __LINE__ << std::endl;
+      }
+      try{
+        fern.record(objectName, dataFile);
+      }
+      catch(vpException e){
+        std::cout << e.getMessage() << std::endl;
+      }
+      catch(...){
+        std::cout << "unknown error, line " << __LINE__ << std::endl;
+      }
+      std::cout << __LINE__ << std::endl;
     }
     else{
-      g.acquire(I);
+      if(!vpIoTools::checkFilename(dataFile)){
+        vpERROR_TRACE("cannot load the database with the specified name. Has the object been learned with the -l option? ");
+        exit(-1);
+      }
+      try{
+        // load a previously recorded file
+        fern.load(dataFile, objectName);
+      }
+      catch(...){
+        vpERROR_TRACE("cannot load the database with the specified name. Has the object been learned with the -l option? ");
+        exit(-1);
+      }
     }
-    
+
+
     if(opt_display){
+      display.init(I, 110 + (int)Iref.getWidth(), 100, "Current image") ;
       vpDisplay::display(I);
-      if(isLearning)
-        vpDisplay::display(Iref);
-    }
-    
-    double t0 = vpTime::measureTimeMs (); 
-    // detection  of the reference image
-    unsigned int nbpts;
-    try{
-      nbpts = fern.matchPoint(I);
-    }
-    catch(vpException e){
-      std::cout << e.getMessage() << std::endl;
-      return -1;
-    }
-    catch(...){
-      std::cout << "unknown error line " << __LINE__ << std::endl;
-      return -1;
+      vpDisplay::flush(I);
     }
-    std::cout << "matching " << nbpts << " points : " << vpTime::measureTimeMs () - t0 << " ms" << std::endl;
-    
-    if(opt_display){
-      fern.display(Iref, I, 7);
+
+    if (opt_display && opt_click_allowed){
+      std::cout << "Click on the current image to continue" << std::endl;
+      vpDisplay::displayCharString (I, vpImagePoint(15,15),
+                                    (char*)"Click on the current image to continue", vpColor::red);
       vpDisplay::flush(I);
-      if(isLearning)
-        vpDisplay::flush(Iref);
-      if(vpDisplay::getClick(I, false)){
-        break;
+      vpDisplay::getClick(I);
+    }
+
+    for ( ; ; ) {
+      // acquire a new image
+      if(useSequence){
+        iter++;
+        if(iter >= 80){
+          break;
+        }
+        s.str("");
+        s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+        filename = dirname + s.str();
+        // read the image
+        vpImageIo::read(I, filename);
+      }
+      else{
+        g.acquire(I);
+      }
+
+      if(opt_display){
+        vpDisplay::display(I);
+        if(isLearning)
+          vpDisplay::display(Iref);
+      }
+
+      double t0 = vpTime::measureTimeMs ();
+      // detection  of the reference image
+      unsigned int nbpts;
+      try{
+        nbpts = fern.matchPoint(I);
+      }
+      catch(vpException e){
+        std::cout << e.getMessage() << std::endl;
+        return -1;
+      }
+      catch(...){
+        std::cout << "unknown error line " << __LINE__ << std::endl;
+        return -1;
+      }
+      std::cout << "matching " << nbpts << " points : " << vpTime::measureTimeMs () - t0 << " ms" << std::endl;
+
+      if(opt_display){
+        fern.display(Iref, I, 7);
+        vpDisplay::flush(I);
+        if(isLearning)
+          vpDisplay::flush(Iref);
+        if(vpDisplay::getClick(I, false)){
+          break;
+        }
       }
     }
+
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  
-  return 0;
 }
 
 #else
diff --git a/example/key-point/keyPointSurf.cpp b/example/key-point/keyPointSurf.cpp
index b40a5c7f..590c0886 100644
--- a/example/key-point/keyPointSurf.cpp
+++ b/example/key-point/keyPointSurf.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: keyPointSurf.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: keyPointSurf.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -76,6 +76,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:h"
 
+void usage(const char *name, const char *badparam, std::string ipath);
+bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_allowed, bool &display);
+
 /*!
 
   Print the program options.
@@ -130,21 +133,20 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv, std::string &ipath,
-                bool &click_allowed, bool &display)
+bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
+    case 'i': ipath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath);
+      usage(argv[0], optarg_, ipath);
       return false; break;
     }
   }
@@ -153,7 +155,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
     // standalone param or error
     usage(argv[0], NULL, ipath);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -164,205 +166,211 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string dirname;
-  std::string filename;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_click_allowed,
-                 opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string dirname;
+    std::string filename;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_click_allowed,
+                   opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL, ipath);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
+      exit(-1);
+    }
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  vpImage<unsigned char> Iref ;
-  vpImage<unsigned char> Icur ;
-
-  // Set the path location of the image sequence
-  dirname = ipath +  vpIoTools::path("/ViSP-images/cube/");
-
-  // Build the name of the image file
-  unsigned iter = 0; // Image number
-  std::ostringstream s;
-  s.setf(std::ios::right, std::ios::adjustfield);
-  s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-  filename = dirname + s.str();
-
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    vpCTRACE << "Load: " << filename << std::endl;
-
-    vpImageIo::read(Iref, filename) ;
-  }
-  catch(...)
-  {
-    // an exception is throwned if an exception from readPGM has been catched
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    vpImage<unsigned char> Iref ;
+    vpImage<unsigned char> Icur ;
 
-  // We open a window using either X11, GTK or GDI.
-#if defined VISP_HAVE_X11
-  vpDisplayX display[2];
-#elif defined VISP_HAVE_GTK
-  vpDisplayGTK display[2];
-#elif defined VISP_HAVE_GDI
-  vpDisplayGDI display[2];
-#endif
+    // Set the path location of the image sequence
+    dirname = ipath +  vpIoTools::path("/ViSP-images/cube/");
 
-  if (opt_display) {
+    // Build the name of the image file
+    unsigned int iter = 0; // Image number
+    std::ostringstream s;
+    s.setf(std::ios::right, std::ios::adjustfield);
+    s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+    filename = dirname + s.str();
+
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
     try{
-      // Display size is automatically defined by the image (I) size
-      display[0].init(Iref, 100, 100,"Display reference image") ;
-      vpDisplay::display(Iref) ;
-      vpDisplay::flush(Iref) ;
+      vpCTRACE << "Load: " << filename << std::endl;
+
+      vpImageIo::read(Iref, filename) ;
     }
     catch(...)
     {
-      vpERROR_TRACE("Error while displaying the image") ;
+      // an exception is throwned if an exception from readPGM has been catched
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
       exit(-1);
     }
-  }
 
-  vpImagePoint corners[2];
-  if (opt_display && opt_click_allowed)
-  {
-    std::cout << "Click on the top left and the bottom right corners to define the part of the image where the reference points will be computed" << std::endl;
-    for (unsigned int i=0 ; i < 2 ; i++)
-    {
-      vpDisplay::getClick(Iref, corners[i]);
-      std::cout << corners[i] << std::endl;
-    }
-  }
-  else
-  {
-    corners[0].set_ij(156,209);
-    corners[1].set_ij(272,378);
-  }
+    // We open a window using either X11, GTK or GDI.
+#if defined VISP_HAVE_X11
+    vpDisplayX display[2];
+#elif defined VISP_HAVE_GTK
+    vpDisplayGTK display[2];
+#elif defined VISP_HAVE_GDI
+    vpDisplayGDI display[2];
+#endif
 
-  if (opt_display)
-  {
-    //Display the rectangle which defines the part of the image where the reference points are computed.
-    vpDisplay::displayRectangle(Iref, corners[0], corners[1], vpColor::green);
-    vpDisplay::flush(Iref);
-  }
+    if (opt_display) {
+      try{
+        // Display size is automatically defined by the image (I) size
+        display[0].init(Iref, 100, 100,"Display reference image") ;
+        vpDisplay::display(Iref) ;
+        vpDisplay::flush(Iref) ;
+      }
+      catch(...)
+      {
+        vpERROR_TRACE("Error while displaying the image") ;
+        exit(-1);
+      }
+    }
 
-  if (opt_click_allowed)
-  {
-    std::cout << "Click on the image to continue" << std::endl;
-    vpDisplay::getClick(Iref);
-  }
+    vpImagePoint corners[2];
+    if (opt_display && opt_click_allowed)
+    {
+      std::cout << "Click on the top left and the bottom right corners to define the part of the image where the reference points will be computed" << std::endl;
+      for (unsigned int i=0 ; i < 2 ; i++)
+      {
+        vpDisplay::getClick(Iref, corners[i]);
+        std::cout << corners[i] << std::endl;
+      }
+    }
+    else
+    {
+      corners[0].set_ij(156,209);
+      corners[1].set_ij(272,378);
+    }
 
-  vpKeyPointSurf surf;
-  //   unsigned int nbrRef;
-  unsigned int height, width;
-  height = (unsigned int)(corners[1].get_i() - corners[0].get_i());
-  width = (unsigned int)(corners[1].get_j() - corners[0].get_j());
+    if (opt_display)
+    {
+      //Display the rectangle which defines the part of the image where the reference points are computed.
+      vpDisplay::displayRectangle(Iref, corners[0], corners[1], vpColor::green);
+      vpDisplay::flush(Iref);
+    }
 
-  //Computes the reference points
-  /* nbrRef = */ surf.buildReference(Iref, corners[0], height, width);
+    if (opt_click_allowed)
+    {
+      std::cout << "Click on the image to continue" << std::endl;
+      vpDisplay::getClick(Iref);
+    }
 
-  unsigned int nbrPair = 0;
+    vpKeyPointSurf surf;
+    //   unsigned int nbrRef;
+    unsigned int height, width;
+    height = (unsigned int)(corners[1].get_i() - corners[0].get_i());
+    width = (unsigned int)(corners[1].get_j() - corners[0].get_j());
 
-  vpImageIo::read(Icur, filename);
+    //Computes the reference points
+    /* nbrRef = */ surf.buildReference(Iref, corners[0], height, width);
 
-  if (opt_display) {
-    try{
-      // Display size is automatically defined by the image (I) size
-      display[1].init(Icur, (int)(100+Iref.getWidth()), 100,"Display current image") ;
-      vpDisplay::display(Icur) ;
-      vpDisplay::flush(Icur) ;
-    }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
+    unsigned int nbrPair = 0;
 
-  for (int iter = 1 ; iter < 30 ; iter++)
-  {
-    std::cout <<"----------------------------------------------------------"<<std::endl;
-    // set the new image name
-    s.str("");
-    s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-    filename = dirname + s.str();
-    // read the image
     vpImageIo::read(Icur, filename);
+
     if (opt_display) {
-      // Display the image
-      vpDisplay::display(Iref) ;
-      vpDisplay::display(Icur) ;
+      try{
+        // Display size is automatically defined by the image (I) size
+        display[1].init(Icur, (int)(100+Iref.getWidth()), 100,"Display current image") ;
+        vpDisplay::display(Icur) ;
+        vpDisplay::flush(Icur) ;
+      }
+      catch(...)
+      {
+        vpERROR_TRACE("Error while displaying the image") ;
+        exit(-1);
+      }
     }
 
-    nbrPair = surf.matchPoint(Icur);
-    std::cout << "Number of matched point : " << nbrPair <<std::endl;
-
-    if (opt_display)
+    for (iter = 1 ; iter < 30 ; iter++)
     {
-      // Display the matched features
-      surf.display(Iref, Icur, 7);
-      vpDisplay::displayRectangle(Iref, corners[0], corners[1], vpColor::red);
-      vpDisplay::flush(Iref) ;
-      vpDisplay::flush(Icur) ;
+      std::cout <<"----------------------------------------------------------"<<std::endl;
+      // set the new image name
+      s.str("");
+      s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+      filename = dirname + s.str();
+      // read the image
+      vpImageIo::read(Icur, filename);
+      if (opt_display) {
+        // Display the image
+        vpDisplay::display(Iref) ;
+        vpDisplay::display(Icur) ;
+      }
+
+      nbrPair = surf.matchPoint(Icur);
+      std::cout << "Number of matched point : " << nbrPair <<std::endl;
+
+      if (opt_display)
+      {
+        // Display the matched features
+        surf.display(Iref, Icur, 7);
+        vpDisplay::displayRectangle(Iref, corners[0], corners[1], vpColor::red);
+        vpDisplay::flush(Iref) ;
+        vpDisplay::flush(Icur) ;
+      }
     }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 
diff --git a/example/key-point/planarObjectDetector.cpp b/example/key-point/planarObjectDetector.cpp
index b6415a6b..0fe44998 100644
--- a/example/key-point/planarObjectDetector.cpp
+++ b/example/key-point/planarObjectDetector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: planarObjectDetector.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: planarObjectDetector.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -75,6 +75,10 @@
 
 #define GETOPTARGS  "hlcdb:i:sp"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &isLearning, std::string& dataFile, bool& click_allowed,
+                bool& display, bool& displayPoints, bool& useSequence, std::string& ipath);
+
 /*!
 
   Print the program options.
@@ -147,24 +151,24 @@ OPTIONS:                                               \n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv,
-                bool &isLearning, std::string& dataFile, bool& click_allowed, bool& display, bool& displayPoints, bool& useSequence, std::string& ipath)
+bool getOptions(int argc, const char **argv, bool &isLearning, std::string& dataFile, bool& click_allowed,
+                bool& display, bool& displayPoints, bool& useSequence, std::string& ipath)
 {
-  const char *optarg;
+  const char *optarg_;
   int   c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
     case 'l': isLearning = true; break;
     case 'h': usage(argv[0], NULL); return false; break;
-    case 'b': dataFile = optarg; break;
+    case 'b': dataFile = optarg_; break;
     case 'p': displayPoints = true; break;
     case 's': useSequence = false; break;
-    case 'i': ipath = optarg; break;
+    case 'i': ipath = optarg_; break;
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -173,7 +177,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -185,273 +189,279 @@ bool getOptions(int argc, const char **argv,
 int 
 main(int argc, const char** argv)
 {
-  bool isLearning = false;
-  std::string dataFile("./dataPlanar");
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-  std::string objectName("object");
-  bool displayPoints = false;
-  bool useSequence = true;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string env_ipath;
-  std::string dirname;
-  std::string filename;
-
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL){
-    env_ipath = ptenv;
-  }
-
-  // Set the default input path
-  if (! env_ipath.empty()){
-    ipath = env_ipath;
-  } 
+  try {
+    bool isLearning = false;
+    std::string dataFile("./dataPlanar");
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+    std::string objectName("object");
+    bool displayPoints = false;
+    bool useSequence = true;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string env_ipath;
+    std::string dirname;
+    std::string filename;
+
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL){
+      env_ipath = ptenv;
+    }
 
-  // Read the command line options
-	if (getOptions(argc, argv,
-                 isLearning, dataFile, opt_click_allowed, opt_display, displayPoints, useSequence, opt_ipath) == false) {
-    exit (-1);
-  }
+    // Set the default input path
+    if (! env_ipath.empty()){
+      ipath = env_ipath;
+    }
 
-  // Get the option values
-  if (useSequence && !opt_ipath.empty()){
-    ipath = opt_ipath;
-  }
+    // Read the command line options
+    if (getOptions(argc, argv,
+                   isLearning, dataFile, opt_click_allowed, opt_display, displayPoints, useSequence, opt_ipath) == false) {
+      exit (-1);
+    }
 
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (useSequence && !opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (useSequence && !opt_ipath.empty()){
+      ipath = opt_ipath;
     }
-  }
 
-  // Test if an input path is set
-  if (useSequence && opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (useSequence && !opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
+    }
 
-  
-  // Declare two images, these are gray level images (unsigned char)
-  vpImage <unsigned char> I;
-  vpImage <unsigned char> Iref;
-
-
-  // Set the path location of the image sequence
-  dirname = ipath +  vpIoTools::path("/ViSP-images/cube/");
-
-  // Build the name of the image file
-  unsigned iter = 0; // Image number
-  std::ostringstream s;
-  s.setf(std::ios::right, std::ios::adjustfield);
-  s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-  filename = dirname + s.str();
-
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    if(useSequence){
-      vpCTRACE << "Load: " << filename << std::endl;
-      vpImageIo::read(Iref, filename) ;
-      I = Iref;
+    // Test if an input path is set
+    if (useSequence && opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
+      exit(-1);
     }
-  }
-  catch(...)
-  {
-    // an exception is throwned if an exception from readPGM has been catched
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
 
-  
-  // Declare a framegrabber
-  vpOpenCVGrabber g;
-  if(!useSequence){
+
+    // Declare two images, these are gray level images (unsigned char)
+    vpImage <unsigned char> I;
+    vpImage <unsigned char> Iref;
+
+
+    // Set the path location of the image sequence
+    dirname = ipath +  vpIoTools::path("/ViSP-images/cube/");
+
+    // Build the name of the image file
+    unsigned iter = 0; // Image number
+    std::ostringstream s;
+    s.setf(std::ios::right, std::ios::adjustfield);
+    s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+    filename = dirname + s.str();
+
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
     try{
-      g.open(I);
+      if(useSequence){
+        vpCTRACE << "Load: " << filename << std::endl;
+        vpImageIo::read(Iref, filename) ;
+        I = Iref;
+      }
     }
-    catch(...){
-      std::cout << "problem to initialise the framegrabber" << std::endl;
+    catch(...)
+    {
+      // an exception is throwned if an exception from readPGM has been catched
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
       exit(-1);
     }
-    
-    
-    g.acquire(I);
-    // initialise the reference image
-    g.acquire(Iref);
-  }
+
+
+    // Declare a framegrabber
+    vpOpenCVGrabber g;
+    if(!useSequence){
+      try{
+        g.open(I);
+      }
+      catch(...){
+        std::cout << "problem to initialise the framegrabber" << std::endl;
+        exit(-1);
+      }
+
+
+      g.acquire(I);
+      // initialise the reference image
+      g.acquire(Iref);
+    }
 
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
-  
+
 #if defined VISP_HAVE_X11
-  vpDisplayX displayRef;
+    vpDisplayX displayRef;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK displayRef;
+    vpDisplayGTK displayRef;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI displayRef;
+    vpDisplayGDI displayRef;
 #endif
 
-  // declare a planar object detector
-  vpPlanarObjectDetector planar;
+    // declare a planar object detector
+    vpPlanarObjectDetector planar;
 
-  vpImagePoint corners[2];
-  if(isLearning){  
-    if(opt_display){
-      displayRef.init(Iref, 100, 100, "Reference image") ;
-      vpDisplay::display(Iref);
-      vpDisplay::flush(Iref);
-    }
-    if (opt_display && opt_click_allowed){
-      std::cout << "Click on the top left and the bottom right corners to define the reference plane" << std::endl;
-      for (int i=0 ; i < 2 ; i++){
-        vpDisplay::getClick(Iref, corners[i]);
-        std::cout << corners[i] << std::endl;
+    vpImagePoint corners[2];
+    if(isLearning){
+      if(opt_display){
+        displayRef.init(Iref, 100, 100, "Reference image") ;
+        vpDisplay::display(Iref);
+        vpDisplay::flush(Iref);
+      }
+      if (opt_display && opt_click_allowed){
+        std::cout << "Click on the top left and the bottom right corners to define the reference plane" << std::endl;
+        for (int i=0 ; i < 2 ; i++){
+          vpDisplay::getClick(Iref, corners[i]);
+          std::cout << corners[i] << std::endl;
+        }
+      }
+      else{
+        corners[0].set_ij(50, I.getWidth()-100);// small ROI for the automated test
+        corners[1].set_ij(I.getHeight()-100, I.getWidth()-2);
       }
-    }
-    else{
-      corners[0].set_ij(50, I.getWidth()-100);// small ROI for the automated test
-      corners[1].set_ij(I.getHeight()-100, I.getWidth()-2);
-    }
-
-    if (opt_display) {
-      //Display the rectangle which defines the part of the image where the reference points are computed.
-      vpDisplay::displayRectangle(Iref, corners[0], corners[1], vpColor::green);
-      vpDisplay::flush(Iref);
-    }
-
-    if (opt_click_allowed){
-      std::cout << "Click on the image to continue" << std::endl;
-      vpDisplay::getClick(Iref);
-    }  
 
-    vpRect roi(corners[0], corners[1]);
+      if (opt_display) {
+        //Display the rectangle which defines the part of the image where the reference points are computed.
+        vpDisplay::displayRectangle(Iref, corners[0], corners[1], vpColor::green);
+        vpDisplay::flush(Iref);
+      }
 
-    std::cout << "> train the classifier on the selected plane (may take up to several minutes)." << std::endl;
-    if(opt_display) {
-      vpDisplay::display(Iref);
-      vpDisplay::flush(Iref);
-    }
-    double t0 = vpTime::measureTimeMs (); 
-    planar.buildReference(Iref, roi); 
-    std::cout << "build reference in " << vpTime::measureTimeMs () - t0 << " ms" << std::endl;
-    t0 = vpTime::measureTimeMs (); 
-    planar.recordDetector(objectName, dataFile);
-    std::cout << "record detector in " << vpTime::measureTimeMs () - t0 << " ms" << std::endl;
-  }
-  else{    
-    if(!vpIoTools::checkFilename(dataFile)){
-      vpERROR_TRACE("cannot load the database with the specified name. Has the object been learned with the -l option? ");
-      exit(-1);
-    }
-    try{
-      // load a previously recorded file
-      planar.load(dataFile, objectName);
-    }
-    catch(...){
-      vpERROR_TRACE("cannot load the database with the specified name. Has the object been learned with the -l option? ");
-      exit(-1);
-    }
-  }
+      if (opt_click_allowed){
+        std::cout << "Click on the image to continue" << std::endl;
+        vpDisplay::getClick(Iref);
+      }
 
-  if(opt_display){
-    display.init(I, 110 + (int)Iref.getWidth(), 100, "Current image") ;
-    vpDisplay::display(I);
-    vpDisplay::flush(I);
-  }
+      vpRect roi(corners[0], corners[1]);
 
-  if (opt_display && opt_click_allowed){
-    std::cout << "Click on the reference image to continue" << std::endl;
-    vpDisplay::displayCharString (Iref, vpImagePoint(15,15), 
-                                  (char*)"Click on the reference image to continue", vpColor::red);
-    vpDisplay::flush(Iref);
-    vpDisplay::getClick(Iref);
-  }  
-  
-  for ( ; ; ) {
-    // acquire a new image
-    if(useSequence){
-      iter++;
-      if(iter >= 80){
-        break;
-      }      
-      s.str("");
-      s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-      filename = dirname + s.str();
-      // read the image
-      vpImageIo::read(I, filename);
+      std::cout << "> train the classifier on the selected plane (may take up to several minutes)." << std::endl;
+      if(opt_display) {
+        vpDisplay::display(Iref);
+        vpDisplay::flush(Iref);
+      }
+      double t0 = vpTime::measureTimeMs ();
+      planar.buildReference(Iref, roi);
+      std::cout << "build reference in " << vpTime::measureTimeMs () - t0 << " ms" << std::endl;
+      t0 = vpTime::measureTimeMs ();
+      planar.recordDetector(objectName, dataFile);
+      std::cout << "record detector in " << vpTime::measureTimeMs () - t0 << " ms" << std::endl;
     }
     else{
-      g.acquire(I);
+      if(!vpIoTools::checkFilename(dataFile)){
+        vpERROR_TRACE("cannot load the database with the specified name. Has the object been learned with the -l option? ");
+        exit(-1);
+      }
+      try{
+        // load a previously recorded file
+        planar.load(dataFile, objectName);
+      }
+      catch(...){
+        vpERROR_TRACE("cannot load the database with the specified name. Has the object been learned with the -l option? ");
+        exit(-1);
+      }
     }
-    
+
     if(opt_display){
+      display.init(I, 110 + (int)Iref.getWidth(), 100, "Current image") ;
       vpDisplay::display(I);
+      vpDisplay::flush(I);
     }
-    
-    double t0 = vpTime::measureTimeMs (); 
-    // detection  of the reference planar surface
-    bool isDetected = planar.matchPoint(I);
-    std::cout << "matching in " << vpTime::measureTimeMs () - t0 << " ms" << std::endl;
-    
-    if(isDetected){
-      vpHomography H;
-      planar.getHomography(H);    
-      std::cout << " > computed homography:" << std::endl << H << std::endl;
+
+    if (opt_display && opt_click_allowed){
+      std::cout << "Click on the reference image to continue" << std::endl;
+      vpDisplay::displayCharString (Iref, vpImagePoint(15,15),
+                                    (char*)"Click on the reference image to continue", vpColor::red);
+      vpDisplay::flush(Iref);
+      vpDisplay::getClick(Iref);
+    }
+
+    for ( ; ; ) {
+      // acquire a new image
+      if(useSequence){
+        iter++;
+        if(iter >= 80){
+          break;
+        }
+        s.str("");
+        s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+        filename = dirname + s.str();
+        // read the image
+        vpImageIo::read(I, filename);
+      }
+      else{
+        g.acquire(I);
+      }
+
       if(opt_display){
-        if(isLearning){
-          vpDisplay::display(Iref);
-          vpDisplay::displayRectangle(Iref, corners[0], corners[1], vpColor::green);
-          planar.display(Iref, I, displayPoints);
-          vpDisplay::flush(Iref);
-        }else{
-          planar.display(I, displayPoints);
+        vpDisplay::display(I);
+      }
+
+      double t0 = vpTime::measureTimeMs ();
+      // detection  of the reference planar surface
+      bool isDetected = planar.matchPoint(I);
+      std::cout << "matching in " << vpTime::measureTimeMs () - t0 << " ms" << std::endl;
+
+      if(isDetected){
+        vpHomography H;
+        planar.getHomography(H);
+        std::cout << " > computed homography:" << std::endl << H << std::endl;
+        if(opt_display){
+          if(isLearning){
+            vpDisplay::display(Iref);
+            vpDisplay::displayRectangle(Iref, corners[0], corners[1], vpColor::green);
+            planar.display(Iref, I, displayPoints);
+            vpDisplay::flush(Iref);
+          }else{
+            planar.display(I, displayPoints);
+          }
         }
       }
-    }
-    else{
-      std::cout << " > reference is not detected in the image" << std::endl;
-    }
-    if(opt_display){
-      vpDisplay::flush(I);
-      if(vpDisplay::getClick(I, false)){
-        break;
+      else{
+        std::cout << " > reference is not detected in the image" << std::endl;
+      }
+      if(opt_display){
+        vpDisplay::flush(I);
+        if(vpDisplay::getClick(I, false)){
+          break;
+        }
       }
     }
+
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  
-  return 0;
 }
 
 #else
diff --git a/example/manual/CMakeLists.txt b/example/manual/CMakeLists.txt
index 28492779..d0a30429 100644
--- a/example/manual/CMakeLists.txt
+++ b/example/manual/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -47,7 +47,6 @@ SET (SOURCE
   geometric-features/manGeometricFeatures.cpp
   hello-world/CMake/HelloWorld.cpp
   image-manipulation/manDisplay.cpp
-  image-manipulation/manGrab1394-1.cpp
   image-manipulation/manGrab1394-2.cpp
   image-manipulation/manGrabDirectShow.cpp
   image-manipulation/manGrabDisk.cpp
diff --git a/example/manual/geometric-features/manGeometricFeatures.cpp b/example/manual/geometric-features/manGeometricFeatures.cpp
index 3a116f07..c3b11bdc 100644
--- a/example/manual/geometric-features/manGeometricFeatures.cpp
+++ b/example/manual/geometric-features/manGeometricFeatures.cpp
@@ -1,10 +1,10 @@
 /****************************************************************************
  *
- * $Id: manGeometricFeatures.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: manGeometricFeatures.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
- * 
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * ("GPL") version 2 as published by the Free Software Foundation.
@@ -12,11 +12,11 @@
  * distribution for additional information about the GNU GPL.
  *
  * For using ViSP with software that can not be combined with the GNU
- * GPL, please contact INRIA about acquiring a ViSP Professional 
+ * GPL, please contact INRIA about acquiring a ViSP Professional
  * Edition License.
  *
  * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
- * 
+ *
  * This software was developed at:
  * INRIA Rennes - Bretagne Atlantique
  * Campus Universitaire de Beaulieu
@@ -26,7 +26,7 @@
  *
  * If you have questions regarding the use of this file, please contact
  * INRIA at visp@inria.fr
- * 
+ *
  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
@@ -77,65 +77,70 @@
 int main()
 {
 #ifdef VISP_HAVE_GTK
-  
-  std::cout << "ViSP geometric features display example" <<std::endl;
-  unsigned int height = 288;
-  unsigned int width = 384;
-  vpImage<unsigned char> I(height,width);
-  I = 255; // I is a white image
-
-  // create a display window
-  vpDisplayGTK display;
-  // initialize a display attached to image I
-  display.init(I,100,100,"ViSP geometric features display");
-  // camera parameters to digitalize the image plane 
-  vpCameraParameters cam(600,600,width/2,height/2); // px,py,u0,v0
-
-  // pose of the camera with reference to the scene
-  vpTranslationVector t(0,0,1);
-  vpRxyzVector rxyz(-M_PI/4,0,0);
-  vpRotationMatrix R(rxyz);
-  vpHomogeneousMatrix cMo(t, R);
-
-  // scene building, geometric features definition
-  vpPoint point;
-  point.setWorldCoordinates(0,0,0);// (X0=0,Y0=0,Z0=0)
-  vpLine line;
-  line.setWorldCoordinates(1,1,0,0,0,0,1,0); // planes:(X+Y=0)&(Z=0)
-  vpCylinder cylinder;
-  cylinder.setWorldCoordinates(1,-1,0,0,0,0,0.1); // alpha=1,beta=-1,gamma=0,
-  // X0=0,Y0=0,Z0=0,R=0.1
-  vpCircle circle;
-  circle.setWorldCoordinates(0,0,1,0,0,0,0.1); // plane:(Z=0),X0=0,Y0=0,Z=0,R=0.1
-  vpSphere sphere;
-  sphere.setWorldCoordinates(0,0,0,0.1); // X0=0,Y0=0,Z0=0,R=0.1
-
-  // change frame to be the camera frame and project features in the image plane
-  point.project(cMo);
-  line.project(cMo);
-  cylinder.project(cMo);
-  circle.project(cMo);  
-  sphere.project(cMo);  
-
-  // display the scene
-  vpDisplay::display(I); // display I
-  // draw the projections of the 3D geometric features in the image plane.
-  point.display(I,cam,vpColor::black);   // draw a black cross over I 
-  line.display(I,cam,vpColor::blue);     // draw a blue line over I 
-  cylinder.display(I,cam,vpColor::red);  // draw two red lines over I 
-  circle.display(I,cam,vpColor::orange); // draw an orange ellipse over I 
-  sphere.display(I,cam,vpColor::black);  // draw a black ellipse over I 
-
-  vpDisplay::flush(I);    // flush the display buffer
-  std::cout << "A click in the display to exit" << std::endl;  
-  vpDisplay::getClick(I); // wait for a click in the display to exit
-
-  // save the drawing
-  vpImage<vpRGBa> Ic;
-  vpDisplay::getImage(I,Ic);
-  std::cout << "ViSP creates \"./geometricFeatures.ppm\" B&W image "<< std::endl;
-  vpImageIo::write(Ic, "./geometricFeatures.ppm");
+  try {
+    std::cout << "ViSP geometric features display example" <<std::endl;
+    unsigned int height = 288;
+    unsigned int width = 384;
+    vpImage<unsigned char> I(height,width);
+    I = 255; // I is a white image
+
+    // create a display window
+    vpDisplayGTK display;
+    // initialize a display attached to image I
+    display.init(I,100,100,"ViSP geometric features display");
+    // camera parameters to digitalize the image plane
+    vpCameraParameters cam(600,600,width/2,height/2); // px,py,u0,v0
+
+    // pose of the camera with reference to the scene
+    vpTranslationVector t(0,0,1);
+    vpRxyzVector rxyz(-M_PI/4,0,0);
+    vpRotationMatrix R(rxyz);
+    vpHomogeneousMatrix cMo(t, R);
+
+    // scene building, geometric features definition
+    vpPoint point;
+    point.setWorldCoordinates(0,0,0);// (X0=0,Y0=0,Z0=0)
+    vpLine line;
+    line.setWorldCoordinates(1,1,0,0,0,0,1,0); // planes:(X+Y=0)&(Z=0)
+    vpCylinder cylinder;
+    cylinder.setWorldCoordinates(1,-1,0,0,0,0,0.1); // alpha=1,beta=-1,gamma=0,
+    // X0=0,Y0=0,Z0=0,R=0.1
+    vpCircle circle;
+    circle.setWorldCoordinates(0,0,1,0,0,0,0.1); // plane:(Z=0),X0=0,Y0=0,Z=0,R=0.1
+    vpSphere sphere;
+    sphere.setWorldCoordinates(0,0,0,0.1); // X0=0,Y0=0,Z0=0,R=0.1
+
+    // change frame to be the camera frame and project features in the image plane
+    point.project(cMo);
+    line.project(cMo);
+    cylinder.project(cMo);
+    circle.project(cMo);
+    sphere.project(cMo);
+
+    // display the scene
+    vpDisplay::display(I); // display I
+    // draw the projections of the 3D geometric features in the image plane.
+    point.display(I,cam,vpColor::black);   // draw a black cross over I
+    line.display(I,cam,vpColor::blue);     // draw a blue line over I
+    cylinder.display(I,cam,vpColor::red);  // draw two red lines over I
+    circle.display(I,cam,vpColor::orange); // draw an orange ellipse over I
+    sphere.display(I,cam,vpColor::black);  // draw a black ellipse over I
+
+    vpDisplay::flush(I);    // flush the display buffer
+    std::cout << "A click in the display to exit" << std::endl;
+    vpDisplay::getClick(I); // wait for a click in the display to exit
+
+    // save the drawing
+    vpImage<vpRGBa> Ic;
+    vpDisplay::getImage(I,Ic);
+    std::cout << "ViSP creates \"./geometricFeatures.ppm\" B&W image "<< std::endl;
+    vpImageIo::write(Ic, "./geometricFeatures.ppm");
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 
 #endif
-  return 0;
 }
diff --git a/example/manual/hello-world/Autotools/have_visp.m4 b/example/manual/hello-world/Autotools/have_visp.m4
index 3d99b63d..951eb3df 100644
--- a/example/manual/hello-world/Autotools/have_visp.m4
+++ b/example/manual/hello-world/Autotools/have_visp.m4
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: have_visp.m4 4057 2013-01-05 13:10:29Z fspindle $
+# $Id: have_visp.m4 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/manual/hello-world/CMake/HelloWorld.cpp b/example/manual/hello-world/CMake/HelloWorld.cpp
index 552bcb56..86acb033 100644
--- a/example/manual/hello-world/CMake/HelloWorld.cpp
+++ b/example/manual/hello-world/CMake/HelloWorld.cpp
@@ -6,18 +6,25 @@
 
 int main()
 {
-  vpThetaUVector tu;
+  try {
+    vpThetaUVector tu;
 
-  // Construct a rotation matrix from the theta U angles
-  vpRotationMatrix R(vpMath::rad(0.),vpMath::rad(180)+100*std::numeric_limits<double>::epsilon(),0.);
+    // Construct a rotation matrix from the theta U angles
+    vpRotationMatrix R(vpMath::rad(0.),vpMath::rad(180)+100*std::numeric_limits<double>::epsilon(),0.);
 
-  // Extract the theta U angles from a rotation matrix
-  tu.buildFrom(R);
+    // Extract the theta U angles from a rotation matrix
+    tu.buildFrom(R);
 
-  // Since the rotation vector is 3 values column vector, the
-  // transpose operation produce a row vector.
-  vpRowVector tu_t = tu.t();
-  
-  // Print the transpose row vector
-  std::cout << tu_t << std::endl;
+    // Since the rotation vector is 3 values column vector, the
+    // transpose operation produce a row vector.
+    vpRowVector tu_t = tu.t();
+
+    // Print the transpose row vector
+    std::cout << tu_t << std::endl;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
diff --git a/example/manual/image-manipulation/manDisplay.cpp b/example/manual/image-manipulation/manDisplay.cpp
index 25fba953..5261d74f 100644
--- a/example/manual/image-manipulation/manDisplay.cpp
+++ b/example/manual/image-manipulation/manDisplay.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: manDisplay.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: manDisplay.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -55,96 +55,102 @@
 
 int main()
 {
-  // Create a grey level image
-  vpImage<vpRGBa> I ;
+  try {
+    // Create a grey level image
+    vpImage<vpRGBa> I ;
 
-  // Create image points for pixel coordinates
-  vpImagePoint ip, ip1, ip2;
+    // Create image points for pixel coordinates
+    vpImagePoint ip, ip1, ip2;
 
-  // Load a grey image from the disk. Klimt.ppm image is part of the ViSP 
-  // image data set available from http://www.irisa.fr/lagadic/visp/download.html
-  std::string filename = "./Klimt.ppm";
-  vpImageIo::read(I, filename) ;
+    // Load a grey image from the disk. Klimt.ppm image is part of the ViSP
+    // image data set available from http://www.irisa.fr/lagadic/visp/download.html
+    std::string filename = "./Klimt.ppm";
+    vpImageIo::read(I, filename) ;
 
 #ifdef VISP_HAVE_GTK
-  // Create a display using GTK
-  vpDisplayGTK display;
-
-  // For this grey level image, open a GTK display at position 100,100
-  // in the screen, and with title "GTK display"
-  display.init(I, 100, 100, "GTK display") ;
-
-  // Display the image
-  vpDisplay::display(I) ;
-
-  // Display in overlay a red cross at position 100,10 in the
-  // image. The lines are 20 pixels long
-  ip.set_i( 200 );
-  ip.set_j( 200 );
-  vpDisplay::displayCross(I, ip, 20, vpColor::red, 3) ;
-
-  // Display in overlay a horizontal red line
-  ip1.set_i( 10 );
-  ip1.set_j( 0 );
-  ip2.set_i( 10 );
-  ip2.set_j( I.getWidth() );
-  vpDisplay::displayLine(I, ip1, ip2, vpColor::red, 3) ;
-
-  // Display in overlay a vertical green dot line
-  ip1.set_i( 0 );
-  ip1.set_j( 20 );
-  ip2.set_i( I.getWidth() );
-  ip2.set_j( 20 );
-  vpDisplay::displayDotLine(I, ip1, ip2, vpColor::green, 3) ;
-
-  // Display in overlay a blue arrow
-  ip1.set_i( 0 );
-  ip1.set_j( 0 );
-  ip2.set_i( 100 );
-  ip2.set_j( 100 );
-  vpDisplay::displayArrow(I, ip1, ip2, vpColor::blue, 8, 4, 3) ;
-
-  // Display in overlay some circles. The position of the center is 200, 200
-  // the radius is increased by 20 pixels for each circle
-  for (unsigned i=0 ; i < 5 ; i++) {
+    // Create a display using GTK
+    vpDisplayGTK display;
+
+    // For this grey level image, open a GTK display at position 100,100
+    // in the screen, and with title "GTK display"
+    display.init(I, 100, 100, "GTK display") ;
+
+    // Display the image
+    vpDisplay::display(I) ;
+
+    // Display in overlay a red cross at position 100,10 in the
+    // image. The lines are 20 pixels long
     ip.set_i( 200 );
     ip.set_j( 200 );
-    vpDisplay::displayCircle(I, ip, 20*i, vpColor::white, false, 3) ;
-  }
-
-  // Display in overlay a rectangle. 
-  // The position of the top left corner is 300, 200.
-  // The width is 200. The height is 100.
-  ip.set_i( 280 );
-  ip.set_j( 150 );  
-  vpDisplay::displayRectangle(I, ip, 270, 30,vpColor::purple, false, 3) ;
-
-  // Display in overlay a yellow string
-  ip.set_i( 300 );
-  ip.set_j( 160 );  
-  vpDisplay::displayCharString(I, ip,
-                               "ViSP is a marvelous software",
-                               vpColor::black) ;
-  //Flush the display : without this line nothing will appear on the screen
-  vpDisplay::flush(I);
-
-  // Create a color image
-  vpImage<vpRGBa> Ioverlay ;
-  // Updates the color image with the original loaded image and the overlay
-  vpDisplay::getImage(I, Ioverlay) ;
-
-  // Write the color image on the disk
-  filename = "./Klimt.overlay.ppm";
-  vpImageIo::write(Ioverlay, filename) ;
-
-  // If click is allowed, wait for a mouse click to close the display
-  std::cout << "\nA click to close the windows..." << std::endl;
-  // Wait for a blocking mouse click
-  vpDisplay::getClick(I) ;
-
-  // Close the display
-  vpDisplay::close(I);
+    vpDisplay::displayCross(I, ip, 20, vpColor::red, 3) ;
+
+    // Display in overlay a horizontal red line
+    ip1.set_i( 10 );
+    ip1.set_j( 0 );
+    ip2.set_i( 10 );
+    ip2.set_j( I.getWidth() );
+    vpDisplay::displayLine(I, ip1, ip2, vpColor::red, 3) ;
+
+    // Display in overlay a vertical green dot line
+    ip1.set_i( 0 );
+    ip1.set_j( 20 );
+    ip2.set_i( I.getWidth() );
+    ip2.set_j( 20 );
+    vpDisplay::displayDotLine(I, ip1, ip2, vpColor::green, 3) ;
+
+    // Display in overlay a blue arrow
+    ip1.set_i( 0 );
+    ip1.set_j( 0 );
+    ip2.set_i( 100 );
+    ip2.set_j( 100 );
+    vpDisplay::displayArrow(I, ip1, ip2, vpColor::blue, 8, 4, 3) ;
+
+    // Display in overlay some circles. The position of the center is 200, 200
+    // the radius is increased by 20 pixels for each circle
+    for (unsigned i=0 ; i < 5 ; i++) {
+      ip.set_i( 200 );
+      ip.set_j( 200 );
+      vpDisplay::displayCircle(I, ip, 20*i, vpColor::white, false, 3) ;
+    }
+
+    // Display in overlay a rectangle.
+    // The position of the top left corner is 300, 200.
+    // The width is 200. The height is 100.
+    ip.set_i( 280 );
+    ip.set_j( 150 );
+    vpDisplay::displayRectangle(I, ip, 270, 30,vpColor::purple, false, 3) ;
+
+    // Display in overlay a yellow string
+    ip.set_i( 300 );
+    ip.set_j( 160 );
+    vpDisplay::displayCharString(I, ip,
+                                 "ViSP is a marvelous software",
+                                 vpColor::black) ;
+    //Flush the display : without this line nothing will appear on the screen
+    vpDisplay::flush(I);
+
+    // Create a color image
+    vpImage<vpRGBa> Ioverlay ;
+    // Updates the color image with the original loaded image and the overlay
+    vpDisplay::getImage(I, Ioverlay) ;
+
+    // Write the color image on the disk
+    filename = "./Klimt.overlay.ppm";
+    vpImageIo::write(Ioverlay, filename) ;
+
+    // If click is allowed, wait for a mouse click to close the display
+    std::cout << "\nA click to close the windows..." << std::endl;
+    // Wait for a blocking mouse click
+    vpDisplay::getClick(I) ;
+
+    // Close the display
+    vpDisplay::close(I);
 #endif
 
-  return 0;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 } 
diff --git a/example/manual/image-manipulation/manGrab1394-2.cpp b/example/manual/image-manipulation/manGrab1394-2.cpp
index 7d4e4494..81d2ce56 100644
--- a/example/manual/image-manipulation/manGrab1394-2.cpp
+++ b/example/manual/image-manipulation/manGrab1394-2.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: manGrab1394-2.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: manGrab1394-2.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -62,32 +62,37 @@
 int main()
 {
 #ifdef VISP_HAVE_DC1394_2
+  try {
+    unsigned int ncameras; // Number of cameras on the bus
+    vp1394TwoGrabber g;
+    g.getNumCameras(ncameras);
+    vpImage<unsigned char> *I = new vpImage<unsigned char> [ncameras];
 
-  unsigned int ncameras; // Number of cameras on the bus
-  vp1394TwoGrabber g;
-  g.getNumCameras(ncameras);
-  vpImage<unsigned char> *I = new vpImage<unsigned char> [ncameras];
-  
-  // If the first camera supports vpVIDEO_MODE_640x480_YUV422 video mode
-  g.setCamera(0);
-  g.setVideoMode(vp1394TwoGrabber::vpVIDEO_MODE_640x480_YUV422);
-  
-  // If all cameras support 30 fps acquisition
-  for (unsigned int camera=0; camera < ncameras; camera ++) {
-    g.setCamera(camera);
-    g.setFramerate(vp1394TwoGrabber::vpFRAMERATE_30);
-  }
-  
-  for ( ; ; ) {
+    // If the first camera supports vpVIDEO_MODE_640x480_YUV422 video mode
+    g.setCamera(0);
+    g.setVideoMode(vp1394TwoGrabber::vpVIDEO_MODE_640x480_YUV422);
+
+    // If all cameras support 30 fps acquisition
     for (unsigned int camera=0; camera < ncameras; camera ++) {
-      // Acquire successively images from the different cameras
       g.setCamera(camera);
-      g.acquire(I[camera]);
+      g.setFramerate(vp1394TwoGrabber::vpFRAMERATE_30);
     }
+
+    for ( ; ; ) {
+      for (unsigned int camera=0; camera < ncameras; camera ++) {
+        // Acquire successively images from the different cameras
+        g.setCamera(camera);
+        g.acquire(I[camera]);
+      }
+    }
+    delete [] I;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  delete [] I;
 
 #endif
 
-  return 0;
 }
diff --git a/example/manual/image-manipulation/manGrabDirectShow.cpp b/example/manual/image-manipulation/manGrabDirectShow.cpp
index e524cd2e..43f925ca 100644
--- a/example/manual/image-manipulation/manGrabDirectShow.cpp
+++ b/example/manual/image-manipulation/manGrabDirectShow.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: manGrabDirectShow.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: manGrabDirectShow.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -59,24 +59,31 @@
 
 int main()
 {
-  vpImage<unsigned char> I; // Grey level image
-  
+  try {
+    vpImage<unsigned char> I; // Grey level image
+
 #ifdef VISP_HAVE_DIRECTSHOW
-  vpDirectShowGrabber g; // Create the grabber
-  if(g.getDeviceNumber() == 0) //test if a camera is connected
-  {
-    g.close();
-    return -1;
-  }
-  
-  g.open(); // Initialize the grabber
-  
-  g.setImageSize(640,480); // If the camera supports 640x480 image size
-  g.setFramerate(30); // If the camera supports 30fps framerate
-  
-  for ( ; ; )
-    g.acquire(I); // Acquire an image
+    vpDirectShowGrabber g; // Create the grabber
+    if(g.getDeviceNumber() == 0) //test if a camera is connected
+    {
+      g.close();
+      return -1;
+    }
+
+    g.open(); // Initialize the grabber
+
+    g.setImageSize(640,480); // If the camera supports 640x480 image size
+    g.setFramerate(30); // If the camera supports 30fps framerate
+
+    for ( ; ; )
+      g.acquire(I); // Acquire an image
 #endif
 
-  return 0;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
+
 }
diff --git a/example/manual/image-manipulation/manGrabDisk.cpp b/example/manual/image-manipulation/manGrabDisk.cpp
index c5ab19c3..6bafc461 100644
--- a/example/manual/image-manipulation/manGrabDisk.cpp
+++ b/example/manual/image-manipulation/manGrabDisk.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: manGrabDisk.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: manGrabDisk.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -59,36 +59,43 @@
 
 int main()
 {
-  vpImage<unsigned char> I; // Grey level image
+  try {
+    vpImage<unsigned char> I; // Grey level image
 
-  // Declare a framegrabber able to read a sequence of successive
-  // images from the disk
-  vpDiskGrabber g;
+    // Declare a framegrabber able to read a sequence of successive
+    // images from the disk
+    vpDiskGrabber g;
 
-  // Set the path to the directory containing the sequence
-  g.setDirectory("/tmp");
-  // Set the image base name. The directory and the base name constitute
-  // the constant part of the full filename
-  g.setBaseName("image");
-  // Set the step between two images of the sequence
-  g.setStep(3);
-  // Set the number of digits to build the image number
-  g.setNumberOfZero(4);
-  // Set the first frame number of the sequence
-  g.setImageNumber(1);
-  // Set the file extension of the images of the sequence
-  g.setExtension("pgm");
+    // Set the path to the directory containing the sequence
+    g.setDirectory("/tmp");
+    // Set the image base name. The directory and the base name constitute
+    // the constant part of the full filename
+    g.setBaseName("image");
+    // Set the step between two images of the sequence
+    g.setStep(3);
+    // Set the number of digits to build the image number
+    g.setNumberOfZero(4);
+    // Set the first frame number of the sequence
+    g.setImageNumber(1);
+    // Set the file extension of the images of the sequence
+    g.setExtension("pgm");
 
-  // Open the framegrabber by loading the first image of the sequence
-  g.open(I) ;
+    // Open the framegrabber by loading the first image of the sequence
+    g.open(I) ;
 
-  // this is the loop over the image sequence
-  for(int cpt = 0; cpt < 100; cpt++)
-  {
-    // read the image and then increment the image counter so that the next
-    // call to acquire(I) will get the next image
-    g.acquire(I) ;
-  }
+    // this is the loop over the image sequence
+    for(int cpt = 0; cpt < 100; cpt++)
+    {
+      // read the image and then increment the image counter so that the next
+      // call to acquire(I) will get the next image
+      g.acquire(I) ;
+    }
 
-  return 0;
+    return 0;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
diff --git a/example/manual/image-manipulation/manGrabOpenCV.cpp b/example/manual/image-manipulation/manGrabOpenCV.cpp
index 1bb26dd3..c2928ac0 100644
--- a/example/manual/image-manipulation/manGrabOpenCV.cpp
+++ b/example/manual/image-manipulation/manGrabOpenCV.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: manGrabOpenCV.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: manGrabOpenCV.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/manual/image-manipulation/manGrabV4l2.cpp b/example/manual/image-manipulation/manGrabV4l2.cpp
index de32fd5d..21910d57 100644
--- a/example/manual/image-manipulation/manGrabV4l2.cpp
+++ b/example/manual/image-manipulation/manGrabV4l2.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: manGrabV4l2.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: manGrabV4l2.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -57,19 +57,24 @@
 
 int main()
 {
+  try {
+    vpImage<unsigned char> I; // Grey level image
 
-  vpImage<unsigned char> I; // Grey level image
-  
 #ifdef VISP_HAVE_V4L2
-  vpV4l2Grabber g;
-  g.setInput(2);    // Input 2 on the board
-  g.setWidth(768);  // Acquired images are 768 width
-  g.setHeight(576); // Acquired images are 576 height
-  g.setNBuffers(3); // 3 ring buffers to ensure real-time acquisition
-  g.open(I);        // Open the grabber
-  for ( ; ; )
-    g.acquire(I);     // Acquire a 768x576 grey image
+    vpV4l2Grabber g;
+    g.setInput(2);    // Input 2 on the board
+    g.setWidth(768);  // Acquired images are 768 width
+    g.setHeight(576); // Acquired images are 576 height
+    g.setNBuffers(3); // 3 ring buffers to ensure real-time acquisition
+    g.open(I);        // Open the grabber
+    for ( ; ; )
+      g.acquire(I);     // Acquire a 768x576 grey image
 #endif
 
-  return 0;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
diff --git a/example/manual/moments/manServoMomentsSimple.cpp b/example/manual/moments/manServoMomentsSimple.cpp
index 7e684fb2..6cebf415 100644
--- a/example/manual/moments/manServoMomentsSimple.cpp
+++ b/example/manual/moments/manServoMomentsSimple.cpp
@@ -3,7 +3,7 @@
  * $Id: servoMomentPolygon.cpp 3323 2011-09-13 15:23:56Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,7 +58,11 @@
 #include <limits>
 #include <iostream> //some console output
 //this function converts the plane defined by the cMo to 1/Z=Ax+By+C plane form
-void cMoToABC(vpHomogeneousMatrix& cMo, double& A,double& B, double& C){
+
+void cMoToABC(vpHomogeneousMatrix& cMo, double& A,double& B, double& C);
+
+void cMoToABC(vpHomogeneousMatrix& cMo, double& A,double& B, double& C)
+{
 	vpPlane pl;
 	pl.setABCD(0,0,1.0,0);
   pl.changeFrame(cMo);
@@ -76,98 +80,102 @@ void cMoToABC(vpHomogeneousMatrix& cMo, double& A,double& B, double& C){
 
 int main()
 {
-	double x[8] = { 1,3, 4,-1 ,-3,-2,-1,1};
-  double y[8] = { 0,1, 4, 4, -2,-2, 1,0};
-	double A,B,C,Ad,Bd,Cd;
-	
-  int nbpoints = 8;
-	std::vector<vpPoint> vec_p,vec_p_d; // vectors that contain the vertices of the contour polygon
-
-	vpHomogeneousMatrix cMo(0.1,0.0,1.0,vpMath::rad(0),vpMath::rad(0),vpMath::rad(0));
-  vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,0.0,1.0,vpMath::rad(0),vpMath::rad(0),-vpMath::rad(0)));
-
-	cMoToABC(cMo,A,B,C);
-	cMoToABC(cdMo,Ad,Bd,Cd);
-	// Define source and destination polygons
-  for (int i = 0 ; i < nbpoints ; i++){
-    vpPoint p;
-    p.setWorldCoordinates(x[i],y[i],0.0);
-    p.track(cMo) ;
-    vec_p.push_back(p);
-		p.track(cdMo) ;
-		vec_p_d.push_back(p);
+  try {
+    double x[8] = { 1,3, 4,-1 ,-3,-2,-1,1};
+    double y[8] = { 0,1, 4, 4, -2,-2, 1,0};
+    double A,B,C,Ad,Bd,Cd;
+
+    int nbpoints = 8;
+    std::vector<vpPoint> vec_p,vec_p_d; // vectors that contain the vertices of the contour polygon
+
+    vpHomogeneousMatrix cMo(0.1,0.0,1.0,vpMath::rad(0),vpMath::rad(0),vpMath::rad(0));
+    vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,0.0,1.0,vpMath::rad(0),vpMath::rad(0),-vpMath::rad(0)));
+
+    cMoToABC(cMo,A,B,C);
+    cMoToABC(cdMo,Ad,Bd,Cd);
+    // Define source and destination polygons
+    for (int i = 0 ; i < nbpoints ; i++){
+      vpPoint p;
+      p.setWorldCoordinates(x[i],y[i],0.0);
+      p.track(cMo) ;
+      vec_p.push_back(p);
+      p.track(cdMo) ;
+      vec_p_d.push_back(p);
+    }
+
+    vpMomentObject cur(6); // Create a source moment object with 6 as maximum order
+    cur.setType(vpMomentObject::DENSE_POLYGON); // The object is defined by a countour polygon
+    cur.fromVector(vec_p); // Init the dense object with the source polygon
+
+    vpMomentObject dst(6); // Create a destination moment object with 6 as maximum order
+    dst.setType(vpMomentObject::DENSE_POLYGON); // The object is defined by a countour polygon
+    dst.fromVector(vec_p_d); // Init the dense object with the destination polygon
+
+    //init classic moment primitives (for source)
+    vpMomentCommon mdb_cur(vpMomentCommon::getSurface(dst),vpMomentCommon::getMu3(dst),vpMomentCommon::getAlpha(dst)); //Init classic features
+    vpFeatureMomentCommon fmdb_cur(mdb_cur);
+
+    ////init classic moment primitives (for destination)
+    vpMomentCommon mdb_dst(vpMomentCommon::getSurface(dst),vpMomentCommon::getMu3(dst),vpMomentCommon::getAlpha(dst)); //Init classic features
+    vpFeatureMomentCommon fmdb_dst(mdb_dst);
+
+    //update+compute moment primitives from object (for destination)
+    mdb_dst.updateAll(dst);
+    //update+compute features (+interaction matrixes) from plane
+    fmdb_dst.updateAll(Ad,Bd,Cd);
+
+    //define visual servoing task
+    vpServo task;
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::CURRENT);
+    task.setLambda(1) ;
+
+    task.addFeature(fmdb_cur.getFeatureGravityNormalized(),fmdb_dst.getFeatureGravityNormalized());
+    task.addFeature(fmdb_cur.getFeatureAn(),fmdb_dst.getFeatureAn());
+    //the object is NOT symmetric
+    //select C4 and C6
+    task.addFeature(fmdb_cur.getFeatureCInvariant(),fmdb_dst.getFeatureCInvariant(),
+                    vpFeatureMomentCInvariant::selectC4() | vpFeatureMomentCInvariant::selectC6());
+    task.addFeature(fmdb_cur.getFeatureAlpha(),fmdb_dst.getFeatureAlpha());
+
+    vpBasicFeature *al = new vpFeatureMomentAlpha(mdb_dst,0,0,1.);
+    al->init();
+    al->error(*al);
+    //param robot
+    vpRobotCamera robot ;
+    float sampling_time = 0.010f; // Sampling period in seconds
+    robot.setSamplingTime(sampling_time);
+    robot.setPosition(cMo);
+
+    do{
+      robot.getPosition(cMo);
+      vec_p.clear();
+
+      for (int i = 0 ; i < nbpoints ; i++){
+        vpPoint p;
+        p.setWorldCoordinates(x[i],y[i],0.0);
+        p.track(cMo) ;
+        vec_p.push_back(p);
+      }
+      cMoToABC(cMo,A,B,C);
+
+      cur.fromVector(vec_p);
+      //update+compute moment primitives from object (for source)
+      mdb_cur.updateAll(cur);
+      //update+compute features (+interaction matrixes) from plane
+      fmdb_cur.updateAll(A,B,C);
+
+      vpColVector v = task.computeControlLaw();
+      task.print();
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+      double t = vpTime::measureTimeMs();
+      vpTime::wait(t, sampling_time * 1000); // Wait 10 ms
+    } while(( task.getError() ).sumSquare()>0.005);
+    std::cout << "final error=" << ( task.getError() ).sumSquare() << std::endl;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-
-	vpMomentObject cur(6); // Create a source moment object with 6 as maximum order
-	cur.setType(vpMomentObject::DENSE_POLYGON); // The object is defined by a countour polygon
-	cur.fromVector(vec_p); // Init the dense object with the source polygon
-
-	vpMomentObject dst(6); // Create a destination moment object with 6 as maximum order
-	dst.setType(vpMomentObject::DENSE_POLYGON); // The object is defined by a countour polygon
-	dst.fromVector(vec_p_d); // Init the dense object with the destination polygon
-
-	//init classic moment primitives (for source)
-	vpMomentCommon mdb_cur(vpMomentCommon::getSurface(dst),vpMomentCommon::getMu3(dst),vpMomentCommon::getAlpha(dst)); //Init classic features
-	vpFeatureMomentCommon fmdb_cur(mdb_cur);
-
-	////init classic moment primitives (for destination)
-	vpMomentCommon mdb_dst(vpMomentCommon::getSurface(dst),vpMomentCommon::getMu3(dst),vpMomentCommon::getAlpha(dst)); //Init classic features
-	vpFeatureMomentCommon fmdb_dst(mdb_dst);
-
-	
-	//update+compute moment primitives from object (for destination)
-	mdb_dst.updateAll(dst);
-	//update+compute features (+interaction matrixes) from plane
-	fmdb_dst.updateAll(Ad,Bd,Cd);
-
-	//define visual servoing task
-	vpServo task;
-	task.setServo(vpServo::EYEINHAND_CAMERA);
-	task.setInteractionMatrixType(vpServo::CURRENT);
-	task.setLambda(1) ;
-
-	task.addFeature(fmdb_cur.getFeatureGravityNormalized(),fmdb_dst.getFeatureGravityNormalized());
-	task.addFeature(fmdb_cur.getFeatureAn(),fmdb_dst.getFeatureAn());
-	//the object is NOT symmetric
-	//select C4 and C6
-	task.addFeature(fmdb_cur.getFeatureCInvariant(),fmdb_dst.getFeatureCInvariant(),
-                  vpFeatureMomentCInvariant::selectC4() | vpFeatureMomentCInvariant::selectC6());
-	task.addFeature(fmdb_cur.getFeatureAlpha(),fmdb_dst.getFeatureAlpha());
-
-	vpBasicFeature *al = new vpFeatureMomentAlpha(mdb_dst,0,0,1.);
-	al->init();
-	al->error(*al);
-	//param robot
-	vpRobotCamera robot ;
-	float sampling_time = 0.010f; // Sampling period in seconds
-	robot.setSamplingTime(sampling_time);
-	robot.setPosition(cMo);
-	
-	do{
-		robot.getPosition(cMo);
-		vec_p.clear();
-
-		for (int i = 0 ; i < nbpoints ; i++){
-			vpPoint p;
-			p.setWorldCoordinates(x[i],y[i],0.0);
-			p.track(cMo) ;
-			vec_p.push_back(p);		
-		}
-		cMoToABC(cMo,A,B,C);
-
-		cur.fromVector(vec_p);
-		//update+compute moment primitives from object (for source)
-		mdb_cur.updateAll(cur);
-		//update+compute features (+interaction matrixes) from plane
-		fmdb_cur.updateAll(A,B,C);
-
-		vpColVector v = task.computeControlLaw();
-		task.print();
-		robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
-		double t = vpTime::measureTimeMs();
-		vpTime::wait(t, sampling_time * 1000); // Wait 10 ms			
-	}while(( task.getError() ).sumSquare()>0.005);
-	std::cout << "final error=" << ( task.getError() ).sumSquare() << std::endl;
-	
-	return 0;
 }
diff --git a/example/manual/ogre/HelloWorldOgre.cpp b/example/manual/ogre/HelloWorldOgre.cpp
index 5b58452d..bb07474f 100644
--- a/example/manual/ogre/HelloWorldOgre.cpp
+++ b/example/manual/ogre/HelloWorldOgre.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: HelloWorldOgre.cpp 4111 2013-02-06 17:27:14Z fspindle $
+ * $Id: HelloWorldOgre.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -57,89 +57,104 @@
 
 int main()
 {
+  try {
 #if defined(VISP_HAVE_OGRE) 
 #if defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394_2) || defined(VISP_HAVE_DIRECTSHOW) || defined(VISP_HAVE_OPENCV)
 
-  // Now we try to find an available framegrabber
+    // Now we try to find an available framegrabber
 #if defined(VISP_HAVE_V4L2)
-  // Video for linux 2 grabber
-  vpV4l2Grabber grabber;
+    // Video for linux 2 grabber
+    vpV4l2Grabber grabber;
 #elif defined(VISP_HAVE_DC1394_2)
-  // libdc1394-2
-  vp1394TwoGrabber grabber;
+    // libdc1394-2
+    vp1394TwoGrabber grabber;
 #elif defined(VISP_HAVE_DIRECTSHOW)
-  // OpenCV to gather images
-  vpOpenCVGrabber grabber;
+    // OpenCV to gather images
+    vpDirectShowGrabber grabber;
 #elif defined(VISP_HAVE_OPENCV)
-  // OpenCV to gather images
-  vpOpenCVGrabber grabber;
+    // OpenCV to gather images
+    vpOpenCVGrabber grabber;
 #endif
 
-  // Image to stock gathered data
-  // Here we acquire a color image. The consequence will be that
-  // the background texture used in Ogre renderer will be also in color.
-  vpImage<vpRGBa> I;
-  // Open frame grabber
-  // Here we acquire an image from an available framegrabber to update
-  // the image size
-  grabber.open(I);
+    // Image to stock gathered data
+    // Here we acquire a color image. The consequence will be that
+    // the background texture used in Ogre renderer will be also in color.
+    vpImage<vpRGBa> I;
+    // Open frame grabber
+    // Here we acquire an image from an available framegrabber to update
+    // the image size
+    grabber.open(I);
+    grabber.acquire(I);
 
-  // Parameters of our camera
-  double px = 565;
-  double py = 565;
-  double u0 = grabber.getWidth() / 2;
-  double v0 = grabber.getHeight() / 2;
-  vpCameraParameters cam(px,py,u0,v0);
-  // The matrix with our pose
-  // Defines the pose of the object in the camera frame
-  vpHomogeneousMatrix cMo;
+    // Parameters of our camera
+    double px = 565;
+    double py = 565;
+    double u0 = grabber.getWidth() / 2;
+    double v0 = grabber.getHeight() / 2;
+    vpCameraParameters cam(px,py,u0,v0);
+    // The matrix with our pose
+    // Defines the pose of the object in the camera frame
+    vpHomogeneousMatrix cMo;
 
-  // Our object
-  // A simulator with the camera parameters defined above, 
-  // a grey level background image and of the good size
-  vpAROgre ogre(cam, (unsigned int)grabber.getWidth(), (unsigned int)grabber.getHeight());
-  // Initialisation
-  // Here we load the requested plugins specified in the "plugins.cfg" file 
-  // and the resources specified in the "resources.cfg" file
-  // These two files can be found respectively in ViSP_HAVE_OGRE_PLUGINS_PATH 
-  // and ViSP_HAVE_OGRE_RESOURCES_PATH folders  
-  ogre.init(I);
+    // Our object
+    // A simulator with the camera parameters defined above,
+    // a grey level background image and of the good size
+    vpAROgre ogre(cam, (unsigned int)grabber.getWidth(), (unsigned int)grabber.getHeight());
+    // Initialisation
+    // Here we load the requested plugins specified in the "plugins.cfg" file
+    // and the resources specified in the "resources.cfg" file
+    // These two files can be found respectively in ViSP_HAVE_OGRE_PLUGINS_PATH
+    // and ViSP_HAVE_OGRE_RESOURCES_PATH folders
+    ogre.init(I);
 
-  // Create a basic scene
-  // -----------------------------------
-  //  	      Loading things
-  // -----------------------------------
-  //  As you will see in section 5, our
-  //  application knows locations where 
-  //  it can search for medias.
-  //  Here we use a mesh included in
-  //  the installation files : a robot.
-  // -----------------------------------
-  // Here we load the "robot.mesh" model that is found thanks to the resources locations
-  // specified in the "resources.cfg" file
-  ogre.load("Robot", "robot.mesh");
-  ogre.setPosition("Robot", vpTranslationVector(0, 0.05, 0.5));
-  ogre.setScale("Robot", 0.001f,0.001f,0.001f);
-  ogre.setRotation("Robot", vpRotationMatrix(vpRxyzVector(M_PI, -M_PI/4, 0)));
+    // Create a basic scene
+    // -----------------------------------
+    //  	      Loading things
+    // -----------------------------------
+    //  As you will see in section 5, our
+    //  application knows locations where
+    //  it can search for medias.
+    //  Here we use a mesh included in
+    //  the installation files : a robot.
+    // -----------------------------------
+    // Here we load the "robot.mesh" model that is found thanks to the resources locations
+    // specified in the "resources.cfg" file
+    ogre.load("Robot", "robot.mesh");
+    ogre.setPosition("Robot", vpTranslationVector(-0.3, 0.2, 0));
+    ogre.setScale("Robot", 0.001f,0.001f,0.001f);
+    ogre.setRotation("Robot", vpRotationMatrix(vpRxyzVector(M_PI, 0, 0)));
 
+    cMo[2][3] = 1.; // Z = 1 meter
 
-  // Rendering loop, ended with on escape
-  while(ogre.continueRendering()){
-    // Image Acquisition
-    // Acquire a new image
-    grabber.acquire(I);
-    //Pose computation
-    // ...
-    // cMo updated
-    // Display the robot at the position specified by cMo with vpAROgre
-    ogre.display(I,cMo);
-  }
-  // Release video device
-  grabber.close();
+    std::cout << "cMo:\n" << cMo << std::endl;
+
+    // Rendering loop, ended with on escape
+    while(ogre.continueRendering()){
+      // Image Acquisition
+      // Acquire a new image
+      grabber.acquire(I);
+      //Pose computation
+      // ...
+      // cMo updated
+      // Display the robot at the position specified by cMo with vpAROgre
+      ogre.display(I,cMo);
+    }
+    // Release video device
+    grabber.close();
 #else
-  std::cout << "You need an available framegrabber to run this example" << std::endl;
+    std::cout << "You need an available framegrabber to run this example" << std::endl;
 #endif
 #else
-  std::cout << "You Ogre3D to run this example" << std::endl;
+    std::cout << "You need Ogre3D to run this example" << std::endl;
 #endif
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
+  catch(...) {
+    std::cout << "Catch an exception " << std::endl;
+    return 1;
+  }
 }
diff --git a/example/manual/ogre/HelloWorldOgreAdvanced.cpp b/example/manual/ogre/HelloWorldOgreAdvanced.cpp
index 3ed4bc6c..7bb57a4d 100644
--- a/example/manual/ogre/HelloWorldOgreAdvanced.cpp
+++ b/example/manual/ogre/HelloWorldOgreAdvanced.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: HelloWorldOgreAdvanced.cpp 4111 2013-02-06 17:27:14Z fspindle $
+ * $Id: HelloWorldOgreAdvanced.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -70,6 +70,7 @@ public:
                    unsigned int width = 640, unsigned int height = 480)
 		: vpAROgre(cam, width, height)
   {
+    mAnimationState = NULL;
   }
 
 protected:
@@ -79,9 +80,9 @@ protected:
     Ogre::Entity* robot = mSceneMgr->createEntity("Robot", "robot.mesh");
     // Attach robot to scene graph
     Ogre::SceneNode* RobotNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("Robot");
-    RobotNode->setPosition(0.0, 0.05f, 0.5);
+    RobotNode->setPosition((Ogre::Real)-0.3, (Ogre::Real)0.2, (Ogre::Real)0);
     RobotNode->attachObject(robot);
-    RobotNode->scale(0.001f,0.001f,0.001f);
+    RobotNode->scale((Ogre::Real)0.001,(Ogre::Real)0.001,(Ogre::Real)0.001);
     RobotNode->pitch(Ogre::Degree(180));
     RobotNode->yaw(Ogre::Degree(-90));
 
@@ -108,63 +109,76 @@ protected:
 
 int main()
 {
+  try {
 #if defined(VISP_HAVE_OGRE) 
 #if defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394_2) || defined(VISP_HAVE_DIRECTSHOW) || defined(VISP_HAVE_OPENCV)
 
-  // Now we try to find an available framegrabber
+    // Now we try to find an available framegrabber
 #if defined(VISP_HAVE_V4L2)
-  // Video for linux 2 grabber
-  vpV4l2Grabber grabber;
+    // Video for linux 2 grabber
+    vpV4l2Grabber grabber;
 #elif defined(VISP_HAVE_DC1394_2)
-  // libdc1394-2
-  vp1394TwoGrabber grabber;
+    // libdc1394-2
+    vp1394TwoGrabber grabber;
 #elif defined(VISP_HAVE_DIRECTSHOW)
-  // OpenCV to gather images
-  vpOpenCVGrabber grabber;
+    // OpenCV to gather images
+    vpOpenCVGrabber grabber;
 #elif defined(VISP_HAVE_OPENCV)
-  // OpenCV to gather images
-  vpOpenCVGrabber grabber;
+    // OpenCV to gather images
+    vpOpenCVGrabber grabber;
 #endif
 
-  // Image to store gathered data
-  // Here we acquire a grey level image. The consequence will be that
-  // the background texture used in Ogre renderer will be also in grey
-  // level.
-  vpImage<unsigned char> I; 
-  // Open frame grabber
-  // Here we acquire an image from an available framegrabber to update
-  // the image size
-  grabber.open(I);
-  // Parameters of our camera
-  double px = 565;
-  double py = 565;
-  double u0 = grabber.getWidth() / 2;
-  double v0 = grabber.getHeight() / 2;
-  vpCameraParameters cam(px,py,u0,v0);
-  // The matrix with our pose
-  vpHomogeneousMatrix cMo;
-
-  // Our object
-  vpAROgreAdvanced ogre(cam, (unsigned int)grabber.getWidth(), (unsigned int)grabber.getHeight());
-  // Initialisation
-  ogre.init(I);
-
-  // Rendering loop
-  while(ogre.continueRendering()){
-    // Image Acquisition
+    // Image to store gathered data
+    // Here we acquire a grey level image. The consequence will be that
+    // the background texture used in Ogre renderer will be also in grey
+    // level.
+    vpImage<unsigned char> I;
+    // Open frame grabber
+    // Here we acquire an image from an available framegrabber to update
+    // the image size
+    grabber.open(I);
     grabber.acquire(I);
-    // Pose computation
-    // ...
-    // cMo updated
-    // Display with vpAROgre
-    ogre.display(I, cMo);
-  }
-  // Release video device
-  grabber.close();
+    // Parameters of our camera
+    double px = 565;
+    double py = 565;
+    double u0 = grabber.getWidth() / 2;
+    double v0 = grabber.getHeight() / 2;
+    vpCameraParameters cam(px,py,u0,v0);
+    // The matrix with our pose
+    vpHomogeneousMatrix cMo;
+    cMo[2][3] = 1.; // Z = 1 meter
+
+    // Our object
+    vpAROgreAdvanced ogre(cam, (unsigned int)grabber.getWidth(), (unsigned int)grabber.getHeight());
+    // Initialisation
+    ogre.init(I);
+
+    // Rendering loop
+    while(ogre.continueRendering()){
+      // Image Acquisition
+      grabber.acquire(I);
+      // Pose computation
+      // ...
+      // cMo updated
+      // Display with vpAROgre
+      ogre.display(I, cMo);
+    }
+    // Release video device
+    grabber.close();
 #else
-  std::cout << "You need an available framegrabber to run this example" << std::endl;
+    std::cout << "You need an available framegrabber to run this example" << std::endl;
 #endif
 #else
-  std::cout << "You Ogre3D to run this example" << std::endl;
+    std::cout << "You need Ogre3D to run this example" << std::endl;
 #endif
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
+  catch(...) {
+    std::cout << "Catch an exception " << std::endl;
+    return 1;
+  }
 }
diff --git a/example/manual/simulation/manServo4PointsDisplay.cpp b/example/manual/simulation/manServo4PointsDisplay.cpp
index fdd213ed..9028c79b 100755
--- a/example/manual/simulation/manServo4PointsDisplay.cpp
+++ b/example/manual/simulation/manServo4PointsDisplay.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: manServo4PointsDisplay.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: manServo4PointsDisplay.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -73,129 +73,135 @@
 
 int main()
 {
-  //////////////////////////////////////////
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(0.3,0.2,3,
-                          vpMath::rad(0),vpMath::rad(0),vpMath::rad(40))  ;
-
-  ///////////////////////////////////
-  // initialize the robot
-  vpRobotCamera robot ;
-  robot.setSamplingTime(0.04); // 40ms 
-  robot.setPosition(cMo) ;
-
-  //initialize the camera parameters
-  vpCameraParameters cam(800,800,240,180); 
-
-  //Image definition
-  unsigned int height = 360 ;
-  unsigned int width  = 480 ;
-  vpImage<unsigned char> I(height,width);
-
-  //Display initialization
-  vpDisplayGTK disp;
-  disp.init(I,100,100,"Simulation display");
-
-  ////////////////////////////////////////
-  // Desired visual features initialization
-
-  // sets the points coordinates in the object frame (in meter)
-  vpPoint point[4] ;
-  point[0].setWorldCoordinates(-0.1,-0.1,0) ;
-  point[1].setWorldCoordinates(0.1,-0.1,0) ;
-  point[2].setWorldCoordinates(0.1,0.1,0) ;
-  point[3].setWorldCoordinates(-0.1,0.1,0) ;
-
-  // sets the desired camera location
-  vpHomogeneousMatrix cMo_d(0,0,1,0,0,0) ;
-
-  // computes the 3D point coordinates in the camera frame and its 2D coordinates
-  for (int i = 0 ; i < 4 ; i++)
-    point[i].project(cMo_d) ;
-
-  // creates the associated features
-  vpFeaturePoint pd[4] ;
-  for (int i = 0 ; i < 4 ; i++)
-    vpFeatureBuilder::create(pd[i],point[i]) ;
-
-
-  ///////////////////////////////////////
-  // Current visual features initialization
-
-  // computes the 3D point coordinates in the camera frame and its 2D coordinates
-  for (int i = 0 ; i < 4 ; i++)
-    point[i].project(cMo) ;
-
-  // creates the associated features
-  vpFeaturePoint p[4] ;
-  for (int i = 0 ; i < 4 ; i++)
-    vpFeatureBuilder::create(p[i],point[i])  ;
-
-
-  /////////////////////////////////
-  // Task defintion
-  vpServo task ;
-  // we want an eye-in-hand control law ;
-  task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
-  task.setInteractionMatrixType(vpServo::DESIRED, vpServo::PSEUDO_INVERSE) ;
-
-  // Set the position of the camera in the end-effector frame
-  vpHomogeneousMatrix cMe ;
-  vpVelocityTwistMatrix cVe(cMe) ;
-  task.set_cVe(cVe) ;
-  // Set the Jacobian (expressed in the end-effector frame)
-  vpMatrix eJe ;
-  robot.get_eJe(eJe) ;
-  task.set_eJe(eJe) ;
-
-  // we want to see a point on a point
-  for (int i = 0 ; i < 4 ; i++)
-    task.addFeature(p[i],pd[i]) ;
-  // Set the gain
-  task.setLambda(1.0) ;
-  // Print the current information about the task
-  task.print();
-
-
-  ////////////////////////////////////////////////
-  // The control loop
-  int k = 0;
-  while(k++ < 200){
-    double t = vpTime::measureTimeMs();
-    
-    // Display the image background
-    vpDisplay::display(I);
-    
-    // Update the current features
+  try {
+    //////////////////////////////////////////
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(0.3,0.2,3,
+                            vpMath::rad(0),vpMath::rad(0),vpMath::rad(40))  ;
+
+    ///////////////////////////////////
+    // initialize the robot
+    vpRobotCamera robot ;
+    robot.setSamplingTime(0.04); // 40ms
+    robot.setPosition(cMo) ;
+
+    //initialize the camera parameters
+    vpCameraParameters cam(800,800,240,180);
+
+    //Image definition
+    unsigned int height = 360 ;
+    unsigned int width  = 480 ;
+    vpImage<unsigned char> I(height,width);
+
+    //Display initialization
+    vpDisplayGTK disp;
+    disp.init(I,100,100,"Simulation display");
+
+    ////////////////////////////////////////
+    // Desired visual features initialization
+
+    // sets the points coordinates in the object frame (in meter)
+    vpPoint point[4] ;
+    point[0].setWorldCoordinates(-0.1,-0.1,0) ;
+    point[1].setWorldCoordinates(0.1,-0.1,0) ;
+    point[2].setWorldCoordinates(0.1,0.1,0) ;
+    point[3].setWorldCoordinates(-0.1,0.1,0) ;
+
+    // sets the desired camera location
+    vpHomogeneousMatrix cMo_d(0,0,1,0,0,0) ;
+
+    // computes the 3D point coordinates in the camera frame and its 2D coordinates
+    for (int i = 0 ; i < 4 ; i++)
+      point[i].project(cMo_d) ;
+
+    // creates the associated features
+    vpFeaturePoint pd[4] ;
+    for (int i = 0 ; i < 4 ; i++)
+      vpFeatureBuilder::create(pd[i],point[i]) ;
+
+
+    ///////////////////////////////////////
+    // Current visual features initialization
+
+    // computes the 3D point coordinates in the camera frame and its 2D coordinates
     for (int i = 0 ; i < 4 ; i++)
-    {
       point[i].project(cMo) ;
+
+    // creates the associated features
+    vpFeaturePoint p[4] ;
+    for (int i = 0 ; i < 4 ; i++)
       vpFeatureBuilder::create(p[i],point[i])  ;
-    }
-    
-    // Display the task features (current and desired)
-    vpServoDisplay::display(task,cam,I);
-    vpDisplay::flush(I);
-    
-    // Update the robot Jacobian
+
+
+    /////////////////////////////////
+    // Task defintion
+    vpServo task ;
+    // we want an eye-in-hand control law ;
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
+    task.setInteractionMatrixType(vpServo::DESIRED, vpServo::PSEUDO_INVERSE) ;
+
+    // Set the position of the camera in the end-effector frame
+    vpHomogeneousMatrix cMe ;
+    vpVelocityTwistMatrix cVe(cMe) ;
+    task.set_cVe(cVe) ;
+    // Set the Jacobian (expressed in the end-effector frame)
+    vpMatrix eJe ;
     robot.get_eJe(eJe) ;
     task.set_eJe(eJe) ;
-    
-    // Compute the control law
-    vpColVector v = task.computeControlLaw() ;
-    
-    // Send the computed velocity to the robot and compute the new robot position
-    robot.setVelocity(vpRobot::ARTICULAR_FRAME, v) ;
-    robot.getPosition(cMo) ;
-    
+
+    // we want to see a point on a point
+    for (int i = 0 ; i < 4 ; i++)
+      task.addFeature(p[i],pd[i]) ;
+    // Set the gain
+    task.setLambda(1.0) ;
     // Print the current information about the task
     task.print();
-    
-    // Wait 40 ms
-    vpTime::wait(t,40); 
-  }  
-  task.kill();
-  return 0;
+
+
+    ////////////////////////////////////////////////
+    // The control loop
+    int k = 0;
+    while(k++ < 200){
+      double t = vpTime::measureTimeMs();
+
+      // Display the image background
+      vpDisplay::display(I);
+
+      // Update the current features
+      for (int i = 0 ; i < 4 ; i++)
+      {
+        point[i].project(cMo) ;
+        vpFeatureBuilder::create(p[i],point[i])  ;
+      }
+
+      // Display the task features (current and desired)
+      vpServoDisplay::display(task,cam,I);
+      vpDisplay::flush(I);
+
+      // Update the robot Jacobian
+      robot.get_eJe(eJe) ;
+      task.set_eJe(eJe) ;
+
+      // Compute the control law
+      vpColVector v = task.computeControlLaw() ;
+
+      // Send the computed velocity to the robot and compute the new robot position
+      robot.setVelocity(vpRobot::ARTICULAR_FRAME, v) ;
+      robot.getPosition(cMo) ;
+
+      // Print the current information about the task
+      task.print();
+
+      // Wait 40 ms
+      vpTime::wait(t,40);
+    }
+    task.kill();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 #else
diff --git a/example/manual/simulation/manSimu4Dots.cpp b/example/manual/simulation/manSimu4Dots.cpp
index c2df04d2..e915971f 100755
--- a/example/manual/simulation/manSimu4Dots.cpp
+++ b/example/manual/simulation/manSimu4Dots.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: manSimu4Dots.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: manSimu4Dots.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -255,28 +255,35 @@ void *mainLoop (void *_simu)
 int
 main()
 {
-  vpSimulator simu ;
-
-  // Internal view initialization : view from the robot camera
-  simu.initInternalViewer(480, 360) ;
-  // External view initialization : view from an external camera
-  simu.initExternalViewer(300, 300) ; 
-
-  // Inernal camera paramters initialization
-  vpCameraParameters cam(800,800,240,180) ;
-  simu.setInternalCameraParameters(cam) ;
-
-  vpTime::wait(500) ;
-  // Load the scene
-  std::cout << "Load : ./4Points.iv" << std::endl
-            << "This file should be in the working directory" << std::endl;
-
-  simu.load("./4points.iv") ;
-
-  // Run the main loop
-  simu.initApplication(&mainLoop) ;
-  // Run the simulator
-  simu.mainLoop() ;
+  try {
+    vpSimulator simu ;
+
+    // Internal view initialization : view from the robot camera
+    simu.initInternalViewer(480, 360) ;
+    // External view initialization : view from an external camera
+    simu.initExternalViewer(300, 300) ;
+
+    // Inernal camera paramters initialization
+    vpCameraParameters cam(800,800,240,180) ;
+    simu.setInternalCameraParameters(cam) ;
+
+    vpTime::wait(500) ;
+    // Load the scene
+    std::cout << "Load : ./4Points.iv" << std::endl
+              << "This file should be in the working directory" << std::endl;
+
+    simu.load("./4points.iv") ;
+
+    // Run the main loop
+    simu.initApplication(&mainLoop) ;
+    // Run the simulator
+    simu.mainLoop() ;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 #else
diff --git a/example/manual/simulation/manSimu4Points.cpp b/example/manual/simulation/manSimu4Points.cpp
index 9a31ea45..4335ef8e 100755
--- a/example/manual/simulation/manSimu4Points.cpp
+++ b/example/manual/simulation/manSimu4Points.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: manSimu4Points.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: manSimu4Points.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -207,27 +207,34 @@ void *mainLoop (void *_simu)
 int
 main()
 {
-  vpSimulator simu ;
-
-  // Internal view initialization : view from the robot camera
-  simu.initInternalViewer(480, 360) ;
-  // External view initialization : view from an external camera
-  simu.initExternalViewer(300, 300) ; 
-
-  // Inernal camera paramters initialization
-  vpCameraParameters cam(800,800,240,180) ;
-  simu.setInternalCameraParameters(cam) ;
-
-  vpTime::wait(1000) ;
-  // Load the scene
-  std::cout << "Load : ./4Points.iv" << std::endl
-            << "This file should be in the working directory" << std::endl;
-  simu.load("./4points.iv") ;
-
-  // Run the main loop
-  simu.initApplication(&mainLoop) ;
-  // Run the simulator
-  simu.mainLoop() ;
+  try {
+    vpSimulator simu ;
+
+    // Internal view initialization : view from the robot camera
+    simu.initInternalViewer(480, 360) ;
+    // External view initialization : view from an external camera
+    simu.initExternalViewer(300, 300) ;
+
+    // Inernal camera paramters initialization
+    vpCameraParameters cam(800,800,240,180) ;
+    simu.setInternalCameraParameters(cam) ;
+
+    vpTime::wait(1000) ;
+    // Load the scene
+    std::cout << "Load : ./4Points.iv" << std::endl
+              << "This file should be in the working directory" << std::endl;
+    simu.load("./4points.iv") ;
+
+    // Run the main loop
+    simu.initApplication(&mainLoop) ;
+    // Run the simulator
+    simu.mainLoop() ;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 #else
diff --git a/example/math/BSpline.cpp b/example/math/BSpline.cpp
index 10129045..00379d2f 100644
--- a/example/math/BSpline.cpp
+++ b/example/math/BSpline.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: BSpline.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: BSpline.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -75,6 +75,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdh"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display);
+
 /*!
 
   Print the program options.
@@ -122,9 +125,9 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
@@ -132,7 +135,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -141,7 +144,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -152,147 +155,145 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 int
 main(int argc, const char ** argv)
 {
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_click_allowed,
-                 opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_click_allowed,
+                   opt_display) == false) {
+      exit (-1);
+    }
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  vpImage<unsigned char> I(540,480);
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    vpImage<unsigned char> I(540,480);
 
-  // We open a window using either X11, GTK or GDI.
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV display;
+    vpDisplayOpenCV display;
 #elif defined VISP_HAVE_D3D9
-  vpDisplayD3D display;
+    vpDisplayD3D display;
 #endif
 
-  if (opt_display) {
-    try{
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display.init(I, 100, 100,"Display image") ;
       vpDisplay::display(I) ;
       vpDisplay::flush(I) ;
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
+
+    vpBSpline bSpline;
+    std::list<double> knots;
+    knots.push_back(0);
+    knots.push_back(0);
+    knots.push_back(0);
+    knots.push_back(1);
+    knots.push_back(2);
+    knots.push_back(3);
+    knots.push_back(4);
+    knots.push_back(4);
+    knots.push_back(5);
+    knots.push_back(5);
+    knots.push_back(5);
+
+    std::list<vpImagePoint> controlPoints;
+    vpImagePoint pt;
+    pt.set_ij(50,300);
+    controlPoints.push_back(pt);
+    pt.set_ij(100,130);
+    controlPoints.push_back(pt);
+    pt.set_ij(150,400);
+    controlPoints.push_back(pt);
+    pt.set_ij(200,370);
+    controlPoints.push_back(pt);
+    pt.set_ij(250,120);
+    controlPoints.push_back(pt);
+    pt.set_ij(300,250);
+    controlPoints.push_back(pt);
+    pt.set_ij(350,200);
+    controlPoints.push_back(pt);
+    pt.set_ij(400,300);
+    controlPoints.push_back(pt);
+
+    bSpline.set_p(2);
+    bSpline.set_knots(knots);
+    bSpline.set_controlPoints(controlPoints);
+
+    std::cout << "The parameters are :" <<std::endl;
+    std::cout << "p : " << bSpline.get_p() <<std::endl;
+    std::cout << "" <<std::endl;
+    std::cout << "The knot vector :" <<std::endl;
+    std::list<double> knots_cur;
+    bSpline.get_knots(knots_cur);
+    unsigned int i_display=0;
+    for(std::list<double>::const_iterator it=knots_cur.begin(); it!=knots_cur.end(); ++it, ++i_display){
+      std::cout << i_display << " ---> " << *it << std::endl;
+    }
+    std::cout << "The control points are :" <<std::endl;
+    std::list<vpImagePoint> controlPoints_cur;
+    bSpline.get_controlPoints(controlPoints_cur);
+    i_display=0;
+    for(std::list<vpImagePoint>::const_iterator it=controlPoints_cur.begin(); it!=controlPoints_cur.end(); ++it, ++i_display){
+      std::cout << i_display << " ---> " << *it << std::endl;
     }
-  }
 
-  vpBSpline bSpline;
-  std::list<double> knots;
-  knots.push_back(0);
-  knots.push_back(0);
-  knots.push_back(0);
-  knots.push_back(1);
-  knots.push_back(2);
-  knots.push_back(3);
-  knots.push_back(4);
-  knots.push_back(4);
-  knots.push_back(5);
-  knots.push_back(5);
-  knots.push_back(5);
-  
-  std::list<vpImagePoint> controlPoints;
-  vpImagePoint pt;
-  pt.set_ij(50,300);
-  controlPoints.push_back(pt);
-  pt.set_ij(100,130);
-  controlPoints.push_back(pt);
-  pt.set_ij(150,400);
-  controlPoints.push_back(pt);
-  pt.set_ij(200,370);
-  controlPoints.push_back(pt);
-  pt.set_ij(250,120);
-  controlPoints.push_back(pt);
-  pt.set_ij(300,250);
-  controlPoints.push_back(pt);
-  pt.set_ij(350,200);
-  controlPoints.push_back(pt);
-  pt.set_ij(400,300);
-  controlPoints.push_back(pt);
-  
-  bSpline.set_p(2);
-  bSpline.set_knots(knots);
-  bSpline.set_controlPoints(controlPoints);
-
-  std::cout << "The parameters are :" <<std::endl;
-  std::cout << "p : " << bSpline.get_p() <<std::endl;
-  std::cout << "" <<std::endl;
-  std::cout << "The knot vector :" <<std::endl;
-  std::list<double> knots_cur;
-  bSpline.get_knots(knots_cur);
-  unsigned int i_display=0;
-  for(std::list<double>::const_iterator it=knots_cur.begin(); it!=knots_cur.end(); ++it, ++i_display){
-    std::cout << i_display << " ---> " << *it << std::endl;
-  }
-  std::cout << "The control points are :" <<std::endl;
-  std::list<vpImagePoint> controlPoints_cur;
-  bSpline.get_controlPoints(controlPoints_cur);
-  i_display=0;
-  for(std::list<vpImagePoint>::const_iterator it=controlPoints_cur.begin(); it!=controlPoints_cur.end(); ++it, ++i_display){
-    std::cout << i_display << " ---> " << *it << std::endl;
-  }
+    unsigned int i = bSpline.findSpan(5/2.0);
+    std::cout << "The knot interval number for the value u = 5/2 is : " << i <<std::endl;
 
-  unsigned int i = bSpline.findSpan(5/2.0);
-  std::cout << "The knot interval number for the value u = 5/2 is : " << i <<std::endl;
-
-  vpBasisFunction *N = NULL;
-  N = bSpline.computeBasisFuns(5/2.0);
-  std::cout << "The nonvanishing basis functions N(u=5/2) are :" << std::endl; 
-  for (unsigned int j = 0; j < bSpline.get_p()+1; j++)
-    std::cout << N[j].value << std::endl;
-  
-  vpBasisFunction **N2 = NULL;
-  N2 = bSpline.computeDersBasisFuns(5/2.0, 2);
-  std::cout << "The first derivatives of the basis functions N'(u=5/2) are :" << std::endl;
-  for (unsigned int j = 0; j < bSpline.get_p()+1; j++)
-    std::cout << N2[1][j].value << std::endl; 
-  
-  std::cout << "The second derivatives of the basis functions N''(u=5/2) are :" << std::endl;
-  for (unsigned int j = 0; j < bSpline.get_p()+1; j++)
-    std::cout << N2[2][j].value << std::endl; 
-  
-  if (opt_display && opt_click_allowed)
-  {
-    double u = 0.0;
-    vpImagePoint pt;
-    while (u <= 5)
+    vpBasisFunction *N = NULL;
+    N = bSpline.computeBasisFuns(5/2.0);
+    std::cout << "The nonvanishing basis functions N(u=5/2) are :" << std::endl;
+    for (unsigned int j = 0; j < bSpline.get_p()+1; j++)
+      std::cout << N[j].value << std::endl;
+
+    vpBasisFunction **N2 = NULL;
+    N2 = bSpline.computeDersBasisFuns(5/2.0, 2);
+    std::cout << "The first derivatives of the basis functions N'(u=5/2) are :" << std::endl;
+    for (unsigned int j = 0; j < bSpline.get_p()+1; j++)
+      std::cout << N2[1][j].value << std::endl;
+
+    std::cout << "The second derivatives of the basis functions N''(u=5/2) are :" << std::endl;
+    for (unsigned int j = 0; j < bSpline.get_p()+1; j++)
+      std::cout << N2[2][j].value << std::endl;
+
+    if (opt_display && opt_click_allowed)
     {
-      pt = bSpline.computeCurvePoint(u);
-      vpDisplay::displayCross(I,pt,4,vpColor::red);
-      u+=0.01;
+      double u = 0.0;
+      while (u <= 5)
+      {
+        pt = bSpline.computeCurvePoint(u);
+        vpDisplay::displayCross(I,pt,4,vpColor::red);
+        u+=0.01;
+      }
+      for(std::list<vpImagePoint>::const_iterator it=controlPoints.begin(); it!= controlPoints.end(); ++it){
+        vpDisplay::displayCross(I, *it, 4, vpColor::green);
+      }
+      vpDisplay::flush(I) ;
+      vpDisplay::getClick(I);
     }
-    for(std::list<vpImagePoint>::const_iterator it=controlPoints.begin(); it!= controlPoints.end(); ++it){
-      vpDisplay::displayCross(I, *it, 4, vpColor::green);
+
+    if (N != NULL) delete[] N;
+    if (N2 != NULL)
+    {
+      for (unsigned int j = 0; j <= 2; j++)
+        delete[] N2[j];
+      delete[] N2;
     }
-    vpDisplay::flush(I) ;
-    vpDisplay::getClick(I);
+
+    return 0;
   }
-  
-  if (N != NULL) delete[] N;
-  if (N2 != NULL)
-  {
-    for (unsigned int j = 0; j <= 2; j++)
-      delete[] N2[j];
-    delete[] N2;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  
-  return 0;
 }
 
 #else
diff --git a/example/math/CMakeLists.txt b/example/math/CMakeLists.txt
index 5e08c60b..5c063667 100644
--- a/example/math/CMakeLists.txt
+++ b/example/math/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/math/Nurbs.cpp b/example/math/Nurbs.cpp
index 1423f434..1bd00c58 100644
--- a/example/math/Nurbs.cpp
+++ b/example/math/Nurbs.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: Nurbs.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: Nurbs.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -73,6 +73,8 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdh"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display);
 
 /*!
 
@@ -121,9 +123,9 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
@@ -131,7 +133,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -140,7 +142,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -151,242 +153,238 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 int
 main(int argc, const char ** argv)
 {
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_click_allowed,
-                 opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_click_allowed,
+                   opt_display) == false) {
+      exit (-1);
+    }
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  vpImage<unsigned char> I(540,480);
-  vpImage<unsigned char> I2(540,480);
-  vpImage<unsigned char> I3(540,480);
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    vpImage<unsigned char> I(540,480);
+    vpImage<unsigned char> I2(540,480);
+    vpImage<unsigned char> I3(540,480);
 
-  // We open a window using either X11, GTK or GDI.
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display[3];
+    vpDisplayX display[3];
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display[3];
+    vpDisplayGDI display[3];
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display[3];
+    vpDisplayGTK display[3];
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV display[3];
+    vpDisplayOpenCV display[3];
 #endif
 
-  if (opt_display) {
-    try{
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display[0].init(I, 100, 100,"Points as control points") ;
       vpDisplay::display(I) ;
       vpDisplay::flush(I) ;
+    }
 
+    vpNurbs Nurbs;
+    std::list<double> knots;
+    knots.push_back(0);
+    knots.push_back(0);
+    knots.push_back(0);
+    knots.push_back(1);
+    knots.push_back(2);
+    knots.push_back(3);
+    knots.push_back(4);
+    knots.push_back(4);
+    knots.push_back(5);
+    knots.push_back(5);
+    knots.push_back(5);
+
+    std::list<vpImagePoint> controlPoints;
+    std::list<double> weights;
+    vpImagePoint pt;
+    pt.set_ij(50,300);
+    controlPoints.push_back(pt);
+    weights.push_back(1);
+    pt.set_ij(100,130);
+    controlPoints.push_back(pt);
+    weights.push_back(5);
+    pt.set_ij(150,400);
+    controlPoints.push_back(pt);
+    weights.push_back(0.2);
+    pt.set_ij(200,370);
+    controlPoints.push_back(pt);
+    weights.push_back(10);
+    pt.set_ij(250,120);
+    controlPoints.push_back(pt);
+    weights.push_back(1);
+    pt.set_ij(300,250);
+    controlPoints.push_back(pt);
+    weights.push_back(2);
+    pt.set_ij(350,200);
+    controlPoints.push_back(pt);
+    weights.push_back(3);
+    pt.set_ij(400,300);
+    controlPoints.push_back(pt);
+    weights.push_back(1);
+
+    Nurbs.set_p(2);
+    Nurbs.set_knots(knots);
+    Nurbs.set_controlPoints(controlPoints);
+    Nurbs.set_weights(weights);
+
+    std::cout << "The parameters are :" <<std::endl;
+    std::cout << "p : " << Nurbs.get_p() <<std::endl;
+    std::cout << "" <<std::endl;
+    std::cout << "The knot vector :" <<std::endl;
+    std::list<double> knots_cur;
+    Nurbs.get_knots(knots_cur);
+    unsigned int i_display=0;
+    for(std::list<double>::const_iterator it=knots_cur.begin(); it!=knots_cur.end(); ++it, ++i_display){
+      std::cout << i_display << " ---> " << *it << std::endl;
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
+    std::cout << "The control points are :" <<std::endl;
+    std::list<vpImagePoint> controlPoints_cur;
+    Nurbs.get_controlPoints(controlPoints_cur);
+    i_display=0;
+    for(std::list<vpImagePoint>::const_iterator it=controlPoints_cur.begin(); it!=controlPoints_cur.end(); ++it, ++i_display){
+      std::cout << i_display << " ---> " << *it << std::endl;
+    }
+    std::cout << "The associated weights are :" <<std::endl;
+    std::list<double> weights_cur;
+    Nurbs.get_weights(weights_cur);
+    i_display=0;
+    for(std::list<double>::const_iterator it=weights_cur.begin(); it!=weights_cur.end(); ++it, ++i_display){
+      std::cout << i_display << " ---> " << *it << std::endl;
     }
-  }
 
-  vpNurbs Nurbs;
-  std::list<double> knots;
-  knots.push_back(0);
-  knots.push_back(0);
-  knots.push_back(0);
-  knots.push_back(1);
-  knots.push_back(2);
-  knots.push_back(3);
-  knots.push_back(4);
-  knots.push_back(4);
-  knots.push_back(5);
-  knots.push_back(5);
-  knots.push_back(5);
-  
-  std::list<vpImagePoint> controlPoints;
-  std::list<double> weights;
-  vpImagePoint pt;
-  pt.set_ij(50,300);
-  controlPoints.push_back(pt);
-  weights.push_back(1);
-  pt.set_ij(100,130);
-  controlPoints.push_back(pt);
-  weights.push_back(5);
-  pt.set_ij(150,400);
-  controlPoints.push_back(pt);
-  weights.push_back(0.2);
-  pt.set_ij(200,370);
-  controlPoints.push_back(pt);
-  weights.push_back(10);
-  pt.set_ij(250,120);
-  controlPoints.push_back(pt);
-  weights.push_back(1);
-  pt.set_ij(300,250);
-  controlPoints.push_back(pt);
-  weights.push_back(2);
-  pt.set_ij(350,200);
-  controlPoints.push_back(pt);
-  weights.push_back(3);
-  pt.set_ij(400,300);
-  controlPoints.push_back(pt);
-  weights.push_back(1);
-  
-  Nurbs.set_p(2);
-  Nurbs.set_knots(knots);
-  Nurbs.set_controlPoints(controlPoints);
-  Nurbs.set_weights(weights);
-
-  std::cout << "The parameters are :" <<std::endl;
-  std::cout << "p : " << Nurbs.get_p() <<std::endl;
-  std::cout << "" <<std::endl;
-  std::cout << "The knot vector :" <<std::endl;
-  std::list<double> knots_cur;
-  Nurbs.get_knots(knots_cur);
-  unsigned int i_display=0;
-  for(std::list<double>::const_iterator it=knots_cur.begin(); it!=knots_cur.end(); ++it, ++i_display){
-    std::cout << i_display << " ---> " << *it << std::endl;
-  }
-  std::cout << "The control points are :" <<std::endl;
-  std::list<vpImagePoint> controlPoints_cur;
-  Nurbs.get_controlPoints(controlPoints_cur);
-  i_display=0;
-  for(std::list<vpImagePoint>::const_iterator it=controlPoints_cur.begin(); it!=controlPoints_cur.end(); ++it, ++i_display){
-    std::cout << i_display << " ---> " << *it << std::endl;
-  }
-  std::cout << "The associated weights are :" <<std::endl;
-  std::list<double> weights_cur;
-  Nurbs.get_weights(weights_cur);
-  i_display=0;
-  for(std::list<double>::const_iterator it=weights_cur.begin(); it!=weights_cur.end(); ++it, ++i_display){
-    std::cout << i_display << " ---> " << *it << std::endl;
-  }
+    unsigned int i = Nurbs.findSpan(5/2.0);
+    std::cout << "The knot interval number for the value u = 5/2 is : " << i <<std::endl;
 
-  unsigned int i = Nurbs.findSpan(5/2.0);
-  std::cout << "The knot interval number for the value u = 5/2 is : " << i <<std::endl;
-
-  vpBasisFunction *N = NULL;
-  N = Nurbs.computeBasisFuns(5/2.0);
-  std::cout << "The nonvanishing basis functions N(u=5/2) are :" << std::endl; 
-  for (unsigned int j = 0; j < Nurbs.get_p()+1; j++)
-    std::cout << N[j].value << std::endl;
-  
-  vpBasisFunction **N2 = NULL;
-  N2 = Nurbs.computeDersBasisFuns(5/2.0, 2);
-  std::cout << "The first derivatives of the basis functions N'(u=5/2) are :" << std::endl;
-  for (unsigned int j = 0; j < Nurbs.get_p()+1; j++)
-    std::cout << N2[1][j].value << std::endl; 
-  
-  std::cout << "The second derivatives of the basis functions N''(u=5/2) are :" << std::endl;
-  for (unsigned int j = 0; j < Nurbs.get_p()+1; j++)
-    std::cout << N2[2][j].value << std::endl; 
-  
-  if (opt_display && opt_click_allowed)
-  {
-    double u = 0.0;
-    vpImagePoint pt;
-    while (u <= 5)
+    vpBasisFunction *N = NULL;
+    N = Nurbs.computeBasisFuns(5/2.0);
+    std::cout << "The nonvanishing basis functions N(u=5/2) are :" << std::endl;
+    for (unsigned int j = 0; j < Nurbs.get_p()+1; j++)
+      std::cout << N[j].value << std::endl;
+
+    vpBasisFunction **N2 = NULL;
+    N2 = Nurbs.computeDersBasisFuns(5/2.0, 2);
+    std::cout << "The first derivatives of the basis functions N'(u=5/2) are :" << std::endl;
+    for (unsigned int j = 0; j < Nurbs.get_p()+1; j++)
+      std::cout << N2[1][j].value << std::endl;
+
+    std::cout << "The second derivatives of the basis functions N''(u=5/2) are :" << std::endl;
+    for (unsigned int j = 0; j < Nurbs.get_p()+1; j++)
+      std::cout << N2[2][j].value << std::endl;
+
+    if (opt_display && opt_click_allowed)
     {
-      pt = Nurbs.computeCurvePoint(u);
-      vpDisplay::displayCross(I,pt,4,vpColor::red);
-      u+=0.01;
+      double u = 0.0;
+      while (u <= 5)
+      {
+        pt = Nurbs.computeCurvePoint(u);
+        vpDisplay::displayCross(I,pt,4,vpColor::red);
+        u+=0.01;
+      }
+      for(std::list<vpImagePoint>::const_iterator it=controlPoints.begin(); it!=controlPoints.end(); ++it){
+        vpDisplay::displayCross(I, *it, 4, vpColor::green);
+      }
+
+      vpDisplay::flush(I) ;
+      vpDisplay::getClick(I);
     }
-    for(std::list<vpImagePoint>::const_iterator it=controlPoints.begin(); it!=controlPoints.end(); ++it){
-      vpDisplay::displayCross(I, *it, 4, vpColor::green);
+
+    if (opt_display) {
+      try{
+        // Display size is automatically defined by the image (I) size
+        display[1].init(I2, 100, 100,"Points interpolation") ;
+        vpDisplay::display(I2) ;
+        vpDisplay::flush(I2) ;
+      }
+      catch(...)
+      {
+        vpERROR_TRACE("Error while displaying the image") ;
+        exit(-1);
+      }
     }
 
-    vpDisplay::flush(I) ;
-    vpDisplay::getClick(I);
-  }
-  
-  if (opt_display) {
-    try{
-      // Display size is automatically defined by the image (I) size
-      display[1].init(I2, 100, 100,"Points interpolation") ;
-      vpDisplay::display(I2) ;
+    Nurbs.globalCurveInterp(controlPoints);
+
+    if (opt_display && opt_click_allowed)
+    {
+      double u = 0.0;
+      while (u <= 1)
+      {
+        pt = Nurbs.computeCurvePoint(u);
+        vpDisplay::displayCross(I2,pt,4,vpColor::red);
+        u+=0.01;
+      }
+
+      for(std::list<vpImagePoint>::const_iterator it=controlPoints.begin(); it!=controlPoints.end(); ++it){
+        vpDisplay::displayCross(I2, *it, 4, vpColor::green);
+      }
       vpDisplay::flush(I2) ;
+      vpDisplay::getClick(I2);
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
+
+
+    if (opt_display) {
+      try{
+        // Display size is automatically defined by the image (I) size
+        display[2].init(I3, 100, 100,"Points approximation") ;
+        vpDisplay::display(I3) ;
+        vpDisplay::flush(I3) ;
+      }
+      catch(...)
+      {
+        vpERROR_TRACE("Error while displaying the image") ;
+        exit(-1);
+      }
     }
-  }
-  
-  Nurbs.globalCurveInterp(controlPoints);
-  
-  if (opt_display && opt_click_allowed)
-  {
-    double u = 0.0;
-    vpImagePoint pt;
-    while (u <= 1)
+
+    Nurbs.globalCurveApprox(controlPoints,5);
+
+    if (opt_display && opt_click_allowed)
     {
-      pt = Nurbs.computeCurvePoint(u);
-      vpDisplay::displayCross(I2,pt,4,vpColor::red);
-      u+=0.01;
-    }
+      double u = 0.0;
+      while (u <= 1)
+      {
+        pt = Nurbs.computeCurvePoint(u);
+        vpDisplay::displayCross(I3,pt,4,vpColor::red);
+        u+=0.01;
+      }
+
+      for(std::list<vpImagePoint>::const_iterator it=controlPoints.begin(); it!=controlPoints.end(); ++it){
+        vpDisplay::displayCross(I3, *it, 4, vpColor::green);
+      }
 
-    for(std::list<vpImagePoint>::const_iterator it=controlPoints.begin(); it!=controlPoints.end(); ++it){
-      vpDisplay::displayCross(I2, *it, 4, vpColor::green);
-    }
-    vpDisplay::flush(I2) ;
-    vpDisplay::getClick(I2);
-  }
-  
-  
-  if (opt_display) {
-    try{
-      // Display size is automatically defined by the image (I) size
-      display[2].init(I3, 100, 100,"Points approximation") ;
-      vpDisplay::display(I3) ;
       vpDisplay::flush(I3) ;
-    }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
-  
-  Nurbs.globalCurveApprox(controlPoints,5);
-  
-  if (opt_display && opt_click_allowed)
-  {
-    double u = 0.0;
-    vpImagePoint pt;
-    while (u <= 1)
-    {
-      pt = Nurbs.computeCurvePoint(u);
-      vpDisplay::displayCross(I3,pt,4,vpColor::red);
-      u+=0.01;
+      vpDisplay::getClick(I3);
     }
 
-    for(std::list<vpImagePoint>::const_iterator it=controlPoints.begin(); it!=controlPoints.end(); ++it){
-      vpDisplay::displayCross(I3, *it, 4, vpColor::green);
+    if (N != NULL) delete[] N;
+    if (N2 != NULL)
+    {
+      for (int j = 0; j <= 2; j++)
+        delete[] N2[j];
+      delete[] N2;
     }
 
-    vpDisplay::flush(I3) ;
-    vpDisplay::getClick(I3);
+    return 0;
+    return 0;
   }
-  
-  if (N != NULL) delete[] N;
-  if (N2 != NULL)
-  {
-    for (int j = 0; j <= 2; j++)
-      delete[] N2[j];
-    delete[] N2;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  
-  return 0;
 }
 
 #else
 int main()
 {
-  std::cout << "This example requires a video device. " 
+  std::cout << "This example requires a video device. "
             << std::endl
             << "You should install X11, GTK, OpenCV, GDI or Direct3D"
             << std::endl
diff --git a/example/math/exponentialMap.cpp b/example/math/exponentialMap.cpp
index 5fe8cac1..2e627bc8 100644
--- a/example/math/exponentialMap.cpp
+++ b/example/math/exponentialMap.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: exponentialMap.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: exponentialMap.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,72 +58,77 @@
 int
 main()
 {
-
-  vpTranslationVector t;
-  t[0] = 0.1;  // t_x in m/s
-  t[1] = 0.2f; // t_y in m/s
-  t[2] = 0.f;  // t_z in m/s
-
-  vpRxyzVector rxyz;
-  rxyz[0] = vpMath::rad(0.f);  // r_x in rad/s
-  rxyz[1] = vpMath::rad(0.f);  // r_y in rad/s
-  rxyz[2] = vpMath::rad(90.f); // r_z in rad/s
-
-  // Build a ThetaU rotation vector from a Rxyz vector
-  vpThetaUVector tu;
-  tu.buildFrom(rxyz);
-
-  vpColVector v(6); // Velocity vector [t, thetaU]^t
-
-  v[0] = t[0]; // t_x
-  v[1] = t[1]; // t_y
-  v[2] = t[2]; // t_z
-  v[3] = tu[0]; // ThetaU_x
-  v[4] = tu[1]; // ThetaU_y
-  v[5] = tu[2]; // ThetaU_z
-
-  std::cout << "Considered velocity : \n" << v << std::endl;
-
-  vpHomogeneousMatrix M;
-
-  // Compute the displacement from the velocity applied during 1 second
-  M = vpExponentialMap::direct(v);
-
-  {
-    // Extract translation from homogenous matrix
-    vpTranslationVector dt; // translation displacement
-    M.extract(dt);
-
-    // Extract rotation from homogenous matrix
-    vpRotationMatrix R;
-    M.extract(R);
-    vpRxyzVector drxyz(R); // rotational displacement
-
-    std::cout << "Displacement if velocity is applied during 1 s : \n"
-              << dt << " " << drxyz << std::endl;
+  try {
+    vpTranslationVector t;
+    t[0] = 0.1;  // t_x in m/s
+    t[1] = 0.2f; // t_y in m/s
+    t[2] = 0.f;  // t_z in m/s
+
+    vpRxyzVector rxyz;
+    rxyz[0] = vpMath::rad(0.f);  // r_x in rad/s
+    rxyz[1] = vpMath::rad(0.f);  // r_y in rad/s
+    rxyz[2] = vpMath::rad(90.f); // r_z in rad/s
+
+    // Build a ThetaU rotation vector from a Rxyz vector
+    vpThetaUVector tu;
+    tu.buildFrom(rxyz);
+
+    vpColVector v(6); // Velocity vector [t, thetaU]^t
+
+    v[0] = t[0]; // t_x
+    v[1] = t[1]; // t_y
+    v[2] = t[2]; // t_z
+    v[3] = tu[0]; // ThetaU_x
+    v[4] = tu[1]; // ThetaU_y
+    v[5] = tu[2]; // ThetaU_z
+
+    std::cout << "Considered velocity : \n" << v << std::endl;
+
+    vpHomogeneousMatrix M;
+
+    // Compute the displacement from the velocity applied during 1 second
+    M = vpExponentialMap::direct(v);
+
+    {
+      // Extract translation from homogenous matrix
+      vpTranslationVector dt; // translation displacement
+      M.extract(dt);
+
+      // Extract rotation from homogenous matrix
+      vpRotationMatrix R;
+      M.extract(R);
+      vpRxyzVector drxyz(R); // rotational displacement
+
+      std::cout << "Displacement if velocity is applied during 1 s : \n"
+                << dt << " " << drxyz << std::endl;
+    }
+
+    // Compute the displacement from the velocity applied during 2 seconds
+    M = vpExponentialMap::direct(v, 2.f);
+
+    {
+      // Extract translation from homogenous matrix
+      vpTranslationVector dt; // translation displacement
+      M.extract(dt);
+
+      // Extract rotation from homogenous matrix
+      vpRotationMatrix R;
+      M.extract(R);
+      vpRxyzVector drxyz(R); // rotational displacement
+
+      std::cout << "Displacement if velocity is applied during 2 s : \n"
+                << dt << " " << drxyz << std::endl;
+    }
+
+    // Compute the velocity from the displacement observed during 2 seconds
+    v = vpExponentialMap::inverse(M, 2.f);
+
+    std::cout << "Velocity from displacement observed during 2 s: \n"
+              << v << std::endl;
+    return 0;
   }
-
-  // Compute the displacement from the velocity applied during 2 seconds
-  M = vpExponentialMap::direct(v, 2.f);
-
-  {
-    // Extract translation from homogenous matrix
-    vpTranslationVector dt; // translation displacement
-    M.extract(dt);
-
-    // Extract rotation from homogenous matrix
-    vpRotationMatrix R;
-    M.extract(R);
-    vpRxyzVector drxyz(R); // rotational displacement
-
-    std::cout << "Displacement if velocity is applied during 2 s : \n"
-              << dt << " " << drxyz << std::endl;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-
-  // Compute the velocity from the displacement observed during 2 seconds
-  v = vpExponentialMap::inverse(M, 2.f);
-
-  std::cout << "Velocity from displacement observed during 2 s: \n"
-            << v << std::endl;
-
 }
diff --git a/example/moments/image/CMakeLists.txt b/example/moments/image/CMakeLists.txt
index 4cce0c6c..85a366b3 100644
--- a/example/moments/image/CMakeLists.txt
+++ b/example/moments/image/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 #
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/moments/image/servoMomentImage.cpp b/example/moments/image/servoMomentImage.cpp
index 099c887f..e6577d66 100644
--- a/example/moments/image/servoMomentImage.cpp
+++ b/example/moments/image/servoMomentImage.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoMomentImage.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoMomentImage.cpp 4670 2014-02-17 08:59:05Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -73,6 +73,22 @@
 #include <visp/vpPoseVector.h>
 #include <visp/vpPlot.h>
 
+#if !defined(_WIN32) && !defined(VISP_HAVE_PTHREAD)
+// Robot simulator used in this example is not available
+int main()
+{
+  std::cout << "Can't run this example since vpSimulatorAfma6 capability is not available." << std::endl;
+  std::cout << "You should install pthread third-party library." << std::endl;
+}
+// No display available
+#elif !defined(VISP_HAVE_X11) && !defined(VISP_HAVE_OPENCV) && !defined(VISP_HAVE_GDI) && !defined(VISP_HAVE_D3D9) && !defined(VISP_HAVE_GTK)
+int main()
+{
+  std::cout << "Can't run this example since no display capability is available." << std::endl;
+  std::cout << "You should install one of the following third-party library: X11, OpenCV, GDI, GTK." << std::endl;
+}
+#else
+
 //setup robot parameters
 void paramRobot();
 
@@ -87,38 +103,29 @@ void init(vpHomogeneousMatrix& cMo, vpHomogeneousMatrix& cdMo);
 void execute(unsigned int nbIter); //launch the simulation
 void setInteractionMatrixType(vpServo::vpServoIteractionMatrixType type);
 double error();
-void _planeToABC(vpPlane& pl, double& A,double& B, double& C);
+void planeToABC(vpPlane& pl, double& A,double& B, double& C);
 void paramRobot();
 
-#if !defined(WIN32) && !defined(VISP_HAVE_PTHREAD)
-// Robot simulator used in this example is not available
-int main()
-{
-  std::cout << "Can't run this example since vpSimulatorAfma6 capability is not available." << std::endl;
-  std::cout << "You should install pthread third-party library." << std::endl;
-}
-// No display available
-#elif !defined(VISP_HAVE_X11) && !defined(VISP_HAVE_OPENCV) && !defined(VISP_HAVE_GDI) && !defined(VISP_HAVE_D3D9) && !defined(VISP_HAVE_GTK)
-int main()
-{
-  std::cout << "Can't run this example since no display capability is available." << std::endl;
-  std::cout << "You should install one of the following third-party library: X11, OpenCV, GDI, GTK." << std::endl;
-}
-#else
 void init_visp_plot(vpPlot& );
 
 int main()
 {
-  //intial pose
-  vpHomogeneousMatrix cMo(-0.1,-0.1,1.5,-vpMath::rad(20),-vpMath::rad(20),-vpMath::rad(30));
-  //Desired pose
-  vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,-0.0,1.0,vpMath::rad(0),vpMath::rad(0),-vpMath::rad(0)));
+  try {
+    //intial pose
+    vpHomogeneousMatrix cMo(-0.1,-0.1,1.5,-vpMath::rad(20),-vpMath::rad(20),-vpMath::rad(30));
+    //Desired pose
+    vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,-0.0,1.0,vpMath::rad(0),vpMath::rad(0),-vpMath::rad(0)));
 
-  //init the simulation
-  init(cMo,cdMo);
+    //init the simulation
+    init(cMo,cdMo);
 
-  execute(1500);
-  return 0;
+    execute(1500);
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 
@@ -243,11 +250,11 @@ void initFeatures(){
   vpPlane pl;
   pl.setABCD(0,0,1.0,0);
   pl.changeFrame(cMo);
-  _planeToABC(pl,A,B,C);
+  planeToABC(pl,A,B,C);
 
   pl.setABCD(0,0,1.0,0);
   pl.changeFrame(cdMo);
-  _planeToABC(pl,Ad,Bd,Cd);
+  planeToABC(pl,Ad,Bd,Cd);
 
   //extracting initial position (actually we only care about Zdst)
   vpTranslationVector vec;
@@ -255,8 +262,8 @@ void initFeatures(){
 
   ///////////////////////////// initializing moments and features /////////////////////////////////
   //don't need to be specific, vpMomentCommon automatically loads Xg,Yg,An,Ci,Cj,Alpha moments
-  moments = new vpMomentCommon(vpMomentCommon ::getSurface(dst),vpMomentCommon::getMu3(dst),vpMomentCommon::getAlpha(dst), vec[2]);
-  momentsDes = new vpMomentCommon(vpMomentCommon::getSurface(dst),vpMomentCommon::getMu3(dst),vpMomentCommon::getAlpha(dst),vec[2]);
+  moments = new vpMomentCommon(vpMomentCommon ::getSurface(dst),vpMomentCommon::getMu3(dst),vpMomentCommon::getAlpha(dst), vec[2], true);
+  momentsDes = new vpMomentCommon(vpMomentCommon::getSurface(dst),vpMomentCommon::getMu3(dst),vpMomentCommon::getAlpha(dst),vec[2], true);
   //same thing with common features
   featureMoments = new vpFeatureMomentCommon(*moments);
   featureMomentsDes = new vpFeatureMomentCommon(*momentsDes);
@@ -316,8 +323,8 @@ void execute(unsigned int nbIter){
     vpPlane pl;
     double A,B,C;
     pl.setABCD(0,0,1.0,0);
-	pl.changeFrame(cMo);
-    _planeToABC(pl,A,B,C);
+    pl.changeFrame(cMo);
+    planeToABC(pl,A,B,C);
 
     //track points, draw points and add refresh our object
     refreshScene(obj);
@@ -383,7 +390,7 @@ double error(){return _error;}
 
 
 
-void _planeToABC(vpPlane& pl, double& A,double& B, double& C){
+void planeToABC(vpPlane& pl, double& A,double& B, double& C){
 	if(fabs(pl.getD())<std::numeric_limits<double>::epsilon()){
 		std::cout << "Invalid position:" << std::endl;
 		std::cout << cMo << std::endl;
diff --git a/example/moments/points/CMakeLists.txt b/example/moments/points/CMakeLists.txt
index 4d193466..93b80d49 100644
--- a/example/moments/points/CMakeLists.txt
+++ b/example/moments/points/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 #
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/moments/points/servoMomentPoints.cpp b/example/moments/points/servoMomentPoints.cpp
index 015a674f..b5e2bedd 100644
--- a/example/moments/points/servoMomentPoints.cpp
+++ b/example/moments/points/servoMomentPoints.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoMomentPoints.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoMomentPoints.cpp 4673 2014-02-17 09:06:49Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -67,6 +67,23 @@
 #include <visp/vpSimulatorAfma6.h>
 #include <visp/vpPlane.h>
 
+
+#if !defined(_WIN32) && !defined(VISP_HAVE_PTHREAD)
+// Robot simulator used in this example is not available
+int main()
+{
+  std::cout << "Can't run this example since vpSimulatorAfma6 capability is not available." << std::endl;
+  std::cout << "You should install pthread third-party library." << std::endl;
+}
+// No display available
+#elif !defined(VISP_HAVE_X11) && !defined(VISP_HAVE_OPENCV) && !defined(VISP_HAVE_GDI) && !defined(VISP_HAVE_D3D9) && !defined(VISP_HAVE_GTK)
+int main()
+{
+  std::cout << "Can't run this example since no display capability is available." << std::endl;
+  std::cout << "You should install one of the following third-party library: X11, OpenCV, GDI, GTK." << std::endl;
+}
+#else
+
 //setup robot parameters
 void paramRobot();
 
@@ -81,34 +98,26 @@ void init(vpHomogeneousMatrix& cMo, vpHomogeneousMatrix& cdMo);
 void execute(unsigned int nbIter); //launch the simulation
 void setInteractionMatrixType(vpServo::vpServoIteractionMatrixType type);
 double error();
-void _planeToABC(vpPlane& pl, double& A,double& B, double& C);
+void planeToABC(vpPlane& pl, double& A,double& B, double& C);
 void paramRobot();
+void removeJointLimits(vpSimulatorAfma6& robot);
 
-#if !defined(WIN32) && !defined(VISP_HAVE_PTHREAD)
-// Robot simulator used in this example is not available
-int main()
-{
-  std::cout << "Can't run this example since vpSimulatorAfma6 capability is not available." << std::endl;
-  std::cout << "You should install pthread third-party library." << std::endl;
-}
-// No display available
-#elif !defined(VISP_HAVE_X11) && !defined(VISP_HAVE_OPENCV) && !defined(VISP_HAVE_GDI) && !defined(VISP_HAVE_D3D9) && !defined(VISP_HAVE_GTK)
 int main()
 {
-  std::cout << "Can't run this example since no display capability is available." << std::endl;
-  std::cout << "You should install one of the following third-party library: X11, OpenCV, GDI, GTK." << std::endl;
-}
-#else
-int main(){
-  //intial pose
-  vpHomogeneousMatrix cMo(0.05,0.1,1.5,vpMath::rad(30),vpMath::rad(20),-vpMath::rad(15));
-  //Desired pose
-  vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,0.0,1.0,vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)));
-
-  //init and run the simulation
-  init(cMo,cdMo);
-  execute(1500);
-  return 0;
+  try {  //intial pose
+    vpHomogeneousMatrix cMo(0.05,0.1,1.5,vpMath::rad(30),vpMath::rad(20),-vpMath::rad(15));
+    //Desired pose
+    vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,0.0,1.0,vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)));
+
+    //init and run the simulation
+    init(cMo,cdMo);
+    execute(1500);
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 //init the right display
@@ -146,12 +155,10 @@ vpFeatureMomentCommon *featureMomentsDes;
 vpMomentObject src(6);
 vpMomentObject dst(6);
 
-using namespace std;
-
 
 void initScene(){
-  vector<vpPoint> src_pts;
-  vector<vpPoint> dst_pts;
+  std::vector<vpPoint> src_pts;
+  std::vector<vpPoint> dst_pts;
 
   double x[8] = { 1,3, 4,-1 ,-3,-2,-1,1};
   double y[8] = { 0,1, 4, 4, -2,-2, 1,0};
@@ -187,11 +194,11 @@ void initFeatures(){
   vpPlane pl;
   pl.setABCD(0,0,1.0,0);
   pl.changeFrame(cMo);
-  _planeToABC(pl,A,B,C);
+  planeToABC(pl,A,B,C);
 
   pl.setABCD(0,0,1.0,0);
   pl.changeFrame(cdMo);
-  _planeToABC(pl,Ad,Bd,Cd);
+  planeToABC(pl,Ad,Bd,Cd);
 
   //extracting initial position (actually we only care about Zdst)
   vpTranslationVector vec;
@@ -229,7 +236,7 @@ void refreshScene(vpMomentObject &obj){
   double x[8] = { 1,3, 4,-1 ,-3,-2,-1,1};
   double y[8] = { 0,1, 4, 4, -2,-2, 1,0};
   int nbpoints = 8;
-  vector<vpPoint> cur_pts;
+  std::vector<vpPoint> cur_pts;
 
   for (int i = 0 ; i < nbpoints ; i++){
     vpPoint p;
@@ -280,7 +287,7 @@ void execute(unsigned int nbIter){
     double A,B,C;
     pl.setABCD(0,0,1.0,0);
     pl.changeFrame(cMo);
-    _planeToABC(pl,A,B,C);
+    planeToABC(pl,A,B,C);
 
     //track points, draw points and add refresh our object
     refreshScene(obj);
@@ -316,7 +323,8 @@ void execute(unsigned int nbIter){
   delete featureMomentsDes;
 }
 
-void removeJointLimits(vpSimulatorAfma6& robot){
+void removeJointLimits(vpSimulatorAfma6& robot_)
+{
   vpColVector limMin(6);
   vpColVector limMax(6);
   limMin[0] = vpMath::rad(-3600);
@@ -333,12 +341,12 @@ void removeJointLimits(vpSimulatorAfma6& robot){
   limMax[4] = vpMath::rad(3600);
   limMax[5] = vpMath::rad(3600);
 
-  robot.setJointLimit(limMin,limMax);
-  robot.setMaxRotationVelocity(99999);
-  robot.setMaxTranslationVelocity(999999);
+  robot_.setJointLimit(limMin,limMax);
+  robot_.setMaxRotationVelocity(99999);
+  robot_.setMaxTranslationVelocity(999999);
 }
 
-void _planeToABC(vpPlane& pl, double& A,double& B, double& C){
+void planeToABC(vpPlane& pl, double& A,double& B, double& C){
 	if(fabs(pl.getD())<std::numeric_limits<double>::epsilon()){
 		std::cout << "Invalid position:" << std::endl;
 		std::cout << cMo << std::endl;
diff --git a/example/moments/polygon/CMakeLists.txt b/example/moments/polygon/CMakeLists.txt
index 904ebb55..25661a2f 100644
--- a/example/moments/polygon/CMakeLists.txt
+++ b/example/moments/polygon/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 #
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/moments/polygon/servoMomentPolygon.cpp b/example/moments/polygon/servoMomentPolygon.cpp
index 1b6654d2..87cdedeb 100644
--- a/example/moments/polygon/servoMomentPolygon.cpp
+++ b/example/moments/polygon/servoMomentPolygon.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoMomentPolygon.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoMomentPolygon.cpp 4670 2014-02-17 08:59:05Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -66,6 +66,22 @@
 #include <visp/vpSimulatorAfma6.h>
 #include <visp/vpPlane.h>
 
+#if !defined(_WIN32) && !defined(VISP_HAVE_PTHREAD)
+// Robot simulator used in this example is not available
+int main()
+{
+  std::cout << "Can't run this example since vpSimulatorAfma6 capability is not available." << std::endl;
+  std::cout << "You should install pthread third-party library." << std::endl;
+}
+// No display available
+#elif !defined(VISP_HAVE_X11) && !defined(VISP_HAVE_OPENCV) && !defined(VISP_HAVE_GDI) && !defined(VISP_HAVE_D3D9) && !defined(VISP_HAVE_GTK)
+int main()
+{
+  std::cout << "Can't run this example since no display capability is available." << std::endl;
+  std::cout << "You should install one of the following third-party library: X11, OpenCV, GDI, GTK." << std::endl;
+}
+#else
+
 //setup robot parameters
 void paramRobot();
 
@@ -80,34 +96,26 @@ void init(vpHomogeneousMatrix& cMo, vpHomogeneousMatrix& cdMo);
 void execute(unsigned int nbIter); //launch the simulation
 void setInteractionMatrixType(vpServo::vpServoIteractionMatrixType type);
 double error();
-void _planeToABC(vpPlane& pl, double& A,double& B, double& C);
+void planeToABC(vpPlane& pl, double& A,double& B, double& C);
 void paramRobot();
+void removeJointLimits(vpSimulatorAfma6& robot);
 
-#if !defined(WIN32) && !defined(VISP_HAVE_PTHREAD)
-// Robot simulator used in this example is not available
-int main()
-{
-  std::cout << "Can't run this example since vpSimulatorAfma6 capability is not available." << std::endl;
-  std::cout << "You should install pthread third-party library." << std::endl;
-}
-// No display available
-#elif !defined(VISP_HAVE_X11) && !defined(VISP_HAVE_OPENCV) && !defined(VISP_HAVE_GDI) && !defined(VISP_HAVE_D3D9) && !defined(VISP_HAVE_GTK)
 int main()
 {
-  std::cout << "Can't run this example since no display capability is available." << std::endl;
-  std::cout << "You should install one of the following third-party library: X11, OpenCV, GDI, GTK." << std::endl;
-}
-#else
-int main(){
-  //intial pose
-  vpHomogeneousMatrix cMo(-0.1,-0.1,1.5,-vpMath::rad(20),-vpMath::rad(20),-vpMath::rad(30));
-  //Desired pose
-  vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,0.0,1.0,vpMath::rad(0),vpMath::rad(0),-vpMath::rad(0)));
-
-  //init and run the simulation
-  init(cMo,cdMo);
-  execute(1500);
-  return 0;
+  try {  //intial pose
+    vpHomogeneousMatrix cMo(-0.1,-0.1,1.5,-vpMath::rad(20),-vpMath::rad(20),-vpMath::rad(30));
+    //Desired pose
+    vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,0.0,1.0,vpMath::rad(0),vpMath::rad(0),-vpMath::rad(0)));
+
+    //init and run the simulation
+    init(cMo,cdMo);
+    execute(1500);
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 //init the right display
@@ -214,11 +222,11 @@ void initFeatures(){
   vpPlane pl;
   pl.setABCD(0,0,1.0,0);
   pl.changeFrame(cMo);
-  _planeToABC(pl,A,B,C);
+  planeToABC(pl,A,B,C);
 
   pl.setABCD(0,0,1.0,0);
   pl.changeFrame(cdMo);
-  _planeToABC(pl,Ad,Bd,Cd);
+  planeToABC(pl,Ad,Bd,Cd);
 
   //extracting initial position (actually we only care about Zdst)
   vpTranslationVector vec;
@@ -275,7 +283,7 @@ void execute(unsigned int nbIter){
     double A,B,C;
     pl.setABCD(0,0,1.0,0);
     pl.changeFrame(cMo);
-    _planeToABC(pl,A,B,C);
+    planeToABC(pl,A,B,C);
 
     //track points, draw points and add refresh our object
     refreshScene(obj);
@@ -313,7 +321,8 @@ void execute(unsigned int nbIter){
 void setInteractionMatrixType(vpServo::vpServoIteractionMatrixType type){interaction_type=type;}
 double error(){return _error;}
 
-void removeJointLimits(vpSimulatorAfma6& robot){
+void removeJointLimits(vpSimulatorAfma6& robot_)
+{
   vpColVector limMin(6);
   vpColVector limMax(6);
   limMin[0] = vpMath::rad(-3600);
@@ -330,10 +339,10 @@ void removeJointLimits(vpSimulatorAfma6& robot){
   limMax[4] = vpMath::rad(3600);
   limMax[5] = vpMath::rad(3600);
 
-  robot.setJointLimit(limMin,limMax);
+  robot_.setJointLimit(limMin,limMax);
 }
 
-void _planeToABC(vpPlane& pl, double& A,double& B, double& C){
+void planeToABC(vpPlane& pl, double& A,double& B, double& C){
 	if(fabs(pl.getD())<std::numeric_limits<double>::epsilon()){
 		std::cout << "Invalid position:" << std::endl;
 		std::cout << cMo << std::endl;
diff --git a/example/ogre-simulator/AROgre.cpp b/example/ogre-simulator/AROgre.cpp
index a0f4668f..7476a4e3 100644
--- a/example/ogre-simulator/AROgre.cpp
+++ b/example/ogre-simulator/AROgre.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: AROgre.cpp 4305 2013-07-05 13:23:47Z fspindle $
+ * $Id: AROgre.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -50,10 +50,11 @@
 #include <visp/vpConfig.h>
 #include <iostream>
 
-//#if defined(VISP_HAVE_OGRE) && defined(VISP_HAVE_DISPLAY)
-#if defined(VISP_HAVE_OGRE) && (defined(VISP_HAVE_OPENCV) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_D3D9) || defined(VISP_HAVE_GTK))
+//#if defined(VISP_HAVE_OGRE) && (defined(VISP_HAVE_OPENCV) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_D3D9) || defined(VISP_HAVE_GTK) || (defined(VISP_HAVE_X11) && ! defined(APPLE)))
+#if defined(VISP_HAVE_OGRE) && (defined(VISP_HAVE_OPENCV) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_D3D9) || defined(VISP_HAVE_GTK) || (defined(VISP_HAVE_X11) && ! (defined(__APPLE__) && defined(__MACH__))))
 
-#if defined(VISP_HAVE_X11) && ! defined(APPLE)
+//#if defined(VISP_HAVE_X11) && ! defined(APPLE)
+#if defined(VISP_HAVE_X11) && ! (defined(__APPLE__) && defined(__MACH__))
 // produce an error on OSX: ‘typedef int Cursor’
 // /usr/X11R6/include/X11/X.h:108: error: ‘Cursor’ has a previous
 // declaration as ‘typedef XID Cursor’. That's why it should not be
@@ -190,6 +191,8 @@ public:
     if (resourcePath) mResourcePath = resourcePath;
     std::cout << "mResourcePath: " << mResourcePath<< std::endl;
     vecDevant = Ogre::Vector3(0,-1,0);
+    robot = NULL;
+    mAnimationState = NULL;
   }
 	
 protected :
@@ -312,7 +315,7 @@ protected :
 */
 void computeInitialPose(vpCameraParameters *mcam, vpImage<unsigned char> &I, 
                         vpPose * mPose, vpDot2 *md, vpImagePoint *mcog,
-                        vpHomogeneousMatrix *cmo, vpPoint *mP,
+                        vpHomogeneousMatrix *cMo, vpPoint *mP,
                         const bool &opt_click_allowed)
 {
   // ---------------------------------------------------
@@ -320,7 +323,8 @@ void computeInitialPose(vpCameraParameters *mcam, vpImage<unsigned char> &I,
   // ----------------------------------------------------
   bool opt_display = true;
 	
-#if defined(VISP_HAVE_X11) && ! defined(APPLE)
+//#if defined(VISP_HAVE_X11) && ! defined(APPLE)
+#if defined(VISP_HAVE_X11) && ! (defined(__APPLE__) && defined(__MACH__))
   // produce an error on OSX: ‘typedef int Cursor’
   // /usr/X11R6/include/X11/X.h:108: error: ‘Cursor’ has a previous
   // declaration as ‘typedef XID Cursor’. That's why it should not be
@@ -335,7 +339,6 @@ void computeInitialPose(vpCameraParameters *mcam, vpImage<unsigned char> &I,
 #elif defined VISP_HAVE_D3D9
   vpDisplayD3D display;
 #endif
-
   for (unsigned int i=0 ; i < 4 ; i++)
   {
     if (opt_display) {
@@ -493,16 +496,16 @@ void computeInitialPose(vpCameraParameters *mcam, vpImage<unsigned char> &I,
   // minimisation method
 	
   // Pose by Lagrange it provides an initialization of the pose
-  mPose->computePose(vpPose::LAGRANGE, *cmo) ;
+  mPose->computePose(vpPose::LAGRANGE, *cMo) ;
   // the pose is now refined using the virtual visual servoing approach
   // Warning: cMo needs to be initialized otherwise it may  diverge
-  mPose->computePose(vpPose::VIRTUAL_VS, *cmo) ;
+  mPose->computePose(vpPose::VIRTUAL_VS, *cMo) ;
 	
   // Display breifly just to have a glimpse a the ViSP pose
   //	while(cpt<500){
   if( opt_display ){
     // Display the computed pose
-    mPose->display(I,*cmo,*mcam, 0.05, vpColor::red) ;
+    mPose->display(I,*cMo,*mcam, 0.05, vpColor::red) ;
     vpDisplay::flush(I) ;
     vpTime::wait(800);
   }
@@ -512,189 +515,181 @@ void computeInitialPose(vpCameraParameters *mcam, vpImage<unsigned char> &I,
 
 int main(int argc, const char **argv)
 { 
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string opt_ppath;
-  std::string dirname;
-  std::string filename;
-  bool opt_click_allowed = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_ppath, opt_click_allowed) == false) {
-    exit (-1);
-  }
-
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string opt_ppath;
+    std::string dirname;
+    std::string filename;
+    bool opt_click_allowed = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_ppath, opt_click_allowed) == false) {
+      exit (-1);
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty() ){
-    usage(argv[0], NULL, ipath, opt_ppath);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl
-              << "  Use -p <personal image path> option if you want to "<<std::endl
-              << "  use personal images." << std::endl
-              << std::endl;
-
-    exit(-1);
-  }
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
+    }
 
-  std::ostringstream s;
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty() ){
+      usage(argv[0], NULL, ipath, opt_ppath);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl
+                << "  Use -p <personal image path> option if you want to "<<std::endl
+                << "  use personal images." << std::endl
+                << std::endl;
+
+      exit(-1);
+    }
 
-  if (opt_ppath.empty()){
-    // Set the path location of the image sequence
-    dirname = ipath + vpIoTools::path("/ViSP-images/mire-2/");
+    std::ostringstream s;
 
-    // Build the name of the image file
+    if (opt_ppath.empty()){
+      // Set the path location of the image sequence
+      dirname = ipath + vpIoTools::path("/ViSP-images/mire-2/");
 
-    s.setf(std::ios::right, std::ios::adjustfield);
-    s << "image.%04d.pgm";
-    filename = dirname + s.str();
-  }
-  else {
-    filename = opt_ppath;
-  }
+      // Build the name of the image file
 
-  //We will read a sequence of images
-  vpVideoReader grabber;
-  grabber.setFirstFrameIndex(1);
-  grabber.setFileName(filename.c_str());
-  // Grey level image associated to a display in the initial pose computation
-  vpImage<unsigned char> Idisplay;
-  // Grey level image to track points
-  vpImage<unsigned char> I;
-  // RGBa image to get background
-  vpImage<vpRGBa> IC;
-  // Matrix representing camera parameters
-  vpHomogeneousMatrix cmo;
-
-  // Variables used for pose computation purposes
-  vpPose mPose;
-  vpDot2 md[4];
-  vpImagePoint mcog[4];
-  vpPoint mP[4];
-
-  // CameraParameters we got from calibration
-  // Keep u0 and v0 as center of the screen
-  vpCameraParameters mcam;
-
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    vpCTRACE << "Load: " << filename << std::endl;
-    grabber.open(Idisplay);
-    grabber.acquire(Idisplay);
-    vpCameraParameters mcamTmp(592,570,grabber.getWidth()/2,grabber.getHeight()/2);
-    // Compute the initial pose of the camera
-    computeInitialPose(&mcamTmp, Idisplay, &mPose, md, mcog, &cmo, mP, 
-                       opt_click_allowed);
-    // Close the framegrabber
-    grabber.close();
+      s.setf(std::ios::right, std::ios::adjustfield);
+      s << "image.%04d.pgm";
+      filename = dirname + s.str();
+    }
+    else {
+      filename = opt_ppath;
+    }
 
-    // Associate the grabber to the RGBa image
-    grabber.open(IC);
-    mcam.init(mcamTmp);
-  }
-  catch(...)
-  {
-    // an exception is thrown if an exception from readPGM has been caught
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
+    //We will read a sequence of images
+    vpVideoReader grabber;
+    grabber.setFirstFrameIndex(1);
+    grabber.setFileName(filename.c_str());
+    // Grey level image associated to a display in the initial pose computation
+    vpImage<unsigned char> Idisplay;
+    // Grey level image to track points
+    vpImage<unsigned char> I;
+    // RGBa image to get background
+    vpImage<vpRGBa> IC;
+    // Matrix representing camera parameters
+    vpHomogeneousMatrix cMo;
+
+    // Variables used for pose computation purposes
+    vpPose mPose;
+    vpDot2 md[4];
+    vpImagePoint mcog[4];
+    vpPoint mP[4];
+
+    // CameraParameters we got from calibration
+    // Keep u0 and v0 as center of the screen
+    vpCameraParameters mcam;
+
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
+    try{
+      vpCTRACE << "Load: " << filename << std::endl;
+      grabber.open(Idisplay);
+      grabber.acquire(Idisplay);
+      vpCameraParameters mcamTmp(592,570,grabber.getWidth()/2,grabber.getHeight()/2);
+      // Compute the initial pose of the camera
+      computeInitialPose(&mcamTmp, Idisplay, &mPose, md, mcog, &cMo, mP,
+                         opt_click_allowed);
+      // Close the framegrabber
+      grabber.close();
+
+      // Associate the grabber to the RGBa image
+      grabber.open(IC);
+      mcam.init(mcamTmp);
+    }
+    catch(...)
+    {
+      // an exception is thrown if an exception from readPGM has been caught
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
+      exit(-1);
+    }
 
-  // Create a vpRAOgre object with color background
-  vpAROgreExample ogre(mcam, (unsigned int)grabber.getWidth(), (unsigned int)grabber.getHeight());
-  // Initialize it
-  ogre.init(IC);
+    // Create a vpRAOgre object with color background
+    vpAROgreExample ogre(mcam, (unsigned int)grabber.getWidth(), (unsigned int)grabber.getHeight());
+    // Initialize it
+    ogre.init(IC);
 
-  try
-  {
-      double t0 = vpTime::measureTimeMs();
+    double t0 = vpTime::measureTimeMs();
 
     // Rendering loop
-      while(ogre.continueRendering() && !grabber.end()){
-     // Acquire a frame
+    while(ogre.continueRendering() && !grabber.end()) {
+      // Acquire a frame
       grabber.acquire(IC);
 
       // Convert it to a grey level image for tracking purpose
       vpImageConvert::convert(IC,I);
-			
-      // Update pose calculation
-      try{
-        // kill the point list
-        mPose.clearPoint() ;
-				
-        // track the dot
-        for (int i=0 ; i < 4 ; i++)
+
+      // kill the point list
+      mPose.clearPoint() ;
+
+      // track the dot
+      for (int i=0 ; i < 4 ; i++)
+      {
+        // track the point
+        md[i].track(I, mcog[i]) ;
+        md[i].setGrayLevelPrecision(0.90);
+        // pixel->meter conversion
         {
-          // track the point
-          md[i].track(I, mcog[i]) ;
-          md[i].setGrayLevelPrecision(0.90);
-          // pixel->meter conversion
-          {
-            double x=0, y=0;
-            vpPixelMeterConversion::convertPoint(mcam, mcog[i], x, y)  ;
-            mP[i].set_x(x) ;
-            mP[i].set_y(y) ;
-          }
-
-          // and added to the pose computation point list
-          mPose.addPoint(mP[i]) ;
+          double x=0, y=0;
+          vpPixelMeterConversion::convertPoint(mcam, mcog[i], x, y)  ;
+          mP[i].set_x(x) ;
+          mP[i].set_y(y) ;
         }
-        // the pose structure has been updated
 
-        // the pose is now updated using the virtual visual servoing approach
-        // Dementhon or lagrange is no longuer necessary, pose at the
-        // previous iteration is sufficient
-        mPose.computePose(vpPose::VIRTUAL_VS, cmo);
-      }
-      catch(...){
-        vpERROR_TRACE("Error in tracking loop") ;
-        return false;
+        // and added to the pose computation point list
+        mPose.addPoint(mP[i]) ;
       }
+      // the pose structure has been updated
+
+      // the pose is now updated using the virtual visual servoing approach
+      // Dementhon or lagrange is no longuer necessary, pose at the
+      // previous iteration is sufficient
+      mPose.computePose(vpPose::VIRTUAL_VS, cMo);
 
       // Display with ogre
-      ogre.display(IC,cmo);
+      ogre.display(IC,cMo);
 
       // Wait so that the video does not go too fast
       double t1 = vpTime::measureTimeMs();
@@ -703,25 +698,22 @@ int main(int argc, const char **argv)
     }
     // Close the grabber
     grabber.close();
+
+    return 0;
   }
-  catch (Ogre::Exception& e)
-  {
-    std::cerr << "Exception:\n";
-    std::cerr << e.getFullDescription().c_str() << "\n";
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
     return 1;
   }
-  catch (...)
-  {
-    std::cerr << "Exception: " << "\n";
+  catch(...) {
+    std::cout << "Catch an exception " << std::endl;
     return 1;
   }
-
-  return EXIT_SUCCESS; 
 }
 #else // VISP_HAVE_OGRE && VISP_HAVE_DISPLAY
 int
 main()
 {  
-  std::cout << "You should install Ogre3D to run this example..." << std::endl;
+  std::cout << "You should install Ogre3D or a display (GTK or OpenCV...) to run this example..." << std::endl;
 }
 #endif
diff --git a/example/ogre-simulator/AROgreBasic.cpp b/example/ogre-simulator/AROgreBasic.cpp
index d006bcd3..4c054268 100644
--- a/example/ogre-simulator/AROgreBasic.cpp
+++ b/example/ogre-simulator/AROgreBasic.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: AROgreBasic.cpp 4305 2013-07-05 13:23:47Z fspindle $
+ * $Id: AROgreBasic.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -49,10 +49,12 @@
 
 #include <visp/vpConfig.h>
 #include <iostream>
-//#if defined(VISP_HAVE_OGRE) && defined(VISP_HAVE_DISPLAY)
-#if defined(VISP_HAVE_OGRE) && (defined(VISP_HAVE_OPENCV) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_D3D9) || defined(VISP_HAVE_GTK))
 
-#if defined(VISP_HAVE_X11) && ! defined(APPLE)
+//#if defined(VISP_HAVE_OGRE) && (defined(VISP_HAVE_OPENCV) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_D3D9) || defined(VISP_HAVE_GTK) || (defined(VISP_HAVE_X11) && ! defined(APPLE)))
+#if defined(VISP_HAVE_OGRE) && (defined(VISP_HAVE_OPENCV) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_D3D9) || defined(VISP_HAVE_GTK) || (defined(VISP_HAVE_X11) && ! (defined(__APPLE__) && defined(__MACH__))))
+
+//#if defined(VISP_HAVE_X11) && ! defined(APPLE)
+#if defined(VISP_HAVE_X11) && ! (defined(__APPLE__) && defined(__MACH__))
 // produce an error on OSX: ‘typedef int Cursor’
 // /usr/X11R6/include/X11/X.h:108: error: ‘Cursor’ has a previous
 // declaration as ‘typedef XID Cursor’. That's why it should not be
@@ -179,7 +181,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
 */
 void computeInitialPose(vpCameraParameters *mcam, vpImage<unsigned char> &I, 
                         vpPose * mPose, vpDot2 *md, vpImagePoint *mcog,
-                        vpHomogeneousMatrix *cmo, vpPoint *mP,
+                        vpHomogeneousMatrix *cMo, vpPoint *mP,
                         const bool &opt_click_allowed)
 {
   // ---------------------------------------------------
@@ -187,7 +189,8 @@ void computeInitialPose(vpCameraParameters *mcam, vpImage<unsigned char> &I,
   // ----------------------------------------------------
   bool opt_display = true;
 	
-#if defined(VISP_HAVE_X11) && ! defined(APPLE)
+//#if defined(VISP_HAVE_X11) && ! defined(APPLE)
+#if defined(VISP_HAVE_X11) && ! (defined(__APPLE__) && defined(__MACH__))
   // produce an error on OSX: ‘typedef int Cursor’
   // /usr/X11R6/include/X11/X.h:108: error: ‘Cursor’ has a previous
   // declaration as ‘typedef XID Cursor’. That's why it should not be
@@ -364,16 +367,16 @@ void computeInitialPose(vpCameraParameters *mcam, vpImage<unsigned char> &I,
   // minimisation method
 	
   // Pose by Lagrange it provides an initialization of the pose
-  mPose->computePose(vpPose::LAGRANGE, *cmo) ;
+  mPose->computePose(vpPose::LAGRANGE, *cMo) ;
   // the pose is now refined using the virtual visual servoing approach
   // Warning: cMo needs to be initialized otherwise it may  diverge
-  mPose->computePose(vpPose::VIRTUAL_VS, *cmo) ;
+  mPose->computePose(vpPose::VIRTUAL_VS, *cMo) ;
 	
   // Display breifly just to have a glimpse a the ViSP pose
   //	while(cpt<500){
   if( opt_display ){
     // Display the computed pose
-    mPose->display(I,*cmo,*mcam, 0.05, vpColor::red) ;
+    mPose->display(I,*cMo,*mcam, 0.05, vpColor::red) ;
     vpDisplay::flush(I) ;
     vpTime::wait(1000);
   }
@@ -382,222 +385,216 @@ void computeInitialPose(vpCameraParameters *mcam, vpImage<unsigned char> &I,
 
 int main(int argc, const char **argv)
 { 
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string opt_ppath;
-  std::string dirname;
-  std::string filename;
-  bool opt_click_allowed = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_ppath, opt_click_allowed) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string opt_ppath;
+    std::string dirname;
+    std::string filename;
+    bool opt_click_allowed = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_ppath, opt_click_allowed) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty() ){
-    usage(argv[0], NULL, ipath, opt_ppath);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl
-              << "  Use -p <personal image path> option if you want to "<<std::endl
-              << "  use personal images." << std::endl
-              << std::endl;
-
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty() ){
+      usage(argv[0], NULL, ipath, opt_ppath);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl
+                << "  Use -p <personal image path> option if you want to "<<std::endl
+                << "  use personal images." << std::endl
+                << std::endl;
+
+      exit(-1);
+    }
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  //	  vpImage<unsigned char> I ;
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    //	  vpImage<unsigned char> I ;
 
-  //	  unsigned iter = 0;
-  std::ostringstream s;
-  //	  char cfilename[FILENAME_MAX];
+    //	  unsigned iter = 0;
+    std::ostringstream s;
+    //	  char cfilename[FILENAME_MAX];
 
-  if (opt_ppath.empty()){
-    // Set the path location of the image sequence
-    dirname = ipath + vpIoTools::path("/ViSP-images/mire-2/");
+    if (opt_ppath.empty()){
+      // Set the path location of the image sequence
+      dirname = ipath + vpIoTools::path("/ViSP-images/mire-2/");
 
-    // Build the name of the image file
+      // Build the name of the image file
 
-    s.setf(std::ios::right, std::ios::adjustfield);
-    s << "image.%04d.pgm";
-    filename = dirname + s.str();
-  }
-  else {
-    filename = opt_ppath;
-  }
-
-  //We will read a sequence of images
-  vpVideoReader grabber;
-  grabber.setFirstFrameIndex(1);
-  grabber.setFileName(filename.c_str());
-  // Grey level image associated to a display in the initial pose computation
-  vpImage<unsigned char> Idisplay;
-  // Grey level image to track points
-  vpImage<unsigned char> I;
-  // RGBa image to get background
-  vpImage<vpRGBa> IC;
-  // Matrix representing camera parameters
-  vpHomogeneousMatrix cmo;
-
-  // Variables used for pose computation purposes
-  vpPose mPose;
-  vpDot2 md[4];
-  vpImagePoint mcog[4];
-  vpPoint mP[4];
-
-  // CameraParameters we got from calibration
-  // Keep u0 and v0 as center of the screen
-  vpCameraParameters mcam;
-
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    vpCTRACE << "Load: " << filename << std::endl;
-    grabber.open(Idisplay);
-    grabber.acquire(Idisplay);
-    vpCameraParameters mcamTmp(592,570,grabber.getWidth()/2,grabber.getHeight()/2);
-    // Compute the initial pose of the camera
-    computeInitialPose(&mcamTmp, Idisplay, &mPose, md, mcog, &cmo, mP,
-                       opt_click_allowed);
-    // Close the framegrabber
-    grabber.close();
+      s.setf(std::ios::right, std::ios::adjustfield);
+      s << "image.%04d.pgm";
+      filename = dirname + s.str();
+    }
+    else {
+      filename = opt_ppath;
+    }
 
-    // Associate the grabber to the RGBa image
-    grabber.open(IC);
-    mcam.init(mcamTmp);
-  }
-  catch(...)
-  {
-    // an exception is thrown if an exception from readPGM has been caught
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
+    //We will read a sequence of images
+    vpVideoReader grabber;
+    grabber.setFirstFrameIndex(1);
+    grabber.setFileName(filename.c_str());
+    // Grey level image associated to a display in the initial pose computation
+    vpImage<unsigned char> Idisplay;
+    // Grey level image to track points
+    vpImage<unsigned char> I;
+    // RGBa image to get background
+    vpImage<vpRGBa> IC;
+    // Matrix representing camera parameters
+    vpHomogeneousMatrix cMo;
+
+    // Variables used for pose computation purposes
+    vpPose mPose;
+    vpDot2 md[4];
+    vpImagePoint mcog[4];
+    vpPoint mP[4];
+
+    // CameraParameters we got from calibration
+    // Keep u0 and v0 as center of the screen
+    vpCameraParameters mcam;
+
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
+    try{
+      vpCTRACE << "Load: " << filename << std::endl;
+      grabber.open(Idisplay);
+      grabber.acquire(Idisplay);
+      vpCameraParameters mcamTmp(592,570,grabber.getWidth()/2,grabber.getHeight()/2);
+      // Compute the initial pose of the camera
+      computeInitialPose(&mcamTmp, Idisplay, &mPose, md, mcog, &cMo, mP,
+                         opt_click_allowed);
+      // Close the framegrabber
+      grabber.close();
+
+      // Associate the grabber to the RGBa image
+      grabber.open(IC);
+      mcam.init(mcamTmp);
+    }
+    catch(...)
+    {
+      // an exception is thrown if an exception from readPGM has been caught
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
+      exit(-1);
+    }
 
-  // Create a vpRAOgre object with color background
-  vpAROgre ogre(mcam, (unsigned int)grabber.getWidth(), (unsigned int)grabber.getHeight());
-  // Initialize it
-  ogre.init(IC);
-  ogre.load("Robot", "robot.mesh");
-  ogre.setScale("Robot", 0.001f,0.001f,0.001f);
-  ogre.setRotation("Robot", vpRotationMatrix(vpRxyzVector(M_PI/2, -M_PI/2, 0)));
+    // Create a vpRAOgre object with color background
+    vpAROgre ogre(mcam, grabber.getWidth(), grabber.getHeight());
+    // Initialize it
+    ogre.init(IC);
+    ogre.load("Robot", "robot.mesh");
+    ogre.setScale("Robot", 0.001f,0.001f,0.001f);
+    ogre.setRotation("Robot", vpRotationMatrix(vpRxyzVector(M_PI/2, -M_PI/2, 0)));
+
+    // Add an optional point light source
+    Ogre::Light * light = ogre.getSceneManager()->createLight();
+    light->setDiffuseColour(1, 1, 1); // scaled RGB values
+    light->setSpecularColour(1, 1, 1); // scaled RGB values
+    light->setPosition(-5, -5, 10);
+    light->setType(Ogre::Light::LT_POINT);
 
-  try
-  {
     // Rendering loop
-    while(ogre.continueRendering() && !grabber.end()){
+    while(ogre.continueRendering() && !grabber.end()) {
       // Acquire a frame
       grabber.acquire(IC);
 
       // Convert it to a grey level image for tracking purpose
       vpImageConvert::convert(IC,I);
-			
-      // Update pose calculation
-      try{
-        // kill the point list
-        mPose.clearPoint() ;
-				
-        // track the dot
-        for (int i=0 ; i < 4 ; i++)
+
+      // kill the point list
+      mPose.clearPoint() ;
+
+      // track the dot
+      for (int i=0 ; i < 4 ; i++) {
+        // track the point
+        md[i].track(I, mcog[i]) ;
+        md[i].setGrayLevelPrecision(0.90);
+        // pixel->meter conversion
         {
-          // track the point
-          md[i].track(I, mcog[i]) ;
-          md[i].setGrayLevelPrecision(0.90);
-          // pixel->meter conversion
-          {
-            double x=0, y=0;
-            vpPixelMeterConversion::convertPoint(mcam, mcog[i], x, y)  ;
-            mP[i].set_x(x) ;
-            mP[i].set_y(y) ;
-          }
-
-          // and added to the pose computation point list
-          mPose.addPoint(mP[i]) ;
+          double x=0, y=0;
+          vpPixelMeterConversion::convertPoint(mcam, mcog[i], x, y)  ;
+          mP[i].set_x(x) ;
+          mP[i].set_y(y) ;
         }
-        // the pose structure has been updated
 
-        // the pose is now updated using the virtual visual servoing approach
-        // Dementhon or lagrange is no longuer necessary, pose at the
-        // previous iteration is sufficient
-        mPose.computePose(vpPose::VIRTUAL_VS, cmo);
-      }
-      catch(...){
-        vpERROR_TRACE("Error in tracking loop") ;
-        return false;
+        // and added to the pose computation point list
+        mPose.addPoint(mP[i]) ;
       }
+      // the pose structure has been updated
+
+      // the pose is now updated using the virtual visual servoing approach
+      // Dementhon or lagrange is no longuer necessary, pose at the
+      // previous iteration is sufficient
+      mPose.computePose(vpPose::VIRTUAL_VS, cMo);
 
       // Display with ogre
-      ogre.display(IC,cmo);
+      ogre.display(IC,cMo);
 
       // Wait so that the video does not go too fast
       vpTime::wait(15);
     }
     // Close the grabber
     grabber.close();
+    return 0;
   }
-  catch (Ogre::Exception& e)
-  {
-    std::cerr << "Exception:\n";
-    std::cerr << e.getFullDescription().c_str() << "\n";
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
     return 1;
   }
-  catch (...)
-  {
-    std::cerr << "Exception: " << "\n";
+  catch(...) {
+    std::cout << "Catch an exception " << std::endl;
     return 1;
   }
-
-  return EXIT_SUCCESS; 
 }
 #else // VISP_HAVE_OGRE && VISP_HAVE_DISPLAY
 int
 main()
 {  
-  std::cout << "You should install Ogre3D to run this example..." << std::endl;
+    std::cout << "You should install Ogre3D or a display (GTK or OpenCV...) to run this example..." << std::endl;
 }
 #endif
diff --git a/example/ogre-simulator/CMakeLists.txt b/example/ogre-simulator/CMakeLists.txt
index 518c2653..039f8bc7 100644
--- a/example/ogre-simulator/CMakeLists.txt
+++ b/example/ogre-simulator/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/parse-argv/CMakeLists.txt b/example/parse-argv/CMakeLists.txt
index 2dfe6617..ce4c2596 100644
--- a/example/parse-argv/CMakeLists.txt
+++ b/example/parse-argv/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/parse-argv/parse-argv1.cpp b/example/parse-argv/parse-argv1.cpp
index 7953412a..26349751 100644
--- a/example/parse-argv/parse-argv1.cpp
+++ b/example/parse-argv/parse-argv1.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: parse-argv1.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: parse-argv1.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -63,6 +63,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"d:f:i:h"
 
+void usage(const char *name, const char *badparam, int i_val, float f_val, double d_val);
+bool getOptions(int argc, const char **argv, int &i_val, float &f_val, double &d_val);
+
 /*!
 
   Print the program options.
@@ -118,18 +121,18 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv, int &i_val, float &f_val, double &d_val)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'd': d_val = atof(optarg); break;
-    case 'f': f_val = (float) atof(optarg); break;
-    case 'i': i_val = atoi(optarg); break;
+    case 'd': d_val = atof(optarg_); break;
+    case 'f': f_val = (float) atof(optarg_); break;
+    case 'i': i_val = atoi(optarg_); break;
     case 'h': usage(argv[0], NULL, i_val, f_val, d_val); return false; break;
 
     default:
-      usage(argv[0], optarg, i_val, f_val, d_val); return false; break;
+      usage(argv[0], optarg_, i_val, f_val, d_val); return false; break;
     }
   }
 
@@ -137,7 +140,7 @@ bool getOptions(int argc, const char **argv, int &i_val, float &f_val, double &d
     // standalone param or error
     usage(argv[0], NULL, i_val, f_val, d_val);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -147,32 +150,30 @@ bool getOptions(int argc, const char **argv, int &i_val, float &f_val, double &d
 int
 main(int argc, const char ** argv)
 {
-  using ::std::cout;
-  using ::std::endl;
+  try {
+    using ::std::cout;
+    using ::std::endl;
 
-  int    i_val = 3;
-  float  f_val = 3.14f;
-  double d_val = 3.1415;
+    int    i_val = 3;
+    float  f_val = 3.14f;
+    double d_val = 3.1415;
 
-  // Read the command line options
-  if (getOptions(argc, argv, i_val, f_val, d_val) == false) {
-    return (-1);
-  }
+    // Read the command line options
+    if (getOptions(argc, argv, i_val, f_val, d_val) == false) {
+      return (-1);
+    }
 
-  cout << "Your parameters: " << endl;
-  cout << "  Integer value: " << i_val << endl;
-  cout << "  Float   value: " << f_val << endl;
-  cout << "  Double  value: " << d_val << endl << endl;
-  cout << "Call  " << argv[0]
-       << " -h to see how to change these parameters." << endl;
+    cout << "Your parameters: " << endl;
+    cout << "  Integer value: " << i_val << endl;
+    cout << "  Float   value: " << f_val << endl;
+    cout << "  Double  value: " << d_val << endl << endl;
+    cout << "Call  " << argv[0]
+         << " -h to see how to change these parameters." << endl;
 
-  return 0;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
+  }
 }
-
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/example/parse-argv/parse-argv2.cpp b/example/parse-argv/parse-argv2.cpp
index 9d255320..a81c2fe8 100644
--- a/example/parse-argv/parse-argv2.cpp
+++ b/example/parse-argv/parse-argv2.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: parse-argv2.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: parse-argv2.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -63,37 +63,43 @@
 int
 main(int argc, const char ** argv)
 {
-  using ::std::cout;
-  using ::std::endl;
-
-  int    i_val = 3;
-  float  f_val = 3.14f;
-  double d_val = 3.1415;
-
-  vpParseArgv::vpArgvInfo argTable[] =
-  {
-    {"-integer", vpParseArgv::ARGV_INT, (char*) NULL, (char *) &i_val,
-     "An integer value."},
-    {"-float", vpParseArgv::ARGV_FLOAT, (char*) NULL, (char *) &f_val,
-     "A float value."},
-    {"-double", vpParseArgv::ARGV_DOUBLE, (char*) NULL, (char *) &d_val,
-     "A double value."},
-    {(char*) NULL, vpParseArgv::ARGV_END, (char*) NULL, (char*) NULL, (char*) NULL}
-  } ;
-
-  // Read the command line options
-  if(vpParseArgv::parse(&argc, argv, argTable, 0)) {
-    return (-1);
+  try {
+    using ::std::cout;
+    using ::std::endl;
+
+    int    i_val = 3;
+    float  f_val = 3.14f;
+    double d_val = 3.1415;
+
+    vpParseArgv::vpArgvInfo argTable[] =
+    {
+      {"-integer", vpParseArgv::ARGV_INT, (char*) NULL, (char *) &i_val,
+       "An integer value."},
+      {"-float", vpParseArgv::ARGV_FLOAT, (char*) NULL, (char *) &f_val,
+       "A float value."},
+      {"-double", vpParseArgv::ARGV_DOUBLE, (char*) NULL, (char *) &d_val,
+       "A double value."},
+      {(char*) NULL, vpParseArgv::ARGV_END, (char*) NULL, (char*) NULL, (char*) NULL}
+    } ;
+
+    // Read the command line options
+    if(vpParseArgv::parse(&argc, argv, argTable, 0)) {
+      return (-1);
+    }
+
+    cout << "Your parameters: " << endl;
+    cout << "  Integer value: " << i_val << endl;
+    cout << "  Float   value: " << f_val << endl;
+    cout << "  Double  value: " << d_val << endl << endl;
+    cout << "Call  " << argv[0]
+         << " -h to see how to change these parameters." << endl;
+
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
-
-  cout << "Your parameters: " << endl;
-  cout << "  Integer value: " << i_val << endl;
-  cout << "  Float   value: " << f_val << endl;
-  cout << "  Double  value: " << d_val << endl << endl;
-  cout << "Call  " << argv[0]
-       << " -h to see how to change these parameters." << endl;
-
-  return 0;
 }
 
 
diff --git a/example/pose-estimation/CMakeLists.txt b/example/pose-estimation/CMakeLists.txt
index d8ac1048..0433c102 100644
--- a/example/pose-estimation/CMakeLists.txt
+++ b/example/pose-estimation/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/pose-estimation/poseVirtualVS.cpp b/example/pose-estimation/poseVirtualVS.cpp
index 5226561e..69d2ee74 100644
--- a/example/pose-estimation/poseVirtualVS.cpp
+++ b/example/pose-estimation/poseVirtualVS.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: poseVirtualVS.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: poseVirtualVS.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -89,6 +89,12 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:p:hf:n:s:"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string ppath,
+     unsigned first, unsigned nimages, unsigned step);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath,
+                unsigned &first, unsigned &nimages, unsigned &step,
+                bool &click_allowed, bool &display);
+
 /*!
 
 Print the program options.
@@ -179,22 +185,22 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &pp
                 unsigned &first, unsigned &nimages, unsigned &step,
                 bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
-    case 'p': ppath = optarg; break;
-    case 'f': first = (unsigned) atoi(optarg); break;
-    case 'n': nimages = (unsigned) atoi(optarg); break;
-    case 's': step = (unsigned) atoi(optarg); break;
+    case 'i': ipath = optarg_; break;
+    case 'p': ppath = optarg_; break;
+    case 'f': first = (unsigned) atoi(optarg_); break;
+    case 'n': nimages = (unsigned) atoi(optarg_); break;
+    case 's': step = (unsigned) atoi(optarg_); break;
     case 'h': usage(argv[0], NULL, ipath, ppath, first, nimages, step); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, ppath, first, nimages, step);
+      usage(argv[0], optarg_, ipath, ppath, first, nimages, step);
       return false; break;
     }
   }
@@ -203,7 +209,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &pp
     // standalone param or error
     usage(argv[0], NULL, ipath, ppath, first, nimages, step);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -216,177 +222,177 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &pp
 int
 main(int argc, const char** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string opt_ppath;
-  std::string dirname;
-  std::string filename;
-  unsigned opt_first = 0;
-  unsigned opt_nimages = 80;
-  unsigned opt_step = 1;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-
-  int i ;
-
-  std::cout <<  "-------------------------------------------------------" << std::endl ;
-  std::cout <<  "  poseVirtualVS.cpp" <<std::endl << std::endl ;
-
-  std::cout <<  "  Example of dots tracking in an image sequence and pose computation" << std::endl ;
-  std::cout <<  "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_ppath, opt_first, opt_nimages, opt_step, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string opt_ppath;
+    std::string dirname;
+    std::string filename;
+    unsigned opt_first = 0;
+    unsigned opt_nimages = 80;
+    unsigned opt_step = 1;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+
+    int i ;
+
+    std::cout <<  "-------------------------------------------------------" << std::endl ;
+    std::cout <<  "  poseVirtualVS.cpp" <<std::endl << std::endl ;
+
+    std::cout <<  "  Example of dots tracking in an image sequence and pose computation" << std::endl ;
+    std::cout <<  "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_ppath, opt_first, opt_nimages, opt_step, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (opt_ipath.empty() && opt_ppath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (opt_ipath.empty() && opt_ppath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
+    }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty()){
+      usage(argv[0], NULL, ipath, opt_ppath, opt_first, opt_nimages, opt_step);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl
+                << "  Use -p <personal image path> option if you want to "<< std::endl
+                << "  use personal images" <<std::endl << std::endl;
+      exit(-1);
     }
-  }
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty()){
-    usage(argv[0], NULL, ipath, opt_ppath, opt_first, opt_nimages, opt_step);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl
-              << "  Use -p <personal image path> option if you want to "<< std::endl
-              << "  use personal images" <<std::endl << std::endl;
-    exit(-1);
-  }
 
 
 
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  vpImage<unsigned char> I ;
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    vpImage<unsigned char> I ;
 
-  unsigned iter = opt_first ;
-  std::ostringstream s;
-  char cfilename[FILENAME_MAX];
+    unsigned iter = opt_first ;
+    std::ostringstream s;
+    char cfilename[FILENAME_MAX];
 
-  if (opt_ppath.empty()){
+    if (opt_ppath.empty()){
 
-    // Warning :
-    // the image sequence is not provided with the ViSP package
-    // therefore the program will return you an error :
-    //  !!    vpImageIoPnm.cpp: readPGM(#210) :couldn't read file /ViSP-images/cube/image.0001.pgm
-    //  !!    poseExample.cpp: main(#95) :Error while reading the image
-    //  terminate called after throwing an instance of 'vpImageException'
-    //
-    //  The sequence is available on the visp www site
-    //  http://www.irisa.fr/lagadic/visp/visp.html
-    //  in the download section. It is named "ViSP-images-x.y.z.tar.gz"
+      // Warning :
+      // the image sequence is not provided with the ViSP package
+      // therefore the program will return you an error :
+      //  !!    vpImageIoPnm.cpp: readPGM(#210) :couldn't read file /ViSP-images/cube/image.0001.pgm
+      //  !!    poseExample.cpp: main(#95) :Error while reading the image
+      //  terminate called after throwing an instance of 'vpImageException'
+      //
+      //  The sequence is available on the visp www site
+      //  http://www.irisa.fr/lagadic/visp/visp.html
+      //  in the download section. It is named "ViSP-images-x.y.z.tar.gz"
 
-    // directory name
-    dirname = ipath +  vpIoTools::path("/ViSP-images/cube/");
+      // directory name
+      dirname = ipath +  vpIoTools::path("/ViSP-images/cube/");
 
 
-    // Build the name of the image file
+      // Build the name of the image file
 
-    s.setf(std::ios::right, std::ios::adjustfield);
-    s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-    filename = dirname + s.str();
-  }
-  else {
+      s.setf(std::ios::right, std::ios::adjustfield);
+      s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+      filename = dirname + s.str();
+    }
+    else {
 
-    sprintf(cfilename, opt_ppath.c_str(), iter) ;
-    filename = cfilename;
-  }
+      sprintf(cfilename, opt_ppath.c_str(), iter) ;
+      filename = cfilename;
+    }
 
-  // define the vpDot structure, here 4 dots will tracked
-  vpDot d[4] ;
+    // define the vpDot structure, here 4 dots will tracked
+    vpDot d[4] ;
 
-  for (i=0 ; i < 4 ; i++)
-  {
-    // by using setGraphics, we request to see the all the pixel of the dot
-    // in green on the screen.
-    // It uses the overlay image plane.
-    // The default of this setting is that it is time consumming
+    for (i=0 ; i < 4 ; i++)
+    {
+      // by using setGraphics, we request to see the all the pixel of the dot
+      // in green on the screen.
+      // It uses the overlay image plane.
+      // The default of this setting is that it is time consumming
 
-    if (opt_display) {
-      d[i].setGraphics(true) ;
-    }
-    else {
-      d[i].setGraphics(false) ;
+      if (opt_display) {
+        d[i].setGraphics(true) ;
+      }
+      else {
+        d[i].setGraphics(false) ;
+      }
     }
-  }
 
-  // Read the PGM image named "s" on the disk, and put the bitmap into the
-  // image structure I.
-  // I is initialized to the correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    vpImageIo::read(I,filename) ;
-  }
-  catch(...)
-  {
-    // an exception is throwned if an exception from readPGM has been catched
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    if (opt_ppath.empty()) {
-      std::cerr << std::endl
-                << "ERROR:" << std::endl;
-      std::cerr << "  Cannot read " << filename << std::endl;
-      std::cerr << "  Check your -i " << ipath << " option, " << std::endl
-                << "  or VISP_INPUT_IMAGE_PATH environment variable"
-                << std::endl;
-    }
-    else {
-      std::cerr << std::endl
-                << "ERROR:" << std::endl;
-      std::cerr << "  Cannot read " << filename << std::endl;
-      std::cerr << "  or your -p " << opt_ppath << " option " <<std::endl
-                << std::endl;
+    // Read the PGM image named "s" on the disk, and put the bitmap into the
+    // image structure I.
+    // I is initialized to the correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
+    try{
+      vpImageIo::read(I,filename) ;
     }
-    exit(-1);
+    catch(...)
+    {
+      // an exception is throwned if an exception from readPGM has been catched
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      if (opt_ppath.empty()) {
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot read " << filename << std::endl;
+        std::cerr << "  Check your -i " << ipath << " option, " << std::endl
+                  << "  or VISP_INPUT_IMAGE_PATH environment variable"
+                  << std::endl;
+      }
+      else {
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot read " << filename << std::endl;
+        std::cerr << "  or your -p " << opt_ppath << " option " <<std::endl
+                  << std::endl;
+      }
+      exit(-1);
 
-  }
+    }
 
-  // We open a window using either the X11 or GTK or GDI window manager
-  // it will be located in 100,100 and titled "tracking using vpDot"
-  // its size is automatically defined by the image (I) size
+    // We open a window using either the X11 or GTK or GDI window manager
+    // it will be located in 100,100 and titled "tracking using vpDot"
+    // its size is automatically defined by the image (I) size
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
-  if (opt_display) {
-    try{
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display.init(I,100,100,"tracking using vpDot");
       // display the image
@@ -397,20 +403,12 @@ main(int argc, const char** argv)
       vpDisplay::display(I) ;
       //Flush the display
       vpDisplay::flush(I) ;
-
-    }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      return(-1) ;
     }
-  }
 
-  vpImagePoint cog[4]; // Center of gravity of the dot
-  try{
+    vpImagePoint cog[4]; // Center of gravity of the dot
     if (opt_display && opt_click_allowed) {
       // dot coordinates (u,v) = (column,row)
-      std::cout << "Click the four white dots on the object corner clockwise" 
+      std::cout << "Click the four white dots on the object corner clockwise"
                 << std::endl  ;
       for (i=0 ; i < 4 ; i++)
       {
@@ -460,116 +458,109 @@ main(int argc, const char** argv)
       d[3].track(I, cog[3]);
       vpDisplay::flush(I) ;
     }
-  }
-  catch(...)
-  {
-    vpERROR_TRACE("Error in tracking initialization ") ;
-    return(-1) ;
-  }
 
-  if (opt_display)
-  {
+    if (opt_display)
+    {
+
+      // display a red cross (size 10) in the image at the dot center
+      // of gravity location
+      //
+      // WARNING
+      // in the vpDisplay class member's when pixel coordinates
+      // are considered the first element is the row index and the second
+      // is the column index:
+      //   vpDisplay::displayCross(Image, row index, column index, size, color)
+      //   therefore u and v are inverted wrt to the vpDot specification
+      // Alternatively, to avoid this problem another set of member have
+      // been defined in the vpDisplay class.
+      // If the method name is postfixe with _uv the specification is :
+      //   vpDisplay::displayCross_uv(Image, column index, row index, size, color)
 
-    // display a red cross (size 10) in the image at the dot center
-    // of gravity location
+      for (i=0 ; i < 4 ; i++)
+        vpDisplay::displayCross(I, cog[i], 10, vpColor::red) ;
+
+      // flush the X11 buffer
+      vpDisplay::flush(I) ;
+    }
+
+    // --------------------------------------------------------
+    // Now wil compute the pose
     //
-    // WARNING
-    // in the vpDisplay class member's when pixel coordinates
-    // are considered the first element is the row index and the second
-    // is the column index:
-    //   vpDisplay::displayCross(Image, row index, column index, size, color)
-    //   therefore u and v are inverted wrt to the vpDot specification
-    // Alternatively, to avoid this problem another set of member have
-    // been defined in the vpDisplay class.
-    // If the method name is postfixe with _uv the specification is :
-    //   vpDisplay::displayCross_uv(Image, column index, row index, size, color)
 
+    // The pose will be contained in an homogeneous matrix cMo
+    vpHomogeneousMatrix cMo ;
+
+
+    // We need a structure that content both the 3D coordinates of the point
+    // in the object frame and the 2D coordinates of the point expressed in meter
+    // the vpPoint class is ok for that
+    vpPoint P[4]  ;
+
+    // The vpPose class mainly contents a list of vpPoint (that is (X,Y,Z, x, y) )
+    vpPose pose ;
+    //  the list of point is cleared (if that's not done before)
+    pose.clearPoint() ;
+
+    // we set the 3D points coordinates (in meter !) in the object/world frame
+    double L=0.04 ;
+    P[0].setWorldCoordinates(-L,-L, 0 ) ; // (X,Y,Z)
+    P[1].setWorldCoordinates(L,-L, 0 ) ;
+    P[2].setWorldCoordinates(L,L, 0 ) ;
+    P[3].setWorldCoordinates(-L,L, 0 ) ;
+
+
+    // set the camera intrinsic parameters
+    // see more details about the model in vpCameraParameters
+    double px = 600 ;
+    double py = 600 ;
+    double u0 = 192 ;
+    double v0 = 144 ;
+    vpCameraParameters cam(px,py,u0,v0) ;
+
+    // pixel-> meter conversion
     for (i=0 ; i < 4 ; i++)
-      vpDisplay::displayCross(I, cog[i], 10, vpColor::red) ;
+    {
+      // u[i]. v[i] are expressed in pixel
+      // conversion in meter is achieved using
+      // x = (u-u0)/px
+      // y = (v-v0)/py
+      // where px, py, u0, v0 are the intrinsic camera parameters
+      double x=0, y=0;
+      vpPixelMeterConversion::convertPoint(cam, cog[i], x,y)  ;
+      P[i].set_x(x) ;
+      P[i].set_y(y) ;
+    }
 
-    // flush the X11 buffer
-    vpDisplay::flush(I) ;
-  }
 
-  // --------------------------------------------------------
-  // Now wil compute the pose
-  //
-
-  // The pose will be contained in an homogeneous matrix cMo
-  vpHomogeneousMatrix cMo ;
-
-
-  // We need a structure that content both the 3D coordinates of the point
-  // in the object frame and the 2D coordinates of the point expressed in meter
-  // the vpPoint class is ok for that
-  vpPoint P[4]  ;
-
-  // The vpPose class mainly contents a list of vpPoint (that is (X,Y,Z, x, y) )
-  vpPose pose ;
-  //  the list of point is cleared (if that's not done before)
-  pose.clearPoint() ;
-
-  // we set the 3D points coordinates (in meter !) in the object/world frame
-  double L=0.04 ;
-  P[0].setWorldCoordinates(-L,-L, 0 ) ; // (X,Y,Z)
-  P[1].setWorldCoordinates(L,-L, 0 ) ;
-  P[2].setWorldCoordinates(L,L, 0 ) ;
-  P[3].setWorldCoordinates(-L,L, 0 ) ;
-
-
-  // set the camera intrinsic parameters
-  // see more details about the model in vpCameraParameters
-  double px = 600 ;
-  double py = 600 ;
-  double u0 = 192 ;
-  double v0 = 144 ;
-  vpCameraParameters cam(px,py,u0,v0) ;
-
-  // pixel-> meter conversion
-  for (i=0 ; i < 4 ; i++)
-  {
-    // u[i]. v[i] are expressed in pixel
-    // conversion in meter is achieved using
-    // x = (u-u0)/px
-    // y = (v-v0)/py
-    // where px, py, u0, v0 are the intrinsic camera parameters
-    double x=0, y=0;
-    vpPixelMeterConversion::convertPoint(cam, cog[i], x,y)  ;
-    P[i].set_x(x) ;
-    P[i].set_y(y) ;
-  }
+    // The pose structure is build, we put in the point list the set of point
+    // here both 2D and 3D world coordinates are known
+    for (i=0 ; i < 4 ; i++)
+    {
+      pose.addPoint(P[i]) ; // and added to the pose computation point list
+    }
 
+    // compute the initial pose using Dementhon method followed by a non linear
+    // minimisation method
+
+    // Pose by Lagrange it provides an initialization of the pose
+    pose.computePose(vpPose::LAGRANGE, cMo) ;
+    // the pose is now refined using the virtual visual servoing approach
+    // Warning: cMo needs to be initialized otherwise it may  diverge
+    pose.computePose(vpPose::VIRTUAL_VS, cMo) ;
+    if( opt_display ){
+      // display the compute pose
+      pose.display(I,cMo,cam, 0.05, vpColor::red) ;
+      vpDisplay::flush(I) ;
+    }
 
-  // The pose structure is build, we put in the point list the set of point
-  // here both 2D and 3D world coordinates are known
-  for (i=0 ; i < 4 ; i++)
-  {
-    pose.addPoint(P[i]) ; // and added to the pose computation point list
-  }
+    // Covariance Matrix Computation
+    // Uncomment if you want to compute the covariance matrix.
+    // pose.setCovarianceComputation(true); //Important if you want tracker.getCovarianceMatrix() to work.
 
-  // compute the initial pose using Dementhon method followed by a non linear
-  // minimisation method
-
-  // Pose by Lagrange it provides an initialization of the pose
-  pose.computePose(vpPose::LAGRANGE, cMo) ;
-  // the pose is now refined using the virtual visual servoing approach
-  // Warning: cMo needs to be initialized otherwise it may  diverge
-  pose.computePose(vpPose::VIRTUAL_VS, cMo) ;
-  if( opt_display ){
-    // display the compute pose
-    pose.display(I,cMo,cam, 0.05, vpColor::red) ;
-    vpDisplay::flush(I) ;
-  }
-  
-  // Covariance Matrix Computation
-  // Uncomment if you want to compute the covariance matrix.
-  // pose.setCovarianceComputation(true); //Important if you want tracker.getCovarianceMatrix() to work. 
-
-  unsigned niter = 0;
-  // this is the loop over the image sequence
-  while (iter < opt_nimages)
-  {
-    try {
+    unsigned niter = 0;
+    // this is the loop over the image sequence
+    while (iter < opt_nimages)
+    {
       // set the new image name
 
       if (opt_ppath.empty()){
@@ -627,19 +618,21 @@ main(int argc, const char** argv)
 
         vpDisplay::flush(I) ;
       }
-      
+
       // Covariance Matrix Display
-      // Uncomment if you want to print the covariance matrix. 
+      // Uncomment if you want to print the covariance matrix.
       // Make sure pose.setCovarianceComputation(true) has been called (uncomment below).
       // std::cout << pose.getCovarianceMatrix() << std::endl << std::endl;
-      
+
       niter++ ;
+
+      iter += opt_step ;
     }
-    catch(...){
-      vpERROR_TRACE("Error in tracking loop") ;
-      return(-1) ;
-    }
-    iter += opt_step ;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
diff --git a/example/robot-simulator/afma6/CMakeLists.txt b/example/robot-simulator/afma6/CMakeLists.txt
index 01412494..78d46138 100644
--- a/example/robot-simulator/afma6/CMakeLists.txt
+++ b/example/robot-simulator/afma6/CMakeLists.txt
@@ -3,7 +3,7 @@
 # $Id: CMakeLists.txt 2457 2010-01-07 10:41:18Z nmelchio $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/robot-simulator/afma6/servoSimuAfma6FourPoints2DCamVelocity.cpp b/example/robot-simulator/afma6/servoSimuAfma6FourPoints2DCamVelocity.cpp
index 3845b4d3..f4544d18 100644
--- a/example/robot-simulator/afma6/servoSimuAfma6FourPoints2DCamVelocity.cpp
+++ b/example/robot-simulator/afma6/servoSimuAfma6FourPoints2DCamVelocity.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimuFourPoints2DPolarCamVelocityDisplay.cpp 2503 2010-02-16 18:55:01Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -60,7 +60,7 @@
 #include <visp/vpDebug.h>
 #include <visp/vpConfig.h>
 
-#if (defined(WIN32) || defined(VISP_HAVE_PTHREAD)) && (defined (VISP_HAVE_X11) || defined(VISP_HAVE_OPENCV) || defined(VISP_HAVE_GDI))
+#if (defined(_WIN32) || defined(VISP_HAVE_PTHREAD)) && (defined (VISP_HAVE_X11) || defined(VISP_HAVE_OPENCV) || defined(VISP_HAVE_GDI))
 
 // We need to use threading capabilities. Thus on Unix-like
 // platforms, the libpthread third-party library need to be
@@ -88,6 +88,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdh"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display);
+
 /*!
 
 Print the program options.
@@ -137,9 +140,9 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
@@ -147,7 +150,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -156,7 +159,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -166,192 +169,192 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 int
 main(int argc, const char ** argv)
 {
-  bool opt_click_allowed = true;
-  bool opt_display = true;
+  try {
+    bool opt_click_allowed = true;
+    bool opt_display = true;
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+    // Read the command line options
+    if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  // We open two displays, one for the internal camera view, the other one for
-  // the external view, using either X11, GTK or GDI.
+    // We open two displays, one for the internal camera view, the other one for
+    // the external view, using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX displayInt;
+    vpDisplayX displayInt;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI displayInt;
+    vpDisplayGDI displayInt;
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV displayInt;
+    vpDisplayOpenCV displayInt;
 #endif
 
-  vpImage<unsigned char> Iint(480, 640, 255);
+    vpImage<unsigned char> Iint(480, 640, 255);
 
-  if (opt_display) {
-    // open a display for the visualization
-    displayInt.init(Iint,700,0, "Internal view") ;
-  }
+    if (opt_display) {
+      // open a display for the visualization
+      displayInt.init(Iint,700,0, "Internal view") ;
+    }
 
-  int i;
-  vpServo task;
-
-  std::cout << std::endl ;
-  std::cout << "----------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Eye-in-hand task control, articular velocity are computed" 
-            << std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task : servo 4 points " << std::endl ;
-  std::cout << "----------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(-0.05,-0.05,0.7,
-                          vpMath::rad(10),  vpMath::rad(10),  vpMath::rad(-30));
-
-  // sets the point coordinates in the object frame
-  vpPoint point[4] ;
-  point[0].setWorldCoordinates(-0.045,-0.045,0) ;
-  point[3].setWorldCoordinates(-0.045,0.045,0) ;
-  point[2].setWorldCoordinates(0.045,0.045,0) ;
-  point[1].setWorldCoordinates(0.045,-0.045,0) ;
-
-  // computes the point coordinates in the camera frame and its 2D coordinates
-  for (i = 0 ; i < 4 ; i++)
-    point[i].track(cMo) ;
-
-  // sets the desired position of the point
-  vpFeaturePoint p[4] ;
-  for (i = 0 ; i < 4 ; i++)
-    vpFeatureBuilder::create(p[i],point[i])  ;  //retrieve x,y and Z of the vpPoint structure
-  
-  // sets the desired position of the feature point s*
-  vpFeaturePoint pd[4] ;
-  
-  // Desired pose
-  vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,0.0,0.8,vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)));
-  
-  // Projection of the points
-  for (int i = 0 ; i < 4 ; i++)
-    point[i].track(cdMo);
-  
-  for (int i = 0 ; i < 4 ; i++)
-    vpFeatureBuilder::create(pd[i], point[i]);
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - articular velocity are computed
-  task.setServo(vpServo::EYEINHAND_CAMERA);
-  task.setInteractionMatrixType(vpServo::DESIRED) ;
-
-  // we want to see a point on a point
-  for (i = 0 ; i < 4 ; i++)
-    task.addFeature(p[i],pd[i]) ;
-
-  // set the gain
-  task.setLambda(0.8) ;
-  
-  // Declaration of the robot
-  vpSimulatorAfma6 robot(opt_display);
-  
-  // Initialise the robot and especially the camera
-  robot.init(vpAfma6::TOOL_CCMOP, vpCameraParameters::perspectiveProjWithoutDistortion);
-  robot.setRobotState(vpRobot::STATE_VELOCITY_CONTROL);
-  
-  // Initialise the object for the display part*/
-  robot.initScene(vpWireFrameSimulator::PLATE, vpWireFrameSimulator::D_STANDARD);
-  
-  // Initialise the position of the object relative to the pose of the robot's camera
-  robot.initialiseObjectRelativeToCamera(cMo);
-  
-  // Set the desired position (for the displaypart)
-  robot.setDesiredCameraPosition(cdMo);
-  
-  // Get the internal robot's camera parameters
-  vpCameraParameters cam;
-  robot.getCameraParameters(cam,Iint);
-  
-  if (opt_display)
-  { 
-    //Get the internal view
-	  vpDisplay::display(Iint);
-    robot.getInternalView(Iint);
-    vpDisplay::flush(Iint);
-  }
+    vpServo task;
+
+    std::cout << std::endl ;
+    std::cout << "----------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Eye-in-hand task control, articular velocity are computed"
+              << std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task : servo 4 points " << std::endl ;
+    std::cout << "----------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(-0.05,-0.05,0.7,
+                            vpMath::rad(10),  vpMath::rad(10),  vpMath::rad(-30));
+
+    // sets the point coordinates in the object frame
+    vpPoint point[4] ;
+    point[0].setWorldCoordinates(-0.045,-0.045,0) ;
+    point[3].setWorldCoordinates(-0.045,0.045,0) ;
+    point[2].setWorldCoordinates(0.045,0.045,0) ;
+    point[1].setWorldCoordinates(0.045,-0.045,0) ;
+
+    // computes the point coordinates in the camera frame and its 2D coordinates
+    for (unsigned int i = 0 ; i < 4 ; i++)
+      point[i].track(cMo) ;
 
-  // Display task information
-  task.print() ;
+    // sets the desired position of the point
+    vpFeaturePoint p[4] ;
+    for (unsigned int i = 0 ; i < 4 ; i++)
+      vpFeatureBuilder::create(p[i],point[i])  ;  //retrieve x,y and Z of the vpPoint structure
 
-  unsigned int iter=0 ;
-  vpTRACE("\t loop") ;
-  while(iter++<500)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
+    // sets the desired position of the feature point s*
+    vpFeaturePoint pd[4] ;
 
-    // Get the Time at the beginning of the loop
-    double t = vpTime::measureTimeMs();
+    // Desired pose
+    vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,0.0,0.8,vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)));
 
-    // Get the current pose of the camera
-    cMo = robot.get_cMo();
+    // Projection of the points
+    for (unsigned int  i = 0 ; i < 4 ; i++)
+      point[i].track(cdMo);
 
-    if (iter==1) {
-      std::cout <<"Initial robot position with respect to the object frame:\n";
-      cMo.print();
-    }
+    for (unsigned int  i = 0 ; i < 4 ; i++)
+      vpFeatureBuilder::create(pd[i], point[i]);
 
-    // new point position
-    for (i = 0 ; i < 4 ; i++)
-    {
-      point[i].track(cMo) ;
-      // retrieve x,y and Z of the vpPoint structure
-      try {
-        vpFeatureBuilder::create(p[i],point[i])  ;
-      }
-      catch(...)
-      {
-        break;
-      }
-    }
+    // define the task
+    // - we want an eye-in-hand control law
+    // - articular velocity are computed
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::DESIRED) ;
+
+    // we want to see a point on a point
+    for (unsigned int i = 0 ; i < 4 ; i++)
+      task.addFeature(p[i],pd[i]) ;
+
+    // set the gain
+    task.setLambda(0.8) ;
+
+    // Declaration of the robot
+    vpSimulatorAfma6 robot(opt_display);
+
+    // Initialise the robot and especially the camera
+    robot.init(vpAfma6::TOOL_CCMOP, vpCameraParameters::perspectiveProjWithoutDistortion);
+    robot.setRobotState(vpRobot::STATE_VELOCITY_CONTROL);
+
+    // Initialise the object for the display part*/
+    robot.initScene(vpWireFrameSimulator::PLATE, vpWireFrameSimulator::D_STANDARD);
+
+    // Initialise the position of the object relative to the pose of the robot's camera
+    robot.initialiseObjectRelativeToCamera(cMo);
+
+    // Set the desired position (for the displaypart)
+    robot.setDesiredCameraPosition(cdMo);
+
+    // Get the internal robot's camera parameters
+    vpCameraParameters cam;
+    robot.getCameraParameters(cam,Iint);
 
     if (opt_display)
     {
-      // Get the internal view and display it
-      vpDisplay::display(Iint) ;
+      //Get the internal view
+      vpDisplay::display(Iint);
       robot.getInternalView(Iint);
       vpDisplay::flush(Iint);
     }
 
-    if (opt_display && opt_click_allowed && iter == 1)
+    // Display task information
+    task.print() ;
+
+    unsigned int iter=0 ;
+    vpTRACE("\t loop") ;
+    while(iter++<500)
     {
-      // suppressed for automate test
-      std::cout << "Click in the internal view window to continue..." << std::endl;
-      vpDisplay::getClick(Iint) ;
-    }
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
 
-    // compute the control law
-    v = task.computeControlLaw() ;
+      // Get the Time at the beginning of the loop
+      double t = vpTime::measureTimeMs();
 
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+      // Get the current pose of the camera
+      cMo = robot.get_cMo();
 
-    std::cout << "|| s - s* || " << ( task.getError() ).sumSquare() <<std::endl ;
+      if (iter==1) {
+        std::cout <<"Initial robot position with respect to the object frame:\n";
+        cMo.print();
+      }
 
-    // The main loop has a duration of 10 ms at minimum
-    vpTime::wait(t,10);
-  }
+      // new point position
+      for (unsigned int i = 0 ; i < 4 ; i++)
+      {
+        point[i].track(cMo) ;
+        // retrieve x,y and Z of the vpPoint structure
+        vpFeatureBuilder::create(p[i],point[i])  ;
+      }
+
+      if (opt_display)
+      {
+        // Get the internal view and display it
+        vpDisplay::display(Iint) ;
+        robot.getInternalView(Iint);
+        vpDisplay::flush(Iint);
+      }
+
+      if (opt_display && opt_click_allowed && iter == 1)
+      {
+        // suppressed for automate test
+        std::cout << "Click in the internal view window to continue..." << std::endl;
+        vpDisplay::getClick(Iint) ;
+      }
+
+      // compute the control law
+      v = task.computeControlLaw() ;
+
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || " << ( task.getError() ).sumSquare() <<std::endl ;
+
+      // The main loop has a duration of 10 ms at minimum
+      vpTime::wait(t,10);
+    }
 
-  // Display task information
-  task.print() ;
-  task.kill();
+    // Display task information
+    task.print() ;
+    task.kill();
 
-  std::cout <<"Final robot position with respect to the object frame:\n";
-  cMo.print();
+    std::cout <<"Final robot position with respect to the object frame:\n";
+    cMo.print();
 
-  if (opt_display && opt_click_allowed) 
-  {
-    // suppressed for automate test
-    std::cout << "Click in the internal view window to end..." << std::endl;
-    vpDisplay::getClick(Iint) ;
+    if (opt_display && opt_click_allowed)
+    {
+      // suppressed for automate test
+      std::cout << "Click in the internal view window to end..." << std::endl;
+      vpDisplay::getClick(Iint) ;
+    }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
diff --git a/example/robot-simulator/camera/CMakeLists.txt b/example/robot-simulator/camera/CMakeLists.txt
index 04b7afba..5f94a554 100644
--- a/example/robot-simulator/camera/CMakeLists.txt
+++ b/example/robot-simulator/camera/CMakeLists.txt
@@ -3,7 +3,7 @@
 # $Id: CMakeLists.txt 2457 2010-01-07 10:41:18Z nmelchio $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/robot-simulator/camera/servoSimu3D_cMcd_CamVelocity.cpp b/example/robot-simulator/camera/servoSimu3D_cMcd_CamVelocity.cpp
index 5057531a..2ee501ac 100644
--- a/example/robot-simulator/camera/servoSimu3D_cMcd_CamVelocity.cpp
+++ b/example/robot-simulator/camera/servoSimu3D_cMcd_CamVelocity.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimu3D_cMcd_CamVelocity.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -73,6 +73,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -113,15 +116,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -130,7 +133,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -140,155 +143,162 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  // Log file creation in /tmp/$USERNAME/log.dat
-  // This file contains by line:
-  // - the 6 computed camera velocities (m/s, rad/s) to achieve the task
-  // - the 6 values of s - s*
-  std::string username;
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Create a log filename to save velocities...
-  std::string logdirname;
-#ifdef WIN32
-  logdirname ="C:/temp/" + username;
+    // Log file creation in /tmp/$USERNAME/log.dat
+    // This file contains by line:
+    // - the 6 computed camera velocities (m/s, rad/s) to achieve the task
+    // - the 6 values of s - s*
+    std::string username;
+    // Get the user login name
+    vpIoTools::getUserName(username);
+
+    // Create a log filename to save velocities...
+    std::string logdirname;
+#if defined(_WIN32)
+    logdirname ="C:/temp/" + username;
 #else
-  logdirname ="/tmp/" + username;
+    logdirname ="/tmp/" + username;
 #endif
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(logdirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(logdirname);
-    }
-    catch (...) {
-      std::cerr << std::endl
-                << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << logdirname << std::endl;
-      exit(-1);
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(logdirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(logdirname);
+      }
+      catch (...) {
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << logdirname << std::endl;
+        exit(-1);
+      }
     }
-  }
-  std::string logfilename;
-  logfilename = logdirname + "/log.dat";
-
-  // Open the log file name
-  std::ofstream flog(logfilename.c_str());
-
-  vpServo task ;
-  vpSimulatorCamera robot ;
-
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Eye-in-hand task control, velocity computed in the camera frame" << std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task :  3D visual servoing " << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // Sets the initial camera location
-  vpPoseVector c_r_o(// Translation tx,ty,tz
-                     0.1, 0.2, 2,
-                     // ThetaU rotation
-                     vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50) ) ;
-
-  // From the camera pose build the corresponding homogeneous matrix
-  vpHomogeneousMatrix cMo(c_r_o) ;
-
-  // Set the robot initial position
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo; // Compute the position of the object in the world frame
-
-  // Sets the desired camera location
-  vpPoseVector cd_r_o(// Translation tx,ty,tz
-                      0, 0, 1,
-                      // ThetaU rotation
-                      vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
-
-  // From the camera desired pose build the corresponding homogeneous matrix
-  vpHomogeneousMatrix cdMo(cd_r_o) ;
-
-  // Compute the transformation from the initial camera position to the desired one
-  vpHomogeneousMatrix cMcd ;
-  cMcd = cMo*cdMo.inverse() ;
-  
-  // Build the 3D translation feature: ctc*
-  vpFeatureTranslation t(vpFeatureTranslation::cMcd) ;
-  t.buildFrom(cMcd) ;
-
-  // Build the 3D rotation feature: thetaU_cRc*
-  vpFeatureThetaU tu(vpFeatureThetaU::cRcd); // current feature
-  tu.buildFrom(cMcd) ;
-
-  // Sets the desired rotation (always zero !)  since s is the
-  // rotation that the camera has to achieve. Here s* = (0, 0)^T
-  vpFeatureTranslation td(vpFeatureTranslation::cMcd) ;
-  vpFeatureThetaU tud(vpFeatureThetaU::cRcd); // desired feature
-
-  // Define the task
-  // - we want an eye-in-hand control law
-  // - the robot is controlled in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
-  // - we use here the interaction matrix computed with the current
-  //   features
-  task.setInteractionMatrixType(vpServo::CURRENT);
-
-  // Add the current and desired visual features
-  task.addFeature(t,td) ;    // 3D translation
-  task.addFeature(tu,tud) ;  // 3D rotation theta u
-  
-  // - set the constant gain to 1.0
-  task.setLambda(1) ;
-
-  // Display task information
-  task.print() ;
+    std::string logfilename;
+    logfilename = logdirname + "/log.dat";
+
+    // Open the log file name
+    std::ofstream flog(logfilename.c_str());
+
+    vpServo task ;
+    vpSimulatorCamera robot ;
+
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Eye-in-hand task control, velocity computed in the camera frame" << std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task :  3D visual servoing " << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // Sets the initial camera location
+    vpPoseVector c_r_o(// Translation tx,ty,tz
+                       0.1, 0.2, 2,
+                       // ThetaU rotation
+                       vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50) ) ;
+
+    // From the camera pose build the corresponding homogeneous matrix
+    vpHomogeneousMatrix cMo(c_r_o) ;
+
+    // Set the robot initial position
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc) ;
+    wMo = wMc * cMo; // Compute the position of the object in the world frame
 
-  unsigned int iter=0 ;
-  // Start the visual servoing loop. We stop the servo after 200 iterations
-  while(iter++ < 200) {
-    std::cout << "------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
+    // Sets the desired camera location
+    vpPoseVector cd_r_o(// Translation tx,ty,tz
+                        0, 0, 1,
+                        // ThetaU rotation
+                        vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
 
-    // get the robot position
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    // From the camera desired pose build the corresponding homogeneous matrix
+    vpHomogeneousMatrix cdMo(cd_r_o) ;
 
-    // new displacement to achieve
+    // Compute the transformation from the initial camera position to the desired one
+    vpHomogeneousMatrix cMcd ;
     cMcd = cMo*cdMo.inverse() ;
 
-    // Update the current visual features
+    // Build the 3D translation feature: ctc*
+    vpFeatureTranslation t(vpFeatureTranslation::cMcd) ;
     t.buildFrom(cMcd) ;
+
+    // Build the 3D rotation feature: thetaU_cRc*
+    vpFeatureThetaU tu(vpFeatureThetaU::cRcd); // current feature
     tu.buildFrom(cMcd) ;
 
-    // Compute the control law
-    v = task.computeControlLaw() ;
+    // Sets the desired rotation (always zero !)  since s is the
+    // rotation that the camera has to achieve. Here s* = (0, 0)^T
+    vpFeatureTranslation td(vpFeatureTranslation::cMcd) ;
+    vpFeatureThetaU tud(vpFeatureThetaU::cRcd); // desired feature
+
+    // Define the task
+    // - we want an eye-in-hand control law
+    // - the robot is controlled in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
+    // - we use here the interaction matrix computed with the current
+    //   features
+    task.setInteractionMatrixType(vpServo::CURRENT);
+
+    // Add the current and desired visual features
+    task.addFeature(t,td) ;    // 3D translation
+    task.addFeature(tu,tud) ;  // 3D rotation theta u
+
+    // - set the constant gain to 1.0
+    task.setLambda(1) ;
 
     // Display task information
-    if (iter==1) task.print() ;
+    task.print() ;
 
-    // Send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    unsigned int iter=0 ;
+    // Start the visual servoing loop. We stop the servo after 200 iterations
+    while(iter++ < 200) {
+      std::cout << "------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
 
-    // Retrieve the error 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
 
-    // Save log
-    flog << v.t() << " " << ( task.getError() ).t() << std::endl;
-  }
-  // Display task information
-  task.print() ;
+      // new displacement to achieve
+      cMcd = cMo*cdMo.inverse() ;
+
+      // Update the current visual features
+      t.buildFrom(cMcd) ;
+      tu.buildFrom(cMcd) ;
+
+      // Compute the control law
+      v = task.computeControlLaw() ;
+
+      // Display task information
+      if (iter==1) task.print() ;
+
+      // Send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
 
-  // Kill the task
-  task.kill();
+      // Retrieve the error
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
 
-  // Close the log file
-  flog.close();
+      // Save log
+      flog << v.t() << " " << ( task.getError() ).t() << std::endl;
+    }
+    // Display task information
+    task.print() ;
+
+    // Kill the task
+    task.kill();
+
+    // Close the log file
+    flog.close();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
+  }
 }
 
diff --git a/example/robot-simulator/camera/servoSimu3D_cMcd_CamVelocityWithoutVpServo.cpp b/example/robot-simulator/camera/servoSimu3D_cMcd_CamVelocityWithoutVpServo.cpp
index 69518b94..8b504499 100644
--- a/example/robot-simulator/camera/servoSimu3D_cMcd_CamVelocityWithoutVpServo.cpp
+++ b/example/robot-simulator/camera/servoSimu3D_cMcd_CamVelocityWithoutVpServo.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimu3D_cMcd_CamVelocityWithoutVpServo.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -97,6 +97,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -137,15 +140,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -154,7 +157,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -164,134 +167,141 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  // Log file creation in /tmp/$USERNAME/log.dat
-  // This file contains by line:
-  // - the 6 computed camera velocities (m/s, rad/s) to achieve the task
-  // - the 6 values of s - s*
-  std::string username;
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Create a log filename to save velocities...
-  std::string logdirname;
-#ifdef WIN32
-  logdirname ="C:/temp/" + username;
+    // Log file creation in /tmp/$USERNAME/log.dat
+    // This file contains by line:
+    // - the 6 computed camera velocities (m/s, rad/s) to achieve the task
+    // - the 6 values of s - s*
+    std::string username;
+    // Get the user login name
+    vpIoTools::getUserName(username);
+
+    // Create a log filename to save velocities...
+    std::string logdirname;
+#if defined(_WIN32)
+    logdirname ="C:/temp/" + username;
 #else
-  logdirname ="/tmp/" + username;
+    logdirname ="/tmp/" + username;
 #endif
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(logdirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(logdirname);
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(logdirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(logdirname);
+      }
+      catch (...) {
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << logdirname << std::endl;
+        exit(-1);
+      }
     }
-    catch (...) {
-      std::cerr << std::endl
-                << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << logdirname << std::endl;
-      exit(-1);
-    }
-  }
-  std::string logfilename;
-  logfilename = logdirname + "/log.dat";
-
-  // Open the log file name
-  std::ofstream flog(logfilename.c_str());
-
-  vpSimulatorCamera robot ;
-
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Eye-in-hand task control, velocity computed in the camera frame" << std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task :  3D visual servoing " << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // Sets the initial camera location
-  vpPoseVector c_r_o(// Translation tx,ty,tz
-                     0.1, 0.2, 2,
-                     // ThetaU rotation
-                     vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50) ) ;
-
-  // From the camera pose build the corresponding homogeneous matrix
-  vpHomogeneousMatrix cMo(c_r_o) ;
-
-  // Set the robot initial position
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo; // Compute the position of the object in the world frame
-
-  // Sets the desired camera location
-  vpPoseVector cd_r_o(// Translation tx,ty,tz
-                      0, 0, 1,
-                      // ThetaU rotation
-                      vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
-
-  // From the camera desired pose build the corresponding homogeneous matrix
-  vpHomogeneousMatrix cdMo(cd_r_o) ;
-
-  vpHomogeneousMatrix cMcd; // Transformation between current and desired camera frame
-  vpRotationMatrix cRcd; // Rotation between current and desired camera frame
-
-  // Set the constant gain of the servo
-  double lambda = 1;
-
-  unsigned int iter=0 ;
-  // Start the visual servoing loop. We stop the servo after 200 iterations
-  while(iter++ < 200) {
-    std::cout << "------------------------------------" << iter <<std::endl ;
-
-    // get the robot position
+    std::string logfilename;
+    logfilename = logdirname + "/log.dat";
+
+    // Open the log file name
+    std::ofstream flog(logfilename.c_str());
+
+    vpSimulatorCamera robot ;
+
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Eye-in-hand task control, velocity computed in the camera frame" << std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task :  3D visual servoing " << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // Sets the initial camera location
+    vpPoseVector c_r_o(// Translation tx,ty,tz
+                       0.1, 0.2, 2,
+                       // ThetaU rotation
+                       vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50) ) ;
+
+    // From the camera pose build the corresponding homogeneous matrix
+    vpHomogeneousMatrix cMo(c_r_o) ;
+
+    // Set the robot initial position
+    vpHomogeneousMatrix wMc, wMo;
     robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
-
-    // new displacement to achieve
-    cMcd = cMo*cdMo.inverse() ;
-
-    // Extract the translation vector ctc* which is the current
-    // translational visual feature. 
-    vpTranslationVector ctcd;
-    cMcd.extract(ctcd);
-    // Compute the current theta U visual feature
-    vpThetaUVector tu_cRcd(cMcd);
-
-    // Create the identity matrix
-    vpMatrix I(3,3);
-    I.setIdentity();
-
-    // Compute the camera translational velocity
-    vpColVector v(3);
-    v = lambda * ( I - vpColVector::skew(tu_cRcd) ) * ctcd; 
-    // Compute the camera rotational velocity
-    vpColVector w(3);
-    w = lambda * tu_cRcd;
-
-    // Update the complete camera velocity vector
-    vpColVector velocity(6);
-    for (unsigned int i=0; i<3; i++) {
-      velocity[i]   = v[i]; // Translational velocity
-      velocity[i+3] = w[i]; // Rotational velocity
+    wMo = wMc * cMo; // Compute the position of the object in the world frame
+
+    // Sets the desired camera location
+    vpPoseVector cd_r_o(// Translation tx,ty,tz
+                        0, 0, 1,
+                        // ThetaU rotation
+                        vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
+
+    // From the camera desired pose build the corresponding homogeneous matrix
+    vpHomogeneousMatrix cdMo(cd_r_o) ;
+
+    vpHomogeneousMatrix cMcd; // Transformation between current and desired camera frame
+    vpRotationMatrix cRcd; // Rotation between current and desired camera frame
+
+    // Set the constant gain of the servo
+    double lambda = 1;
+
+    unsigned int iter=0 ;
+    // Start the visual servoing loop. We stop the servo after 200 iterations
+    while(iter++ < 200) {
+      std::cout << "------------------------------------" << iter <<std::endl ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // new displacement to achieve
+      cMcd = cMo*cdMo.inverse() ;
+
+      // Extract the translation vector ctc* which is the current
+      // translational visual feature.
+      vpTranslationVector ctcd;
+      cMcd.extract(ctcd);
+      // Compute the current theta U visual feature
+      vpThetaUVector tu_cRcd(cMcd);
+
+      // Create the identity matrix
+      vpMatrix I(3,3);
+      I.setIdentity();
+
+      // Compute the camera translational velocity
+      vpColVector v(3);
+      v = lambda * ( I - vpColVector::skew(tu_cRcd) ) * ctcd;
+      // Compute the camera rotational velocity
+      vpColVector w(3);
+      w = lambda * tu_cRcd;
+
+      // Update the complete camera velocity vector
+      vpColVector velocity(6);
+      for (unsigned int i=0; i<3; i++) {
+        velocity[i]   = v[i]; // Translational velocity
+        velocity[i+3] = w[i]; // Rotational velocity
+      }
+
+      // Send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, velocity) ;
+
+      // Retrieve the error (s-s*)
+      std::cout << "|| s - s* || = " << ctcd.t() << " " << tu_cRcd.t() << std::endl;
+
+      // Save log
+      flog << velocity.t() << " " << ctcd.t() << " " << tu_cRcd.t() << std::endl;
     }
 
-    // Send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, velocity) ;
-
-    // Retrieve the error (s-s*)
-    std::cout << "|| s - s* || = " << ctcd.t() << " " << tu_cRcd.t() << std::endl;
-
-    // Save log
-    flog << velocity.t() << " " << ctcd.t() << " " << tu_cRcd.t() << std::endl;
+    // Close the log file
+    flog.close();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
-
-  // Close the log file
-  flog.close();
 }
 
diff --git a/example/robot-simulator/camera/servoSimu3D_cdMc_CamVelocity.cpp b/example/robot-simulator/camera/servoSimu3D_cdMc_CamVelocity.cpp
index e5ad3cc1..0d2cd25d 100644
--- a/example/robot-simulator/camera/servoSimu3D_cdMc_CamVelocity.cpp
+++ b/example/robot-simulator/camera/servoSimu3D_cdMc_CamVelocity.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimu3D_cdMc_CamVelocity.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -74,6 +74,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -114,15 +117,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -131,7 +134,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -141,153 +144,160 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  // Log file creation in /tmp/$USERNAME/log.dat
-  // This file contains by line:
-  // - the 6 computed camera velocities (m/s, rad/s) to achieve the task
-  // - the 6 values of s - s*
-  std::string username;
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Create a log filename to save velocities...
-  std::string logdirname;
-#ifdef WIN32
-  logdirname ="C:/temp/" + username;
+    // Log file creation in /tmp/$USERNAME/log.dat
+    // This file contains by line:
+    // - the 6 computed camera velocities (m/s, rad/s) to achieve the task
+    // - the 6 values of s - s*
+    std::string username;
+    // Get the user login name
+    vpIoTools::getUserName(username);
+
+    // Create a log filename to save velocities...
+    std::string logdirname;
+#if defined(_WIN32)
+    logdirname ="C:/temp/" + username;
 #else
-  logdirname ="/tmp/" + username;
+    logdirname ="/tmp/" + username;
 #endif
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(logdirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(logdirname);
-    }
-    catch (...) {
-      std::cerr << std::endl
-                << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << logdirname << std::endl;
-      exit(-1);
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(logdirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(logdirname);
+      }
+      catch (...) {
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << logdirname << std::endl;
+        exit(-1);
+      }
     }
-  }
-  std::string logfilename;
-  logfilename = logdirname + "/log.dat";
-
-  // Open the log file name
-  std::ofstream flog(logfilename.c_str());
-
-  vpServo task ;
-  vpSimulatorCamera robot ;
-
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Eye-in-hand task control, velocity computed in the camera frame" << std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task :  3D visual servoing " << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-
-  // Sets the initial camera location
-  vpPoseVector c_r_o(// Translation tx,ty,tz
-                     0.1, 0.2, 2,
-                     // ThetaU rotation
-                     vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50) ) ;
-  
-  // From the camera pose build the corresponding homogeneous matrix
-  vpHomogeneousMatrix cMo(c_r_o) ;
-
-  // Set the robot initial position
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo; // Compute the position of the object in the world frame
-
-  // Sets the desired camera location
-  vpPoseVector cd_r_o(// Translation tx,ty,tz
-                      0, 0, 1,
-                      // ThetaU rotation
-                      vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
-  // From the camera desired pose build the corresponding homogeneous matrix
-  vpHomogeneousMatrix cdMo(cd_r_o) ;
-
-  // Compute the homogeneous transformation from the desired camera position to the initial one
-  vpHomogeneousMatrix cdMc ;
-  cdMc = cdMo*cMo.inverse() ;
-
-  // Build the current visual features s = (c*tc, thetaU_c*Rc)^T
-  vpFeatureTranslation t(vpFeatureTranslation::cdMc) ;
-  vpFeatureThetaU tu(vpFeatureThetaU::cdRc); // current feature
-  t.buildFrom(cdMc) ;
-  tu.buildFrom(cdMc) ;
-
-  // Sets the desired rotation (always zero !)  since s is the
-  // rotation that the camera has to achieve. Here s* = (0, 0)^T
-  vpFeatureTranslation td(vpFeatureTranslation::cdMc) ;
-  vpFeatureThetaU tud(vpFeatureThetaU::cdRc); // desired feature
-
-  // Define the task
-  // - we want an eye-in-hand control law
-  // - the robot is controlled in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
-  // - we use here the interaction matrix computed with the 
-  //   current features
-  task.setInteractionMatrixType(vpServo::CURRENT);
-
-  // Add the current and desired visual features
-  task.addFeature(t,td) ;   // 3D translation
-  task.addFeature(tu,tud) ; // 3D rotation
-
-  // - set the constant gain to 1.0
-  task.setLambda(1) ;
-
-  // Display task information
-  task.print() ;
-
-  unsigned int iter=0 ;
-  // Start the visual servoing loop. We stop the servo after 200 iterations
-  while(iter++ < 200) {
-    std::cout << "-----------------------------------" << iter <<std::endl ;
-    vpColVector v ;
-
-    // get the robot position
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    std::string logfilename;
+    logfilename = logdirname + "/log.dat";
+
+    // Open the log file name
+    std::ofstream flog(logfilename.c_str());
 
-    // new displacement to achieve
+    vpServo task ;
+    vpSimulatorCamera robot ;
+
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Eye-in-hand task control, velocity computed in the camera frame" << std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task :  3D visual servoing " << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+
+    // Sets the initial camera location
+    vpPoseVector c_r_o(// Translation tx,ty,tz
+                       0.1, 0.2, 2,
+                       // ThetaU rotation
+                       vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50) ) ;
+
+    // From the camera pose build the corresponding homogeneous matrix
+    vpHomogeneousMatrix cMo(c_r_o) ;
+
+    // Set the robot initial position
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc) ;
+    wMo = wMc * cMo; // Compute the position of the object in the world frame
+
+    // Sets the desired camera location
+    vpPoseVector cd_r_o(// Translation tx,ty,tz
+                        0, 0, 1,
+                        // ThetaU rotation
+                        vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
+    // From the camera desired pose build the corresponding homogeneous matrix
+    vpHomogeneousMatrix cdMo(cd_r_o) ;
+
+    // Compute the homogeneous transformation from the desired camera position to the initial one
+    vpHomogeneousMatrix cdMc ;
     cdMc = cdMo*cMo.inverse() ;
 
-    // Update the current visual features
+    // Build the current visual features s = (c*tc, thetaU_c*Rc)^T
+    vpFeatureTranslation t(vpFeatureTranslation::cdMc) ;
+    vpFeatureThetaU tu(vpFeatureThetaU::cdRc); // current feature
     t.buildFrom(cdMc) ;
     tu.buildFrom(cdMc) ;
 
-    // Compute the control law
-    v = task.computeControlLaw() ;
+    // Sets the desired rotation (always zero !)  since s is the
+    // rotation that the camera has to achieve. Here s* = (0, 0)^T
+    vpFeatureTranslation td(vpFeatureTranslation::cdMc) ;
+    vpFeatureThetaU tud(vpFeatureThetaU::cdRc); // desired feature
+
+    // Define the task
+    // - we want an eye-in-hand control law
+    // - the robot is controlled in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
+    // - we use here the interaction matrix computed with the
+    //   current features
+    task.setInteractionMatrixType(vpServo::CURRENT);
+
+    // Add the current and desired visual features
+    task.addFeature(t,td) ;   // 3D translation
+    task.addFeature(tu,tud) ; // 3D rotation
+
+    // - set the constant gain to 1.0
+    task.setLambda(1) ;
 
     // Display task information
-    if (iter==1) task.print() ;
+    task.print() ;
 
-    // Send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    unsigned int iter=0 ;
+    // Start the visual servoing loop. We stop the servo after 200 iterations
+    while(iter++ < 200) {
+      std::cout << "-----------------------------------" << iter <<std::endl ;
+      vpColVector v ;
 
-    // Retrieve the error 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
 
-    // Save log
-    flog << v.t() << " " << ( task.getError() ).t() << std::endl;
-  }
-  // Display task information
-  task.print() ;
+      // new displacement to achieve
+      cdMc = cdMo*cMo.inverse() ;
+
+      // Update the current visual features
+      t.buildFrom(cdMc) ;
+      tu.buildFrom(cdMc) ;
+
+      // Compute the control law
+      v = task.computeControlLaw() ;
+
+      // Display task information
+      if (iter==1) task.print() ;
+
+      // Send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
 
-  // Kill the task
-  task.kill();
+      // Retrieve the error
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
 
-  // Close the log file
-  flog.close();
+      // Save log
+      flog << v.t() << " " << ( task.getError() ).t() << std::endl;
+    }
+    // Display task information
+    task.print() ;
+
+    // Kill the task
+    task.kill();
+
+    // Close the log file
+    flog.close();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
+  }
 }
 
diff --git a/example/robot-simulator/camera/servoSimu3D_cdMc_CamVelocityWithoutVpServo.cpp b/example/robot-simulator/camera/servoSimu3D_cdMc_CamVelocityWithoutVpServo.cpp
index f2ad9133..0348c756 100644
--- a/example/robot-simulator/camera/servoSimu3D_cdMc_CamVelocityWithoutVpServo.cpp
+++ b/example/robot-simulator/camera/servoSimu3D_cdMc_CamVelocityWithoutVpServo.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimu3D_cdMc_CamVelocityWithoutVpServo.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -91,6 +91,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -131,15 +134,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -148,7 +151,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -158,133 +161,140 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
-  // Log file creation in /tmp/$USERNAME/log.dat
-  // This file contains by line:
-  // - the 6 computed camera velocities (m/s, rad/s) to achieve the task
-  // - the 6 values of s - s*
-  std::string username;
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Create a log filename to save velocities...
-  std::string logdirname;
-#ifdef WIN32
-  logdirname ="C:/temp/" + username;
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
+    // Log file creation in /tmp/$USERNAME/log.dat
+    // This file contains by line:
+    // - the 6 computed camera velocities (m/s, rad/s) to achieve the task
+    // - the 6 values of s - s*
+    std::string username;
+    // Get the user login name
+    vpIoTools::getUserName(username);
+
+    // Create a log filename to save velocities...
+    std::string logdirname;
+#if defined(_WIN32)
+    logdirname ="C:/temp/" + username;
 #else
-  logdirname ="/tmp/" + username;
+    logdirname ="/tmp/" + username;
 #endif
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(logdirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(logdirname);
-    }
-    catch (...) {
-      std::cerr << std::endl
-                << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << logdirname << std::endl;
-      exit(-1);
-    }
-  }
-  std::string logfilename;
-  logfilename = logdirname + "/log.dat";
-
-  // Open the log file name
-  std::ofstream flog(logfilename.c_str());
-
-  vpSimulatorCamera robot ;
-
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " Test program without vpServo and vpFeature classes "  <<std::endl ;
-  std::cout << " Eye-in-hand task control, velocity computed in the camera frame" << std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task :  3D visual servoing " << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-
-  // Sets the initial camera location
-  vpPoseVector c_r_o(// Translation tx,ty,tz
-                     0.1, 0.2, 2,
-                     // ThetaU rotation
-                     vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50) ) ;
-  
-  // From the camera pose build the corresponding homogeneous matrix
-  vpHomogeneousMatrix cMo(c_r_o) ;
-
-  // Set the robot initial position
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo; // Compute the position of the object in the world frame
-
-  // Sets the desired camera location
-  vpPoseVector cd_r_o(// Translation tx,ty,tz
-                      0, 0, 1,
-                      // ThetaU rotation
-                      vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
-  // From the camera desired pose build the corresponding homogeneous matrix
-  vpHomogeneousMatrix cdMo(cd_r_o) ;
-
-  vpHomogeneousMatrix cdMc; // Transformation between desired and current camera frame
-  vpRotationMatrix cdRc; // Rotation between desired and current camera frame
-  vpRotationMatrix cRcd; // Rotation between current and desired camera frame
-  
-  // Set the constant gain of the servo
-  double lambda = 1;
-
-  unsigned int iter=0 ;
-  // Start the visual servoing loop. We stop the servo after 200 iterations
-  while(iter++ < 200) {
-    std::cout << "-----------------------------------" << iter <<std::endl ;
-
-    // get the robot position
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
-
-    // new displacement to achieve
-    cdMc = cdMo*cMo.inverse() ;
-
-    // Extract the translation vector c*tc which is the current
-    // translational visual feature. 
-    vpTranslationVector cdtc;
-    cdMc.extract(cdtc);
-    // Extract the rotation matrix c*Rc
-    cdMc.extract(cdRc);
-    // Compute the inverse rotation cRc* (in fact the transpose of c*Rc)
-    cRcd = cdRc.inverse();
-    // Compute the current theta U visual feature
-    vpThetaUVector tu_cdRc(cdMc);
-    // Compute the camera translational velocity
-    vpColVector v(3);
-    v = -lambda * cRcd * cdtc; 
-    // Compute the camera rotational velocity
-    vpColVector w(3);
-    w = -lambda * tu_cdRc;
-
-    // Update the complete camera velocity vector
-    vpColVector velocity(6);
-    for (unsigned int i=0; i<3; i++) {
-      velocity[i]   = v[i]; // Translational velocity
-      velocity[i+3] = w[i]; // Rotational velocity
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(logdirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(logdirname);
+      }
+      catch (...) {
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << logdirname << std::endl;
+        exit(-1);
+      }
     }
+    std::string logfilename;
+    logfilename = logdirname + "/log.dat";
 
-    // Send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, velocity) ;
+    // Open the log file name
+    std::ofstream flog(logfilename.c_str());
 
-    // Retrieve the error (s-s*)
-    std::cout << "|| s - s* || = " << cdtc.t() << " " << tu_cdRc.t() << std::endl;
+    vpSimulatorCamera robot ;
 
-    // Save log
-    flog << velocity.t() << " " << cdtc.t() << " " << tu_cdRc.t() << std::endl;
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " Test program without vpServo and vpFeature classes "  <<std::endl ;
+    std::cout << " Eye-in-hand task control, velocity computed in the camera frame" << std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task :  3D visual servoing " << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+
+    // Sets the initial camera location
+    vpPoseVector c_r_o(// Translation tx,ty,tz
+                       0.1, 0.2, 2,
+                       // ThetaU rotation
+                       vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50) ) ;
+
+    // From the camera pose build the corresponding homogeneous matrix
+    vpHomogeneousMatrix cMo(c_r_o) ;
+
+    // Set the robot initial position
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc) ;
+    wMo = wMc * cMo; // Compute the position of the object in the world frame
+
+    // Sets the desired camera location
+    vpPoseVector cd_r_o(// Translation tx,ty,tz
+                        0, 0, 1,
+                        // ThetaU rotation
+                        vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
+    // From the camera desired pose build the corresponding homogeneous matrix
+    vpHomogeneousMatrix cdMo(cd_r_o) ;
+
+    vpHomogeneousMatrix cdMc; // Transformation between desired and current camera frame
+    vpRotationMatrix cdRc; // Rotation between desired and current camera frame
+    vpRotationMatrix cRcd; // Rotation between current and desired camera frame
+
+    // Set the constant gain of the servo
+    double lambda = 1;
+
+    unsigned int iter=0 ;
+    // Start the visual servoing loop. We stop the servo after 200 iterations
+    while(iter++ < 200) {
+      std::cout << "-----------------------------------" << iter <<std::endl ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // new displacement to achieve
+      cdMc = cdMo*cMo.inverse() ;
+
+      // Extract the translation vector c*tc which is the current
+      // translational visual feature.
+      vpTranslationVector cdtc;
+      cdMc.extract(cdtc);
+      // Extract the rotation matrix c*Rc
+      cdMc.extract(cdRc);
+      // Compute the inverse rotation cRc* (in fact the transpose of c*Rc)
+      cRcd = cdRc.inverse();
+      // Compute the current theta U visual feature
+      vpThetaUVector tu_cdRc(cdMc);
+      // Compute the camera translational velocity
+      vpColVector v(3);
+      v = -lambda * cRcd * cdtc;
+      // Compute the camera rotational velocity
+      vpColVector w(3);
+      w = -lambda * tu_cdRc;
+
+      // Update the complete camera velocity vector
+      vpColVector velocity(6);
+      for (unsigned int i=0; i<3; i++) {
+        velocity[i]   = v[i]; // Translational velocity
+        velocity[i+3] = w[i]; // Rotational velocity
+      }
+
+      // Send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, velocity) ;
+
+      // Retrieve the error (s-s*)
+      std::cout << "|| s - s* || = " << cdtc.t() << " " << tu_cdRc.t() << std::endl;
+
+      // Save log
+      flog << velocity.t() << " " << cdtc.t() << " " << tu_cdRc.t() << std::endl;
+    }
+    // Close the log file
+    flog.close();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
-  // Close the log file
-  flog.close();
 }
 
diff --git a/example/robot-simulator/camera/servoSimuCircle2DCamVelocity.cpp b/example/robot-simulator/camera/servoSimuCircle2DCamVelocity.cpp
index 9944fde2..4b4b9c0b 100644
--- a/example/robot-simulator/camera/servoSimuCircle2DCamVelocity.cpp
+++ b/example/robot-simulator/camera/servoSimuCircle2DCamVelocity.cpp
@@ -4,7 +4,7 @@
  * $Id: servoSimuCircle2DCamVelocity.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -73,6 +73,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -113,15 +116,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -130,7 +133,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -140,96 +143,103 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
-
-  vpServo task ;
-  vpSimulatorCamera robot ;
-
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task : servo a circle " << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo ;
-  cMo[0][3] = 0.1 ;
-  cMo[1][3] = 0.2 ;
-  cMo[2][3] = 2 ;
-
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo; // Compute the position of the object in the world frame
-
-  vpHomogeneousMatrix cMod ;
-  cMod[0][3] = 0 ;
-  cMod[1][3] = 0 ;
-  cMod[2][3] = 1 ;
-
-  // sets the circle coordinates in the world frame
-  vpCircle circle ;
-  circle.setWorldCoordinates(0,0,1,0,0,0,0.1) ;
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  // sets the desired position of the visual feature
-  vpFeatureEllipse pd ;
-  circle.track(cMod) ;
-  vpFeatureBuilder::create(pd,circle)  ;
+    vpServo task ;
+    vpSimulatorCamera robot ;
 
-  // project : computes  the circle coordinates in the camera frame and its 2D coordinates
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task : servo a circle " << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
 
-  // sets the current position of the visual feature
-  vpFeatureEllipse p ;
-  circle.track(cMo) ;
-  vpFeatureBuilder::create(p,circle)  ;
 
-  // define the task
-  // - we want an eye-in-hand control law
-  // - robot is controlled in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo ;
+    cMo[0][3] = 0.1 ;
+    cMo[1][3] = 0.2 ;
+    cMo[2][3] = 2 ;
 
-  // - we want to see a circle on a circle
-  std::cout << std::endl ;
-  task.addFeature(p,pd) ;
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc) ;
+    wMo = wMc * cMo; // Compute the position of the object in the world frame
 
-  // - set the gain
-  task.setLambda(1) ;
+    vpHomogeneousMatrix cMod ;
+    cMod[0][3] = 0 ;
+    cMod[1][3] = 0 ;
+    cMod[2][3] = 1 ;
 
-  // Display task information
-  task.print() ;
+    // sets the circle coordinates in the world frame
+    vpCircle circle ;
+    circle.setWorldCoordinates(0,0,1,0,0,0,0.1) ;
 
-  unsigned int iter=0 ;
-  // loop
-  while(iter++ < 500)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
+    // sets the desired position of the visual feature
+    vpFeatureEllipse pd ;
+    circle.track(cMod) ;
+    vpFeatureBuilder::create(pd,circle)  ;
 
-    // get the robot position
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    // project : computes  the circle coordinates in the camera frame and its 2D coordinates
 
-    // new circle position: retrieve x,y and Z of the vpCircle structure
+    // sets the current position of the visual feature
+    vpFeatureEllipse p ;
     circle.track(cMo) ;
-    vpFeatureBuilder::create(p,circle);
-
-    // compute the control law
-    v = task.computeControlLaw() ;
-    std::cout << "task rank: " << task.getTaskRank() <<std::endl ;
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    vpFeatureBuilder::create(p,circle)  ;
+
+    // define the task
+    // - we want an eye-in-hand control law
+    // - robot is controlled in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
+
+    // - we want to see a circle on a circle
+    std::cout << std::endl ;
+    task.addFeature(p,pd) ;
+
+    // - set the gain
+    task.setLambda(1) ;
+
+    // Display task information
+    task.print() ;
+
+    unsigned int iter=0 ;
+    // loop
+    while(iter++ < 500)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // new circle position: retrieve x,y and Z of the vpCircle structure
+      circle.track(cMo) ;
+      vpFeatureBuilder::create(p,circle);
+
+      // compute the control law
+      v = task.computeControlLaw() ;
+      std::cout << "task rank: " << task.getTaskRank() <<std::endl ;
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() << std::endl ;
+    }
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() << std::endl ;
+    // Display task information
+    task.print() ;
+    task.kill();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
-
-  // Display task information
-  task.print() ;
-  task.kill();
 }
 
diff --git a/example/robot-simulator/camera/servoSimuCircle2DCamVelocityDisplay.cpp b/example/robot-simulator/camera/servoSimuCircle2DCamVelocityDisplay.cpp
index 4c70e195..4b8711fe 100644
--- a/example/robot-simulator/camera/servoSimuCircle2DCamVelocityDisplay.cpp
+++ b/example/robot-simulator/camera/servoSimuCircle2DCamVelocityDisplay.cpp
@@ -4,7 +4,7 @@
  * $Id: servoSimuCircle2DCamVelocityDisplay.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -78,6 +78,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdh"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display);
+
 /*!
 
 Print the program options.
@@ -130,9 +133,9 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
@@ -140,7 +143,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -149,7 +152,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -160,135 +163,141 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 int
 main(int argc, const char ** argv)
 {
-  bool opt_display = true;
-  bool opt_click_allowed = true;
+  try {
+    bool opt_display = true;
+    bool opt_click_allowed = true;
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+    // Read the command line options
+    if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  vpImage<unsigned char> I(512,512,0) ;
+    vpImage<unsigned char> I(512,512,0) ;
 
-  // We open a window using either X11, GTK or GDI.
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
 
-  if (opt_display) {
-    try{
-      // Display size is automatically defined by the image (I) size
-      display.init(I, 100, 100,"Camera view...") ;
-      // Display the image
-      // The image class has a member that specify a pointer toward
-      // the display that has been initialized in the display declaration
-      // therefore is is no longuer necessary to make a reference to the
-      // display variable.
-      vpDisplay::display(I) ;
-      vpDisplay::flush(I) ;
-    }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
+    if (opt_display) {
+      try{
+        // Display size is automatically defined by the image (I) size
+        display.init(I, 100, 100,"Camera view...") ;
+        // Display the image
+        // The image class has a member that specify a pointer toward
+        // the display that has been initialized in the display declaration
+        // therefore is is no longuer necessary to make a reference to the
+        // display variable.
+        vpDisplay::display(I) ;
+        vpDisplay::flush(I) ;
+      }
+      catch(...)
+      {
+        vpERROR_TRACE("Error while displaying the image") ;
+        exit(-1);
+      }
     }
-  }
 
-  double px, py ; px = py = 600 ;
-  double u0, v0 ; u0 = v0 = 256 ;
-
-  vpCameraParameters cam(px,py,u0,v0);
-
-  vpServo task ;
-  vpSimulatorCamera robot ;
-
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(0,0,1,
-                          vpMath::rad(0),  vpMath::rad(80),  vpMath::rad(30))   ;
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo; // Compute the position of the object in the world frame
-
-  vpHomogeneousMatrix cMod(-0.1,-0.1,0.7,
-                           vpMath::rad(40),  vpMath::rad(10),  vpMath::rad(30))   ;
-
-  // sets the circle coordinates in the world frame
-  vpCircle circle ;
-  circle.setWorldCoordinates(0,0,1,
-                             0,0,0,
-                             0.1) ;
-
-  // sets the desired position of the visual feature
-  vpFeatureEllipse pd ;
-  circle.track(cMod) ;
-  vpFeatureBuilder::create(pd,circle)  ;
-
-  // project : computes the circle coordinates in the camera frame and its 2D coordinates
-  // sets the current position of the visual feature
-  vpFeatureEllipse p ;
-  circle.track(cMo) ;
-  vpFeatureBuilder::create(p,circle)  ;
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - robot is controlled in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
-  task.setInteractionMatrixType(vpServo::DESIRED) ;
-  // - we want to see a circle on a circle
-  task.addFeature(p,pd) ;
-  // - set the gain
-  task.setLambda(1) ;
-
-  // Display task information
-  task.print() ;
-
-  unsigned int iter=0 ;
-  // loop
-  while(iter++ < 200)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
-
-    // get the robot position
+    double px, py ; px = py = 600 ;
+    double u0, v0 ; u0 = v0 = 256 ;
+
+    vpCameraParameters cam(px,py,u0,v0);
+
+    vpServo task ;
+    vpSimulatorCamera robot ;
+
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(0,0,1,
+                            vpMath::rad(0),  vpMath::rad(80),  vpMath::rad(30))   ;
+    vpHomogeneousMatrix wMc, wMo;
     robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    wMo = wMc * cMo; // Compute the position of the object in the world frame
 
-    // new circle position
-    // retrieve x,y and Z of the vpCircle structure
-    circle.track(cMo) ;
-    vpFeatureBuilder::create(p,circle);
-    circle.print() ;
-    p.print() ;
+    vpHomogeneousMatrix cMod(-0.1,-0.1,0.7,
+                             vpMath::rad(40),  vpMath::rad(10),  vpMath::rad(30))   ;
 
-    if (opt_display) {
-      vpDisplay::display(I) ;
-      vpServoDisplay::display(task,cam,I) ;
-      vpDisplay::flush(I) ;
-    }
+    // sets the circle coordinates in the world frame
+    vpCircle circle ;
+    circle.setWorldCoordinates(0,0,1,
+                               0,0,0,
+                               0.1) ;
 
-    // compute the control law
-    v = task.computeControlLaw() ;
-    std::cout << "task rank: " << task.getTaskRank() <<std::endl ;
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    // sets the desired position of the visual feature
+    vpFeatureEllipse pd ;
+    circle.track(cMod) ;
+    vpFeatureBuilder::create(pd,circle)  ;
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
-  }
+    // project : computes the circle coordinates in the camera frame and its 2D coordinates
+    // sets the current position of the visual feature
+    vpFeatureEllipse p ;
+    circle.track(cMo) ;
+    vpFeatureBuilder::create(p,circle)  ;
+
+    // define the task
+    // - we want an eye-in-hand control law
+    // - robot is controlled in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
+    task.setInteractionMatrixType(vpServo::DESIRED) ;
+    // - we want to see a circle on a circle
+    task.addFeature(p,pd) ;
+    // - set the gain
+    task.setLambda(1) ;
+
+    // Display task information
+    task.print() ;
+
+    unsigned int iter=0 ;
+    // loop
+    while(iter++ < 200)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // new circle position
+      // retrieve x,y and Z of the vpCircle structure
+      circle.track(cMo) ;
+      vpFeatureBuilder::create(p,circle);
+      circle.print() ;
+      p.print() ;
+
+      if (opt_display) {
+        vpDisplay::display(I) ;
+        vpServoDisplay::display(task,cam,I) ;
+        vpDisplay::flush(I) ;
+      }
+
+      // compute the control law
+      v = task.computeControlLaw() ;
+      std::cout << "task rank: " << task.getTaskRank() <<std::endl ;
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    }
 
-  // Display task information
-  task.print() ;
-  task.kill();
+    // Display task information
+    task.print() ;
+    task.kill();
 
-  if (opt_display && opt_click_allowed) {
-    std::cout << "Click in the camera view window to end..." << std::endl;
-    vpDisplay::getClick(I) ;
+    if (opt_display && opt_click_allowed) {
+      std::cout << "Click in the camera view window to end..." << std::endl;
+      vpDisplay::getClick(I) ;
+    }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
-
 }
 #else
 int
diff --git a/example/robot-simulator/camera/servoSimuCylinder2DCamVelocityDisplay.cpp b/example/robot-simulator/camera/servoSimuCylinder2DCamVelocityDisplay.cpp
index 2b3f4dec..c954a04f 100644
--- a/example/robot-simulator/camera/servoSimuCylinder2DCamVelocityDisplay.cpp
+++ b/example/robot-simulator/camera/servoSimuCylinder2DCamVelocityDisplay.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimuCylinder2DCamVelocityDisplay.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -77,6 +77,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdh"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display);
+
 /*!
 
 Print the program options.
@@ -126,9 +129,9 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
@@ -136,7 +139,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -145,7 +148,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -156,170 +159,177 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 int
 main(int argc, const char ** argv)
 {
-  bool opt_display = true;
-  bool opt_click_allowed = true;
+  try {
+    bool opt_display = true;
+    bool opt_click_allowed = true;
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+    // Read the command line options
+    if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  vpImage<unsigned char> I(512,512,255) ;
+    vpImage<unsigned char> I(512,512,255) ;
 
-  // We open a window using either X11, GTK or GDI.
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
 
-  if (opt_display) {
-    try{
-      // Display size is automatically defined by the image (I) size
-      display.init(I, 100, 100,"Camera view...") ;
-      // Display the image
-      // The image class has a member that specify a pointer toward
-      // the display that has been initialized in the display declaration
-      // therefore is is no longuer necessary to make a reference to the
-      // display variable.
-      vpDisplay::display(I) ;
-      vpDisplay::flush(I) ;
-    }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
+    if (opt_display) {
+      try{
+        // Display size is automatically defined by the image (I) size
+        display.init(I, 100, 100,"Camera view...") ;
+        // Display the image
+        // The image class has a member that specify a pointer toward
+        // the display that has been initialized in the display declaration
+        // therefore is is no longuer necessary to make a reference to the
+        // display variable.
+        vpDisplay::display(I) ;
+        vpDisplay::flush(I) ;
+      }
+      catch(...)
+      {
+        vpERROR_TRACE("Error while displaying the image") ;
+        exit(-1);
+      }
     }
-  }
 
-  double px, py ; px = py = 600 ;
-  double u0, v0 ; u0 = v0 = 256 ;
+    double px, py ; px = py = 600 ;
+    double u0, v0 ; u0 = v0 = 256 ;
 
-  vpCameraParameters cam(px,py,u0,v0);
+    vpCameraParameters cam(px,py,u0,v0);
 
-  vpServo task ;
-  vpSimulatorCamera robot ;
+    vpServo task ;
+    vpSimulatorCamera robot ;
 
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(-0.2,0.1,2,
-                          vpMath::rad(5),  vpMath::rad(5),  vpMath::rad(20));
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(-0.2,0.1,2,
+                            vpMath::rad(5),  vpMath::rad(5),  vpMath::rad(20));
 
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo; // Compute the position of the object in the world frame
-
-  // sets the final camera location (for simulation purpose)
-  vpHomogeneousMatrix cMod(0,0,1,
-                           vpMath::rad(-60),  vpMath::rad(0),  vpMath::rad(0));
-
-  // sets the cylinder coordinates in the world frame
-  vpCylinder cylinder(0,1,0,  // direction
-                      0,0,0,  // point of the axis
-                      0.1) ;  // radius
-
-  // sets the desired position of the visual feature
-  cylinder.track(cMod) ;
-  cylinder.print() ;
-
-  vpFeatureLine ld[2] ;
-  int i ;
-  for(i=0 ; i < 2 ; i++)
-    vpFeatureBuilder::create(ld[i],cylinder,i)  ;
-
-  // computes  the cylinder coordinates in the camera frame and its 2D coordinates
-  // sets the current position of the visual feature
-  cylinder.track(cMo) ;
-  cylinder.print() ;
-
-  vpFeatureLine l[2] ;
-  for(i=0 ; i < 2 ; i++)
-  {
-    vpFeatureBuilder::create(l[i],cylinder,i)  ;
-    l[i].print() ;
-  }
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - robot is controlled in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
-  // task.setInteractionMatrixType(vpServo::CURRENT, vpServo::PSEUDO_INVERSE) ;
-  //  it can also be interesting to test these possibilities
-  //    task.setInteractionMatrixType(vpServo::MEAN, vpServo::PSEUDO_INVERSE) ;
-  task.setInteractionMatrixType(vpServo::DESIRED,vpServo::PSEUDO_INVERSE) ;
-  //task.setInteractionMatrixType(vpServo::DESIRED,  vpServo::TRANSPOSE) ;
-  // task.setInteractionMatrixType(vpServo::CURRENT,  vpServo::TRANSPOSE) ;
-
-  // - we want to see 2 lines on 2 lines
-  task.addFeature(l[0],ld[0]) ;
-  task.addFeature(l[1],ld[1]) ;
-
-  vpServoDisplay::display(task,cam,I) ;
-  vpDisplay::flush(I) ;
-
-  // Display task information
-  task.print() ;
-
-  if (opt_display && opt_click_allowed) {
-    std::cout << "\n\nClick in the camera view window to start..." << std::endl;
-    vpDisplay::getClick(I) ;
-  }
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc) ;
+    wMo = wMc * cMo; // Compute the position of the object in the world frame
 
-  // - set the gain
-  task.setLambda(1) ;
+    // sets the final camera location (for simulation purpose)
+    vpHomogeneousMatrix cMod(0,0,1,
+                             vpMath::rad(-60),  vpMath::rad(0),  vpMath::rad(0));
 
-  // Display task information
-  task.print() ;
+    // sets the cylinder coordinates in the world frame
+    vpCylinder cylinder(0,1,0,  // direction
+                        0,0,0,  // point of the axis
+                        0.1) ;  // radius
 
-  unsigned int iter=0 ;
-  // loop
-  do
-  {
-    std::cout << "---------------------------------------------" << iter++ <<std::endl ;
-    vpColVector v ;
+    // sets the desired position of the visual feature
+    cylinder.track(cMod) ;
+    cylinder.print() ;
 
-    // get the robot position
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    vpFeatureLine ld[2] ;
+    int i ;
+    for(i=0 ; i < 2 ; i++)
+      vpFeatureBuilder::create(ld[i],cylinder,i)  ;
 
-    // new line position
-    // retrieve x,y and Z of the vpLine structure
+    // computes  the cylinder coordinates in the camera frame and its 2D coordinates
+    // sets the current position of the visual feature
     cylinder.track(cMo) ;
-    //    cylinder.print() ;
+    cylinder.print() ;
+
+    vpFeatureLine l[2] ;
     for(i=0 ; i < 2 ; i++)
     {
       vpFeatureBuilder::create(l[i],cylinder,i)  ;
-      //   l[i].print() ;
+      l[i].print() ;
     }
 
-    if (opt_display) {
-      vpDisplay::display(I) ;
-      vpServoDisplay::display(task,cam,I) ;
-      vpDisplay::flush(I) ;
+    // define the task
+    // - we want an eye-in-hand control law
+    // - robot is controlled in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
+    // task.setInteractionMatrixType(vpServo::CURRENT, vpServo::PSEUDO_INVERSE) ;
+    //  it can also be interesting to test these possibilities
+    //    task.setInteractionMatrixType(vpServo::MEAN, vpServo::PSEUDO_INVERSE) ;
+    task.setInteractionMatrixType(vpServo::DESIRED,vpServo::PSEUDO_INVERSE) ;
+    //task.setInteractionMatrixType(vpServo::DESIRED,  vpServo::TRANSPOSE) ;
+    // task.setInteractionMatrixType(vpServo::CURRENT,  vpServo::TRANSPOSE) ;
+
+    // - we want to see 2 lines on 2 lines
+    task.addFeature(l[0],ld[0]) ;
+    task.addFeature(l[1],ld[1]) ;
+
+    vpServoDisplay::display(task,cam,I) ;
+    vpDisplay::flush(I) ;
+
+    // Display task information
+    task.print() ;
+
+    if (opt_display && opt_click_allowed) {
+      std::cout << "\n\nClick in the camera view window to start..." << std::endl;
+      vpDisplay::getClick(I) ;
     }
 
-    // compute the control law
-    v = task.computeControlLaw() ;
+    // - set the gain
+    task.setLambda(1) ;
 
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    // Display task information
+    task.print() ;
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ; ;
+    unsigned int iter=0 ;
+    // loop
+    do
+    {
+      std::cout << "---------------------------------------------" << iter++ <<std::endl ;
+      vpColVector v ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // new line position
+      // retrieve x,y and Z of the vpLine structure
+      cylinder.track(cMo) ;
+      //    cylinder.print() ;
+      for(i=0 ; i < 2 ; i++)
+      {
+        vpFeatureBuilder::create(l[i],cylinder,i)  ;
+        //   l[i].print() ;
+      }
+
+      if (opt_display) {
+        vpDisplay::display(I) ;
+        vpServoDisplay::display(task,cam,I) ;
+        vpDisplay::flush(I) ;
+      }
+
+      // compute the control law
+      v = task.computeControlLaw() ;
+
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ; ;
+
+      //   vpDisplay::getClick(I) ;
+    }
+    while(( task.getError() ).sumSquare() >  1e-9) ;
 
-    //   vpDisplay::getClick(I) ;
-  }
-  while(( task.getError() ).sumSquare() >  1e-9) ;
+    if (opt_display && opt_click_allowed) {
+      std::cout << "\nClick in the camera view window to end..." << std::endl;
+      vpDisplay::getClick(I) ;
+    }
 
-  if (opt_display && opt_click_allowed) {
-    std::cout << "\nClick in the camera view window to end..." << std::endl;
-    vpDisplay::getClick(I) ;
+    // Display task information
+    task.print() ;
+    task.kill();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
-
-  // Display task information
-  task.print() ;
-  task.kill();
 }
 
 #else
diff --git a/example/robot-simulator/camera/servoSimuCylinder2DCamVelocityDisplaySecondaryTask.cpp b/example/robot-simulator/camera/servoSimuCylinder2DCamVelocityDisplaySecondaryTask.cpp
index d98db77f..4efd20a7 100644
--- a/example/robot-simulator/camera/servoSimuCylinder2DCamVelocityDisplaySecondaryTask.cpp
+++ b/example/robot-simulator/camera/servoSimuCylinder2DCamVelocityDisplaySecondaryTask.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimuCylinder2DCamVelocityDisplaySecondaryTask.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -80,6 +80,8 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdh"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display);
 
 /*!
 
@@ -130,9 +132,9 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
@@ -140,7 +142,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -149,7 +151,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -160,286 +162,293 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 int
 main(int argc, const char ** argv)
 {
-  bool opt_display = true;
-  bool opt_click_allowed = true;
+  try {
+    bool opt_display = true;
+    bool opt_click_allowed = true;
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+    // Read the command line options
+    if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  vpImage<unsigned char> Iint(512,512,0) ;
-  vpImage<unsigned char> Iext(512,512,0) ;
+    vpImage<unsigned char> Iint(512,512,0) ;
+    vpImage<unsigned char> Iext(512,512,0) ;
 
-  // We open a window using either X11, GTK or GDI.
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX displayInt;
-  vpDisplayX displayExt;
+    vpDisplayX displayInt;
+    vpDisplayX displayExt;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK displayInt;
-  vpDisplayGTK displayExt;
+    vpDisplayGTK displayInt;
+    vpDisplayGTK displayExt;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI displayInt;
-  vpDisplayGDI displayExt;
+    vpDisplayGDI displayInt;
+    vpDisplayGDI displayExt;
 #endif
 
-  if (opt_display) {
-    try{
-      // Display size is automatically defined by the image (Iint) and (Iext) size
-      displayInt.init(Iint, 100, 100,"Internal view") ;
-      displayExt.init(Iext, (int)(130+Iint.getWidth()), 100, "External view") ;
-      // Display the image
-      // The image class has a member that specify a pointer toward
-      // the display that has been initialized in the display declaration
-      // therefore is is no longuer necessary to make a reference to the
-      // display variable.
-      vpDisplay::display(Iint) ;
-      vpDisplay::display(Iext) ;
-      vpDisplay::flush(Iint) ;
-      vpDisplay::flush(Iext) ;
-    }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
+    if (opt_display) {
+      try{
+        // Display size is automatically defined by the image (Iint) and (Iext) size
+        displayInt.init(Iint, 100, 100,"Internal view") ;
+        displayExt.init(Iext, (int)(130+Iint.getWidth()), 100, "External view") ;
+        // Display the image
+        // The image class has a member that specify a pointer toward
+        // the display that has been initialized in the display declaration
+        // therefore is is no longuer necessary to make a reference to the
+        // display variable.
+        vpDisplay::display(Iint) ;
+        vpDisplay::display(Iext) ;
+        vpDisplay::flush(Iint) ;
+        vpDisplay::flush(Iext) ;
+      }
+      catch(...)
+      {
+        vpERROR_TRACE("Error while displaying the image") ;
+        exit(-1);
+      }
     }
-  }
-
-  vpProjectionDisplay externalview ;
-
-  //Set the camera parameters
-  double px, py ; px = py = 600 ;
-  double u0, v0 ; u0 = v0 = 256 ;
-
-  vpCameraParameters cam(px,py,u0,v0);
-
-  vpServo task ;
-  vpSimulatorCamera robot ;
-
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(-0.2,0.1,2,
-                          vpMath::rad(5),  vpMath::rad(5),  vpMath::rad(20));
 
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo; // Compute the position of the object in the world frame
+    vpProjectionDisplay externalview ;
 
-  // sets the final camera location (for simulation purpose)
-  vpHomogeneousMatrix cMod(0,0,1,
-                           vpMath::rad(0),  vpMath::rad(0),  vpMath::rad(0));
+    //Set the camera parameters
+    double px, py ; px = py = 600 ;
+    double u0, v0 ; u0 = v0 = 256 ;
 
-  // sets the cylinder coordinates in the world frame
-  vpCylinder cylinder(0,1,0,  // direction
-                      0,0,0,  // point of the axis
-                      0.1) ;  // radius
+    vpCameraParameters cam(px,py,u0,v0);
 
-  externalview.insert(cylinder) ;
+    vpServo task ;
+    vpSimulatorCamera robot ;
 
-  // sets the desired position of the visual feature
-  cylinder.track(cMod) ;
-  cylinder.print() ;
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(-0.2,0.1,2,
+                            vpMath::rad(5),  vpMath::rad(5),  vpMath::rad(20));
 
-  //Build the desired line features thanks to the cylinder and especially its paramaters in the image frame
-  vpFeatureLine ld[2] ;
-  int i ;
-  for(i=0 ; i < 2 ; i++)
-    vpFeatureBuilder::create(ld[i],cylinder,i)  ;
-
-  // computes  the cylinder coordinates in the camera frame and its 2D coordinates
-  // sets the current position of the visual feature
-  cylinder.track(cMo) ;
-  cylinder.print() ;
-
-  //Build the current line features thanks to the cylinder and especially its paramaters in the image frame
-  vpFeatureLine l[2] ;
-  for(i=0 ; i < 2 ; i++)
-  {
-    vpFeatureBuilder::create(l[i],cylinder,i)  ;
-    l[i].print() ;
-  }
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - robot is controlled in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
-  task.setInteractionMatrixType(vpServo::DESIRED,vpServo::PSEUDO_INVERSE) ;
-  //  it can also be interesting to test these possibilities
-  // task.setInteractionMatrixType(vpServo::CURRENT,vpServo::PSEUDO_INVERSE) ;
-  // task.setInteractionMatrixType(vpServo::MEAN, vpServo::PSEUDO_INVERSE) ;
-  // task.setInteractionMatrixType(vpServo::CURRENT, vpServo::PSEUDO_INVERSE) ;
-  // task.setInteractionMatrixType(vpServo::DESIRED,  vpServo::TRANSPOSE) ;
-  // task.setInteractionMatrixType(vpServo::CURRENT,  vpServo::TRANSPOSE) ;
-
-  // we want to see  2 lines on 2 lines
-  task.addFeature(l[0],ld[0]) ;
-  task.addFeature(l[1],ld[1]) ;
-
-  // Set the point of view of the external view
-  vpHomogeneousMatrix cextMo(0,0,6,
-                             vpMath::rad(40),  vpMath::rad(10),  vpMath::rad(60))   ;
-
-  // Display the initial scene
-  vpServoDisplay::display(task,cam,Iint) ;
-  externalview.display(Iext,cextMo, cMo, cam, vpColor::red);
-  vpDisplay::flush(Iint) ;
-  vpDisplay::flush(Iext) ;
-
-  // Display task information
-  task.print() ;
-
-  if (opt_display && opt_click_allowed) {
-    std::cout << "\n\nClick in the internal camera view window to start..." << std::endl;
-    vpDisplay::getClick(Iint) ;
-  }
-
-  // set the gain
-  task.setLambda(1) ;
-
-  // Display task information
-  task.print() ;
-
-  unsigned int iter=0 ;
-  // The first loop is needed to reach the desired position
-  do
-  {
-    std::cout << "---------------------------------------------" << iter++ <<std::endl ;
-    vpColVector v ;
-
-    // get the robot position
+    vpHomogeneousMatrix wMc, wMo;
     robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    wMo = wMc * cMo; // Compute the position of the object in the world frame
 
-    // new line position
-    // retrieve x,y and Z of the vpLine structure
-    // Compute the parameters of the cylinder in the camera frame and in the image frame
-    cylinder.track(cMo) ;
+    // sets the final camera location (for simulation purpose)
+    vpHomogeneousMatrix cMod(0,0,1,
+                             vpMath::rad(0),  vpMath::rad(0),  vpMath::rad(0));
 
-    //Build the current line features thanks to the cylinder and especially its paramaters in the image frame
-    for(i=0 ; i < 2 ; i++)
-    {
-      vpFeatureBuilder::create(l[i],cylinder,i)  ;
-    }
+    // sets the cylinder coordinates in the world frame
+    vpCylinder cylinder(0,1,0,  // direction
+                        0,0,0,  // point of the axis
+                        0.1) ;  // radius
 
-    // Display the current scene
-    if (opt_display) {
-      vpDisplay::display(Iint) ;
-      vpDisplay::display(Iext) ;
-      vpServoDisplay::display(task,cam,Iint) ;
-      externalview.display(Iext,cextMo, cMo, cam, vpColor::red);
-      vpDisplay::flush(Iint);
-      vpDisplay::flush(Iext);
-    }
+    externalview.insert(cylinder) ;
 
-    // compute the control law
-    v = task.computeControlLaw() ;
+    // sets the desired position of the visual feature
+    cylinder.track(cMod) ;
+    cylinder.print() ;
 
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
-
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
-  }
-  while(( task.getError() ).sumSquare() >  1e-9) ;
-
-
-  // Second loop is to compute the control law while taking into account the secondary task.
-  // In this example the secondary task is cut in four steps.
-  // The first one consists in impose a movement of the robot along the x axis of the object frame with a velocity of 0.5.
-  // The second one consists in impose a movement of the robot along the y axis of the object frame with a velocity of 0.5.
-  // The third one consists in impose a movement of the robot along the x axis of the object frame with a velocity of -0.5.
-  // The last one consists in impose a movement of the robot along the y axis of the object frame with a velocity of -0.5.
-  // Each steps is made during 200 iterations.
-  vpColVector e1(6) ; e1 = 0 ;
-  vpColVector e2(6) ; e2 = 0 ;
-  vpColVector proj_e1 ;
-  vpColVector proj_e2 ;
-  iter = 0;
-  double rapport = 0;
-  double vitesse = 0.5;
-  unsigned int tempo = 800;
-
-  while(iter < tempo)
-  {
-    vpColVector v ;
-
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    //Build the desired line features thanks to the cylinder and especially its paramaters in the image frame
+    vpFeatureLine ld[2] ;
+    int i ;
+    for(i=0 ; i < 2 ; i++)
+      vpFeatureBuilder::create(ld[i],cylinder,i)  ;
 
+    // computes  the cylinder coordinates in the camera frame and its 2D coordinates
+    // sets the current position of the visual feature
     cylinder.track(cMo) ;
+    cylinder.print() ;
 
+    //Build the current line features thanks to the cylinder and especially its paramaters in the image frame
+    vpFeatureLine l[2] ;
     for(i=0 ; i < 2 ; i++)
     {
       vpFeatureBuilder::create(l[i],cylinder,i)  ;
+      l[i].print() ;
     }
 
-    if (opt_display) 
-    {
-      vpDisplay::display(Iint) ;
-      vpDisplay::display(Iext) ;
-      vpServoDisplay::display(task,cam,Iint) ;
-      externalview.display(Iext,cextMo, cMo, cam, vpColor::red);
-      vpDisplay::flush(Iint);
-      vpDisplay::flush(Iext);
+    // define the task
+    // - we want an eye-in-hand control law
+    // - robot is controlled in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
+    task.setInteractionMatrixType(vpServo::DESIRED,vpServo::PSEUDO_INVERSE) ;
+    //  it can also be interesting to test these possibilities
+    // task.setInteractionMatrixType(vpServo::CURRENT,vpServo::PSEUDO_INVERSE) ;
+    // task.setInteractionMatrixType(vpServo::MEAN, vpServo::PSEUDO_INVERSE) ;
+    // task.setInteractionMatrixType(vpServo::CURRENT, vpServo::PSEUDO_INVERSE) ;
+    // task.setInteractionMatrixType(vpServo::DESIRED,  vpServo::TRANSPOSE) ;
+    // task.setInteractionMatrixType(vpServo::CURRENT,  vpServo::TRANSPOSE) ;
+
+    // we want to see  2 lines on 2 lines
+    task.addFeature(l[0],ld[0]) ;
+    task.addFeature(l[1],ld[1]) ;
+
+    // Set the point of view of the external view
+    vpHomogeneousMatrix cextMo(0,0,6,
+                               vpMath::rad(40),  vpMath::rad(10),  vpMath::rad(60))   ;
+
+    // Display the initial scene
+    vpServoDisplay::display(task,cam,Iint) ;
+    externalview.display(Iext,cextMo, cMo, cam, vpColor::red);
+    vpDisplay::flush(Iint) ;
+    vpDisplay::flush(Iext) ;
+
+    // Display task information
+    task.print() ;
+
+    if (opt_display && opt_click_allowed) {
+      std::cout << "\n\nClick in the internal camera view window to start..." << std::endl;
+      vpDisplay::getClick(Iint) ;
     }
 
-    v = task.computeControlLaw() ;
+    // set the gain
+    task.setLambda(1) ;
 
-    if ( iter%tempo < 200  /*&&  iter%tempo >= 0*/)
-    {
-      e2 = 0;
-      e1[0] = fabs(vitesse)  ;
-      proj_e1 = task.secondaryTask(e1);
-      rapport = vitesse/proj_e1[0];
-      proj_e1 *= rapport ;
-      v += proj_e1 ;
-    }
+    // Display task information
+    task.print() ;
 
-    if ( iter%tempo < 400 &&  iter%tempo >= 200)
+    unsigned int iter=0 ;
+    // The first loop is needed to reach the desired position
+    do
     {
-      e1 = 0;
-      e2[1] = fabs(vitesse)  ;
-      proj_e2 = task.secondaryTask(e2);
-      rapport = vitesse/proj_e2[1];
-      proj_e2 *= rapport ;
-      v += proj_e2 ;
+      std::cout << "---------------------------------------------" << iter++ <<std::endl ;
+      vpColVector v ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // new line position
+      // retrieve x,y and Z of the vpLine structure
+      // Compute the parameters of the cylinder in the camera frame and in the image frame
+      cylinder.track(cMo) ;
+
+      //Build the current line features thanks to the cylinder and especially its paramaters in the image frame
+      for(i=0 ; i < 2 ; i++)
+      {
+        vpFeatureBuilder::create(l[i],cylinder,i)  ;
+      }
+
+      // Display the current scene
+      if (opt_display) {
+        vpDisplay::display(Iint) ;
+        vpDisplay::display(Iext) ;
+        vpServoDisplay::display(task,cam,Iint) ;
+        externalview.display(Iext,cextMo, cMo, cam, vpColor::red);
+        vpDisplay::flush(Iint);
+        vpDisplay::flush(Iext);
+      }
+
+      // compute the control law
+      v = task.computeControlLaw() ;
+
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
     }
-
-    if ( iter%tempo < 600 &&  iter%tempo >= 400)
+    while(( task.getError() ).sumSquare() >  1e-9) ;
+
+
+    // Second loop is to compute the control law while taking into account the secondary task.
+    // In this example the secondary task is cut in four steps.
+    // The first one consists in impose a movement of the robot along the x axis of the object frame with a velocity of 0.5.
+    // The second one consists in impose a movement of the robot along the y axis of the object frame with a velocity of 0.5.
+    // The third one consists in impose a movement of the robot along the x axis of the object frame with a velocity of -0.5.
+    // The last one consists in impose a movement of the robot along the y axis of the object frame with a velocity of -0.5.
+    // Each steps is made during 200 iterations.
+    vpColVector e1(6) ; e1 = 0 ;
+    vpColVector e2(6) ; e2 = 0 ;
+    vpColVector proj_e1 ;
+    vpColVector proj_e2 ;
+    iter = 0;
+    double rapport = 0;
+    double vitesse = 0.5;
+    unsigned int tempo = 800;
+
+    while(iter < tempo)
     {
-      e2 = 0;
-      e1[0] = -fabs(vitesse)  ;
-      proj_e1 = task.secondaryTask(e1);
-      rapport = -vitesse/proj_e1[0];
-      proj_e1 *= rapport ;
-      v += proj_e1 ;
+      vpColVector v ;
+
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      cylinder.track(cMo) ;
+
+      for(i=0 ; i < 2 ; i++)
+      {
+        vpFeatureBuilder::create(l[i],cylinder,i)  ;
+      }
+
+      if (opt_display)
+      {
+        vpDisplay::display(Iint) ;
+        vpDisplay::display(Iext) ;
+        vpServoDisplay::display(task,cam,Iint) ;
+        externalview.display(Iext,cextMo, cMo, cam, vpColor::red);
+        vpDisplay::flush(Iint);
+        vpDisplay::flush(Iext);
+      }
+
+      v = task.computeControlLaw() ;
+
+      if ( iter%tempo < 200  /*&&  iter%tempo >= 0*/)
+      {
+        e2 = 0;
+        e1[0] = fabs(vitesse)  ;
+        proj_e1 = task.secondaryTask(e1);
+        rapport = vitesse/proj_e1[0];
+        proj_e1 *= rapport ;
+        v += proj_e1 ;
+      }
+
+      if ( iter%tempo < 400 &&  iter%tempo >= 200)
+      {
+        e1 = 0;
+        e2[1] = fabs(vitesse)  ;
+        proj_e2 = task.secondaryTask(e2);
+        rapport = vitesse/proj_e2[1];
+        proj_e2 *= rapport ;
+        v += proj_e2 ;
+      }
+
+      if ( iter%tempo < 600 &&  iter%tempo >= 400)
+      {
+        e2 = 0;
+        e1[0] = -fabs(vitesse)  ;
+        proj_e1 = task.secondaryTask(e1);
+        rapport = -vitesse/proj_e1[0];
+        proj_e1 *= rapport ;
+        v += proj_e1 ;
+      }
+
+      if ( iter%tempo < 800 &&  iter%tempo >= 600)
+      {
+        e1 = 0;
+        e2[1] = -fabs(vitesse)  ;
+        proj_e2 = task.secondaryTask(e2);
+        rapport = -vitesse/proj_e2[1];
+        proj_e2 *= rapport ;
+        v += proj_e2 ;
+      }
+
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+
+      iter++;
     }
 
-    if ( iter%tempo < 800 &&  iter%tempo >= 600)
-    {
-      e1 = 0;
-      e2[1] = -fabs(vitesse)  ;
-      proj_e2 = task.secondaryTask(e2);
-      rapport = -vitesse/proj_e2[1];
-      proj_e2 *= rapport ;
-      v += proj_e2 ;
+    if (opt_display && opt_click_allowed) {
+      std::cout << "\nClick in the internal camera view window to end..." << std::endl;
+      vpDisplay::getClick(Iint) ;
     }
 
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v);
-
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
-
-    iter++;
+    // Display task information
+    task.print() ;
+    task.kill();
+    return 0;
   }
-
-  if (opt_display && opt_click_allowed) {
-    std::cout << "\nClick in the internal camera view window to end..." << std::endl;
-    vpDisplay::getClick(Iint) ;
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
-
-  // Display task information
-  task.print() ;
-  task.kill();
 }
 
 #else
diff --git a/example/robot-simulator/camera/servoSimuFourPoints2DCamVelocity.cpp b/example/robot-simulator/camera/servoSimuFourPoints2DCamVelocity.cpp
index ae20ae2e..7d750d95 100644
--- a/example/robot-simulator/camera/servoSimuFourPoints2DCamVelocity.cpp
+++ b/example/robot-simulator/camera/servoSimuFourPoints2DCamVelocity.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimuFourPoints2DCamVelocity.cpp 2503 2010-02-16 18:55:01Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -69,6 +69,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -113,15 +116,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -130,7 +133,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -140,127 +143,134 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  int i ;
-  vpServo task ;
-  vpSimulatorCamera robot ;
-
-
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Eye-in-hand task control,  articular velocity are computed" << std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task : servo 4 points " << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // sets the initial camera location with respect to the object
-  vpHomogeneousMatrix cMo ;
-  cMo[0][3] = 0.1 ;
-  cMo[1][3] = 0.2 ;
-  cMo[2][3] = 2 ;
-
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
-
-  // sets the point coordinates in the object frame
-  vpPoint point[4] ;
-  point[0].setWorldCoordinates(-1,-1,0) ;
-  point[1].setWorldCoordinates(1,-1,0) ;
-  point[2].setWorldCoordinates(1,1,0) ;
-  point[3].setWorldCoordinates(-1,1,0) ;
-
-  // computes  the point coordinates in the camera frame and its 2D coordinates
-  for (i = 0 ; i < 4 ; i++)
-    point[i].track(cMo) ;
-
-  // sets the desired position of the point
-  vpFeaturePoint p[4] ;
-  for (i = 0 ; i < 4 ; i++)
-    vpFeatureBuilder::create(p[i], point[i])  ;  //retrieve x,y and Z of the vpPoint structure
-
-  // sets the desired position of the point
-  vpFeaturePoint pd[4] ;
-
-  pd[0].buildFrom(-0.1,-0.1, 1) ;
-  pd[1].buildFrom( 0.1,-0.1, 1) ;
-  pd[2].buildFrom( 0.1, 0.1, 1) ;
-  pd[3].buildFrom(-0.1, 0.1, 1) ;
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - articular velocity are computed
-  task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
-  task.setInteractionMatrixType(vpServo::MEAN) ;
-
-  // Set the position of the camera in the end-effector frame
-  vpHomogeneousMatrix cMe ;
-  vpVelocityTwistMatrix cVe(cMe) ;
-  task.set_cVe(cVe) ;
-
-  // Set the Jacobian (expressed in the end-effector frame)
-  vpMatrix eJe ;
-  robot.get_eJe(eJe) ;
-  task.set_eJe(eJe) ;
-
-  // we want to see a point on a point
-  for (i = 0 ; i < 4 ; i++)
-    task.addFeature(p[i],pd[i]) ;
-
-  // set the gain
-  task.setLambda(1) ;
-
-  // Display task information
-  task.print() ;
-
-  unsigned int iter=0 ;
-  // loop
-  while(iter++<1500)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
+    int i ;
+    vpServo task ;
+    vpSimulatorCamera robot ;
 
-    // Set the Jacobian (expressed in the end-effector frame)
-    // since q is modified eJe is modified
-    robot.get_eJe(eJe) ;
-    task.set_eJe(eJe) ;
 
-    // get the robot position
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Eye-in-hand task control,  articular velocity are computed" << std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task : servo 4 points " << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // sets the initial camera location with respect to the object
+    vpHomogeneousMatrix cMo ;
+    cMo[0][3] = 0.1 ;
+    cMo[1][3] = 0.2 ;
+    cMo[2][3] = 2 ;
+
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
     robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    wMo = wMc * cMo;
+
+    // sets the point coordinates in the object frame
+    vpPoint point[4] ;
+    point[0].setWorldCoordinates(-1,-1,0) ;
+    point[1].setWorldCoordinates(1,-1,0) ;
+    point[2].setWorldCoordinates(1,1,0) ;
+    point[3].setWorldCoordinates(-1,1,0) ;
 
-    // update new point position and corresponding features
+    // computes  the point coordinates in the camera frame and its 2D coordinates
     for (i = 0 ; i < 4 ; i++)
-    {
       point[i].track(cMo) ;
-      //retrieve x,y and Z of the vpPoint structure
-      vpFeatureBuilder::create(p[i],point[i])  ;
-    }
-    // since vpServo::MEAN interaction matrix is used, we need also to update the desired features at each iteration
+
+    // sets the desired position of the point
+    vpFeaturePoint p[4] ;
+    for (i = 0 ; i < 4 ; i++)
+      vpFeatureBuilder::create(p[i], point[i])  ;  //retrieve x,y and Z of the vpPoint structure
+
+    // sets the desired position of the point
+    vpFeaturePoint pd[4] ;
+
     pd[0].buildFrom(-0.1,-0.1, 1) ;
     pd[1].buildFrom( 0.1,-0.1, 1) ;
     pd[2].buildFrom( 0.1, 0.1, 1) ;
     pd[3].buildFrom(-0.1, 0.1, 1) ;
 
-    // compute the control law ") ;
-    v = task.computeControlLaw() ;
+    // define the task
+    // - we want an eye-in-hand control law
+    // - articular velocity are computed
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
+    task.setInteractionMatrixType(vpServo::MEAN) ;
 
-    // send the camera velocity to the controller ") ;
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    // Set the position of the camera in the end-effector frame
+    vpHomogeneousMatrix cMe ;
+    vpVelocityTwistMatrix cVe(cMe) ;
+    task.set_cVe(cVe) ;
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() << std::endl;
-  }
+    // Set the Jacobian (expressed in the end-effector frame)
+    vpMatrix eJe ;
+    robot.get_eJe(eJe) ;
+    task.set_eJe(eJe) ;
+
+    // we want to see a point on a point
+    for (i = 0 ; i < 4 ; i++)
+      task.addFeature(p[i],pd[i]) ;
 
-  // Display task information
-  task.print() ;
-  task.kill();
+    // set the gain
+    task.setLambda(1) ;
+
+    // Display task information
+    task.print() ;
+
+    unsigned int iter=0 ;
+    // loop
+    while(iter++<1500)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
+
+      // Set the Jacobian (expressed in the end-effector frame)
+      // since q is modified eJe is modified
+      robot.get_eJe(eJe) ;
+      task.set_eJe(eJe) ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // update new point position and corresponding features
+      for (i = 0 ; i < 4 ; i++)
+      {
+        point[i].track(cMo) ;
+        //retrieve x,y and Z of the vpPoint structure
+        vpFeatureBuilder::create(p[i],point[i])  ;
+      }
+      // since vpServo::MEAN interaction matrix is used, we need also to update the desired features at each iteration
+      pd[0].buildFrom(-0.1,-0.1, 1) ;
+      pd[1].buildFrom( 0.1,-0.1, 1) ;
+      pd[2].buildFrom( 0.1, 0.1, 1) ;
+      pd[3].buildFrom(-0.1, 0.1, 1) ;
+
+      // compute the control law ") ;
+      v = task.computeControlLaw() ;
+
+      // send the camera velocity to the controller ") ;
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() << std::endl;
+    }
+
+    // Display task information
+    task.print() ;
+    task.kill();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
+  }
 }
 
diff --git a/example/robot-simulator/camera/servoSimuFourPoints2DCamVelocityDisplay.cpp b/example/robot-simulator/camera/servoSimuFourPoints2DCamVelocityDisplay.cpp
index 1c63a68f..fd2272a0 100644
--- a/example/robot-simulator/camera/servoSimuFourPoints2DCamVelocityDisplay.cpp
+++ b/example/robot-simulator/camera/servoSimuFourPoints2DCamVelocityDisplay.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimuFourPoints2DCamVelocityDisplay.cpp 2503 2010-02-16 18:55:01Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -81,6 +81,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdh"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display);
+
 /*!
 
 Print the program options.
@@ -130,9 +133,9 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
@@ -140,7 +143,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -149,7 +152,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -159,183 +162,189 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 int
 main(int argc, const char ** argv)
 {
+  try {
+    bool opt_click_allowed = true;
+    bool opt_display = true;
 
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+    // Read the command line options
+    if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  // We open two displays, one for the internal camera view, the other one for
-  // the external view, using either X11, GTK or GDI.
+    // We open two displays, one for the internal camera view, the other one for
+    // the external view, using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX displayInt;
-  vpDisplayX displayExt;
+    vpDisplayX displayInt;
+    vpDisplayX displayExt;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK displayInt;
-  vpDisplayGTK displayExt;
+    vpDisplayGTK displayInt;
+    vpDisplayGTK displayExt;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI displayInt;
-  vpDisplayGDI displayExt;
+    vpDisplayGDI displayInt;
+    vpDisplayGDI displayExt;
 #endif
 
-  // open a display for the visualization
+    // open a display for the visualization
 
-  vpImage<unsigned char> Iint(300, 300, 0) ;
-  vpImage<unsigned char> Iext(300, 300, 0) ;
+    vpImage<unsigned char> Iint(300, 300, 0) ;
+    vpImage<unsigned char> Iext(300, 300, 0) ;
 
-  if (opt_display) {
-    displayInt.init(Iint,0,0, "Internal view") ;
-    displayExt.init(Iext,330,000, "External view") ;
+    if (opt_display) {
+      displayInt.init(Iint,0,0, "Internal view") ;
+      displayExt.init(Iext,330,000, "External view") ;
 
-  }
-  vpProjectionDisplay externalview ;
-
-  double px, py ; px = py = 500 ;
-  double u0, v0 ; u0 = 150, v0 = 160 ;
-
-  vpCameraParameters cam(px,py,u0,v0);
-
-  int i ;
-  vpServo task ;
-  vpSimulatorCamera robot ;
-
-  std::cout << std::endl ;
-  std::cout << "----------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Eye-in-hand task control, articular velocity are computed" 
-            << std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task : servo 4 points " << std::endl ;
-  std::cout << "----------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(-0.1,-0.1,1,
-                          vpMath::rad(40),  vpMath::rad(10),  vpMath::rad(60))   ;
-
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
-
-  vpHomogeneousMatrix cextMo(0,0,2,
-                             0,0,0) ;//vpMath::rad(40),  vpMath::rad(10),  vpMath::rad(60))   ;
-
-  // sets the point coordinates in the object frame
-  vpPoint point[4] ;
-  point[0].setWorldCoordinates(-0.1,-0.1,0) ;
-  point[1].setWorldCoordinates(0.1,-0.1,0) ;
-  point[2].setWorldCoordinates(0.1,0.1,0) ;
-  point[3].setWorldCoordinates(-0.1,0.1,0) ;
-
-  for (i = 0 ; i < 4 ; i++)
-    externalview.insert(point[i]) ;
-
-  // computes  the point coordinates in the camera frame and its 2D coordinates
-  for (i = 0 ; i < 4 ; i++)
-    point[i].track(cMo) ;
-
-  // sets the desired position of the point
-  vpFeaturePoint p[4] ;
-  for (i = 0 ; i < 4 ; i++)
-    vpFeatureBuilder::create(p[i],point[i])  ;  //retrieve x,y and Z of the vpPoint structure
-
-  // sets the desired position of the feature point s*
-  vpFeaturePoint pd[4] ;
-
-  pd[0].buildFrom(-0.1,-0.1, 1) ;
-  pd[1].buildFrom( 0.1,-0.1, 1) ;
-  pd[2].buildFrom( 0.1, 0.1, 1) ;
-  pd[3].buildFrom(-0.1, 0.1, 1) ;
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - articular velocity are computed
-  task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
-  task.setInteractionMatrixType(vpServo::MEAN) ;
-
-  // Set the position of the camera in the end-effector frame ") ;
-  vpHomogeneousMatrix cMe ;
-  vpVelocityTwistMatrix cVe(cMe) ;
-  task.set_cVe(cVe) ;
-
-  // Set the Jacobian (expressed in the end-effector frame)
-  vpMatrix eJe ;
-  robot.get_eJe(eJe) ;
-  task.set_eJe(eJe) ;
-
-  // we want to see a point on a point
-  for (i = 0 ; i < 4 ; i++)
-    task.addFeature(p[i],pd[i]) ;
-
-  // set the gain
-  task.setLambda(1) ;
-
-  // Display task information " ) ;
-  task.print() ;
-
-  unsigned int iter=0 ;
-  // loop
-  while(iter++<200)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
+    }
+    vpProjectionDisplay externalview ;
 
-    // Set the Jacobian (expressed in the end-effector frame)
-    // since q is modified eJe is modified
-    robot.get_eJe(eJe) ;
-    task.set_eJe(eJe) ;
+    double px, py ; px = py = 500 ;
+    double u0, v0 ; u0 = 150, v0 = 160 ;
 
-    // get the robot position
+    vpCameraParameters cam(px,py,u0,v0);
+
+    int i ;
+    vpServo task ;
+    vpSimulatorCamera robot ;
+
+    std::cout << std::endl ;
+    std::cout << "----------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Eye-in-hand task control, articular velocity are computed"
+              << std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task : servo 4 points " << std::endl ;
+    std::cout << "----------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(-0.1,-0.1,1,
+                            vpMath::rad(40),  vpMath::rad(10),  vpMath::rad(60))   ;
+
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
     robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    wMo = wMc * cMo;
+
+    vpHomogeneousMatrix cextMo(0,0,2,
+                               0,0,0) ;//vpMath::rad(40),  vpMath::rad(10),  vpMath::rad(60))   ;
+
+    // sets the point coordinates in the object frame
+    vpPoint point[4] ;
+    point[0].setWorldCoordinates(-0.1,-0.1,0) ;
+    point[1].setWorldCoordinates(0.1,-0.1,0) ;
+    point[2].setWorldCoordinates(0.1,0.1,0) ;
+    point[3].setWorldCoordinates(-0.1,0.1,0) ;
 
-    // update new point position and corresponding features
     for (i = 0 ; i < 4 ; i++)
-    {
+      externalview.insert(point[i]) ;
+
+    // computes  the point coordinates in the camera frame and its 2D coordinates
+    for (i = 0 ; i < 4 ; i++)
       point[i].track(cMo) ;
-      //retrieve x,y and Z of the vpPoint structure
-      vpFeatureBuilder::create(p[i],point[i])  ;
-    }
-    // since vpServo::MEAN interaction matrix is used, we need also to update the desired features at each iteration
+
+    // sets the desired position of the point
+    vpFeaturePoint p[4] ;
+    for (i = 0 ; i < 4 ; i++)
+      vpFeatureBuilder::create(p[i],point[i])  ;  //retrieve x,y and Z of the vpPoint structure
+
+    // sets the desired position of the feature point s*
+    vpFeaturePoint pd[4] ;
+
     pd[0].buildFrom(-0.1,-0.1, 1) ;
     pd[1].buildFrom( 0.1,-0.1, 1) ;
     pd[2].buildFrom( 0.1, 0.1, 1) ;
     pd[3].buildFrom(-0.1, 0.1, 1) ;
 
-    if (opt_display) {
-      vpDisplay::display(Iint) ;
-      vpDisplay::display(Iext) ;
-      vpServoDisplay::display(task,cam,Iint) ;
-      externalview.display(Iext,cextMo, cMo, cam, vpColor::green) ;
-      vpDisplay::flush(Iint);
-      vpDisplay::flush(Iext);
-    }
+    // define the task
+    // - we want an eye-in-hand control law
+    // - articular velocity are computed
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
+    task.setInteractionMatrixType(vpServo::MEAN) ;
 
-    // compute the control law
-    v = task.computeControlLaw() ;
+    // Set the position of the camera in the end-effector frame ") ;
+    vpHomogeneousMatrix cMe ;
+    vpVelocityTwistMatrix cVe(cMe) ;
+    task.set_cVe(cVe) ;
 
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    // Set the Jacobian (expressed in the end-effector frame)
+    vpMatrix eJe ;
+    robot.get_eJe(eJe) ;
+    task.set_eJe(eJe) ;
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
-  }
+    // we want to see a point on a point
+    for (i = 0 ; i < 4 ; i++)
+      task.addFeature(p[i],pd[i]) ;
+
+    // set the gain
+    task.setLambda(1) ;
 
-  // Display task information
-  task.print() ;
-  task.kill();
+    // Display task information " ) ;
+    task.print() ;
 
-  std::cout <<"Final robot position with respect to the object frame:\n";
-  cMo.print();
+    unsigned int iter=0 ;
+    // loop
+    while(iter++<200)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
+
+      // Set the Jacobian (expressed in the end-effector frame)
+      // since q is modified eJe is modified
+      robot.get_eJe(eJe) ;
+      task.set_eJe(eJe) ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // update new point position and corresponding features
+      for (i = 0 ; i < 4 ; i++)
+      {
+        point[i].track(cMo) ;
+        //retrieve x,y and Z of the vpPoint structure
+        vpFeatureBuilder::create(p[i],point[i])  ;
+      }
+      // since vpServo::MEAN interaction matrix is used, we need also to update the desired features at each iteration
+      pd[0].buildFrom(-0.1,-0.1, 1) ;
+      pd[1].buildFrom( 0.1,-0.1, 1) ;
+      pd[2].buildFrom( 0.1, 0.1, 1) ;
+      pd[3].buildFrom(-0.1, 0.1, 1) ;
+
+      if (opt_display) {
+        vpDisplay::display(Iint) ;
+        vpDisplay::display(Iext) ;
+        vpServoDisplay::display(task,cam,Iint) ;
+        externalview.display(Iext,cextMo, cMo, cam, vpColor::green) ;
+        vpDisplay::flush(Iint);
+        vpDisplay::flush(Iext);
+      }
+
+      // compute the control law
+      v = task.computeControlLaw() ;
+
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    }
 
-  if (opt_display && opt_click_allowed) {
-    // suppressed for automate test
-    std::cout << "\n\nClick in the internal view window to end..." << std::endl;
-    vpDisplay::getClick(Iint) ;
+    // Display task information
+    task.print() ;
+    task.kill();
+
+    std::cout <<"Final robot position with respect to the object frame:\n";
+    cMo.print();
+
+    if (opt_display && opt_click_allowed) {
+      // suppressed for automate test
+      std::cout << "\n\nClick in the internal view window to end..." << std::endl;
+      vpDisplay::getClick(Iint) ;
+    }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
diff --git a/example/robot-simulator/camera/servoSimuFourPoints2DPolarCamVelocityDisplay.cpp b/example/robot-simulator/camera/servoSimuFourPoints2DPolarCamVelocityDisplay.cpp
index a9858be8..5ab53ca9 100644
--- a/example/robot-simulator/camera/servoSimuFourPoints2DPolarCamVelocityDisplay.cpp
+++ b/example/robot-simulator/camera/servoSimuFourPoints2DPolarCamVelocityDisplay.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimuFourPoints2DPolarCamVelocityDisplay.cpp 2503 2010-02-16 18:55:01Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -86,6 +86,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdh"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display);
+
 /*!
 
 Print the program options.
@@ -135,9 +138,9 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
@@ -145,7 +148,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -154,7 +157,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -164,334 +167,340 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 int
 main(int argc, const char ** argv)
 {
-
-  // Log file creation in /tmp/$USERNAME/log.dat
-  // This file contains by line:
-  // - the 6 computed camera velocities (m/s, rad/s) to achieve the task
-  // - the 6 mesured camera velocities (m/s, rad/s)
-  // - the 6 mesured joint positions (m, rad)
-  // - the 8 values of s - s*
-  std::string username;
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Create a log filename to save velocities...
-  std::string logdirname;
-#ifdef WIN32
-  logdirname ="C:/temp/" + username;
+  try {
+    // Log file creation in /tmp/$USERNAME/log.dat
+    // This file contains by line:
+    // - the 6 computed camera velocities (m/s, rad/s) to achieve the task
+    // - the 6 mesured camera velocities (m/s, rad/s)
+    // - the 6 mesured joint positions (m, rad)
+    // - the 8 values of s - s*
+    std::string username;
+    // Get the user login name
+    vpIoTools::getUserName(username);
+
+    // Create a log filename to save velocities...
+    std::string logdirname;
+#if defined(_WIN32)
+    logdirname ="C:/temp/" + username;
 #else
-  logdirname ="/tmp/" + username;
+    logdirname ="/tmp/" + username;
 #endif
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(logdirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(logdirname);
-    }
-    catch (...) {
-      std::cerr << std::endl
-                << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << logdirname << std::endl;
-      exit(-1);
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(logdirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(logdirname);
+      }
+      catch (...) {
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << logdirname << std::endl;
+        exit(-1);
+      }
     }
-  }
-  std::string logfilename;
-  logfilename = logdirname + "/log.dat";
+    std::string logfilename;
+    logfilename = logdirname + "/log.dat";
 
-  // Open the log file name
-  std::ofstream flog(logfilename.c_str());
+    // Open the log file name
+    std::ofstream flog(logfilename.c_str());
 
 
-  bool opt_click_allowed = true;
-  bool opt_display = true;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+    // Read the command line options
+    if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  // We open two displays, one for the internal camera view, the other one for
-  // the external view, using either X11, GTK or GDI.
+    // We open two displays, one for the internal camera view, the other one for
+    // the external view, using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX displayInt;
-  vpDisplayX displayExt;
+    vpDisplayX displayInt;
+    vpDisplayX displayExt;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK displayInt;
-  vpDisplayGTK displayExt;
+    vpDisplayGTK displayInt;
+    vpDisplayGTK displayExt;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI displayInt;
-  vpDisplayGDI displayExt;
+    vpDisplayGDI displayInt;
+    vpDisplayGDI displayExt;
 #endif
 
-  // open a display for the visualization
+    // open a display for the visualization
 
-  vpImage<unsigned char> Iint(300, 300, 0) ;
-  vpImage<unsigned char> Iext(300, 300, 0) ;
+    vpImage<unsigned char> Iint(300, 300, 0) ;
+    vpImage<unsigned char> Iext(300, 300, 0) ;
 
-  if (opt_display) {
-    displayInt.init(Iint,0,0, "Internal view") ;
-    displayExt.init(Iext,330,000, "External view") ;
+    if (opt_display) {
+      displayInt.init(Iint,0,0, "Internal view") ;
+      displayExt.init(Iext,330,000, "External view") ;
 
-  }
-  vpProjectionDisplay externalview ;
+    }
+    vpProjectionDisplay externalview ;
 
-  double px, py ; px = py = 500 ;
-  double u0, v0 ; u0 = 150, v0 = 160 ;
+    double px, py ; px = py = 500 ;
+    double u0, v0 ; u0 = 150, v0 = 160 ;
 
-  vpCameraParameters cam(px,py,u0,v0);
+    vpCameraParameters cam(px,py,u0,v0);
 
-  int i ;
-  vpServo task ;
-  vpSimulatorCamera robot ;
+    int i ;
+    vpServo task ;
+    vpSimulatorCamera robot ;
 
 
-  std::cout << std::endl ;
-  std::cout << "----------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Eye-in-hand task control, articular velocity are computed" 
-            << std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task : servo 4 points " << std::endl ;
-  std::cout << "----------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
+    std::cout << std::endl ;
+    std::cout << "----------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Eye-in-hand task control, articular velocity are computed"
+              << std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task : servo 4 points " << std::endl ;
+    std::cout << "----------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
 
-  // #define TRANS_Z_PURE
-  // #define TRANS_X_PURE
-  // #define ROT_Z_PURE
-  // #define ROT_X_PURE
+    // #define TRANS_Z_PURE
+    // #define TRANS_X_PURE
+    // #define ROT_Z_PURE
+    // #define ROT_X_PURE
 #define COMPLEX
-  //#define PROBLEM
+    //#define PROBLEM
 
 #if defined(TRANS_Z_PURE)
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(0, 0, 3,
-                          vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
-  // sets the desired camera location
-  vpHomogeneousMatrix cMod(0, 0, 2,
-                           vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(0, 0, 3,
+                            vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
+    // sets the desired camera location
+    vpHomogeneousMatrix cMod(0, 0, 2,
+                             vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
 #elif defined(TRANS_X_PURE)
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(0.3, 0.3, 3,
-                          vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
-  // sets the desired camera location
-  vpHomogeneousMatrix cMod(0.5, 0.3, 3,
-                           vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(0.3, 0.3, 3,
+                            vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
+    // sets the desired camera location
+    vpHomogeneousMatrix cMod(0.5, 0.3, 3,
+                             vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
 
 #elif defined(ROT_Z_PURE)
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(0, 0, 3,
-                          vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
-  // sets the desired camera location
-  vpHomogeneousMatrix cMod(0, 0, 3,
-                           vpMath::rad(0), vpMath::rad(0), vpMath::rad(180));
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(0, 0, 3,
+                            vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
+    // sets the desired camera location
+    vpHomogeneousMatrix cMod(0, 0, 3,
+                             vpMath::rad(0), vpMath::rad(0), vpMath::rad(180));
 
 #elif defined(ROT_X_PURE)
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(0, 0, 3,
-                          vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
-  // sets the desired camera location
-  vpHomogeneousMatrix cMod(0, 0, 3,
-                           vpMath::rad(45), vpMath::rad(0), vpMath::rad(0));
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(0, 0, 3,
+                            vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
+    // sets the desired camera location
+    vpHomogeneousMatrix cMod(0, 0, 3,
+                             vpMath::rad(45), vpMath::rad(0), vpMath::rad(0));
 
 #elif defined(COMPLEX)
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(0.2, 0.2, 3,
-                          vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
-  // sets the desired camera location
-  vpHomogeneousMatrix cMod(0, 0, 2.5,
-                           vpMath::rad(45), vpMath::rad(10), vpMath::rad(30));
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(0.2, 0.2, 3,
+                            vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
+    // sets the desired camera location
+    vpHomogeneousMatrix cMod(0, 0, 2.5,
+                             vpMath::rad(45), vpMath::rad(10), vpMath::rad(30));
 
 #elif defined(PROBLEM)
-  // Bad behavior with an interaction matrix computed from the desired features
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(0.2, 0.2, 3,
-                          vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
-  // sets the desired camera location
-  vpHomogeneousMatrix cMod(0.4, 0.2, 3,
-                           vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
+    // Bad behavior with an interaction matrix computed from the desired features
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(0.2, 0.2, 3,
+                            vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
+    // sets the desired camera location
+    vpHomogeneousMatrix cMod(0.4, 0.2, 3,
+                             vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
 
 #endif
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
-
-  vpHomogeneousMatrix cextMo(0,0,6,
-                             vpMath::rad(40),  vpMath::rad(10),  vpMath::rad(60))   ;
-
-
-  // sets the point coordinates in the object frame
-  vpPoint point[4] ;
-  point[0].setWorldCoordinates(-0.25,-0.25,0) ;
-  point[1].setWorldCoordinates(0.25,-0.25,0) ;
-  point[2].setWorldCoordinates(0.25,0.25,0) ;
-  point[3].setWorldCoordinates(-0.25,0.25,0) ;
-
-
-  for (i = 0 ; i < 4 ; i++)
-    externalview.insert(point[i]) ;
-
-  // sets the desired position of the feature point s*"
-  vpFeaturePointPolar pd[4] ;
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc) ;
+    wMo = wMc * cMo;
 
-  // computes the point coordinates in the desired camera frame and
-  // its 2D coordinates
-  for (i = 0 ; i < 4 ; i++) {
-    point[i].track(cMod);
-    // Computes the polar coordinates from the image point
-    // cartesian coordinates
-    vpFeatureBuilder::create(pd[i],point[i]); 
-  }
+    vpHomogeneousMatrix cextMo(0,0,6,
+                               vpMath::rad(40),  vpMath::rad(10),  vpMath::rad(60))   ;
 
 
-  // computes the point coordinates in the camera frame and its 2D
-  // coordinates
-  for (i = 0 ; i < 4 ; i++)
-    point[i].track(cMo) ;
+    // sets the point coordinates in the object frame
+    vpPoint point[4] ;
+    point[0].setWorldCoordinates(-0.25,-0.25,0) ;
+    point[1].setWorldCoordinates(0.25,-0.25,0) ;
+    point[2].setWorldCoordinates(0.25,0.25,0) ;
+    point[3].setWorldCoordinates(-0.25,0.25,0) ;
 
-  // sets the desired position of the point
-  vpFeaturePointPolar p[4] ;
-  for (i = 0 ; i < 4 ; i++) {
-    // retrieve x,y and Z of the vpPoint structure to initialize the
-    // visual feature
-    vpFeatureBuilder::create(p[i], point[i]);  
-  }
 
-  // Define the task;
-  // - we want an eye-in-hand control law
-  // - articular velocity are computed
-  task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
-  //  task.setInteractionMatrixType(vpServo::MEAN) ;
-  //  task.setInteractionMatrixType(vpServo::DESIRED) ;
-  task.setInteractionMatrixType(vpServo::CURRENT) ;
+    for (i = 0 ; i < 4 ; i++)
+      externalview.insert(point[i]) ;
 
+    // sets the desired position of the feature point s*"
+    vpFeaturePointPolar pd[4] ;
 
-  // Set the position of the camera in the end-effector frame
-  vpHomogeneousMatrix cMe ;
-  vpVelocityTwistMatrix cVe(cMe) ;
-  task.set_cVe(cVe) ;
-
-  // Set the Jacobian (expressed in the end-effector frame)
-  vpMatrix eJe ;
-  robot.get_eJe(eJe) ;
-  task.set_eJe(eJe) ;
+    // computes the point coordinates in the desired camera frame and
+    // its 2D coordinates
+    for (i = 0 ; i < 4 ; i++) {
+      point[i].track(cMod);
+      // Computes the polar coordinates from the image point
+      // cartesian coordinates
+      vpFeatureBuilder::create(pd[i],point[i]);
+    }
 
-  // we want to see a point on a point
-  for (i = 0 ; i < 4 ; i++)
-    task.addFeature(p[i],pd[i]) ;
 
-  // set the gain
-  task.setLambda(1) ;
+    // computes the point coordinates in the camera frame and its 2D
+    // coordinates
+    for (i = 0 ; i < 4 ; i++)
+      point[i].track(cMo) ;
 
+    // sets the desired position of the point
+    vpFeaturePointPolar p[4] ;
+    for (i = 0 ; i < 4 ; i++) {
+      // retrieve x,y and Z of the vpPoint structure to initialize the
+      // visual feature
+      vpFeatureBuilder::create(p[i], point[i]);
+    }
 
-  std::cout << "\nDisplay task information: " << std::endl;
-  task.print() ;
+    // Define the task;
+    // - we want an eye-in-hand control law
+    // - articular velocity are computed
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
+    //  task.setInteractionMatrixType(vpServo::MEAN) ;
+    //  task.setInteractionMatrixType(vpServo::DESIRED) ;
+    task.setInteractionMatrixType(vpServo::CURRENT) ;
 
-  unsigned int iter=0 ;
-  // loop
-  while(iter++ < 200) {
-    std::cout << "---------------------------------------------" 
-              << iter <<std::endl ;
-    vpColVector v ;
 
+    // Set the position of the camera in the end-effector frame
+    vpHomogeneousMatrix cMe ;
+    vpVelocityTwistMatrix cVe(cMe) ;
+    task.set_cVe(cVe) ;
 
     // Set the Jacobian (expressed in the end-effector frame)
-    // Since q is modified eJe is modified
+    vpMatrix eJe ;
     robot.get_eJe(eJe) ;
     task.set_eJe(eJe) ;
 
-    // get the robot position
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
-
-    // Compute new point position
-    for (i = 0 ; i < 4 ; i++) {
-      point[i].track(cMo) ;
-      // retrieve x,y and Z of the vpPoint structure to compute the feature
-      vpFeatureBuilder::create(p[i],point[i])  ;
-    }
-
-    if (opt_display) {
-      vpDisplay::display(Iint) ;
-      vpDisplay::display(Iext) ;
+    // we want to see a point on a point
+    for (i = 0 ; i < 4 ; i++)
+      task.addFeature(p[i],pd[i]) ;
+
+    // set the gain
+    task.setLambda(1) ;
+
+
+    std::cout << "\nDisplay task information: " << std::endl;
+    task.print() ;
+
+    unsigned int iter=0 ;
+    // loop
+    while(iter++ < 200) {
+      std::cout << "---------------------------------------------"
+                << iter <<std::endl ;
+      vpColVector v ;
+
+
+      // Set the Jacobian (expressed in the end-effector frame)
+      // Since q is modified eJe is modified
+      robot.get_eJe(eJe) ;
+      task.set_eJe(eJe) ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // Compute new point position
+      for (i = 0 ; i < 4 ; i++) {
+        point[i].track(cMo) ;
+        // retrieve x,y and Z of the vpPoint structure to compute the feature
+        vpFeatureBuilder::create(p[i],point[i])  ;
+      }
+
+      if (opt_display) {
+        vpDisplay::display(Iint) ;
+        vpDisplay::display(Iext) ;
+
+        vpServoDisplay::display(task,cam,Iint) ;
+        externalview.display(Iext,cextMo, cMo, cam, vpColor::green);
+        vpDisplay::flush(Iint);
+        vpDisplay::flush(Iext);
+      }
+
+      // Compute the control law
+      v = task.computeControlLaw() ;
+
+      if (iter==1) {
+        std::cout << "Display task information: " << std::endl;
+        task.print() ;
+      }
+
+      task.print(vpServo::FEATURE_CURRENT);
+      task.print(vpServo::FEATURE_DESIRED);
+
+      // Send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+      // Save velocities applied to the robot in the log file
+      // v[0], v[1], v[2] correspond to camera translation velocities in m/s
+      // v[3], v[4], v[5] correspond to camera rotation velocities in rad/s
+      flog << v[0] << " " << v[1] << " " << v[2] << " "
+                   << v[3] << " " << v[4] << " " << v[5] << " ";
+
+      std::cout << "v: " << v.t() << std::endl;
+
+      std::cout << "|| s - s* || = "<< ( task.getError() ).sumSquare() << std::endl;
+
+      // Save feature error (s-s*) for the 4 feature points. For each feature
+      // point, we have 2 errors (along x and y axis).  This error is expressed
+      // in meters in the camera frame
+      flog << ( task.getError() ).t() << " ";// s-s* for point 4
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+
+      // Save current visual feature s = (rho,theta)
+      for (i = 0 ; i < 4 ; i++) {
+        flog << p[i].get_rho() << " " <<  p[i].get_theta() << " ";
+      }
+      // Save current position of the points
+      for (i = 0 ; i < 4 ; i++) {
+        flog << point[i].get_x() << " " <<  point[i].get_y() << " ";
+      }
+      flog << std::endl;
+
+      if (iter == 1) {
+        vpImagePoint ip;
+        ip.set_i( 10 );
+        ip.set_j( 10 );
+
+        std::cout << "\nClick in the internal camera view to continue..." << std::endl;
+        vpDisplay::displayCharString(Iint, ip,
+                                     "A click to continue...",vpColor::red);
+        vpDisplay::flush(Iint);
+        vpDisplay::getClick(Iint);
+      }
 
-      vpServoDisplay::display(task,cam,Iint) ;
-      externalview.display(Iext,cextMo, cMo, cam, vpColor::green);
-      vpDisplay::flush(Iint);
-      vpDisplay::flush(Iext);
     }
 
-    // Compute the control law
-    v = task.computeControlLaw() ;
-
-    if (iter==1) {
-      std::cout << "Display task information: " << std::endl;
-      task.print() ;
-    }
 
-    task.print(vpServo::FEATURE_CURRENT);
-    task.print(vpServo::FEATURE_DESIRED);
+    flog.close() ; // Close the log file
 
-    // Send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v);
-    // Save velocities applied to the robot in the log file
-    // v[0], v[1], v[2] correspond to camera translation velocities in m/s
-    // v[3], v[4], v[5] correspond to camera rotation velocities in rad/s
-    flog << v[0] << " " << v[1] << " " << v[2] << " "
-         << v[3] << " " << v[4] << " " << v[5] << " ";
+    // Display task information
+    task.print() ;
 
-    std::cout << "v: " << v.t() << std::endl;
+    // Kill the task
+    task.kill();
 
-    std::cout << "|| s - s* || = "<< ( task.getError() ).sumSquare() << std::endl;
+    std::cout <<"Final robot position with respect to the object frame:\n";
+    cMo.print();
 
-    // Save feature error (s-s*) for the 4 feature points. For each feature
-    // point, we have 2 errors (along x and y axis).  This error is expressed
-    // in meters in the camera frame
-    flog << ( task.getError() ).t() << " ";// s-s* for point 4
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
-
-    // Save current visual feature s = (rho,theta)
-    for (i = 0 ; i < 4 ; i++) {
-      flog << p[i].get_rho() << " " <<  p[i].get_theta() << " ";
+    if (opt_display && opt_click_allowed) {
+      // suppressed for automate test
+      std::cout << "\n\nClick in the internal view to end..." << std::endl;
+      vpDisplay::getClick(Iint) ;
     }
-    // Save current position of the points
-    for (i = 0 ; i < 4 ; i++) {
-      flog << point[i].get_x() << " " <<  point[i].get_y() << " ";
-    }
-    flog << std::endl;
-
-    if (iter == 1) {
-      vpImagePoint ip;
-      ip.set_i( 10 );
-      ip.set_j( 10 );
-
-      std::cout << "\nClick in the internal camera view to continue..." << std::endl;
-      vpDisplay::displayCharString(Iint, ip, 
-                                   "A click to continue...",vpColor::red);
-      vpDisplay::flush(Iint);
-      vpDisplay::getClick(Iint);
-    }
-
+    return 0;
   }
-
-  
-  flog.close() ; // Close the log file
-  
-  // Display task information
-  task.print() ;
-  
-  // Kill the task
-  task.kill();
-
-  std::cout <<"Final robot position with respect to the object frame:\n";
-  cMo.print();
-
-  if (opt_display && opt_click_allowed) {
-    // suppressed for automate test
-    std::cout << "\n\nClick in the internal view to end..." << std::endl;
-    vpDisplay::getClick(Iint) ;
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
diff --git a/example/robot-simulator/camera/servoSimuLine2DCamVelocityDisplay.cpp b/example/robot-simulator/camera/servoSimuLine2DCamVelocityDisplay.cpp
index 888ca654..00649106 100644
--- a/example/robot-simulator/camera/servoSimuLine2DCamVelocityDisplay.cpp
+++ b/example/robot-simulator/camera/servoSimuLine2DCamVelocityDisplay.cpp
@@ -4,7 +4,7 @@
  * $Id: servoSimuLine2DCamVelocityDisplay.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -76,6 +76,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdh"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display);
+
 /*!
 
 Print the program options.
@@ -126,9 +129,9 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
@@ -136,7 +139,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -145,7 +148,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -156,158 +159,165 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 int
 main(int argc, const char ** argv)
 {
-  bool opt_display = true;
-  bool opt_click_allowed = true;
+  try {
+    bool opt_display = true;
+    bool opt_click_allowed = true;
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+    // Read the command line options
+    if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  vpImage<unsigned char> I(512,512,0) ;
+    vpImage<unsigned char> I(512,512,0) ;
 
-  // We open a window using either X11, GTK or GDI.
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
 
-  if (opt_display) {
-    try{
-      // Display size is automatically defined by the image (I) size
-      display.init(I, 100, 100,"Camera view...") ;
-      // Display the image
-      // The image class has a member that specify a pointer toward
-      // the display that has been initialized in the display declaration
-      // therefore is is no longuer necessary to make a reference to the
-      // display variable.
-      vpDisplay::display(I) ;
-      vpDisplay::flush(I) ;
-    }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
+    if (opt_display) {
+      try{
+        // Display size is automatically defined by the image (I) size
+        display.init(I, 100, 100,"Camera view...") ;
+        // Display the image
+        // The image class has a member that specify a pointer toward
+        // the display that has been initialized in the display declaration
+        // therefore is is no longuer necessary to make a reference to the
+        // display variable.
+        vpDisplay::display(I) ;
+        vpDisplay::flush(I) ;
+      }
+      catch(...)
+      {
+        vpERROR_TRACE("Error while displaying the image") ;
+        exit(-1);
+      }
     }
-  }
 
-  double px, py ; px = py = 600 ;
-  double u0, v0 ; u0 = v0 = 256 ;
-
-  vpCameraParameters cam(px,py,u0,v0);
-
-  vpServo task ;
-  vpSimulatorCamera robot ;
-
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(-0.2,0.1,1,
-                          vpMath::rad(5),  vpMath::rad(5),  vpMath::rad(90));
-
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
-
-  // sets the final camera location (for simulation purpose)
-  vpHomogeneousMatrix cMod(0,0,1,
-                           vpMath::rad(0),  vpMath::rad(0),  vpMath::rad(0));
-
-  // sets the line coordinates (2 planes) in the world frame
-  vpColVector plane1(4) ;
-  vpColVector plane2(4) ;
-  plane1[0] = 0;  // z = 0
-  plane1[1] = 0;
-  plane1[2] = 1;
-  plane1[3] = 0;
-  plane2[0] = 0; // y  =0
-  plane2[1] = 1;
-  plane2[2] = 0;
-  plane2[3] = 0;
-
-  vpLine line ;
-  line.setWorldCoordinates(plane1, plane2) ;
-
-  // sets the desired position of the visual feature
-  line.track(cMod) ;
-  line.print() ;
-
-  vpFeatureLine ld ;
-  vpFeatureBuilder::create(ld,line)  ;
-
-  // computes the line coordinates in the camera frame and its 2D coordinates
-  // sets the current position of the visual feature
-  line.track(cMo) ;
-  line.print() ;
-
-  vpFeatureLine l ;
-  vpFeatureBuilder::create(l,line)  ;
-  l.print() ;
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - robot is controlled in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
-
-  // we want to see a line on a line
-
-  task.addFeature(l,ld) ;
-  vpDisplay::display(I) ;
-  vpServoDisplay::display(task,cam,I) ;
-  vpDisplay::flush(I) ; 
-
-  // set the gain
-  task.setLambda(1) ;
-  // Display task information " ) ;
-  task.print() ;
-
-  if (opt_display && opt_click_allowed) {
-    std::cout << "\n\nClick in the camera view window to start..." << std::endl;
-    vpDisplay::getClick(I) ;
-  }
+    double px, py ; px = py = 600 ;
+    double u0, v0 ; u0 = v0 = 256 ;
 
-  unsigned int iter=0 ;
-  // loop
-  while(iter++<200)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
+    vpCameraParameters cam(px,py,u0,v0);
 
-    // get the robot position
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    vpServo task ;
+    vpSimulatorCamera robot ;
 
-    // new line position
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(-0.2,0.1,1,
+                            vpMath::rad(5),  vpMath::rad(5),  vpMath::rad(90));
+
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc) ;
+    wMo = wMc * cMo;
+
+    // sets the final camera location (for simulation purpose)
+    vpHomogeneousMatrix cMod(0,0,1,
+                             vpMath::rad(0),  vpMath::rad(0),  vpMath::rad(0));
+
+    // sets the line coordinates (2 planes) in the world frame
+    vpColVector plane1(4) ;
+    vpColVector plane2(4) ;
+    plane1[0] = 0;  // z = 0
+    plane1[1] = 0;
+    plane1[2] = 1;
+    plane1[3] = 0;
+    plane2[0] = 0; // y  =0
+    plane2[1] = 1;
+    plane2[2] = 0;
+    plane2[3] = 0;
+
+    vpLine line ;
+    line.setWorldCoordinates(plane1, plane2) ;
+
+    // sets the desired position of the visual feature
+    line.track(cMod) ;
+    line.print() ;
+
+    vpFeatureLine ld ;
+    vpFeatureBuilder::create(ld,line)  ;
+
+    // computes the line coordinates in the camera frame and its 2D coordinates
+    // sets the current position of the visual feature
     line.track(cMo) ;
-    // retrieve x,y and Z of the vpLine structure
-    vpFeatureBuilder::create(l,line);
+    line.print() ;
 
-    if (opt_display) {
-      vpDisplay::display(I) ;
-      vpServoDisplay::display(task,cam,I) ;
-      vpDisplay::flush(I) ;
+    vpFeatureLine l ;
+    vpFeatureBuilder::create(l,line)  ;
+    l.print() ;
+
+    // define the task
+    // - we want an eye-in-hand control law
+    // - robot is controlled in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
+
+    // we want to see a line on a line
+
+    task.addFeature(l,ld) ;
+    vpDisplay::display(I) ;
+    vpServoDisplay::display(task,cam,I) ;
+    vpDisplay::flush(I) ;
+
+    // set the gain
+    task.setLambda(1) ;
+    // Display task information " ) ;
+    task.print() ;
+
+    if (opt_display && opt_click_allowed) {
+      std::cout << "\n\nClick in the camera view window to start..." << std::endl;
+      vpDisplay::getClick(I) ;
     }
 
-    // compute the control law
-    v = task.computeControlLaw() ;
+    unsigned int iter=0 ;
+    // loop
+    while(iter++<200)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
 
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
-  }
+      // new line position
+      line.track(cMo) ;
+      // retrieve x,y and Z of the vpLine structure
+      vpFeatureBuilder::create(l,line);
 
-  if (opt_display && opt_click_allowed) {
-    std::cout << "\nClick in the camera view window to end..." << std::endl;
-    vpDisplay::getClick(I) ;
-  }
+      if (opt_display) {
+        vpDisplay::display(I) ;
+        vpServoDisplay::display(task,cam,I) ;
+        vpDisplay::flush(I) ;
+      }
+
+      // compute the control law
+      v = task.computeControlLaw() ;
 
-  // Display task information
-  task.print() ;
-  task.kill();
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    }
+
+    if (opt_display && opt_click_allowed) {
+      std::cout << "\nClick in the camera view window to end..." << std::endl;
+      vpDisplay::getClick(I) ;
+    }
+
+    // Display task information
+    task.print() ;
+    task.kill();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 #else
diff --git a/example/robot-simulator/camera/servoSimuPoint2DCamVelocity1.cpp b/example/robot-simulator/camera/servoSimuPoint2DCamVelocity1.cpp
index d28e601b..d1066f21 100644
--- a/example/robot-simulator/camera/servoSimuPoint2DCamVelocity1.cpp
+++ b/example/robot-simulator/camera/servoSimuPoint2DCamVelocity1.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimuPoint2DCamVelocity1.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -62,6 +62,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -103,15 +106,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -120,7 +123,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -130,83 +133,90 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  vpServo task ;
-  vpSimulatorCamera robot ;
+    vpServo task ;
+    vpSimulatorCamera robot ;
 
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo ;
-  cMo[0][3] = 0.1 ;
-  cMo[1][3] = 0.2 ;
-  cMo[2][3] = 2 ;
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo ;
+    cMo[0][3] = 0.1 ;
+    cMo[1][3] = 0.2 ;
+    cMo[2][3] = 2 ;
 
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc) ;
+    wMo = wMc * cMo;
 
-  // sets the point coordinates in the world frame
-  vpPoint point ;
-  point.setWorldCoordinates(0,0,0) ;
+    // sets the point coordinates in the world frame
+    vpPoint point ;
+    point.setWorldCoordinates(0,0,0) ;
 
-  // computes the point coordinates in the camera frame and its 2D coordinates
-  point.track(cMo) ;
+    // computes the point coordinates in the camera frame and its 2D coordinates
+    point.track(cMo) ;
 
-  // sets the current position of the visual feature
-  vpFeaturePoint p ;
-  vpFeatureBuilder::create(p,point)  ;  //retrieve x,y and Z of the vpPoint structure
+    // sets the current position of the visual feature
+    vpFeaturePoint p ;
+    vpFeatureBuilder::create(p,point)  ;  //retrieve x,y and Z of the vpPoint structure
 
-  // sets the desired position of the visual feature
-  vpFeaturePoint pd ;
-  pd.buildFrom(0,0,1) ; // buildFrom(x,y,Z) ;
+    // sets the desired position of the visual feature
+    vpFeaturePoint pd ;
+    pd.buildFrom(0,0,1) ; // buildFrom(x,y,Z) ;
 
-  // define the task
-  // - we want an eye-in-hand control law
-  // - robot is controlled in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
+    // define the task
+    // - we want an eye-in-hand control law
+    // - robot is controlled in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
 
-  // we want to see a point on a point
-  std::cout << std::endl ;
-  task.addFeature(p,pd) ;
+    // we want to see a point on a point
+    std::cout << std::endl ;
+    task.addFeature(p,pd) ;
 
-  // set the gain
-  task.setLambda(1) ;
+    // set the gain
+    task.setLambda(1) ;
 
-  // Display task information
-  task.print() ;
+    // Display task information
+    task.print() ;
 
-  unsigned int iter=0 ;
-  // loop
-  while(iter++<100)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
+    unsigned int iter=0 ;
+    // loop
+    while(iter++<100)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
 
-    // get the robot position
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
 
-    // new point position
-    point.track(cMo) ;
-    //retrieve x,y and Z of the vpPoint structure
-    vpFeatureBuilder::create(p,point);
+      // new point position
+      point.track(cMo) ;
+      //retrieve x,y and Z of the vpPoint structure
+      vpFeatureBuilder::create(p,point);
 
-    // compute the control law
-    v = task.computeControlLaw() ;
+      // compute the control law
+      v = task.computeControlLaw() ;
 
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
-  }
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    }
 
-  // Display task information
-  task.print() ;
-  task.kill();
+    // Display task information
+    task.print() ;
+    task.kill();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
+  }
 }
 
diff --git a/example/robot-simulator/camera/servoSimuPoint2DCamVelocity2.cpp b/example/robot-simulator/camera/servoSimuPoint2DCamVelocity2.cpp
index b483fd94..1524bb64 100644
--- a/example/robot-simulator/camera/servoSimuPoint2DCamVelocity2.cpp
+++ b/example/robot-simulator/camera/servoSimuPoint2DCamVelocity2.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimuPoint2DCamVelocity2.cpp 2503 2010-02-16 18:55:01Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -70,6 +70,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -111,15 +114,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -128,7 +131,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -138,106 +141,113 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
+
+    vpServo task ;
+    vpSimulatorCamera robot ;
+
+
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Eye-in-hand task control,  articular velocity are computed" << std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task : servo a point " << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo ;
+    cMo[0][3] = 0.1 ;
+    cMo[1][3] = 0.2 ;
+    cMo[2][3] = 2 ;
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc) ;
+    wMo = wMc * cMo;
+
+    // sets the point coordinates in the world frame
+    vpPoint point ;
+    point.setWorldCoordinates(0,0,0) ;
+
+    // computes the point coordinates in the camera frame and its 2D coordinates
+    point.track(cMo) ;
+
+    // sets the current position of the visual feature
+    vpFeaturePoint p ;
+    vpFeatureBuilder::create(p,point)  ;  //retrieve x,y and Z of the vpPoint structure
+
+    // sets the desired position of the visual feature
+    vpFeaturePoint pd ;
+    pd.buildFrom(0,0,1) ;
+
+    // define the task
+    // - we want an eye-in-hand control law
+    // - articular velocity are computed
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
+    task.setInteractionMatrixType(vpServo::MEAN) ;
 
-  vpServo task ;
-  vpSimulatorCamera robot ;
-
-
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Eye-in-hand task control,  articular velocity are computed" << std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task : servo a point " << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo ;
-  cMo[0][3] = 0.1 ;
-  cMo[1][3] = 0.2 ;
-  cMo[2][3] = 2 ;
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
-
-  // sets the point coordinates in the world frame
-  vpPoint point ;
-  point.setWorldCoordinates(0,0,0) ;
-
-  // computes the point coordinates in the camera frame and its 2D coordinates
-  point.track(cMo) ;
-
-  // sets the current position of the visual feature
-  vpFeaturePoint p ;
-  vpFeatureBuilder::create(p,point)  ;  //retrieve x,y and Z of the vpPoint structure
-
-  // sets the desired position of the visual feature
-  vpFeaturePoint pd ;
-  pd.buildFrom(0,0,1) ;
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - articular velocity are computed
-  task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
-  task.setInteractionMatrixType(vpServo::MEAN) ;
-
-  // Set the position of the camera in the end-effector frame
-  vpHomogeneousMatrix cMe ;
-  vpVelocityTwistMatrix cVe(cMe) ;
-  task.set_cVe(cVe) ;
-
-  // Set the Jacobian (expressed in the end-effector frame)
-  vpMatrix eJe ;
-  robot.get_eJe(eJe) ;
-  task.set_eJe(eJe) ;
-
-  // we want to see a point on a point
-  task.addFeature(p,pd) ;
-
-  // set the gain
-  task.setLambda(1) ;
-  // Display task information
-  task.print() ;
-
-  unsigned int iter=0 ;
-  // loop
-  while(iter++<100)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
+    // Set the position of the camera in the end-effector frame
+    vpHomogeneousMatrix cMe ;
+    vpVelocityTwistMatrix cVe(cMe) ;
+    task.set_cVe(cVe) ;
 
     // Set the Jacobian (expressed in the end-effector frame)
-    // since q is modified eJe is modified
+    vpMatrix eJe ;
     robot.get_eJe(eJe) ;
     task.set_eJe(eJe) ;
 
-    // get the robot position
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    // we want to see a point on a point
+    task.addFeature(p,pd) ;
 
-    // new point position
-    point.track(cMo) ;
-    vpFeatureBuilder::create(p,point)  ;  //retrieve x,y and Z of the vpPoint structure
-    pd.buildFrom(0,0,1) ; // Since vpServo::MEAN interaction matrix is used, we need to update the desired feature at each iteration
+    // set the gain
+    task.setLambda(1) ;
+    // Display task information
+    task.print() ;
 
-    // compute the control law
-    v = task.computeControlLaw() ;
+    unsigned int iter=0 ;
+    // loop
+    while(iter++<100)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
 
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+      // Set the Jacobian (expressed in the end-effector frame)
+      // since q is modified eJe is modified
+      robot.get_eJe(eJe) ;
+      task.set_eJe(eJe) ;
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
-  }
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // new point position
+      point.track(cMo) ;
+      vpFeatureBuilder::create(p,point)  ;  //retrieve x,y and Z of the vpPoint structure
+      pd.buildFrom(0,0,1) ; // Since vpServo::MEAN interaction matrix is used, we need to update the desired feature at each iteration
+
+      // compute the control law
+      v = task.computeControlLaw() ;
 
-  // Display task information
-  task.print() ;
-  task.kill();
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    }
+
+    // Display task information
+    task.print() ;
+    task.kill();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
+  }
 }
 
diff --git a/example/robot-simulator/camera/servoSimuPoint2DCamVelocity3.cpp b/example/robot-simulator/camera/servoSimuPoint2DCamVelocity3.cpp
index 9808dfd8..5806ace9 100644
--- a/example/robot-simulator/camera/servoSimuPoint2DCamVelocity3.cpp
+++ b/example/robot-simulator/camera/servoSimuPoint2DCamVelocity3.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimuPoint2DCamVelocity3.cpp 2503 2010-02-16 18:55:01Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -69,6 +69,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -111,15 +114,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -128,7 +131,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -138,104 +141,111 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
+
+    vpServo task ;
+    vpSimulatorCamera robot ;
+
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Eye-in-hand task control,  articular velocity are computed" << std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task : servo a point " << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo ;
+    cMo[0][3] = 0.1 ;
+    cMo[1][3] = 0.2 ;
+    cMo[2][3] = 2 ;
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc) ;
+    wMo = wMc * cMo;
+
+    // sets the point coordinates in the world frame
+    vpPoint point ;
+    point.setWorldCoordinates(0,0,0) ;
+
+    // computes the point coordinates in the camera frame and its 2D coordinates
+    point.track(cMo) ;
+
+    // sets the current position of the visual feature
+    vpFeaturePoint p ;
+    vpFeatureBuilder::create(p,point)  ;  //retrieve x,y and Z of the vpPoint structure
+
+    // sets the desired position of the visual feature
+    vpFeaturePoint pd ;
+    pd.buildFrom(0,0,1) ; // buildFrom(x,y,Z) ;
+
+    // define the task
+    // - we want an eye-in-hand control law
+    // - articular velocity are computed
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
 
-  vpServo task ;
-  vpSimulatorCamera robot ;
-
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Eye-in-hand task control,  articular velocity are computed" << std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task : servo a point " << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo ;
-  cMo[0][3] = 0.1 ;
-  cMo[1][3] = 0.2 ;
-  cMo[2][3] = 2 ;
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
-
-  // sets the point coordinates in the world frame
-  vpPoint point ;
-  point.setWorldCoordinates(0,0,0) ;
-
-  // computes the point coordinates in the camera frame and its 2D coordinates
-  point.track(cMo) ;
-
-  // sets the current position of the visual feature
-  vpFeaturePoint p ;
-  vpFeatureBuilder::create(p,point)  ;  //retrieve x,y and Z of the vpPoint structure
-
-  // sets the desired position of the visual feature
-  vpFeaturePoint pd ;
-  pd.buildFrom(0,0,1) ; // buildFrom(x,y,Z) ;
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - articular velocity are computed
-  task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
-
-  // Set the position of the camera in the end-effector frame
-  vpHomogeneousMatrix cMe ;
-  vpVelocityTwistMatrix cVe(cMe) ;
-  task.set_cVe(cVe) ;
-
-  // Set the Jacobian (expressed in the end-effector frame)
-  vpMatrix eJe ;
-  robot.get_eJe(eJe) ;
-  task.set_eJe(eJe) ;
-
-  // we want to see a point on a point
-  task.addFeature(p,pd, vpFeaturePoint::selectX()) ;
-
-  // set the gain
-  task.setLambda(1) ;
-
-  // Display task information
-  task.print() ;
-
-  unsigned int iter=0 ;
-  // loop
-  while(iter++ < 100)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
+    // Set the position of the camera in the end-effector frame
+    vpHomogeneousMatrix cMe ;
+    vpVelocityTwistMatrix cVe(cMe) ;
+    task.set_cVe(cVe) ;
 
     // Set the Jacobian (expressed in the end-effector frame)
-    // since q is modified eJe is modified
+    vpMatrix eJe ;
     robot.get_eJe(eJe) ;
     task.set_eJe(eJe) ;
 
-    // get the robot position
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    // we want to see a point on a point
+    task.addFeature(p,pd, vpFeaturePoint::selectX()) ;
 
-    // new point position
-    point.track(cMo) ;
-    vpFeatureBuilder::create(p,point)  ;  //retrieve x,y and Z of the vpPoint structure
+    // set the gain
+    task.setLambda(1) ;
 
-    // compute the control law
-    v = task.computeControlLaw() ;
+    // Display task information
+    task.print() ;
 
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    unsigned int iter=0 ;
+    // loop
+    while(iter++ < 100)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
-  }
+      // Set the Jacobian (expressed in the end-effector frame)
+      // since q is modified eJe is modified
+      robot.get_eJe(eJe) ;
+      task.set_eJe(eJe) ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // new point position
+      point.track(cMo) ;
+      vpFeatureBuilder::create(p,point)  ;  //retrieve x,y and Z of the vpPoint structure
 
-  // Display task information
-  task.print() ;
-  task.kill();
+      // compute the control law
+      v = task.computeControlLaw() ;
+
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    }
+
+    // Display task information
+    task.print() ;
+    task.kill();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
+  }
 }
 
diff --git a/example/robot-simulator/camera/servoSimuPoint2DhalfCamVelocity1.cpp b/example/robot-simulator/camera/servoSimuPoint2DhalfCamVelocity1.cpp
index 3bb573ea..2788691f 100644
--- a/example/robot-simulator/camera/servoSimuPoint2DhalfCamVelocity1.cpp
+++ b/example/robot-simulator/camera/servoSimuPoint2DhalfCamVelocity1.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimuPoint2DhalfCamVelocity1.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -69,6 +69,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -112,15 +115,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -129,7 +132,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -139,124 +142,131 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
+
+    vpServo task ;
+    vpSimulatorCamera robot ;
 
-  vpServo task ;
-  vpSimulatorCamera robot ;
-
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " task :  2 1/2 D visual servoing " << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // sets the initial camera location
-  vpPoseVector c_r_o(0.1,0.2,2,
-                     vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50)
-                     ) ;
-
-  vpHomogeneousMatrix cMo(c_r_o) ;
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
-
-  // sets the desired camera location
-  vpPoseVector cd_r_o(0,0,1,
-                      vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
-  vpHomogeneousMatrix cdMo(cd_r_o) ;
-
-  // sets the point coordinates in the world frame
-  vpPoint point ;
-  point.setWorldCoordinates(0,0,0) ;
-  // computes the point coordinates in the camera frame and its 2D coordinates
-  point.track(cMo) ;
-
-  vpPoint pointd ;
-  pointd.setWorldCoordinates(0,0,0) ;
-  pointd.track(cdMo) ;
-  //------------------------------------------------------------------
-  // 1st feature (x,y)
-  // want to it at (0,0)
-  vpFeaturePoint p ;
-  vpFeatureBuilder::create(p,point)  ;
-
-  vpFeaturePoint pd ;
-  vpFeatureBuilder::create(pd,pointd)  ;
-
-  //------------------------------------------------------------------
-  // 2nd feature (Z)
-  // not necessary to project twice (reuse p)
-  vpFeaturePoint3D Z ;
-  vpFeatureBuilder::create(Z,point)  ;  //retrieve x,y and Z of the vpPoint structure
-
-  // want to see it one meter away (here again use pd)
-  vpFeaturePoint3D Zd ;
-  vpFeatureBuilder::create(Zd,pointd)  ;  //retrieve x,y and Z of the vpPoint structure
-
-  //------------------------------------------------------------------
-  // 3rd feature ThetaU
-  // compute the rotation that the camera has to achieve
-  vpHomogeneousMatrix cdMc ;
-  cdMc = cdMo*cMo.inverse() ;
-
-  vpFeatureThetaU tu(vpFeatureThetaU::cdRc) ;
-  tu.buildFrom(cdMc) ;
-
-  // sets the desired rotation (always zero !)
-  // since s is the rotation that the camera has to achieve
-
-  //------------------------------------------------------------------
-  // define the task
-  // - we want an eye-in-hand control law
-  // - robot is controlled in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
-
-  task.addFeature(p,pd) ;
-  task.addFeature(Z,Zd,vpFeaturePoint3D::selectZ()) ;
-  task.addFeature(tu) ;
-
-  // set the gain
-  task.setLambda(1) ;
-
-  // Display task information
-  task.print() ;
-
-  unsigned int iter=0 ;
-  // loop
-  while(iter++<200)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
-
-    // get the robot position
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " task :  2 1/2 D visual servoing " << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // sets the initial camera location
+    vpPoseVector c_r_o(0.1,0.2,2,
+                       vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50)
+                       ) ;
+
+    vpHomogeneousMatrix cMo(c_r_o) ;
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
     robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    wMo = wMc * cMo;
+
+    // sets the desired camera location
+    vpPoseVector cd_r_o(0,0,1,
+                        vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
+    vpHomogeneousMatrix cdMo(cd_r_o) ;
 
-    // update the feature
+    // sets the point coordinates in the world frame
+    vpPoint point ;
+    point.setWorldCoordinates(0,0,0) ;
+    // computes the point coordinates in the camera frame and its 2D coordinates
     point.track(cMo) ;
+
+    vpPoint pointd ;
+    pointd.setWorldCoordinates(0,0,0) ;
+    pointd.track(cdMo) ;
+    //------------------------------------------------------------------
+    // 1st feature (x,y)
+    // want to it at (0,0)
+    vpFeaturePoint p ;
     vpFeatureBuilder::create(p,point)  ;
-    vpFeatureBuilder::create(Z,point)  ;
 
+    vpFeaturePoint pd ;
+    vpFeatureBuilder::create(pd,pointd)  ;
+
+    //------------------------------------------------------------------
+    // 2nd feature (Z)
+    // not necessary to project twice (reuse p)
+    vpFeaturePoint3D Z ;
+    vpFeatureBuilder::create(Z,point)  ;  //retrieve x,y and Z of the vpPoint structure
+
+    // want to see it one meter away (here again use pd)
+    vpFeaturePoint3D Zd ;
+    vpFeatureBuilder::create(Zd,pointd)  ;  //retrieve x,y and Z of the vpPoint structure
+
+    //------------------------------------------------------------------
+    // 3rd feature ThetaU
+    // compute the rotation that the camera has to achieve
+    vpHomogeneousMatrix cdMc ;
     cdMc = cdMo*cMo.inverse() ;
+
+    vpFeatureThetaU tu(vpFeatureThetaU::cdRc) ;
     tu.buildFrom(cdMc) ;
 
-    // compute the control law
-    v = task.computeControlLaw() ;
-    // send the camera velocity to the controller ") ;
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    // sets the desired rotation (always zero !)
+    // since s is the rotation that the camera has to achieve
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
-  }
+    //------------------------------------------------------------------
+    // define the task
+    // - we want an eye-in-hand control law
+    // - robot is controlled in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
 
-  // Display task information
-  task.print() ;
-  task.kill();
-  std::cout << "Final camera location:\n " << cMo << std::endl ;
+    task.addFeature(p,pd) ;
+    task.addFeature(Z,Zd,vpFeaturePoint3D::selectZ()) ;
+    task.addFeature(tu) ;
+
+    // set the gain
+    task.setLambda(1) ;
+
+    // Display task information
+    task.print() ;
+
+    unsigned int iter=0 ;
+    // loop
+    while(iter++<200)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // update the feature
+      point.track(cMo) ;
+      vpFeatureBuilder::create(p,point)  ;
+      vpFeatureBuilder::create(Z,point)  ;
+
+      cdMc = cdMo*cMo.inverse() ;
+      tu.buildFrom(cdMc) ;
+
+      // compute the control law
+      v = task.computeControlLaw() ;
+      // send the camera velocity to the controller ") ;
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    }
+
+    // Display task information
+    task.print() ;
+    task.kill();
+    std::cout << "Final camera location:\n " << cMo << std::endl ;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
+  }
 }
 
diff --git a/example/robot-simulator/camera/servoSimuPoint2DhalfCamVelocity2.cpp b/example/robot-simulator/camera/servoSimuPoint2DhalfCamVelocity2.cpp
index e8308cc8..5e98f980 100644
--- a/example/robot-simulator/camera/servoSimuPoint2DhalfCamVelocity2.cpp
+++ b/example/robot-simulator/camera/servoSimuPoint2DhalfCamVelocity2.cpp
@@ -4,7 +4,7 @@
  * $Id: servoSimuPoint2DhalfCamVelocity2.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -69,6 +69,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -109,15 +112,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -126,7 +129,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -136,221 +139,228 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
-  
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " simulation of a 2 1/2 D visual servoing " << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // In this example we will simulate a visual servoing task.
-  // In simulation, we have to define the scene frane Ro and the
-  // camera frame Rc.
-  // The camera location is given by an homogenous matrix cMo that
-  // describes the position of the camera in the scene frame.
-
-  vpServo task ;
-  
-  // sets the initial camera location
-  // we give the camera location as a size 6 vector (3 translations in meter
-  // and 3 rotation (theta U representation)
-  vpPoseVector c_r_o(0.1,0.2,2,
-                     vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50)
-                     ) ;
-
-  // this pose vector is then transformed in a 4x4 homogeneous matrix
-  vpHomogeneousMatrix cMo(c_r_o) ;
-  
-  // We define a robot
-  // The vpSimulatorCamera implements a simple moving that is juste defined
-  // by its location cMo
-  vpSimulatorCamera robot ;
-
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
-
-  // Now that the current camera position has been defined,
-  // let us defined the defined camera location.
-  // It is defined by cdMo
-  // sets the desired camera location
-  vpPoseVector cd_r_o(0,0,1,
-                      vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
-  vpHomogeneousMatrix cdMo(cd_r_o) ;
-
-
-  //----------------------------------------------------------------------
-  // A 2 1/2 D visual servoing can be defined by
-  // - the position of a point x,y
-  // - the difference between this point depth and a desire depth
-  //   modeled by log Z/Zd to be regulated to 0
-  // - the rotation that the camera has to realized cdMc
-
-  // Let us now defined the current value of these features
-
-
-  // since we simulate we have to define a 3D point that will
-  // forward-projected to define the current position x,y of the
-  // reference point
-
-  //------------------------------------------------------------------
-  // First feature (x,y)
-  //------------------------------------------------------------------
-  // Let oP be this ... point,
-  // a vpPoint class has three main member
-  // .oP : 3D coordinates in scene frame
-  // .cP : 3D coordinates in camera frame
-  // .p : 2D
-
-  //------------------------------------------------------------------
-  // sets the point coordinates in the world frame
-  vpPoint point ;
-  // defined point coordinates in the scene frame : oP
-  point.setWorldCoordinates(0,0,0) ;
-  // computes  the point coordinates in the camera frame and its
-  // 2D coordinates cP and then p
-  // computes the point coordinates in the camera frame and its 2D coordinates"  ) ;
-  point.track(cMo) ;
-
-  // We also defined (again by forward projection) the desired position
-  // of this point according to the desired camera position
-  vpPoint pointd ;
-  pointd.setWorldCoordinates(0,0,0) ;
-  pointd.track(cdMo) ;
-  
-  // Nevertheless, a vpPoint is not a feature, this is just a "tracker"
-  // from which the feature are built
-  // a feature is juste defined by a vector s, a way to compute the
-  // interaction matrix and the error, and if required a (or a vector of)
-  // 3D information
-
-  // for a point (x,y) Visp implements the vpFeaturePoint class.
-  // we no defined a feature for x,y (and for (x*,y*))
-  vpFeaturePoint p,pd ;
-  
-  // and we initialized the vector s=(x,y) of p from the tracker P
-  // Z coordinates in p is also initialized, it will be used to compute
-  // the interaction matrix
-  vpFeatureBuilder::create(p,point)  ;
-  vpFeatureBuilder::create(pd,pointd)  ;
-
-  //------------------------------------------------------------------
-  // Second feature log (Z/Zd)
-  // not necessary to project twice (reuse p)
-
-  // This case in intersting since this visual feature has not
-  // been predefined in VisP
-  // In such case we have a generic feature class vpGenericFeature
-  // We will have to defined
-  // the vector s : .set_s(...)
-  // the interaction matrix Ls : .setInteractionMatrix(...)
-
-  // log(Z/Zd) is then a size 1 vector logZ
-  vpGenericFeature logZ(1) ;
-  // initialized to s = log(Z/Zd)
-  // Let us note that here we use the point P and Pd, it's not necessary
-  // to forward project twice (it's already done)
-  logZ.set_s(log(point.get_Z()/pointd.get_Z())) ;
-
-  // This visual has to be regulated to zero
-
-  //------------------------------------------------------------------
-  // 3rd feature ThetaU
-  // The thetaU feature is defined, tu represents the rotation that the camera
-  // has to realized.
-  // the complete displacement is then defined by:
-  //------------------------------------------------------------------
-  vpHomogeneousMatrix cdMc ;
-  // compute the rotation that the camera has to achieve
-  cdMc = cdMo*cMo.inverse() ;
-
-  // from this displacement, we extract the rotation cdRc represented by
-  // the angle theta and the rotation axis u
-  vpFeatureThetaU tu(vpFeatureThetaU::cdRc) ;
-  tu.buildFrom(cdMc) ;
-  // This visual has to be regulated to zero
-
-  // sets the desired rotation (always zero !)
-  // since s is the rotation that the camera has to realize
-
-  //------------------------------------------------------------------
-  // Let us now the task itself
-  //------------------------------------------------------------------
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - robot is controlled in the camera frame
-  //  we choose to control the robot in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
-  // Interaction matrix is computed with the current value of s
-  task.setInteractionMatrixType(vpServo::CURRENT) ;
-  
-  // we build the task by "stacking" the visual feature
-  // previously defined
-  task.addFeature(p,pd) ;
-  task.addFeature(logZ) ;
-  task.addFeature(tu) ;
-  // addFeature(X,Xd) means X should be regulated to Xd
-  // addFeature(X) means that X should be regulated to 0
-  // some features such as vpFeatureThetaU MUST be regulated to zero
-  // (otherwise, it will results in an error at exectution level)
-
-  // set the gain
-  task.setLambda(1) ;
-
-  // Display task information
-  task.print() ;
-  //------------------------------------------------------------------
-  // An now the closed loop
-
-  unsigned int iter=0 ;
-  // loop
-  while(iter++<200)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
-
-    // get the robot position
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-    // update the feature
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " simulation of a 2 1/2 D visual servoing " << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // In this example we will simulate a visual servoing task.
+    // In simulation, we have to define the scene frane Ro and the
+    // camera frame Rc.
+    // The camera location is given by an homogenous matrix cMo that
+    // describes the position of the camera in the scene frame.
+
+    vpServo task ;
+
+    // sets the initial camera location
+    // we give the camera location as a size 6 vector (3 translations in meter
+    // and 3 rotation (theta U representation)
+    vpPoseVector c_r_o(0.1,0.2,2,
+                       vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50)
+                       ) ;
+
+    // this pose vector is then transformed in a 4x4 homogeneous matrix
+    vpHomogeneousMatrix cMo(c_r_o) ;
+
+    // We define a robot
+    // The vpSimulatorCamera implements a simple moving that is juste defined
+    // by its location cMo
+    vpSimulatorCamera robot ;
+
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc) ;
+    wMo = wMc * cMo;
+
+    // Now that the current camera position has been defined,
+    // let us defined the defined camera location.
+    // It is defined by cdMo
+    // sets the desired camera location
+    vpPoseVector cd_r_o(0,0,1,
+                        vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
+    vpHomogeneousMatrix cdMo(cd_r_o) ;
+
+
+    //----------------------------------------------------------------------
+    // A 2 1/2 D visual servoing can be defined by
+    // - the position of a point x,y
+    // - the difference between this point depth and a desire depth
+    //   modeled by log Z/Zd to be regulated to 0
+    // - the rotation that the camera has to realized cdMc
+
+    // Let us now defined the current value of these features
+
+
+    // since we simulate we have to define a 3D point that will
+    // forward-projected to define the current position x,y of the
+    // reference point
+
+    //------------------------------------------------------------------
+    // First feature (x,y)
+    //------------------------------------------------------------------
+    // Let oP be this ... point,
+    // a vpPoint class has three main member
+    // .oP : 3D coordinates in scene frame
+    // .cP : 3D coordinates in camera frame
+    // .p : 2D
+
+    //------------------------------------------------------------------
+    // sets the point coordinates in the world frame
+    vpPoint point ;
+    // defined point coordinates in the scene frame : oP
+    point.setWorldCoordinates(0,0,0) ;
+    // computes  the point coordinates in the camera frame and its
+    // 2D coordinates cP and then p
+    // computes the point coordinates in the camera frame and its 2D coordinates"  ) ;
     point.track(cMo) ;
-    vpFeatureBuilder::create(p,point)  ;
 
-    cdMc = cdMo*cMo.inverse() ;
-    tu.buildFrom(cdMc) ;
-
-    // there is no feature for logZ, we explicitely build
-    // the related interaction matrix") ;
+    // We also defined (again by forward projection) the desired position
+    // of this point according to the desired camera position
+    vpPoint pointd ;
+    pointd.setWorldCoordinates(0,0,0) ;
+    pointd.track(cdMo) ;
+
+    // Nevertheless, a vpPoint is not a feature, this is just a "tracker"
+    // from which the feature are built
+    // a feature is juste defined by a vector s, a way to compute the
+    // interaction matrix and the error, and if required a (or a vector of)
+    // 3D information
+
+    // for a point (x,y) Visp implements the vpFeaturePoint class.
+    // we no defined a feature for x,y (and for (x*,y*))
+    vpFeaturePoint p,pd ;
+
+    // and we initialized the vector s=(x,y) of p from the tracker P
+    // Z coordinates in p is also initialized, it will be used to compute
+    // the interaction matrix
+    vpFeatureBuilder::create(p,point)  ;
+    vpFeatureBuilder::create(pd,pointd)  ;
+
+    //------------------------------------------------------------------
+    // Second feature log (Z/Zd)
+    // not necessary to project twice (reuse p)
+
+    // This case in intersting since this visual feature has not
+    // been predefined in VisP
+    // In such case we have a generic feature class vpGenericFeature
+    // We will have to defined
+    // the vector s : .set_s(...)
+    // the interaction matrix Ls : .setInteractionMatrix(...)
+
+    // log(Z/Zd) is then a size 1 vector logZ
+    vpGenericFeature logZ(1) ;
+    // initialized to s = log(Z/Zd)
+    // Let us note that here we use the point P and Pd, it's not necessary
+    // to forward project twice (it's already done)
     logZ.set_s(log(point.get_Z()/pointd.get_Z())) ;
-    vpMatrix LlogZ(1,6) ;
-    LlogZ[0][0] = LlogZ[0][1] = LlogZ[0][5] = 0 ;
-    LlogZ[0][2] = -1/p.get_Z() ;
-    LlogZ[0][3] = -p.get_y() ;
-    LlogZ[0][4] =  p.get_x() ;
 
-    logZ.setInteractionMatrix(LlogZ) ;
+    // This visual has to be regulated to zero
 
-    // compute the control law
-    v = task.computeControlLaw() ;
+    //------------------------------------------------------------------
+    // 3rd feature ThetaU
+    // The thetaU feature is defined, tu represents the rotation that the camera
+    // has to realized.
+    // the complete displacement is then defined by:
+    //------------------------------------------------------------------
+    vpHomogeneousMatrix cdMc ;
+    // compute the rotation that the camera has to achieve
+    cdMc = cdMo*cMo.inverse() ;
 
-    // send the camera velocity to the controller ") ;
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    // from this displacement, we extract the rotation cdRc represented by
+    // the angle theta and the rotation axis u
+    vpFeatureThetaU tu(vpFeatureThetaU::cdRc) ;
+    tu.buildFrom(cdMc) ;
+    // This visual has to be regulated to zero
+
+    // sets the desired rotation (always zero !)
+    // since s is the rotation that the camera has to realize
+
+    //------------------------------------------------------------------
+    // Let us now the task itself
+    //------------------------------------------------------------------
+
+    // define the task
+    // - we want an eye-in-hand control law
+    // - robot is controlled in the camera frame
+    //  we choose to control the robot in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
+    // Interaction matrix is computed with the current value of s
+    task.setInteractionMatrixType(vpServo::CURRENT) ;
+
+    // we build the task by "stacking" the visual feature
+    // previously defined
+    task.addFeature(p,pd) ;
+    task.addFeature(logZ) ;
+    task.addFeature(tu) ;
+    // addFeature(X,Xd) means X should be regulated to Xd
+    // addFeature(X) means that X should be regulated to 0
+    // some features such as vpFeatureThetaU MUST be regulated to zero
+    // (otherwise, it will results in an error at exectution level)
+
+    // set the gain
+    task.setLambda(1) ;
+
+    // Display task information
+    task.print() ;
+    //------------------------------------------------------------------
+    // An now the closed loop
+
+    unsigned int iter=0 ;
+    // loop
+    while(iter++<200)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // update the feature
+      point.track(cMo) ;
+      vpFeatureBuilder::create(p,point)  ;
+
+      cdMc = cdMo*cMo.inverse() ;
+      tu.buildFrom(cdMc) ;
+
+      // there is no feature for logZ, we explicitely build
+      // the related interaction matrix") ;
+      logZ.set_s(log(point.get_Z()/pointd.get_Z())) ;
+      vpMatrix LlogZ(1,6) ;
+      LlogZ[0][0] = LlogZ[0][1] = LlogZ[0][5] = 0 ;
+      LlogZ[0][2] = -1/p.get_Z() ;
+      LlogZ[0][3] = -p.get_y() ;
+      LlogZ[0][4] =  p.get_x() ;
+
+      logZ.setInteractionMatrix(LlogZ) ;
+
+      // compute the control law
+      v = task.computeControlLaw() ;
+
+      // send the camera velocity to the controller ") ;
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    }
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    // Display task information
+    task.print() ;
+    task.kill();
+    // Final camera location
+    std::cout << cMo << std::endl ;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
-
-  // Display task information
-  task.print() ;
-  task.kill();
-  // Final camera location
-  std::cout << cMo << std::endl ;
 }
 
diff --git a/example/robot-simulator/camera/servoSimuPoint2DhalfCamVelocity3.cpp b/example/robot-simulator/camera/servoSimuPoint2DhalfCamVelocity3.cpp
index 76161538..d42e4931 100644
--- a/example/robot-simulator/camera/servoSimuPoint2DhalfCamVelocity3.cpp
+++ b/example/robot-simulator/camera/servoSimuPoint2DhalfCamVelocity3.cpp
@@ -4,7 +4,7 @@
  * $Id: servoSimuPoint2DhalfCamVelocity3.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -69,6 +69,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -109,15 +112,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -126,7 +129,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -136,197 +139,204 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
-  
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " simulation of a 2 1/2 D visual servoing " << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // In this example we will simulate a visual servoing task.
-  // In simulation, we have to define the scene frane Ro and the
-  // camera frame Rc.
-  // The camera location is given by an homogenous matrix cMo that
-  // describes the position of the camera in the scene frame.
-
-  vpServo task ;
-  
-  // sets the initial camera location
-  // we give the camera location as a size 6 vector (3 translations in meter
-  // and 3 rotation (theta U representation)
-  vpPoseVector c_r_o(0.1,0.2,2,
-                     vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50)
-                     ) ;
-
-  // this pose vector is then transformed in a 4x4 homogeneous matrix
-  vpHomogeneousMatrix cMo(c_r_o) ;
-  
-  // We define a robot
-  // The vpSimulatorCamera implements a simple moving that is juste defined
-  // by its location cMo
-  vpSimulatorCamera robot ;
-
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
-
-  // Now that the current camera position has been defined,
-  // let us defined the defined camera location.
-  // It is defined by cdMo
-  // sets the desired camera location " ) ;
-  vpPoseVector cd_r_o(0,0,1,
-                      vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
-  vpHomogeneousMatrix cdMo(cd_r_o) ;
-
-  //----------------------------------------------------------------------
-  // A 2 1/2 D visual servoing can be defined by
-  // - the position of a point x,y
-  // - the difference between this point depth and a desire depth
-  //   modeled by log Z/Zd to be regulated to 0
-  // - the rotation that the camera has to realized cdMc
-
-  // Let us now defined the current value of these features
-
-
-  // since we simulate we have to define a 3D point that will
-  // forward-projected to define the current position x,y of the
-  // reference point
-
-  //------------------------------------------------------------------
-  // First feature (x,y)
-  //------------------------------------------------------------------
-  // Let oP be this ... point,
-  // a vpPoint class has three main member
-  // .oP : 3D coordinates in scene frame
-  // .cP : 3D coordinates in camera frame
-  // .p : 2D
-
-  //------------------------------------------------------------------
-  // sets the point coordinates in the world frame
-  vpPoint P ;
-  // defined point coordinates in the scene frame : oP
-  P.setWorldCoordinates(0,0,0) ;
-  // computes  the P coordinates in the camera frame and its
-  // 2D coordinates cP and then p
-  // computes the point coordinates in the camera frame and its 2D coordinates
-  P.track(cMo) ;
-
-  // We also defined (again by forward projection) the desired position
-  // of this point according to the desired camera position
-  vpPoint Pd ;
-  Pd.setWorldCoordinates(0,0,0) ;
-  Pd.track(cdMo) ;
-  
-  // Nevertheless, a vpPoint is not a feature, this is just a "tracker"
-  // from which the feature are built
-  // a feature is juste defined by a vector s, a way to compute the
-  // interaction matrix and the error, and if required a (or a vector of)
-  // 3D information
-
-  // for a point (x,y) Visp implements the vpFeaturePoint class.
-  // we no defined a feature for x,y (and for (x*,y*))
-  vpFeaturePoint p,pd ;
-  
-  // and we initialized the vector s=(x,y) of p from the tracker P
-  // Z coordinates in p is also initialized, it will be used to compute
-  // the interaction matrix
-  vpFeatureBuilder::create(p,P)  ;
-  vpFeatureBuilder::create(pd,Pd)  ;
-
-  // This visual has to be regulated to zero
-
-  //------------------------------------------------------------------
-  // 2nd feature ThetaUz and 3rd feature t
-  // The thetaU feature is defined, tu represents the rotation that the camera
-  // has to realized. t the translation.
-  // the complete displacement is then defined by:
-  //------------------------------------------------------------------
-  vpHomogeneousMatrix cdMc ;
-  // compute the rotation that the camera has to achieve
-  cdMc = cdMo*cMo.inverse() ;
-
-  // from this displacement, we extract the rotation cdRc represented by
-  // the angle theta and the rotation axis u
-  vpFeatureThetaU tuz(vpFeatureThetaU::cdRc) ;
-  tuz.buildFrom(cdMc) ;
-  // And the translations
-  vpFeatureTranslation t(vpFeatureTranslation::cdMc) ;
-  t.buildFrom(cdMc) ;
-  
-  // This visual has to be regulated to zero
-
-  // sets the desired rotation (always zero !)
-  // since s is the rotation that the camera has to achieve
-
-  //------------------------------------------------------------------
-  // Let us now the task itself
-  //------------------------------------------------------------------
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - robot is controlled in the camera frame
-  //  we choose to control the robot in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
-  // Interaction matrix is computed with the current value of s
-  task.setInteractionMatrixType(vpServo::CURRENT) ;
-  
-  // we build the task by "stacking" the visual feature
-  // previously defined
-  task.addFeature(t) ;
-  task.addFeature(p,pd) ;
-  task.addFeature(tuz,vpFeatureThetaU::TUz) ; //selection of TUz
-  
-  // addFeature(X,Xd) means X should be regulated to Xd
-  // addFeature(X) means that X should be regulated to 0
-  // some features such as vpFeatureThetaU MUST be regulated to zero
-  // (otherwise, it will results in an error at exectution level)
-
-  // set the gain
-  task.setLambda(1) ;
-
-  // Display task information " ) ;
-  task.print() ;
-  //------------------------------------------------------------------
-  // An now the closed loop
-
-  unsigned int iter=0 ;
-  // loop
-  while(iter++<200)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
-
-    // get the robot position
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-    // update the feature
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " simulation of a 2 1/2 D visual servoing " << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // In this example we will simulate a visual servoing task.
+    // In simulation, we have to define the scene frane Ro and the
+    // camera frame Rc.
+    // The camera location is given by an homogenous matrix cMo that
+    // describes the position of the camera in the scene frame.
+
+    vpServo task ;
+
+    // sets the initial camera location
+    // we give the camera location as a size 6 vector (3 translations in meter
+    // and 3 rotation (theta U representation)
+    vpPoseVector c_r_o(0.1,0.2,2,
+                       vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50)
+                       ) ;
+
+    // this pose vector is then transformed in a 4x4 homogeneous matrix
+    vpHomogeneousMatrix cMo(c_r_o) ;
+
+    // We define a robot
+    // The vpSimulatorCamera implements a simple moving that is juste defined
+    // by its location cMo
+    vpSimulatorCamera robot ;
+
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc) ;
+    wMo = wMc * cMo;
+
+    // Now that the current camera position has been defined,
+    // let us defined the defined camera location.
+    // It is defined by cdMo
+    // sets the desired camera location " ) ;
+    vpPoseVector cd_r_o(0,0,1,
+                        vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
+    vpHomogeneousMatrix cdMo(cd_r_o) ;
+
+    //----------------------------------------------------------------------
+    // A 2 1/2 D visual servoing can be defined by
+    // - the position of a point x,y
+    // - the difference between this point depth and a desire depth
+    //   modeled by log Z/Zd to be regulated to 0
+    // - the rotation that the camera has to realized cdMc
+
+    // Let us now defined the current value of these features
+
+
+    // since we simulate we have to define a 3D point that will
+    // forward-projected to define the current position x,y of the
+    // reference point
+
+    //------------------------------------------------------------------
+    // First feature (x,y)
+    //------------------------------------------------------------------
+    // Let oP be this ... point,
+    // a vpPoint class has three main member
+    // .oP : 3D coordinates in scene frame
+    // .cP : 3D coordinates in camera frame
+    // .p : 2D
+
+    //------------------------------------------------------------------
+    // sets the point coordinates in the world frame
+    vpPoint P ;
+    // defined point coordinates in the scene frame : oP
+    P.setWorldCoordinates(0,0,0) ;
+    // computes  the P coordinates in the camera frame and its
+    // 2D coordinates cP and then p
+    // computes the point coordinates in the camera frame and its 2D coordinates
     P.track(cMo) ;
-    vpFeatureBuilder::create(p,P)  ;
 
+    // We also defined (again by forward projection) the desired position
+    // of this point according to the desired camera position
+    vpPoint Pd ;
+    Pd.setWorldCoordinates(0,0,0) ;
+    Pd.track(cdMo) ;
+
+    // Nevertheless, a vpPoint is not a feature, this is just a "tracker"
+    // from which the feature are built
+    // a feature is juste defined by a vector s, a way to compute the
+    // interaction matrix and the error, and if required a (or a vector of)
+    // 3D information
+
+    // for a point (x,y) Visp implements the vpFeaturePoint class.
+    // we no defined a feature for x,y (and for (x*,y*))
+    vpFeaturePoint p,pd ;
+
+    // and we initialized the vector s=(x,y) of p from the tracker P
+    // Z coordinates in p is also initialized, it will be used to compute
+    // the interaction matrix
+    vpFeatureBuilder::create(p,P)  ;
+    vpFeatureBuilder::create(pd,Pd)  ;
+
+    // This visual has to be regulated to zero
+
+    //------------------------------------------------------------------
+    // 2nd feature ThetaUz and 3rd feature t
+    // The thetaU feature is defined, tu represents the rotation that the camera
+    // has to realized. t the translation.
+    // the complete displacement is then defined by:
+    //------------------------------------------------------------------
+    vpHomogeneousMatrix cdMc ;
+    // compute the rotation that the camera has to achieve
     cdMc = cdMo*cMo.inverse() ;
+
+    // from this displacement, we extract the rotation cdRc represented by
+    // the angle theta and the rotation axis u
+    vpFeatureThetaU tuz(vpFeatureThetaU::cdRc) ;
     tuz.buildFrom(cdMc) ;
+    // And the translations
+    vpFeatureTranslation t(vpFeatureTranslation::cdMc) ;
     t.buildFrom(cdMc) ;
 
-    // compute the control law: v = -lambda L^+(s-sd)
-    v = task.computeControlLaw() ;
-
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    // This visual has to be regulated to zero
+
+    // sets the desired rotation (always zero !)
+    // since s is the rotation that the camera has to achieve
+
+    //------------------------------------------------------------------
+    // Let us now the task itself
+    //------------------------------------------------------------------
+
+    // define the task
+    // - we want an eye-in-hand control law
+    // - robot is controlled in the camera frame
+    //  we choose to control the robot in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
+    // Interaction matrix is computed with the current value of s
+    task.setInteractionMatrixType(vpServo::CURRENT) ;
+
+    // we build the task by "stacking" the visual feature
+    // previously defined
+    task.addFeature(t) ;
+    task.addFeature(p,pd) ;
+    task.addFeature(tuz,vpFeatureThetaU::TUz) ; //selection of TUz
+
+    // addFeature(X,Xd) means X should be regulated to Xd
+    // addFeature(X) means that X should be regulated to 0
+    // some features such as vpFeatureThetaU MUST be regulated to zero
+    // (otherwise, it will results in an error at exectution level)
+
+    // set the gain
+    task.setLambda(1) ;
+
+    // Display task information " ) ;
+    task.print() ;
+    //------------------------------------------------------------------
+    // An now the closed loop
+
+    unsigned int iter=0 ;
+    // loop
+    while(iter++<200)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // update the feature
+      P.track(cMo) ;
+      vpFeatureBuilder::create(p,P)  ;
+
+      cdMc = cdMo*cMo.inverse() ;
+      tuz.buildFrom(cdMc) ;
+      t.buildFrom(cdMc) ;
+
+      // compute the control law: v = -lambda L^+(s-sd)
+      v = task.computeControlLaw() ;
+
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    }
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    // Display task information
+    task.print() ;
+    task.kill();
+    // Final camera location
+    std::cout << "Final camera location: \n" << cMo << std::endl ;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
-
-  // Display task information
-  task.print() ;
-  task.kill();
-  // Final camera location
-  std::cout << "Final camera location: \n" << cMo << std::endl ;
 }
 
diff --git a/example/robot-simulator/camera/servoSimuPoint3DCamVelocity.cpp b/example/robot-simulator/camera/servoSimuPoint3DCamVelocity.cpp
index 9032832d..b2361f47 100644
--- a/example/robot-simulator/camera/servoSimuPoint3DCamVelocity.cpp
+++ b/example/robot-simulator/camera/servoSimuPoint3DCamVelocity.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimuPoint3DCamVelocity.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -66,6 +66,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -107,15 +110,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -124,7 +127,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -134,92 +137,99 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  vpServo task ;
-  vpSimulatorCamera robot ;
-
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Eye-in-hand task control, velocity computed in the camera frame" << std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task : servo a 3D point " << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo ;
-  cMo[0][3] = 0.1 ;
-  cMo[1][3] = 0.2 ;
-  cMo[2][3] = 2 ;
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
-
-  // sets the point coordinates in the world frame
-  vpPoint point ;
-  point.setWorldCoordinates(0,0,0) ;
-
-  // computes the point coordinates in the camera frame
-  point.track(cMo) ;
-
-  std::cout << "Point coordinates in the camera frame: " << point.cP.t() ;
-
-  vpFeaturePoint3D p ;
-  p.buildFrom(point) ;
-
-  // sets the desired position of the point
-  vpFeaturePoint3D pd ;
-  pd.set_XYZ(0,0,1) ;
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - robot is controlled in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
-
-  // we want to see a point on a point
-  std::cout << std::endl ;
-  task.addFeature(p,pd) ;
-
-  // set the gain") ;
-  task.setLambda(1) ;
-
-  // Display task information
-  task.print() ;
-
-  unsigned int iter=0 ;
-  // loop
-  while(iter++<200)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
-
-    // get the robot position
+    vpServo task ;
+    vpSimulatorCamera robot ;
+
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Eye-in-hand task control, velocity computed in the camera frame" << std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task : servo a 3D point " << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo ;
+    cMo[0][3] = 0.1 ;
+    cMo[1][3] = 0.2 ;
+    cMo[2][3] = 2 ;
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
     robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    wMo = wMc * cMo;
 
-    // new point position
+    // sets the point coordinates in the world frame
+    vpPoint point ;
+    point.setWorldCoordinates(0,0,0) ;
+
+    // computes the point coordinates in the camera frame
     point.track(cMo) ;
+
+    std::cout << "Point coordinates in the camera frame: " << point.cP.t() ;
+
+    vpFeaturePoint3D p ;
     p.buildFrom(point) ;
-    //   std::cout << p.cP.t() ;
-    //   std::cout << (p.get_s()).t() ;
 
-    // compute the control law
-    v = task.computeControlLaw() ;
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    // sets the desired position of the point
+    vpFeaturePoint3D pd ;
+    pd.set_XYZ(0,0,1) ;
+
+    // define the task
+    // - we want an eye-in-hand control law
+    // - robot is controlled in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
+
+    // we want to see a point on a point
+    std::cout << std::endl ;
+    task.addFeature(p,pd) ;
+
+    // set the gain") ;
+    task.setLambda(1) ;
+
+    // Display task information
+    task.print() ;
+
+    unsigned int iter=0 ;
+    // loop
+    while(iter++<200)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // new point position
+      point.track(cMo) ;
+      p.buildFrom(point) ;
+      //   std::cout << p.cP.t() ;
+      //   std::cout << (p.get_s()).t() ;
+
+      // compute the control law
+      v = task.computeControlLaw() ;
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    }
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    // Display task information
+    task.print() ;
+    task.kill();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
-
-  // Display task information
-  task.print() ;
-  task.kill();
 }
 
diff --git a/example/robot-simulator/camera/servoSimuSphere2DCamVelocity.cpp b/example/robot-simulator/camera/servoSimuSphere2DCamVelocity.cpp
index 0840404b..9c39af78 100644
--- a/example/robot-simulator/camera/servoSimuSphere2DCamVelocity.cpp
+++ b/example/robot-simulator/camera/servoSimuSphere2DCamVelocity.cpp
@@ -4,7 +4,7 @@
  * $Id: servoSimuSphere2DCamVelocity.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -66,6 +66,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -107,15 +110,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -124,7 +127,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -134,94 +137,100 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  vpServo task ;
-  vpSimulatorCamera robot ;
-
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task : servo a sphere " << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo ;
-  cMo[0][3] = 0.1 ;
-  cMo[1][3] = 0.2 ;
-  cMo[2][3] = 2 ;
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
-
-  vpHomogeneousMatrix cMod ;
-  cMod[0][3] = 0 ;
-  cMod[1][3] = 0 ;
-  cMod[2][3] = 1 ;
-
-  // sets the sphere coordinates in the world frame
-  vpSphere sphere ;
-  sphere.setWorldCoordinates(0,0,0,0.1) ;
-
-  // sets the desired position of the visual feature
-  vpFeatureEllipse pd ;
-  sphere.track(cMod) ;
-  vpFeatureBuilder::create(pd,sphere)  ;
-
-  // computes the sphere coordinates in the camera frame and its 2D coordinates
-  // sets the current position of the visual feature
-  vpFeatureEllipse p ;
-  sphere.track(cMo) ;
-  vpFeatureBuilder::create(p,sphere)  ;
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - robot is controlled in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
-
-  // we want to see a sphere on a sphere
-  task.addFeature(p,pd) ;
-
-  // set the gain
-  task.setLambda(1) ;
-
-  // Display task information
-  task.print() ;
-
-  unsigned int iter=0 ;
-  // loop
-  while(iter++ < 500)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
-
-    // get the robot position
+    vpServo task ;
+    vpSimulatorCamera robot ;
+
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task : servo a sphere " << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo ;
+    cMo[0][3] = 0.1 ;
+    cMo[1][3] = 0.2 ;
+    cMo[2][3] = 2 ;
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
     robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+    wMo = wMc * cMo;
+
+    vpHomogeneousMatrix cMod ;
+    cMod[0][3] = 0 ;
+    cMod[1][3] = 0 ;
+    cMod[2][3] = 1 ;
+
+    // sets the sphere coordinates in the world frame
+    vpSphere sphere ;
+    sphere.setWorldCoordinates(0,0,0,0.1) ;
 
-    // new sphere position: retrieve x,y and Z of the vpSphere structure
+    // sets the desired position of the visual feature
+    vpFeatureEllipse pd ;
+    sphere.track(cMod) ;
+    vpFeatureBuilder::create(pd,sphere)  ;
+
+    // computes the sphere coordinates in the camera frame and its 2D coordinates
+    // sets the current position of the visual feature
+    vpFeatureEllipse p ;
     sphere.track(cMo) ;
-    vpFeatureBuilder::create(p,sphere);
+    vpFeatureBuilder::create(p,sphere)  ;
 
-    // compute the control law
-    v = task.computeControlLaw() ;
+    // define the task
+    // - we want an eye-in-hand control law
+    // - robot is controlled in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
 
-    std::cout << "Task rank: " << task.getTaskRank() << std::endl ;
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    // we want to see a sphere on a sphere
+    task.addFeature(p,pd) ;
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
-  }
+    // set the gain
+    task.setLambda(1) ;
 
-  // Display task information
-  task.print() ;
-  task.kill();
-}
+    // Display task information
+    task.print() ;
+
+    unsigned int iter=0 ;
+    // loop
+    while(iter++ < 500)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
 
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // new sphere position: retrieve x,y and Z of the vpSphere structure
+      sphere.track(cMo) ;
+      vpFeatureBuilder::create(p,sphere);
+
+      // compute the control law
+      v = task.computeControlLaw() ;
+
+      std::cout << "Task rank: " << task.getTaskRank() << std::endl ;
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    }
+
+    // Display task information
+    task.print() ;
+    task.kill();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
+  }
+}
diff --git a/example/robot-simulator/camera/servoSimuSphere2DCamVelocitySecondaryTask.cpp b/example/robot-simulator/camera/servoSimuSphere2DCamVelocitySecondaryTask.cpp
index 76dd0197..340f2dcb 100644
--- a/example/robot-simulator/camera/servoSimuSphere2DCamVelocitySecondaryTask.cpp
+++ b/example/robot-simulator/camera/servoSimuSphere2DCamVelocitySecondaryTask.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimuSphere2DCamVelocitySecondaryTask.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -67,6 +67,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
 Print the program options.
@@ -109,15 +112,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -126,7 +129,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -136,107 +139,114 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  vpServo task ;
-  vpSimulatorCamera robot ;
-
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task : servo a sphere with a secondary task" << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo ;
-  cMo[0][3] = 0.1 ;
-  cMo[1][3] = 0.2 ;
-  cMo[2][3] = 2 ;
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
-
-  vpHomogeneousMatrix cMod ;
-  cMod[0][3] = 0 ;
-  cMod[1][3] = 0 ;
-  cMod[2][3] = 1 ;
-
-  // sets the sphere coordinates in the world frame
-  vpSphere sphere ;
-  sphere.setWorldCoordinates(0,0,0,0.1) ;
-
-  // sets the desired position of the visual feature
-  vpFeatureEllipse pd ;
-  sphere.track(cMod) ;
-  vpFeatureBuilder::create(pd,sphere)  ;
-
-  // computes  the sphere coordinates in the camera frame and its 2D coordinates
-  // sets the current position of the visual feature
-  vpFeatureEllipse p ;
-  sphere.track(cMo) ;
-  vpFeatureBuilder::create(p,sphere)  ;
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - robot is controlled in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
-
-  // we want to see a sphere on a sphere
-  std::cout << std::endl ;
-  task.addFeature(p,pd) ;
-
-  // set the gain
-  task.setLambda(1) ;
-
-  // Display task information
-  task.print() ;
-  // exit(1) ;
-  unsigned int iter=0 ;
-  // loop
-  while(iter++ < 500)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
-
-    // get the robot position
+    vpServo task ;
+    vpSimulatorCamera robot ;
+
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task : servo a sphere with a secondary task" << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo ;
+    cMo[0][3] = 0.1 ;
+    cMo[1][3] = 0.2 ;
+    cMo[2][3] = 2 ;
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
     robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
-
-    // new sphere position: retrieve x,y and Z of the vpSphere structure
-    sphere.track(cMo) ;
-    vpFeatureBuilder::create(p,sphere);
+    wMo = wMc * cMo;
 
-    vpColVector de2dt(6) ;
-    de2dt[2] = 1 ;    // should be zero in (I-WpW)de2dt
-    de2dt[5] = 0.01 ; // should be ok
-    de2dt[0] = 0.01 ;  // should generate a motion on (I-WpW)de2dt[4]
+    vpHomogeneousMatrix cMod ;
+    cMod[0][3] = 0 ;
+    cMod[1][3] = 0 ;
+    cMod[2][3] = 1 ;
 
-    // compute the control law
-    v = task.computeControlLaw() ;
+    // sets the sphere coordinates in the world frame
+    vpSphere sphere ;
+    sphere.setWorldCoordinates(0,0,0,0.1) ;
 
-    std::cout << "de2dt :"<< de2dt.t() << std::endl;
-    vpColVector sec ;
-    sec = task.secondaryTask(de2dt) ;
-    std::cout << "(I-WpW)de2dt :"<< sec.t() << std::endl;
+    // sets the desired position of the visual feature
+    vpFeatureEllipse pd ;
+    sphere.track(cMod) ;
+    vpFeatureBuilder::create(pd,sphere)  ;
 
-    if (iter>20)  v += sec ;
-
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+    // computes  the sphere coordinates in the camera frame and its 2D coordinates
+    // sets the current position of the visual feature
+    vpFeatureEllipse p ;
+    sphere.track(cMo) ;
+    vpFeatureBuilder::create(p,sphere)  ;
+
+    // define the task
+    // - we want an eye-in-hand control law
+    // - robot is controlled in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
+
+    // we want to see a sphere on a sphere
+    std::cout << std::endl ;
+    task.addFeature(p,pd) ;
+
+    // set the gain
+    task.setLambda(1) ;
+
+    // Display task information
+    task.print() ;
+    // exit(1) ;
+    unsigned int iter=0 ;
+    // loop
+    while(iter++ < 500)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
+
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
+
+      // new sphere position: retrieve x,y and Z of the vpSphere structure
+      sphere.track(cMo) ;
+      vpFeatureBuilder::create(p,sphere);
+
+      vpColVector de2dt(6) ;
+      de2dt[2] = 1 ;    // should be zero in (I-WpW)de2dt
+      de2dt[5] = 0.01 ; // should be ok
+      de2dt[0] = 0.01 ;  // should generate a motion on (I-WpW)de2dt[4]
+
+      // compute the control law
+      v = task.computeControlLaw() ;
+
+      std::cout << "de2dt :"<< de2dt.t() << std::endl;
+      vpColVector sec ;
+      sec = task.secondaryTask(de2dt) ;
+      std::cout << "(I-WpW)de2dt :"<< sec.t() << std::endl;
+
+      if (iter>20)  v += sec ;
+
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    }
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ;
+    // Display task information
+    task.print() ;
+    task.kill();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
-
-  // Display task information
-  task.print() ;
-  task.kill();
 }
 
diff --git a/example/robot-simulator/camera/servoSimuSquareLine2DCamVelocityDisplay.cpp b/example/robot-simulator/camera/servoSimuSquareLine2DCamVelocityDisplay.cpp
index 487b66f8..dc5da979 100644
--- a/example/robot-simulator/camera/servoSimuSquareLine2DCamVelocityDisplay.cpp
+++ b/example/robot-simulator/camera/servoSimuSquareLine2DCamVelocityDisplay.cpp
@@ -4,7 +4,7 @@
  * $Id: servoSimuSquareLine2DCamVelocityDisplay.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -77,6 +77,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdh"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display);
+
 /*!
 
 Print the program options.
@@ -127,9 +130,9 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
@@ -137,7 +140,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -146,7 +149,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -157,170 +160,177 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 int
 main(int argc, const char ** argv)
 {
-  bool opt_display = true;
-  bool opt_click_allowed = true;
+  try {
+    bool opt_display = true;
+    bool opt_click_allowed = true;
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+    // Read the command line options
+    if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  vpImage<unsigned char> I(512,512,0) ;
+    vpImage<unsigned char> I(512,512,0) ;
 
-  // We open a window using either X11, GTK or GDI.
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
 
-  if (opt_display) {
-    try{
-      // Display size is automatically defined by the image (I) size
-      display.init(I, 100, 100,"Camera view...") ;
-      // Display the image
-      // The image class has a member that specify a pointer toward
-      // the display that has been initialized in the display declaration
-      // therefore is is no longuer necessary to make a reference to the
-      // display variable.
-      vpDisplay::display(I) ;
-      vpDisplay::flush(I) ;
-    }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
+    if (opt_display) {
+      try{
+        // Display size is automatically defined by the image (I) size
+        display.init(I, 100, 100,"Camera view...") ;
+        // Display the image
+        // The image class has a member that specify a pointer toward
+        // the display that has been initialized in the display declaration
+        // therefore is is no longuer necessary to make a reference to the
+        // display variable.
+        vpDisplay::display(I) ;
+        vpDisplay::flush(I) ;
+      }
+      catch(...)
+      {
+        vpERROR_TRACE("Error while displaying the image") ;
+        exit(-1);
+      }
     }
-  }
 
-  // Set the camera parameters
-  double px, py ; px = py = 600 ;
-  double u0, v0 ; u0 = v0 = 256 ;
+    // Set the camera parameters
+    double px, py ; px = py = 600 ;
+    double u0, v0 ; u0 = v0 = 256 ;
 
-  vpCameraParameters cam(px,py,u0,v0);
+    vpCameraParameters cam(px,py,u0,v0);
 
-  vpServo task ;
-  vpSimulatorCamera robot ;
+    vpServo task ;
+    vpSimulatorCamera robot ;
 
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(0.2,0.2,1,
-                          vpMath::rad(45),  vpMath::rad(45),  vpMath::rad(125));
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(0.2,0.2,1,
+                            vpMath::rad(45),  vpMath::rad(45),  vpMath::rad(125));
 
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc) ;
+    wMo = wMc * cMo;
 
-  // sets the final camera location (for simulation purpose)
-  vpHomogeneousMatrix cMod(0,0,1,
-                           vpMath::rad(0),  vpMath::rad(0),  vpMath::rad(0));
+    // sets the final camera location (for simulation purpose)
+    vpHomogeneousMatrix cMod(0,0,1,
+                             vpMath::rad(0),  vpMath::rad(0),  vpMath::rad(0));
 
 
-  int nbline = 4;
+    int nbline = 4;
 
-  // sets the line coordinates (2 planes) in the world frame
-  vpLine line[4] ;
-  line[0].setWorldCoordinates(1,0,0,0.05,0,0,1,0);
-  line[1].setWorldCoordinates(0,1,0,0.05,0,0,1,0);
-  line[2].setWorldCoordinates(1,0,0,-0.05,0,0,1,0);
-  line[3].setWorldCoordinates(0,1,0,-0.05,0,0,1,0);
+    // sets the line coordinates (2 planes) in the world frame
+    vpLine line[4] ;
+    line[0].setWorldCoordinates(1,0,0,0.05,0,0,1,0);
+    line[1].setWorldCoordinates(0,1,0,0.05,0,0,1,0);
+    line[2].setWorldCoordinates(1,0,0,-0.05,0,0,1,0);
+    line[3].setWorldCoordinates(0,1,0,-0.05,0,0,1,0);
 
-  vpFeatureLine ld[4] ;
-  vpFeatureLine l[4] ;
+    vpFeatureLine ld[4] ;
+    vpFeatureLine l[4] ;
 
-  // sets the desired position of the visual feature
-  for(int i = 0; i < nbline; i++)
-  {
-    line[i].track(cMod) ;
-    line[i].print() ;
+    // sets the desired position of the visual feature
+    for(int i = 0; i < nbline; i++)
+    {
+      line[i].track(cMod) ;
+      line[i].print() ;
 
-    vpFeatureBuilder::create(ld[i],line[i])  ;
-  }
+      vpFeatureBuilder::create(ld[i],line[i])  ;
+    }
 
-  // computes  the line coordinates in the camera frame and its 2D coordinates
-  // sets the current position of the visual feature
-  for(int i = 0; i < nbline; i++)
-  {
-    line[i].track(cMo) ;
-    line[i].print() ;
+    // computes  the line coordinates in the camera frame and its 2D coordinates
+    // sets the current position of the visual feature
+    for(int i = 0; i < nbline; i++)
+    {
+      line[i].track(cMo) ;
+      line[i].print() ;
 
-    vpFeatureBuilder::create(l[i],line[i])  ;
-    l[i].print() ;
-  }
+      vpFeatureBuilder::create(l[i],line[i])  ;
+      l[i].print() ;
+    }
 
-  // define the task
-  // - we want an eye-in-hand control law
-  // - robot is controlled in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
-  task.setInteractionMatrixType(vpServo::CURRENT, vpServo::PSEUDO_INVERSE);
-  //It could be also interesting to test the following tasks
-  //task.setInteractionMatrixType(vpServo::DESIRED, vpServo::PSEUDO_INVERSE);
-  //task.setInteractionMatrixType(vpServo::MEAN, vpServo::PSEUDO_INVERSE);
+    // define the task
+    // - we want an eye-in-hand control law
+    // - robot is controlled in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
+    task.setInteractionMatrixType(vpServo::CURRENT, vpServo::PSEUDO_INVERSE);
+    //It could be also interesting to test the following tasks
+    //task.setInteractionMatrixType(vpServo::DESIRED, vpServo::PSEUDO_INVERSE);
+    //task.setInteractionMatrixType(vpServo::MEAN, vpServo::PSEUDO_INVERSE);
 
-  // we want to see a four lines on four lines
-  for(int i = 0; i < nbline; i++)
-    task.addFeature(l[i],ld[i]) ;
+    // we want to see a four lines on four lines
+    for(int i = 0; i < nbline; i++)
+      task.addFeature(l[i],ld[i]) ;
 
-  vpDisplay::display(I) ;
-  vpServoDisplay::display(task,cam,I) ;
-  vpDisplay::flush(I) ; 
+    vpDisplay::display(I) ;
+    vpServoDisplay::display(task,cam,I) ;
+    vpDisplay::flush(I) ;
 
-  // set the gain
-  task.setLambda(1) ;
+    // set the gain
+    task.setLambda(1) ;
 
-  // Display task information
-  task.print() ;
+    // Display task information
+    task.print() ;
 
-  if (opt_display && opt_click_allowed) {
-    std::cout << "\n\nClick in the camera view window to start..." << std::endl;
-    vpDisplay::getClick(I) ;
-  }
+    if (opt_display && opt_click_allowed) {
+      std::cout << "\n\nClick in the camera view window to start..." << std::endl;
+      vpDisplay::getClick(I) ;
+    }
 
-  unsigned int iter=0 ;
-  // loop
-  while(iter++<200)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
+    unsigned int iter=0 ;
+    // loop
+    while(iter++<200)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
 
-    // get the robot position
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
 
-    // new line position: retrieve x,y and Z of the vpLine structure
-    for(int i = 0; i < nbline; i++)
-    {
-      line[i].track(cMo) ;
-      vpFeatureBuilder::create(l[i],line[i]);
-    }
+      // new line position: retrieve x,y and Z of the vpLine structure
+      for(int i = 0; i < nbline; i++)
+      {
+        line[i].track(cMo) ;
+        vpFeatureBuilder::create(l[i],line[i]);
+      }
 
-    if (opt_display) {
-      vpDisplay::display(I) ;
-      vpServoDisplay::display(task,cam,I) ;
-      vpDisplay::flush(I) ;
-    }
+      if (opt_display) {
+        vpDisplay::display(I) ;
+        vpServoDisplay::display(task,cam,I) ;
+        vpDisplay::flush(I) ;
+      }
 
-    // compute the control law
-    v = task.computeControlLaw() ;
+      // compute the control law
+      v = task.computeControlLaw() ;
 
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ; ;
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ; ;
 
-  }
+    }
 
-  if (opt_display && opt_click_allowed) {
-    std::cout << "\nClick in the camera view window to end..." << std::endl;
-    vpDisplay::getClick(I) ;
-  }
+    if (opt_display && opt_click_allowed) {
+      std::cout << "\nClick in the camera view window to end..." << std::endl;
+      vpDisplay::getClick(I) ;
+    }
 
-  // Display task information
-  task.print() ;
-  task.kill();
+    // Display task information
+    task.print() ;
+    task.kill();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 #else
diff --git a/example/robot-simulator/camera/servoSimuThetaUCamVelocity.cpp b/example/robot-simulator/camera/servoSimuThetaUCamVelocity.cpp
index fe547223..b28ab523 100644
--- a/example/robot-simulator/camera/servoSimuThetaUCamVelocity.cpp
+++ b/example/robot-simulator/camera/servoSimuThetaUCamVelocity.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimuThetaUCamVelocity.cpp 2457 2010-01-07 10:41:18Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -66,7 +66,8 @@
 
 // List of allowed command line options
 #define GETOPTARGS	"h"
-
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
 /*!
 
 Print the program options.
@@ -108,15 +109,15 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -125,7 +126,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -135,88 +136,95 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  vpServo task ;
-  vpSimulatorCamera robot ;
+    vpServo task ;
+    vpSimulatorCamera robot ;
 
-  std::cout << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Eye-in-hand task control, velocity computed in the camera frame" << std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task :  servo using theta U visual feature " << std::endl ;
-  std::cout << "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
+    std::cout << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Eye-in-hand task control, velocity computed in the camera frame" << std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task :  servo using theta U visual feature " << std::endl ;
+    std::cout << "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
 
 
-  // sets the initial camera location
-  vpPoseVector c_r_o(0.1,0.2,2,
-                     vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50)
-                     ) ;
+    // sets the initial camera location
+    vpPoseVector c_r_o(0.1,0.2,2,
+                       vpMath::rad(20), vpMath::rad(10),  vpMath::rad(50)
+                       ) ;
 
-  vpHomogeneousMatrix cMo(c_r_o) ;
-  // Compute the position of the object in the world frame
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc) ;
-  wMo = wMc * cMo;
+    vpHomogeneousMatrix cMo(c_r_o) ;
+    // Compute the position of the object in the world frame
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc) ;
+    wMo = wMc * cMo;
 
-  // sets the desired camera location
-  vpPoseVector cd_r_o(0,0,1,
-                      vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
-  vpHomogeneousMatrix cdMo(cd_r_o) ;
+    // sets the desired camera location
+    vpPoseVector cd_r_o(0,0,1,
+                        vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)) ;
+    vpHomogeneousMatrix cdMo(cd_r_o) ;
 
 
-  // compute the rotation that the camera has to realize
-  vpHomogeneousMatrix cdMc ;
-  cdMc = cdMo*cMo.inverse() ;
-  vpFeatureThetaU tu(vpFeatureThetaU::cdRc) ;
-  tu.buildFrom(cdMc) ;
+    // compute the rotation that the camera has to realize
+    vpHomogeneousMatrix cdMc ;
+    cdMc = cdMo*cMo.inverse() ;
+    vpFeatureThetaU tu(vpFeatureThetaU::cdRc) ;
+    tu.buildFrom(cdMc) ;
 
-  // define the task
-  // - we want an eye-in-hand control law
-  // - robot is controlled in the camera frame
-  task.setServo(vpServo::EYEINHAND_CAMERA) ;
-  task.setInteractionMatrixType(vpServo::DESIRED) ;
+    // define the task
+    // - we want an eye-in-hand control law
+    // - robot is controlled in the camera frame
+    task.setServo(vpServo::EYEINHAND_CAMERA) ;
+    task.setInteractionMatrixType(vpServo::DESIRED) ;
 
-  task.addFeature(tu) ;
+    task.addFeature(tu) ;
 
-  // - set the gain
-  task.setLambda(1) ;
+    // - set the gain
+    task.setLambda(1) ;
 
-  // Display task information
-  task.print() ;
+    // Display task information
+    task.print() ;
 
-  unsigned int iter=0 ;
-  // loop
-  while(iter++ < 200)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
+    unsigned int iter=0 ;
+    // loop
+    while(iter++ < 200)
+    {
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
 
-    // get the robot position
-    robot.getPosition(wMc) ;
-    // Compute the position of the camera wrt the object frame
-    cMo = wMc.inverse() * wMo;
+      // get the robot position
+      robot.getPosition(wMc) ;
+      // Compute the position of the camera wrt the object frame
+      cMo = wMc.inverse() * wMo;
 
-    // new rotation to achieve
-    cdMc = cdMo*cMo.inverse() ;
-    tu.buildFrom(cdMc) ;
+      // new rotation to achieve
+      cdMc = cdMo*cMo.inverse() ;
+      tu.buildFrom(cdMc) ;
 
-    // compute the control law
-    v = task.computeControlLaw() ;
+      // compute the control law
+      v = task.computeControlLaw() ;
 
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
 
-    std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ; ;
-  }
+      std::cout << "|| s - s* || = " << ( task.getError() ).sumSquare() <<std::endl ; ;
+    }
 
-  // Display task information
-  task.print() ;
-  task.kill();
+    // Display task information
+    task.print() ;
+    task.kill();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
+  }
 }
 
diff --git a/example/robot-simulator/viper850/CMakeLists.txt b/example/robot-simulator/viper850/CMakeLists.txt
index c3ea7c65..e33e6c99 100644
--- a/example/robot-simulator/viper850/CMakeLists.txt
+++ b/example/robot-simulator/viper850/CMakeLists.txt
@@ -3,7 +3,7 @@
 # $Id: CMakeLists.txt 2457 2010-01-07 10:41:18Z nmelchio $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/robot-simulator/viper850/servoSimuViper850FourPoints2DCamVelocity.cpp b/example/robot-simulator/viper850/servoSimuViper850FourPoints2DCamVelocity.cpp
index 089be393..f00a4760 100644
--- a/example/robot-simulator/viper850/servoSimuViper850FourPoints2DCamVelocity.cpp
+++ b/example/robot-simulator/viper850/servoSimuViper850FourPoints2DCamVelocity.cpp
@@ -3,7 +3,7 @@
  * $Id: servoSimuFourPoints2DPolarCamVelocityDisplay.cpp 2503 2010-02-16 18:55:01Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -60,7 +60,7 @@
 #include <visp/vpDebug.h>
 #include <visp/vpConfig.h>
 
-#if (defined(WIN32) || defined(VISP_HAVE_PTHREAD)) && (defined (VISP_HAVE_X11) || defined(VISP_HAVE_OPENCV) || defined(VISP_HAVE_GDI))
+#if (defined(_WIN32) || defined(VISP_HAVE_PTHREAD)) && (defined (VISP_HAVE_X11) || defined(VISP_HAVE_OPENCV) || defined(VISP_HAVE_GDI))
 
 // We need to use threading capabilities. Thus on Unix-like
 // platforms, the libpthread third-party library need to be
@@ -88,6 +88,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdh"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display);
+
 /*!
 
 Print the program options.
@@ -137,9 +140,9 @@ Set the program options.
 */
 bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
@@ -147,7 +150,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -156,7 +159,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -166,194 +169,194 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display)
 int
 main(int argc, const char ** argv)
 {
-  bool opt_click_allowed = true;
-  bool opt_display = true;
+  try {
+    bool opt_click_allowed = true;
+    bool opt_display = true;
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+    // Read the command line options
+    if (getOptions(argc, argv, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  // We open two displays, one for the internal camera view, the other one for
-  // the external view, using either X11, GTK or GDI.
+    // We open two displays, one for the internal camera view, the other one for
+    // the external view, using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX displayInt;
+    vpDisplayX displayInt;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI displayInt;
+    vpDisplayGDI displayInt;
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV displayInt;
+    vpDisplayOpenCV displayInt;
 #endif
 
-  // open a display for the visualization
+    // open a display for the visualization
 
-  vpImage<unsigned char> Iint(480, 640, 255);
+    vpImage<unsigned char> Iint(480, 640, 255);
 
-  if (opt_display) {
-    displayInt.init(Iint,700,0, "Internal view") ;
-  }
-
-  int i;
-  vpServo task;
-
-  std::cout << std::endl ;
-  std::cout << "----------------------------------------------" << std::endl ;
-  std::cout << " Test program for vpServo "  <<std::endl ;
-  std::cout << " Eye-in-hand task control, articular velocity are computed" 
-            << std::endl ;
-  std::cout << " Simulation " << std::endl ;
-  std::cout << " task : servo 4 points " << std::endl ;
-  std::cout << "----------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // sets the initial camera location
-  vpHomogeneousMatrix cMo(-0.05,-0.05,0.7,
-                          vpMath::rad(10),  vpMath::rad(10),  vpMath::rad(-30));
-
-
-  // sets the point coordinates in the object frame
-  vpPoint point[4] ;
-  point[0].setWorldCoordinates(-0.045,-0.045,0) ;
-  point[3].setWorldCoordinates(-0.045,0.045,0) ;
-  point[2].setWorldCoordinates(0.045,0.045,0) ;
-  point[1].setWorldCoordinates(0.045,-0.045,0) ;
-
-  // computes the point coordinates in the camera frame and its 2D coordinates
-  for (i = 0 ; i < 4 ; i++)
-    point[i].track(cMo) ;
-
-  // sets the desired position of the point
-  vpFeaturePoint p[4] ;
-  for (i = 0 ; i < 4 ; i++)
-    vpFeatureBuilder::create(p[i],point[i])  ;  //retrieve x,y and Z of the vpPoint structure
-  
-  // sets the desired position of the feature point s*
-  vpFeaturePoint pd[4] ;
-  
-  //Desired pose
-  vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,0.0,0.8,vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)));
-  
-  // Projection of the points
-  for (int i = 0 ; i < 4 ; i++)
-    point[i].track(cdMo);
-  
-  for (int i = 0 ; i < 4 ; i++)
-    vpFeatureBuilder::create(pd[i], point[i]);
-
-  // define the task
-  // - we want an eye-in-hand control law
-  // - articular velocity are computed
-  task.setServo(vpServo::EYEINHAND_CAMERA);
-  task.setInteractionMatrixType(vpServo::DESIRED) ;
-
-  // - we want to see a point on a point
-  for (i = 0 ; i < 4 ; i++)
-    task.addFeature(p[i],pd[i]) ;
-
-  // set the gain
-  task.setLambda(0.8) ;
-  
-  // Declaration of the robot
-  vpSimulatorViper850 robot(opt_display);
-  
-  // Initialise the robot and especially the camera
-  robot.init(vpViper850::TOOL_PTGREY_FLEA2_CAMERA,vpCameraParameters::perspectiveProjWithoutDistortion);
-  robot.setRobotState(vpRobot::STATE_VELOCITY_CONTROL);
-  
-  // Initialise the object for the display part
-  robot.initScene(vpWireFrameSimulator::PLATE, vpWireFrameSimulator::D_STANDARD);
-  
-  // Initialise the position of the object relative to the pose of the robot's camera
-  robot.initialiseObjectRelativeToCamera(cMo);
-  
-  // Set the desired position (for the display part)
-  robot.setDesiredCameraPosition(cdMo);
-  
-  // Get the internal robot's camera parameters
-  vpCameraParameters cam;
-  robot.getCameraParameters(cam,Iint);
-  
-  if (opt_display)
-  { 
-    //Get the internal view
-	  vpDisplay::display(Iint);
-    robot.getInternalView(Iint);
-    vpDisplay::flush(Iint);
-  }
+    if (opt_display) {
+      displayInt.init(Iint,700,0, "Internal view") ;
+    }
 
-  // Display task information
-  task.print() ;
+    vpServo task;
 
-  unsigned int iter=0 ;
-  // loop
-  while(iter++<500)
-  {
-    std::cout << "---------------------------------------------" << iter <<std::endl ;
-    vpColVector v ;
+    std::cout << std::endl ;
+    std::cout << "----------------------------------------------" << std::endl ;
+    std::cout << " Test program for vpServo "  <<std::endl ;
+    std::cout << " Eye-in-hand task control, articular velocity are computed"
+              << std::endl ;
+    std::cout << " Simulation " << std::endl ;
+    std::cout << " task : servo 4 points " << std::endl ;
+    std::cout << "----------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
 
-    //Get the Time at the beginning of the loop
-    double t = vpTime::measureTimeMs();
+    // sets the initial camera location
+    vpHomogeneousMatrix cMo(-0.05,-0.05,0.7,
+                            vpMath::rad(10),  vpMath::rad(10),  vpMath::rad(-30));
 
-    //Get the current pose of the camera
-    cMo = robot.get_cMo();
 
-    if (iter==1) {
-      std::cout <<"Initial robot position with respect to the object frame:\n";
-      cMo.print();
-    }
+    // sets the point coordinates in the object frame
+    vpPoint point[4] ;
+    point[0].setWorldCoordinates(-0.045,-0.045,0) ;
+    point[3].setWorldCoordinates(-0.045,0.045,0) ;
+    point[2].setWorldCoordinates(0.045,0.045,0) ;
+    point[1].setWorldCoordinates(0.045,-0.045,0) ;
 
-    // new point position
-    for (i = 0 ; i < 4 ; i++)
-    {
+    // computes the point coordinates in the camera frame and its 2D coordinates
+    for (unsigned int i = 0 ; i < 4 ; i++)
       point[i].track(cMo) ;
-      //retrieve x,y and Z of the vpPoint structure
-      try {
-        vpFeatureBuilder::create(p[i],point[i])  ;
-      }
-      catch(...)
-      {
-        break;
-      }
-    }
+
+    // sets the desired position of the point
+    vpFeaturePoint p[4] ;
+    for (unsigned int i = 0 ; i < 4 ; i++)
+      vpFeatureBuilder::create(p[i],point[i])  ;  //retrieve x,y and Z of the vpPoint structure
+
+    // sets the desired position of the feature point s*
+    vpFeaturePoint pd[4] ;
+
+    //Desired pose
+    vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,0.0,0.8,vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)));
+
+    // Projection of the points
+    for (unsigned int i = 0 ; i < 4 ; i++)
+      point[i].track(cdMo);
+
+    for (unsigned int i = 0 ; i < 4 ; i++)
+      vpFeatureBuilder::create(pd[i], point[i]);
+
+    // define the task
+    // - we want an eye-in-hand control law
+    // - articular velocity are computed
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::DESIRED) ;
+
+    // - we want to see a point on a point
+    for (unsigned int i = 0 ; i < 4 ; i++)
+      task.addFeature(p[i],pd[i]) ;
+
+    // set the gain
+    task.setLambda(0.8) ;
+
+    // Declaration of the robot
+    vpSimulatorViper850 robot(opt_display);
+
+    // Initialise the robot and especially the camera
+    robot.init(vpViper850::TOOL_PTGREY_FLEA2_CAMERA,vpCameraParameters::perspectiveProjWithoutDistortion);
+    robot.setRobotState(vpRobot::STATE_VELOCITY_CONTROL);
+
+    // Initialise the object for the display part
+    robot.initScene(vpWireFrameSimulator::PLATE, vpWireFrameSimulator::D_STANDARD);
+
+    // Initialise the position of the object relative to the pose of the robot's camera
+    robot.initialiseObjectRelativeToCamera(cMo);
+
+    // Set the desired position (for the display part)
+    robot.setDesiredCameraPosition(cdMo);
+
+    // Get the internal robot's camera parameters
+    vpCameraParameters cam;
+    robot.getCameraParameters(cam,Iint);
 
     if (opt_display)
     {
-      // Get the internal view and display it
-      vpDisplay::display(Iint) ;
+      //Get the internal view
+      vpDisplay::display(Iint);
       robot.getInternalView(Iint);
       vpDisplay::flush(Iint);
     }
 
-    if (opt_display && opt_click_allowed && iter == 1)
+    // Display task information
+    task.print() ;
+
+    unsigned int iter=0 ;
+    // loop
+    while(iter++<500)
     {
-      // suppressed for automate test
-      std::cout << "Click in the internal view window to continue..." << std::endl;
-      vpDisplay::getClick(Iint) ;
-    }
+      std::cout << "---------------------------------------------" << iter <<std::endl ;
+      vpColVector v ;
 
-    // compute the control law
-    v = task.computeControlLaw() ;
+      //Get the Time at the beginning of the loop
+      double t = vpTime::measureTimeMs();
 
-    // send the camera velocity to the controller
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+      //Get the current pose of the camera
+      cMo = robot.get_cMo();
 
-    std::cout << "|| s - s* || " << ( task.getError() ).sumSquare() <<std::endl ;
+      if (iter==1) {
+        std::cout <<"Initial robot position with respect to the object frame:\n";
+        cMo.print();
+      }
 
-    // The main loop has a duration of 10 ms at minimum
-    vpTime::wait(t,10);
-  }
+      // new point position
+      for (unsigned int i = 0 ; i < 4 ; i++)
+      {
+        point[i].track(cMo) ;
+        //retrieve x,y and Z of the vpPoint structure
+        vpFeatureBuilder::create(p[i],point[i])  ;
+      }
+
+      if (opt_display)
+      {
+        // Get the internal view and display it
+        vpDisplay::display(Iint) ;
+        robot.getInternalView(Iint);
+        vpDisplay::flush(Iint);
+      }
 
-  // Display task information
-  task.print() ;
-  task.kill();
+      if (opt_display && opt_click_allowed && iter == 1)
+      {
+        // suppressed for automate test
+        std::cout << "Click in the internal view window to continue..." << std::endl;
+        vpDisplay::getClick(Iint) ;
+      }
+
+      // compute the control law
+      v = task.computeControlLaw() ;
+
+      // send the camera velocity to the controller
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+      std::cout << "|| s - s* || " << ( task.getError() ).sumSquare() <<std::endl ;
+
+      // The main loop has a duration of 10 ms at minimum
+      vpTime::wait(t,10);
+    }
 
-  std::cout <<"Final robot position with respect to the object frame:\n";
-  cMo.print();
+    // Display task information
+    task.print() ;
+    task.kill();
 
-  if (opt_display && opt_click_allowed) 
-  {
-    // suppressed for automate test
-    std::cout << "Click in the internal view window to end..." << std::endl;
-    vpDisplay::getClick(Iint) ;
+    std::cout <<"Final robot position with respect to the object frame:\n";
+    cMo.print();
+
+    if (opt_display && opt_click_allowed)
+    {
+      // suppressed for automate test
+      std::cout << "Click in the internal view window to end..." << std::endl;
+      vpDisplay::getClick(Iint) ;
+    }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
diff --git a/example/servo-afma4/CMakeLists.txt b/example/servo-afma4/CMakeLists.txt
index 33f25e09..d7be99ed 100644
--- a/example/servo-afma4/CMakeLists.txt
+++ b/example/servo-afma4/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma4/moveAfma4.cpp b/example/servo-afma4/moveAfma4.cpp
index 3cb1cae3..f889ed7a 100644
--- a/example/servo-afma4/moveAfma4.cpp
+++ b/example/servo-afma4/moveAfma4.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: moveAfma4.cpp 4086 2013-02-02 07:26:19Z fspindle $
+ * $Id: moveAfma4.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -241,11 +241,12 @@ main(int argc, const char ** argv)
     sleep(5) ;
 
     std::cout << "The end" << std::endl;
+    return 0;
   }
-  catch (...) {
-    vpERROR_TRACE(" Test failed") ;
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
-  return 0;
 }
 #else
 int
diff --git a/example/servo-afma4/servoAfma4Point2DArtVelocity.cpp b/example/servo-afma4/servoAfma4Point2DArtVelocity.cpp
index 01f8f428..53763b0c 100644
--- a/example/servo-afma4/servoAfma4Point2DArtVelocity.cpp
+++ b/example/servo-afma4/servoAfma4Point2DArtVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma4Point2DArtVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoAfma4Point2DArtVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -101,40 +101,40 @@
 int
 main()
 {
-  // Log file creation in /tmp/$USERNAME/log.dat
-  // This file contains by line:
-  // - the 6 computed joint velocities (m/s, rad/s) to achieve the task
-  // - the 6 mesured joint velocities (m/s, rad/s)
-  // - the 6 mesured joint positions (m, rad)
-  // - the 2 values of s - s*
-  std::string username;
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Create a log filename to save velocities...
-  std::string logdirname;
-  logdirname ="/tmp/" + username;
-
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(logdirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(logdirname);
-    }
-    catch (...) {
-      std::cerr << std::endl
-                << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << logdirname << std::endl;
-      exit(-1);
+  try {
+    // Log file creation in /tmp/$USERNAME/log.dat
+    // This file contains by line:
+    // - the 6 computed joint velocities (m/s, rad/s) to achieve the task
+    // - the 6 mesured joint velocities (m/s, rad/s)
+    // - the 6 mesured joint positions (m, rad)
+    // - the 2 values of s - s*
+    std::string username;
+    // Get the user login name
+    vpIoTools::getUserName(username);
+
+    // Create a log filename to save velocities...
+    std::string logdirname;
+    logdirname ="/tmp/" + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(logdirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(logdirname);
+      }
+      catch (...) {
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << logdirname << std::endl;
+        exit(-1);
+      }
     }
-  }
-  std::string logfilename;
-  logfilename = logdirname + "/log.dat";
+    std::string logfilename;
+    logfilename = logdirname + "/log.dat";
 
-  // Open the log file name
-  std::ofstream flog(logfilename.c_str());
+    // Open the log file name
+    std::ofstream flog(logfilename.c_str());
 
-  try {
     //    vpRobotAfma4 robot ;
     vpRobotAfma4 robot ;
 
@@ -273,7 +273,7 @@ main()
       // v[0], v[1], v[2] correspond to joint translation velocities in m/s
       // v[3], v[4], v[5] correspond to joint rotation velocities in rad/s
       flog << v[0] << " " << v[1] << " " << v[2] << " "
-           << v[3] << " " << v[4] << " " << v[5] << " ";
+                   << v[3] << " " << v[4] << " " << v[5] << " ";
 
       // Get the measured joint velocities of the robot
       vpColVector qvel;
@@ -284,7 +284,7 @@ main()
       // - qvel[3], qvel[4], qvel[5] correspond to measured joint rotation
       //   velocities in rad/s
       flog << qvel[0] << " " << qvel[1] << " " << qvel[2] << " "
-           << qvel[3] << " " << qvel[4] << " " << qvel[5] << " ";
+                      << qvel[3] << " " << qvel[4] << " " << qvel[5] << " ";
 
       // Get the measured joint positions of the robot
       vpColVector q;
@@ -295,7 +295,7 @@ main()
       // - q[3], q[4], q[5] correspond to measured joint rotation
       //   positions in rad
       flog << q[0] << " " << q[1] << " " << q[2] << " "
-           << q[3] << " " << q[4] << " " << q[5] << " ";
+                   << q[3] << " " << q[4] << " " << q[5] << " ";
 
       // Save feature error (s-s*) for the feature point. For this feature
       // point, we have 2 errors (along x and y axis).  This error is expressed
@@ -313,11 +313,9 @@ main()
     task.kill();
     return 0;
   }
-  catch (...)
-  {
-    flog.close() ; // Close the log file
-    vpERROR_TRACE(" Test failed") ;
-    return 0;
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
 }
 
diff --git a/example/servo-afma4/servoAfma4Point2DCamVelocity.cpp b/example/servo-afma4/servoAfma4Point2DCamVelocity.cpp
index 5a3499ff..5549e73e 100644
--- a/example/servo-afma4/servoAfma4Point2DCamVelocity.cpp
+++ b/example/servo-afma4/servoAfma4Point2DCamVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma4Point2DCamVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoAfma4Point2DCamVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -98,41 +98,40 @@
 int
 main()
 {
-  // Log file creation in /tmp/$USERNAME/log.dat
-  // This file contains by line:
-  // - the 6 computed cam velocities (m/s, rad/s) to achieve the task
-  // - the 6 mesured joint velocities (m/s, rad/s)
-  // - the 6 mesured joint positions (m, rad)
-  // - the 2 values of s - s*
-  std::string username;
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Create a log filename to save velocities...
-  std::string logdirname;
-  logdirname ="/tmp/" + username;
-
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(logdirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(logdirname);
+  try {
+    // Log file creation in /tmp/$USERNAME/log.dat
+    // This file contains by line:
+    // - the 6 computed cam velocities (m/s, rad/s) to achieve the task
+    // - the 6 mesured joint velocities (m/s, rad/s)
+    // - the 6 mesured joint positions (m, rad)
+    // - the 2 values of s - s*
+    std::string username;
+    // Get the user login name
+    vpIoTools::getUserName(username);
+
+    // Create a log filename to save velocities...
+    std::string logdirname;
+    logdirname ="/tmp/" + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(logdirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(logdirname);
+      }
+      catch (...) {
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << logdirname << std::endl;
+        exit(-1);
+      }
     }
-    catch (...) {
-      std::cerr << std::endl
-                << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << logdirname << std::endl;
-      exit(-1);
-    }
-  }
-  std::string logfilename;
-  logfilename = logdirname + "/log.dat";
+    std::string logfilename;
+    logfilename = logdirname + "/log.dat";
 
-  // Open the log file name
-  std::ofstream flog(logfilename.c_str());
+    // Open the log file name
+    std::ofstream flog(logfilename.c_str());
 
-  try
-  {
     vpRobotAfma4 robot ;
     vpServo task ;
 
@@ -170,7 +169,7 @@ main()
 
     std::cout << "Click on a dot..." << std::endl;
     dot.initTracking(I) ;
-    
+
     // Get the cog of the dot
     vpImagePoint cog = dot.getCog();
 
@@ -241,7 +240,7 @@ main()
       // v[0], v[1], v[2] correspond to camera translation velocities in m/s
       // v[3], v[4], v[5] correspond to camera rotation velocities in rad/s
       flog << v[0] << " " << v[1] << " " << v[2] << " "
-           << v[3] << " " << v[4] << " " << v[5] << " ";
+                   << v[3] << " " << v[4] << " " << v[5] << " ";
 
       // Get the measured joint velocities of the robot
       vpColVector qvel;
@@ -252,7 +251,7 @@ main()
       // - qvel[3], qvel[4], qvel[5] correspond to measured joint rotation
       //   velocities in rad/s
       flog << qvel[0] << " " << qvel[1] << " " << qvel[2] << " "
-           << qvel[3] << " " << qvel[4] << " " << qvel[5] << " ";
+                      << qvel[3] << " " << qvel[4] << " " << qvel[5] << " ";
 
       // Get the measured joint positions of the robot
       vpColVector q;
@@ -263,7 +262,7 @@ main()
       // - q[3], q[4], q[5] correspond to measured joint rotation
       //   positions in rad
       flog << q[0] << " " << q[1] << " " << q[2] << " "
-           << q[3] << " " << q[4] << " " << q[5] << " ";
+                   << q[3] << " " << q[4] << " " << q[5] << " ";
 
       // Save feature error (s-s*) for the feature point. For this feature
       // point, we have 2 errors (along x and y axis).  This error is expressed
@@ -285,11 +284,9 @@ main()
 
     return 0;
   }
-  catch (...)
-  {
-    flog.close() ; // Close the log file
-    vpERROR_TRACE(" Test failed") ;
-    return 0;
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
 }
 
diff --git a/example/servo-afma4/servoAfma4Point2DCamVelocityKalman.cpp b/example/servo-afma4/servoAfma4Point2DCamVelocityKalman.cpp
index 17b86106..05a8ec83 100644
--- a/example/servo-afma4/servoAfma4Point2DCamVelocityKalman.cpp
+++ b/example/servo-afma4/servoAfma4Point2DCamVelocityKalman.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma4Point2DCamVelocityKalman.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoAfma4Point2DCamVelocityKalman.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -194,53 +194,53 @@ bool getOptions(int argc, const char **argv, KalmanType &kalman,
 int
 main(int argc, const char ** argv)
 {
-  KalmanType opt_kalman = K_NONE;
-  vpAdaptiveGain	lambda; // Gain de la commande
-  bool doAdaptativeGain = true; // Compute adaptative gain
-  lambda.initStandard(4, 0.2, 40);
-  int opt_cam_frequency = 60; // 60 Hz
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_kalman, doAdaptativeGain, lambda) == false) {
-    return (-1);
-  }
-
-  // Log file creation in /tmp/$USERNAME/log.dat
-  // This file contains by line:
-  // - the 6 computed cam velocities (m/s, rad/s) to achieve the task
-  // - the 6 mesured joint velocities (m/s, rad/s)
-  // - the 6 mesured joint positions (m, rad)
-  // - the 2 values of s - s*
-  std::string username;
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Create a log filename to save velocities...
-  std::string logdirname;
-  logdirname ="/tmp/" + username;
-
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(logdirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(logdirname);
+  try {
+    KalmanType opt_kalman = K_NONE;
+    vpAdaptiveGain	lambda; // Gain de la commande
+    bool doAdaptativeGain = true; // Compute adaptative gain
+    lambda.initStandard(4, 0.2, 40);
+    int opt_cam_frequency = 60; // 60 Hz
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_kalman, doAdaptativeGain, lambda) == false) {
+      return (-1);
     }
-    catch (...) {
-      std::cerr << std::endl
-                << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << logdirname << std::endl;
-      exit(-1);
+
+    // Log file creation in /tmp/$USERNAME/log.dat
+    // This file contains by line:
+    // - the 6 computed cam velocities (m/s, rad/s) to achieve the task
+    // - the 6 mesured joint velocities (m/s, rad/s)
+    // - the 6 mesured joint positions (m, rad)
+    // - the 2 values of s - s*
+    std::string username;
+    // Get the user login name
+    vpIoTools::getUserName(username);
+
+    // Create a log filename to save velocities...
+    std::string logdirname;
+    logdirname ="/tmp/" + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(logdirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(logdirname);
+      }
+      catch (...) {
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << logdirname << std::endl;
+        exit(-1);
+      }
     }
-  }
-  std::string logfilename;
-  logfilename = logdirname + "/log.dat";
+    std::string logfilename;
+    logfilename = logdirname + "/log.dat";
 
-  // Open the log file name
-  std::ofstream flog(logfilename.c_str());
+    // Open the log file name
+    std::ofstream flog(logfilename.c_str());
+
+    vpServo task ;
 
-  vpServo task ;
-  
-  try {
     vpImage<unsigned char> I ;
     vp1394TwoGrabber g(false);
     g.setVideoMode(vp1394TwoGrabber::vpVIDEO_MODE_640x480_MONO8);
@@ -271,16 +271,16 @@ main(int argc, const char ** argv)
     std::cout << "Eye-in-hand task control, velocity computed in the camera frame" << std::endl ;
     std::cout << "Task : servo a point \n" << std::endl ;
 
-    // Kalman filtering 
+    // Kalman filtering
     switch(opt_kalman) {
-    case K_NONE: 
+    case K_NONE:
       std::cout << "Servo with no target motion compensation (see -K option)\n";
       break;
     case K_VELOCITY:
       std::cout << "Servo with target motion compensation using a Kalman filter\n"
                 << "with constant velocity modelization (see -K option)\n";
       break;
-    case K_ACCELERATION: 
+    case K_ACCELERATION:
       std::cout << "Servo with target motion compensation using a Kalman filter\n"
                 << "with constant acceleration modelization (see -K option)\n";
       break;
@@ -309,7 +309,7 @@ main(int argc, const char ** argv)
 
     // Sets the current position of the visual feature
     vpFeaturePoint p ;
-    vpFeatureBuilder::create(p, cam, dot) ;  
+    vpFeatureBuilder::create(p, cam, dot) ;
 
     // Sets the desired position of the visual feature
     vpFeaturePoint pd ;
@@ -336,7 +336,7 @@ main(int argc, const char ** argv)
 
     //!Initialize filter
     vpLinearKalmanFilterInstantiation kalman;
-    
+
     // Initialize the kalman filter
     unsigned int nsignal = 2; // The two values of dedt
     double rho = 0.3;
@@ -350,9 +350,9 @@ main(int argc, const char ** argv)
       kalman.setStateModel(vpLinearKalmanFilterInstantiation::stateConstVelWithColoredNoise_MeasureVel);
       state_size = kalman.getStateSize();
       sigma_state.resize(state_size*nsignal);
-      sigma_state = 0.00001; // Same state variance for all signals 
+      sigma_state = 0.00001; // Same state variance for all signals
       sigma_measure = 0.05; // Same measure variance for all the signals
-      double dummy = 0; // non used parameter dt for the velocity state model 
+      double dummy = 0; // non used parameter dt for the velocity state model
       kalman.initFilter(nsignal, sigma_state, sigma_measure, rho, dummy);
 
       break;
@@ -381,15 +381,15 @@ main(int argc, const char ** argv)
     vpColVector v(6), v1(6), v2(6); // robot velocities
     //task error
     vpColVector err(2), err_0(2), err_1(2);
-    vpColVector dedt_filt(2), dedt_mes(2);	
+    vpColVector dedt_filt(2), dedt_mes(2);
 
 
-    t_1 = vpTime::measureTimeMs(); // t_1: time at previous iter 	
+    t_1 = vpTime::measureTimeMs(); // t_1: time at previous iter
 
     Tv_0  = 0;
 
     //
-    // Warning: In all varaible names, 
+    // Warning: In all varaible names,
     //   _0 means the value for the current iteration (t=0)
     //   _1 means the value for the previous iteration (t=-1)
     //   _2 means the value for the previous previous iteration (t=-2)
@@ -426,7 +426,7 @@ main(int argc, const char ** argv)
       //!-------------------- Update displacements and time ------------------
       //----------------------------------------------------------------------
       vm_0 = vm;
-      
+
       // Update current loop time and previous one
       Tv_1 = Tv_0;
       Tv_0 = Tv;
@@ -437,13 +437,13 @@ main(int argc, const char ** argv)
       err = task.error;
 
       //!terme correctif : de/dt = Delta s / Delta t - L*vc
-      if (iter==0){			
+      if (iter==0){
         err_0 = 0;
         err_1 = 0;
         dedt_mes = 0;
         dedt_filt = 0;
       }
-      else{				
+      else{
         err_1 = err_0;
         err_0 = err;
 
@@ -457,13 +457,13 @@ main(int argc, const char ** argv)
       //----------------------------------------------------------------------
       //----------------------- Kalman Filter Equations ----------------------
       //----------------------------------------------------------------------
-      // Kalman filtering 
+      // Kalman filtering
       switch(opt_kalman) {
-      case K_NONE: 
+      case K_NONE:
         dedt_filt = 0;
         break;
       case K_VELOCITY:
-      case K_ACCELERATION: 
+      case K_ACCELERATION:
         kalman.filter(dedt_mes);
         for (unsigned int i=0; i < nsignal; i++) {
           dedt_filt[i] = kalman.Xest[i*state_size];
@@ -477,15 +477,15 @@ main(int argc, const char ** argv)
       //   std::cout << "task J1p: " <<  J1p.t() << std::endl  ;
       //   std::cout << "dedt_filt: " <<  dedt_filt.t() << std::endl  ;
 
-      v = v1 + v2;	
-      
+      v = v1 + v2;
+
       // Display the current and desired feature points in the image display
       vpServoDisplay::display(task, cam, I) ;
 
 
       //    std::cout << "v2 : " << v2.t() << std::endl  ;
       //   std::cout << "v1 : " << v1.t() << std::endl  ;
-      
+
       //   std::cout << "v : " << v.t();
 
       // Apply the camera velocities to the robot
@@ -498,15 +498,15 @@ main(int argc, const char ** argv)
       // v[0], v[1], v[2] correspond to camera translation velocities in m/s
       // v[3], v[4], v[5] correspond to camera rotation velocities in rad/s
       flog << v[0] << " " << v[1] << " " << v[2] << " "
-           << v[3] << " " << v[4] << " " << v[5] << " ";
+                   << v[3] << " " << v[4] << " " << v[5] << " ";
 
       // Save feature error (s-s*) for the feature point. For this feature
       // point, we have 2 errors (along x and y axis).  This error is expressed
       // in meters in the camera frame
-      flog << task.error[0] << " " << task.error[1] << " "; 
+      flog << task.error[0] << " " << task.error[1] << " ";
 
       // Save feature error (s-s*) in pixels in the image.
-      flog << cog.get_u()-cam.get_u0() << " " 
+      flog << cog.get_u()-cam.get_u0() << " "
            << cog.get_v()-cam.get_v0() << " ";
 
       // Save de/dt
@@ -534,15 +534,11 @@ main(int argc, const char ** argv)
 
     return 0;
   }
-  catch (...) {
-    flog.close() ; // Close the log file
-
-    // Kill the task
-    task.kill();
-
-    vpERROR_TRACE(" Test failed") ;
-    return 0;
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+    return 1;
   }
+
 }
 
 
diff --git a/example/servo-afma6/CMakeLists.txt b/example/servo-afma6/CMakeLists.txt
index e32c378d..f010c4a7 100644
--- a/example/servo-afma6/CMakeLists.txt
+++ b/example/servo-afma6/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma6/servoAfma62DhalfCamVelocity.cpp b/example/servo-afma6/servoAfma62DhalfCamVelocity.cpp
index d7a0f240..91804385 100644
--- a/example/servo-afma6/servoAfma62DhalfCamVelocity.cpp
+++ b/example/servo-afma6/servoAfma62DhalfCamVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma62DhalfCamVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoAfma62DhalfCamVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma6/servoAfma6Cylinder2DCamVelocity.cpp b/example/servo-afma6/servoAfma6Cylinder2DCamVelocity.cpp
index fcfecf99..a45fed98 100644
--- a/example/servo-afma6/servoAfma6Cylinder2DCamVelocity.cpp
+++ b/example/servo-afma6/servoAfma6Cylinder2DCamVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma6Cylinder2DCamVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoAfma6Cylinder2DCamVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma6/servoAfma6Cylinder2DCamVelocitySecondaryTask.cpp b/example/servo-afma6/servoAfma6Cylinder2DCamVelocitySecondaryTask.cpp
index 77436b26..44429118 100644
--- a/example/servo-afma6/servoAfma6Cylinder2DCamVelocitySecondaryTask.cpp
+++ b/example/servo-afma6/servoAfma6Cylinder2DCamVelocitySecondaryTask.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma6Cylinder2DCamVelocitySecondaryTask.cpp 4107 2013-02-06 10:04:49Z fspindle $
+ * $Id: servoAfma6Cylinder2DCamVelocitySecondaryTask.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma6/servoAfma6Ellipse2DCamVelocity.cpp b/example/servo-afma6/servoAfma6Ellipse2DCamVelocity.cpp
index 8452d4b1..1accd1a2 100644
--- a/example/servo-afma6/servoAfma6Ellipse2DCamVelocity.cpp
+++ b/example/servo-afma6/servoAfma6Ellipse2DCamVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma6Ellipse2DCamVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoAfma6Ellipse2DCamVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma6/servoAfma6FourPoints2DArtVelocity.cpp b/example/servo-afma6/servoAfma6FourPoints2DArtVelocity.cpp
index 42d959e3..5e1c2cdb 100644
--- a/example/servo-afma6/servoAfma6FourPoints2DArtVelocity.cpp
+++ b/example/servo-afma6/servoAfma6FourPoints2DArtVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma6FourPoints2DArtVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoAfma6FourPoints2DArtVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma6/servoAfma6FourPoints2DCamVelocityInteractionCurrent.cpp b/example/servo-afma6/servoAfma6FourPoints2DCamVelocityInteractionCurrent.cpp
index 952c0981..debf5ddf 100644
--- a/example/servo-afma6/servoAfma6FourPoints2DCamVelocityInteractionCurrent.cpp
+++ b/example/servo-afma6/servoAfma6FourPoints2DCamVelocityInteractionCurrent.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma6FourPoints2DCamVelocityInteractionCurrent.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoAfma6FourPoints2DCamVelocityInteractionCurrent.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma6/servoAfma6FourPoints2DCamVelocityInteractionDesired.cpp b/example/servo-afma6/servoAfma6FourPoints2DCamVelocityInteractionDesired.cpp
index 0fa9f323..d59457f5 100644
--- a/example/servo-afma6/servoAfma6FourPoints2DCamVelocityInteractionDesired.cpp
+++ b/example/servo-afma6/servoAfma6FourPoints2DCamVelocityInteractionDesired.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma6FourPoints2DCamVelocityInteractionDesired.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoAfma6FourPoints2DCamVelocityInteractionDesired.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma6/servoAfma6Line2DCamVelocity.cpp b/example/servo-afma6/servoAfma6Line2DCamVelocity.cpp
index 1ea51394..3acfdff3 100644
--- a/example/servo-afma6/servoAfma6Line2DCamVelocity.cpp
+++ b/example/servo-afma6/servoAfma6Line2DCamVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma6Line2DCamVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoAfma6Line2DCamVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma6/servoAfma6Point2DArtVelocity.cpp b/example/servo-afma6/servoAfma6Point2DArtVelocity.cpp
index 43f0aa42..7f0e31d9 100644
--- a/example/servo-afma6/servoAfma6Point2DArtVelocity.cpp
+++ b/example/servo-afma6/servoAfma6Point2DArtVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma6Point2DArtVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoAfma6Point2DArtVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma6/servoAfma6Point2DCamVelocity.cpp b/example/servo-afma6/servoAfma6Point2DCamVelocity.cpp
index 695a3dd6..6ed0b84a 100644
--- a/example/servo-afma6/servoAfma6Point2DCamVelocity.cpp
+++ b/example/servo-afma6/servoAfma6Point2DCamVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma6Point2DCamVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoAfma6Point2DCamVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma6/servoAfma6Points2DCamVelocityEyeToHand.cpp b/example/servo-afma6/servoAfma6Points2DCamVelocityEyeToHand.cpp
index 1858d2f6..f42ea731 100644
--- a/example/servo-afma6/servoAfma6Points2DCamVelocityEyeToHand.cpp
+++ b/example/servo-afma6/servoAfma6Points2DCamVelocityEyeToHand.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma6Points2DCamVelocityEyeToHand.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: servoAfma6Points2DCamVelocityEyeToHand.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma6/servoAfma6Segment2DCamVelocity.cpp b/example/servo-afma6/servoAfma6Segment2DCamVelocity.cpp
index 867f09f8..c151bdeb 100644
--- a/example/servo-afma6/servoAfma6Segment2DCamVelocity.cpp
+++ b/example/servo-afma6/servoAfma6Segment2DCamVelocity.cpp
@@ -3,7 +3,7 @@
  * $Id: servoAfma6Point2DCamVelocity.cpp 3616 2012-03-09 14:31:52Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma6/servoAfma6SquareLines2DCamVelocity.cpp b/example/servo-afma6/servoAfma6SquareLines2DCamVelocity.cpp
index 10fae346..663fa0fe 100644
--- a/example/servo-afma6/servoAfma6SquareLines2DCamVelocity.cpp
+++ b/example/servo-afma6/servoAfma6SquareLines2DCamVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma6SquareLines2DCamVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoAfma6SquareLines2DCamVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-afma6/servoAfma6TwoLines2DCamVelocity.cpp b/example/servo-afma6/servoAfma6TwoLines2DCamVelocity.cpp
index 7bb50060..45f8bd8c 100644
--- a/example/servo-afma6/servoAfma6TwoLines2DCamVelocity.cpp
+++ b/example/servo-afma6/servoAfma6TwoLines2DCamVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoAfma6TwoLines2DCamVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoAfma6TwoLines2DCamVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-biclops/CMakeLists.txt b/example/servo-biclops/CMakeLists.txt
index 62e38ba6..0c420c62 100644
--- a/example/servo-biclops/CMakeLists.txt
+++ b/example/servo-biclops/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/servo-biclops/moveBiclops.cpp b/example/servo-biclops/moveBiclops.cpp
index a0bc6c6f..c02ed031 100644
--- a/example/servo-biclops/moveBiclops.cpp
+++ b/example/servo-biclops/moveBiclops.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: moveBiclops.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: moveBiclops.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-biclops/servoBiclopsPoint2DArtVelocity.cpp b/example/servo-biclops/servoBiclopsPoint2DArtVelocity.cpp
index bc30fe20..8450bd3b 100644
--- a/example/servo-biclops/servoBiclopsPoint2DArtVelocity.cpp
+++ b/example/servo-biclops/servoBiclopsPoint2DArtVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoBiclopsPoint2DArtVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoBiclopsPoint2DArtVelocity.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -69,14 +69,13 @@
 #include <visp/vpDebug.h> // Debug trace
 #include <signal.h>
 #include <stdlib.h>
-#if ( defined (VISP_HAVE_BICLOPS) && (defined (VISP_HAVE_DC1394_2) /*|| defined (VISP_HAVE_DC1394_1)*/ || defined(VISP_HAVE_DIRECTSHOW)) )
+#if ( defined (VISP_HAVE_BICLOPS) && (defined (VISP_HAVE_DC1394_2) || defined(VISP_HAVE_DIRECTSHOW)) )
 
 #ifdef VISP_HAVE_PTHREAD
 #  include <pthread.h>
 #endif
 
 #include <visp/vp1394TwoGrabber.h>
-//#include <visp/vp1394Grabber.h>
 #include <visp/vpDirectShowGrabber.h>
 #include <visp/vpImage.h>
 #include <visp/vpDisplay.h>
@@ -224,9 +223,9 @@ main(int argc, const char ** argv)
     std::string opt_debugdir;
 
     // Set the default output path
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
     opt_debugdir = "/tmp";
-#elif WIN32
+#elif defined(_WIN32)
     opt_debugdir = "C:/temp";
 #endif
 
@@ -279,8 +278,6 @@ main(int argc, const char ** argv)
 
 #if defined VISP_HAVE_DC1394_2
     vp1394TwoGrabber g;
-    // #elif defined VISP_HAVE_DC1394_1
-    //     vp1394Grabber g;
 #elif defined VISP_HAVE_DIRECTSHOW
     vpDirectShowGrabber g;
 #endif
@@ -302,11 +299,10 @@ main(int argc, const char ** argv)
     vpDisplayX display(I, 100, 100,"Display X...") ;
 #elif defined VISP_HAVE_GTK
     vpDisplayGTK display(I, 100, 100,"Display GTK...") ;
-#elif defined WIN32
+#elif defined(_WIN32)
     vpDisplayGDI display(I, 100, 100,"Display GDI...") ;
 #endif
 
-    
     try{
       vpDisplay::display(I) ;
       vpDisplay::flush(I) ;
diff --git a/example/servo-cycab/CMakeLists.txt b/example/servo-cycab/CMakeLists.txt
deleted file mode 100644
index 184a92ad..00000000
--- a/example/servo-cycab/CMakeLists.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-#############################################################################
-#
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
-#
-# This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
-# 
-# This software is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# ("GPL") version 2 as published by the Free Software Foundation.
-# See the file LICENSE.txt at the root directory of this source
-# distribution for additional information about the GNU GPL.
-#
-# For using ViSP with software that can not be combined with the GNU
-# GPL, please contact INRIA about acquiring a ViSP Professional 
-# Edition License.
-#
-# See http://www.irisa.fr/lagadic/visp/visp.html for more information.
-# 
-# This software was developed at:
-# INRIA Rennes - Bretagne Atlantique
-# Campus Universitaire de Beaulieu
-# 35042 Rennes Cedex
-# France
-# http://www.irisa.fr/lagadic
-#
-# If you have questions regarding the use of this file, please contact
-# INRIA at visp@inria.fr
-# 
-# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Description:
-# ViSP configuration file. 
-#
-# Authors:
-# Fabien Spindler
-#
-#############################################################################
-
-# SOURCE variable corresponds to the list of all the sources to build binaries.
-# The generate binary comes by removing the .cpp extension to
-# the source name.
-#
-# If you want to add/remove a source, modify here
-SET (SOURCE
-  servoCycab.cpp
-  servoCycabBasic.cpp
-)
-
-# rule for binary build
-FOREACH(source ${SOURCE})
-  # Compute the name of the binary to create
-  GET_FILENAME_COMPONENT(binary ${source} NAME_WE)
-
-  # From source compile the binary and add link rules
-  ADD_EXECUTABLE(${binary} ${source})
-  TARGET_LINK_LIBRARIES(${binary} ${VISP_INTERN_LIBRARY} ${VISP_EXTERN_LIBRARIES})
-ENDFOREACH(source)
-
diff --git a/example/servo-cycab/servoCycab.cpp b/example/servo-cycab/servoCycab.cpp
deleted file mode 100644
index 4d621269..00000000
--- a/example/servo-cycab/servoCycab.cpp
+++ /dev/null
@@ -1,172 +0,0 @@
-/****************************************************************************
- *
- * $Id: servoCycab.cpp 4056 2013-01-05 13:04:42Z fspindle $
- *
- * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
- * 
- * This software is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * ("GPL") version 2 as published by the Free Software Foundation.
- * See the file LICENSE.txt at the root directory of this source
- * distribution for additional information about the GNU GPL.
- *
- * For using ViSP with software that can not be combined with the GNU
- * GPL, please contact INRIA about acquiring a ViSP Professional 
- * Edition License.
- *
- * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
- * 
- * This software was developed at:
- * INRIA Rennes - Bretagne Atlantique
- * Campus Universitaire de Beaulieu
- * 35042 Rennes Cedex
- * France
- * http://www.irisa.fr/lagadic
- *
- * If you have questions regarding the use of this file, please contact
- * INRIA at visp@inria.fr
- * 
- * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- *
- * Description:
- * Send a command to the car-like Cycab mobile robot.
- *
- * Authors:
- * Fabien Spindler
- *
- *****************************************************************************/
-/*!
-  \example servoCycab.cpp
-
-  Send a command to the car-like Cycab mobile robot.
-
-*/
-
-
-
-#include <visp/vpConfig.h>
-#include <iostream>
-#include <cmath>    // std::fabs
-#include <limits>   // numeric_limits
-
-#include <signal.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-using namespace std;
-
-#ifdef VISP_HAVE_CYCAB
-#include <visp/vpRobotCycab.h>
-#include <visp/vpMath.h>
-#include <visp/vpTime.h>
-
-
-vpRobotCycab *cycab = NULL;
-bool bFinish = false;
-
-bool end = false;
-
-// The first CTRL-C stop properly the car by decreasing the velocity
-// and the steering angle, the second CTRL-C ends the execution
-void sighdl(int n)
-{
-  printf("Received signal %d\n",n);
-  bFinish=true;
-  end = true;		
-}
-
-#define MAXV     1.5 // velocity in m/S
-#define MAXPHI 20.0 // front steering angle in deg
-#define MAX_ACC_V 6 // m/s^2
-#define MAX_VEL_PHI 4 // rad/s
-
-int main()
-{
-  double v, phi; // Command to send
-  double vm, phim; // Measures
-  int kv,kphi;
-
-  cycab = new vpRobotCycab();
-
-  kv = kphi = 1;
-  v = 0.0;
-  phi = 0.0;
-  signal(SIGINT,sighdl);
-  signal(SIGTERM,sighdl);
-  signal(SIGPIPE,sighdl);
-
-  double t0 = vpTime::measureTimeMs();		
-  double t1 = vpTime::measureTimeMs();
-  double tprev;
-  bool ctrc = false;
-  double timestamp;
-  
-
-  while (!end) {
-    tprev = t1;
-    t1 = vpTime::measureTimeMs();
-    // Measures the velocity and the front steering angle from odometry
-    cycab->getOdometry(vm, phim, timestamp); // measured values from odometry
-
-    printf("State: t=%.1f s  v=%f m/s and phi=%f deg\n\t", 
-           (timestamp-t0)/1000, vm, vpMath::deg(phim));
-
-    // Compute the command to apply to the car
-    if (1) {
-      v+=kv*0.002;if (fabs(v)>=MAXV) kv = -1 * kv;
-      phi+=kphi*0.002;if (fabs(phi)>= vpMath::rad(MAXPHI)) kphi = -1 * kphi;
-    }
-    else {
-      v=0.1;phi=0;
-    }
-
-    // Check is CTRL-C is requested
-    if (bFinish) {
-      // we stop the Cycab by decreasing the velocity and the steering
-      // angle to zero
-      std::cout << "Cycab stop requested" << std::endl;
-      // Velocity decrease to zero
-      double sign_v = 0;
-      //if (vm != 0.)
-      if (std::fabs(vm) > std::numeric_limits<double>::epsilon())
-        sign_v = fabs(vm)/vm;
-      v = vm - MAX_ACC_V*(t1-tprev)/1000*sign_v;
-      if (fabs(v) < 0.1) v = 0;
-
-      // Steering decrease to zero
-      double sign_phi = 0;
-      //if (phim != 0.) 
-      if (std::fabs(phim) > std::numeric_limits<double>::epsilon()) 
-        sign_phi = fabs(phim)/phim;
-      phi = phim - MAX_VEL_PHI*(t1-tprev)/1000*sign_phi;
-      if (fabs(phi) < vpMath::rad(5)) phi = 0;
-
-      //       printf("stop requested: vm %f v %f phim %f phi %f sign_phi %f\n",
-      // 	     vm, v, phim, phi, sign_phi);
-      //v = 0;
-      //phi = 0;
-    }
-
-    // Send the command
-    printf("Send : v %f m/s and phi %f deg\n", v, vpMath::deg(phi));
-    cycab->setCommand(v, phi);
-
-    vpTime::wait(10);
-
-    if (end && (!ctrc)) { end = false; ctrc=true;} 
-  }
-  std::cout << "The end" << std::endl;
-  return 0;
-}
-
-#else // VISP_HAVE_CYCAB		
-int main()
-{
-  cout << "Sorry no acces to the cycab" << endl;
-}
-#endif //VISP_HAVE_CYCAB
-
diff --git a/example/servo-cycab/servoCycabBasic.cpp b/example/servo-cycab/servoCycabBasic.cpp
deleted file mode 100644
index 2abfd9d8..00000000
--- a/example/servo-cycab/servoCycabBasic.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/****************************************************************************
- *
- * $Id: servoCycabBasic.cpp 4056 2013-01-05 13:04:42Z fspindle $
- *
- * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
- * 
- * This software is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * ("GPL") version 2 as published by the Free Software Foundation.
- * See the file LICENSE.txt at the root directory of this source
- * distribution for additional information about the GNU GPL.
- *
- * For using ViSP with software that can not be combined with the GNU
- * GPL, please contact INRIA about acquiring a ViSP Professional 
- * Edition License.
- *
- * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
- * 
- * This software was developed at:
- * INRIA Rennes - Bretagne Atlantique
- * Campus Universitaire de Beaulieu
- * 35042 Rennes Cedex
- * France
- * http://www.irisa.fr/lagadic
- *
- * If you have questions regarding the use of this file, please contact
- * INRIA at visp@inria.fr
- * 
- * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- *
- * Description:
- * Send a command to the car-like Cycab mobile robot.
- *
- * Authors:
- * Fabien Spindler
- *
- *****************************************************************************/
-/*!
-  \example servoCycabBasic.cpp
-
-  Send a command to the car-like Cycab mobile robot.
-
-*/
-
-
-
-#include "visp/vpConfig.h"
-#include "visp/vpRobotCycab.h"
-#include "visp/vpMath.h"
-#include <iostream>
-#ifdef VISP_HAVE_CYCAB
-
-int main()
-{
-  try {
-    double v = 0.1, phi = vpMath::rad(0);
-    double x, y;
-    double x_min=2000, x_max=0, y_min=2000, y_max=0;
-
-    vpRobotCycab robot;
-    
-    std::cout << "Send the command v: " << v << " m/s and phi: " 
-              << vpMath::deg(phi) << " deg" << std::endl;
-    while (true) {
-
-      robot.setCommand(v, phi);
-      robot.getJoystickPosition(x, y);
-      //std::cout << "x: " << x << " y: " << y << std::endl;
-      if (x < x_min) x_min = x;
-      if (y < y_min) y_min = y;
-      if (x > x_max) x_max = x;
-      if (y > y_max) y_max = y;
-      std::cout << "x_min: " << x_min << " x_max: " << x_max 
-                << " y_min: " << y_min << " y_max: " << y_max
-                << std::endl;
-
-      usleep(10000);
-    }
-  }
-  catch(...) {
-    std::cerr << "An exception was catched" << std::endl;
-
-    return 1;
-  }
-
-  return 0;
-}
-
-#else // VISP_HAVE_CYCAB		
-int main()
-{
-  std::cout << "Sorry, you don't have access to the Cycab car-like mobile robot." 
-            << std::endl;
-}
-#endif // VISP_HAVE_CYCAB
-
diff --git a/example/servo-pioneer/CMakeLists.txt b/example/servo-pioneer/CMakeLists.txt
index c7e49081..cbdfedf1 100644
--- a/example/servo-pioneer/CMakeLists.txt
+++ b/example/servo-pioneer/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/servo-pioneer/movePioneer.cpp b/example/servo-pioneer/movePioneer.cpp
index 8a80def9..31bb006d 100644
--- a/example/servo-pioneer/movePioneer.cpp
+++ b/example/servo-pioneer/movePioneer.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: movePioneer.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: movePioneer.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -69,43 +69,44 @@ int main()
 */
 int main(int argc, char **argv)
 {
-  std::cout << "\nWARNING: this program does no sensing or avoiding of obstacles, \n"
-               "the robot WILL collide with any objects in the way! Make sure the \n"
-               "robot has approximately 3 meters of free space on all sides.\n"
-            << std::endl;
+  try {
+    std::cout << "\nWARNING: this program does no sensing or avoiding of obstacles, \n"
+                 "the robot WILL collide with any objects in the way! Make sure the \n"
+                 "robot has approximately 3 meters of free space on all sides.\n"
+              << std::endl;
 
-  vpRobotPioneer robot;
+    vpRobotPioneer robot;
 
-  ArArgumentParser parser(&argc, argv);
-  parser.loadDefaultArguments();
+    ArArgumentParser parser(&argc, argv);
+    parser.loadDefaultArguments();
 
-  // ArRobotConnector connects to the robot, get some initial data from it such as type and name,
-  // and then loads parameter files for this robot.
-  ArRobotConnector robotConnector(&parser, &robot);
-  if(!robotConnector.connectRobot())
-  {
-    ArLog::log(ArLog::Terse, "Could not connect to the robot.");
-    if(parser.checkHelpAndWarnUnparsed())
+    // ArRobotConnector connects to the robot, get some initial data from it such as type and name,
+    // and then loads parameter files for this robot.
+    ArRobotConnector robotConnector(&parser, &robot);
+    if(!robotConnector.connectRobot())
+    {
+      ArLog::log(ArLog::Terse, "Could not connect to the robot.");
+      if(parser.checkHelpAndWarnUnparsed())
+      {
+        Aria::logOptions();
+        Aria::exit(1);
+      }
+    }
+    if (!Aria::parseArgs())
     {
       Aria::logOptions();
-      Aria::exit(1);
+      Aria::shutdown();
+      return false;
     }
-  }
-  if (!Aria::parseArgs())
-  {
-    Aria::logOptions();
-    Aria::shutdown();
-    return false;
-  }
-  
-  std::cout << "Robot connected" << std::endl;
-  robot.useSonar(false); // disable the sonar device usage
 
-  // Robot velocities
-  vpColVector v(2), v_mes(2);
+    std::cout << "Robot connected" << std::endl;
+    robot.useSonar(false); // disable the sonar device usage
+
+    // Robot velocities
+    vpColVector v(2), v_mes(2);
 
-  for (int i=0; i < 100; i++)
-  {
+    for (int i=0; i < 100; i++)
+    {
       double t = vpTime::measureTimeMs();
 
       v = 0;
@@ -120,28 +121,33 @@ int main(int argc, char **argv)
       std::cout << "Battery=" << robot.getBatteryVoltage() << std::endl;
 
       vpTime::wait(t, 40);
-  }
+    }
 
-  ArLog::log(ArLog::Normal, "simpleMotionCommands: Stopping.");
-  robot.lock();
-  robot.stop();
-  robot.unlock();
-  ArUtil::sleep(1000);
+    ArLog::log(ArLog::Normal, "simpleMotionCommands: Stopping.");
+    robot.lock();
+    robot.stop();
+    robot.unlock();
+    ArUtil::sleep(1000);
 
-  robot.lock();
-  ArLog::log(ArLog::Normal, "simpleMotionCommands: Pose=(%.2f,%.2f,%.2f), Trans. Vel=%.2f, Rot. Vel=%.2f, Battery=%.2fV",
-    robot.getX(), robot.getY(), robot.getTh(), robot.getVel(), robot.getRotVel(), robot.getBatteryVoltage());
-  robot.unlock();
+    robot.lock();
+    ArLog::log(ArLog::Normal, "simpleMotionCommands: Pose=(%.2f,%.2f,%.2f), Trans. Vel=%.2f, Rot. Vel=%.2f, Battery=%.2fV",
+               robot.getX(), robot.getY(), robot.getTh(), robot.getVel(), robot.getRotVel(), robot.getBatteryVoltage());
+    robot.unlock();
 
-  std::cout << "Ending robot thread..." << std::endl;
-  robot.stopRunning();
+    std::cout << "Ending robot thread..." << std::endl;
+    robot.stopRunning();
 
-  // wait for the thread to stop
-  robot.waitForRunExit();
+    // wait for the thread to stop
+    robot.waitForRunExit();
 
-  // exit
-  ArLog::log(ArLog::Normal, "simpleMotionCommands: Exiting.");
-  return 0;
+    // exit
+    ArLog::log(ArLog::Normal, "simpleMotionCommands: Exiting.");
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 #endif
diff --git a/example/servo-pioneer/servoPioneerPanSegment3D.cpp b/example/servo-pioneer/servoPioneerPanSegment3D.cpp
index 4b508ecc..8b3296e5 100644
--- a/example/servo-pioneer/servoPioneerPanSegment3D.cpp
+++ b/example/servo-pioneer/servoPioneerPanSegment3D.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoPioneerPanSegment3D.cpp 4258 2013-05-15 15:54:05Z fspindle $
+ * $Id: servoPioneerPanSegment3D.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -86,326 +86,331 @@ int main(int argc, char **argv)
 {
 #if defined(VISP_HAVE_DC1394_2) || defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_CMU1394)
 #if defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI)
-  vpImage<unsigned char> I; // Create a gray level image container
-  double lambda = 0.1;
-  // Scale parameter used to estimate the depth Z of the blob from its surface
-  //double coef = 0.9/14.85;  // At 0.9m, the blob has a surface of 14.85 (Logitec sphere)
-  double coef = 1.2/13.0;  // At 1m, the blob has a surface of 11.3 (AVT Pike 032C)
-  double L = 0.21; // 3D horizontal segment length
-  double Z_d = 0.8; // Desired distance along Z between camera and segment
-  bool normalized = true; // segment normilized features are used
-
-  // Warning: To have a non singular task of rank 3, Y_d should be different from 0 so that
-  // the optical axis doesn't intersect the horizontal segment
-  double Y_d = -.11;   // Desired distance along Y between camera and segment.
-  vpColVector qm(2); // Measured head position
-  qm = 0;
-  double qm_pan = 0; // Measured pan position (tilt is not handled in that example)
+  try {
+    vpImage<unsigned char> I; // Create a gray level image container
+    double lambda = 0.1;
+    // Scale parameter used to estimate the depth Z of the blob from its surface
+    //double coef = 0.9/14.85;  // At 0.9m, the blob has a surface of 14.85 (Logitec sphere)
+    double coef = 1.2/13.0;  // At 1m, the blob has a surface of 11.3 (AVT Pike 032C)
+    double L = 0.21; // 3D horizontal segment length
+    double Z_d = 0.8; // Desired distance along Z between camera and segment
+    bool normalized = true; // segment normilized features are used
+
+    // Warning: To have a non singular task of rank 3, Y_d should be different from 0 so that
+    // the optical axis doesn't intersect the horizontal segment
+    double Y_d = -.11;   // Desired distance along Y between camera and segment.
+    vpColVector qm(2); // Measured head position
+    qm = 0;
+    double qm_pan = 0; // Measured pan position (tilt is not handled in that example)
 
 #ifdef USE_REAL_ROBOT
-  // Initialize the biclops head
-
-  vpRobotBiclops biclops("/usr/share/BiclopsDefault.cfg");
-  biclops.setDenavitHartenbergModel(vpBiclops::DH1);
-
-  // Move to the initial position
-  vpColVector q(2);
-
-  q=0;
-//  q[0] = vpMath::rad(63);
-//  q[1] = vpMath::rad(12); // introduce a tilt angle to compensate camera sphere tilt so that the camera is parallel to the plane
-
-  biclops.setRobotState(vpRobot::STATE_POSITION_CONTROL) ;
-  biclops.setPosition( vpRobot::ARTICULAR_FRAME, q );
-  //biclops.setPositioningVelocity(50);
-  biclops.getPosition(vpRobot::ARTICULAR_FRAME, qm);
-  qm_pan = qm[0];
-
-  // Now the head will be controlled in velocity
-  biclops.setRobotState(vpRobot::STATE_VELOCITY_CONTROL) ;
-
-  // Initialize the pioneer robot
-  vpRobotPioneer pioneer;
-  ArArgumentParser parser(&argc, argv);
-  parser.loadDefaultArguments();
-
-  // ArRobotConnector connects to the robot, get some initial data from it such as type and name,
-  // and then loads parameter files for this robot.
-  ArRobotConnector robotConnector(&parser, &pioneer);
-  if(!robotConnector.connectRobot())
-  {
-    ArLog::log(ArLog::Terse, "Could not connect to the pioneer robot.");
-    if(parser.checkHelpAndWarnUnparsed())
+    // Initialize the biclops head
+
+    vpRobotBiclops biclops("/usr/share/BiclopsDefault.cfg");
+    biclops.setDenavitHartenbergModel(vpBiclops::DH1);
+
+    // Move to the initial position
+    vpColVector q(2);
+
+    q=0;
+    //  q[0] = vpMath::rad(63);
+    //  q[1] = vpMath::rad(12); // introduce a tilt angle to compensate camera sphere tilt so that the camera is parallel to the plane
+
+    biclops.setRobotState(vpRobot::STATE_POSITION_CONTROL) ;
+    biclops.setPosition( vpRobot::ARTICULAR_FRAME, q );
+    //biclops.setPositioningVelocity(50);
+    biclops.getPosition(vpRobot::ARTICULAR_FRAME, qm);
+    qm_pan = qm[0];
+
+    // Now the head will be controlled in velocity
+    biclops.setRobotState(vpRobot::STATE_VELOCITY_CONTROL) ;
+
+    // Initialize the pioneer robot
+    vpRobotPioneer pioneer;
+    ArArgumentParser parser(&argc, argv);
+    parser.loadDefaultArguments();
+
+    // ArRobotConnector connects to the robot, get some initial data from it such as type and name,
+    // and then loads parameter files for this robot.
+    ArRobotConnector robotConnector(&parser, &pioneer);
+    if(!robotConnector.connectRobot())
+    {
+      ArLog::log(ArLog::Terse, "Could not connect to the pioneer robot.");
+      if(parser.checkHelpAndWarnUnparsed())
+      {
+        Aria::logOptions();
+        Aria::exit(1);
+      }
+    }
+    if (!Aria::parseArgs())
     {
       Aria::logOptions();
-      Aria::exit(1);
+      Aria::shutdown();
+      return false;
     }
-  }
-  if (!Aria::parseArgs())
-  {
-    Aria::logOptions();
-    Aria::shutdown();
-    return false;
-  }
 
-  pioneer.useSonar(false); // disable the sonar device usage
+    pioneer.useSonar(false); // disable the sonar device usage
 
-  // Wait 3 sec to be sure that the low level Aria thread used to control
-  // the robot is started. Without this delay we experienced a delay (arround 2.2 sec)
-  // between the velocity send to the robot and the velocity that is really applied
-  // to the wheels.
-  sleep(3);
+    // Wait 3 sec to be sure that the low level Aria thread used to control
+    // the robot is started. Without this delay we experienced a delay (arround 2.2 sec)
+    // between the velocity send to the robot and the velocity that is really applied
+    // to the wheels.
+    sleep(3);
 
-  std::cout << "Pioneer robot connected" << std::endl;
+    std::cout << "Pioneer robot connected" << std::endl;
 #endif
 
-  vpPioneerPan robot_pan; // Generic robot that computes the velocities for the pioneer and the biclops head
+    vpPioneerPan robot_pan; // Generic robot that computes the velocities for the pioneer and the biclops head
 
-  // Camera parameters. In this experiment we don't need a precise calibration of the camera
-  vpCameraParameters cam;
+    // Camera parameters. In this experiment we don't need a precise calibration of the camera
+    vpCameraParameters cam;
 
-  // Create the camera framegrabber
+    // Create the camera framegrabber
 #if defined(VISP_HAVE_V4L2)
-  // Create a grabber based on v4l2 third party lib (for usb cameras under Linux)
-  vpV4l2Grabber g;
-  g.setScale(1);
-  g.setInput(0);
-  g.setDevice("/dev/video1");
-  g.open(I);
-  // Logitec sphere parameters
-  cam.initPersProjWithoutDistortion(558, 555, 312, 210);
+    // Create a grabber based on v4l2 third party lib (for usb cameras under Linux)
+    vpV4l2Grabber g;
+    g.setScale(1);
+    g.setInput(0);
+    g.setDevice("/dev/video1");
+    g.open(I);
+    // Logitec sphere parameters
+    cam.initPersProjWithoutDistortion(558, 555, 312, 210);
 #elif defined(VISP_HAVE_DC1394_2)
-  // Create a grabber based on libdc1394-2.x third party lib (for firewire cameras under Linux)
-  vp1394TwoGrabber g(false);
-  g.setVideoMode(vp1394TwoGrabber::vpVIDEO_MODE_640x480_MONO8);
-  g.setFramerate(vp1394TwoGrabber::vpFRAMERATE_30);
-  // AVT Pike 032C parameters
-  cam.initPersProjWithoutDistortion(800, 795, 320, 216);
+    // Create a grabber based on libdc1394-2.x third party lib (for firewire cameras under Linux)
+    vp1394TwoGrabber g(false);
+    g.setVideoMode(vp1394TwoGrabber::vpVIDEO_MODE_640x480_MONO8);
+    g.setFramerate(vp1394TwoGrabber::vpFRAMERATE_30);
+    // AVT Pike 032C parameters
+    cam.initPersProjWithoutDistortion(800, 795, 320, 216);
 #elif defined(VISP_HAVE_CMU1394)
-  // Create a grabber based on CMU 1394 third party lib (for firewire cameras under windows)
-  vp1394CMUGrabber g;
-  g.setVideoMode(0, 5); // 640x480 MONO8
-  g.setFramerate(4);    // 30 Hz
-  g.open(I);
-  // AVT Pike 032C parameters
-  cam.initPersProjWithoutDistortion(800, 795, 320, 216);
+    // Create a grabber based on CMU 1394 third party lib (for firewire cameras under windows)
+    vp1394CMUGrabber g;
+    g.setVideoMode(0, 5); // 640x480 MONO8
+    g.setFramerate(4);    // 30 Hz
+    g.open(I);
+    // AVT Pike 032C parameters
+    cam.initPersProjWithoutDistortion(800, 795, 320, 216);
 #endif
 
-  // Acquire an image from the grabber
-  g.acquire(I);
+    // Acquire an image from the grabber
+    g.acquire(I);
 
-  // Create an image viewer
+    // Create an image viewer
 #if defined(VISP_HAVE_X11)
-  vpDisplayX d(I, 10, 10, "Current frame");
+    vpDisplayX d(I, 10, 10, "Current frame");
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI d(I, 10, 10, "Current frame");
+    vpDisplayGDI d(I, 10, 10, "Current frame");
 #endif
-  vpDisplay::display(I);
-  vpDisplay::flush(I);
-
-  // The 3D segment consists in two horizontal dots
-  vpDot2 dot[2];
-  for (int i=0; i <2; i++)
-  {
-    dot[i].setGraphics(true);
-    dot[i].setComputeMoments(true);
-    dot[i].setEllipsoidShapePrecision(0.);  // to track a blob without any constraint on the shape
-    dot[i].setGrayLevelPrecision(0.9);  // to set the blob gray level bounds for binarisation
-    dot[i].setEllipsoidBadPointsPercentage(0.5); // to be accept 50% of bad inner and outside points with bad gray level
-    dot[i].initTracking(I);
+    vpDisplay::display(I);
     vpDisplay::flush(I);
-  }
 
-  vpServo task;
-  task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
-  task.setInteractionMatrixType(vpServo::DESIRED, vpServo::PSEUDO_INVERSE) ;
-  task.setLambda(lambda) ;
-  vpVelocityTwistMatrix cVe ; // keep to identity
-  cVe = robot_pan.get_cVe() ;
-  task.set_cVe(cVe) ;
-
-  std::cout << "cVe: \n" << cVe << std::endl;
-
-  vpMatrix eJe;
-
-  // Update the robot jacobian that depends on the pan position
-  robot_pan.set_eJe(qm_pan);
-  // Get the robot jacobian
-  eJe = robot_pan.get_eJe() ;
-  task.set_eJe(eJe) ;
-  std::cout << "eJe: \n" << eJe << std::endl;
-
-  // Define a 3D horizontal segment an its cordinates in the image plane
-  vpPoint P[2];
-  P[0].setWorldCoordinates(-L/2, 0, 0);
-  P[1].setWorldCoordinates( L/2, 0, 0);
-  // Define the desired camera position
-  vpHomogeneousMatrix cMo(0, Y_d, Z_d, 0, 0, 0);  // Here we are in front of the segment
-  for (int i=0; i <2; i++)
-  {
-    P[i].changeFrame(cMo);
-    P[i].project(); // Here the x,y parameters obtained by perspective projection are computed
-  }
+    // The 3D segment consists in two horizontal dots
+    vpDot2 dot[2];
+    for (int i=0; i <2; i++)
+    {
+      dot[i].setGraphics(true);
+      dot[i].setComputeMoments(true);
+      dot[i].setEllipsoidShapePrecision(0.);  // to track a blob without any constraint on the shape
+      dot[i].setGrayLevelPrecision(0.9);  // to set the blob gray level bounds for binarisation
+      dot[i].setEllipsoidBadPointsPercentage(0.5); // to be accept 50% of bad inner and outside points with bad gray level
+      dot[i].initTracking(I);
+      vpDisplay::flush(I);
+    }
 
-  // Estimate the depth of the segment extremity points
-  double surface[2];
-  double Z[2]; // Depth of the segment points
-  for (int i=0; i<2; i++)
-  {
-    // Surface of the blob estimated from the image moment m00 and converted in meters
-    surface[i] = 1./sqrt(dot[i].m00/(cam.get_px()*cam.get_py()));
+    vpServo task;
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
+    task.setInteractionMatrixType(vpServo::DESIRED, vpServo::PSEUDO_INVERSE) ;
+    task.setLambda(lambda) ;
+    vpVelocityTwistMatrix cVe ; // keep to identity
+    cVe = robot_pan.get_cVe() ;
+    task.set_cVe(cVe) ;
+
+    std::cout << "cVe: \n" << cVe << std::endl;
+
+    vpMatrix eJe;
+
+    // Update the robot jacobian that depends on the pan position
+    robot_pan.set_eJe(qm_pan);
+    // Get the robot jacobian
+    eJe = robot_pan.get_eJe() ;
+    task.set_eJe(eJe) ;
+    std::cout << "eJe: \n" << eJe << std::endl;
+
+    // Define a 3D horizontal segment an its cordinates in the image plane
+    vpPoint P[2];
+    P[0].setWorldCoordinates(-L/2, 0, 0);
+    P[1].setWorldCoordinates( L/2, 0, 0);
+    // Define the desired camera position
+    vpHomogeneousMatrix cMo(0, Y_d, Z_d, 0, 0, 0);  // Here we are in front of the segment
+    for (int i=0; i <2; i++)
+    {
+      P[i].changeFrame(cMo);
+      P[i].project(); // Here the x,y parameters obtained by perspective projection are computed
+    }
 
-    // Initial depth of the blob
-    Z[i] = coef * surface[i] ;
-  }
+    // Estimate the depth of the segment extremity points
+    double surface[2];
+    double Z[2]; // Depth of the segment points
+    for (int i=0; i<2; i++)
+    {
+      // Surface of the blob estimated from the image moment m00 and converted in meters
+      surface[i] = 1./sqrt(dot[i].m00/(cam.get_px()*cam.get_py()));
+
+      // Initial depth of the blob
+      Z[i] = coef * surface[i] ;
+    }
 
-  // Use here a feature segment builder
-  vpFeatureSegment s_segment(normalized), s_segment_d(normalized); // From the segment feature we use only alpha
-  vpFeatureBuilder::create(s_segment, cam, dot[0], dot[1]);
-  s_segment.setZ1(Z[0]);
-  s_segment.setZ2(Z[1]);
-  // Set the desired feature
-  vpFeatureBuilder::create(s_segment_d, P[0], P[1]);
-  s_segment.setZ1( P[0].get_Z() ); // Desired depth
-  s_segment.setZ2( P[1].get_Z() );
-
-  task.addFeature(s_segment, s_segment_d,
-                  vpFeatureSegment::selectXc() |
-                  vpFeatureSegment::selectL() |
-                  vpFeatureSegment::selectAlpha());
+    // Use here a feature segment builder
+    vpFeatureSegment s_segment(normalized), s_segment_d(normalized); // From the segment feature we use only alpha
+    vpFeatureBuilder::create(s_segment, cam, dot[0], dot[1]);
+    s_segment.setZ1(Z[0]);
+    s_segment.setZ2(Z[1]);
+    // Set the desired feature
+    vpFeatureBuilder::create(s_segment_d, P[0], P[1]);
+    s_segment.setZ1( P[0].get_Z() ); // Desired depth
+    s_segment.setZ2( P[1].get_Z() );
+
+    task.addFeature(s_segment, s_segment_d,
+                    vpFeatureSegment::selectXc() |
+                    vpFeatureSegment::selectL() |
+                    vpFeatureSegment::selectAlpha());
 
 #ifdef USE_PLOTTER
-  //Create a window (500 by 500) at position (700, 10) with two graphics
-  vpPlot graph(2, 500, 500, 700, 10, "Curves...");
-
-  //The first graphic contains 3 curve and the second graphic contains 3 curves
-  graph.initGraph(0,3);
-  graph.initGraph(1,3);
-  graph.setTitle(0, "Velocities");
-  graph.setTitle(1, "Error s-s*");
-  graph.setLegend(0, 0, "vx");
-  graph.setLegend(0, 1, "wz");
-  graph.setLegend(0, 2, "w_pan");
-  graph.setLegend(1, 0, "xm/l");
-  graph.setLegend(1, 1, "1/l");
-  graph.setLegend(1, 2, "alpha");
+    //Create a window (500 by 500) at position (700, 10) with two graphics
+    vpPlot graph(2, 500, 500, 700, 10, "Curves...");
+
+    //The first graphic contains 3 curve and the second graphic contains 3 curves
+    graph.initGraph(0,3);
+    graph.initGraph(1,3);
+    graph.setTitle(0, "Velocities");
+    graph.setTitle(1, "Error s-s*");
+    graph.setLegend(0, 0, "vx");
+    graph.setLegend(0, 1, "wz");
+    graph.setLegend(0, 2, "w_pan");
+    graph.setLegend(1, 0, "xm/l");
+    graph.setLegend(1, 1, "1/l");
+    graph.setLegend(1, 2, "alpha");
 #endif
 
-  vpColVector v; // vz, wx
-  unsigned int iter = 0;
-  try
-  {
-    while(1)
+    vpColVector v; // vz, wx
+    unsigned int iter = 0;
+    try
     {
+      while(1)
+      {
 #ifdef USE_REAL_ROBOT
-      // Get the new pan position
-      biclops.getPosition(vpRobot::ARTICULAR_FRAME, qm);
+        // Get the new pan position
+        biclops.getPosition(vpRobot::ARTICULAR_FRAME, qm);
 #endif
-      qm_pan = qm[0];
-
-      // Acquire a new image
-      g.acquire(I);
-      // Set the image as background of the viewer
-      vpDisplay::display(I);
-
-      // Display the desired position of the segment
-      for (int i=0; i<2; i++)
-        P[i].display(I, cam, vpColor::red, 3);
-
-      // Does the blob tracking
-      for (int i=0; i<2; i++)
-        dot[i].track(I);
-
-      for (int i=0; i<2; i++)
-      {
-        // Surface of the blob estimated from the image moment m00 and converted in meters
-        surface[i] = 1./sqrt(dot[i].m00/(cam.get_px()*cam.get_py()));
-
-        // Initial depth of the blob
-        Z[i] = coef * surface[i] ;
-      }
-
-      // Update the features
-      vpFeatureBuilder::create(s_segment, cam, dot[0], dot[1]);
-      // Update the depth of the point. Useful only if current interaction matrix is used
-      // when task.setInteractionMatrixType(vpServo::CURRENT, vpServo::PSEUDO_INVERSE) is set
-      s_segment.setZ1(Z[0]);
-      s_segment.setZ2(Z[1]);
-
-      robot_pan.get_cVe(cVe);
-      task.set_cVe(cVe);
-
-      // Update the robot jacobian that depends on the pan position
-      robot_pan.set_eJe(qm_pan);
-      // Get the robot jacobian
-      eJe = robot_pan.get_eJe();
-      // Update the jacobian that will be used to compute the control law
-      task.set_eJe(eJe);
-
-      // Compute the control law. Velocities are computed in the mobile robot reference frame
-      v = task.computeControlLaw();
-
-//      std::cout << "-----" << std::endl;
-//      std::cout << "v: " << v.t() << std::endl;
-//      std::cout << "error: " << task.getError().t() << std::endl;
-//      std::cout << "L:\n " << task.getInteractionMatrix() << std::endl;
-//      std::cout << "eJe:\n " << task.get_eJe() << std::endl;
-//      std::cout << "cVe:\n " << task.get_cVe() << std::endl;
-//      std::cout << "L_cVe_eJe:\n" << task.getInteractionMatrix() * task.get_cVe() * task.get_eJe() << std::endl;
-//      task.print() ;
-      if (task.getTaskRank() != 3)
-        std::cout << "Warning: task is of rank " << task.getTaskRank() << std::endl;
+        qm_pan = qm[0];
+
+        // Acquire a new image
+        g.acquire(I);
+        // Set the image as background of the viewer
+        vpDisplay::display(I);
+
+        // Display the desired position of the segment
+        for (int i=0; i<2; i++)
+          P[i].display(I, cam, vpColor::red, 3);
+
+        // Does the blob tracking
+        for (int i=0; i<2; i++)
+          dot[i].track(I);
+
+        for (int i=0; i<2; i++)
+        {
+          // Surface of the blob estimated from the image moment m00 and converted in meters
+          surface[i] = 1./sqrt(dot[i].m00/(cam.get_px()*cam.get_py()));
+
+          // Initial depth of the blob
+          Z[i] = coef * surface[i] ;
+        }
+
+        // Update the features
+        vpFeatureBuilder::create(s_segment, cam, dot[0], dot[1]);
+        // Update the depth of the point. Useful only if current interaction matrix is used
+        // when task.setInteractionMatrixType(vpServo::CURRENT, vpServo::PSEUDO_INVERSE) is set
+        s_segment.setZ1(Z[0]);
+        s_segment.setZ2(Z[1]);
+
+        robot_pan.get_cVe(cVe);
+        task.set_cVe(cVe);
+
+        // Update the robot jacobian that depends on the pan position
+        robot_pan.set_eJe(qm_pan);
+        // Get the robot jacobian
+        eJe = robot_pan.get_eJe();
+        // Update the jacobian that will be used to compute the control law
+        task.set_eJe(eJe);
+
+        // Compute the control law. Velocities are computed in the mobile robot reference frame
+        v = task.computeControlLaw();
+
+        //      std::cout << "-----" << std::endl;
+        //      std::cout << "v: " << v.t() << std::endl;
+        //      std::cout << "error: " << task.getError().t() << std::endl;
+        //      std::cout << "L:\n " << task.getInteractionMatrix() << std::endl;
+        //      std::cout << "eJe:\n " << task.get_eJe() << std::endl;
+        //      std::cout << "cVe:\n " << task.get_cVe() << std::endl;
+        //      std::cout << "L_cVe_eJe:\n" << task.getInteractionMatrix() * task.get_cVe() * task.get_eJe() << std::endl;
+        //      task.print() ;
+        if (task.getTaskRank() != 3)
+          std::cout << "Warning: task is of rank " << task.getTaskRank() << std::endl;
 
 #ifdef USE_PLOTTER
-      graph.plot(0, iter, v); // plot velocities applied to the robot
-      graph.plot(1, iter, task.getError()); // plot error vector
+        graph.plot(0, iter, v); // plot velocities applied to the robot
+        graph.plot(1, iter, task.getError()); // plot error vector
 #endif
 
 #ifdef USE_REAL_ROBOT
-      // Send the velocity to the robot
-      vpColVector v_pioneer(2); // vx, wz
-      v_pioneer[0] = v[0];
-      v_pioneer[1] = v[1];
-      vpColVector v_biclops(2); // qdot pan and tilt
-      v_biclops[0] = v[2];
-      v_biclops[1] = 0;
-
-      std::cout << "Send velocity to the pionner: " << v_pioneer[0] << " m/s "
-                << vpMath::deg(v_pioneer[1]) << " deg/s" << std::endl;
-      std::cout << "Send velocity to the biclops head: " << vpMath::deg(v_biclops[0]) << " deg/s" << std::endl;
-
-      pioneer.setVelocity(vpRobot::REFERENCE_FRAME, v_pioneer);
-      biclops.setVelocity(vpRobot::ARTICULAR_FRAME, v_biclops) ;
+        // Send the velocity to the robot
+        vpColVector v_pioneer(2); // vx, wz
+        v_pioneer[0] = v[0];
+        v_pioneer[1] = v[1];
+        vpColVector v_biclops(2); // qdot pan and tilt
+        v_biclops[0] = v[2];
+        v_biclops[1] = 0;
+
+        std::cout << "Send velocity to the pionner: " << v_pioneer[0] << " m/s "
+                  << vpMath::deg(v_pioneer[1]) << " deg/s" << std::endl;
+        std::cout << "Send velocity to the biclops head: " << vpMath::deg(v_biclops[0]) << " deg/s" << std::endl;
+
+        pioneer.setVelocity(vpRobot::REFERENCE_FRAME, v_pioneer);
+        biclops.setVelocity(vpRobot::ARTICULAR_FRAME, v_biclops) ;
 #endif
 
-      // Draw a vertical line which corresponds to the desired x coordinate of the dot cog
-      vpDisplay::displayLine(I, 0, cam.get_u0(), 479, cam.get_u0(), vpColor::red);
-      vpDisplay::flush(I);
+        // Draw a vertical line which corresponds to the desired x coordinate of the dot cog
+        vpDisplay::displayLine(I, 0, cam.get_u0(), 479, cam.get_u0(), vpColor::red);
+        vpDisplay::flush(I);
 
-      // A click in the viewer to exit
-      if ( vpDisplay::getClick(I, false) )
-        break;
+        // A click in the viewer to exit
+        if ( vpDisplay::getClick(I, false) )
+          break;
 
-      iter ++;
-      //break;
+        iter ++;
+        //break;
+      }
+    }
+    catch(...)
+    {
     }
-  }
-  catch(...)
-  {
-  }
 
 #ifdef USE_REAL_ROBOT
-  std::cout << "Ending robot thread..." << std::endl;
-  pioneer.stopRunning();
+    std::cout << "Ending robot thread..." << std::endl;
+    pioneer.stopRunning();
 
-  // wait for the thread to stop
-  pioneer.waitForRunExit();
+    // wait for the thread to stop
+    pioneer.waitForRunExit();
 #endif
 
-  // Kill the servo task
-  task.print() ;
-  task.kill();
-
+    // Kill the servo task
+    task.print() ;
+    task.kill();
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 #endif
 #endif
 }
diff --git a/example/servo-pioneer/servoPioneerPoint2DDepth.cpp b/example/servo-pioneer/servoPioneerPoint2DDepth.cpp
index b2f57cfc..39ebfbfd 100644
--- a/example/servo-pioneer/servoPioneerPoint2DDepth.cpp
+++ b/example/servo-pioneer/servoPioneerPoint2DDepth.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoPioneerPoint2DDepth.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoPioneerPoint2DDepth.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -93,169 +93,168 @@
 #ifdef TEST_COULD_BE_ACHIEVED
 int main(int argc, char **argv)
 {
-  vpImage<unsigned char> I; // Create a gray level image container
-  double depth = 1.;
-  double lambda = 0.6;
-  double coef = 1./6.77; // Scale parameter used to estimate the depth Z of the blob from its surface
-
-  vpRobotPioneer robot;
-  ArArgumentParser parser(&argc, argv);
-  parser.loadDefaultArguments();
-
-  // ArRobotConnector connects to the robot, get some initial data from it such as type and name,
-  // and then loads parameter files for this robot.
-  ArRobotConnector robotConnector(&parser, &robot);
-  if(!robotConnector.connectRobot())
-  {
-    ArLog::log(ArLog::Terse, "Could not connect to the robot.");
-    if(parser.checkHelpAndWarnUnparsed())
+  try {
+    vpImage<unsigned char> I; // Create a gray level image container
+    double depth = 1.;
+    double lambda = 0.6;
+    double coef = 1./6.77; // Scale parameter used to estimate the depth Z of the blob from its surface
+
+    vpRobotPioneer robot;
+    ArArgumentParser parser(&argc, argv);
+    parser.loadDefaultArguments();
+
+    // ArRobotConnector connects to the robot, get some initial data from it such as type and name,
+    // and then loads parameter files for this robot.
+    ArRobotConnector robotConnector(&parser, &robot);
+    if(!robotConnector.connectRobot())
+    {
+      ArLog::log(ArLog::Terse, "Could not connect to the robot.");
+      if(parser.checkHelpAndWarnUnparsed())
+      {
+        Aria::logOptions();
+        Aria::exit(1);
+      }
+    }
+    if (!Aria::parseArgs())
     {
       Aria::logOptions();
-      Aria::exit(1);
+      Aria::shutdown();
+      return false;
     }
-  }
-  if (!Aria::parseArgs())
-  {
-    Aria::logOptions();
-    Aria::shutdown();
-    return false;
-  }
 
-  // Wait 3 sec to be sure that the low level Aria thread used to control
-  // the robot is started. Without this delay we experienced a delay (arround 2.2 sec)
-  // between the velocity send to the robot and the velocity that is really applied
-  // to the wheels.
-  vpTime::sleepMs(3000);
+    // Wait 3 sec to be sure that the low level Aria thread used to control
+    // the robot is started. Without this delay we experienced a delay (arround 2.2 sec)
+    // between the velocity send to the robot and the velocity that is really applied
+    // to the wheels.
+    vpTime::sleepMs(3000);
 
-  std::cout << "Robot connected" << std::endl;
+    std::cout << "Robot connected" << std::endl;
 
-  // Camera parameters. In this experiment we don't need a precise calibration of the camera
-  vpCameraParameters cam;
+    // Camera parameters. In this experiment we don't need a precise calibration of the camera
+    vpCameraParameters cam;
 
-  // Create the camera framegrabber
+    // Create the camera framegrabber
 #if defined(VISP_HAVE_OPENCV)
-  int device = 1;
-  std::cout << "Use device: " << device << std::endl;
-  cv::VideoCapture g(device); // open the default camera
-  g.set(CV_CAP_PROP_FRAME_WIDTH, 640);
-  g.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
-  if(!g.isOpened())  // check if we succeeded
-    return -1;
-  cv::Mat frame;
-  g >> frame; // get a new frame from camera
-  vpImageConvert::convert(frame, I);
-
-  // Logitec sphere parameters
-  cam.initPersProjWithoutDistortion(558, 555, 312, 210);
+    int device = 1;
+    std::cout << "Use device: " << device << std::endl;
+    cv::VideoCapture g(device); // open the default camera
+    g.set(CV_CAP_PROP_FRAME_WIDTH, 640);
+    g.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
+    if(!g.isOpened())  // check if we succeeded
+      return -1;
+    cv::Mat frame;
+    g >> frame; // get a new frame from camera
+    vpImageConvert::convert(frame, I);
+
+    // Logitec sphere parameters
+    cam.initPersProjWithoutDistortion(558, 555, 312, 210);
 #elif defined(VISP_HAVE_V4L2)
-  // Create a grabber based on v4l2 third party lib (for usb cameras under Linux)
-  vpV4l2Grabber g;
-  g.setScale(1);
-  g.setInput(0);
-  g.setDevice("/dev/video1");
-  g.open(I);
-  // Logitec sphere parameters
-  cam.initPersProjWithoutDistortion(558, 555, 312, 210);
+    // Create a grabber based on v4l2 third party lib (for usb cameras under Linux)
+    vpV4l2Grabber g;
+    g.setScale(1);
+    g.setInput(0);
+    g.setDevice("/dev/video1");
+    g.open(I);
+    // Logitec sphere parameters
+    cam.initPersProjWithoutDistortion(558, 555, 312, 210);
 #elif defined(VISP_HAVE_DC1394_2)
-  // Create a grabber based on libdc1394-2.x third party lib (for firewire cameras under Linux)
-  vp1394TwoGrabber g(false);
-  g.setVideoMode(vp1394TwoGrabber::vpVIDEO_MODE_640x480_MONO8);
-  g.setFramerate(vp1394TwoGrabber::vpFRAMERATE_30);
-  // AVT Pike 032C parameters
-  cam.initPersProjWithoutDistortion(800, 795, 320, 216);
+    // Create a grabber based on libdc1394-2.x third party lib (for firewire cameras under Linux)
+    vp1394TwoGrabber g(false);
+    g.setVideoMode(vp1394TwoGrabber::vpVIDEO_MODE_640x480_MONO8);
+    g.setFramerate(vp1394TwoGrabber::vpFRAMERATE_30);
+    // AVT Pike 032C parameters
+    cam.initPersProjWithoutDistortion(800, 795, 320, 216);
 #elif defined(VISP_HAVE_CMU1394)
-  // Create a grabber based on CMU 1394 third party lib (for firewire cameras under windows)
-  vp1394CMUGrabber g;
-  g.setVideoMode(0, 5); // 640x480 MONO8
-  g.setFramerate(4);    // 30 Hz
-  g.open(I);
-  // AVT Pike 032C parameters
-  cam.initPersProjWithoutDistortion(800, 795, 320, 216);
+    // Create a grabber based on CMU 1394 third party lib (for firewire cameras under windows)
+    vp1394CMUGrabber g;
+    g.setVideoMode(0, 5); // 640x480 MONO8
+    g.setFramerate(4);    // 30 Hz
+    g.open(I);
+    // AVT Pike 032C parameters
+    cam.initPersProjWithoutDistortion(800, 795, 320, 216);
 #endif
 
-  // Acquire an image from the grabber
+    // Acquire an image from the grabber
 #if defined(VISP_HAVE_OPENCV)
-  g >> frame; // get a new frame from camera
-  vpImageConvert::convert(frame, I);
+    g >> frame; // get a new frame from camera
+    vpImageConvert::convert(frame, I);
 #else
-  g.acquire(I);
+    g.acquire(I);
 #endif
 
-  // Create an image viewer
+    // Create an image viewer
 #if defined(VISP_HAVE_X11)
-  vpDisplayX d(I, 10, 10, "Current frame");
+    vpDisplayX d(I, 10, 10, "Current frame");
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI d(I, 10, 10, "Current frame");
+    vpDisplayGDI d(I, 10, 10, "Current frame");
 #endif
-  vpDisplay::display(I);
-  vpDisplay::flush(I);
-
-  // Create a blob tracker
-  vpDot2 dot;
-  dot.setGraphics(true);
-  dot.setComputeMoments(true);
-  dot.setEllipsoidShapePrecision(0.);  // to track a blob without any constraint on the shape
-  dot.setGrayLevelPrecision(0.9);  // to set the blob gray level bounds for binarisation
-  dot.setEllipsoidBadPointsPercentage(0.5); // to be accept 50% of bad inner and outside points with bad gray level
-  dot.initTracking(I);
-  vpDisplay::flush(I);
-
-  vpServo task;
-  task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
-  task.setInteractionMatrixType(vpServo::DESIRED, vpServo::PSEUDO_INVERSE) ;
-  task.setLambda(lambda) ;
-  vpVelocityTwistMatrix cVe ;
-  cVe = robot.get_cVe() ;
-  task.set_cVe(cVe) ;
-
-  std::cout << "cVe: \n" << cVe << std::endl;
-
-  vpMatrix eJe;
-  robot.get_eJe(eJe) ;
-  task.set_eJe(eJe) ;
-  std::cout << "eJe: \n" << eJe << std::endl;
-
-  // Current and desired visual feature associated to the x coordinate of the point
-  vpFeaturePoint s_x, s_xd;
-
-  // Create the current x visual feature
-  vpFeatureBuilder::create(s_x, cam, dot);
-
-  // Create the desired x* visual feature
-  s_xd.buildFrom(0, 0, depth);
-
-  // Add the feature
-  task.addFeature(s_x, s_xd) ;
-
-  // Create the current log(Z/Z*) visual feature
-  vpFeatureDepth s_Z, s_Zd;
-  // Surface of the blob estimated from the image moment m00 and converted in meters
-  double surface = 1./sqrt(dot.m00/(cam.get_px()*cam.get_py()));
-  double Z, Zd;
-  // Initial depth of the blob in from of the camera
-  Z = coef * surface ;
-  // Desired depth Z* of the blob. This depth is learned and equal to the initial depth
-  Zd = Z;
-
-  std::cout << "Z " << Z << std::endl;
-  s_Z.buildFrom(s_x.get_x(), s_x.get_y(), Z , 0); // log(Z/Z*) = 0 that's why the last parameter is 0
-  s_Zd.buildFrom(s_x.get_x(), s_x.get_y(), Zd , 0); // log(Z/Z*) = 0 that's why the last parameter is 0
-
-  // Add the feature
-  task.addFeature(s_Z, s_Zd) ;
-
-  vpColVector v; // vz, wx
-
-  try
-  {
+    vpDisplay::display(I);
+    vpDisplay::flush(I);
+
+    // Create a blob tracker
+    vpDot2 dot;
+    dot.setGraphics(true);
+    dot.setComputeMoments(true);
+    dot.setEllipsoidShapePrecision(0.);  // to track a blob without any constraint on the shape
+    dot.setGrayLevelPrecision(0.9);  // to set the blob gray level bounds for binarisation
+    dot.setEllipsoidBadPointsPercentage(0.5); // to be accept 50% of bad inner and outside points with bad gray level
+    dot.initTracking(I);
+    vpDisplay::flush(I);
+
+    vpServo task;
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe) ;
+    task.setInteractionMatrixType(vpServo::DESIRED, vpServo::PSEUDO_INVERSE) ;
+    task.setLambda(lambda) ;
+    vpVelocityTwistMatrix cVe ;
+    cVe = robot.get_cVe() ;
+    task.set_cVe(cVe) ;
+
+    std::cout << "cVe: \n" << cVe << std::endl;
+
+    vpMatrix eJe;
+    robot.get_eJe(eJe) ;
+    task.set_eJe(eJe) ;
+    std::cout << "eJe: \n" << eJe << std::endl;
+
+    // Current and desired visual feature associated to the x coordinate of the point
+    vpFeaturePoint s_x, s_xd;
+
+    // Create the current x visual feature
+    vpFeatureBuilder::create(s_x, cam, dot);
+
+    // Create the desired x* visual feature
+    s_xd.buildFrom(0, 0, depth);
+
+    // Add the feature
+    task.addFeature(s_x, s_xd) ;
+
+    // Create the current log(Z/Z*) visual feature
+    vpFeatureDepth s_Z, s_Zd;
+    // Surface of the blob estimated from the image moment m00 and converted in meters
+    double surface = 1./sqrt(dot.m00/(cam.get_px()*cam.get_py()));
+    double Z, Zd;
+    // Initial depth of the blob in from of the camera
+    Z = coef * surface ;
+    // Desired depth Z* of the blob. This depth is learned and equal to the initial depth
+    Zd = Z;
+
+    std::cout << "Z " << Z << std::endl;
+    s_Z.buildFrom(s_x.get_x(), s_x.get_y(), Z , 0); // log(Z/Z*) = 0 that's why the last parameter is 0
+    s_Zd.buildFrom(s_x.get_x(), s_x.get_y(), Zd , 0); // log(Z/Z*) = 0 that's why the last parameter is 0
+
+    // Add the feature
+    task.addFeature(s_Z, s_Zd) ;
+
+    vpColVector v; // vz, wx
+
     while(1)
     {
       // Acquire a new image
 #if defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100)
-        g >> frame; // get a new frame from camera
-        vpImageConvert::convert(frame, I);
+      g >> frame; // get a new frame from camera
+      vpImageConvert::convert(frame, I);
 #else
-        g.acquire(I);
+      g.acquire(I);
 #endif
       // Set the image as background of the viewer
       vpDisplay::display(I);
@@ -293,20 +292,21 @@ int main(int argc, char **argv)
       if ( vpDisplay::getClick(I, false) )
         break;
     }
-  }
-  catch(...)
-  {
-  }
 
-  std::cout << "Ending robot thread..." << std::endl;
-  robot.stopRunning();
+    std::cout << "Ending robot thread..." << std::endl;
+    robot.stopRunning();
 
-  // wait for the thread to stop
-  robot.waitForRunExit();
+    // wait for the thread to stop
+    robot.waitForRunExit();
 
-  // Kill the servo task
-  task.print() ;
-  task.kill();
+    // Kill the servo task
+    task.print() ;
+    task.kill();
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 #else
 int main()
diff --git a/example/servo-pioneer/servoPioneerPoint2DDepthWithoutVpServo.cpp b/example/servo-pioneer/servoPioneerPoint2DDepthWithoutVpServo.cpp
index 3e7f0437..610da20d 100644
--- a/example/servo-pioneer/servoPioneerPoint2DDepthWithoutVpServo.cpp
+++ b/example/servo-pioneer/servoPioneerPoint2DDepthWithoutVpServo.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoPioneerPoint2DDepthWithoutVpServo.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoPioneerPoint2DDepthWithoutVpServo.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -91,150 +91,149 @@
 #ifdef TEST_COULD_BE_ACHIEVED
 int main(int argc, char **argv)
 {
-  vpImage<unsigned char> I; // Create a gray level image container
-  double depth = 1.;
-  double lambda = 0.6;
-  double coef = 1./6.77; // Scale parameter used to estimate the depth Z of the blob from its surface
-
-  vpRobotPioneer robot;
-  ArArgumentParser parser(&argc, argv);
-  parser.loadDefaultArguments();
-
-  // ArRobotConnector connects to the robot, get some initial data from it such as type and name,
-  // and then loads parameter files for this robot.
-  ArRobotConnector robotConnector(&parser, &robot);
-  if(!robotConnector.connectRobot())
-  {
-    ArLog::log(ArLog::Terse, "Could not connect to the robot.");
-    if(parser.checkHelpAndWarnUnparsed())
+  try {
+    vpImage<unsigned char> I; // Create a gray level image container
+    double depth = 1.;
+    double lambda = 0.6;
+    double coef = 1./6.77; // Scale parameter used to estimate the depth Z of the blob from its surface
+
+    vpRobotPioneer robot;
+    ArArgumentParser parser(&argc, argv);
+    parser.loadDefaultArguments();
+
+    // ArRobotConnector connects to the robot, get some initial data from it such as type and name,
+    // and then loads parameter files for this robot.
+    ArRobotConnector robotConnector(&parser, &robot);
+    if(!robotConnector.connectRobot())
+    {
+      ArLog::log(ArLog::Terse, "Could not connect to the robot.");
+      if(parser.checkHelpAndWarnUnparsed())
+      {
+        Aria::logOptions();
+        Aria::exit(1);
+      }
+    }
+    if (!Aria::parseArgs())
     {
       Aria::logOptions();
-      Aria::exit(1);
+      Aria::shutdown();
+      return false;
     }
-  }
-  if (!Aria::parseArgs())
-  {
-    Aria::logOptions();
-    Aria::shutdown();
-    return false;
-  }
 
-  // Wait 3 sec to be sure that the low level Aria thread used to control
-  // the robot is started. Without this delay we experienced a delay (arround 2.2 sec)
-  // between the velocity send to the robot and the velocity that is really applied
-  // to the wheels.
-  vpTime::sleepMs(3000);
+    // Wait 3 sec to be sure that the low level Aria thread used to control
+    // the robot is started. Without this delay we experienced a delay (arround 2.2 sec)
+    // between the velocity send to the robot and the velocity that is really applied
+    // to the wheels.
+    vpTime::sleepMs(3000);
 
-  std::cout << "Robot connected" << std::endl;
+    std::cout << "Robot connected" << std::endl;
 
-  // Camera parameters. In this experiment we don't need a precise calibration of the camera
-  vpCameraParameters cam;
+    // Camera parameters. In this experiment we don't need a precise calibration of the camera
+    vpCameraParameters cam;
 
-  // Create the camera framegrabber
+    // Create the camera framegrabber
 #if defined(VISP_HAVE_OPENCV)
-  int device = 1;
-  std::cout << "Use device: " << device << std::endl;
-  cv::VideoCapture g(device); // open the default camera
-  g.set(CV_CAP_PROP_FRAME_WIDTH, 640);
-  g.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
-  if(!g.isOpened())  // check if we succeeded
-    return -1;
-  cv::Mat frame;
-  g >> frame; // get a new frame from camera
-  vpImageConvert::convert(frame, I);
-
-  // Logitec sphere parameters
-  cam.initPersProjWithoutDistortion(558, 555, 312, 210);
+    int device = 1;
+    std::cout << "Use device: " << device << std::endl;
+    cv::VideoCapture g(device); // open the default camera
+    g.set(CV_CAP_PROP_FRAME_WIDTH, 640);
+    g.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
+    if(!g.isOpened())  // check if we succeeded
+      return -1;
+    cv::Mat frame;
+    g >> frame; // get a new frame from camera
+    vpImageConvert::convert(frame, I);
+
+    // Logitec sphere parameters
+    cam.initPersProjWithoutDistortion(558, 555, 312, 210);
 #elif defined(VISP_HAVE_V4L2)
-  // Create a grabber based on v4l2 third party lib (for usb cameras under Linux)
-  vpV4l2Grabber g;
-  g.setScale(1);
-  g.setInput(0);
-  g.setDevice("/dev/video1");
-  g.open(I);
-  // Logitec sphere parameters
-  cam.initPersProjWithoutDistortion(558, 555, 312, 210);
+    // Create a grabber based on v4l2 third party lib (for usb cameras under Linux)
+    vpV4l2Grabber g;
+    g.setScale(1);
+    g.setInput(0);
+    g.setDevice("/dev/video1");
+    g.open(I);
+    // Logitec sphere parameters
+    cam.initPersProjWithoutDistortion(558, 555, 312, 210);
 #elif defined(VISP_HAVE_DC1394_2)
-  // Create a grabber based on libdc1394-2.x third party lib (for firewire cameras under Linux)
-  vp1394TwoGrabber g(false);
-  g.setVideoMode(vp1394TwoGrabber::vpVIDEO_MODE_640x480_MONO8);
-  g.setFramerate(vp1394TwoGrabber::vpFRAMERATE_30);
-  // AVT Pike 032C parameters
-  cam.initPersProjWithoutDistortion(800, 795, 320, 216);
+    // Create a grabber based on libdc1394-2.x third party lib (for firewire cameras under Linux)
+    vp1394TwoGrabber g(false);
+    g.setVideoMode(vp1394TwoGrabber::vpVIDEO_MODE_640x480_MONO8);
+    g.setFramerate(vp1394TwoGrabber::vpFRAMERATE_30);
+    // AVT Pike 032C parameters
+    cam.initPersProjWithoutDistortion(800, 795, 320, 216);
 #elif defined(VISP_HAVE_CMU1394)
-  // Create a grabber based on CMU 1394 third party lib (for firewire cameras under windows)
-  vp1394CMUGrabber g;
-  g.setVideoMode(0, 5); // 640x480 MONO8
-  g.setFramerate(4);    // 30 Hz
-  g.open(I);
-  // AVT Pike 032C parameters
-  cam.initPersProjWithoutDistortion(800, 795, 320, 216);
+    // Create a grabber based on CMU 1394 third party lib (for firewire cameras under windows)
+    vp1394CMUGrabber g;
+    g.setVideoMode(0, 5); // 640x480 MONO8
+    g.setFramerate(4);    // 30 Hz
+    g.open(I);
+    // AVT Pike 032C parameters
+    cam.initPersProjWithoutDistortion(800, 795, 320, 216);
 #endif
 
-  // Acquire an image from the grabber
+    // Acquire an image from the grabber
 #if defined(VISP_HAVE_OPENCV)
-  g >> frame; // get a new frame from camera
-  vpImageConvert::convert(frame, I);
+    g >> frame; // get a new frame from camera
+    vpImageConvert::convert(frame, I);
 #else
-  g.acquire(I);
+    g.acquire(I);
 #endif
 
-  // Create an image viewer
+    // Create an image viewer
 #if defined(VISP_HAVE_X11)
-  vpDisplayX d(I, 10, 10, "Current frame");
+    vpDisplayX d(I, 10, 10, "Current frame");
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI d(I, 10, 10, "Current frame");
+    vpDisplayGDI d(I, 10, 10, "Current frame");
 #endif
-  vpDisplay::display(I);
-  vpDisplay::flush(I);
-
-  // Create a blob tracker
-  vpDot2 dot;
-  dot.setGraphics(true);
-  dot.setComputeMoments(true);
-  dot.setEllipsoidShapePrecision(0.);  // to track a blob without any constraint on the shape
-  dot.setGrayLevelPrecision(0.9);  // to set the blob gray level bounds for binarisation
-  dot.setEllipsoidBadPointsPercentage(0.5); // to be accept 50% of bad inner and outside points with bad gray level
-  dot.initTracking(I);
-  vpDisplay::flush(I);
-
-  // Current and desired visual feature associated to the x coordinate of the point
-  vpFeaturePoint s_x, s_xd;
-
-  // Create the current x visual feature
-  vpFeatureBuilder::create(s_x, cam, dot);
-
-  // Create the desired x* visual feature
-  s_xd.buildFrom(0, 0, depth);
-  vpMatrix L_x = s_xd.interaction(vpFeaturePoint::selectX());
-
-  // Create the current log(Z/Z*) visual feature
-  vpFeatureDepth s_Z;
-  // Surface of the blob estimated from the image moment m00 and converted in meters
-  double surface = 1./sqrt(dot.m00/(cam.get_px()*cam.get_py()));
-  double Z, Zd;
-  // Initial depth of the blob in from of the camera
-  Z = coef * surface ;
-  // Desired depth Z* of the blob. This depth is learned and equal to the initial depth
-  Zd = Z;
-  s_Z.buildFrom(s_x.get_x(), s_x.get_y(), Z , 0); // log(Z/Z*) = 0 that's why the last parameter is 0
-  vpMatrix L_Z = s_Z.interaction();
-
-  vpVelocityTwistMatrix cVe = robot.get_cVe();
-  vpMatrix eJe; // pioneer jacobian
-  robot.get_eJe(eJe);
-
-  vpMatrix L; // Interaction matrix
-  L.stackMatrices(L_x); // constant since build with the desired feature
-  L.stackMatrices(L_Z); // not constant since it corresponds to log(Z/Z*) that evolves at each iteration
-
-  vpColVector v; // vz, wx
-
-  vpFeatureDepth s_Zd;
-  s_Zd.buildFrom(0, 0, 1, 0); // The value of s* is 0 with Z=1 meter.
-
-  try
-  {
+    vpDisplay::display(I);
+    vpDisplay::flush(I);
+
+    // Create a blob tracker
+    vpDot2 dot;
+    dot.setGraphics(true);
+    dot.setComputeMoments(true);
+    dot.setEllipsoidShapePrecision(0.);  // to track a blob without any constraint on the shape
+    dot.setGrayLevelPrecision(0.9);  // to set the blob gray level bounds for binarisation
+    dot.setEllipsoidBadPointsPercentage(0.5); // to be accept 50% of bad inner and outside points with bad gray level
+    dot.initTracking(I);
+    vpDisplay::flush(I);
+
+    // Current and desired visual feature associated to the x coordinate of the point
+    vpFeaturePoint s_x, s_xd;
+
+    // Create the current x visual feature
+    vpFeatureBuilder::create(s_x, cam, dot);
+
+    // Create the desired x* visual feature
+    s_xd.buildFrom(0, 0, depth);
+    vpMatrix L_x = s_xd.interaction(vpFeaturePoint::selectX());
+
+    // Create the current log(Z/Z*) visual feature
+    vpFeatureDepth s_Z;
+    // Surface of the blob estimated from the image moment m00 and converted in meters
+    double surface = 1./sqrt(dot.m00/(cam.get_px()*cam.get_py()));
+    double Z, Zd;
+    // Initial depth of the blob in from of the camera
+    Z = coef * surface ;
+    // Desired depth Z* of the blob. This depth is learned and equal to the initial depth
+    Zd = Z;
+    s_Z.buildFrom(s_x.get_x(), s_x.get_y(), Z , 0); // log(Z/Z*) = 0 that's why the last parameter is 0
+    vpMatrix L_Z = s_Z.interaction();
+
+    vpVelocityTwistMatrix cVe = robot.get_cVe();
+    vpMatrix eJe; // pioneer jacobian
+    robot.get_eJe(eJe);
+
+    vpMatrix L; // Interaction matrix
+    L.stackMatrices(L_x); // constant since build with the desired feature
+    L.stackMatrices(L_Z); // not constant since it corresponds to log(Z/Z*) that evolves at each iteration
+
+    vpColVector v; // vz, wx
+
+    vpFeatureDepth s_Zd;
+    s_Zd.buildFrom(0, 0, 1, 0); // The value of s* is 0 with Z=1 meter.
+
     while(1)
     {
         // Acquire a new image
@@ -285,16 +284,17 @@ int main(int argc, char **argv)
       if ( vpDisplay::getClick(I, false) )
         break;
     }
-  }
-  catch(...)
-  {
-  }
 
-  std::cout << "Ending robot thread..." << std::endl;
-  robot.stopRunning();
+    std::cout << "Ending robot thread..." << std::endl;
+    robot.stopRunning();
 
-  // wait for the thread to stop
-  robot.waitForRunExit();
+    // wait for the thread to stop
+    robot.waitForRunExit();
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 #else
 int main()
diff --git a/example/servo-pioneer/sonarPioneerReader.cpp b/example/servo-pioneer/sonarPioneerReader.cpp
index 9c8cf4f8..531fb8b3 100644
--- a/example/servo-pioneer/sonarPioneerReader.cpp
+++ b/example/servo-pioneer/sonarPioneerReader.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: sonarPioneerReader.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: sonarPioneerReader.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -207,142 +207,148 @@ void sonarPrinter(void)
 */
 int main(int argc, char **argv)
 {
-  ArArgumentParser parser(&argc, argv);
-  parser.loadDefaultArguments();
+  try {
+    ArArgumentParser parser(&argc, argv);
+    parser.loadDefaultArguments();
 
-  robot = new vpRobotPioneer;
+    robot = new vpRobotPioneer;
 
-  // ArRobotConnector connects to the robot, get some initial data from it such as type and name,
-  // and then loads parameter files for this robot.
-  ArRobotConnector robotConnector(&parser, robot);
-  if(!robotConnector.connectRobot())
-  {
-    ArLog::log(ArLog::Terse, "Could not connect to the robot");
-    if(parser.checkHelpAndWarnUnparsed())
+    // ArRobotConnector connects to the robot, get some initial data from it such as type and name,
+    // and then loads parameter files for this robot.
+    ArRobotConnector robotConnector(&parser, robot);
+    if(!robotConnector.connectRobot())
+    {
+      ArLog::log(ArLog::Terse, "Could not connect to the robot");
+      if(parser.checkHelpAndWarnUnparsed())
+      {
+        Aria::logOptions();
+        Aria::exit(1);
+      }
+    }
+    if (!Aria::parseArgs())
     {
       Aria::logOptions();
-      Aria::exit(1);
+      Aria::shutdown();
+      return false;
     }
-  }
-  if (!Aria::parseArgs())
-  {
-    Aria::logOptions();
-    Aria::shutdown();
-    return false;
-  }
-  
-  std::cout << "Robot connected" << std::endl;
+
+    std::cout << "Robot connected" << std::endl;
 
 #if defined(VISP_HAVE_X11) || defined (VISP_HAVE_GDI)
-  // Create a display to show sensor data
-  if (isInitialized == false)
-  {
-    I.resize(half_size*2, half_size*2);
-    I = 255;
+    // Create a display to show sensor data
+    if (isInitialized == false)
+    {
+      I.resize(half_size*2, half_size*2);
+      I = 255;
 
 #if defined(VISP_HAVE_X11)
-    d = new vpDisplayX;
+      d = new vpDisplayX;
 #elif defined (VISP_HAVE_GDI)
-    d = new vpDisplayGDI;
+      d = new vpDisplayGDI;
 #endif
-    d->init(I, -1, -1, "Sonar range data");
-    isInitialized = true;
-  }
+      d->init(I, -1, -1, "Sonar range data");
+      isInitialized = true;
+    }
 #endif
 
-  // Activates the sonar
-  ArGlobalFunctor sonarPrinterCB(&sonarPrinter);
-  robot->addRangeDevice(&sonar);
-  robot->addUserTask("Sonar printer", 50, &sonarPrinterCB);
+    // Activates the sonar
+    ArGlobalFunctor sonarPrinterCB(&sonarPrinter);
+    robot->addRangeDevice(&sonar);
+    robot->addUserTask("Sonar printer", 50, &sonarPrinterCB);
 
-  robot->useSonar(true); // activates the sonar device usage
+    robot->useSonar(true); // activates the sonar device usage
 
-  // Robot velocities
-  vpColVector v_mes(2);
+    // Robot velocities
+    vpColVector v_mes(2);
 
-  for (int i=0; i < 1000; i++)
-  {
-    double t = vpTime::measureTimeMs();
+    for (int i=0; i < 1000; i++)
+    {
+      double t = vpTime::measureTimeMs();
 
-    v_mes = robot->getVelocity(vpRobot::REFERENCE_FRAME);
-    std::cout << "Trans. vel= " << v_mes[0] << " m/s, Rot. vel=" << vpMath::deg(v_mes[1]) << " deg/s" << std::endl;
-    v_mes = robot->getVelocity(vpRobot::ARTICULAR_FRAME);
-    std::cout << "Left wheel vel= " << v_mes[0] << " m/s, Right wheel vel=" << v_mes[1] << " m/s" << std::endl;
-    std::cout << "Battery=" << robot->getBatteryVoltage() << std::endl;
+      v_mes = robot->getVelocity(vpRobot::REFERENCE_FRAME);
+      std::cout << "Trans. vel= " << v_mes[0] << " m/s, Rot. vel=" << vpMath::deg(v_mes[1]) << " deg/s" << std::endl;
+      v_mes = robot->getVelocity(vpRobot::ARTICULAR_FRAME);
+      std::cout << "Left wheel vel= " << v_mes[0] << " m/s, Right wheel vel=" << v_mes[1] << " m/s" << std::endl;
+      std::cout << "Battery=" << robot->getBatteryVoltage() << std::endl;
 
 #if defined(VISP_HAVE_X11) || defined (VISP_HAVE_GDI)
-    if (isInitialized) {
-      // A mouse click to exit
-      // Before exiting save the last sonar image
-      if (vpDisplay::getClick(I, false) == true) {
-        {
-          // Set the default output path
-          std::string opath;
-#ifdef UNIX
-          opath = "/tmp";
-#elif WIN32
-          opath = "C:\\temp";
+      if (isInitialized) {
+        // A mouse click to exit
+        // Before exiting save the last sonar image
+        if (vpDisplay::getClick(I, false) == true) {
+          {
+            // Set the default output path
+            std::string opath;
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
+            opath = "/tmp";
+#elif defined(_WIN32)
+            opath = "C:\\temp";
 #endif
-          std::string username = vpIoTools::getUserName();
-
-          // Append to the output path string, the login name of the user
-          opath +=  vpIoTools::path("/") + username;
-
-          // Test if the output path exist. If no try to create it
-          if (vpIoTools::checkDirectory(opath) == false) {
-            try {
-              // Create the dirname
-              vpIoTools::makeDirectory(opath);
-            }
-            catch (...) {
-              std::cerr << std::endl
-                        << "ERROR:" << std::endl;
-              std::cerr << "  Cannot create " << opath << std::endl;
-              exit(-1);
+            std::string username = vpIoTools::getUserName();
+
+            // Append to the output path string, the login name of the user
+            opath +=  vpIoTools::path("/") + username;
+
+            // Test if the output path exist. If no try to create it
+            if (vpIoTools::checkDirectory(opath) == false) {
+              try {
+                // Create the dirname
+                vpIoTools::makeDirectory(opath);
+              }
+              catch (...) {
+                std::cerr << std::endl
+                          << "ERROR:" << std::endl;
+                std::cerr << "  Cannot create " << opath << std::endl;
+                exit(-1);
+              }
             }
+            std::string filename = opath + "/sonar.png";
+            vpImage<vpRGBa> C;
+            vpDisplay::getImage(I, C);
+            vpImageIo::write(C, filename);
           }
-          std::string filename = opath + "/sonar.png";
-          vpImage<vpRGBa> C;
-          vpDisplay::getImage(I, C);
-          vpImageIo::write(C, filename);
+          break;
         }
-        break;
       }
-    }
 #endif
 
-    vpTime::wait(t, 40);
-  }
+      vpTime::wait(t, 40);
+    }
 
-  ArLog::log(ArLog::Normal, "simpleMotionCommands: Stopping.");
-  robot->lock();
-  robot->stop();
-  robot->unlock();
-  ArUtil::sleep(1000);
+    ArLog::log(ArLog::Normal, "simpleMotionCommands: Stopping.");
+    robot->lock();
+    robot->stop();
+    robot->unlock();
+    ArUtil::sleep(1000);
 
-  robot->lock();
-  ArLog::log(ArLog::Normal, "simpleMotionCommands: Pose=(%.2f,%.2f,%.2f), Trans. Vel=%.2f, Rot. Vel=%.2f, Battery=%.2fV",
-             robot->getX(), robot->getY(), robot->getTh(), robot->getVel(), robot->getRotVel(), robot->getBatteryVoltage());
-  robot->unlock();
+    robot->lock();
+    ArLog::log(ArLog::Normal, "simpleMotionCommands: Pose=(%.2f,%.2f,%.2f), Trans. Vel=%.2f, Rot. Vel=%.2f, Battery=%.2fV",
+               robot->getX(), robot->getY(), robot->getTh(), robot->getVel(), robot->getRotVel(), robot->getBatteryVoltage());
+    robot->unlock();
 
-  std::cout << "Ending robot thread..." << std::endl;
-  robot->stopRunning();
+    std::cout << "Ending robot thread..." << std::endl;
+    robot->stopRunning();
 
 #if defined(VISP_HAVE_X11) || defined (VISP_HAVE_GDI)
-  if (isInitialized) {
-    if (d != NULL)
-      delete d;
-  }
+    if (isInitialized) {
+      if (d != NULL)
+        delete d;
+    }
 #endif
 
-  // wait for the thread to stop
-  robot->waitForRunExit();
+    // wait for the thread to stop
+    robot->waitForRunExit();
 
-  delete robot;
+    delete robot;
 
-  // exit
-  ArLog::log(ArLog::Normal, "simpleMotionCommands: Exiting.");
-  return 0;
+    // exit
+    ArLog::log(ArLog::Normal, "simpleMotionCommands: Exiting.");
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 #endif
diff --git a/example/servo-ptu46/CMakeLists.txt b/example/servo-ptu46/CMakeLists.txt
index c8ec1bbe..5cab5447 100644
--- a/example/servo-ptu46/CMakeLists.txt
+++ b/example/servo-ptu46/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/servo-ptu46/movePtu46.cpp b/example/servo-ptu46/movePtu46.cpp
index d4b9b30a..920aed4f 100644
--- a/example/servo-ptu46/movePtu46.cpp
+++ b/example/servo-ptu46/movePtu46.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: movePtu46.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: movePtu46.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -56,7 +56,7 @@
 */
 #include <visp/vpConfig.h>
 #include <visp/vpDebug.h>
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
 #  include <unistd.h>
 #endif
 
diff --git a/example/servo-ptu46/servoPtu46Point2DArtVelocity.cpp b/example/servo-ptu46/servoPtu46Point2DArtVelocity.cpp
index 2c930937..3a2a365c 100644
--- a/example/servo-ptu46/servoPtu46Point2DArtVelocity.cpp
+++ b/example/servo-ptu46/servoPtu46Point2DArtVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoPtu46Point2DArtVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoPtu46Point2DArtVelocity.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -63,20 +63,20 @@
 */
 #include <visp/vpConfig.h>
 #include <visp/vpDebug.h> // Debug trace
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
 #  include <unistd.h>
 #endif
 #include <signal.h>
 
 
 
-#if (defined(VISP_HAVE_PTU46) & defined (VISP_HAVE_DC1394) )
+#if (defined(VISP_HAVE_PTU46) & defined (VISP_HAVE_DC1394_2) )
 
 #ifdef VISP_HAVE_PTHREAD
 #  include <pthread.h>
 #endif
 
-#include <visp/vp1394Grabber.h>
+#include <visp/vp1394TwoGrabber.h>
 #include <visp/vpImage.h>
 #include <visp/vpDisplay.h>
 #include <visp/vpDisplayX.h>
@@ -139,7 +139,7 @@ main()
 
     vpImage<unsigned char> I ;
 
-    vp1394Grabber g;
+    vp1394TwoGrabber g;
 
     g.open(I) ;
 
diff --git a/example/servo-viper650/CMakeLists.txt b/example/servo-viper650/CMakeLists.txt
index 51228304..f1dc2419 100644
--- a/example/servo-viper650/CMakeLists.txt
+++ b/example/servo-viper650/CMakeLists.txt
@@ -3,7 +3,7 @@
 # $Id: CMakeLists.txt 3750 2012-06-01 09:39:38Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/servo-viper650/servoViper650FourPoints2DArtVelocityInteractionCurrent.cpp b/example/servo-viper650/servoViper650FourPoints2DArtVelocityInteractionCurrent.cpp
index 5ee16cc6..2f0ad87b 100644
--- a/example/servo-viper650/servoViper650FourPoints2DArtVelocityInteractionCurrent.cpp
+++ b/example/servo-viper650/servoViper650FourPoints2DArtVelocityInteractionCurrent.cpp
@@ -3,7 +3,7 @@
  * $Id: servoViper850FourPoints2DArtVelocityInteractionCurrent.cpp 3870 2012-09-05 17:03:43Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-viper650/servoViper650FourPoints2DCamVelocityInteractionCurrent.cpp b/example/servo-viper650/servoViper650FourPoints2DCamVelocityInteractionCurrent.cpp
index ac5c06da..facd496c 100644
--- a/example/servo-viper650/servoViper650FourPoints2DCamVelocityInteractionCurrent.cpp
+++ b/example/servo-viper650/servoViper650FourPoints2DCamVelocityInteractionCurrent.cpp
@@ -3,7 +3,7 @@
  * $Id: servoViper850FourPoints2DCamVelocityInteractionCurrent.cpp 3870 2012-09-05 17:03:43Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-viper650/servoViper650Point2DCamVelocity.cpp b/example/servo-viper650/servoViper650Point2DCamVelocity.cpp
index bb7f49f2..fba34b3d 100644
--- a/example/servo-viper650/servoViper650Point2DCamVelocity.cpp
+++ b/example/servo-viper650/servoViper650Point2DCamVelocity.cpp
@@ -3,7 +3,7 @@
  * $Id: servoViper650Point2DCamVelocity.cpp 3616 2012-03-09 14:31:52Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-viper850/CMakeLists.txt b/example/servo-viper850/CMakeLists.txt
index 167d3acf..641b2309 100644
--- a/example/servo-viper850/CMakeLists.txt
+++ b/example/servo-viper850/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/servo-viper850/servoViper850FourPoints2DArtVelocityInteractionCurrent.cpp b/example/servo-viper850/servoViper850FourPoints2DArtVelocityInteractionCurrent.cpp
index 6a004a17..0a894bf4 100644
--- a/example/servo-viper850/servoViper850FourPoints2DArtVelocityInteractionCurrent.cpp
+++ b/example/servo-viper850/servoViper850FourPoints2DArtVelocityInteractionCurrent.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoViper850FourPoints2DArtVelocityInteractionCurrent.cpp 4065 2013-01-11 13:32:47Z fspindle $
+ * $Id: servoViper850FourPoints2DArtVelocityInteractionCurrent.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-viper850/servoViper850FourPoints2DArtVelocityInteractionDesired.cpp b/example/servo-viper850/servoViper850FourPoints2DArtVelocityInteractionDesired.cpp
index 526900e3..0a9e9687 100644
--- a/example/servo-viper850/servoViper850FourPoints2DArtVelocityInteractionDesired.cpp
+++ b/example/servo-viper850/servoViper850FourPoints2DArtVelocityInteractionDesired.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoViper850FourPoints2DArtVelocityInteractionDesired.cpp 4065 2013-01-11 13:32:47Z fspindle $
+ * $Id: servoViper850FourPoints2DArtVelocityInteractionDesired.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-viper850/servoViper850FourPoints2DCamVelocityInteractionCurrent.cpp b/example/servo-viper850/servoViper850FourPoints2DCamVelocityInteractionCurrent.cpp
index 6a6a343e..a10613a1 100644
--- a/example/servo-viper850/servoViper850FourPoints2DCamVelocityInteractionCurrent.cpp
+++ b/example/servo-viper850/servoViper850FourPoints2DCamVelocityInteractionCurrent.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoViper850FourPoints2DCamVelocityInteractionCurrent.cpp 4065 2013-01-11 13:32:47Z fspindle $
+ * $Id: servoViper850FourPoints2DCamVelocityInteractionCurrent.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-viper850/servoViper850FourPointsKinect.cpp b/example/servo-viper850/servoViper850FourPointsKinect.cpp
index eefc36ea..4fc9b644 100644
--- a/example/servo-viper850/servoViper850FourPointsKinect.cpp
+++ b/example/servo-viper850/servoViper850FourPointsKinect.cpp
@@ -4,7 +4,7 @@
  * $Id: servoViper850FourPoints2DCamVelocityKinect.cpp 3530 2012-01-03 10:52:12Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-viper850/servoViper850Point2DArtVelocity-jointAvoidance-basic.cpp b/example/servo-viper850/servoViper850Point2DArtVelocity-jointAvoidance-basic.cpp
index 5d0957da..bf3aaa85 100644
--- a/example/servo-viper850/servoViper850Point2DArtVelocity-jointAvoidance-basic.cpp
+++ b/example/servo-viper850/servoViper850Point2DArtVelocity-jointAvoidance-basic.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoViper850Point2DArtVelocity-jointAvoidance-basic.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoViper850Point2DArtVelocity-jointAvoidance-basic.cpp 4664 2014-02-16 16:17:54Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -47,10 +47,8 @@
 
   Joint limits avoidance by stopping the motion on axis near the joint limits. 
 
-  Implemented from section III.B in F. Chaumette, E. Marchand. A
-  redundancy-based iterative approach for avoiding joint limits: Application
-  to visual servoing. IEEE Trans. on Robotics and Automation, 17(5):719-730,
-  October 2001.
+  Implemented from section III.B in \cite Chaumette01c.
+
 */
 
 #include <visp/vpConfig.h>
diff --git a/example/servo-viper850/servoViper850Point2DArtVelocity-jointAvoidance-gpa.cpp b/example/servo-viper850/servoViper850Point2DArtVelocity-jointAvoidance-gpa.cpp
index 427ecc92..4e5b56c7 100644
--- a/example/servo-viper850/servoViper850Point2DArtVelocity-jointAvoidance-gpa.cpp
+++ b/example/servo-viper850/servoViper850Point2DArtVelocity-jointAvoidance-gpa.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoViper850Point2DArtVelocity-jointAvoidance-gpa.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: servoViper850Point2DArtVelocity-jointAvoidance-gpa.cpp 4664 2014-02-16 16:17:54Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -47,16 +47,7 @@
 
   Joint limits avoidance using a gradient projection approach. 
 
-  Implemented from :
-  
-  - E. Marchand, F. Chaumette, A. Rizzo. Using the task function approach to
-    avoid robot joint limits and kinematic singularities in visual servoing. In
-    IEEE/RSJ Int. Conf. on Intelligent Robots and Systems, IROS'96, Volume 3,
-    Pages 1083-1090, Osaka, Japan, November 1996. details.
-
-  - and section II.B in F. Chaumette, E. Marchand. A redundancy-based iterative
-    approach for avoiding joint limits: Application to visual servoing. IEEE
-    Trans. on Robotics and Automation, 17(5):719-730, October 2001.
+  Implemented from \cite Marchand96f and section II.B in \cite Chaumette01c.
 */
 
 #include <visp/vpConfig.h>
diff --git a/example/servo-viper850/servoViper850Point2DArtVelocity.cpp b/example/servo-viper850/servoViper850Point2DArtVelocity.cpp
index f85015a4..a790b561 100644
--- a/example/servo-viper850/servoViper850Point2DArtVelocity.cpp
+++ b/example/servo-viper850/servoViper850Point2DArtVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoViper850Point2DArtVelocity.cpp 4065 2013-01-11 13:32:47Z fspindle $
+ * $Id: servoViper850Point2DArtVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-viper850/servoViper850Point2DCamVelocity.cpp b/example/servo-viper850/servoViper850Point2DCamVelocity.cpp
index abfce201..7b72b9c7 100644
--- a/example/servo-viper850/servoViper850Point2DCamVelocity.cpp
+++ b/example/servo-viper850/servoViper850Point2DCamVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoViper850Point2DCamVelocity.cpp 4065 2013-01-11 13:32:47Z fspindle $
+ * $Id: servoViper850Point2DCamVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/servo-viper850/servoViper850Point2DCamVelocityKalman.cpp b/example/servo-viper850/servoViper850Point2DCamVelocityKalman.cpp
index 85865860..e2926ad7 100644
--- a/example/servo-viper850/servoViper850Point2DCamVelocityKalman.cpp
+++ b/example/servo-viper850/servoViper850Point2DCamVelocityKalman.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: servoViper850Point2DCamVelocityKalman.cpp 4300 2013-07-04 09:21:07Z fspindle $
+ * $Id: servoViper850Point2DCamVelocityKalman.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/tools/CMakeLists.txt b/example/tools/CMakeLists.txt
index 2e83d624..b1bab01c 100644
--- a/example/tools/CMakeLists.txt
+++ b/example/tools/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/tools/histogram.cpp b/example/tools/histogram.cpp
index 09bf7d00..23f7347d 100644
--- a/example/tools/histogram.cpp
+++ b/example/tools/histogram.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: histogram.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: histogram.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -63,6 +63,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"i:o:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, std::string user);
+
 /*!
   \example histogram.cpp
 
@@ -81,8 +84,7 @@
   \param user : Username.
 
  */
-void usage(const char *name, const char *badparam, std::string ipath,
-	   std::string opath, std::string user)
+void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user)
 {
   fprintf(stdout, "\n\
 Read an image on the disk, display it using X11, display some\n\
@@ -132,21 +134,19 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv,
-                std::string &ipath, std::string &opath,
-                std::string user)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, std::string user)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'i': ipath = optarg; break;
-    case 'o': opath = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'o': opath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath, opath, user); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, opath, user); return false; break;
+      usage(argv[0], optarg_, ipath, opath, user); return false; break;
     }
   }
 
@@ -154,7 +154,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, opath, user);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -164,236 +164,233 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string opt_opath;
-  std::string ipath;
-  std::string opath;
-  std::string filename;
-  std::string username;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-  //  std::cout << "env_ipath: " << env_ipath << std::endl;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Set the default output path
-#ifdef WIN32
-  opt_opath = "C:/temp";
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string opt_opath;
+    std::string ipath;
+    std::string opath;
+    std::string filename;
+    std::string username;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+    //  std::cout << "env_ipath: " << env_ipath << std::endl;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Set the default output path
+#if defined(_WIN32)
+    opt_opath = "C:/temp";
 #else
-  opt_opath = "/tmp";
+    opt_opath = "/tmp";
 #endif
 
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_opath, username) == false) {
-    exit (-1);
-  }
+    // Get the user login name
+    vpIoTools::getUserName(username);
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  if (!opt_opath.empty())
-    opath = opt_opath;
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_opath, username) == false) {
+      exit (-1);
+    }
 
-  // Append to the output path string, the login name of the user
-  std::string dirname = opath +  vpIoTools::path("/") + username;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+    if (!opt_opath.empty())
+      opath = opt_opath;
+
+    // Append to the output path string, the login name of the user
+    std::string dirname = opath +  vpIoTools::path("/") + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(dirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(dirname);
+      }
+      catch (...) {
+        usage(argv[0], NULL, ipath, opath, username);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << dirname << std::endl;
+        std::cerr << "  Check your -o " << opath << " option " << std::endl;
+        exit(-1);
+      }
+    }
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(dirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(dirname);
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (opt_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-    catch (...) {
+
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
       usage(argv[0], NULL, ipath, opath, username);
       std::cerr << std::endl
                 << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << dirname << std::endl;
-      std::cerr << "  Check your -o " << opath << " option " << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
       exit(-1);
     }
-  }
 
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (opt_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Create a grey level image
+    vpImage<unsigned char> I ;
+
+    // Load a grey image from the disk
+    filename = ipath;
+    if (opt_ipath.empty())
+      filename +=  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+
+    std::cout << "Read: " << filename << std::endl;
+    vpImageIo::read(I, filename) ;
+
+    unsigned char distance = 60;
+    vpHistogram h;
+
+    // Computes the histogram from the image
+    h.calculate(I);
+
+    // Save the histogram
+    filename = dirname +  vpIoTools::path("/histogram.txt");
+    std::cout << "Save the histogram in: " << filename << std::endl;
+    h.write(filename);
+
+    // Smooth the histogram
+    h.smooth();
+    // Save the histogram
+    filename = dirname +  vpIoTools::path("/histogram_smoothed.txt");
+    std::cout << "Save the smoothed histogram in: " << filename << std::endl;
+    h.write(filename);
+
+    std::list<vpHistogramPeak> peaks;
+    unsigned int nbpeaks = 0;
+
+    // get all the histogram peaks
+    nbpeaks = h.getPeaks(peaks);
+
+    vpTRACE("List of peaks");
+    vpTRACE("Nb peaks: %d", nbpeaks);
+    if (nbpeaks) {
+      for(std::list<vpHistogramPeak>::const_iterator it = peaks.begin(); it != peaks.end(); ++it)
+      {
+        vpHistogramPeak p = *it;
+        vpTRACE("Peak: gray level: %d value: %d", p.getLevel(), p.getValue());
+      }
     }
-  }
-
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opath, username);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
-
-  // Create a grey level image
-  vpImage<unsigned char> I ;
-
-  // Load a grey image from the disk
-  filename = ipath;
-  if (opt_ipath.empty())
-    filename +=  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-
-  std::cout << "Read: " << filename << std::endl;
-  vpImageIo::read(I, filename) ;
 
-  unsigned char distance = 60;
-  vpHistogram h;
-
-  // Computes the histogram from the image
-  h.calculate(I);
-
-  // Save the histogram
-  filename = dirname +  vpIoTools::path("/histogram.txt");
-  std::cout << "Save the histogram in: " << filename << std::endl;
-  h.write(filename);
+    // sort all the histogram peaks list to have the highest peak at the
+    // beginning of the list, the smallest at the end.
+    nbpeaks = h.sort(peaks);
+
+    vpTRACE("Sorted list of peaks");
+    vpTRACE("Nb peaks: %d", nbpeaks);
+    if (nbpeaks) {
+      for(std::list<vpHistogramPeak>::const_iterator it = peaks.begin(); it != peaks.end(); ++it)
+      {
+        vpHistogramPeak p = *it;
+        vpTRACE("Peak: gray level: %d value: %d", p.getLevel(), p.getValue());
+      }
+    }
 
-  // Smooth the histogram
-  h.smooth();
-  // Save the histogram
-  filename = dirname +  vpIoTools::path("/histogram_smoothed.txt");
-  std::cout << "Save the smoothed histogram in: " << filename << std::endl;
-  h.write(filename);
+    // Get the two highest histogram peaks. peak1 is the highest
+    vpHistogramPeak peak1, peak2;
+    nbpeaks = h.getPeaks(distance, peak1, peak2);
+    if (nbpeaks != 2) {
+      std::cout << "Not a bimodal histogram..." << std::endl;
+    }
+    else {
+      vpTRACE("Bimodal histogram: main peak1: %d-%d second peak2: %d-%d",
+              peak1.getLevel(), peak1.getValue(),
+              peak2.getLevel(), peak2.getValue());
+    }
 
-  std::list<vpHistogramPeak> peaks;
-  unsigned int nbpeaks = 0;
+    // Get the valey between the two highest peaks
+    vpHistogramValey valey;
+    if (h.getValey(peak1, peak2, valey) == false) {
+      vpTRACE("No valey found...");
+    }
+    else {
+      vpTRACE("Valey: %d-%d", valey.getLevel(), valey.getValue());
+    }
 
-  // get all the histogram peaks
-  nbpeaks = h.getPeaks(peaks);
+    vpHistogramValey valeyl, valeyr;
 
-  vpTRACE("List of peaks");
-  vpTRACE("Nb peaks: %d", nbpeaks);
-  if (nbpeaks) {
-    for(std::list<vpHistogramPeak>::const_iterator it = peaks.begin(); it != peaks.end(); ++it)
     {
-      vpHistogramPeak p = *it;
-      vpTRACE("Peak: gray level: %d value: %d", p.getLevel(), p.getValue());
+      // Search the two valeys around peak1
+      unsigned ret = h.getValey(distance, peak1, valeyl, valeyr);
+      if (ret == 0x00) {
+        vpTRACE("No left and right valey for peak %d-%d...",
+                peak1.getLevel(), peak1.getValue());
+      }
+      else if (ret == 0x10) {
+        vpTRACE("No right valey for peak %d-%d...",
+                peak1.getLevel(), peak1.getValue());
+        vpTRACE("Left valey: %d-%d", valeyl.getLevel(), valeyl.getValue());
+      }
+      else if (ret == 0x01) {
+        vpTRACE("No left valey for peak %d-%d...",
+                peak1.getLevel(), peak1.getValue());
+        vpTRACE("Right valey: %d-%d", valeyr.getLevel(), valeyr.getValue());
+      }
+      else if (ret == 0x11) {
+        vpTRACE("Left valey: %d-%d",  valeyl.getLevel(), valeyl.getValue());
+        vpTRACE("Right valey: %d-%d", valeyr.getLevel(), valeyr.getValue());
+      }
     }
-  }
-
-  // sort all the histogram peaks list to have the highest peak at the
-  // beginning of the list, the smallest at the end.
-  nbpeaks = h.sort(peaks);
-
-  vpTRACE("Sorted list of peaks");
-  vpTRACE("Nb peaks: %d", nbpeaks);
-  if (nbpeaks) {
-    for(std::list<vpHistogramPeak>::const_iterator it = peaks.begin(); it != peaks.end(); ++it)
     {
-      vpHistogramPeak p = *it;
-      vpTRACE("Peak: gray level: %d value: %d", p.getLevel(), p.getValue());
+      // Search the two valeys around peak2
+      unsigned ret = h.getValey(distance, peak2, valeyl, valeyr);
+      if (ret == 0x00) {
+        vpTRACE("No left and right valey for peak %d-%d...",
+                peak2.getLevel(), peak2.getValue());
+      }
+      else if (ret == 0x10) {
+        vpTRACE("No right valey for peak %d-%d...",
+                peak2.getLevel(), peak2.getValue());
+        vpTRACE("Left valey: %d-%d", valeyl.getLevel(), valeyl.getValue());
+      }
+      else if (ret == 0x01) {
+        vpTRACE("No left valey for peak %d-%d...",
+                peak2.getLevel(), peak2.getValue());
+        vpTRACE("Right valey: %d-%d", valeyr.getLevel(), valeyr.getValue());
+      }
+      else if (ret == 0x11) {
+        vpTRACE("Left valey: %d-%d",  valeyl.getLevel(), valeyl.getValue());
+        vpTRACE("Right valey: %d-%d", valeyr.getLevel(), valeyr.getValue());
+      }
     }
-  }
 
-  // Get the two highest histogram peaks. peak1 is the highest
-  vpHistogramPeak peak1, peak2;
-  nbpeaks = h.getPeaks(distance, peak1, peak2);
-  if (nbpeaks != 2) {
-    std::cout << "Not a bimodal histogram..." << std::endl;
-  }
-  else {
-    vpTRACE("Bimodal histogram: main peak1: %d-%d second peak2: %d-%d",
-            peak1.getLevel(), peak1.getValue(),
-            peak2.getLevel(), peak2.getValue());
-  }
-
-  // Get the valey between the two highest peaks
-  vpHistogramValey valey;
-  if (h.getValey(peak1, peak2, valey) == false) {
-    vpTRACE("No valey found...");
-  }
-  else {
-    vpTRACE("Valey: %d-%d", valey.getLevel(), valey.getValue());
-  }
-
-
-  vpHistogramValey valeyl, valeyr;
-
-  {
-    // Search the two valeys around peak1
-    unsigned ret = h.getValey(distance, peak1, valeyl, valeyr);
-    if (ret == 0x00) {
-      vpTRACE("No left and right valey for peak %d-%d...",
-              peak1.getLevel(), peak1.getValue());
-    }
-    else if (ret == 0x10) {
-      vpTRACE("No right valey for peak %d-%d...",
-              peak1.getLevel(), peak1.getValue());
-      vpTRACE("Left valey: %d-%d", valeyl.getLevel(), valeyl.getValue());
-    }
-    else if (ret == 0x01) {
-      vpTRACE("No left valey for peak %d-%d...",
-              peak1.getLevel(), peak1.getValue());
-      vpTRACE("Right valey: %d-%d", valeyr.getLevel(), valeyr.getValue());
+    ////////////////////////////////////////////////////////////
+    // get the valey between the two highest peaks. Here we don't know
+    // which of peakl or peakr is the highest.
+    vpHistogramPeak peakl, peakr;
+    if (h.getPeaks(distance, peakl, peakr, valey) == false) {
+      std::cout << "Not a bimodal histogram..." << std::endl;
     }
-    else if (ret == 0x11) {
-      vpTRACE("Left valey: %d-%d",  valeyl.getLevel(), valeyl.getValue());
-      vpTRACE("Right valey: %d-%d", valeyr.getLevel(), valeyr.getValue());
+    else {
+      vpTRACE("Bimodal histogram: valey %d-%d for peakl: %d-%d peakr: %d-%d",
+              valey.getLevel(), valey.getValue(),
+              peakl.getLevel(), peakl.getValue(),
+              peakr.getLevel(), peakr.getValue());
     }
+    return 0;
   }
-  {
-    // Search the two valeys around peak2
-    unsigned ret = h.getValey(distance, peak2, valeyl, valeyr);
-    if (ret == 0x00) {
-      vpTRACE("No left and right valey for peak %d-%d...",
-              peak2.getLevel(), peak2.getValue());
-    }
-    else if (ret == 0x10) {
-      vpTRACE("No right valey for peak %d-%d...",
-              peak2.getLevel(), peak2.getValue());
-      vpTRACE("Left valey: %d-%d", valeyl.getLevel(), valeyl.getValue());
-    }
-    else if (ret == 0x01) {
-      vpTRACE("No left valey for peak %d-%d...",
-              peak2.getLevel(), peak2.getValue());
-      vpTRACE("Right valey: %d-%d", valeyr.getLevel(), valeyr.getValue());
-    }
-    else if (ret == 0x11) {
-      vpTRACE("Left valey: %d-%d",  valeyl.getLevel(), valeyl.getValue());
-      vpTRACE("Right valey: %d-%d", valeyr.getLevel(), valeyr.getValue());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////
-  // get the valey between the two highest peaks. Here we don't know
-  // which of peakl or peakr is the highest.
-  vpHistogramPeak peakl, peakr;
-  if (h.getPeaks(distance, peakl, peakr, valey) == false) {
-    std::cout << "Not a bimodal histogram..." << std::endl;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  else {
-    vpTRACE("Bimodal histogram: valey %d-%d for peakl: %d-%d peakr: %d-%d",
-            valey.getLevel(), valey.getValue(),
-            peakl.getLevel(), peakl.getValue(),
-            peakr.getLevel(), peakr.getValue());
-  }
-
 }
-
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/example/tools/keyboard.cpp b/example/tools/keyboard.cpp
index d12a13b7..ef97dd02 100644
--- a/example/tools/keyboard.cpp
+++ b/example/tools/keyboard.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: keyboard.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: keyboard.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -48,7 +48,7 @@
 #include <visp/vpConfig.h>
 #include <visp/vpDebug.h>
 
-#if ( defined(UNIX) && ( ! defined(WIN32) ) )
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
 #include <stdio.h>
 #include <iostream>
 #include <signal.h>
diff --git a/example/tools/parallelPort.cpp b/example/tools/parallelPort.cpp
index f2573335..789f5222 100644
--- a/example/tools/parallelPort.cpp
+++ b/example/tools/parallelPort.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: parallelPort.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: parallelPort.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/example/tools/plot2d.cpp b/example/tools/plot2d.cpp
index cbf86f5c..5c487c30 100644
--- a/example/tools/plot2d.cpp
+++ b/example/tools/plot2d.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: plot2d.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: plot2d.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -55,65 +55,72 @@
 int main ()
 {
 #if defined(VISP_HAVE_DISPLAY)
-  vpPlot plot(2, 700, 700, 100, 200, "Curves...");
-
-  // Change the default font
-  //  plot.setFont("-misc-fixed-bold-r-semicondensed--0-0-75-75-c-0-iso8859-10");
-
-  //Initialize the number of curve for each graphic
-  plot.initGraph(0,1);
-  plot.initGraph(1,1);
-
-  //Set the color of the curves
-  plot.setColor(0,0,vpColor::green);
-  plot.setColor(1,0,vpColor::red);
-
-  //Set the titles of the graphic
-  char title[40];
-  strncpy( title, "cos function", 40 );
-  plot.setTitle(0,title);
-  strncpy( title, "sin function", 40 );
-  plot.setTitle(1, title);
-
-  //Set the legend of each curves
-  char legend[40];
-  strncpy( legend, "cos x", 40 );
-  plot.setLegend(0,0,legend);
-  strncpy( legend, "sin x", 40 );
-  plot.setLegend(1,0, legend);
-
-  //Set the x axis legend of each curves
-  char unit[40];
-  strncpy( unit, "x", 40 );
-  plot.setUnitX(0,unit);
-  strncpy( unit, "x", 40 );
-  plot.setUnitX(1,unit);
-
-  //Set the y axis legend of each curves
-  strncpy( unit, "y", 40 );
-  plot.setUnitY(0,unit);
-  strncpy( unit, "y", 40 );
-  plot.setUnitY(1,unit);
-
-  //Plot the cosinus and sinus functions
-  double i = 0;
-  while(i <= 20*2*M_PI)
-  {
-    double co = cos(i); 
-    double si = sin(i);
-    plot.plot(0,0,i,co);
-    plot.plot(1,0,i,si);
-    i+=0.1;
+  try {
+    vpPlot plot(2, 700, 700, 100, 200, "Curves...");
+
+    // Change the default font
+    //  plot.setFont("-misc-fixed-bold-r-semicondensed--0-0-75-75-c-0-iso8859-10");
+
+    //Initialize the number of curve for each graphic
+    plot.initGraph(0,1);
+    plot.initGraph(1,1);
+
+    //Set the color of the curves
+    plot.setColor(0,0,vpColor::green);
+    plot.setColor(1,0,vpColor::red);
+
+    //Set the titles of the graphic
+    char title[40];
+    strncpy( title, "cos function", 40 );
+    plot.setTitle(0,title);
+    strncpy( title, "sin function", 40 );
+    plot.setTitle(1, title);
+
+    //Set the legend of each curves
+    char legend[40];
+    strncpy( legend, "cos x", 40 );
+    plot.setLegend(0,0,legend);
+    strncpy( legend, "sin x", 40 );
+    plot.setLegend(1,0, legend);
+
+    //Set the x axis legend of each curves
+    char unit[40];
+    strncpy( unit, "x", 40 );
+    plot.setUnitX(0,unit);
+    strncpy( unit, "x", 40 );
+    plot.setUnitX(1,unit);
+
+    //Set the y axis legend of each curves
+    strncpy( unit, "y", 40 );
+    plot.setUnitY(0,unit);
+    strncpy( unit, "y", 40 );
+    plot.setUnitY(1,unit);
+
+    //Plot the cosinus and sinus functions
+    double i = 0;
+    while(i <= 20*2*M_PI)
+    {
+      double co = cos(i);
+      double si = sin(i);
+      plot.plot(0,0,i,co);
+      plot.plot(1,0,i,si);
+      i+=0.1;
+    }
+
+    vpDisplay::getClick(plot.I);
+
+    //Save the datas as text files
+    plot.saveData(0, "dataCos.txt");
+    plot.saveData(0, "dataSin.txt");
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  
-  vpDisplay::getClick(plot.I);
-  
-  //Save the datas as text files
-  plot.saveData(0, "dataCos.txt");
-  plot.saveData(0, "dataSin.txt");
+
 #else
   std::cout << "Plot functionalities are not avalaible since no display is available." << std::endl;
 #endif
 
-  return 0;
 }
diff --git a/example/tools/plot3d.cpp b/example/tools/plot3d.cpp
index 94848d5c..9485e598 100755
--- a/example/tools/plot3d.cpp
+++ b/example/tools/plot3d.cpp
@@ -3,7 +3,7 @@
  * $Id: plot.cpp 3530 2012-01-03 10:52:12Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -53,64 +53,70 @@
 int main ()
 {
 #if defined(VISP_HAVE_DISPLAY)
-  //Create a window with one graphic
-  vpPlot plot(1);
+  try {
+    //Create a window with one graphic
+    vpPlot plot(1);
 
-  // Change the default font
-  //plot.setFont("-misc-fixed-bold-r-semicondensed--0-0-75-75-c-0-iso8859-10");
+    // Change the default font
+    //plot.setFont("-misc-fixed-bold-r-semicondensed--0-0-75-75-c-0-iso8859-10");
 
-  //The graphic contains 2 curves
-  plot.initGraph(0,2);
-  
-  //Set the graphic parameters
-  plot.setTitle(0, "First graphic");
-  plot.setUnitX(0, "time (s)");
-  plot.setUnitY(0, "y");
-  plot.setUnitZ(0, "z");
-  plot.setLegend(0,0, "y^2+z^2=1 and y(0) = 1");
-  plot.setLegend(0,1, "y^2+z^2=1 and y(0) = -1");
-  plot.setColor(0,0,vpColor::red);
-  plot.setColor(0,1,vpColor::green);
+    //The graphic contains 2 curves
+    plot.initGraph(0,2);
 
-  double x = 0;
-  double y = 1;
-  double z = 0 ;
-  double dx = 0.08;
-  double dy = 0.04;
-  double zsign = 1.0;
+    //Set the graphic parameters
+    plot.setTitle(0, "First graphic");
+    plot.setUnitX(0, "time (s)");
+    plot.setUnitY(0, "y");
+    plot.setUnitZ(0, "z");
+    plot.setLegend(0,0, "y^2+z^2=1 and y(0) = 1");
+    plot.setLegend(0,1, "y^2+z^2=1 and y(0) = -1");
+    plot.setColor(0,0,vpColor::red);
+    plot.setColor(0,1,vpColor::green);
 
-  unsigned long iter = 0;
+    double x = 0;
+    double y = 1;
+    double z = 0 ;
+    double dx = 0.08;
+    double dy = 0.04;
+    double zsign = 1.0;
 
-  std::cout << "Hit CTRL-C to exit...";
-  while(1) {
-    if (iter < 300) {
-      //y*y+z*z = 1
-      if (fabs(y) < 1.0)
-        z = sqrt(1.0-y*y);
-      else z = 0;
+    unsigned long iter = 0;
 
-      //Add points to the graphic
-      plot.plot(0,0, x, y,z*zsign);
-      plot.plot(0,1, x, -y,-z*zsign);
-      
-      x += dx;
-      
-      if (fabs(y) >= 1.0 ) 
-        dy = -dy;
-      y += dy;
-      if (fabs(y) >= 1.0 ) 
-        zsign = -zsign;
-    }
-    else {
-      // Tip: to allows modifying the point of view with the mouse we
-      // plot always the last point
-      plot.plot(0,0, x, y,z*zsign);
-      plot.plot(0,1, x, -y,-z*zsign);
+    std::cout << "Hit CTRL-C to exit...";
+    while(1) {
+      if (iter < 300) {
+        //y*y+z*z = 1
+        if (fabs(y) < 1.0)
+          z = sqrt(1.0-y*y);
+        else z = 0;
+
+        //Add points to the graphic
+        plot.plot(0,0, x, y,z*zsign);
+        plot.plot(0,1, x, -y,-z*zsign);
+
+        x += dx;
+
+        if (fabs(y) >= 1.0 )
+          dy = -dy;
+        y += dy;
+        if (fabs(y) >= 1.0 )
+          zsign = -zsign;
+      }
+      else {
+        // Tip: to allows modifying the point of view with the mouse we
+        // plot always the last point
+        plot.plot(0,0, x, y,z*zsign);
+        plot.plot(0,1, x, -y,-z*zsign);
+      }
+      iter ++;
     }
-    iter ++;
+
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  
-  return 0;
 #else
   std::cout << "Plot functionalities are not avalaible since no display is available." << std::endl;
 #endif
diff --git a/example/tracking/CMakeLists.txt b/example/tracking/CMakeLists.txt
index 39d1b541..21287d1d 100644
--- a/example/tracking/CMakeLists.txt
+++ b/example/tracking/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4156 2013-03-11 16:12:24Z ayol $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -47,6 +47,7 @@ SET (SOURCE
   mbtEdgeTracking.cpp
   mbtEdgeKltTracking.cpp
   mbtKltTracking.cpp
+  templateTracker.cpp
   trackDot2WithAutoDetection.cpp
   trackMeCircle.cpp
   trackMeEllipse.cpp
@@ -81,6 +82,78 @@ ADD_TEST(trackMeNurbs     trackMeNurbs -c ${OPTION_TO_DESACTIVE_DISPLAY})
 ADD_TEST(trackDot         trackDot -c ${OPTION_TO_DESACTIVE_DISPLAY})
 ADD_TEST(trackDot2        trackDot2 -c ${OPTION_TO_DESACTIVE_DISPLAY})
 
+#ADD_TEST(templateTracker-SSDESM-Affine        templateTracker -c -l 2 -t 0 -w 0 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDESM-Homography    templateTracker -c -l 2 -t 0 -w 1 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDESM-HomographySL3 templateTracker -c -l 2 -t 0 -w 2 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDESM-SRT           templateTracker -c -l 2 -t 0 -w 3 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDESM-Translation   templateTracker -c -l 2 -t 0 -w 4 ${OPTION_TO_DESACTIVE_DISPLAY})
+
+ADD_TEST(templateTrackerPyramidal-SSDESM-Affine        templateTracker -c -l 2 -t 0 -w 0 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDESM-Homography    templateTracker -c -l 2 -t 0 -w 1 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDESM-HomographySL3 templateTracker -c -l 2 -t 0 -w 2 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDESM-SRT           templateTracker -c -l 2 -t 0 -w 3 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDESM-Translation   templateTracker -c -l 2 -t 0 -w 4 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+
+#ADD_TEST(templateTracker-SSDForwardAdditional-Affine        templateTracker -c -l 2 -t 1 -w 0 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDForwardAdditional-Homography    templateTracker -c -l 2 -t 1 -w 1 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDForwardAdditional-HomographySL3 templateTracker -c -l 2 -t 1 -w 2 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDForwardAdditional-SRT           templateTracker -c -l 2 -t 1 -w 3 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDForwardAdditional-Translation   templateTracker -c -l 2 -t 1 -w 4 ${OPTION_TO_DESACTIVE_DISPLAY})
+
+ADD_TEST(templateTrackerPyramidal-SSDForwardAdditional-Affine        templateTracker -c -l 2 -t 1 -w 0 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDForwardAdditional-Homography    templateTracker -c -l 2 -t 1 -w 1 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDForwardAdditional-HomographySL3 templateTracker -c -l 2 -t 1 -w 2 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDForwardAdditional-SRT           templateTracker -c -l 2 -t 1 -w 3 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDForwardAdditional-Translation   templateTracker -c -l 2 -t 1 -w 4 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+
+#ADD_TEST(templateTracker-SSDForwardCompositional-Affine        templateTracker -c -l 2 -t 2 -w 0 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDForwardCompositional-Homography    templateTracker -c -l 2 -t 2 -w 1 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDForwardCompositional-HomographySL3 templateTracker -c -l 2 -t 2 -w 2 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDForwardCompositional-SRT           templateTracker -c -l 2 -t 2 -w 3 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDForwardCompositional-Translation   templateTracker -c -l 2 -t 2 -w 4 ${OPTION_TO_DESACTIVE_DISPLAY})
+
+ADD_TEST(templateTrackerPyramidal-SSDForwardCompositional-Affine        templateTracker -c -l 2 -t 2 -w 0 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDForwardCompositional-Homography    templateTracker -c -l 2 -t 2 -w 1 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDForwardCompositional-HomographySL3 templateTracker -c -l 2 -t 2 -w 2 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDForwardCompositional-SRT           templateTracker -c -l 2 -t 2 -w 3 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDForwardCompositional-Translation   templateTracker -c -l 2 -t 2 -w 4 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+
+#ADD_TEST(templateTracker-SSDInverseCompositional-Affine        templateTracker -c -l 2 -t 3 -w 0 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDInverseCompositional-Homography    templateTracker -c -l 2 -t 3 -w 1 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDInverseCompositional-HomographySL3 templateTracker -c -l 2 -t 3 -w 2 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDInverseCompositional-SRT           templateTracker -c -l 2 -t 3 -w 3 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-SSDInverseCompositional-Translation   templateTracker -c -l 2 -t 3 -w 4 ${OPTION_TO_DESACTIVE_DISPLAY})
+
+ADD_TEST(templateTrackerPyramidal-SSDInverseCompositional-Affine        templateTracker -c -l 2 -t 3 -w 0 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDInverseCompositional-Homography    templateTracker -c -l 2 -t 3 -w 1 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDInverseCompositional-HomographySL3 templateTracker -c -l 2 -t 3 -w 2 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDInverseCompositional-SRT           templateTracker -c -l 2 -t 3 -w 3 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-SSDInverseCompositional-Translation   templateTracker -c -l 2 -t 3 -w 4 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+
+#ADD_TEST(templateTracker-ZNCCForwardAdditional-Affine        templateTracker -c -l 2 -t 4 -w 0 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-ZNCCForwardAdditional-Homography    templateTracker -c -l 2 -t 4 -w 1 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-ZNCCForwardAdditional-HomographySL3 templateTracker -c -l 2 -t 4 -w 2 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-ZNCCForwardAdditional-SRT           templateTracker -c -l 2 -t 4 -w 3 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-ZNCCForwardAdditional-Translation   templateTracker -c -l 2 -t 4 -w 4 ${OPTION_TO_DESACTIVE_DISPLAY})
+
+ADD_TEST(templateTrackerPyramidal-ZNCCForwardAdditional-Affine        templateTracker -c -l 2 -t 4 -w 0 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-ZNCCForwardAdditional-Homography    templateTracker -c -l 2 -t 4 -w 1 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-ZNCCForwardAdditional-HomographySL3 templateTracker -c -l 2 -t 4 -w 2 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-ZNCCForwardAdditional-SRT           templateTracker -c -l 2 -t 4 -w 3 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-ZNCCForwardAdditional-Translation   templateTracker -c -l 2 -t 4 -w 4 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+
+#ADD_TEST(templateTracker-ZNCCInverseCompositional-Affine        templateTracker -c -l 2 -t 5 -w 0 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-ZNCCInverseCompositional-Homography    templateTracker -c -l 2 -t 5 -w 1 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-ZNCCInverseCompositional-HomographySL3 templateTracker -c -l 2 -t 5 -w 2 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-ZNCCInverseCompositional-SRT           templateTracker -c -l 2 -t 5 -w 3 ${OPTION_TO_DESACTIVE_DISPLAY})
+#ADD_TEST(templateTracker-ZNCCInverseCompositional-Translation   templateTracker -c -l 2 -t 5 -w 4 ${OPTION_TO_DESACTIVE_DISPLAY})
+
+ADD_TEST(templateTrackerPyramidal-ZNCCInverseCompositional-Affine        templateTracker -c -l 2 -t 5 -w 0 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-ZNCCInverseCompositional-Homography    templateTracker -c -l 2 -t 5 -w 1 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-ZNCCInverseCompositional-HomographySL3 templateTracker -c -l 2 -t 5 -w 2 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-ZNCCInverseCompositional-SRT           templateTracker -c -l 2 -t 5 -w 3 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+ADD_TEST(templateTrackerPyramidal-ZNCCInverseCompositional-Translation   templateTracker -c -l 2 -t 5 -w 4 -p ${OPTION_TO_DESACTIVE_DISPLAY})
+
 # customize clean target 
 SET_DIRECTORY_PROPERTIES(PROPERTIES 
   ADDITIONAL_MAKE_CLEAN_FILES "core*;*~;gmon.out;DartTestfile.txt"
diff --git a/example/tracking/mbtEdgeKltTracking.cpp b/example/tracking/mbtEdgeKltTracking.cpp
index ac53ba86..8fc11f8e 100644
--- a/example/tracking/mbtEdgeKltTracking.cpp
+++ b/example/tracking/mbtEdgeKltTracking.cpp
@@ -3,7 +3,7 @@
  * $Id: mbtTracking.cpp 3957 2012-11-07 15:22:30Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -65,6 +65,10 @@
 
 #define GETOPTARGS  "x:m:i:n:dchtfCo"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &configFile, std::string &modelFile,
+                std::string &initFile, bool &displayFeatures, bool &click_allowed, bool &display,
+                bool& cao3DModel, bool& trackCylinder, bool &useOgre);
 
 void usage(const char *name, const char *badparam)
 {
@@ -134,17 +138,19 @@ OPTIONS:                                               \n\
 }
 
 
-bool getOptions(int argc, const char **argv, std::string &ipath, std::string &configFile, std::string &modelFile, std::string &initFile, bool &displayFeatures, bool &click_allowed, bool &display, bool& cao3DModel, bool& trackCylinder, bool &useOgre)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &configFile, std::string &modelFile,
+                std::string &initFile, bool &displayFeatures, bool &click_allowed, bool &display,
+                bool& cao3DModel, bool& trackCylinder, bool &useOgre)
 {
-  const char *optarg;
+  const char *optarg_;
   int   c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'i': ipath = optarg; break;
-    case 'x': configFile = optarg; break;
-    case 'm': modelFile = optarg; break;
-    case 'n': initFile = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'x': configFile = optarg_; break;
+    case 'm': modelFile = optarg_; break;
+    case 'n': initFile = optarg_; break;
     case 't': displayFeatures = false; break;
     case 'f': cao3DModel = true; break;
     case 'c': click_allowed = false; break;
@@ -154,7 +160,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &co
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -163,7 +169,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &co
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -173,254 +179,248 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &co
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string opt_configFile;
-  std::string configFile;
-  std::string opt_modelFile;
-  std::string modelFile;
-  std::string opt_initFile;
-  std::string initFile;
-  bool displayFeatures = true;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-  bool cao3DModel = false;
-  bool trackCylinder = true;
-  bool useOgre = false;
-  
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (!getOptions(argc, argv, opt_ipath, opt_configFile, opt_modelFile, opt_initFile, displayFeatures, opt_click_allowed, opt_display, cao3DModel, trackCylinder, useOgre)) {
-    return (-1);
-  }
-
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty() ){
-    usage(argv[0], NULL);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl
-              << std::endl;
-
-    return (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string opt_configFile;
+    std::string configFile;
+    std::string opt_modelFile;
+    std::string modelFile;
+    std::string opt_initFile;
+    std::string initFile;
+    bool displayFeatures = true;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+    bool cao3DModel = false;
+    bool trackCylinder = true;
+    bool useOgre = false;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (!getOptions(argc, argv, opt_ipath, opt_configFile, opt_modelFile, opt_initFile, displayFeatures, opt_click_allowed, opt_display, cao3DModel, trackCylinder, useOgre)) {
+      return (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube/image%04d.pgm");
-  else
-    ipath = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube/image%04d.pgm");
-  
-  if (!opt_configFile.empty())
-    configFile = opt_configFile;
-  else if (!opt_ipath.empty())
-    configFile = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube.xml");
-  else
-    configFile = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube.xml");
-  
-  if (!opt_modelFile.empty()){
-    modelFile = opt_modelFile;
-  }else{    
-    std::string modelFileCao;
-    std::string modelFileWrl;
-    if(trackCylinder){
-      modelFileCao = "/ViSP-images/mbt/cube_and_cylinder.cao";
-      modelFileWrl = "/ViSP-images/mbt/cube_and_cylinder.wrl";
-    }else{
-      modelFileCao = "/ViSP-images/mbt/cube.cao";
-      modelFileWrl = "/ViSP-images/mbt/cube.wrl";
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty() ){
+      usage(argv[0], NULL);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl
+                << std::endl;
+
+      return (-1);
     }
 
-    if(!opt_ipath.empty()){
-      if(cao3DModel){
-        modelFile = opt_ipath + vpIoTools::path(modelFileCao);
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube/image%04d.pgm");
+    else
+      ipath = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube/image%04d.pgm");
+
+    if (!opt_configFile.empty())
+      configFile = opt_configFile;
+    else if (!opt_ipath.empty())
+      configFile = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube.xml");
+    else
+      configFile = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube.xml");
+
+    if (!opt_modelFile.empty()){
+      modelFile = opt_modelFile;
+    }else{
+      std::string modelFileCao;
+      std::string modelFileWrl;
+      if(trackCylinder){
+        modelFileCao = "/ViSP-images/mbt/cube_and_cylinder.cao";
+        modelFileWrl = "/ViSP-images/mbt/cube_and_cylinder.wrl";
+      }else{
+        modelFileCao = "/ViSP-images/mbt/cube.cao";
+        modelFileWrl = "/ViSP-images/mbt/cube.wrl";
       }
-      else{
+
+      if(!opt_ipath.empty()){
+        if(cao3DModel){
+          modelFile = opt_ipath + vpIoTools::path(modelFileCao);
+        }
+        else{
 #ifdef VISP_HAVE_COIN
-        modelFile = opt_ipath + vpIoTools::path(modelFileWrl);
+          modelFile = opt_ipath + vpIoTools::path(modelFileWrl);
 #else
-        std::cerr << "Coin is not detected in ViSP. Use the .cao model instead." << std::endl;
-        modelFile = opt_ipath + vpIoTools::path(modelFileCao);
+          std::cerr << "Coin is not detected in ViSP. Use the .cao model instead." << std::endl;
+          modelFile = opt_ipath + vpIoTools::path(modelFileCao);
 #endif
-      }
-    }
-    else{
-      if(cao3DModel){
-        modelFile = env_ipath + vpIoTools::path(modelFileCao);
+        }
       }
       else{
+        if(cao3DModel){
+          modelFile = env_ipath + vpIoTools::path(modelFileCao);
+        }
+        else{
 #ifdef VISP_HAVE_COIN
-        modelFile = env_ipath + vpIoTools::path(modelFileWrl);
+          modelFile = env_ipath + vpIoTools::path(modelFileWrl);
 #else
-        std::cerr << "Coin is not detected in ViSP. Use the .cao model instead." << std::endl;
-        modelFile = env_ipath + vpIoTools::path(modelFileCao);
+          std::cerr << "Coin is not detected in ViSP. Use the .cao model instead." << std::endl;
+          modelFile = env_ipath + vpIoTools::path(modelFileCao);
 #endif
+        }
       }
     }
-  }
-  
-  if (!opt_initFile.empty())
-    initFile = opt_initFile;
-  else if (!opt_ipath.empty())
-    initFile = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube");
-  else
-    initFile = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube");
-
-  vpImage<unsigned char> I;
-  vpVideoReader reader;
-
-  reader.setFileName(ipath.c_str());
-  try{
-    reader.open(I);
-  }catch(...){
-    std::cout << "Cannot open sequence: " << ipath << std::endl;
-    return -1;
-  }
-  
-  reader.acquire(I);
 
-  // initialise a  display
+    if (!opt_initFile.empty())
+      initFile = opt_initFile;
+    else if (!opt_ipath.empty())
+      initFile = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube");
+    else
+      initFile = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube");
+
+    vpImage<unsigned char> I;
+    vpVideoReader reader;
+
+    reader.setFileName(ipath.c_str());
+    try{
+      reader.open(I);
+    }catch(...){
+      std::cout << "Cannot open sequence: " << ipath << std::endl;
+      return -1;
+    }
+
+    reader.acquire(I);
+
+    // initialise a  display
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV display;
+    vpDisplayOpenCV display;
 #elif defined VISP_HAVE_D3D9
-  vpDisplayD3D display;
+    vpDisplayD3D display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #else
-  opt_display = false;
+    opt_display = false;
 #endif
-  if (opt_display)
-  {
+    if (opt_display)
+    {
 #if (defined VISP_HAVE_DISPLAY)
-    display.init(I, 100, 100, "Test tracking") ;
+      display.init(I, 100, 100, "Test tracking") ;
 #endif
-    vpDisplay::display(I) ;
-    vpDisplay::flush(I);
-  }
+      vpDisplay::display(I) ;
+      vpDisplay::flush(I);
+    }
 
-  vpMbEdgeKltTracker tracker;
-  vpHomogeneousMatrix cMo;
-  vpCameraParameters cam;
+    vpMbEdgeKltTracker tracker;
+    vpHomogeneousMatrix cMo;
+    vpCameraParameters cam;
 
-  // Initialise the tracker: camera parameters, moving edge and KLT settings
+    // Initialise the tracker: camera parameters, moving edge and KLT settings
 #if defined (VISP_HAVE_XML2)
-  // From the xml file
-  tracker.loadConfigFile(configFile.c_str());
+    // From the xml file
+    tracker.loadConfigFile(configFile.c_str());
 #else
-  // By setting the parameters:
-  cam.initPersProjWithoutDistortion(547, 542, 338, 234);
-
-  vpMe me;
-  me.setMaskSize(5);
-  me.setMaskNumber(180);
-  me.setRange(7);
-  me.setThreshold(5000);
-  me.setMu1(0.5);
-  me.setMu2(0.5);
-  me.setMinSampleStep(4);
-  me.setNbTotalSample(250);
-
-  vpKltOpencv klt;
-  klt.setMaxFeatures(10000);
-  klt.setWindowSize(5);
-  klt.setQuality(0.01);
-  klt.setMinDistance(5);
-  klt.setHarrisFreeParameter(0.01);
-  klt.setBlockSize(3);
-  klt.setPyramidLevels(3);
-
-  tracker.setCameraParameters(cam);
-  tracker.setMovingEdge(me);
-  tracker.setKltOpencv(klt);
-  tracker.setAngleAppear( vpMath::rad(65) );
-  tracker.setAngleDisappear( vpMath::rad(75) );
-  tracker.setMaskBorder(5);
-  
-  // Specify the clipping to
-  tracker.setNearClippingDistance(0.01);
-  tracker.setFarClippingDistance(0.90);
-  tracker.setClipping(tracker.getClipping() | vpMbtPolygon::FOV_CLIPPING);
-//   tracker.setClipping(tracker.getClipping() | vpMbtPolygon::LEFT_CLIPPING | vpMbtPolygon::RIGHT_CLIPPING | vpMbtPolygon::UP_CLIPPING | vpMbtPolygon::DOWN_CLIPPING); // Equivalent to FOV_CLIPPING
+    // By setting the parameters:
+    cam.initPersProjWithoutDistortion(547, 542, 338, 234);
+
+    vpMe me;
+    me.setMaskSize(5);
+    me.setMaskNumber(180);
+    me.setRange(7);
+    me.setThreshold(5000);
+    me.setMu1(0.5);
+    me.setMu2(0.5);
+    me.setMinSampleStep(4);
+    me.setNbTotalSample(250);
+
+    vpKltOpencv klt;
+    klt.setMaxFeatures(10000);
+    klt.setWindowSize(5);
+    klt.setQuality(0.01);
+    klt.setMinDistance(5);
+    klt.setHarrisFreeParameter(0.01);
+    klt.setBlockSize(3);
+    klt.setPyramidLevels(3);
+
+    tracker.setCameraParameters(cam);
+    tracker.setMovingEdge(me);
+    tracker.setKltOpencv(klt);
+    tracker.setAngleAppear( vpMath::rad(65) );
+    tracker.setAngleDisappear( vpMath::rad(75) );
+    tracker.setMaskBorder(5);
+
+    // Specify the clipping to
+    tracker.setNearClippingDistance(0.01);
+    tracker.setFarClippingDistance(0.90);
+    tracker.setClipping(tracker.getClipping() | vpMbtPolygon::FOV_CLIPPING);
+    //   tracker.setClipping(tracker.getClipping() | vpMbtPolygon::LEFT_CLIPPING | vpMbtPolygon::RIGHT_CLIPPING | vpMbtPolygon::UP_CLIPPING | vpMbtPolygon::DOWN_CLIPPING); // Equivalent to FOV_CLIPPING
 #endif
-  
-  // Display the moving edges, and the Klt points
-  tracker.setDisplayFeatures(displayFeatures);
-  
-  // Tells if the tracker has to use Ogre3D for visibility tests
-  tracker.setOgreVisibilityTest(useOgre);
-
-  // Retrieve the camera parameters from the tracker
-  tracker.getCameraParameters(cam);
-
-  // Loop to position the cube
-  if (opt_display && opt_click_allowed)
-  {
-    while(!vpDisplay::getClick(I,false)){
-      vpDisplay::display(I);
-      vpDisplay::displayCharString(I, 15, 10,
-                                   "click after positioning the object",
-                                   vpColor::red);
-      vpDisplay::flush(I) ;
+
+    // Display the moving edges, and the Klt points
+    tracker.setDisplayFeatures(displayFeatures);
+
+    // Tells if the tracker has to use Ogre3D for visibility tests
+    tracker.setOgreVisibilityTest(useOgre);
+
+    // Retrieve the camera parameters from the tracker
+    tracker.getCameraParameters(cam);
+
+    // Loop to position the cube
+    if (opt_display && opt_click_allowed)
+    {
+      while(!vpDisplay::getClick(I,false)){
+        vpDisplay::display(I);
+        vpDisplay::displayCharString(I, 15, 10,
+                                     "click after positioning the object",
+                                     vpColor::red);
+        vpDisplay::flush(I) ;
+      }
     }
-  }
 
-  // Load the 3D model (either a vrml file or a .cao file)
-  try{
+    // Load the 3D model (either a vrml file or a .cao file)
     tracker.loadModel(modelFile.c_str());
-  }
-  catch(...)
-  {
-    return 0;
-  }
-  // Initialise the tracker by clicking on the image
-  // This function looks for 
-  //   - a ./cube/cube.init file that defines the 3d coordinates (in meter, in the object basis) of the points used for the initialisation
-  //   - a ./cube/cube.ppm file to display where the user have to click (optionnal, set by the third parameter)
-  if (opt_display && opt_click_allowed)
-  {
-    tracker.initClick(I, initFile.c_str(), true);
+
+    // Initialise the tracker by clicking on the image
+    // This function looks for
+    //   - a ./cube/cube.init file that defines the 3d coordinates (in meter, in the object basis) of the points used for the initialisation
+    //   - a ./cube/cube.ppm file to display where the user have to click (optionnal, set by the third parameter)
+    if (opt_display && opt_click_allowed)
+    {
+      tracker.initClick(I, initFile.c_str(), true);
+      tracker.getPose(cMo);
+      // display the 3D model at the given pose
+      tracker.display(I,cMo, cam, vpColor::red);
+    }
+    else
+    {
+      vpHomogeneousMatrix cMoi(0.02044769891, 0.1101505452, 0.5078963719, 2.063603907, 1.110231561, -0.4392789872);
+      tracker.initFromPose(I, cMoi);
+    }
+
+    //track the model
+    tracker.track(I);
     tracker.getPose(cMo);
-    // display the 3D model at the given pose
-    tracker.display(I,cMo, cam, vpColor::red);
-  }
-  else
-  {
-    vpHomogeneousMatrix cMoi(0.02044769891, 0.1101505452, 0.5078963719, 2.063603907, 1.110231561, -0.4392789872);
-    tracker.initFromPose(I, cMoi);
-  }
 
-  //track the model
-  tracker.track(I);
-  tracker.getPose(cMo);
-  
-  if (opt_display)
-    vpDisplay::flush(I);
-
-  // Uncomment if you want to compute the covariance matrix.
-  // tracker.setCovarianceComputation(true); //Important if you want tracker.getCovarianceMatrix() to work.  
-  
-  while (!reader.end())
-  {
-    try
+    if (opt_display)
+      vpDisplay::flush(I);
+
+    // Uncomment if you want to compute the covariance matrix.
+    // tracker.setCovarianceComputation(true); //Important if you want tracker.getCovarianceMatrix() to work.
+
+    while (!reader.end())
     {
-      // acquire a new image 
+      // acquire a new image
       reader.acquire(I);
       // display the image
       if (opt_display)
@@ -428,39 +428,38 @@ main(int argc, const char ** argv)
       // track the object
       tracker.track(I);
       tracker.getPose(cMo);
-      // display the 3D model  
+      // display the 3D model
       if (opt_display)
       {
         tracker.display(I, cMo, cam, vpColor::darkRed);
         // display the frame
         vpDisplay::displayFrame (I, cMo, cam, 0.05, vpColor::blue);
       }
-      
-      // Uncomment if you want to print the covariance matrix. 
+
+      // Uncomment if you want to print the covariance matrix.
       // Make sure tracker.setCovarianceComputation(true) has been called (uncomment below).
       // std::cout << tracker.getCovarianceMatrix() << std::endl << std::endl;
-      
-    }
-    catch(...)
-    {
-      std::cout << "error caught" << std::endl;
-      break;
+
+      vpDisplay::flush(I) ;
     }
-    vpDisplay::flush(I) ;
-  }
-  reader.close();
+    reader.close();
 
 #if defined (VISP_HAVE_XML2)
-  // Cleanup memory allocated by xml library used to parse the xml config file in vpMbEdgeKltTracker::loadConfigFile()
-  vpXmlParser::cleanup();
+    // Cleanup memory allocated by xml library used to parse the xml config file in vpMbEdgeKltTracker::loadConfigFile()
+    vpXmlParser::cleanup();
 #endif
 
 #ifdef VISP_HAVE_COIN
-  // Cleanup memory allocated by Coin library used to load a vrml model in vpMbEdgeKltTracker::loadModel()
-  SoDB::finish();
+    // Cleanup memory allocated by Coin library used to load a vrml model in vpMbEdgeKltTracker::loadModel()
+    SoDB::finish();
 #endif
 
-  return 0;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 #else
diff --git a/example/tracking/mbtEdgeTracking.cpp b/example/tracking/mbtEdgeTracking.cpp
index 9edb4b4b..37c9fbe0 100644
--- a/example/tracking/mbtEdgeTracking.cpp
+++ b/example/tracking/mbtEdgeTracking.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: mbtEdgeTracking.cpp 4330 2013-07-20 11:04:19Z ayol $
+ * $Id: mbtEdgeTracking.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -66,6 +66,10 @@
 
 #define GETOPTARGS  "x:m:i:n:dchtfCo"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &configFile, std::string &modelFile,
+                std::string &initFile, bool &displayMovingEdge, bool &click_allowed, bool &display,
+                bool& cao3DModel, bool& trackCylinder, bool &useOgre);
 
 void usage(const char *name, const char *badparam)
 {
@@ -135,17 +139,19 @@ OPTIONS:                                               \n\
 }
 
 
-bool getOptions(int argc, const char **argv, std::string &ipath, std::string &configFile, std::string &modelFile, std::string &initFile, bool &displayMovingEdge, bool &click_allowed, bool &display, bool& cao3DModel, bool& trackCylinder, bool &useOgre)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &configFile, std::string &modelFile,
+                std::string &initFile, bool &displayMovingEdge, bool &click_allowed, bool &display,
+                bool& cao3DModel, bool& trackCylinder, bool &useOgre)
 {
-  const char *optarg;
+  const char *optarg_;
   int   c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'i': ipath = optarg; break;
-    case 'x': configFile = optarg; break;
-    case 'm': modelFile = optarg; break;
-    case 'n': initFile = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'x': configFile = optarg_; break;
+    case 'm': modelFile = optarg_; break;
+    case 'n': initFile = optarg_; break;
     case 't': displayMovingEdge = false; break;
     case 'f': cao3DModel = true; break;
     case 'c': click_allowed = false; break;
@@ -155,7 +161,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &co
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -164,7 +170,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &co
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -174,241 +180,239 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &co
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string opt_configFile;
-  std::string configFile;
-  std::string opt_modelFile;
-  std::string modelFile;
-  std::string opt_initFile;
-  std::string initFile;
-  bool displayMovingEdge = true;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-  bool cao3DModel = false;
-  bool trackCylinder = true;
-  bool useOgre = false;
-  
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (!getOptions(argc, argv, opt_ipath, opt_configFile, opt_modelFile, opt_initFile, displayMovingEdge, opt_click_allowed, opt_display, cao3DModel, trackCylinder, useOgre)) {
-    return (-1);
-  }
-
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty() ){
-    usage(argv[0], NULL);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl
-              << std::endl;
-
-    return (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string opt_configFile;
+    std::string configFile;
+    std::string opt_modelFile;
+    std::string modelFile;
+    std::string opt_initFile;
+    std::string initFile;
+    bool displayMovingEdge = true;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+    bool cao3DModel = false;
+    bool trackCylinder = true;
+    bool useOgre = false;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (!getOptions(argc, argv, opt_ipath, opt_configFile, opt_modelFile, opt_initFile, displayMovingEdge, opt_click_allowed, opt_display, cao3DModel, trackCylinder, useOgre)) {
+      return (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube/image%04d.pgm");
-  else
-    ipath = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube/image%04d.pgm");
-  
-  if (!opt_configFile.empty())
-    configFile = opt_configFile;
-  else if (!opt_ipath.empty())
-    configFile = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube.xml");
-  else
-    configFile = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube.xml");
-  
-  if (!opt_modelFile.empty()){
-    modelFile = opt_modelFile;
-  }else{
-    std::string modelFileCao;
-    std::string modelFileWrl;
-    if(trackCylinder){
-      modelFileCao = "/ViSP-images/mbt/cube_and_cylinder.cao";
-      modelFileWrl = "/ViSP-images/mbt/cube_and_cylinder.wrl";
-    }else{
-      modelFileCao = "/ViSP-images/mbt/cube.cao";
-      modelFileWrl = "/ViSP-images/mbt/cube.wrl";
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty() ){
+      usage(argv[0], NULL);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl
+                << std::endl;
+
+      return (-1);
     }
 
-    if(!opt_ipath.empty()){
-      if(cao3DModel){
-        modelFile = opt_ipath + vpIoTools::path(modelFileCao);
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube/image%04d.pgm");
+    else
+      ipath = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube/image%04d.pgm");
+
+    if (!opt_configFile.empty())
+      configFile = opt_configFile;
+    else if (!opt_ipath.empty())
+      configFile = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube.xml");
+    else
+      configFile = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube.xml");
+
+    if (!opt_modelFile.empty()){
+      modelFile = opt_modelFile;
+    }else{
+      std::string modelFileCao;
+      std::string modelFileWrl;
+      if(trackCylinder){
+        modelFileCao = "/ViSP-images/mbt/cube_and_cylinder.cao";
+        modelFileWrl = "/ViSP-images/mbt/cube_and_cylinder.wrl";
+      }else{
+        modelFileCao = "/ViSP-images/mbt/cube.cao";
+        modelFileWrl = "/ViSP-images/mbt/cube.wrl";
       }
-      else{
+
+      if(!opt_ipath.empty()){
+        if(cao3DModel){
+          std::cout << "use cao" << std::endl;
+          modelFile = opt_ipath + vpIoTools::path(modelFileCao);
+        }
+        else{
 #ifdef VISP_HAVE_COIN
-        modelFile = opt_ipath + vpIoTools::path(modelFileWrl);
+          std::cout << "use wrl" << std::endl;
+          modelFile = opt_ipath + vpIoTools::path(modelFileWrl);
 #else
-        std::cerr << "Coin is not detected in ViSP. Use the .cao model instead." << std::endl;
-        modelFile = opt_ipath + vpIoTools::path(modelFileCao);
+          std::cerr << "Coin is not detected in ViSP. Use the .cao model instead." << std::endl;
+          modelFile = opt_ipath + vpIoTools::path(modelFileCao);
 #endif
-      }
-    }
-    else{
-      if(cao3DModel){
-        modelFile = env_ipath + vpIoTools::path(modelFileCao);
+        }
       }
       else{
+        if(cao3DModel){
+          std::cout << "use cao" << std::endl;
+          modelFile = env_ipath + vpIoTools::path(modelFileCao);
+        }
+        else{
 #ifdef VISP_HAVE_COIN
-        modelFile = env_ipath + vpIoTools::path(modelFileWrl);
+          std::cout << "use wrl" << std::endl;
+          modelFile = env_ipath + vpIoTools::path(modelFileWrl);
 #else
-        std::cerr << "Coin is not detected in ViSP. Use the .cao model instead." << std::endl;
-        modelFile = env_ipath + vpIoTools::path(modelFileCao);
+          std::cerr << "Coin is not detected in ViSP. Use the .cao model instead." << std::endl;
+          modelFile = env_ipath + vpIoTools::path(modelFileCao);
 #endif
+        }
       }
     }
-  }
-  
-  if (!opt_initFile.empty())
-    initFile = opt_initFile;
-  else if (!opt_ipath.empty())
-    initFile = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube");
-  else
-    initFile = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube");
-
-  vpImage<unsigned char> I;
-  vpVideoReader reader;
-
-  reader.setFileName(ipath.c_str());
-  try{
-    reader.open(I);
-  }catch(...){
-    std::cout << "Cannot open sequence: " << ipath << std::endl;
-    return -1;
-  }
-  
-  reader.acquire(I);
 
-  // initialise a  display
+    if (!opt_initFile.empty())
+      initFile = opt_initFile;
+    else if (!opt_ipath.empty())
+      initFile = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube");
+    else
+      initFile = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube");
+
+    vpImage<unsigned char> I;
+    vpVideoReader reader;
+
+    reader.setFileName(ipath.c_str());
+    try{
+      reader.open(I);
+    }catch(...){
+      std::cout << "Cannot open sequence: " << ipath << std::endl;
+      return -1;
+    }
+
+    reader.acquire(I);
+
+    // initialise a  display
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV display;
+    vpDisplayOpenCV display;
 #elif defined VISP_HAVE_D3D9
-  vpDisplayD3D display;
+    vpDisplayD3D display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #else
-  opt_display = false;
+    opt_display = false;
 #endif
-  if (opt_display)
-  {
+    if (opt_display)
+    {
 #if (defined VISP_HAVE_DISPLAY)
-    display.init(I, 100, 100, "Test tracking") ;
+      display.init(I, 100, 100, "Test tracking") ;
 #endif
-    vpDisplay::display(I) ;
-    vpDisplay::flush(I);
-  }
+      vpDisplay::display(I) ;
+      vpDisplay::flush(I);
+    }
 
-  vpMbEdgeTracker tracker;
-  vpHomogeneousMatrix cMo;
+    vpMbEdgeTracker tracker;
+    vpHomogeneousMatrix cMo;
     
-  // Initialise the tracker: camera parameters, moving edge and KLT settings
-  vpCameraParameters cam;
+    // Initialise the tracker: camera parameters, moving edge and KLT settings
+    vpCameraParameters cam;
 #if defined (VISP_HAVE_XML2)
-  // From the xml file
-  tracker.loadConfigFile(configFile.c_str());
+    // From the xml file
+    tracker.loadConfigFile(configFile.c_str());
 #else
-  // By setting the parameters:
-  cam.initPersProjWithoutDistortion(547, 542, 338, 234);
-
-  vpMe me;
-  me.setMaskSize(5);
-  me.setMaskNumber(180);
-  me.setRange(7);
-  me.setThreshold(5000);
-  me.setMu1(0.5);
-  me.setMu2(0.5);
-  me.setMinSampleStep(4);
-  me.setNbTotalSample(250);
-
-  tracker.setCameraParameters(cam);
-  tracker.setMovingEdge(me);
-  
-  // Specify the clipping to use
-  tracker.setNearClippingDistance(0.01);
-  tracker.setFarClippingDistance(0.90);
-  tracker.setClipping(tracker.getClipping() | vpMbtPolygon::FOV_CLIPPING);
-//   tracker.setClipping(tracker.getClipping() | vpMbtPolygon::LEFT_CLIPPING | vpMbtPolygon::RIGHT_CLIPPING | vpMbtPolygon::UP_CLIPPING | vpMbtPolygon::DOWN_CLIPPING); // Equivalent to FOV_CLIPPING
+    // By setting the parameters:
+    cam.initPersProjWithoutDistortion(547, 542, 338, 234);
+
+    vpMe me;
+    me.setMaskSize(5);
+    me.setMaskNumber(180);
+    me.setRange(7);
+    me.setThreshold(5000);
+    me.setMu1(0.5);
+    me.setMu2(0.5);
+    me.setMinSampleStep(4);
+    me.setNbTotalSample(250);
+
+    tracker.setCameraParameters(cam);
+    tracker.setMovingEdge(me);
+
+    // Specify the clipping to use
+    tracker.setNearClippingDistance(0.01);
+    tracker.setFarClippingDistance(0.90);
+    tracker.setClipping(tracker.getClipping() | vpMbtPolygon::FOV_CLIPPING);
+    //   tracker.setClipping(tracker.getClipping() | vpMbtPolygon::LEFT_CLIPPING | vpMbtPolygon::RIGHT_CLIPPING | vpMbtPolygon::UP_CLIPPING | vpMbtPolygon::DOWN_CLIPPING); // Equivalent to FOV_CLIPPING
 #endif
 
-  // Display the moving edges, see documentation for the significations of the colour
-  tracker.setDisplayMovingEdges(displayMovingEdge);
-  
-  // Tells if the tracker has to use Ogre3D for visibility tests
-  tracker.setOgreVisibilityTest(useOgre);
-
-  // Retrieve the camera parameters from the tracker
-  tracker.getCameraParameters(cam);
-
-  // Loop to position the cube
-  if (opt_display && opt_click_allowed)
-  {
-    while(!vpDisplay::getClick(I,false)){
-      vpDisplay::display(I);
-      vpDisplay::displayCharString(I, 15, 10,
-                                   "click after positioning the object",
-                                   vpColor::red);
-      vpDisplay::flush(I) ;
+    // Display the moving edges, see documentation for the significations of the colour
+    tracker.setDisplayMovingEdges(displayMovingEdge);
+
+    // Tells if the tracker has to use Ogre3D for visibility tests
+    tracker.setOgreVisibilityTest(useOgre);
+
+    // Retrieve the camera parameters from the tracker
+    tracker.getCameraParameters(cam);
+
+    // Loop to position the cube
+    if (opt_display && opt_click_allowed)
+    {
+      while(!vpDisplay::getClick(I,false)){
+        vpDisplay::display(I);
+        vpDisplay::displayCharString(I, 15, 10,
+                                     "click after positioning the object",
+                                     vpColor::red);
+        vpDisplay::flush(I) ;
+      }
     }
-  }
 
-  // Load the 3D model (either a vrml file or a .cao file)
-  try{
+    // Load the 3D model (either a vrml file or a .cao file)
     tracker.loadModel(modelFile.c_str());
-  }
-  catch(...)
-  {
-    return 0;
-  }
-  // Initialise the tracker by clicking on the image
-  // This function looks for 
-  //   - a ./cube/cube.init file that defines the 3d coordinates (in meter, in the object basis) of the points used for the initialisation
-  //   - a ./cube/cube.ppm file to display where the user have to click (optionnal, set by the third parameter)
-  if (opt_display && opt_click_allowed)
-  {
-    tracker.initClick(I, initFile.c_str(), true);
+
+    // Initialise the tracker by clicking on the image
+    // This function looks for
+    //   - a ./cube/cube.init file that defines the 3d coordinates (in meter, in the object basis) of the points used for the initialisation
+    //   - a ./cube/cube.ppm file to display where the user have to click (optionnal, set by the third parameter)
+    if (opt_display && opt_click_allowed)
+    {
+      tracker.initClick(I, initFile.c_str(), true);
+      tracker.getPose(cMo);
+      // display the 3D model at the given pose
+      tracker.display(I,cMo, cam, vpColor::red);
+    }
+    else
+    {
+      vpHomogeneousMatrix cMoi(0.02044769891, 0.1101505452, 0.5078963719, 2.063603907, 1.110231561, -0.4392789872);
+      tracker.initFromPose(I, cMoi);
+    }
+
+    //track the model
+    tracker.track(I);
     tracker.getPose(cMo);
-    // display the 3D model at the given pose
-    tracker.display(I,cMo, cam, vpColor::red);
-  }
-  else
-  {
-    vpHomogeneousMatrix cMoi(0.02044769891, 0.1101505452, 0.5078963719, 2.063603907, 1.110231561, -0.4392789872);
-    tracker.initFromPose(I, cMoi);
-  }
 
-  //track the model
-  tracker.track(I);
-  tracker.getPose(cMo);
-  
-  if (opt_display)
-    vpDisplay::flush(I);
+    if (opt_display)
+      vpDisplay::flush(I);
 
-  // Uncomment if you want to compute the covariance matrix.
-  // tracker.setCovarianceComputation(true); //Important if you want tracker.getCovarianceMatrix() to work.  
-  
-  while (!reader.end())
-  {
-    try
+    // Uncomment if you want to compute the covariance matrix.
+    // tracker.setCovarianceComputation(true); //Important if you want tracker.getCovarianceMatrix() to work.
+
+    while (!reader.end())
     {
-      // acquire a new image 
+      // acquire a new image
       reader.acquire(I);
       // display the image
       if (opt_display)
@@ -416,7 +420,7 @@ main(int argc, const char ** argv)
       // track the object
       tracker.track(I);
       tracker.getPose(cMo);
-      // display the 3D model  
+      // display the 3D model
       if (opt_display)
       {
         tracker.display(I, cMo, cam, vpColor::darkRed);
@@ -424,31 +428,29 @@ main(int argc, const char ** argv)
         vpDisplay::displayFrame (I, cMo, cam, 0.05, vpColor::blue);
       }
       
-      // Uncomment if you want to print the covariance matrix. 
+      // Uncomment if you want to print the covariance matrix.
       // Make sure tracker.setCovarianceComputation(true) has been called (uncomment below).
       // std::cout << tracker.getCovarianceMatrix() << std::endl << std::endl;
-      
-    }
-    catch(...)
-    {
-      std::cout << "error caught" << std::endl;
-      break;
+      vpDisplay::flush(I) ;
     }
-    vpDisplay::flush(I) ;
-  }
-  reader.close();
+    reader.close();
 
 #if defined (VISP_HAVE_XML2)
-  // Cleanup memory allocated by xml library used to parse the xml config file in vpMbEdgeTracker::loadConfigFile()
-  vpXmlParser::cleanup();
+    // Cleanup memory allocated by xml library used to parse the xml config file in vpMbEdgeTracker::loadConfigFile()
+    vpXmlParser::cleanup();
 #endif
 
 #ifdef VISP_HAVE_COIN
-  // Cleanup memory allocated by Coin library used to load a vrml model in vpMbEdgeTracker::loadModel()
-  SoDB::finish();
+    // Cleanup memory allocated by Coin library used to load a vrml model in vpMbEdgeTracker::loadModel()
+    SoDB::finish();
 #endif
   
-  return 0;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 #else
diff --git a/example/tracking/mbtKltTracking.cpp b/example/tracking/mbtKltTracking.cpp
index 18a8217b..45621b7d 100644
--- a/example/tracking/mbtKltTracking.cpp
+++ b/example/tracking/mbtKltTracking.cpp
@@ -3,7 +3,7 @@
  * $Id: mbtTracking.cpp 3957 2012-11-07 15:22:30Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -65,6 +65,10 @@
 
 #define GETOPTARGS  "x:m:i:n:dchtfo"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &configFile, std::string &modelFile,
+                std::string &initFile, bool &displayKltPoints, bool &click_allowed, bool &display,
+                bool& cao3DModel, bool &useOgre);
 
 void usage(const char *name, const char *badparam)
 {
@@ -129,26 +133,28 @@ OPTIONS:                                               \n\
 }
 
 
-bool getOptions(int argc, const char **argv, std::string &ipath, std::string &configFile, std::string &modelFile, std::string &initFile, bool &displayKltPoints, bool &click_allowed, bool &display, bool& cao3DModel, bool &useOgre)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &configFile, std::string &modelFile,
+                std::string &initFile, bool &displayKltPoints, bool &click_allowed, bool &display,
+                bool& cao3DModel, bool &useOgre)
 {
-  const char *optarg;
+  const char *optarg_;
   int   c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'i': ipath = optarg; break;
-    case 'x': configFile = optarg; break;
-    case 'm': modelFile = optarg; break;
-    case 'n': initFile = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'x': configFile = optarg_; break;
+    case 'm': modelFile = optarg_; break;
+    case 'n': initFile = optarg_; break;
     case 't': displayKltPoints = false; break;
     case 'f': cao3DModel = true; break;
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'o' : useOgre = true; break;
+    case 'o': useOgre = true; break;
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -157,7 +163,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &co
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -167,233 +173,227 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &co
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string opt_configFile;
-  std::string configFile;
-  std::string opt_modelFile;
-  std::string modelFile;
-  std::string opt_initFile;
-  std::string initFile;
-  bool displayKltPoints = true;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-  bool cao3DModel = false;
-  bool useOgre = false;
-  
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (!getOptions(argc, argv, opt_ipath, opt_configFile, opt_modelFile, opt_initFile, displayKltPoints, opt_click_allowed, opt_display, cao3DModel, useOgre)) {
-    return (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string opt_configFile;
+    std::string configFile;
+    std::string opt_modelFile;
+    std::string modelFile;
+    std::string opt_initFile;
+    std::string initFile;
+    bool displayKltPoints = true;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+    bool cao3DModel = false;
+    bool useOgre = false;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (!getOptions(argc, argv, opt_ipath, opt_configFile, opt_modelFile, opt_initFile, displayKltPoints, opt_click_allowed, opt_display, cao3DModel, useOgre)) {
+      return (-1);
+    }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty() ){
-    usage(argv[0], NULL);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl
-              << std::endl;
-
-    return (-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty() ){
+      usage(argv[0], NULL);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl
+                << std::endl;
+
+      return (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube/image%04d.pgm");
-  else
-    ipath = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube/image%04d.pgm");
-  
-  if (!opt_configFile.empty())
-    configFile = opt_configFile;
-  else if (!opt_ipath.empty())
-    configFile = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube.xml");
-  else
-    configFile = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube.xml");
-  
-  if (!opt_modelFile.empty()){
-    modelFile = opt_modelFile;
-  }else{
-    std::string modelFileCao = "/ViSP-images/mbt/cube.cao";
-    std::string modelFileWrl = "/ViSP-images/mbt/cube.wrl";
-
-    if(!opt_ipath.empty()){
-      if(cao3DModel){
-        modelFile = opt_ipath + vpIoTools::path(modelFileCao);
-      }
-      else{
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube/image%04d.pgm");
+    else
+      ipath = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube/image%04d.pgm");
+
+    if (!opt_configFile.empty())
+      configFile = opt_configFile;
+    else if (!opt_ipath.empty())
+      configFile = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube.xml");
+    else
+      configFile = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube.xml");
+
+    if (!opt_modelFile.empty()){
+      modelFile = opt_modelFile;
+    }else{
+      std::string modelFileCao = "/ViSP-images/mbt/cube.cao";
+      std::string modelFileWrl = "/ViSP-images/mbt/cube.wrl";
+
+      if(!opt_ipath.empty()){
+        if(cao3DModel){
+          modelFile = opt_ipath + vpIoTools::path(modelFileCao);
+        }
+        else{
 #ifdef VISP_HAVE_COIN
-        modelFile = opt_ipath + vpIoTools::path(modelFileWrl);
+          modelFile = opt_ipath + vpIoTools::path(modelFileWrl);
 #else
-        std::cerr << "Coin is not detected in ViSP. Use the .cao model instead." << std::endl;
-        modelFile = opt_ipath + vpIoTools::path(modelFileCao);
+          std::cerr << "Coin is not detected in ViSP. Use the .cao model instead." << std::endl;
+          modelFile = opt_ipath + vpIoTools::path(modelFileCao);
 #endif
-      }
-    }
-    else{
-      if(cao3DModel){
-        modelFile = env_ipath + vpIoTools::path(modelFileCao);
+        }
       }
       else{
+        if(cao3DModel){
+          modelFile = env_ipath + vpIoTools::path(modelFileCao);
+        }
+        else{
 #ifdef VISP_HAVE_COIN
-        modelFile = env_ipath + vpIoTools::path(modelFileWrl);
+          modelFile = env_ipath + vpIoTools::path(modelFileWrl);
 #else
-        std::cerr << "Coin is not detected in ViSP. Use the .cao model instead." << std::endl;
-        modelFile = env_ipath + vpIoTools::path(modelFileCao);
+          std::cerr << "Coin is not detected in ViSP. Use the .cao model instead." << std::endl;
+          modelFile = env_ipath + vpIoTools::path(modelFileCao);
 #endif
+        }
       }
     }
-  }
-  
-  if (!opt_initFile.empty())
-    initFile = opt_initFile;
-  else if (!opt_ipath.empty())
-    initFile = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube");
-  else
-    initFile = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube");
-
-  vpImage<unsigned char> I;
-  vpVideoReader reader;
-
-  reader.setFileName(ipath.c_str());
-  try{
-    reader.open(I);
-  }catch(...){
-    std::cout << "Cannot open sequence: " << ipath << std::endl;
-    return -1;
-  }
-  
-  reader.acquire(I);
 
-  // initialise a  display
+    if (!opt_initFile.empty())
+      initFile = opt_initFile;
+    else if (!opt_ipath.empty())
+      initFile = opt_ipath + vpIoTools::path("/ViSP-images/mbt/cube");
+    else
+      initFile = env_ipath + vpIoTools::path("/ViSP-images/mbt/cube");
+
+    vpImage<unsigned char> I;
+    vpVideoReader reader;
+
+    reader.setFileName(ipath.c_str());
+    try{
+      reader.open(I);
+    }catch(...){
+      std::cout << "Cannot open sequence: " << ipath << std::endl;
+      return -1;
+    }
+
+    reader.acquire(I);
+
+    // initialise a  display
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV display;
+    vpDisplayOpenCV display;
 #elif defined VISP_HAVE_D3D9
-  vpDisplayD3D display;
+    vpDisplayD3D display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #else
-  opt_display = false;
+    opt_display = false;
 #endif
-  if (opt_display)
-  {
+    if (opt_display)
+    {
 #if (defined VISP_HAVE_DISPLAY)
-    display.init(I, 100, 100, "Test tracking") ;
+      display.init(I, 100, 100, "Test tracking") ;
 #endif
-    vpDisplay::display(I) ;
-    vpDisplay::flush(I);
-  }
+      vpDisplay::display(I) ;
+      vpDisplay::flush(I);
+    }
 
-  vpMbKltTracker tracker;
-  vpHomogeneousMatrix cMo;
-  
-  // Load tracker config file (camera parameters and moving edge settings)
-  vpCameraParameters cam;
+    vpMbKltTracker tracker;
+    vpHomogeneousMatrix cMo;
+
+    // Load tracker config file (camera parameters and moving edge settings)
+    vpCameraParameters cam;
 #if defined (VISP_HAVE_XML2)
-  // From the xml file
-  tracker.loadConfigFile(configFile.c_str());
+    // From the xml file
+    tracker.loadConfigFile(configFile.c_str());
 #else
-  // By setting the parameters:
-  cam.initPersProjWithoutDistortion(547, 542, 338, 234);
-
-  vpKltOpencv klt;
-  klt.setMaxFeatures(10000);
-  klt.setWindowSize(5);
-  klt.setQuality(0.01);
-  klt.setMinDistance(5);
-  klt.setHarrisFreeParameter(0.01);
-  klt.setBlockSize(3);
-  klt.setPyramidLevels(3);
-
-  tracker.setCameraParameters(cam);
-  tracker.setKltOpencv(klt);
-  tracker.setAngleAppear( vpMath::rad(65) );
-  tracker.setAngleDisappear( vpMath::rad(75) );
-  tracker.setMaskBorder(5);
-  
-  // Specify the clipping to use
-  tracker.setNearClippingDistance(0.01);
-  tracker.setFarClippingDistance(0.90);
-  tracker.setClipping(tracker.getClipping() | vpMbtPolygon::FOV_CLIPPING);
-//   tracker.setClipping(tracker.getClipping() | vpMbtPolygon::LEFT_CLIPPING | vpMbtPolygon::RIGHT_CLIPPING | vpMbtPolygon::UP_CLIPPING | vpMbtPolygon::DOWN_CLIPPING); // Equivalent to FOV_CLIPPING
+    // By setting the parameters:
+    cam.initPersProjWithoutDistortion(547, 542, 338, 234);
+
+    vpKltOpencv klt;
+    klt.setMaxFeatures(10000);
+    klt.setWindowSize(5);
+    klt.setQuality(0.01);
+    klt.setMinDistance(5);
+    klt.setHarrisFreeParameter(0.01);
+    klt.setBlockSize(3);
+    klt.setPyramidLevels(3);
+
+    tracker.setCameraParameters(cam);
+    tracker.setKltOpencv(klt);
+    tracker.setAngleAppear( vpMath::rad(65) );
+    tracker.setAngleDisappear( vpMath::rad(75) );
+    tracker.setMaskBorder(5);
+
+    // Specify the clipping to use
+    tracker.setNearClippingDistance(0.01);
+    tracker.setFarClippingDistance(0.90);
+    tracker.setClipping(tracker.getClipping() | vpMbtPolygon::FOV_CLIPPING);
+    //   tracker.setClipping(tracker.getClipping() | vpMbtPolygon::LEFT_CLIPPING | vpMbtPolygon::RIGHT_CLIPPING | vpMbtPolygon::UP_CLIPPING | vpMbtPolygon::DOWN_CLIPPING); // Equivalent to FOV_CLIPPING
 #endif
-  
-  // Display the klt points
-  tracker.setDisplayFeatures(displayKltPoints);
-  
-  // Tells if the tracker has to use Ogre3D for visibility tests
-  tracker.setOgreVisibilityTest(useOgre);
 
-  // Retrieve the camera parameters from the tracker
-  tracker.getCameraParameters(cam);
-  
-  // Loop to position the cube
-  if (opt_display && opt_click_allowed)
-  {
-    while(!vpDisplay::getClick(I,false)){
-      vpDisplay::display(I);
-      vpDisplay::displayCharString(I, 15, 10,
-                                   "click after positioning the object",
-                                   vpColor::red);
-      vpDisplay::flush(I) ;
+    // Display the klt points
+    tracker.setDisplayFeatures(displayKltPoints);
+
+    // Tells if the tracker has to use Ogre3D for visibility tests
+    tracker.setOgreVisibilityTest(useOgre);
+
+    // Retrieve the camera parameters from the tracker
+    tracker.getCameraParameters(cam);
+
+    // Loop to position the cube
+    if (opt_display && opt_click_allowed)
+    {
+      while(!vpDisplay::getClick(I,false)){
+        vpDisplay::display(I);
+        vpDisplay::displayCharString(I, 15, 10,
+                                     "click after positioning the object",
+                                     vpColor::red);
+        vpDisplay::flush(I) ;
+      }
     }
-  }
 
-  // Load the 3D model (either a vrml file or a .cao file)
-  try{
+    // Load the 3D model (either a vrml file or a .cao file)
     tracker.loadModel(modelFile.c_str());
-  }
-  catch(...)
-  {
-    return 0;
-  }
-  // Initialise the tracker by clicking on the image
-  // This function looks for 
-  //   - a ./cube/cube.init file that defines the 3d coordinates (in meter, in the object basis) of the points used for the initialisation
-  //   - a ./cube/cube.ppm file to display where the user have to click (optionnal, set by the third parameter)
-  if (opt_display && opt_click_allowed)
-  {
-    tracker.initClick(I, initFile.c_str(), true);
+
+    // Initialise the tracker by clicking on the image
+    // This function looks for
+    //   - a ./cube/cube.init file that defines the 3d coordinates (in meter, in the object basis) of the points used for the initialisation
+    //   - a ./cube/cube.ppm file to display where the user have to click (optionnal, set by the third parameter)
+    if (opt_display && opt_click_allowed)
+    {
+      tracker.initClick(I, initFile.c_str(), true);
+      tracker.getPose(cMo);
+      // display the 3D model at the given pose
+      tracker.display(I,cMo, cam, vpColor::red);
+    }
+    else
+    {
+      vpHomogeneousMatrix cMoi(0.02044769891, 0.1101505452, 0.5078963719, 2.063603907, 1.110231561, -0.4392789872);
+      tracker.initFromPose(I, cMoi);
+    }
+
+    //track the model
+    tracker.track(I);
     tracker.getPose(cMo);
-    // display the 3D model at the given pose
-    tracker.display(I,cMo, cam, vpColor::red);
-  }
-  else
-  {
-    vpHomogeneousMatrix cMoi(0.02044769891, 0.1101505452, 0.5078963719, 2.063603907, 1.110231561, -0.4392789872);
-    tracker.initFromPose(I, cMoi);
-  }
 
-  //track the model
-  tracker.track(I);
-  tracker.getPose(cMo);
-  
-  if (opt_display)
-    vpDisplay::flush(I);
+    if (opt_display)
+      vpDisplay::flush(I);
 
-  // Uncomment if you want to compute the covariance matrix.
-  // tracker.setCovarianceComputation(true); //Important if you want tracker.getCovarianceMatrix() to work.  
-  
-  while (!reader.end())
-  {
-    try
+    // Uncomment if you want to compute the covariance matrix.
+    // tracker.setCovarianceComputation(true); //Important if you want tracker.getCovarianceMatrix() to work.
+
+    while (!reader.end())
     {
       // acquire a new image 
       reader.acquire(I);
@@ -414,28 +414,27 @@ main(int argc, const char ** argv)
       // Uncomment if you want to print the covariance matrix. 
       // Make sure tracker.setCovarianceComputation(true) has been called (uncomment below).
       // std::cout << tracker.getCovarianceMatrix() << std::endl << std::endl;
-      
-    }
-    catch(...)
-    {
-      std::cout << "error caught" << std::endl;
-      break;
+
+      vpDisplay::flush(I) ;
     }
-    vpDisplay::flush(I) ;
-  }
-  reader.close();
+    reader.close();
 
 #if defined (VISP_HAVE_XML2)
-  // Cleanup memory allocated by xml library used to parse the xml config file in vpMbKltTracker::loadConfigFile()
-  vpXmlParser::cleanup();
+    // Cleanup memory allocated by xml library used to parse the xml config file in vpMbKltTracker::loadConfigFile()
+    vpXmlParser::cleanup();
 #endif
 
 #ifdef VISP_HAVE_COIN
-  // Cleanup memory allocated by Coin library used to load a vrml model in vpMbKltTracker::loadModel()
-  SoDB::finish();
+    // Cleanup memory allocated by Coin library used to load a vrml model in vpMbKltTracker::loadModel()
+    SoDB::finish();
 #endif
 
-  return 0;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 #else
diff --git a/example/tracking/templateTracker.cpp b/example/tracking/templateTracker.cpp
new file mode 100644
index 00000000..1d1c0beb
--- /dev/null
+++ b/example/tracking/templateTracker.cpp
@@ -0,0 +1,430 @@
+/****************************************************************************
+ *
+ * $Id: templateTracker.cpp 4658 2014-02-09 09:50:14Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Example of template tracking.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+
+/*!
+  \example templateTracker.cpp
+
+  \brief Example of template tracking.
+*/
+
+#include <visp/vpConfig.h>
+#include <visp/vpDebug.h>
+#include <visp/vpDisplayD3D.h>
+#include <visp/vpDisplayGTK.h>
+#include <visp/vpDisplayGDI.h>
+#include <visp/vpDisplayOpenCV.h>
+#include <visp/vpDisplayX.h>
+#include <visp/vpHomogeneousMatrix.h>
+#include <visp/vpImageIo.h>
+#include <visp/vpIoTools.h>
+#include <visp/vpMath.h>
+#include <visp/vpVideoReader.h>
+#include <visp/vpParseArgv.h>
+
+#include <visp/vpTemplateTrackerSSD.h>
+#include <visp/vpTemplateTrackerSSDForwardAdditional.h>
+#include <visp/vpTemplateTrackerSSDForwardCompositional.h>
+#include <visp/vpTemplateTrackerSSDInverseCompositional.h>
+#include <visp/vpTemplateTrackerSSDESM.h>
+#include <visp/vpTemplateTrackerZNCCForwardAdditional.h>
+#include <visp/vpTemplateTrackerZNCCInverseCompositional.h>
+
+#include <visp/vpTemplateTrackerWarpAffine.h>
+#include <visp/vpTemplateTrackerWarpHomography.h>
+#include <visp/vpTemplateTrackerWarpHomographySL3.h>
+#include <visp/vpTemplateTrackerWarpSRT.h>
+#include <visp/vpTemplateTrackerWarpTranslation.h>
+
+#if defined (VISP_HAVE_DISPLAY)
+
+
+#define GETOPTARGS  "cdhi:l:pt:w:"
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+typedef enum {
+  WARP_AFFINE,
+  WARP_HOMOGRAPHY,
+  WARP_HOMOGRAPHY_SL3,
+  WARP_SRT,
+  WARP_TRANSLATION
+} WarpType;
+
+typedef enum {
+  TRACKER_SSD_ESM,
+  TRACKER_SSD_FORWARD_ADDITIONAL,
+  TRACKER_SSD_FORWARD_COMPOSITIONAL,
+  TRACKER_SSD_INVERSE_COMPOSITIONAL, // The most efficient
+  TRACKER_ZNCC_FORWARD_ADDITIONEL,
+  TRACKER_ZNCC_INVERSE_COMPOSITIONAL
+} TrackerType;
+
+#endif
+
+void usage(const char *name, const char *badparam, const WarpType &warp_type,
+           TrackerType &tracker_type, const long &last_frame);
+bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_allowed, bool &display,
+                bool &pyramidal, WarpType &warp_type, TrackerType &tracker_type, long &last_frame);
+
+void usage(const char *name, const char *badparam, const WarpType &warp_type,
+           TrackerType &tracker_type, const long &last_frame)
+{
+  fprintf(stdout, "\n\
+Example of template tracking.\n\
+\n\
+SYNOPSIS\n\
+  %s [-i <test image path>] [-c] [-d] [-p] \n\
+     [-w <warp type>] [-t <tracker type>] \n\
+     [-l <last frame number>] [-h]\n", name );
+
+  fprintf(stdout, "\n\
+OPTIONS:                                                            Default\n\
+  -i <input image path>                                \n\
+     Set image input path.\n\
+     From this path read images \n\
+     \"ViSP-images/cube/image%%04d.pgm\". These \n\
+     images come from ViSP-images-x.y.z.tar.gz available \n\
+     on the ViSP website.\n\
+     Setting the VISP_INPUT_IMAGE_PATH environment\n\
+     variable produces the same behaviour than using\n\
+     this option.\n\
+          \n\
+  -l <last frame number>                                              %ld\n\
+     Last frame number to consider.\n\
+          \n\
+  -d \n\
+     Turn off the display.\n\
+          \n\
+  -c\n\
+     Disable the mouse click. Useful to automaze the \n\
+     execution of this program without humain intervention.\n\
+          \n\
+  -w <warp type=[0,1,2,3,4]>                                          %d\n\
+     Set the model used to warp the template. \n\
+     Authorized values are:\n\
+     %d : Affine\n\
+     %d : Homography\n\
+     %d : Homography in SL3\n\
+     %d : SRT (scale, rotation, translation)\n\
+     %d : Translation\n\
+                  \n\
+  -t <tracker type=[0,1,2,3,4,5]>                                     %d\n\
+     Set the tracker used to track the template. \n\
+     Authorized values are:\n\
+     %d : SSD ESM\n\
+     %d : SSD forward additional\n\
+     %d : SSD forward compositional\n\
+     %d : SSD inverse compositional\n\
+     %d : ZNCC forward additional\n\
+     %d : ZNCC inverse compositional\n\
+                  \n\
+  -p\n\
+     Enable pyramidal tracking.\n\
+                  \n\
+  -h \n\
+     Print the help.\n\n",
+          last_frame, (int)warp_type,
+          (int)WARP_AFFINE, (int)WARP_HOMOGRAPHY, (int)WARP_HOMOGRAPHY_SL3, (int)WARP_SRT, (int)WARP_TRANSLATION,
+          (int)tracker_type,
+          (int)TRACKER_SSD_ESM, (int)TRACKER_SSD_FORWARD_ADDITIONAL, (int)TRACKER_SSD_FORWARD_COMPOSITIONAL,
+          (int)TRACKER_SSD_INVERSE_COMPOSITIONAL, (int)TRACKER_ZNCC_FORWARD_ADDITIONEL,
+          (int)TRACKER_ZNCC_INVERSE_COMPOSITIONAL);
+  if (badparam)
+    fprintf(stdout, "\nERROR: Bad parameter [%s]\n", badparam);
+}
+
+
+bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_allowed, bool &display,
+                bool &pyramidal, WarpType &warp_type, TrackerType &tracker_type, long &last_frame)
+{
+  const char *optarg_;
+  int   c;
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
+
+    switch (c) {
+    case 'c': click_allowed = false; break;
+    case 'd': display = false; break;
+    case 'h': usage(argv[0], NULL, warp_type, tracker_type, last_frame); return false; break;
+    case 'i': ipath = optarg_; break;
+    case 'l': last_frame = (long)atoi(optarg_); break;
+    case 'p': pyramidal = true; break;
+    case 't': tracker_type = (TrackerType)atoi(optarg_); break;
+    case 'w': warp_type = (WarpType)atoi(optarg_); break;
+
+    default:
+      usage(argv[0], optarg_, warp_type, tracker_type, last_frame);
+      return false; break;
+    }
+  }
+
+  if (warp_type > WARP_TRANSLATION) {
+    usage(argv[0], NULL, warp_type, tracker_type, last_frame);
+    std::cerr << "ERROR: " << std::endl;
+    std::cerr << "  Bad argument -w <warp type> with \"warp type\"=" << (int)warp_type << std::endl << std::endl;
+    return false;
+  }
+  if (tracker_type > TRACKER_ZNCC_INVERSE_COMPOSITIONAL) {
+    usage(argv[0], NULL, warp_type, tracker_type, last_frame);
+    std::cerr << "ERROR: " << std::endl;
+    std::cerr << "  Bad argument -t <tracker type> with \"tracker type\"=" << (int)tracker_type << std::endl << std::endl;
+    return false;
+  }
+  if ((c == 1) || (c == -1)) {
+    // standalone param or error
+    usage(argv[0], NULL, warp_type, tracker_type, last_frame);
+    std::cerr << "ERROR: " << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
+    return false;
+  }
+
+  return true;
+}
+
+int
+main(int argc, const char ** argv)
+{
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+    bool opt_pyramidal = false;
+    TrackerType opt_tracker_type = TRACKER_SSD_INVERSE_COMPOSITIONAL;
+    WarpType opt_warp_type = WARP_AFFINE;
+    long opt_last_frame = 30;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Read the command line options
+    if (!getOptions(argc, argv, opt_ipath, opt_click_allowed, opt_display, opt_pyramidal,
+                    opt_warp_type, opt_tracker_type, opt_last_frame)) {
+      return (-1);
+    }
+
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty() ){
+      usage(argv[0], NULL, opt_warp_type, opt_tracker_type, opt_last_frame);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl
+                << std::endl;
+
+      return (-1);
+    }
+
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath + vpIoTools::path("/ViSP-images/mire-2/image.%04d.pgm");
+    else
+      ipath = env_ipath + vpIoTools::path("/ViSP-images/mire-2/image.%04d.pgm");
+
+    vpImage<unsigned char> I;
+    vpVideoReader reader;
+
+    reader.setFileName(ipath.c_str());
+    reader.setFirstFrameIndex(1);
+    reader.setLastFrameIndex(opt_last_frame);
+    try{
+      reader.open(I);
+    }catch(...){
+      std::cout << "Cannot open sequence: " << ipath << std::endl;
+      return -1;
+    }
+    reader.acquire(I);
+
+    vpDisplay *display = NULL;
+    if (opt_display)
+    {
+      // initialise a  display
+#if defined VISP_HAVE_X11
+      display = new vpDisplayX;
+#elif defined VISP_HAVE_GDI
+      display = new vpDisplayGDI;
+#elif defined VISP_HAVE_OPENCV
+      display = new vpDisplayOpenCV;
+#elif defined VISP_HAVE_D3D9
+      display = new vpDisplayD3D;
+#elif defined VISP_HAVE_GTK
+      display = new vpDisplayGTK;
+#else
+      opt_display = false;
+#endif
+#if (defined VISP_HAVE_DISPLAY)
+      display->init(I, 100, 100, "Test tracking") ;
+#endif
+      vpDisplay::display(I) ;
+      vpDisplay::flush(I);
+    }
+
+    vpTemplateTrackerWarp *warp = NULL;
+    switch(opt_warp_type) {
+    case WARP_AFFINE:         warp = new vpTemplateTrackerWarpAffine; break;
+    case WARP_HOMOGRAPHY:     warp = new vpTemplateTrackerWarpHomography; break;
+    case WARP_HOMOGRAPHY_SL3: warp = new vpTemplateTrackerWarpHomographySL3; break;
+    case WARP_SRT:            warp = new vpTemplateTrackerWarpSRT; break;
+    case WARP_TRANSLATION:    warp = new vpTemplateTrackerWarpTranslation;  break;
+    }
+
+    vpTemplateTracker *tracker = NULL;
+    switch(opt_tracker_type) {
+    case TRACKER_SSD_ESM:                    tracker = new vpTemplateTrackerSSDESM(warp); break;
+    case TRACKER_SSD_FORWARD_ADDITIONAL:     tracker = new vpTemplateTrackerSSDForwardAdditional(warp); break;
+    case TRACKER_SSD_FORWARD_COMPOSITIONAL:  tracker = new vpTemplateTrackerSSDForwardCompositional(warp); break;
+    case TRACKER_SSD_INVERSE_COMPOSITIONAL:  tracker = new vpTemplateTrackerSSDInverseCompositional(warp); break;
+    case TRACKER_ZNCC_FORWARD_ADDITIONEL:    tracker = new vpTemplateTrackerZNCCForwardAdditional(warp); break;
+    case TRACKER_ZNCC_INVERSE_COMPOSITIONAL: tracker = new vpTemplateTrackerZNCCInverseCompositional(warp); break;
+    }
+
+    tracker->setSampling(2,2);
+    tracker->setLambda(0.001);
+    tracker->setThresholdGradient(60.);
+    tracker->setIterationMax(800);
+    if (opt_pyramidal) {
+      tracker->setPyramidal(2, 1);
+    }
+    bool delaunay = false;
+    if (opt_display && opt_click_allowed)
+      tracker->initClick(I, delaunay);
+    else {
+      std::vector<vpImagePoint> v_ip;
+      vpImagePoint ip;
+      ip.set_ij(166, 54);  v_ip.push_back(ip);
+      ip.set_ij(284, 55);  v_ip.push_back(ip);
+      ip.set_ij(259, 284); v_ip.push_back(ip); // ends the first triangle
+      ip.set_ij(259, 284); v_ip.push_back(ip); // start the second triangle
+      ip.set_ij(149, 240); v_ip.push_back(ip);
+      ip.set_ij(167, 58);  v_ip.push_back(ip);
+
+      tracker->initFromPoints(I, v_ip, false);
+    }
+
+    while (! reader.end())
+    {
+      std::cout << "Process image number " << reader.getFrameIndex() << std::endl;
+      // Acquire a new image
+      reader.acquire(I);
+      // Display the image
+      vpDisplay::display(I);
+      // Track the template
+      tracker->track(I);
+
+      // Simulate a re-init
+      if (reader.getFrameIndex() == 10){
+        std::cout << "re-init simulation" << std::endl;
+        if (opt_click_allowed)
+          vpDisplay::getClick(I);
+
+        tracker->resetTracker();
+
+        if (opt_display && opt_click_allowed) {
+          vpDisplay::displayCharString(I, 10, 10, "Re-init simulation", vpColor::red);
+          vpDisplay::flush(I);
+          tracker->initClick(I, delaunay);
+        }
+        else {
+          std::vector<vpImagePoint> v_ip;
+          vpImagePoint ip;
+          ip.set_ij(146, 60);  v_ip.push_back(ip);
+          ip.set_ij(254, 74);  v_ip.push_back(ip);
+          ip.set_ij(228, 288); v_ip.push_back(ip); // ends the first triangle
+          ip.set_ij(228, 288); v_ip.push_back(ip); // start the second triangle
+          ip.set_ij(126, 242); v_ip.push_back(ip);
+          ip.set_ij(146, 60);  v_ip.push_back(ip);
+
+          tracker->initFromPoints(I, v_ip, false);
+        }
+      }
+
+      // Display the template
+#if 1
+      tracker->display(I, vpColor::red, 3);
+#else
+      vpTemplateTrackerZone zoneWarped_, zoneRef_ = tracker->getZoneRef();
+      vpTemplateTrackerWarp *warp_ = tracker->getWarp();
+      vpColVector p_= tracker->getp();
+      warp_->warpZone(zoneRef_, p_, zoneWarped_);
+      zoneWarped_.display(I, vpColor::red, 3);
+      zoneRef_.display(I, vpColor::green, 3);
+#endif
+
+      vpDisplay::flush(I) ;
+    }
+    if (opt_click_allowed) {
+      vpDisplay::displayCharString(I, 10,10, "A click to exit...", vpColor::red);
+      vpDisplay::flush(I) ;
+      vpDisplay::getClick(I) ;
+    }
+    reader.close();
+    if (display)
+      delete display;
+
+    delete warp;
+    delete tracker;
+
+    return 0;
+  }
+  catch(vpException e)
+  {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return -1;
+  }
+}
+
+#else
+
+int main()
+{
+  std::cout << "No display is available." << std::endl;
+  return 0;
+}
+
+#endif
diff --git a/example/tracking/trackDot.cpp b/example/tracking/trackDot.cpp
index 2c58fb70..82928582 100644
--- a/example/tracking/trackDot.cpp
+++ b/example/tracking/trackDot.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: trackDot.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: trackDot.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -76,6 +76,11 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdf:i:n:p:s:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string ppath,
+           unsigned first, unsigned nimages, unsigned step);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath, unsigned &first,
+                unsigned &nimages, unsigned &step, bool &click_allowed, bool &display);
+
 /*!
 
 Print the program options.
@@ -90,7 +95,7 @@ Print the program options.
 
 */
 void usage(const char *name, const char *badparam, std::string ipath, std::string ppath,
-	   unsigned first, unsigned nimages, unsigned step)
+           unsigned first, unsigned nimages, unsigned step)
 {
   fprintf(stdout, "\n\
 Test dot tracking.\n\
@@ -162,27 +167,26 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath,
-                unsigned &first, unsigned &nimages, unsigned &step,
-                bool &click_allowed, bool &display)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath, unsigned &first,
+                unsigned &nimages, unsigned &step, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
-    case 'p': ppath = optarg; break;
-    case 'f': first = (unsigned) atoi(optarg); break;
-    case 'n': nimages = (unsigned) atoi(optarg); break;
-    case 's': step = (unsigned) atoi(optarg); break;
+    case 'i': ipath = optarg_; break;
+    case 'p': ppath = optarg_; break;
+    case 'f': first = (unsigned) atoi(optarg_); break;
+    case 'n': nimages = (unsigned) atoi(optarg_); break;
+    case 's': step = (unsigned) atoi(optarg_); break;
     case 'h': usage(argv[0], NULL, ipath, ppath, first, nimages, step);
       return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, ppath, first, nimages, step);
+      usage(argv[0], optarg_, ipath, ppath, first, nimages, step);
       return false; break;
     }
   }
@@ -191,7 +195,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &pp
     // standalone param or error
     usage(argv[0], NULL, ipath, ppath, first, nimages, step);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -202,141 +206,141 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &pp
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string opt_ppath;
-  std::string dirname;
-  std::string filename;
-  unsigned opt_first = 1;
-  unsigned opt_nimages = 500;
-  unsigned opt_step = 1;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_ppath,opt_first, opt_nimages,
-                 opt_step, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string opt_ppath;
+    std::string dirname;
+    std::string filename;
+    unsigned opt_first = 1;
+    unsigned opt_nimages = 500;
+    unsigned opt_step = 1;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_ppath,opt_first, opt_nimages,
+                   opt_step, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty() ){
-    usage(argv[0], NULL, ipath, opt_ppath, opt_first, opt_nimages, opt_step);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl
-              << "  Use -p <personal image path> option if you want to "<<std::endl
-              << "  use personal images." << std::endl
-              << std::endl;
-
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty() ){
+      usage(argv[0], NULL, ipath, opt_ppath, opt_first, opt_nimages, opt_step);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl
+                << "  Use -p <personal image path> option if you want to "<<std::endl
+                << "  use personal images." << std::endl
+                << std::endl;
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  vpImage<unsigned char> I ;
+      exit(-1);
+    }
 
-  unsigned iter = opt_first;
-  std::ostringstream s;
-  char cfilename[FILENAME_MAX];
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    vpImage<unsigned char> I ;
 
-  if (opt_ppath.empty()){
+    unsigned iter = opt_first;
+    std::ostringstream s;
+    char cfilename[FILENAME_MAX];
 
+    if (opt_ppath.empty()){
 
-    // Warning :
-    // the image sequence is not provided with the ViSP package
-    // therefore the program will return you an error :
-    //  !!    vpImageIoPnm.cpp: readPGM(#210) :couldn't read file
-    //        ViSP-images/mire-2/image.0001.pgm
-    //  !!    vpDotExample.cpp: main(#95) :Error while reading the image
-    //  terminate called after throwing an instance of 'vpImageException'
-    //
-    //  The sequence is available on the visp www site
-    //  http://www.irisa.fr/lagadic/visp/visp.html
-    //  in the download section. It is named "ViSP-images.tar.gz"
 
-    // Set the path location of the image sequence
-    dirname = ipath + vpIoTools::path("/ViSP-images/mire-2/");
+      // Warning :
+      // the image sequence is not provided with the ViSP package
+      // therefore the program will return you an error :
+      //  !!    vpImageIoPnm.cpp: readPGM(#210) :couldn't read file
+      //        ViSP-images/mire-2/image.0001.pgm
+      //  !!    vpDotExample.cpp: main(#95) :Error while reading the image
+      //  terminate called after throwing an instance of 'vpImageException'
+      //
+      //  The sequence is available on the visp www site
+      //  http://www.irisa.fr/lagadic/visp/visp.html
+      //  in the download section. It is named "ViSP-images.tar.gz"
 
-    // Build the name of the image file
+      // Set the path location of the image sequence
+      dirname = ipath + vpIoTools::path("/ViSP-images/mire-2/");
 
-    s.setf(std::ios::right, std::ios::adjustfield);
-    s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-    filename = dirname + s.str();
-  }
-  else {
+      // Build the name of the image file
 
-    sprintf(cfilename,opt_ppath.c_str(), iter) ;
-    filename = cfilename;
-  }
+      s.setf(std::ios::right, std::ios::adjustfield);
+      s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+      filename = dirname + s.str();
+    }
+    else {
 
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    vpCTRACE << "Load: " << filename << std::endl;
+      sprintf(cfilename,opt_ppath.c_str(), iter) ;
+      filename = cfilename;
+    }
 
-    vpImageIo::read(I, filename) ;
-  }
-  catch(...)
-  {
-    // an exception is throwned if an exception from readPGM has been catched
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
+    try{
+      vpCTRACE << "Load: " << filename << std::endl;
 
-  // We open a window using either X11, GTK or GDI.
+      vpImageIo::read(I, filename) ;
+    }
+    catch(...)
+    {
+      // an exception is throwned if an exception from readPGM has been catched
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
+      exit(-1);
+    }
+
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
 
-  if (opt_display) {
-    try{
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display.init(I, 100, 100,"Display...") ;
       // Display the image
@@ -347,30 +351,23 @@ main(int argc, const char ** argv)
       vpDisplay::display(I) ;
       vpDisplay::flush(I) ;
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
 
-  // by using setGraphics, we request to see the all the pixel of the dot
-  vpDot d ;
-  if (opt_display) {
     // by using setGraphics, we request to see the all the pixel of the dot
-    // in green on the screen.
-    // It uses the overlay image plane.
-    // The default of this setting is that it is time consumming
-    d.setGraphics(true) ;
-  }
-  else {
-    d.setGraphics(false) ;
-  }
-  // we also request to compute the dot moment m00, m10, m01, m11, m20, m02
-  d.setComputeMoments(true);
-  d.setConnexity(vpDot::CONNEXITY_8);
+    vpDot d ;
+    if (opt_display) {
+      // by using setGraphics, we request to see the all the pixel of the dot
+      // in green on the screen.
+      // It uses the overlay image plane.
+      // The default of this setting is that it is time consumming
+      d.setGraphics(true) ;
+    }
+    else {
+      d.setGraphics(false) ;
+    }
+    // we also request to compute the dot moment m00, m10, m01, m11, m20, m02
+    d.setComputeMoments(true);
+    d.setConnexity(vpDot::CONNEXITY_8);
 
-  try {
     if (opt_display && opt_click_allowed) {
       // tracking is initalized
       // if no other parameters are given to the iniTracking(..) method
@@ -384,17 +381,12 @@ main(int argc, const char ** argv)
       // image point from which the dot is searched
       vpImagePoint ip;
       ip.set_u( 160 );
-      ip.set_v( 212 );     
+      ip.set_v( 212 );
       d.initTracking(I, ip) ;
     }
-  }
-  catch(...)
-  {
-    vpERROR_TRACE("Cannot initialise the tracking... ") ;
-    exit(-1);
-  }
 
-  try {
+
+
     vpImagePoint cog;
     while (iter < opt_first + opt_nimages*opt_step) {
       // set the new image name
@@ -458,17 +450,18 @@ main(int argc, const char ** argv)
       }
       iter ++;
     }
-  }
-  catch (...) {
-    std::cerr << "Error during the tracking..." << std::endl;
-    std::cerr << "The progam was stopped." << std::endl;
-    exit(-1);
-  }
 
-  if (opt_display && opt_click_allowed) {
-    std::cout << "\nA click to exit..." << std::endl;
-    // Wait for a blocking mouse click
-    vpDisplay::getClick(I) ;
+
+    if (opt_display && opt_click_allowed) {
+      std::cout << "\nA click to exit..." << std::endl;
+      // Wait for a blocking mouse click
+      vpDisplay::getClick(I) ;
+    }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
diff --git a/example/tracking/trackDot2.cpp b/example/tracking/trackDot2.cpp
index 3836da96..9c170a85 100644
--- a/example/tracking/trackDot2.cpp
+++ b/example/tracking/trackDot2.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: trackDot2.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: trackDot2.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -70,6 +70,10 @@
 
 //int gsl_warnings_off;
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string ppath,
+           unsigned first, unsigned nimages, unsigned step);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath, unsigned &first,
+                unsigned &nimages, unsigned &step, bool &click_allowed, bool &display);
 /*!
   \example trackDot2.cpp
   Example of dot tracking on an image sequence using vpDot2.
@@ -90,7 +94,7 @@ Print the program options.
 
 */
 void usage(const char *name, const char *badparam, std::string ipath, std::string ppath,
-	   unsigned first, unsigned nimages, unsigned step)
+           unsigned first, unsigned nimages, unsigned step)
 {
   fprintf(stdout, "\n\
 Test dot tracking using vpDot2 class.\n\
@@ -162,27 +166,26 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath,
-                unsigned &first, unsigned &nimages, unsigned &step,
-                bool &click_allowed, bool &display)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath, unsigned &first,
+                unsigned &nimages, unsigned &step, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
-    case 'p': ppath = optarg; break;
-    case 'f': first = (unsigned) atoi(optarg); break;
-    case 'n': nimages = (unsigned) atoi(optarg); break;
-    case 's': step = (unsigned) atoi(optarg); break;
+    case 'i': ipath = optarg_; break;
+    case 'p': ppath = optarg_; break;
+    case 'f': first = (unsigned) atoi(optarg_); break;
+    case 'n': nimages = (unsigned) atoi(optarg_); break;
+    case 's': step = (unsigned) atoi(optarg_); break;
     case 'h': usage(argv[0], NULL, ipath, ppath, first, nimages, step);
       return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, ppath, first, nimages, step);
+      usage(argv[0], optarg_, ipath, ppath, first, nimages, step);
       return false; break;
     }
   }
@@ -191,7 +194,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &pp
     // standalone param or error
     usage(argv[0], NULL, ipath, ppath, first, nimages, step);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -201,142 +204,142 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &pp
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string opt_ppath;
-  std::string dirname;
-  std::string filename;
-  unsigned opt_first = 1;
-  unsigned opt_nimages = 500;
-  unsigned opt_step = 1;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_ppath,opt_first, opt_nimages,
-                 opt_step, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string opt_ppath;
+    std::string dirname;
+    std::string filename;
+    unsigned opt_first = 1;
+    unsigned opt_nimages = 500;
+    unsigned opt_step = 1;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_ppath,opt_first, opt_nimages,
+                   opt_step, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty() ){
-    usage(argv[0], NULL, ipath, opt_ppath, opt_first, opt_nimages, opt_step);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl
-              << "  Use -p <personal image path> option if you want to "<<std::endl
-              << "  use personal images." << std::endl
-              << std::endl;
-
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty() ){
+      usage(argv[0], NULL, ipath, opt_ppath, opt_first, opt_nimages, opt_step);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl
+                << "  Use -p <personal image path> option if you want to "<<std::endl
+                << "  use personal images." << std::endl
+                << std::endl;
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  vpImage<unsigned char> I ;
+      exit(-1);
+    }
 
-  unsigned iter = opt_first;
-  std::ostringstream s;
-  char cfilename[FILENAME_MAX];
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    vpImage<unsigned char> I ;
 
-  if (opt_ppath.empty()){
+    unsigned iter = opt_first;
+    std::ostringstream s;
+    char cfilename[FILENAME_MAX];
 
+    if (opt_ppath.empty()){
 
-    // Warning :
-    // the image sequence is not provided with the ViSP package
-    // therefore the program will return you an error :
-    //  !!    vpImageIoPnm.cpp: readPGM(#210) :couldn't read file
-    //        ViSP-images/mire-2/image.0001.pgm
-    //  !!    vpDotExample.cpp: main(#95) :Error while reading the image
-    //  terminate called after throwing an instance of 'vpImageException'
-    //
-    //  The sequence is available on the visp www site
-    //  http://www.irisa.fr/lagadic/visp/visp.html
-    //  in the download section. It is named "ViSP-images.tar.gz"
 
-    // Set the path location of the image sequence
-    dirname = ipath + vpIoTools::path("/ViSP-images/mire-2/");
+      // Warning :
+      // the image sequence is not provided with the ViSP package
+      // therefore the program will return you an error :
+      //  !!    vpImageIoPnm.cpp: readPGM(#210) :couldn't read file
+      //        ViSP-images/mire-2/image.0001.pgm
+      //  !!    vpDotExample.cpp: main(#95) :Error while reading the image
+      //  terminate called after throwing an instance of 'vpImageException'
+      //
+      //  The sequence is available on the visp www site
+      //  http://www.irisa.fr/lagadic/visp/visp.html
+      //  in the download section. It is named "ViSP-images.tar.gz"
 
-    // Build the name of the image file
+      // Set the path location of the image sequence
+      dirname = ipath + vpIoTools::path("/ViSP-images/mire-2/");
 
-    s.setf(std::ios::right, std::ios::adjustfield);
-    s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-    filename = dirname + s.str();
-  }
-  else {
+      // Build the name of the image file
 
-    sprintf(cfilename,opt_ppath.c_str(), iter) ;
-    filename = cfilename;
-  }
+      s.setf(std::ios::right, std::ios::adjustfield);
+      s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+      filename = dirname + s.str();
+    }
+    else {
 
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    vpCTRACE << "Load: " << filename << std::endl;
+      sprintf(cfilename,opt_ppath.c_str(), iter) ;
+      filename = cfilename;
+    }
 
-    vpImageIo::read(I, filename) ;
-  }
-  catch(...)
-  {
-    // an exception is throwned if an exception from readPGM has been catched
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
+    try{
+      vpCTRACE << "Load: " << filename << std::endl;
+
+      vpImageIo::read(I, filename) ;
+    }
+    catch(...)
+    {
+      // an exception is throwned if an exception from readPGM has been catched
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
+      exit(-1);
+    }
 
-  // We open a window using either X11, GTK or GDI.
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
 
-  if (opt_display) {
-    try{
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display.init(I, 100, 100,"Display...") ;
       // Display the image
@@ -347,52 +350,40 @@ main(int argc, const char ** argv)
       vpDisplay::display(I) ;
       vpDisplay::flush(I) ;
     }
-    catch(...)
-    {
-      // an exception is throwned if an exception from readPGM has been catched
-      // here this will result in the end of the program
-      // Note that another error message has been printed from readPGM
-      // to give more information about the error
+    // define the vpDot structure.
 
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
-  // define the vpDot structure.
+    // vpDot and vpDot2 correspond to two different algorithms designed to track
+    // a dot. vpDot is based on recurse connex componants (all the pixels of the
+    // dot are parsed), while vpDot2 is based on freeman chain code (only the
+    // contour of the dot is parsed)
 
-  // vpDot and vpDot2 correspond to two different algorithms designed to track
-  // a dot. vpDot is based on recurse connex componants (all the pixels of the
-  // dot are parsed), while vpDot2 is based on freeman chain code (only the
-  // contour of the dot is parsed)
+    vpDot2 d ;
+    vpImagePoint cog;
 
-  vpDot2 d ;
-  vpImagePoint cog;
+    if (opt_display) {
+      // by using setGraphics, we request to see the all the pixel of the dot
+      // in green on the screen.
+      // It uses the overlay image plane.
+      // The default of this setting is that it is time consumming
 
-  if (opt_display) {
-    // by using setGraphics, we request to see the all the pixel of the dot
-    // in green on the screen.
-    // It uses the overlay image plane.
-    // The default of this setting is that it is time consumming
+      d.setGraphics(true) ;
+    }
+    else {
 
-    d.setGraphics(true) ;
-  }
-  else {
+      d.setGraphics(false) ;
+    }
+    // We want to track an ellipsoid shape. If you want to track a non ellipsoid
+    // object, use d.setEllipsoidShape(0);
+    // we also request to compute the dot moment m00, m10, m01, m11, m20, m02
+    d.setComputeMoments(true);
+    d.setGrayLevelPrecision(0.90);
+
+    // tracking is initalized if no other parameters are given to the
+    // iniTracking(..) method a right mouse click on the dot is expected
+    // dot location can also be specified explicitely in the
+    // initTracking method : d.initTracking(I,ip) where ip is the image
+    // point from which the dot is searched
 
-    d.setGraphics(false) ;
-  }
-  // We want to track an ellipsoid shape. If you want to track a non ellipsoid
-  // object, use d.setEllipsoidShape(0);
-  // we also request to compute the dot moment m00, m10, m01, m11, m20, m02
-  d.setComputeMoments(true);
-  d.setGrayLevelPrecision(0.90);
-
-  // tracking is initalized if no other parameters are given to the
-  // iniTracking(..) method a right mouse click on the dot is expected
-  // dot location can also be specified explicitely in the
-  // initTracking method : d.initTracking(I,ip) where ip is the image
-  // point from which the dot is searched
-
-  try{
     if (opt_display && opt_click_allowed) {
       std::cout << "Click on a dot to track it."<< std::endl;
       d.initTracking(I) ;
@@ -411,7 +402,7 @@ main(int argc, const char ** argv)
                 << d.m10 / d.m00 << " " << d.m01 / d.m00 << std::endl;
       std::cout << "Size:" << std::endl;
       std::cout << "  w: " << d.getWidth() << " h: " << d.getHeight() << std::endl;
-      std::cout << "Surface: " << d.getSurface() << std::endl;
+      std::cout << "Area: " << d.getArea() << std::endl;
       std::cout << "Moments:" << std::endl;
       std::cout << "  m00: " << d.m00 << std::endl;
       std::cout << "  m10: " << d.m10 << std::endl;
@@ -429,14 +420,7 @@ main(int argc, const char ** argv)
       std::cout << "  size precision: " << d.getSizePrecision() << std::endl;
       std::cout << "  gray level precision: " << d.getGrayLevelPrecision() << std::endl;
     }
-  }
-  catch(...)
-  {
-    vpERROR_TRACE("Cannot initialise the tracking... ") ;
-    exit(-1);
-  }
 
-  try {
     while (iter < opt_first + opt_nimages*opt_step) {
       // set the new image name
       if (opt_ppath.empty()){
@@ -475,7 +459,7 @@ main(int argc, const char ** argv)
                 << d.m10 / d.m00 << " " << d.m01 / d.m00 << std::endl;
       std::cout << "Size:" << std::endl;
       std::cout << "  w: " << d.getWidth() << " h: " << d.getHeight() << std::endl;
-      std::cout << "Surface: " << d.getSurface() << std::endl;
+      std::cout << "Area: " << d.getArea() << std::endl;
       std::cout << "Moments:" << std::endl;
       std::cout << "  m00: " << d.m00 << std::endl;
       std::cout << "  m10: " << d.m10 << std::endl;
@@ -513,16 +497,17 @@ main(int argc, const char ** argv)
       }
       iter ++;
     }
+
+    if (opt_display && opt_click_allowed) {
+      std::cout << "\nA click to exit..." << std::endl;
+      // Wait for a blocking mouse click
+      vpDisplay::getClick(I) ;
+    }
+    return 0;
   }
-  catch (...) {
-    std::cerr << "Error during the tracking..." << std::endl;
-    std::cerr << "The progam was stopped." << std::endl;
-    exit(-1);
-  }
-  if (opt_display && opt_click_allowed) {
-    std::cout << "\nA click to exit..." << std::endl;
-    // Wait for a blocking mouse click
-    vpDisplay::getClick(I) ;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
diff --git a/example/tracking/trackDot2WithAutoDetection.cpp b/example/tracking/trackDot2WithAutoDetection.cpp
index bd497b21..033cbbab 100644
--- a/example/tracking/trackDot2WithAutoDetection.cpp
+++ b/example/tracking/trackDot2WithAutoDetection.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: trackDot2WithAutoDetection.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: trackDot2WithAutoDetection.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -74,6 +74,14 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:p:f:n:s:S:G:E:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string ppath,
+           unsigned first, unsigned nimages, unsigned step, double sizePrecision,
+           double grayLevelPrecision, double ellipsoidShapePrecision );
+bool getOptions(int argc, const char **argv, std::string &ipath,
+                std::string &ppath,unsigned &first, unsigned &nimages,
+                unsigned &step, double &sizePrecision, double &grayLevelPrecision,
+                double &ellipsoidShapePrecision, bool &click_allowed, bool &display);
+
 /*!
 
   Print the program options.
@@ -93,7 +101,7 @@
 */
 void usage(const char *name, const char *badparam, std::string ipath, std::string ppath,
            unsigned first, unsigned nimages, unsigned step, double sizePrecision,
-           double grayLevelPrecision, double ellipsoidShapePrecision )
+           double grayLevelPrecision, double ellipsoidShapePrecision)
 {
   fprintf(stdout, "\n\
 Test auto detection of dots using vpDot2.\n\
@@ -196,27 +204,27 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
                 unsigned &step, double &sizePrecision, double &grayLevelPrecision,
                 double &ellipsoidShapePrecision, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
-    case 'p': ppath = optarg; break;
-    case 'f': first = (unsigned) atoi(optarg); break;
-    case 'n': nimages = (unsigned) atoi(optarg); break;
-    case 's': step = (unsigned) atoi(optarg); break;
-    case 'S': sizePrecision = atof(optarg);break;
-    case 'G': grayLevelPrecision = atof(optarg);break;
-    case 'E': ellipsoidShapePrecision = atof(optarg);break;
+    case 'i': ipath = optarg_; break;
+    case 'p': ppath = optarg_; break;
+    case 'f': first = (unsigned) atoi(optarg_); break;
+    case 'n': nimages = (unsigned) atoi(optarg_); break;
+    case 's': step = (unsigned) atoi(optarg_); break;
+    case 'S': sizePrecision = atof(optarg_);break;
+    case 'G': grayLevelPrecision = atof(optarg_);break;
+    case 'E': ellipsoidShapePrecision = atof(optarg_);break;
     case 'h': usage(argv[0], NULL, ipath, ppath, first, nimages, step,
                     sizePrecision,grayLevelPrecision,ellipsoidShapePrecision);
       return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, ppath, first, nimages, step,
+      usage(argv[0], optarg_, ipath, ppath, first, nimages, step,
             sizePrecision,grayLevelPrecision,ellipsoidShapePrecision);
       return false; break;
     }
@@ -227,7 +235,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
     usage(argv[0], NULL, ipath, ppath, first, nimages, step,
           sizePrecision,grayLevelPrecision,ellipsoidShapePrecision);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -238,146 +246,146 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string opt_ppath;
-  std::string dirname;
-  std::string filename;
-  unsigned opt_first = 1;
-  unsigned opt_nimages = 10;
-  unsigned opt_step = 1;
-  double opt_sizePrecision = 0.65;
-  double opt_grayLevelPrecision = 0.85;
-  double opt_ellipsoidShapePrecision = 0.8;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_ppath,opt_first, opt_nimages,
-                 opt_step,opt_sizePrecision,opt_grayLevelPrecision,
-                 opt_ellipsoidShapePrecision, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string opt_ppath;
+    std::string dirname;
+    std::string filename;
+    unsigned opt_first = 1;
+    unsigned opt_nimages = 10;
+    unsigned opt_step = 1;
+    double opt_sizePrecision = 0.65;
+    double opt_grayLevelPrecision = 0.85;
+    double opt_ellipsoidShapePrecision = 0.8;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_ppath,opt_first, opt_nimages,
+                   opt_step,opt_sizePrecision,opt_grayLevelPrecision,
+                   opt_ellipsoidShapePrecision, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opt_ppath, opt_first, opt_nimages,
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL, ipath, opt_ppath, opt_first, opt_nimages,
           opt_step,opt_sizePrecision,opt_grayLevelPrecision, opt_ellipsoidShapePrecision);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl
-              << "  Use -p <personal image path> option if you want to "<<std::endl
-              << "  use personal images." << std::endl;
-    exit(-1);
-  }
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl
+                << "  Use -p <personal image path> option if you want to "<<std::endl
+                << "  use personal images." << std::endl;
+      exit(-1);
+    }
 
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  vpImage<unsigned char> I ;
-  std::ostringstream s;
-  char cfilename[FILENAME_MAX];
-  unsigned iter = opt_first; // Image number
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    vpImage<unsigned char> I ;
+    std::ostringstream s;
+    char cfilename[FILENAME_MAX];
+    unsigned iter = opt_first; // Image number
 
-  if (opt_ppath.empty()){
+    if (opt_ppath.empty()){
 
 
-    // Warning :
-    // the image sequence is not provided with the ViSP package
-    // therefore the program will return you an error :
-    //  !!    vpImageIoPnm.cpp: readPGM(#210) :couldn't read file
-    //        ViSP-images/cube/image.0001.pgm
-    //  !!    vpDotExample.cpp: main(#95) :Error while reading the image
-    //  terminate called after throwing an instance of 'vpImageException'
-    //
-    //  The sequence is available on the visp www site
-    //  http://www.irisa.fr/lagadic/visp/visp.html
-    //  in the download section. It is named "ViSP-images.tar.gz"
+      // Warning :
+      // the image sequence is not provided with the ViSP package
+      // therefore the program will return you an error :
+      //  !!    vpImageIoPnm.cpp: readPGM(#210) :couldn't read file
+      //        ViSP-images/cube/image.0001.pgm
+      //  !!    vpDotExample.cpp: main(#95) :Error while reading the image
+      //  terminate called after throwing an instance of 'vpImageException'
+      //
+      //  The sequence is available on the visp www site
+      //  http://www.irisa.fr/lagadic/visp/visp.html
+      //  in the download section. It is named "ViSP-images.tar.gz"
 
-    // Set the path location of the image sequence
-    dirname = ipath + vpIoTools::path("/ViSP-images/mire-2/");
+      // Set the path location of the image sequence
+      dirname = ipath + vpIoTools::path("/ViSP-images/mire-2/");
 
-    // Build the name of the image file
+      // Build the name of the image file
 
-    s.setf(std::ios::right, std::ios::adjustfield);
-    s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-    filename = dirname + s.str();
-  }
-  else {
+      s.setf(std::ios::right, std::ios::adjustfield);
+      s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+      filename = dirname + s.str();
+    }
+    else {
 
-    sprintf(cfilename,opt_ppath.c_str(), iter) ;
-    filename = cfilename;
-  }
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    vpCTRACE << "Load: " << filename << std::endl;
-
-    vpImageIo::read(I, filename) ;
-  }
-  catch(...)
-  {
-    // an exception is throwned if an exception from readPGM has been catched
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or your -p " << opt_ppath << " option " <<std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
+      sprintf(cfilename,opt_ppath.c_str(), iter) ;
+      filename = cfilename;
+    }
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
+    try{
+      vpCTRACE << "Load: " << filename << std::endl;
 
+      vpImageIo::read(I, filename) ;
+    }
+    catch(...)
+    {
+      // an exception is throwned if an exception from readPGM has been catched
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or your -p " << opt_ppath << " option " <<std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
+      exit(-1);
+    }
 
-  // We open a window using either GTK, X11 or GDI.
+
+    // We open a window using either GTK, X11 or GDI.
 #if defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
 
-  if (opt_display) {
-    try{
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display.init(I, 100, 100,"Display...") ;
       // Display the image
@@ -388,19 +396,12 @@ main(int argc, const char ** argv)
       vpDisplay::display(I) ;
       vpDisplay::flush(I) ;
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
 
-  // Dot declaration
-  vpDot2 d ;
+    // Dot declaration
+    vpDot2 d ;
 
-  d.setGraphics(true);
-  if (opt_click_allowed & opt_display) {
-    try{
+    d.setGraphics(true);
+    if (opt_click_allowed & opt_display) {
       d.setGrayLevelPrecision(opt_grayLevelPrecision);
 
       std::cout << "Please click on a dot to initialize detection"
@@ -418,97 +419,97 @@ main(int argc, const char ** argv)
       printf("Dot characteristics: \n");
       printf("  width : %lf\n", d.getWidth());
       printf("  height: %lf\n", d.getHeight());
-      printf("  surface: %lf\n", d.getSurface());
+      printf("  area: %lf\n", d.getArea());
       printf("  gray level min: %d\n", d.getGrayLevelMin());
       printf("  gray level max: %d\n", d.getGrayLevelMax());
       printf("  grayLevelPrecision: %lf\n", d.getGrayLevelPrecision());
       printf("  sizePrecision: %lf\n", d.getSizePrecision());
       printf("  ellipsoidShapePrecision: %lf\n", d.getEllipsoidShapePrecision());
     }
-    catch(...)
-    {
-      std::cerr << "Cannot initialize the tracking..."<< std::endl;
-      exit(-1);
+    else{
+      //  Set dot characteristics for the auto detection
+      d.setGraphics(true);
+      d.setWidth(15.0);
+      d.setHeight(12.0);
+      d.setArea(124);
+      d.setGrayLevelMin(164);
+      d.setGrayLevelMax(255);
+      d.setGrayLevelPrecision(opt_grayLevelPrecision);
+      d.setSizePrecision(opt_sizePrecision);
+      d.setEllipsoidShapePrecision(opt_ellipsoidShapePrecision);
     }
-  }
-  else{
-    //  Set dot characteristics for the auto detection
-    d.setGraphics(true);
-    d.setWidth(15.0);
-    d.setHeight(12.0);
-    d.setSurface(124);
-    d.setGrayLevelMin(164);
-    d.setGrayLevelMax(255);
-    d.setGrayLevelPrecision(opt_grayLevelPrecision);
-    d.setSizePrecision(opt_sizePrecision);
-    d.setEllipsoidShapePrecision(opt_ellipsoidShapePrecision);
-  }
-
-  while (iter < opt_first + opt_nimages*opt_step)
-  {
-
-    // set the new image name
 
-    if (opt_ppath.empty()){
-
-      s.str("");
-      s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-      filename = dirname + s.str();
-    }
-    else {
-      sprintf(cfilename, opt_ppath.c_str(), iter) ;
-      filename = cfilename;
-    }
-    // read the image
-    vpImageIo::read(I, filename);
+    while (iter < opt_first + opt_nimages*opt_step)
+    {
 
-    if (opt_display) {
-      // Display the image
-      vpDisplay::display(I) ;
-    }
+      // set the new image name
 
-    std::cout << "Search dots in image" << filename << std::endl;
-    std::list<vpDot2> list_d;
-    d.searchDotsInArea(I, 0, 0, I.getWidth(), I.getHeight(), list_d) ;
+      if (opt_ppath.empty()){
 
-    if( list_d.empty() ) {
-      std::cout << "Dot auto detection did not work." << std::endl;
-      return(-1) ;
-    }
-    else {
-      std::cout << std::endl << list_d.size() << " dots are detected" << std::endl;
+        s.str("");
+        s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+        filename = dirname + s.str();
+      }
+      else {
+        sprintf(cfilename, opt_ppath.c_str(), iter) ;
+        filename = cfilename;
+      }
+      // read the image
+      vpImageIo::read(I, filename);
 
       if (opt_display) {
-        int i=0;
-        // Parse all founded dots for display
-        for (std::list<vpDot2>::const_iterator it = list_d.begin(); it != list_d.end(); ++ it)
-        {
-          vpImagePoint cog = (*it).getCog();
+        // Display the image
+        vpDisplay::display(I) ;
+      }
 
-          std::cout << "Dot " << i++ << " : " << cog.get_u()
-                    << " " << cog.get_v() << std::endl;
+      std::cout << "Search dots in image" << filename << std::endl;
+      std::list<vpDot2> list_d;
+      d.searchDotsInArea(I, 0, 0, I.getWidth(), I.getHeight(), list_d) ;
 
-          vpDisplay::displayCross(I, cog, 16, vpColor::blue, 3) ;
+      if( list_d.empty() ) {
+        std::cout << "Dot auto detection did not work." << std::endl;
+        return(-1) ;
+      }
+      else {
+        std::cout << std::endl << list_d.size() << " dots are detected" << std::endl;
+
+        if (opt_display) {
+          int i=0;
+          // Parse all founded dots for display
+          for (std::list<vpDot2>::const_iterator it = list_d.begin(); it != list_d.end(); ++ it)
+          {
+            vpImagePoint cog = (*it).getCog();
+
+            std::cout << "Dot " << i++ << " : " << cog.get_u()
+                      << " " << cog.get_v() << std::endl;
+
+            vpDisplay::displayCross(I, cog, 16, vpColor::blue, 3) ;
+          }
+          vpDisplay::flush(I);
         }
-        vpDisplay::flush(I);
       }
-    }
 
-    // If click is allowed, wait for a mouse click to launch the next iteration
+      // If click is allowed, wait for a mouse click to launch the next iteration
+      if (opt_display && opt_click_allowed) {
+        std::cout << "\nA click to continue..." << std::endl;
+        // Wait for a blocking mouse click
+        vpDisplay::getClick(I) ;
+      }
+
+      iter += opt_step ;
+    }
     if (opt_display && opt_click_allowed) {
-      std::cout << "\nA click to continue..." << std::endl;
+      std::cout << "\nA click to exit..." << std::endl;
       // Wait for a blocking mouse click
       vpDisplay::getClick(I) ;
     }
 
-    iter += opt_step ;
+    return 0;
   }
-  if (opt_display && opt_click_allowed) {
-    std::cout << "\nA click to exit..." << std::endl;
-    // Wait for a blocking mouse click
-    vpDisplay::getClick(I) ;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  vpTRACE("End...");
 }
 #else
 int
diff --git a/example/tracking/trackKltOpencv.cpp b/example/tracking/trackKltOpencv.cpp
index 0400c597..849f30f8 100644
--- a/example/tracking/trackKltOpencv.cpp
+++ b/example/tracking/trackKltOpencv.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: trackKltOpencv.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: trackKltOpencv.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -69,6 +69,10 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdf:i:n:p:s:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string ppath,
+           unsigned first, unsigned nimages, unsigned step);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath, unsigned &first,
+                unsigned &nimages, unsigned &step, bool &click_allowed, bool &display);
 /*!
   \example trackKltOpencv.cpp
 
@@ -91,7 +95,7 @@ Print the program options.
 
 */
 void usage(const char *name, const char *badparam, std::string ipath, std::string ppath,
-	   unsigned first, unsigned nimages, unsigned step)
+           unsigned first, unsigned nimages, unsigned step)
 {
   fprintf(stdout, "\n\
 Example of KLT tracking using OpenCV library.\n\
@@ -163,27 +167,26 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath,
-                unsigned &first, unsigned &nimages, unsigned &step,
-                bool &click_allowed, bool &display)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath, unsigned &first,
+                unsigned &nimages, unsigned &step, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
-    case 'p': ppath = optarg; break;
-    case 'f': first = (unsigned) atoi(optarg); break;
-    case 'n': nimages = (unsigned) atoi(optarg); break;
-    case 's': step = (unsigned) atoi(optarg); break;
+    case 'i': ipath = optarg_; break;
+    case 'p': ppath = optarg_; break;
+    case 'f': first = (unsigned) atoi(optarg_); break;
+    case 'n': nimages = (unsigned) atoi(optarg_); break;
+    case 's': step = (unsigned) atoi(optarg_); break;
     case 'h': usage(argv[0], NULL, ipath, ppath, first, nimages, step);
       return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, ppath, first, nimages, step);
+      usage(argv[0], optarg_, ipath, ppath, first, nimages, step);
       return false; break;
     }
   }
@@ -192,7 +195,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &pp
     // standalone param or error
     usage(argv[0], NULL, ipath, ppath, first, nimages, step);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -202,149 +205,149 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &pp
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string opt_ppath;
-  std::string dirname;
-  std::string filename;
-  unsigned opt_first = 1;
-  unsigned opt_nimages = 500;
-  unsigned opt_step = 1;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_ppath,opt_first, opt_nimages,
-                 opt_step, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string opt_ppath;
+    std::string dirname;
+    std::string filename;
+    unsigned opt_first = 1;
+    unsigned opt_nimages = 500;
+    unsigned opt_step = 1;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_ppath,opt_first, opt_nimages,
+                   opt_step, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty() ){
-    usage(argv[0], NULL, ipath, opt_ppath, opt_first, opt_nimages, opt_step);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl
-              << "  Use -p <personal image path> option if you want to "<<std::endl
-              << "  use personal images." << std::endl
-              << std::endl;
-
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty() ){
+      usage(argv[0], NULL, ipath, opt_ppath, opt_first, opt_nimages, opt_step);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl
+                << "  Use -p <personal image path> option if you want to "<<std::endl
+                << "  use personal images." << std::endl
+                << std::endl;
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  vpImage<unsigned char> vpI ; // This is a ViSP image used for display only
-  IplImage * cvI; // This is an OpenCV IPL image used by the tracker
+      exit(-1);
+    }
 
-  unsigned iter = opt_first;
-  std::ostringstream s;
-  char cfilename[FILENAME_MAX];
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    vpImage<unsigned char> vpI ; // This is a ViSP image used for display only
+    IplImage * cvI; // This is an OpenCV IPL image used by the tracker
 
-  if (opt_ppath.empty()){
+    unsigned iter = opt_first;
+    std::ostringstream s;
+    char cfilename[FILENAME_MAX];
 
+    if (opt_ppath.empty()){
 
-    // Warning :
-    // the image sequence is not provided with the ViSP package
-    // therefore the program will return you an error :
-    //  !!    vpImageIoPnm.cpp: readPGM(#210) :couldn't read file
-    //        ViSP-images/mire-2/image.0001.pgm
-    //  !!    vpDotExample.cpp: main(#95) :Error while reading the image
-    //  terminate called after throwing an instance of 'vpImageException'
-    //
-    //  The sequence is available on the visp www site
-    //  http://www.irisa.fr/lagadic/visp/visp.html
-    //  in the download section. It is named "ViSP-images.tar.gz"
 
-    // Set the path location of the image sequence
-    dirname = ipath + vpIoTools::path("/ViSP-images/mire-2/");
+      // Warning :
+      // the image sequence is not provided with the ViSP package
+      // therefore the program will return you an error :
+      //  !!    vpImageIoPnm.cpp: readPGM(#210) :couldn't read file
+      //        ViSP-images/mire-2/image.0001.pgm
+      //  !!    vpDotExample.cpp: main(#95) :Error while reading the image
+      //  terminate called after throwing an instance of 'vpImageException'
+      //
+      //  The sequence is available on the visp www site
+      //  http://www.irisa.fr/lagadic/visp/visp.html
+      //  in the download section. It is named "ViSP-images.tar.gz"
 
-    // Build the name of the image file
+      // Set the path location of the image sequence
+      dirname = ipath + vpIoTools::path("/ViSP-images/mire-2/");
 
-    s.setf(std::ios::right, std::ios::adjustfield);
-    s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-    filename = dirname + s.str();
-  }
-  else {
+      // Build the name of the image file
 
-    sprintf(cfilename,opt_ppath.c_str(), iter) ;
-    filename = cfilename;
-  }
+      s.setf(std::ios::right, std::ios::adjustfield);
+      s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+      filename = dirname + s.str();
+    }
+    else {
 
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    vpCTRACE << "Load: " << filename << std::endl;
-
-    // Load a ViSP image used for the display
-    vpImageIo::read(vpI, filename) ;
-    // Load an OpenCV IPL image used by the tracker
-    if((cvI = cvLoadImage(filename.c_str(), CV_LOAD_IMAGE_GRAYSCALE))== NULL) {
-      printf("Cannot read image: %s\n", filename.c_str());
-      return (0);
+      sprintf(cfilename,opt_ppath.c_str(), iter) ;
+      filename = cfilename;
     }
-  }
-  catch(...)
-  {
-    // an exception is throwned if an exception from readPGM has been catched
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
 
-  // We open a window using either X11, GTK or GDI.
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
+    try{
+      vpCTRACE << "Load: " << filename << std::endl;
+
+      // Load a ViSP image used for the display
+      vpImageIo::read(vpI, filename) ;
+      // Load an OpenCV IPL image used by the tracker
+      if((cvI = cvLoadImage(filename.c_str(), CV_LOAD_IMAGE_GRAYSCALE))== NULL) {
+        printf("Cannot read image: %s\n", filename.c_str());
+        return (0);
+      }
+    }
+    catch(...)
+    {
+      // an exception is throwned if an exception from readPGM has been catched
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
+      exit(-1);
+    }
+
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
 
-  if (opt_display) {
-    try{
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display.init(vpI, 100, 100,"Display...") ;
       // Display the image
@@ -355,49 +358,36 @@ main(int argc, const char ** argv)
       vpDisplay::display(vpI) ;
       vpDisplay::flush(vpI) ;
     }
-    catch(...)
-    {
-      // an exception is throwned if an exception from readPGM has been catched
-      // here this will result in the end of the program
-      // Note that another error message has been printed from readPGM
-      // to give more information about the error
 
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
+    // KLT tracker
+    vpKltOpencv tracker;
+
+    // Event manager
+    //tracker.setOnNewFeature(&newFeature);
+    //tracker.setOnFeatureLost(&lostFeature);
+    //tracker.setIsFeatureValid(&isValid);
+
+    // Tracker parameters
+    tracker.setTrackerId(1);
+    //tracker.setOnMeasureFeature(&modifyFeature);
+    tracker.setMaxFeatures(200);
+    tracker.setWindowSize(10);
+    tracker.setQuality(0.01);
+    tracker.setMinDistance(15);
+    tracker.setHarrisFreeParameter(0.04);
+    tracker.setBlockSize(9);
+    tracker.setUseHarris(1);
+    tracker.setPyramidLevels(3);
+
+    // Point detection using Harris. In input we have an OpenCV IPL image
+    tracker.initTracking(cvI);
+
+    if (opt_display) {
+      // Plot the Harris points on ViSP image
+      tracker.display(vpI, vpColor::red);
     }
-  }
-  
-  // KLT tracker
-  vpKltOpencv tracker;
-
-  // Event manager
-  //tracker.setOnNewFeature(&newFeature);
-  //tracker.setOnFeatureLost(&lostFeature);
-  //tracker.setIsFeatureValid(&isValid);
-
-  // Tracker parameters
-  tracker.setTrackerId(1);
-  //tracker.setOnMeasureFeature(&modifyFeature);
-  tracker.setMaxFeatures(200);
-  tracker.setWindowSize(10);
-  tracker.setQuality(0.01);
-  tracker.setMinDistance(15);
-  tracker.setHarrisFreeParameter(0.04);
-  tracker.setBlockSize(9);
-  tracker.setUseHarris(1);
-  tracker.setPyramidLevels(3);
-
-  // Point detection using Harris. In input we have an OpenCV IPL image 
-  tracker.initTracking(cvI);
-
-  if (opt_display) {
-    // Plot the Harris points on ViSP image
-    tracker.display(vpI, vpColor::red);
-  }
-
-  // tracking is now initialized. We can start the tracker.
 
-  try {
+    // tracking is now initialized. We can start the tracker.
     while (iter < opt_first + opt_nimages*opt_step) {
       // set the new image name
       if (opt_ppath.empty()){
@@ -446,16 +436,16 @@ main(int argc, const char ** argv)
       }
       iter += opt_step;
     }
+    if (opt_display && opt_click_allowed) {
+      std::cout << "\nA click to exit..." << std::endl;
+      // Wait for a blocking mouse click
+      vpDisplay::getClick(vpI) ;
+    }
+    return 0;
   }
-  catch (...) {
-    std::cerr << "Error during the tracking..." << std::endl;
-    std::cerr << "The progam was stopped." << std::endl;
-    exit(-1);
-  }
-  if (opt_display && opt_click_allowed) {
-    std::cout << "\nA click to exit..." << std::endl;
-    // Wait for a blocking mouse click
-    vpDisplay::getClick(vpI) ;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
diff --git a/example/tracking/trackMeCircle.cpp b/example/tracking/trackMeCircle.cpp
index 09d182e9..b820333a 100644
--- a/example/tracking/trackMeCircle.cpp
+++ b/example/tracking/trackMeCircle.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: trackMeCircle.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: trackMeCircle.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -75,6 +75,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:h"
 
+void usage(const char *name, const char *badparam, std::string ipath);
+bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_allowed, bool &display);
+
 /*!
 
   Print the program options.
@@ -129,21 +132,20 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv, std::string &ipath,
-                bool &click_allowed, bool &display)
+bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
+    case 'i': ipath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath);
+      usage(argv[0], optarg_, ipath);
       return false; break;
     }
   }
@@ -152,7 +154,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
     // standalone param or error
     usage(argv[0], NULL, ipath);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -163,108 +165,108 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string dirname;
-  std::string filename;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_click_allowed,
-                 opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string dirname;
+    std::string filename;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_click_allowed,
+                   opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL, ipath);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
+      exit(-1);
+    }
 
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  vpImage<unsigned char> I ;
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    vpImage<unsigned char> I ;
 
-  // Set the path location of the image sequence
-  dirname = ipath +  vpIoTools::path("/ViSP-images/circle/");
+    // Set the path location of the image sequence
+    dirname = ipath +  vpIoTools::path("/ViSP-images/circle/");
 
-  // Build the name of the image file
-  filename = dirname + "circle.pgm";
+    // Build the name of the image file
+    filename = dirname + "circle.pgm";
 
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    vpCTRACE << "Load: " << filename << std::endl;
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
+    try{
+      vpCTRACE << "Load: " << filename << std::endl;
 
-    vpImageIo::read(I, filename) ;
-  }
-  catch(...)
-  {
-    // an exception is throwned if an exception from readPGM has been catched
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
+      vpImageIo::read(I, filename) ;
+    }
+    catch(...)
+    {
+      // an exception is throwned if an exception from readPGM has been catched
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
+      exit(-1);
+    }
 
 
-  // We open a window using either X11, GTK or GDI.
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
 
-  if (opt_display) {
-    try{
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display.init(I, 100, 100,"Display...") ;
       // Display the image
@@ -275,61 +277,60 @@ main(int argc, const char ** argv)
       vpDisplay::display(I) ;
       vpDisplay::flush(I) ;
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
 
-  vpMeEllipse E1 ;
+    vpMeEllipse E1 ;
 
-  vpMe me ;
-  me.setRange(20) ;
-  me.setSampleStep(2) ;
-  me.setPointsToTrack(60) ;
-  me.setThreshold(15000) ;
+    vpMe me ;
+    me.setRange(20) ;
+    me.setSampleStep(2) ;
+    me.setPointsToTrack(60) ;
+    me.setThreshold(15000) ;
 
 
-  E1.setCircle(true) ;
-  E1.setMe(&me) ;
-  E1.setDisplay(vpMeSite::RANGE_RESULT) ;
-  // If click is allowed, wait for a mouse click to select the points
-  // on the ellipse
-  if (opt_display && opt_click_allowed) {
-    E1.initTracking(I) ;
-  }
-  else {
-    // Create a list of points to automate the test
-    unsigned int n=5 ;
-    vpImagePoint *ip = new vpImagePoint [n];
-    ip[0].set_i( 39 ); ip[0].set_j( 136 );
-    ip[1].set_i( 42 ); ip[1].set_j( 83 );
-    ip[2].set_i( 86 ); ip[2].set_j( 55 );
-    ip[3].set_i( 132 ); ip[3].set_j( 72 );
-    ip[4].set_i( 145 ); ip[4].set_j( 134 );
-    E1.initTracking(I, n, ip) ;
-    delete [] ip ;
-  }
+    E1.setCircle(true) ;
+    E1.setMe(&me) ;
+    E1.setDisplay(vpMeSite::RANGE_RESULT) ;
+    // If click is allowed, wait for a mouse click to select the points
+    // on the ellipse
+    if (opt_display && opt_click_allowed) {
+      E1.initTracking(I) ;
+    }
+    else {
+      // Create a list of points to automate the test
+      unsigned int n=5 ;
+      vpImagePoint *ip = new vpImagePoint [n];
+      ip[0].set_i( 39 ); ip[0].set_j( 136 );
+      ip[1].set_i( 42 ); ip[1].set_j( 83 );
+      ip[2].set_i( 86 ); ip[2].set_j( 55 );
+      ip[3].set_i( 132 ); ip[3].set_j( 72 );
+      ip[4].set_i( 145 ); ip[4].set_j( 134 );
+      E1.initTracking(I, n, ip) ;
+      delete [] ip ;
+    }
 
-  if (opt_display) {
-    E1.display(I, vpColor::green) ;
-    vpDisplay::flush(I);
-  }
+    if (opt_display) {
+      E1.display(I, vpColor::green) ;
+      vpDisplay::flush(I);
+    }
 
-  vpTRACE("sample step %f ",E1.getMe()->getSampleStep()) ;
-  std::cout << "Tracking on image: " << filename << std::endl;
-  E1.track(I) ;
-  if (opt_display) {
-    vpDisplay::flush(I);
-  }
+    vpTRACE("sample step %f ",E1.getMe()->getSampleStep()) ;
+    std::cout << "Tracking on image: " << filename << std::endl;
+    E1.track(I) ;
+    if (opt_display) {
+      vpDisplay::flush(I);
+    }
 
-  if (opt_display && opt_click_allowed) {
-    std::cout << "A click to exit..." << std::endl;
-    vpDisplay::getClick(I) ;
+    if (opt_display && opt_click_allowed) {
+      std::cout << "A click to exit..." << std::endl;
+      vpDisplay::getClick(I) ;
+    }
+    std::cout <<"------------------------------------------------------------"<<std::endl;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  std::cout <<"------------------------------------------------------------"<<std::endl;
-
 }
 #else
 int
diff --git a/example/tracking/trackMeEllipse.cpp b/example/tracking/trackMeEllipse.cpp
index 317fb87e..6b0397f8 100644
--- a/example/tracking/trackMeEllipse.cpp
+++ b/example/tracking/trackMeEllipse.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: trackMeEllipse.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: trackMeEllipse.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -77,6 +77,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:h"
 
+void usage(const char *name, const char *badparam, std::string ipath);
+bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_allowed, bool &display);
+
 /*!
 
   Print the program options.
@@ -133,18 +136,18 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
+    case 'i': ipath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath);
+      usage(argv[0], optarg_, ipath);
       return false; break;
     }
   }
@@ -153,7 +156,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_all
     // standalone param or error
     usage(argv[0], NULL, ipath);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -164,110 +167,110 @@ bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_all
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string dirname;
-  std::string filename;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string dirname;
+    std::string filename;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL, ipath);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
+      exit(-1);
+    }
 
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image is
-  // read on the disk
-  vpImage<unsigned char> I ;
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image is
+    // read on the disk
+    vpImage<unsigned char> I ;
 
-  // Set the path location of the image sequence
-  dirname = ipath +  vpIoTools::path("/ViSP-images/ellipse-1/");
+    // Set the path location of the image sequence
+    dirname = ipath +  vpIoTools::path("/ViSP-images/ellipse-1/");
 
-  // Build the name of the image file
-  unsigned iter = 1; // Image number
-  std::ostringstream s;
-  s.setf(std::ios::right, std::ios::adjustfield);
-  s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-  filename = dirname + s.str();
+    // Build the name of the image file
+    unsigned int iter = 1; // Image number
+    std::ostringstream s;
+    s.setf(std::ios::right, std::ios::adjustfield);
+    s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+    filename = dirname + s.str();
 
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    vpCTRACE << "Load: " << filename << std::endl;
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
+    try{
+      vpCTRACE << "Load: " << filename << std::endl;
 
-    vpImageIo::read(I, filename) ;
-  }
-  catch(...)
-  {
-    // an exception is thrown if an exception from readPGM has been caught
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
+      vpImageIo::read(I, filename) ;
+    }
+    catch(...)
+    {
+      // an exception is thrown if an exception from readPGM has been caught
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
+      exit(-1);
+    }
 
-  // We open a window using either X11, GTK or GDI.
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
 
-  if (opt_display) {
-    try{
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display.init(I, 100, 100,"Display...") ;
       // Display the image
@@ -278,81 +281,74 @@ main(int argc, const char ** argv)
       vpDisplay::display(I) ;
       vpDisplay::flush(I) ;
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
 
-  vpMeEllipse E1 ;
-
-  vpMe me ;
-  me.setRange(20) ;
-  me.setSampleStep(2) ;
-  me.setPointsToTrack(60) ;
-  me.setThreshold(15000) ;
-
-  E1.setMe(&me) ;
-  E1.setDisplay(vpMeSite::RANGE_RESULT) ;
-  if (opt_click_allowed)
-    E1.initTracking(I) ;
-  else {
-    // Create a list of points to automate the test
-    unsigned int n=5 ;
-    vpImagePoint *ip = new vpImagePoint [n];
-    ip[0].set_i( 33 ); ip[0].set_j( 276 );
-    ip[1].set_i( 83 ); ip[1].set_j( 126 );
-    ip[2].set_i( 201 ); ip[2].set_j( 36 );
-    ip[3].set_i( 243 ); ip[3].set_j( 164 );
-    ip[4].set_i( 195 ); ip[4].set_j( 329 );
-    E1.initTracking(I, n, ip) ;
-    delete [] ip ;
-  }
-  if (opt_display) {
-    E1.display(I, vpColor::green) ;
-  }
+    vpMeEllipse E1 ;
+
+    vpMe me ;
+    me.setRange(20) ;
+    me.setSampleStep(2) ;
+    me.setPointsToTrack(60) ;
+    me.setThreshold(15000) ;
+
+    E1.setMe(&me) ;
+    E1.setDisplay(vpMeSite::RANGE_RESULT) ;
+    if (opt_click_allowed)
+      E1.initTracking(I) ;
+    else {
+      // Create a list of points to automate the test
+      unsigned int n=5 ;
+      vpImagePoint *ip = new vpImagePoint [n];
+      ip[0].set_i( 33 ); ip[0].set_j( 276 );
+      ip[1].set_i( 83 ); ip[1].set_j( 126 );
+      ip[2].set_i( 201 ); ip[2].set_j( 36 );
+      ip[3].set_i( 243 ); ip[3].set_j( 164 );
+      ip[4].set_i( 195 ); ip[4].set_j( 329 );
+      E1.initTracking(I, n, ip) ;
+      delete [] ip ;
+    }
+    if (opt_display) {
+      E1.display(I, vpColor::green) ;
+    }
 
-  vpERROR_TRACE("sample step %f ",E1.getMe()->getSampleStep()) ;
-  E1.track(I) ;
-  if (opt_display && opt_click_allowed) {
-    std::cout << "A click to continue..." << std::endl;
-    vpDisplay::getClick(I) ;
-  }
-  std::cout <<"------------------------------------------------------------"<<std::endl;
+    vpERROR_TRACE("sample step %f ",E1.getMe()->getSampleStep()) ;
+    E1.track(I) ;
+    if (opt_display && opt_click_allowed) {
+      std::cout << "A click to continue..." << std::endl;
+      vpDisplay::getClick(I) ;
+    }
+    std::cout <<"------------------------------------------------------------"<<std::endl;
 
 
-  for (int iter = 1 ; iter < 51 ; iter++) // initially : iter < 1500
-  {
-    // set the new image name
-    s.str("");
-    s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-    filename = dirname + s.str();
-    std::cout << "Tracking on image: " << filename << std::endl;
-    // read the image
-    vpImageIo::read(I, filename);
-    if (opt_display) {
-      // Display the image
-      vpDisplay::display(I) ;
-    }
-    try
+    for (iter = 1 ; iter < 51 ; iter++) // initially : iter < 1500
     {
+      // set the new image name
+      s.str("");
+      s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+      filename = dirname + s.str();
+      std::cout << "Tracking on image: " << filename << std::endl;
+      // read the image
+      vpImageIo::read(I, filename);
+      if (opt_display) {
+        // Display the image
+        vpDisplay::display(I) ;
+      }
+
       E1.track(I) ;
-    }
-    catch(...)
-    {
-      vpERROR_TRACE("Error in tracking vpMeLine ") ;
-      exit(1) ;
-    }
 
-    if (opt_display) {
-      E1.display(I,vpColor::green) ;
-      vpDisplay::flush(I) ;
+      if (opt_display) {
+        E1.display(I,vpColor::green) ;
+        vpDisplay::flush(I) ;
+      }
+    }
+    if (opt_display && opt_click_allowed) {
+      std::cout << "A click to exit..." << std::endl;
+      vpDisplay::getClick(I) ;
     }
+    return 0;
   }
-  if (opt_display && opt_click_allowed) {
-    std::cout << "A click to exit..." << std::endl;
-    vpDisplay::getClick(I) ;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
diff --git a/example/tracking/trackMeLine.cpp b/example/tracking/trackMeLine.cpp
index a74df868..4bd5e3ea 100644
--- a/example/tracking/trackMeLine.cpp
+++ b/example/tracking/trackMeLine.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: trackMeLine.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: trackMeLine.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -81,6 +81,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:h"
 
+void usage(const char *name, const char *badparam, std::string ipath);
+bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_allowed, bool &display);
+
 /*!
 
   Print the program options.
@@ -135,21 +138,20 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv, std::string &ipath,
-                bool &click_allowed, bool &display)
+bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
+    case 'i': ipath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath);
+      usage(argv[0], optarg_, ipath);
       return false; break;
     }
   }
@@ -158,7 +160,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
     // standalone param or error
     usage(argv[0], NULL, ipath);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -169,110 +171,110 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string dirname;
-  std::string filename;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_click_allowed,
-                 opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string dirname;
+    std::string filename;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_click_allowed,
+                   opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL, ipath);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
+      exit(-1);
+    }
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  vpImage<unsigned char> I ;
-
-  // Set the path location of the image sequence
-  dirname = ipath +  vpIoTools::path("/ViSP-images/line/");
-
-  // Build the name of the image file
-  unsigned iter = 1; // Image number
-  std::ostringstream s;
-  s.setf(std::ios::right, std::ios::adjustfield);
-  s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-  filename = dirname + s.str();
-
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    vpCTRACE << "Load: " << filename << std::endl;
-
-    vpImageIo::read(I, filename) ;
-  }
-  catch(...)
-  {
-    // an exception is throwned if an exception from readPGM has been catched
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    vpImage<unsigned char> I ;
 
-  // We open a window using either X11, GTK or GDI.
+    // Set the path location of the image sequence
+    dirname = ipath +  vpIoTools::path("/ViSP-images/line/");
+
+    // Build the name of the image file
+    unsigned int iter = 1; // Image number
+    std::ostringstream s;
+    s.setf(std::ios::right, std::ios::adjustfield);
+    s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+    filename = dirname + s.str();
+
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
+    try{
+      vpCTRACE << "Load: " << filename << std::endl;
+
+      vpImageIo::read(I, filename) ;
+    }
+    catch(...)
+    {
+      // an exception is throwned if an exception from readPGM has been catched
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
+      exit(-1);
+    }
+
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
 
-  if (opt_display) {
-    try{
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display.init(I, 100, 100,"Display...") ;
       // Display the image
@@ -283,91 +285,82 @@ main(int argc, const char ** argv)
       vpDisplay::display(I) ;
       vpDisplay::flush(I) ;
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
-
 
-  vpMeLine L1 ;
+    vpMeLine L1 ;
 
-  vpMe me ;
-  me.setRange(15) ;
-  me.setPointsToTrack(160) ;
-  me.setThreshold(15000) ;
+    vpMe me ;
+    me.setRange(15) ;
+    me.setPointsToTrack(160) ;
+    me.setThreshold(15000) ;
 
 
-  L1.setMe(&me) ;
-  L1.setDisplay(vpMeSite::RANGE_RESULT) ;
-
-  if (opt_display && opt_click_allowed)
-    L1.initTracking(I) ;
-  else {
-    vpImagePoint ip1, ip2;
-    ip1.set_i( 96 );
-    ip1.set_j( 191 );
-    ip2.set_i( 122 );
-    ip2.set_j( 211 );
-    L1.initTracking(I, ip1, ip2) ;
-  }
-
-  if (opt_display)
-    L1.display(I, vpColor::green) ;
+    L1.setMe(&me) ;
+    L1.setDisplay(vpMeSite::RANGE_RESULT) ;
 
-  L1.track(I) ;
-  if (opt_display && opt_click_allowed) {
-    std::cout << "A click to continue..." << std::endl;
-    vpDisplay::getClick(I) ;
-  }
-  std::cout <<"----------------------------------------------------------"<<std::endl;
+    if (opt_display && opt_click_allowed)
+      L1.initTracking(I) ;
+    else {
+      vpImagePoint ip1, ip2;
+      ip1.set_i( 96 );
+      ip1.set_j( 191 );
+      ip2.set_i( 122 );
+      ip2.set_j( 211 );
+      L1.initTracking(I, ip1, ip2) ;
+    }
 
-  vpFeatureLine l ;
+    if (opt_display)
+      L1.display(I, vpColor::green) ;
 
-  vpCameraParameters cam ;
-  vpImage<vpRGBa> Ic ;
-  for (int iter = 1 ; iter < 30 ; iter++)
-  {
-    std::cout <<"----------------------------------------------------------"<<std::endl;
-    // set the new image name
-    s.str("");
-    s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
-    filename = dirname + s.str();
-    // read the image
-    vpImageIo::read(I, filename);
-    if (opt_display) {
-      // Display the image
-      vpDisplay::display(I) ;
+    L1.track(I) ;
+    if (opt_display && opt_click_allowed) {
+      std::cout << "A click to continue..." << std::endl;
+      vpDisplay::getClick(I) ;
     }
+    std::cout <<"----------------------------------------------------------"<<std::endl;
 
-    try
+    vpFeatureLine l ;
+
+    vpCameraParameters cam ;
+    vpImage<vpRGBa> Ic ;
+    for (iter = 1 ; iter < 30 ; iter++)
     {
+      std::cout <<"----------------------------------------------------------"<<std::endl;
+      // set the new image name
+      s.str("");
+      s << "image." << std::setw(4) << std::setfill('0') << iter << ".pgm";
+      filename = dirname + s.str();
+      // read the image
+      vpImageIo::read(I, filename);
+      if (opt_display) {
+        // Display the image
+        vpDisplay::display(I) ;
+      }
+
       std::cout << "Tracking on image: " << filename << std::endl;
       L1.track(I) ;
-    }
-    catch(...)
-    {
-      vpERROR_TRACE("Error in tracking vpMeLine ") ;
-      exit(1) ;
-    }
-
-    vpTRACE("L1 : %f %f", L1.getRho(), vpMath::deg(L1.getTheta())) ;
-    vpFeatureBuilder::create(l,cam,L1) ;
-    vpTRACE("L1 : %f %f", l.getRho(), vpMath::deg(l.getTheta())) ;
 
-    if (opt_display) {
-      L1.display(I,vpColor::green) ;
-      vpDisplay::flush(I) ;
-      if (opt_click_allowed) {
-        std::cout << "A click to continue..." << std::endl;
-        vpDisplay::getClick(I) ;
+      vpTRACE("L1 : %f %f", L1.getRho(), vpMath::deg(L1.getTheta())) ;
+      vpFeatureBuilder::create(l,cam,L1) ;
+      vpTRACE("L1 : %f %f", l.getRho(), vpMath::deg(l.getTheta())) ;
+
+      if (opt_display) {
+        L1.display(I,vpColor::green) ;
+        vpDisplay::flush(I) ;
+        if (opt_click_allowed) {
+          std::cout << "A click to continue..." << std::endl;
+          vpDisplay::getClick(I) ;
+        }
       }
     }
+    if (opt_display && opt_click_allowed) {
+      std::cout << "A click to exit..." << std::endl;
+      vpDisplay::getClick(I) ;
+    }
+    return 0;
   }
-  if (opt_display && opt_click_allowed) {
-    std::cout << "A click to exit..." << std::endl;
-    vpDisplay::getClick(I) ;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 
diff --git a/example/tracking/trackMeNurbs.cpp b/example/tracking/trackMeNurbs.cpp
index fa998562..e6192aad 100644
--- a/example/tracking/trackMeNurbs.cpp
+++ b/example/tracking/trackMeNurbs.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: trackMeNurbs.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: trackMeNurbs.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -78,6 +78,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:h"
 
+void usage(const char *name, const char *badparam, std::string ipath);
+bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_allowed, bool &display);
+
 /*!
 
   Print the program options.
@@ -134,18 +137,18 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
+    case 'i': ipath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath);
+      usage(argv[0], optarg_, ipath);
       return false; break;
     }
   }
@@ -154,7 +157,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_all
     // standalone param or error
     usage(argv[0], NULL, ipath);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -165,83 +168,83 @@ bool getOptions(int argc, const char **argv, std::string &ipath, bool &click_all
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string filename;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string filename;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL, ipath);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
+      exit(-1);
+    }
 
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image is
-  // read on the disk
-  vpImage<unsigned char> I ;
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image is
+    // read on the disk
+    vpImage<unsigned char> I ;
 
-  // Set the path location of the image sequence
-  filename = ipath +  vpIoTools::path("/ViSP-images/ellipse-1/image.%04d.pgm");
+    // Set the path location of the image sequence
+    filename = ipath +  vpIoTools::path("/ViSP-images/ellipse-1/image.%04d.pgm");
 
-  // Build the name of the image file
-  vpVideoReader reader;
-  //Initialize the reader and get the first frame.
-  reader.setFileName(filename.c_str());
-  reader.setFirstFrameIndex(1);
-  reader.open(I);
+    // Build the name of the image file
+    vpVideoReader reader;
+    //Initialize the reader and get the first frame.
+    reader.setFileName(filename.c_str());
+    reader.setFirstFrameIndex(1);
+    reader.open(I);
 
-  // We open a window using either X11, GTK or GDI.
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
 
-  if (opt_display) {
-    try{
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display.init(I, 100, 100,"Display...") ;
       // Display the image
@@ -252,85 +255,79 @@ main(int argc, const char ** argv)
       vpDisplay::display(I) ;
       vpDisplay::flush(I) ;
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
 
-  vpMeNurbs nurbs ;
+    vpMeNurbs nurbs ;
 
-  vpMe me ;
-  me.setRange(30) ;
-  me.setSampleStep(5) ;
-  me.setPointsToTrack(60) ;
-  me.setThreshold(15000) ;
+    vpMe me ;
+    me.setRange(30) ;
+    me.setSampleStep(5) ;
+    me.setPointsToTrack(60) ;
+    me.setThreshold(15000) ;
 
 
-  nurbs.setMe(&me);
-  nurbs.setDisplay(vpMeSite::RANGE_RESULT) ;
-  nurbs.setNbControlPoints(14);
+    nurbs.setMe(&me);
+    nurbs.setDisplay(vpMeSite::RANGE_RESULT) ;
+    nurbs.setNbControlPoints(14);
 
-  if (opt_click_allowed)
-  {
-    std::cout << "Click on points along the edge with the left button." << std::endl;
-    std::cout << "Then click on the right button to continue." << std::endl;
-    nurbs.initTracking(I);
-  }
-  else 
-  {
-    // Create a list of points to automate the test
-    std::list<vpImagePoint> list;
-    list.push_back(vpImagePoint(178,357));
-    list.push_back(vpImagePoint(212,287));
-    list.push_back(vpImagePoint(236,210));
-    list.push_back(vpImagePoint(240, 118));
-    list.push_back(vpImagePoint(210, 40));
-
-    nurbs.initTracking(I, list) ;
-  }
-  if (opt_display) {
-    nurbs.display(I, vpColor::green) ;
-  }
+    if (opt_click_allowed)
+    {
+      std::cout << "Click on points along the edge with the left button." << std::endl;
+      std::cout << "Then click on the right button to continue." << std::endl;
+      nurbs.initTracking(I);
+    }
+    else
+    {
+      // Create a list of points to automate the test
+      std::list<vpImagePoint> list;
+      list.push_back(vpImagePoint(178,357));
+      list.push_back(vpImagePoint(212,287));
+      list.push_back(vpImagePoint(236,210));
+      list.push_back(vpImagePoint(240, 118));
+      list.push_back(vpImagePoint(210, 40));
+
+      nurbs.initTracking(I, list) ;
+    }
+    if (opt_display) {
+      nurbs.display(I, vpColor::green) ;
+    }
 
 
-  nurbs.track(I) ;
-  if (opt_display && opt_click_allowed) {
-    std::cout << "A click to continue..." << std::endl;
-    vpDisplay::getClick(I) ;
-  }
-  std::cout <<"------------------------------------------------------------"<<std::endl;
+    nurbs.track(I) ;
+    if (opt_display && opt_click_allowed) {
+      std::cout << "A click to continue..." << std::endl;
+      vpDisplay::getClick(I) ;
+    }
+    std::cout <<"------------------------------------------------------------"<<std::endl;
 
 
-  for (int iter = 1 ; iter < 40 ; iter++)
-  {
-    //read the image
-    reader.getFrame(I,iter);
-    if (opt_display) {
-      // Display the image
-      vpDisplay::display(I) ;
-    }
-    try
+    for (int iter = 1 ; iter < 40 ; iter++)
     {
+      //read the image
+      reader.getFrame(I,iter);
+      if (opt_display) {
+        // Display the image
+        vpDisplay::display(I) ;
+      }
+
       //Track the nurbs
       nurbs.track(I) ;
-    }
-    catch(...)
-    {
-      vpERROR_TRACE("Error in tracking vpMeLine ") ;
-      exit(1) ;
-    }
 
-    if (opt_display) {
-      nurbs.display(I,vpColor::green) ;
-      vpDisplay::flush(I) ;
-      vpTime::wait(100);
+
+      if (opt_display) {
+        nurbs.display(I,vpColor::green) ;
+        vpDisplay::flush(I) ;
+        vpTime::wait(100);
+      }
+    }
+    if (opt_display && opt_click_allowed) {
+      std::cout << "A click to exit..." << std::endl;
+      vpDisplay::getClick(I) ;
     }
+    return 0;
   }
-  if (opt_display && opt_click_allowed) {
-    std::cout << "A click to exit..." << std::endl;
-    vpDisplay::getClick(I) ;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
diff --git a/example/video/CMakeLists.txt b/example/video/CMakeLists.txt
index 9204ded6..1c115f53 100644
--- a/example/video/CMakeLists.txt
+++ b/example/video/CMakeLists.txt
@@ -3,7 +3,7 @@
 # $Id: CMakeLists.txt 2158 2009-05-07 07:24:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/video/imageSequenceReader.cpp b/example/video/imageSequenceReader.cpp
index e349b31a..bcc804b3 100644
--- a/example/video/imageSequenceReader.cpp
+++ b/example/video/imageSequenceReader.cpp
@@ -3,7 +3,7 @@
  * $Id: imageDiskRW.cpp 2158 2009-05-07 07:24:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -65,6 +65,10 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:p:f:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string ppath);
+bool getOptions(int argc, const char **argv,
+                std::string &ipath, std::string &ppath, int &first, bool &click_allowed, bool &display);
+
 /*!
 
 Print the program options.
@@ -137,20 +141,20 @@ OPTIONS:                                               Default\n\
 bool getOptions(int argc, const char **argv,
                 std::string &ipath, std::string &ppath, int &first, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
-    case 'p': ppath = optarg; break;
-    case 'f': first = atoi(optarg); break;
+    case 'i': ipath = optarg_; break;
+    case 'p': ppath = optarg_; break;
+    case 'f': first = atoi(optarg_); break;
     case 'h': usage(argv[0], NULL, ipath, ppath); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, ppath); return false; break;
+      usage(argv[0], optarg_, ipath, ppath); return false; break;
     }
   }
 
@@ -158,7 +162,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, ppath);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -170,171 +174,167 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string opt_ppath;
+    std::string filename;
+    int opt_first = 1;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    std::cout <<  "-------------------------------------------------------" << std::endl ;
+    std::cout <<  "  videoImageSequenceReader.cpp" <<std::endl << std::endl ;
+
+    std::cout <<  "  reading an image sequence" << std::endl ;
+    std::cout <<  "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_ppath, opt_first, opt_click_allowed,
+                   opt_display) == false) {
+      exit (-1);
+    }
 
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string opt_ppath;
-  std::string filename;
-  int opt_first = 1;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
+    }
 
-  std::cout <<  "-------------------------------------------------------" << std::endl ;
-  std::cout <<  "  videoImageSequenceReader.cpp" <<std::endl << std::endl ;
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty()){
+      usage(argv[0], NULL, ipath, opt_ppath);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  video path where test images are located." << std::endl << std::endl;
+      exit(-1);
+    }
 
-  std::cout <<  "  reading an image sequence" << std::endl ;
-  std::cout <<  "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
 
+    /////////////////////////////////////////////////////////////////////
 
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
 
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
+    // vpImage is a template class you can declare vpImage of ... everything...
+    vpImage<vpRGBa> I ;
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_ppath, opt_first, opt_click_allowed,
-                 opt_display) == false) {
-    exit (-1);
-  }
+    //Create the video Reader
+    vpVideoReader reader;
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    if (opt_ppath.empty())
+    {
+      filename = ipath +  vpIoTools::path("/ViSP-images/mire-2/image.%04d.pgm");
+    }
+    else
+    {
+      filename.assign(opt_ppath);
     }
-  }
-
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty()){
-    usage(argv[0], NULL, ipath, opt_ppath);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  video path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
-
-
-  /////////////////////////////////////////////////////////////////////
-
 
-  // vpImage is a template class you can declare vpImage of ... everything...
-  vpImage<vpRGBa> I ;
-  
-  //Create the video Reader
-  vpVideoReader reader;
+    //Initialize the reader and get the first frame.
+    reader.setFileName(filename.c_str());
+    reader.setFirstFrameIndex(opt_first);
+    reader.open(I);
 
-  if (opt_ppath.empty())
-  {
-    filename = ipath +  vpIoTools::path("/ViSP-images/mire-2/image.%04d.pgm");
-  }
-  else
-  {
-    filename.assign(opt_ppath);
-  }
-  
-  //Initialize the reader and get the first frame.
-  reader.setFileName(filename.c_str());
-  reader.setFirstFrameIndex(opt_first);
-  reader.open(I);
-
-  // We open a window using either X11, GTK, GDI or OpenCV.
+    // We open a window using either X11, GTK, GDI or OpenCV.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV display;
+    vpDisplayOpenCV display;
 #endif
 
-  if (opt_display) 
-  {
-    try
-    {
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display.init(I, 100, 100,"Display video frame") ;
       vpDisplay::display(I) ;
       vpDisplay::flush(I) ;
+
     }
-    catch(...)
+
+    if (opt_display && opt_click_allowed)
     {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
+      std::cout << "Click on the image to read and display the second frame" << std::endl;
+      vpDisplay::getClick(I);
+    }
+
+    reader.getFrame(I,opt_first+1);
+
+    if (opt_display)
+    {
+      vpDisplay::display(I) ;
+      vpDisplay::flush(I);
+    }
+
+    if (opt_display && opt_click_allowed)
+    {
+      std::cout << "Click on the image to read and display the last frame" << std::endl;
+      vpDisplay::getClick(I);
     }
-  }
-  
-  if (opt_display && opt_click_allowed)
-  {
-    std::cout << "Click on the image to read and display the second frame" << std::endl;
-    vpDisplay::getClick(I);
-  }
-  
-  reader.getFrame(I,opt_first+1);
-  
-  if (opt_display)
-  {
-    vpDisplay::display(I) ;
-    vpDisplay::flush(I);
-  }
-  
-  if (opt_display && opt_click_allowed)
-  {
-    std::cout << "Click on the image to read and display the last frame" << std::endl;
-    vpDisplay::getClick(I);
-  }
-  
-  reader.getFrame(I,reader.getLastFrameIndex());
-  
-  if (opt_display)
-  {
-    vpDisplay::display(I) ;
-    vpDisplay::flush(I);
-  }
-  
-  if (opt_display && opt_click_allowed)
-  {
-    std::cout << "Click to see the video" << std::endl;
-    vpDisplay::getClick(I);
-  }
-  
-  int lastFrame = reader.getLastFrameIndex();
 
-  for (int i = opt_first; i <= lastFrame; i++)
-  {
-    reader.getFrame(I,i);
+    reader.getFrame(I,reader.getLastFrameIndex());
+
     if (opt_display)
     {
       vpDisplay::display(I) ;
       vpDisplay::flush(I);
     }
+
+    if (opt_display && opt_click_allowed)
+    {
+      std::cout << "Click to see the video" << std::endl;
+      vpDisplay::getClick(I);
+    }
+
+    int lastFrame = reader.getLastFrameIndex();
+
+    for (int i = opt_first; i <= lastFrame; i++)
+    {
+      reader.getFrame(I,i);
+      if (opt_display)
+      {
+        vpDisplay::display(I) ;
+        vpDisplay::flush(I);
+      }
+    }
+
+    if (opt_display && opt_click_allowed)
+    {
+      std::cout << "Click to exit the test" << std::endl;
+      vpDisplay::getClick(I);
+    }
+
+    return 0;
   }
-  
-  if (opt_display && opt_click_allowed)
-  {
-    std::cout << "Click to exit the test" << std::endl;
-    vpDisplay::getClick(I);
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  
-  return 0;
 }
 #else
 int main()
diff --git a/example/video/videoReader.cpp b/example/video/videoReader.cpp
index c8e93806..68794b7d 100644
--- a/example/video/videoReader.cpp
+++ b/example/video/videoReader.cpp
@@ -3,7 +3,7 @@
  * $Id: imageDiskRW.cpp 2158 2009-05-07 07:24:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -66,6 +66,10 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:p:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string ppath);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath,
+                bool &click_allowed, bool &display);
+
 /*!
 
 Print the program options.
@@ -130,22 +134,22 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv,
-                std::string &ipath, std::string &ppath, bool &click_allowed, bool &display)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath,
+                bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
-    case 'p': ppath = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'p': ppath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath, ppath); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, ppath); return false; break;
+      usage(argv[0], optarg_, ipath, ppath); return false; break;
     }
   }
 
@@ -153,7 +157,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, ppath);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -165,161 +169,149 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string opt_ppath;
+    std::string filename;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    std::cout <<  "-------------------------------------------------------" << std::endl ;
+    std::cout <<  "  videoReader.cpp" <<std::endl << std::endl ;
+
+    std::cout <<  "  reading a video file" << std::endl ;
+    std::cout <<  "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_ppath, opt_click_allowed,
+                   opt_display) == false) {
+      exit (-1);
+    }
 
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string opt_ppath;
-  std::string filename;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
+    }
 
-  std::cout <<  "-------------------------------------------------------" << std::endl ;
-  std::cout <<  "  videoReader.cpp" <<std::endl << std::endl ;
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty()){
+      usage(argv[0], NULL, ipath, opt_ppath);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  video path where test images are located." << std::endl << std::endl;
+      exit(-1);
+    }
 
-  std::cout <<  "  reading a video file" << std::endl ;
-  std::cout <<  "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
 
+    /////////////////////////////////////////////////////////////////////
 
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
 
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
+    // vpImage is a template class you can declare vpImage of ... everything...
+    vpImage<vpRGBa> I ;
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_ppath, opt_click_allowed,
-                 opt_display) == false) {
-    exit (-1);
-  }
+    //Create the video Reader
+    vpVideoReader reader;
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty() && opt_ppath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    if (opt_ppath.empty())
+    {
+      filename = ipath +  vpIoTools::path("/ViSP-images/video/cube.mpeg");
+    }
+    else
+    {
+      filename.assign(opt_ppath);
     }
-  }
-
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty() && opt_ppath.empty()){
-    usage(argv[0], NULL, ipath, opt_ppath);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  video path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
-
-
-  /////////////////////////////////////////////////////////////////////
-
-
-  // vpImage is a template class you can declare vpImage of ... everything...
-  vpImage<vpRGBa> I ;
-  
-  //Create the video Reader
-  vpVideoReader reader;
 
-  if (opt_ppath.empty())
-  {
-    filename = ipath +  vpIoTools::path("/ViSP-images/video/cube.mpeg");
-  }
-  else
-  {
-    filename.assign(opt_ppath);
-  }
-  
-  //Initialize the reader and get the first frame.
-  reader.setFileName(filename.c_str());
-  try
-  {
+    //Initialize the reader and get the first frame.
+    reader.setFileName(filename.c_str());
     reader.open(I);
-  }
-  catch(...)
-  {
-    return 0;
-  }
 
-  // We open a window using either X11, GTK, GDI or OpenCV.
+    // We open a window using either X11, GTK, GDI or OpenCV.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV display;
+    vpDisplayOpenCV display;
 #endif
 
-  if (opt_display) 
-  {
-    try
-    {
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display.init(I, 100, 100,"Display video frame") ;
       vpDisplay::display(I) ;
       vpDisplay::flush(I) ;
     }
-    catch(...)
+
+    //   if (opt_display && opt_click_allowed)
+    //   {
+    //     std::cout << "Click on the image to read and display the last key frame" << std::endl;
+    //     vpDisplay::getClick(I);
+    //   }
+    //
+    //   reader.getFrame(I,reader.getLastFrameIndex());
+    //
+    //   if (opt_display)
+    //   {
+    //     vpDisplay::display(I) ;
+    //     vpDisplay::flush(I);
+    //   }
+
+    if (opt_display && opt_click_allowed)
     {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
+      std::cout << "Click to see the video" << std::endl;
+      vpDisplay::getClick(I);
     }
-  }
-  
-  //   if (opt_display && opt_click_allowed)
-  //   {
-  //     std::cout << "Click on the image to read and display the last key frame" << std::endl;
-  //     vpDisplay::getClick(I);
-  //   }
-  //
-  //   reader.getFrame(I,reader.getLastFrameIndex());
-  //
-  //   if (opt_display)
-  //   {
-  //     vpDisplay::display(I) ;
-  //     vpDisplay::flush(I);
-  //   }
-  
-  if (opt_display && opt_click_allowed)
-  {
-    std::cout << "Click to see the video" << std::endl;
-    vpDisplay::getClick(I);
-  }
-  
-  int lastFrame = reader.getLastFrameIndex();
-  //To go to the beginning of the video
-  reader.getFrame(I,0);
-  
-  for (int i = 0; i <= lastFrame; i++)
-  {
-    reader.acquire(I);
-    if (opt_display)
+
+    int lastFrame = reader.getLastFrameIndex();
+    //To go to the beginning of the video
+    reader.getFrame(I,0);
+
+    for (int i = 0; i <= lastFrame; i++)
     {
-      vpDisplay::display(I) ;
-      vpDisplay::flush(I);
+      reader.acquire(I);
+      if (opt_display)
+      {
+        vpDisplay::display(I) ;
+        vpDisplay::flush(I);
+      }
+    }
+
+    if (opt_display && opt_click_allowed)
+    {
+      std::cout << "Click to exit the test" << std::endl;
+      vpDisplay::getClick(I);
     }
   }
-  
-  if (opt_display && opt_click_allowed)
-  {
-    std::cout << "Click to exit the test" << std::endl;
-    vpDisplay::getClick(I);
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
   return 0;
 }
diff --git a/example/wireframe-simulator/CMakeLists.txt b/example/wireframe-simulator/CMakeLists.txt
index 523661c9..a237b438 100644
--- a/example/wireframe-simulator/CMakeLists.txt
+++ b/example/wireframe-simulator/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/example/wireframe-simulator/wireframeSimulator.cpp b/example/wireframe-simulator/wireframeSimulator.cpp
index db922cf0..46600a04 100644
--- a/example/wireframe-simulator/wireframeSimulator.cpp
+++ b/example/wireframe-simulator/wireframeSimulator.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: wireframeSimulator.cpp 4182 2013-03-27 13:20:58Z fspindle $
+ * $Id: wireframeSimulator.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -65,6 +65,9 @@
 
 #ifdef VISP_HAVE_DISPLAY
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &display, bool &click);
+
 /*!
 
   Print the program options.
@@ -113,9 +116,9 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv, bool &display, bool &click)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click = false; break;
@@ -123,7 +126,7 @@ bool getOptions(int argc, const char **argv, bool &display, bool &click)
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -132,7 +135,7 @@ bool getOptions(int argc, const char **argv, bool &display, bool &click)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -143,41 +146,39 @@ bool getOptions(int argc, const char **argv, bool &display, bool &click)
 int
 main(int argc, const char ** argv)
 {
-  bool opt_display = true;
-  bool opt_click = true;
-  
-  // Read the command line options
-  if (getOptions(argc, argv, opt_display, opt_click) == false) {
-    exit (-1);
-  }
-  
-  /*
+  try {
+    bool opt_display = true;
+    bool opt_click = true;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_display, opt_click) == false) {
+      exit (-1);
+    }
+
+    /*
     Three vpImage are created : one for the main camera and the others
     for two external cameras
   */
-  vpImage<vpRGBa> Iint(480,640,255);
-  vpImage<vpRGBa> Iext1(480,640,255);
-  vpImage<vpRGBa> Iext2(480,640,255);
+    vpImage<vpRGBa> Iint(480,640,255);
+    vpImage<vpRGBa> Iext1(480,640,255);
+    vpImage<vpRGBa> Iext2(480,640,255);
 
-  /*
+    /*
     Create a display for each different cameras.
   */
 #if defined VISP_HAVE_X11
-  vpDisplayX display[3];
+    vpDisplayX display[3];
 #elif defined VISP_HAVE_OPENCV
-  vpDisplayOpenCV display[3];
+    vpDisplayOpenCV display[3];
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display[3];
+    vpDisplayGDI display[3];
 #elif defined VISP_HAVE_D3D9
-  vpDisplayD3D display[3];
+    vpDisplayD3D display[3];
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display[3];
+    vpDisplayGTK display[3];
 #endif
-  
-  if (opt_display)
-  {
-    try
-    {
+
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display[0].init(Iint, 100, 100,"The internal view") ;
       display[1].init(Iext1, 100, 100,"The first external view") ;
@@ -192,146 +193,145 @@ main(int argc, const char ** argv)
       vpDisplay::display(Iext2);
       vpDisplay::flush(Iext2);
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
 
-  //The homogeneous matrix which gives the current position of the main camera relative to the object
-  vpHomogeneousMatrix cMo(0,0.05,1.3,vpMath::rad(15),vpMath::rad(25),0);
-  
-  //The homogeneous matrix which gives the desired position of the main camera relative to the object
-  vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,0.0,1.0,vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)));
+    //The homogeneous matrix which gives the current position of the main camera relative to the object
+    vpHomogeneousMatrix cMo(0,0.05,1.3,vpMath::rad(15),vpMath::rad(25),0);
+
+    //The homogeneous matrix which gives the desired position of the main camera relative to the object
+    vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,0.0,1.0,vpMath::rad(0),vpMath::rad(0),vpMath::rad(0)));
 
-  //Declaration of the simulator
-  vpWireFrameSimulator sim;
-  /*
+    //Declaration of the simulator
+    vpWireFrameSimulator sim;
+    /*
     Set the scene. It enables to choose the shape of the object and the shape of the desired object which is
-    displayed in the main camera view. It exists several objects in ViSP. See the html documentation of the 
+    displayed in the main camera view. It exists several objects in ViSP. See the html documentation of the
     simulator class to have the complete list.
     
     Note : if you don't want to have a desired object displayed in the main camera view you can use the initObject Method.
     
-    Here the object is a plate with 4 points and it is the same object which is used to display the object at the desired position. 
+    Here the object is a plate with 4 points and it is the same object which is used to display the object at the desired position.
   */
-  sim.initScene(vpWireFrameSimulator::PLATE, vpWireFrameSimulator::D_STANDARD);
-  
-  /*
+    sim.initScene(vpWireFrameSimulator::PLATE, vpWireFrameSimulator::D_STANDARD);
+
+    /*
     The object at the current position will be displayed in blue
     The object at the desired position will be displayed in red
     The camera will be display in green
   */
-  sim.setCurrentViewColor(vpColor::blue);
-  sim.setDesiredViewColor(vpColor::red);
-  sim.setCameraColor(vpColor::green);
-  /*
+    sim.setCurrentViewColor(vpColor::blue);
+    sim.setDesiredViewColor(vpColor::red);
+    sim.setCameraColor(vpColor::green);
+    /*
     Set the current and the desired position of the camera relative to the object.
   */
-  sim.setCameraPositionRelObj(cMo) ;
-  sim.setDesiredCameraPosition(cdMo);
-  /*
+    sim.setCameraPositionRelObj(cMo) ;
+    sim.setDesiredCameraPosition(cdMo);
+    /*
     Set the main external camera's position relative to the world reference frame.
     More information about the different frames are given in the html documentation.
   */
-  vpHomogeneousMatrix camMw(vpHomogeneousMatrix(0.0,0,4.5,vpMath::rad(0),vpMath::rad(-30),0));
-  sim.setExternalCameraPosition(camMw);
-  
-  /*
+    vpHomogeneousMatrix camMw(vpHomogeneousMatrix(0.0,0,4.5,vpMath::rad(0),vpMath::rad(-30),0));
+    sim.setExternalCameraPosition(camMw);
+
+    /*
     Set the parameters of the cameras (internal and external)
   */
-  vpCameraParameters camera(1000,1000,320,240);
-  sim.setInternalCameraParameters(camera);
-  sim.setExternalCameraParameters(camera);
-  
-  vpHomogeneousMatrix camoMw(vpHomogeneousMatrix(-0.3,0.2,2.5,vpMath::rad(0),vpMath::rad(10),0));
-  
-  if (opt_display)
-  {
-    //Get the view of the internal camera
-    sim.getInternalImage(Iint);
-    //Get the view of the main external camera
-    sim.getExternalImage(Iext1);
-    //Get the view of an external camera that you can positionned thanks 
-    //to a vpHomogeneousMatrix which describes the position of the camera
-    //relative to the world reference frame.
-    sim.getExternalImage(Iext2,camoMw);
-    //Display the views.
-  
-    vpDisplay::flush(Iint);
-    vpDisplay::flush(Iext1);
-    vpDisplay::flush(Iext2);
-  }
-  
-  std::cout << std::endl;
-  std::cout << "Here are presented the effect of the basic functions of the simulator" << std::endl;
-  std::cout << std::endl;
-  
-  if (opt_display)
-  {
-    if (opt_click) {
-      std::cout << "Click on the internal view window to continue. the object will move. The external cameras are fixed. The main camera moves too because the homogeneous matrix cMo didn't change." << std::endl;
-      vpDisplay::getClick(Iint);
+    vpCameraParameters camera(1000,1000,320,240);
+    sim.setInternalCameraParameters(camera);
+    sim.setExternalCameraParameters(camera);
+
+    vpHomogeneousMatrix camoMw(vpHomogeneousMatrix(-0.3,0.2,2.5,vpMath::rad(0),vpMath::rad(10),0));
+
+    if (opt_display)
+    {
+      //Get the view of the internal camera
+      sim.getInternalImage(Iint);
+      //Get the view of the main external camera
+      sim.getExternalImage(Iext1);
+      //Get the view of an external camera that you can positionned thanks
+      //to a vpHomogeneousMatrix which describes the position of the camera
+      //relative to the world reference frame.
+      sim.getExternalImage(Iext2,camoMw);
+      //Display the views.
+
+      vpDisplay::flush(Iint);
+      vpDisplay::flush(Iext1);
+      vpDisplay::flush(Iext2);
     }
-    vpDisplay::display(Iint) ;
-    vpDisplay::display(Iext1) ;
-    vpDisplay::display(Iext2) ;
-  }
-  /*
+
+    std::cout << std::endl;
+    std::cout << "Here are presented the effect of the basic functions of the simulator" << std::endl;
+    std::cout << std::endl;
+
+    if (opt_display)
+    {
+      if (opt_click) {
+        std::cout << "Click on the internal view window to continue. the object will move. The external cameras are fixed. The main camera moves too because the homogeneous matrix cMo didn't change." << std::endl;
+        vpDisplay::getClick(Iint);
+      }
+      vpDisplay::display(Iint) ;
+      vpDisplay::display(Iext1) ;
+      vpDisplay::display(Iext2) ;
+    }
+    /*
     To move the object you have to define a vpHomogeneousMatrix which gives
     the position of the object relative to the world refrenece frame.
   */
-  vpHomogeneousMatrix mov(0.05,0.05,0.2,vpMath::rad(10),0,0);
-  sim.set_fMo(mov);
-
-  
-  if (opt_display)
-  {
-    //Get the view of the internal camera
-    sim.getInternalImage(Iint);
-    //Get the view of the main external camera
-    sim.getExternalImage(Iext1);
-    //Get the view of an external camera that you can positionned thanks 
-    //to a vpHomogeneousMatrix which describes the position of the camera
-    //relative to the world reference frame.
-    sim.getExternalImage(Iext2,camoMw);
-    //Display the views.
-  
-    vpDisplay::flush(Iint);
-    vpDisplay::flush(Iext1);
-    vpDisplay::flush(Iext2);
-  }
-  
-  std::cout << std::endl;
-  if (opt_display)
-  {
-    if (opt_click) {
-      std::cout << "Click on the internal view window to continue" << std::endl; 
-      vpDisplay::getClick(Iint);
+    vpHomogeneousMatrix mov(0.05,0.05,0.2,vpMath::rad(10),0,0);
+    sim.set_fMo(mov);
+
+
+    if (opt_display)
+    {
+      //Get the view of the internal camera
+      sim.getInternalImage(Iint);
+      //Get the view of the main external camera
+      sim.getExternalImage(Iext1);
+      //Get the view of an external camera that you can positionned thanks
+      //to a vpHomogeneousMatrix which describes the position of the camera
+      //relative to the world reference frame.
+      sim.getExternalImage(Iext2,camoMw);
+      //Display the views.
+
+      vpDisplay::flush(Iint);
+      vpDisplay::flush(Iext1);
+      vpDisplay::flush(Iext2);
     }
-  }
-  std::cout << std::endl;
-  std::cout << "Now you can move the main external camera. Click inside the corresponding window with one of the three buttons of your mouse and move the pointer." << std::endl;
-  std::cout << std::endl;
-  std::cout << "Click on the internal view window when you are finished" << std::endl;
-  
-  /*
+
+    std::cout << std::endl;
+    if (opt_display)
+    {
+      if (opt_click) {
+        std::cout << "Click on the internal view window to continue" << std::endl;
+        vpDisplay::getClick(Iint);
+      }
+    }
+    std::cout << std::endl;
+    std::cout << "Now you can move the main external camera. Click inside the corresponding window with one of the three buttons of your mouse and move the pointer." << std::endl;
+    std::cout << std::endl;
+    std::cout << "Click on the internal view window when you are finished" << std::endl;
+
+    /*
     To move the main external camera you need a loop containing the getExternalImage method. This functionnality is only available for the main external camera.
   */
-  if (opt_display && opt_click)
-  {
-    while (!vpDisplay::getClick(Iint, false))
+    if (opt_display && opt_click)
     {
-      vpDisplay::display(Iext1) ;
-      sim.getExternalImage(Iext1);
-      vpDisplay::flush(Iext1);
+      while (!vpDisplay::getClick(Iint, false))
+      {
+        vpDisplay::display(Iext1) ;
+        sim.getExternalImage(Iext1);
+        vpDisplay::flush(Iext1);
+      }
     }
-  }
 
-  std::cout << std::endl;
-  std::cout << "You have seen the main capabilities of the simulator. Other specific functionalities are available. Please refers to the html documentation to access the list of all functions" << std::endl;
-  return 0;
+    std::cout << std::endl;
+    std::cout << "You have seen the main capabilities of the simulator. Other specific functionalities are available. Please refers to the html documentation to access the list of all functions" << std::endl;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 #else
 int
diff --git a/include/vpConfig.h.cmake b/include/vpConfig.h.cmake
index e9fe8aaa..dd4cc054 100644
--- a/include/vpConfig.h.cmake
+++ b/include/vpConfig.h.cmake
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpConfig.h.cmake 4308 2013-07-08 08:47:09Z fspindle $
+ * $Id: vpConfig.h.cmake 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -203,9 +203,6 @@
 // Defined if ffmpeg library available.
 #cmakedefine VISP_HAVE_FFMPEG
 
-// Defined if raw1394 and dc1394-1.x libraries available.
-#cmakedefine VISP_HAVE_DC1394_1
-
 // Defined if raw1394 and dc1394-2.x libraries available.
 #cmakedefine VISP_HAVE_DC1394_2
 
@@ -247,19 +244,6 @@
 // Defined if Irisa's Viper S850 robot available.
 #cmakedefine VISP_HAVE_VIPER850
 
-// Defined if Irisa's Cycab car-like mobile robot is found. 
-// If found, either VISP_HAVE_CYCABTK_OLD nor VISP_HAVE_CYCABTK
-// is defined.  
-#cmakedefine VISP_HAVE_CYCAB
-
-// Defined if the old cycabtk library is found. CycabTk is used to
-// communicate with Irisa's Cycab car-like robot (obsolete).  
-#cmakedefine VISP_HAVE_CYCABTK_OLD
-
-// Defined if the last cycabtk library is found. CycabTk is used to
-// communicate with Irisa's Cycab car-like robot (to use).  
-#cmakedefine VISP_HAVE_CYCABTK
-
 // Defined if the Aria library and (pthread, rt, dl libraries under Unix) is found. 
 // These libraries are used to control Pioneer mobile robots.  
 #cmakedefine VISP_HAVE_PIONEER
@@ -298,7 +282,7 @@
 //
 // On Linux, set the visibility accordingly. If C++ symbol visibility
 // is handled by the compiler, see: http://gcc.gnu.org/wiki/Visibility
-# if defined _WIN32 || defined __CYGWIN__
+# if defined(_WIN32) || defined(__CYGWIN__)
 // On Microsoft Windows, use dllimport and dllexport to tag symbols.
 #  define VISP_DLLIMPORT __declspec(dllimport)
 #  define VISP_DLLEXPORT __declspec(dllexport)
@@ -315,7 +299,7 @@
 #   define VISP_DLLEXPORT
 #   define VISP_DLLLOCAL
 #  endif // __GNUC__ >= 4
-# endif // defined _WIN32 || defined __CYGWIN__
+# endif // defined(_WIN32) || defined(__CYGWIN__)
 
 // Under Windows, for shared libraries (DLL) we need to define export on
 // compilation or import on use (like a third party project).
@@ -339,7 +323,7 @@
 
 // Add the material to produce a warning when deprecated functions are used
 #ifndef vp_deprecated
-#  if defined (UNIX)
+#  if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
 #    define vp_deprecated __attribute__((deprecated))
 #  else
 #    define vp_deprecated __declspec(deprecated)
diff --git a/macros/have_visp.m4 b/macros/have_visp.m4
index bdec273b..951eb3df 100644
--- a/macros/have_visp.m4
+++ b/macros/have_visp.m4
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: have_visp.m4 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: have_visp.m4 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c735bbc5..c60c08c2 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4059 2013-01-07 17:04:01Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/src/camera/calibration/vpCalibration.cpp b/src/camera/calibration/vpCalibration.cpp
index cb69acc3..28f5f19b 100644
--- a/src/camera/calibration/vpCalibration.cpp
+++ b/src/camera/calibration/vpCalibration.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpCalibration.cpp 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpCalibration.cpp 4663 2014-02-14 10:32:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -62,6 +62,8 @@ int vpCalibration::init()
 {
   npt = 0 ;
 
+  residual = residual_dist = 1000.;
+
   LoX.clear() ;
   LoY.clear() ;
   LoZ.clear() ;
@@ -70,10 +72,24 @@ int vpCalibration::init()
   return 0 ;
 }
 
+/*!
+  Default constructor.
+ */
 vpCalibration::vpCalibration()
+  : cMo(), cMo_dist(), cam(), cam_dist(), rMe(), eMc(), eMc_dist(),
+    npt(0), LoX(), LoY(), LoZ(), Lip(), residual(1000.), residual_dist(1000.)
 {
   init() ;
 }
+/*!
+  Copy constructor.
+ */
+vpCalibration::vpCalibration(const vpCalibration &c)
+  : cMo(), cMo_dist(), cam(), cam_dist(), rMe(), eMc(), eMc_dist(),
+    npt(0), LoX(), LoY(), LoZ(), Lip(), residual(1000.), residual_dist(1000.)
+{
+  (*this) = c;
+}
 
 
 /*!
@@ -89,8 +105,8 @@ vpCalibration::~vpCalibration()
 
   \param twinCalibration : object to be copied
 */
-void vpCalibration::operator=(vpCalibration& twinCalibration )
-                             {
+vpCalibration& vpCalibration::operator=(const vpCalibration& twinCalibration )
+{
   npt = twinCalibration.npt ;
   LoX = twinCalibration.LoX ;
   LoY = twinCalibration.LoY ;
@@ -109,6 +125,8 @@ void vpCalibration::operator=(vpCalibration& twinCalibration )
 
   eMc = twinCalibration.eMc;
   eMc_dist = twinCalibration.eMc_dist;
+
+  return (*this);
 }
 
 
@@ -147,11 +165,10 @@ int vpCalibration::addPoint(double X, double Y, double Z, vpImagePoint &ip)
 
 /*!
   Compute the pose cMo
-  \param cam : camera intrinsic parameters used for computation
-  \param cMo : computed pose
+  \param camera : camera intrinsic parameters used for computation.
+  \param cMo_est : computed pose
  */
-void
-    vpCalibration::computePose(const vpCameraParameters &cam, vpHomogeneousMatrix &cMo)
+void vpCalibration::computePose(const vpCameraParameters &camera, vpHomogeneousMatrix &cMo_est)
 {
   // The vpPose class mainly contents a list of vpPoint (that is (X,Y,Z, x, y) )
   vpPose pose ;
@@ -168,7 +185,7 @@ void
     vpPoint P;
     P.setWorldCoordinates(*it_LoX, *it_LoY, *it_LoZ);
     double x=0,y=0 ;
-    vpPixelMeterConversion::convertPoint(cam, *it_Lip, x,y)  ;
+    vpPixelMeterConversion::convertPoint(camera, *it_Lip, x,y)  ;
     P.set_x(x) ;
     P.set_y(y) ;
 
@@ -195,50 +212,47 @@ void
 
   //we keep the better initialization 
   if (residual_lagrange < residual_dementhon)
-    cMo = cMo_lagrange;
+    cMo_est = cMo_lagrange;
   else
-    cMo = cMo_dementhon;
+    cMo_est = cMo_dementhon;
   
   // the pose is now refined using the virtual visual servoing approach
   // Warning: cMo needs to be initialized otherwise it may diverge
-  pose.computePose(vpPose::VIRTUAL_VS, cMo) ;
-
+  pose.computePose(vpPose::VIRTUAL_VS, cMo_est) ;
 }
 
 /*!
   Compute and return the standard deviation expressed in pixel
   for pose matrix and camera intrinsic parameters for model without distortion.
-  \param cMo : the matrix that defines the pose to be tested.
-  \param cam : camera intrinsic parameters to be tested.
+  \param cMo_est : the matrix that defines the pose to be tested.
+  \param camera : camera intrinsic parameters to be tested.
   \return the standard deviation by point of the error in pixel .
 */
-double
-    vpCalibration::computeStdDeviation(vpHomogeneousMatrix& cMo,
-                                       vpCameraParameters& cam)
+double vpCalibration::computeStdDeviation(const vpHomogeneousMatrix& cMo_est,
+                                          const vpCameraParameters& camera)
 {
-  double residual = 0 ;
+  double residual_ = 0 ;
 
   std::list<double>::const_iterator it_LoX = LoX.begin();
   std::list<double>::const_iterator it_LoY = LoY.begin();
   std::list<double>::const_iterator it_LoZ = LoZ.begin();
   std::list<vpImagePoint>::const_iterator it_Lip = Lip.begin();
 
-  double u0 = cam.get_u0() ;
-  double v0 = cam.get_v0() ;
-  double px = cam.get_px() ;
-  double py = cam.get_py() ;
+  double u0 = camera.get_u0() ;
+  double v0 = camera.get_v0() ;
+  double px = camera.get_px() ;
+  double py = camera.get_py() ;
   vpImagePoint ip;
 
   for (unsigned int i =0 ; i < npt ; i++)
   {
-
     double oX = *it_LoX;
     double oY = *it_LoY;
     double oZ = *it_LoZ;
 
-    double cX = oX*cMo[0][0]+oY*cMo[0][1]+oZ*cMo[0][2] + cMo[0][3];
-    double cY = oX*cMo[1][0]+oY*cMo[1][1]+oZ*cMo[1][2] + cMo[1][3];
-    double cZ = oX*cMo[2][0]+oY*cMo[2][1]+oZ*cMo[2][2] + cMo[2][3];
+    double cX = oX*cMo_est[0][0]+oY*cMo_est[0][1]+oZ*cMo_est[0][2] + cMo_est[0][3];
+    double cY = oX*cMo_est[1][0]+oY*cMo_est[1][1]+oZ*cMo_est[1][2] + cMo_est[1][3];
+    double cZ = oX*cMo_est[2][0]+oY*cMo_est[2][1]+oZ*cMo_est[2][2] + cMo_est[2][3];
 
     double x = cX/cZ ;
     double y = cY/cZ ;
@@ -250,40 +264,39 @@ double
     double xp = u0 + x*px;
     double yp = v0 + y*py;
 
-    residual += (vpMath::sqr(xp-u) + vpMath::sqr(yp-v))  ;
+    residual_ += (vpMath::sqr(xp-u) + vpMath::sqr(yp-v))  ;
 
     ++it_LoX;
     ++it_LoY;
     ++it_LoZ;
     ++it_Lip;
   }
-  this->residual = residual ;
-  return sqrt(residual/npt) ;
+  this->residual = residual_ ;
+  return sqrt(residual_/npt) ;
 }
 /*!
   Compute and return the standard deviation expressed in pixel
   for pose matrix and camera intrinsic parameters with pixel to meter model.
-  \param cMo : the matrix that defines the pose to be tested.
-  \param cam : camera intrinsic parameters to be tested.
+  \param cMo_est : the matrix that defines the pose to be tested.
+  \param camera : camera intrinsic parameters to be tested.
   \return the standard deviation by point of the error in pixel .
 */
-double
-    vpCalibration::computeStdDeviation_dist(vpHomogeneousMatrix& cMo,
-                                            vpCameraParameters& cam)
+double vpCalibration::computeStdDeviation_dist(const vpHomogeneousMatrix& cMo_est,
+                                               const vpCameraParameters& camera)
 {
-  double residual = 0 ;
+  double residual_ = 0 ;
 
   std::list<double>::const_iterator it_LoX = LoX.begin();
   std::list<double>::const_iterator it_LoY = LoY.begin();
   std::list<double>::const_iterator it_LoZ = LoZ.begin();
   std::list<vpImagePoint>::const_iterator it_Lip = Lip.begin();
 
-  double u0 = cam.get_u0() ;
-  double v0 = cam.get_v0() ;
-  double px = cam.get_px() ;
-  double py = cam.get_py() ;
-  double kud = cam.get_kud() ;
-  double kdu = cam.get_kdu() ;
+  double u0 = camera.get_u0() ;
+  double v0 = camera.get_v0() ;
+  double px = camera.get_px() ;
+  double py = camera.get_py() ;
+  double kud = camera.get_kud() ;
+  double kdu = camera.get_kdu() ;
 
   double inv_px = 1/px;
   double inv_py = 1/px;
@@ -291,14 +304,13 @@ double
 
   for (unsigned int i =0 ; i < npt ; i++)
   {
-
     double oX = *it_LoX;
     double oY = *it_LoY;
     double oZ = *it_LoZ;
 
-    double cX = oX*cMo[0][0]+oY*cMo[0][1]+oZ*cMo[0][2] + cMo[0][3];
-    double cY = oX*cMo[1][0]+oY*cMo[1][1]+oZ*cMo[1][2] + cMo[1][3];
-    double cZ = oX*cMo[2][0]+oY*cMo[2][1]+oZ*cMo[2][2] + cMo[2][3];
+    double cX = oX*cMo_est[0][0]+oY*cMo_est[0][1]+oZ*cMo_est[0][2] + cMo_est[0][3];
+    double cY = oX*cMo_est[1][0]+oY*cMo_est[1][1]+oZ*cMo_est[1][2] + cMo_est[1][3];
+    double cZ = oX*cMo_est[2][0]+oY*cMo_est[2][1]+oZ*cMo_est[2][2] + cMo_est[2][3];
 
     double x = cX/cZ ;
     double y = cY/cZ ;
@@ -312,23 +324,23 @@ double
     double xp = u0 + x*px*r2ud;
     double yp = v0 + y*py*r2ud;
 
-    residual += (vpMath::sqr(xp-u) + vpMath::sqr(yp-v))  ;
+    residual_ += (vpMath::sqr(xp-u) + vpMath::sqr(yp-v))  ;
 
     double r2du = (vpMath::sqr((u-u0)*inv_px)+vpMath::sqr((v-v0)*inv_py)) ;
 
     xp = u0 + x*px - kdu*(u-u0)*r2du;
     yp = v0 + y*py - kdu*(v-v0)*r2du;
 
-    residual += (vpMath::sqr(xp-u) + vpMath::sqr(yp-v))  ;
+    residual_ += (vpMath::sqr(xp-u) + vpMath::sqr(yp-v))  ;
     ++it_LoX;
     ++it_LoY;
     ++it_LoZ;
     ++it_Lip;
   }
-  residual /=2;
+  residual_ /=2;
 
-  this->residual_dist = residual;
-  return sqrt(residual/npt) ;
+  this->residual_dist = residual_;
+  return sqrt(residual_/npt) ;
 }
 
 /*!
@@ -349,26 +361,26 @@ void
   Compute the calibration according to the desired method using one pose.
 
   \param method : Method that will be used to estimate the parameters.
-  \param cMo : the homogeneous matrix that defines the pose.
-  \param cam : intrinsic camera parameters.
+  \param cMo_est : estimated homogeneous matrix that defines the pose.
+  \param cam_est : estimated intrinsic camera parameters.
   \param verbose : set at true if information about the residual at each loop
   of the algorithm is hoped.
 
   \return 0 if the calibration computation succeed.
 */
 int vpCalibration::computeCalibration(vpCalibrationMethodType method,
-                                      vpHomogeneousMatrix &cMo,
-                                      vpCameraParameters &cam,
+                                      vpHomogeneousMatrix &cMo_est,
+                                      vpCameraParameters &cam_est,
                                       bool verbose)
 {
   try{
-    computePose(cam,cMo);
+    computePose(cam_est,cMo_est);
     switch (method)
     {
     case CALIB_LAGRANGE :
     case CALIB_LAGRANGE_VIRTUAL_VS :
       {
-	      calibLagrange(cam, cMo);
+        calibLagrange(cam_est, cMo_est);
       }
       break;
     case CALIB_VIRTUAL_VS:
@@ -386,23 +398,23 @@ int vpCalibration::computeCalibration(vpCalibrationMethodType method,
     case CALIB_LAGRANGE_VIRTUAL_VS_DIST:
       {
         if (verbose){std::cout << "start calibration without distortion"<< std::endl;}
-        calibVVS(cam, cMo, verbose);
+        calibVVS(cam_est, cMo_est, verbose);
       }
       break ;
     case CALIB_LAGRANGE:
     default:
       break;
     }
-    this->cMo = cMo;
-    this->cMo_dist = cMo;
+    this->cMo = cMo_est;
+    this->cMo_dist = cMo_est;
 
     //Print camera parameters
     if(verbose){
       //       std::cout << "Camera parameters without distortion :" << std::endl;
-      cam.printParameters();
+      cam_est.printParameters();
     }
 
-    this->cam = cam;
+    this->cam = cam_est;
 
     switch (method)
     {
@@ -410,7 +422,7 @@ int vpCalibration::computeCalibration(vpCalibrationMethodType method,
     case CALIB_LAGRANGE_VIRTUAL_VS_DIST:
       {
         if (verbose){std::cout << "start calibration with distortion"<< std::endl;}
-        calibVVSWithDistortion(cam, cMo, verbose);
+        calibVVSWithDistortion(cam_est, cMo_est, verbose);
       }
       break ;
     case CALIB_LAGRANGE:
@@ -424,12 +436,12 @@ int vpCalibration::computeCalibration(vpCalibrationMethodType method,
       //       std::cout << "Camera parameters without distortion :" << std::endl;
       this->cam.printParameters();
       //       std::cout << "Camera parameters with distortion :" << std::endl;
-      cam.printParameters();
+      cam_est.printParameters();
     }
 
-    this->cam_dist = cam ;
+    this->cam_dist = cam_est ;
 
-    this->cMo_dist = cMo;
+    this->cMo_dist = cMo_est;
     return 0 ;
   }
   catch(...){
@@ -442,7 +454,7 @@ int vpCalibration::computeCalibration(vpCalibrationMethodType method,
 
   \param method : Method used to estimate the camera parameters.
   \param table_cal : Vector of vpCalibration.
-  \param cam : Estimated intrinsic camera parameters.
+  \param cam_est : Estimated intrinsic camera parameters.
   \param globalReprojectionError : Global reprojection error or global residual.
   \param verbose : Set at true if information about the residual at each loop
   of the algorithm is hoped.
@@ -451,7 +463,7 @@ int vpCalibration::computeCalibration(vpCalibrationMethodType method,
 */
 int vpCalibration::computeCalibrationMulti(vpCalibrationMethodType method,
                                            std::vector<vpCalibration> &table_cal,
-                                           vpCameraParameters& cam,
+                                           vpCameraParameters& cam_est,
                                            double &globalReprojectionError,
                                            bool verbose)
 {
@@ -459,7 +471,7 @@ int vpCalibration::computeCalibrationMulti(vpCalibrationMethodType method,
     unsigned int nbPose = (unsigned int) table_cal.size();
     for(unsigned int i=0;i<nbPose;i++){
       if(table_cal[i].get_npt()>3)
-        table_cal[i].computePose(cam,table_cal[i].cMo);
+        table_cal[i].computePose(cam_est,table_cal[i].cMo);
     }
     switch (method) {   
     case CALIB_LAGRANGE :
@@ -469,9 +481,9 @@ int vpCalibration::computeCalibrationMulti(vpCalibrationMethodType method,
         return -1 ;
       }
       else {
-        table_cal[0].calibLagrange(cam,table_cal[0].cMo);
-	      table_cal[0].cam = cam ;
-        table_cal[0].cam_dist = cam ;
+        table_cal[0].calibLagrange(cam_est,table_cal[0].cMo);
+        table_cal[0].cam = cam_est ;
+        table_cal[0].cam_dist = cam_est ;
         table_cal[0].cMo_dist = table_cal[0].cMo ;
       }
       break;
@@ -484,22 +496,22 @@ int vpCalibration::computeCalibrationMulti(vpCalibrationMethodType method,
         return -1 ;
       }
       else {
-	      table_cal[0].calibLagrange(cam,table_cal[0].cMo);
-	      table_cal[0].cam = cam ;
-        table_cal[0].cam_dist = cam ;
+        table_cal[0].calibLagrange(cam_est,table_cal[0].cMo);
+        table_cal[0].cam = cam_est ;
+        table_cal[0].cam_dist = cam_est ;
         table_cal[0].cMo_dist = table_cal[0].cMo ;
       }
     case CALIB_VIRTUAL_VS:
     case CALIB_VIRTUAL_VS_DIST:
       {
-        calibVVSMulti(table_cal, cam, globalReprojectionError, verbose);
+        calibVVSMulti(table_cal, cam_est, globalReprojectionError, verbose);
       }
       break ;
     }
     //Print camera parameters
     if(verbose){
       //       std::cout << "Camera parameters without distortion :" << std::endl;
-      cam.printParameters();
+      cam_est.printParameters();
     }
 
     switch (method)
@@ -515,7 +527,7 @@ int vpCalibration::computeCalibrationMulti(vpCalibrationMethodType method,
         if(verbose)
           std::cout << "Compute camera parameters with distortion"<<std::endl;
 
-        calibVVSWithDistortionMulti(table_cal, cam, globalReprojectionError, verbose);
+        calibVVSWithDistortionMulti(table_cal, cam_est, globalReprojectionError, verbose);
       }
       break ;
     }
@@ -524,7 +536,7 @@ int vpCalibration::computeCalibrationMulti(vpCalibrationMethodType method,
       //       std::cout << "Camera parameters without distortion :" << std::endl;
       table_cal[0].cam.printParameters();
       //       std::cout << "Camera parameters with distortion:" << std::endl;
-      cam.printParameters();
+      cam_est.printParameters();
       std::cout<<std::endl;
     }
     return 0 ;
@@ -635,13 +647,17 @@ int vpCalibration::readData(const char* filename)
   vpImagePoint ip;
   std::ifstream f;
   f.open(filename);
-  if (f != NULL){
-    int n ;
+  if (! f.fail()){
+    unsigned int n ;
     f >> n ;
     std::cout << "There are "<< n <<" point on the calibration grid " << std::endl ;
 
     clearPoint() ;
-    for (int i=0 ; i < n ; i++)
+
+    if (n > 100000)
+      throw(vpException(vpException::badValue, "Bad number of point in the calibration grid"));
+
+    for (unsigned int i=0 ; i < n ; i++)
     {
       double x, y, z, u, v ;
       f >> x >> y >> z >> u >> v ;
@@ -680,7 +696,7 @@ int vpCalibration::readGrid(const char* filename, unsigned int &n,
   try{
     std::ifstream f;
     f.open(filename);
-    if (f != NULL){
+    if (! f.fail()){
 
       f >> n ;
       if(verbose)   
@@ -693,6 +709,9 @@ int vpCalibration::readGrid(const char* filename, unsigned int &n,
       oY.clear();
       oZ.clear();
 
+      if (n > 100000)
+        throw(vpException(vpException::badValue, "Bad number of point in the calibration grid"));
+
       for (unsigned int i=0 ; i < n ; i++)
       {
         f >> no_pt >> x >> y >> z ;
@@ -760,7 +779,6 @@ int vpCalibration::displayGrid(vpImage<unsigned char> &I, vpColor color,
 
   for (unsigned int i =0 ; i < npt ; i++)
   {
-
     double oX = *it_LoX;
     double oY = *it_LoY;
     double oZ = *it_LoZ;
@@ -814,7 +832,7 @@ int vpCalibration::displayGrid(vpImage<unsigned char> &I, vpColor color,
   \param method : Method used to estimate the camera parameters.
   \param nbPose : number of images used to compute multi-images calibration
   \param table_cal : array of vpCalibration.
-  \param cam : intrinsic camera parameters.
+  \param cam_est : estimated intrinsic camera parameters.
   \param verbose : set at true if information about the residual at each loop
   of the algorithm is hoped.
 
@@ -823,13 +841,13 @@ int vpCalibration::displayGrid(vpImage<unsigned char> &I, vpColor color,
 int vpCalibration::computeCalibrationMulti(vpCalibrationMethodType method,
                                            unsigned int nbPose,
                                            vpCalibration table_cal[],
-                                           vpCameraParameters& cam,
+                                           vpCameraParameters& cam_est,
                                            bool verbose)
 {
   try{
     for(unsigned int i=0;i<nbPose;i++){
       if(table_cal[i].get_npt()>3)
-        table_cal[i].computePose(cam,table_cal[i].cMo);
+        table_cal[i].computePose(cam_est,table_cal[i].cMo);
     }
     switch (method) {
     case CALIB_LAGRANGE :
@@ -839,9 +857,9 @@ int vpCalibration::computeCalibrationMulti(vpCalibrationMethodType method,
         return -1 ;
       }
       else {
-        table_cal[0].calibLagrange(cam,table_cal[0].cMo);
-        table_cal[0].cam = cam ;
-        table_cal[0].cam_dist = cam ;
+        table_cal[0].calibLagrange(cam_est,table_cal[0].cMo);
+        table_cal[0].cam = cam_est ;
+        table_cal[0].cam_dist = cam_est ;
         table_cal[0].cMo_dist = table_cal[0].cMo ;
       }
       break;
@@ -854,22 +872,22 @@ int vpCalibration::computeCalibrationMulti(vpCalibrationMethodType method,
         return -1 ;
       }
       else {
-        table_cal[0].calibLagrange(cam,table_cal[0].cMo);
-        table_cal[0].cam = cam ;
-        table_cal[0].cam_dist = cam ;
+        table_cal[0].calibLagrange(cam_est,table_cal[0].cMo);
+        table_cal[0].cam = cam_est ;
+        table_cal[0].cam_dist = cam_est ;
         table_cal[0].cMo_dist = table_cal[0].cMo ;
       }
     case CALIB_VIRTUAL_VS:
     case CALIB_VIRTUAL_VS_DIST:
       {
-        calibVVSMulti(nbPose, table_cal, cam, verbose);
+        calibVVSMulti(nbPose, table_cal, cam_est, verbose);
       }
       break ;
     }
     //Print camera parameters
     if(verbose){
       //       std::cout << "Camera parameters without distortion :" << std::endl;
-      cam.printParameters();
+      cam_est.printParameters();
     }
 
     switch (method)
@@ -885,7 +903,7 @@ int vpCalibration::computeCalibrationMulti(vpCalibrationMethodType method,
         if(verbose)
           std::cout << "Compute camera parameters with distortion"<<std::endl;
 
-        calibVVSWithDistortionMulti(nbPose, table_cal, cam, verbose);
+        calibVVSWithDistortionMulti(nbPose, table_cal, cam_est, verbose);
       }
       break ;
     }
@@ -894,7 +912,7 @@ int vpCalibration::computeCalibrationMulti(vpCalibrationMethodType method,
       //       std::cout << "Camera parameters without distortion :" << std::endl;
       table_cal[0].cam.printParameters();
       //       std::cout << "Camera parameters with distortion:" << std::endl;
-      cam.printParameters();
+      cam_est.printParameters();
       std::cout<<std::endl;
     }
     return 0 ;
@@ -981,7 +999,7 @@ int vpCalibration::readGrid(const char* filename,unsigned int &n,
   try{
     std::ifstream f;
     f.open(filename);
-    if (f != NULL){
+    if (! f.fail()){
 
       f >> n ;
       if(verbose)
@@ -992,6 +1010,10 @@ int vpCalibration::readGrid(const char* filename,unsigned int &n,
       oX.front();
       oY.front();
       oZ.front();
+
+      if (n > 100000)
+        throw(vpException(vpException::badValue, "Bad number of point in the calibration grid"));
+
       for (unsigned int i=0 ; i < n ; i++)
       {
         f >> no_pt >> x >> y >> z ;
diff --git a/src/camera/calibration/vpCalibration.h b/src/camera/calibration/vpCalibration.h
index a75150cc..ed44d2f8 100644
--- a/src/camera/calibration/vpCalibration.h
+++ b/src/camera/calibration/vpCalibration.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpCalibration.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpCalibration.h 4663 2014-02-14 10:32:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -105,36 +105,30 @@ public:
   vpHomogeneousMatrix eMc_dist;
 
 public:
-  int init() ;
-
-  //! Suppress all the point in the array of point
-  int clearPoint() ;
-  // Add a new point in this array
-  int addPoint(double X, double Y, double Z, vpImagePoint &ip) ;
-
-  //! Constructor
+  // Constructor
   vpCalibration() ;
+  vpCalibration(const vpCalibration& c) ;
 
-  //! Destructor
+  // Destructor
   virtual ~vpCalibration() ;
-  //! = operator
-  void operator=(vpCalibration& twinCalibration );
 
-  //!get the residual in pixels
-  double getResidual(void) const {return residual;}
-  //!get the residual for perspective projection with distortion (in pixels)
-  double getResidual_dist(void) const {return residual_dist;}
-  //!get the number of points
-  unsigned int get_npt() const {return npt;}
+  // Add a new point in this array
+  int addPoint(double X, double Y, double Z, vpImagePoint &ip) ;
+
+  // = operator
+  vpCalibration& operator=(const vpCalibration& twinCalibration);
 
   static void calibrationTsai(std::vector<vpHomogeneousMatrix> &cMo,
                               std::vector<vpHomogeneousMatrix> &rMe,
                               vpHomogeneousMatrix &eMc);
 
+  //! Suppress all the point in the array of point
+  int clearPoint() ;
+
   void computeStdDeviation(double &deviation, double &deviation_dist);
   int computeCalibration(vpCalibrationMethodType method,
-                         vpHomogeneousMatrix &cMo,
-                         vpCameraParameters &cam,
+                         vpHomogeneousMatrix &cMo_est,
+                         vpCameraParameters &cam_est,
                          bool verbose = false) ;
   static int computeCalibrationMulti(vpCalibrationMethodType method,
                                      std::vector<vpCalibration> &table_cal,
@@ -145,17 +139,27 @@ public:
   static int computeCalibrationTsai(std::vector<vpCalibration> &table_cal,
                                     vpHomogeneousMatrix &eMc,
                                     vpHomogeneousMatrix &eMc_dist);
-  double computeStdDeviation(vpHomogeneousMatrix &cMo,
-                             vpCameraParameters &cam);
-  double computeStdDeviation_dist(vpHomogeneousMatrix &cMo,
-                                  vpCameraParameters &cam);
+  double computeStdDeviation(const vpHomogeneousMatrix &cMo_est,
+                             const vpCameraParameters &camera);
+  double computeStdDeviation_dist(const vpHomogeneousMatrix &cMo,
+                                  const vpCameraParameters &cam);
   int displayData(vpImage<unsigned char> &I, vpColor color=vpColor::red,
                   unsigned int thickness=1) ;
   int displayGrid(vpImage<unsigned char> &I, vpColor color=vpColor::yellow,
                   unsigned int thickness=1) ;
 
-  //!set the gain for the virtual visual servoing algorithm
+  //! Set the gain for the virtual visual servoing algorithm.
   static double getLambda(){return gain;}
+
+  //!get the residual in pixels
+  double getResidual(void) const {return residual;}
+  //!get the residual for perspective projection with distortion (in pixels)
+  double getResidual_dist(void) const {return residual_dist;}
+  //!get the number of points
+  unsigned int get_npt() const {return npt;}
+
+  int init() ;
+
   int readData(const char *filename) ;
   static int readGrid(const char *filename,unsigned int &n,
                       std::list<double> &oX, std::list<double> &oY, std::list<double> &oZ,
diff --git a/src/camera/calibration/vpCalibrationException.h b/src/camera/calibration/vpCalibrationException.h
index 4e83a608..17724202 100644
--- a/src/camera/calibration/vpCalibrationException.h
+++ b/src/camera/calibration/vpCalibrationException.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpCalibrationException.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpCalibrationException.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -70,12 +70,12 @@
  */
 class VISP_EXPORT vpCalibrationException : public vpException
 {
-public:
-  /*!
+  public:
+    /*!
     \brief Lists the possible error than can be emmited while calling
     vpCalibration member
    */
-  enum errorCodeEnum
+    enum errorCodeEnum
     {
       //! error returns by a constructor
       constructionError,
@@ -90,25 +90,19 @@ public:
       forbiddenOperatorError,
     } ;
 
-public:
-  vpCalibrationException (const int code, const char * msg)
-    : vpException(code, msg){ ; }
-  vpCalibrationException (const int code, const std::string & msg)
-    : vpException(code, msg){ ; }
-  vpCalibrationException (const int code)
-    : vpException(code){ ; }
- // vpMatrixException() : vpException() { ;}
+  public:
+    vpCalibrationException (const int id,  const char* format, ...)
+    {
+      this->code = id;
+      va_list args;
+      va_start(args, format);
+      setMessage(format, args);
+      va_end (args);
+    }
+    vpCalibrationException (const int id, const std::string & msg)
+      : vpException(id, msg){ ; }
+    vpCalibrationException (const int id)
+      : vpException(id){ ; }
 };
 
-
-
-
-
-#endif /* #ifndef __vpCalibrationException_ERROR_H */
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+#endif
diff --git a/src/camera/calibration/vpCalibrationTools.cpp b/src/camera/calibration/vpCalibrationTools.cpp
index 54a7c0e2..37230606 100644
--- a/src/camera/calibration/vpCalibrationTools.cpp
+++ b/src/camera/calibration/vpCalibrationTools.cpp
@@ -10,8 +10,7 @@
 #undef MIN
  
 void
-vpCalibration::calibLagrange(
-  vpCameraParameters &cam, vpHomogeneousMatrix &cMo)
+vpCalibration::calibLagrange(vpCameraParameters &cam_est, vpHomogeneousMatrix &cMo_est)
 {
 
   vpMatrix A(2*npt,3) ;
@@ -141,7 +140,7 @@ vpCalibration::calibLagrange(
   resul[3] = sqrt(sol[6]*sol[6]+sol[7]*sol[7]+sol[8]*sol[8] /* py */
                   -resul[1]*resul[1]);
 
-  cam.initPersProjWithoutDistortion(resul[2],resul[3],resul[0],resul[1]);
+  cam_est.initPersProjWithoutDistortion(resul[2],resul[3],resul[0],resul[1]);
 
   resul[4] = (sol[9]-sol[11]*resul[0])/resul[2];  /* X0 */
   resul[5] = (sol[10]-sol[11]*resul[1])/resul[3]; /* Y0 */
@@ -159,12 +158,12 @@ vpCalibration::calibLagrange(
   for (unsigned int i=0 ; i < 3 ; i++)
   {
     for (unsigned int j=0 ; j < 3 ; j++)
-      cMo[i][j] = rd[i][j];
+      cMo_est[i][j] = rd[i][j];
   }
-  for (unsigned int i=0 ; i < 3 ; i++) cMo[i][3] = resul[i+4] ;
+  for (unsigned int i=0 ; i < 3 ; i++) cMo_est[i][3] = resul[i+4] ;
 
-  this->cMo = cMo ;
-  this->cMo_dist = cMo;
+  this->cMo = cMo_est ;
+  this->cMo_dist = cMo_est;
 
   double deviation,deviation_dist;
   this->computeStdDeviation(deviation,deviation_dist);
@@ -173,11 +172,11 @@ vpCalibration::calibLagrange(
 
 
 void
-vpCalibration::calibVVS(
-  vpCameraParameters &cam,
-  vpHomogeneousMatrix &cMo,
-  bool verbose)
+vpCalibration::calibVVS(vpCameraParameters &cam_est,
+                        vpHomogeneousMatrix &cMo_est,
+                        bool verbose)
 {
+  std::ios::fmtflags original_flags( std::cout.flags() );
   std::cout.precision(10);
   unsigned int   n_points = npt ;
 
@@ -199,7 +198,6 @@ vpCalibration::calibVVS(
 
   for (unsigned int i =0 ; i < n_points ; i++)
   {
-
     oX[i]  = *it_LoX;
     oY[i]  = *it_LoY;
     oZ[i]  = *it_LoZ;
@@ -209,7 +207,6 @@ vpCalibration::calibVVS(
     u[i] = ip.get_u()  ;
     v[i] = ip.get_v()  ;
 
-
     ++it_LoX;
     ++it_LoY;
     ++it_LoZ;
@@ -223,22 +220,21 @@ vpCalibration::calibVVS(
   double r =1e12-1;
   while (vpMath::equal(residu_1,r,threshold) == false && iter < nbIterMax)
   {
-
     iter++ ;
     residu_1 = r ;
 
-    double px = cam.get_px();
-    double py = cam.get_py();
-    double u0 = cam.get_u0();
-    double v0 = cam.get_v0();
+    double px = cam_est.get_px();
+    double py = cam_est.get_py();
+    double u0 = cam_est.get_u0();
+    double v0 = cam_est.get_v0();
 
     r = 0 ;
 
     for (unsigned int i=0 ; i < n_points; i++)
     {
-      cX[i] = oX[i]*cMo[0][0]+oY[i]*cMo[0][1]+oZ[i]*cMo[0][2] + cMo[0][3];
-      cY[i] = oX[i]*cMo[1][0]+oY[i]*cMo[1][1]+oZ[i]*cMo[1][2] + cMo[1][3];
-      cZ[i] = oX[i]*cMo[2][0]+oY[i]*cMo[2][1]+oZ[i]*cMo[2][2] + cMo[2][3];
+      cX[i] = oX[i]*cMo_est[0][0]+oY[i]*cMo_est[0][1]+oZ[i]*cMo_est[0][2] + cMo_est[0][3];
+      cY[i] = oX[i]*cMo_est[1][0]+oY[i]*cMo_est[1][1]+oZ[i]*cMo_est[1][2] + cMo_est[1][3];
+      cZ[i] = oX[i]*cMo_est[2][0]+oY[i]*cMo_est[2][1]+oZ[i]*cMo_est[2][2] + cMo_est[2][3];
 
       Pd[2*i] =   u[i] ;
       Pd[2*i+1] = v[i] ;
@@ -249,7 +245,6 @@ vpCalibration::calibVVS(
       r += ((vpMath::sqr(P[2*i]-Pd[2*i]) + vpMath::sqr(P[2*i+1]-Pd[2*i+1]))) ;
     }
 
-
     vpColVector error ;
     error = P-Pd ;
     //r = r/n_points ;
@@ -257,7 +252,6 @@ vpCalibration::calibVVS(
     vpMatrix L(n_points*2,10) ;
     for (unsigned int i=0 ; i < n_points; i++)
     {
-
       double x = cX[i] ;
       double y = cY[i] ;
       double z = cZ[i] ;
@@ -267,7 +261,6 @@ vpCalibration::calibVVS(
       double Y =   y*inv_z ;
 
       //---------------
-
       {
         L[2*i][0] =  px * (-inv_z) ;
         L[2*i][1] =  0 ;
@@ -296,8 +289,6 @@ vpCalibration::calibVVS(
         L[2*i+1][8]= 0;
         L[2*i+1][9]= Y ;
       }
-
-
     }    // end interaction
     vpMatrix Lp ;
     Lp = L.pseudoInverse(1e-10) ;
@@ -312,10 +303,10 @@ vpCalibration::calibVVS(
     for (unsigned int i=0 ; i <6 ; i++)
       Tc_v[i] = Tc[i] ;
 
-    cam.initPersProjWithoutDistortion(px+Tc[8],py+Tc[9],
+    cam_est.initPersProjWithoutDistortion(px+Tc[8],py+Tc[9],
                                       u0+Tc[6],v0+Tc[7]) ;
 
-    cMo = vpExponentialMap::direct(Tc_v).inverse()*cMo ;
+    cMo_est = vpExponentialMap::direct(Tc_v).inverse()*cMo_est ;
     if (verbose)
       std::cout <<  " std dev " << sqrt(r/n_points) << std::endl;
 
@@ -326,21 +317,23 @@ vpCalibration::calibVVS(
     throw(vpCalibrationException(vpCalibrationException::convergencyError,
                                  "Maximum number of iterations reached")) ;
   }
-  this->cMo   = cMo;
-  this->cMo_dist = cMo;
+  this->cMo   = cMo_est;
+  this->cMo_dist = cMo_est;
   this->residual = r;
   this->residual_dist = r;
   if (verbose)
     std::cout <<  " std dev " << sqrt(r/n_points) << std::endl;
-
+  // Restore ostream format
+  std::cout.flags(original_flags);
 }
 
 void
 vpCalibration::calibVVSMulti(std::vector<vpCalibration> &table_cal,
-                             vpCameraParameters &cam,
+                             vpCameraParameters &cam_est,
                              double &globalReprojectionError,
                              bool verbose)
 {
+  std::ios::fmtflags original_flags( std::cout.flags() );
   std::cout.precision(10);
   unsigned int nbPoint[256]; //number of points by image
   unsigned int nbPointTotal = 0; //total number of points
@@ -353,6 +346,12 @@ vpCalibration::calibVVSMulti(std::vector<vpCalibration> &table_cal,
     nbPointTotal += nbPoint[i];
   }
 
+  if (nbPointTotal < 4) {
+    //vpERROR_TRACE("Not enough point to calibrate");
+    throw(vpCalibrationException(vpCalibrationException::notInitializedError,
+                                 "Not enough point to calibrate")) ;
+  }
+
   vpColVector oX(nbPointTotal), cX(nbPointTotal)  ;
   vpColVector oY(nbPointTotal), cY(nbPointTotal) ;
   vpColVector oZ(nbPointTotal), cZ(nbPointTotal) ;
@@ -400,10 +399,10 @@ vpCalibration::calibVVSMulti(std::vector<vpCalibration> &table_cal,
     iter++ ;
     residu_1 = r ;
     
-    double px = cam.get_px();
-    double py = cam.get_py();
-    double u0 = cam.get_u0();
-    double v0 = cam.get_v0();
+    double px = cam_est.get_px();
+    double py = cam_est.get_py();
+    double u0 = cam_est.get_u0();
+    double v0 = cam_est.get_v0();
    
     r = 0 ;
     curPoint = 0 ; //current point indice
@@ -504,7 +503,7 @@ vpCalibration::calibVVSMulti(std::vector<vpCalibration> &table_cal,
     for (unsigned int i = 0 ; i < nbPose6 ; i++)
       Tc_v[i] = Tc[i] ;
 
-    cam.initPersProjWithoutDistortion(px+Tc[nbPose6+2],
+    cam_est.initPersProjWithoutDistortion(px+Tc[nbPose6+2],
                                       py+Tc[nbPose6+3],
                                       u0+Tc[nbPose6],
                                       v0+Tc[nbPose6+1]) ;
@@ -534,20 +533,22 @@ vpCalibration::calibVVSMulti(std::vector<vpCalibration> &table_cal,
   for (unsigned int p = 0 ; p < nbPose ; p++)
   {
     table_cal[p].cMo_dist = table_cal[p].cMo ;
-    table_cal[p].cam = cam;
-    table_cal[p].cam_dist = cam;
+    table_cal[p].cam = cam_est;
+    table_cal[p].cam_dist = cam_est;
     double deviation,deviation_dist;
     table_cal[p].computeStdDeviation(deviation,deviation_dist);
   }
   globalReprojectionError = sqrt(r/nbPointTotal);
+  // Restore ostream format
+  std::cout.flags(original_flags);
 }
 
 void
-vpCalibration::calibVVSWithDistortion(
-  vpCameraParameters& cam,
-  vpHomogeneousMatrix& cMo,
-  bool verbose)
+vpCalibration::calibVVSWithDistortion(vpCameraParameters& cam_est,
+                                      vpHomogeneousMatrix& cMo_est,
+                                      bool verbose)
 {
+  std::ios::fmtflags original_flags( std::cout.flags() );
   std::cout.precision(10);
   unsigned int n_points =npt ;
 
@@ -590,23 +591,21 @@ vpCalibration::calibVVSWithDistortion(
   double r =1e12-1;
   while (vpMath::equal(residu_1,r,threshold)  == false && iter < nbIterMax)
   {
-
     iter++ ;
     residu_1 = r ;
 
-
     r = 0 ;
-    double u0 = cam.get_u0() ;
-    double v0 = cam.get_v0() ;
+    double u0 = cam_est.get_u0() ;
+    double v0 = cam_est.get_v0() ;
 
-    double px = cam.get_px() ;
-    double py = cam.get_py() ;
+    double px = cam_est.get_px() ;
+    double py = cam_est.get_py() ;
     
     double inv_px = 1/px ;
     double inv_py = 1/py ;
 
-    double kud = cam.get_kud() ;
-    double kdu = cam.get_kdu() ;
+    double kud = cam_est.get_kud() ;
+    double kdu = cam_est.get_kdu() ;
 
     double k2ud = 2*kud;
     double k2du = 2*kdu;    
@@ -619,9 +618,9 @@ vpCalibration::calibVVSWithDistortion(
       unsigned int i42 = 4*i+2;
       unsigned int i43 = 4*i+3;
          
-      cX[i] = oX[i]*cMo[0][0]+oY[i]*cMo[0][1]+oZ[i]*cMo[0][2] + cMo[0][3];
-      cY[i] = oX[i]*cMo[1][0]+oY[i]*cMo[1][1]+oZ[i]*cMo[1][2] + cMo[1][3];
-      cZ[i] = oX[i]*cMo[2][0]+oY[i]*cMo[2][1]+oZ[i]*cMo[2][2] + cMo[2][3];
+      cX[i] = oX[i]*cMo_est[0][0]+oY[i]*cMo_est[0][1]+oZ[i]*cMo_est[0][2] + cMo_est[0][3];
+      cY[i] = oX[i]*cMo_est[1][0]+oY[i]*cMo_est[1][1]+oZ[i]*cMo_est[1][2] + cMo_est[1][3];
+      cZ[i] = oX[i]*cMo_est[2][0]+oY[i]*cMo_est[2][1]+oZ[i]*cMo_est[2][2] + cMo_est[2][3];
 
       double x = cX[i] ;
       double y = cY[i] ;
@@ -670,7 +669,6 @@ vpCalibration::calibVVSWithDistortion(
       P[i42] = u0 + px*X*kr2ud ;
       P[i43] = v0 + py*Y*kr2ud ;
 
-
       r += (vpMath::sqr(P[i4]-Pd[i4]) +
           vpMath::sqr(P[i41]-Pd[i41]) +
           vpMath::sqr(P[i42]-Pd[i42]) +
@@ -762,12 +760,12 @@ vpCalibration::calibVVSWithDistortion(
     for (unsigned int i=0 ; i <6 ; i++)
       Tc_v[i] = Tc[i] ;
 
-    cam.initPersProjWithDistortion(px + Tc[8], py + Tc[9],
+    cam_est.initPersProjWithDistortion(px + Tc[8], py + Tc[9],
                                    u0 + Tc[6], v0 + Tc[7],
                                    kud + Tc[11],
                                    kdu + Tc[10]);
 
-    cMo = vpExponentialMap::direct(Tc_v).inverse()*cMo ;
+    cMo_est = vpExponentialMap::direct(Tc_v).inverse()*cMo_est ;
     if (verbose)
       std::cout <<  " std dev " << sqrt(r/n_points) << std::endl;
 
@@ -779,19 +777,23 @@ vpCalibration::calibVVSWithDistortion(
                                  "Maximum number of iterations reached")) ;
   }
   this->residual_dist = r;
-  this->cMo_dist = cMo ;
-  this->cam_dist = cam ;
+  this->cMo_dist = cMo_est ;
+  this->cam_dist = cam_est ;
 
   if (verbose)
     std::cout <<  " std dev " << sqrt(r/n_points) << std::endl;
+
+  // Restore ostream format
+  std::cout.flags(original_flags);
 }
 
 
 void
 vpCalibration::calibVVSWithDistortionMulti(std::vector<vpCalibration> &table_cal,
-                                           vpCameraParameters &cam, double &globalReprojectionError,
+                                           vpCameraParameters &cam_est, double &globalReprojectionError,
                                            bool verbose)
 {
+  std::ios::fmtflags original_flags( std::cout.flags() );
   std::cout.precision(10);
   unsigned int nbPoint[1024]; //number of points by image
   unsigned int nbPointTotal = 0; //total number of points
@@ -803,6 +805,13 @@ vpCalibration::calibVVSWithDistortionMulti(std::vector<vpCalibration> &table_cal
     nbPointTotal += nbPoint[i];
   }
 
+  if (nbPointTotal < 4)
+  {
+    //vpERROR_TRACE("Not enough point to calibrate");
+    throw(vpCalibrationException(vpCalibrationException::notInitializedError,
+                                 "Not enough point to calibrate")) ;
+  }
+
   vpColVector oX(nbPointTotal), cX(nbPointTotal)  ;
   vpColVector oY(nbPointTotal), cY(nbPointTotal) ;
   vpColVector oZ(nbPointTotal), cZ(nbPointTotal) ;
@@ -869,16 +878,16 @@ vpCalibration::calibVVSWithDistortionMulti(std::vector<vpCalibration> &table_cal
 
     vpMatrix L(nbPointTotal*4,nbPose6+6) ;
     curPoint = 0 ; //current point indice
-    double px = cam.get_px() ;
-    double py = cam.get_py() ;
-    double u0 = cam.get_u0() ;
-    double v0 = cam.get_v0() ;
+    double px = cam_est.get_px() ;
+    double py = cam_est.get_py() ;
+    double u0 = cam_est.get_u0() ;
+    double v0 = cam_est.get_v0() ;
 
     double inv_px = 1/px ;
     double inv_py = 1/py ;
 
-    double kud = cam.get_kud() ;
-    double kdu = cam.get_kdu() ;
+    double kud = cam_est.get_kud() ;
+    double kdu = cam_est.get_kdu() ;
 
     double k2ud = 2*kud;
     double k2du = 2*kdu;
@@ -1031,7 +1040,7 @@ vpCalibration::calibVVSWithDistortionMulti(std::vector<vpCalibration> &table_cal
     for (unsigned int i = 0 ; i < 6*nbPose ; i++)
       Tc_v[i] = Tc[i] ;
 
-    cam.initPersProjWithDistortion(  px+Tc[nbPose6+2], py+Tc[nbPose6+3],
+    cam_est.initPersProjWithDistortion(  px+Tc[nbPose6+2], py+Tc[nbPose6+3],
                                      u0+Tc[nbPose6], v0+Tc[nbPose6+1],
                                      kud + Tc[nbPose6+5],
                                      kdu + Tc[nbPose6+4]);
@@ -1062,12 +1071,15 @@ vpCalibration::calibVVSWithDistortionMulti(std::vector<vpCalibration> &table_cal
   int totalPoints = 0;
   for (unsigned int p = 0 ; p < nbPose ; p++)
   {
-    table_cal[p].cam_dist = cam ;
-    perViewError = table_cal[p].computeStdDeviation_dist(table_cal[p].cMo_dist, cam);
+    table_cal[p].cam_dist = cam_est ;
+    perViewError = table_cal[p].computeStdDeviation_dist(table_cal[p].cMo_dist, cam_est);
     totalError += perViewError*perViewError * table_cal[p].npt;
     totalPoints += (int)table_cal[p].npt;
   }
   globalReprojectionError = sqrt(r/(nbPointTotal));
+
+  // Restore ostream format
+  std::cout.flags(original_flags);
 }
 
 #ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
@@ -1488,9 +1500,10 @@ void vpCalibration::calibrationTsai(std::vector<vpHomogeneousMatrix>& cMo,
 void
 vpCalibration::calibVVSMulti(unsigned int nbPose,
                              vpCalibration table_cal[],
-                             vpCameraParameters &cam,
+                             vpCameraParameters &cam_est,
                              bool verbose)
 {
+  std::ios::fmtflags original_flags( std::cout.flags() );
   std::cout.precision(10);
   unsigned int nbPoint[256]; //number of points by image
   unsigned int nbPointTotal = 0; //total number of points
@@ -1503,6 +1516,13 @@ vpCalibration::calibVVSMulti(unsigned int nbPose,
     nbPointTotal += nbPoint[i];
   }
 
+  if (nbPointTotal < 4)
+  {
+    //vpERROR_TRACE("Not enough point to calibrate");
+    throw(vpCalibrationException(vpCalibrationException::notInitializedError,
+                                 "Not enough point to calibrate")) ;
+  }
+
   vpColVector oX(nbPointTotal), cX(nbPointTotal)  ;
   vpColVector oY(nbPointTotal), cY(nbPointTotal) ;
   vpColVector oZ(nbPointTotal), cZ(nbPointTotal) ;
@@ -1550,10 +1570,10 @@ vpCalibration::calibVVSMulti(unsigned int nbPose,
     iter++ ;
     residu_1 = r ;
 
-    double px = cam.get_px();
-    double py = cam.get_py();
-    double u0 = cam.get_u0();
-    double v0 = cam.get_v0();
+    double px = cam_est.get_px();
+    double py = cam_est.get_py();
+    double u0 = cam_est.get_u0();
+    double v0 = cam_est.get_v0();
 
     r = 0 ;
     curPoint = 0 ; //current point indice
@@ -1654,7 +1674,7 @@ vpCalibration::calibVVSMulti(unsigned int nbPose,
     for (unsigned int i = 0 ; i < nbPose6 ; i++)
       Tc_v[i] = Tc[i] ;
 
-    cam.initPersProjWithoutDistortion(px+Tc[nbPose6+2],
+    cam_est.initPersProjWithoutDistortion(px+Tc[nbPose6+2],
                                       py+Tc[nbPose6+3],
                                       u0+Tc[nbPose6],
                                       v0+Tc[nbPose6+1]) ;
@@ -1683,13 +1703,16 @@ vpCalibration::calibVVSMulti(unsigned int nbPose,
   for (unsigned int p = 0 ; p < nbPose ; p++)
   {
     table_cal[p].cMo_dist = table_cal[p].cMo ;
-    table_cal[p].cam = cam;
-    table_cal[p].cam_dist = cam;
+    table_cal[p].cam = cam_est;
+    table_cal[p].cam_dist = cam_est;
     double deviation,deviation_dist;
     table_cal[p].computeStdDeviation(deviation,deviation_dist);
   }
   if (verbose)
     std::cout <<  " Global std dev " << sqrt(r/nbPointTotal) << std::endl;
+
+  // Restore ostream format
+  std::cout.flags(original_flags);
 }
 
 
@@ -1697,9 +1720,10 @@ void
 vpCalibration::calibVVSWithDistortionMulti(
   unsigned int nbPose,
   vpCalibration table_cal[],
-  vpCameraParameters &cam,
+  vpCameraParameters &cam_est,
   bool verbose)
 {
+  std::ios::fmtflags original_flags( std::cout.flags() );
   std::cout.precision(10);
   unsigned int nbPoint[1024]; //number of points by image
   unsigned int nbPointTotal = 0; //total number of points
@@ -1711,6 +1735,13 @@ vpCalibration::calibVVSWithDistortionMulti(
     nbPointTotal += nbPoint[i];
   }
 
+  if (nbPointTotal < 4)
+  {
+    //vpERROR_TRACE("Not enough point to calibrate");
+    throw(vpCalibrationException(vpCalibrationException::notInitializedError,
+                                 "Not enough point to calibrate")) ;
+  }
+
   vpColVector oX(nbPointTotal), cX(nbPointTotal)  ;
   vpColVector oY(nbPointTotal), cY(nbPointTotal) ;
   vpColVector oZ(nbPointTotal), cZ(nbPointTotal) ;
@@ -1777,16 +1808,16 @@ vpCalibration::calibVVSWithDistortionMulti(
 
     vpMatrix L(nbPointTotal*4,nbPose6+6) ;
     curPoint = 0 ; //current point indice
-    double px = cam.get_px() ;
-    double py = cam.get_py() ;
-    double u0 = cam.get_u0() ;
-    double v0 = cam.get_v0() ;
+    double px = cam_est.get_px() ;
+    double py = cam_est.get_py() ;
+    double u0 = cam_est.get_u0() ;
+    double v0 = cam_est.get_v0() ;
 
     double inv_px = 1/px ;
     double inv_py = 1/py ;
 
-    double kud = cam.get_kud() ;
-    double kdu = cam.get_kdu() ;
+    double kud = cam_est.get_kud() ;
+    double kdu = cam_est.get_kdu() ;
 
     double k2ud = 2*kud;
     double k2du = 2*kdu;
@@ -1939,7 +1970,7 @@ vpCalibration::calibVVSWithDistortionMulti(
     for (unsigned int i = 0 ; i < 6*nbPose ; i++)
       Tc_v[i] = Tc[i] ;
 
-    cam.initPersProjWithDistortion(  px+Tc[nbPose6+2], py+Tc[nbPose6+3],
+    cam_est.initPersProjWithDistortion(  px+Tc[nbPose6+2], py+Tc[nbPose6+3],
                                      u0+Tc[nbPose6], v0+Tc[nbPose6+1],
                                      kud + Tc[nbPose6+5],
                                      kdu + Tc[nbPose6+4]);
@@ -1967,10 +1998,12 @@ vpCalibration::calibVVSWithDistortionMulti(
 
   for (unsigned int p = 0 ; p < nbPose ; p++)
   {
-    table_cal[p].cam_dist = cam ;
-    table_cal[p].computeStdDeviation_dist(table_cal[p].cMo_dist,
-                                          cam);
+    table_cal[p].cam_dist = cam_est ;
+    table_cal[p].computeStdDeviation_dist(table_cal[p].cMo_dist, cam_est);
   }
   if (verbose)
     std::cout <<" Global std dev " << sqrt(r/(nbPointTotal)) << std::endl;
+
+  // Restore ostream format
+  std::cout.flags(original_flags);
 }
diff --git a/src/camera/vpCameraParameters.cpp b/src/camera/vpCameraParameters.cpp
index ef7d8c79..abffc7be 100644
--- a/src/camera/vpCameraParameters.cpp
+++ b/src/camera/vpCameraParameters.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpCameraParameters.cpp 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpCameraParameters.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -54,6 +54,9 @@
 #include <visp/vpRotationMatrix.h>
 #include <cmath>
 #include <limits>
+#include <iostream>
+#include <sstream>
+#include <iomanip>
 
 const double vpCameraParameters::DEFAULT_PX_PARAMETER = 600.0;
 const double vpCameraParameters::DEFAULT_PY_PARAMETER = 600.0;
@@ -72,12 +75,15 @@ const vpCameraParameters::vpCameraParametersProjType
   \sa init()
 */
 vpCameraParameters::vpCameraParameters()
+  :
+    px(DEFAULT_PX_PARAMETER), py(DEFAULT_PY_PARAMETER),
+    u0(DEFAULT_U0_PARAMETER), v0(DEFAULT_V0_PARAMETER),
+    kud(DEFAULT_KUD_PARAMETER), kdu(DEFAULT_KDU_PARAMETER),
+    width(0), height(0),
+    isFov(false), fovAngleX(0), fovAngleY(0), fovNormals(),
+    inv_px(1./DEFAULT_PX_PARAMETER), inv_py(1./DEFAULT_PY_PARAMETER),
+    projModel(DEFAULT_PROJ_TYPE)
 {
-  isFov = false;
-  fovAngleX = 0;
-  fovAngleY = 0;
-  width = 0;
-  height = 0;
   init() ;
 }
 
@@ -85,6 +91,14 @@ vpCameraParameters::vpCameraParameters()
   Copy constructor
  */
 vpCameraParameters::vpCameraParameters(const vpCameraParameters &c)
+  :
+    px(DEFAULT_PX_PARAMETER), py(DEFAULT_PY_PARAMETER),
+    u0(DEFAULT_U0_PARAMETER), v0(DEFAULT_V0_PARAMETER),
+    kud(DEFAULT_KUD_PARAMETER), kdu(DEFAULT_KDU_PARAMETER),
+    width(0), height(0),
+    isFov(false), fovAngleX(0), fovAngleY(0), fovNormals(),
+    inv_px(1./DEFAULT_PX_PARAMETER), inv_py(1./DEFAULT_PY_PARAMETER),
+    projModel(DEFAULT_PROJ_TYPE)
 {
   init(c) ;
 }
@@ -92,40 +106,46 @@ vpCameraParameters::vpCameraParameters(const vpCameraParameters &c)
 /*!
   Constructor for perspective projection without distortion model
 
-  \param px,py : pixel size
-  \param u0,v0 : principal points
+  \param cam_px,cam_py : pixel size
+  \param cam_u0,cam_v0 : principal points
 
  */
-vpCameraParameters::vpCameraParameters(const double px, const double py,
-                                       const double u0, const double v0)
+vpCameraParameters::vpCameraParameters(const double cam_px, const double cam_py,
+                                       const double cam_u0, const double cam_v0)
+  :
+    px(DEFAULT_PX_PARAMETER), py(DEFAULT_PY_PARAMETER),
+    u0(DEFAULT_U0_PARAMETER), v0(DEFAULT_V0_PARAMETER),
+    kud(DEFAULT_KUD_PARAMETER), kdu(DEFAULT_KDU_PARAMETER),
+    width(0), height(0),
+    isFov(false), fovAngleX(0), fovAngleY(0), fovNormals(),
+    inv_px(1./DEFAULT_PX_PARAMETER), inv_py(1./DEFAULT_PY_PARAMETER),
+    projModel(DEFAULT_PROJ_TYPE)
 {
-  isFov = false;
-  fovAngleX = 0;
-  fovAngleY = 0;
-  width = 0;
-  height = 0;
-  initPersProjWithoutDistortion(px,py,u0,v0) ;
+  initPersProjWithoutDistortion(cam_px,cam_py,cam_u0,cam_v0) ;
 }
 
 /*!
   Constructor for perspective projection with distortion model
 
-  \param px,py : pixel size
-  \param u0,v0 : principal points
-  \param kud : undistorted to distorted radial distortion
-  \param kdu : distorted to undistorted radial distortion
+  \param cam_px,cam_py : pixel size
+  \param cam_u0,cam_v0 : principal points
+  \param cam_kud : undistorted to distorted radial distortion
+  \param cam_kdu : distorted to undistorted radial distortion
 
  */
-vpCameraParameters::vpCameraParameters(const double px, const double py,
-                                       const double u0, const double v0,
-                                       const double kud, const double kdu)
+vpCameraParameters::vpCameraParameters(const double cam_px, const double cam_py,
+                                       const double cam_u0, const double cam_v0,
+                                       const double cam_kud, const double cam_kdu)
+  :
+    px(DEFAULT_PX_PARAMETER), py(DEFAULT_PY_PARAMETER),
+    u0(DEFAULT_U0_PARAMETER), v0(DEFAULT_V0_PARAMETER),
+    kud(DEFAULT_KUD_PARAMETER), kdu(DEFAULT_KDU_PARAMETER),
+    width(0), height(0),
+    isFov(false), fovAngleX(0), fovAngleY(0), fovNormals(),
+    inv_px(1./DEFAULT_PX_PARAMETER), inv_py(1./DEFAULT_PY_PARAMETER),
+    projModel(DEFAULT_PROJ_TYPE)
 {
-  isFov = false;
-  fovAngleX = 0;
-  fovAngleY = 0;
-  width = 0;
-  height = 0;
-  initPersProjWithDistortion(px,py,u0,v0,kud,kdu) ;
+  initPersProjWithDistortion(cam_px,cam_py,cam_u0,cam_v0,cam_kud,cam_kdu) ;
 }
 
 /*!
@@ -133,16 +153,7 @@ vpCameraParameters::vpCameraParameters(const double px, const double py,
 */
 void
 vpCameraParameters::init()
-{
-  this->projModel = DEFAULT_PROJ_TYPE ;
-  
-  this->px    = DEFAULT_PX_PARAMETER ;
-  this->py    = DEFAULT_PY_PARAMETER ;
-  this->u0    = DEFAULT_U0_PARAMETER ;
-  this->v0    = DEFAULT_V0_PARAMETER ;
-  this->kud   = DEFAULT_KUD_PARAMETER ;
-  this->kdu   = DEFAULT_KDU_PARAMETER ;
-  
+{  
   if (fabs(this->px)<1e-6)
   {
     vpERROR_TRACE("Camera parameter px = 0") ;
@@ -162,19 +173,19 @@ vpCameraParameters::init()
 /*!
   Initialization with specific parameters using perpective projection without
   distortion model.
-  \param px,py : pixel size
-  \param u0,v0 : principal point
+  \param cam_px,cam_py : pixel size
+  \param cam_u0,cam_v0 : principal point
  */
 void
-vpCameraParameters::initPersProjWithoutDistortion(const double px,
-    const double py, const double u0, const double v0)
+vpCameraParameters::initPersProjWithoutDistortion(const double cam_px, const double cam_py,
+                                                  const double cam_u0, const double cam_v0)
 {
   this->projModel = vpCameraParameters::perspectiveProjWithoutDistortion ;
   
-  this->px    = px ;
-  this->py    = py ;
-  this->u0    = u0 ;
-  this->v0    = v0 ;
+  this->px    = cam_px ;
+  this->py    = cam_py ;
+  this->u0    = cam_u0 ;
+  this->v0    = cam_v0 ;
   this->kud   = 0 ;
   this->kdu   = 0 ;
   
@@ -197,24 +208,24 @@ vpCameraParameters::initPersProjWithoutDistortion(const double px,
 /*!
   Initialization with specific parameters using perpective projection with
   distortion model.
-  \param px,py : pixel size
-  \param u0,v0 : principal points
-  \param kud : undistorted to distorted radial distortion
-  \param kdu : distorted to undistorted radial distortion
+  \param cam_px,cam_py : pixel size
+  \param cam_u0,cam_v0 : principal points
+  \param cam_kud : undistorted to distorted radial distortion
+  \param cam_kdu : distorted to undistorted radial distortion
 */
 void
-vpCameraParameters::initPersProjWithDistortion(const double px, const double py,
-                            const double u0, const double v0,
-                            const double kud, const double kdu)
+vpCameraParameters::initPersProjWithDistortion(const double cam_px, const double cam_py,
+                                               const double cam_u0, const double cam_v0,
+                                               const double cam_kud, const double cam_kdu)
 {
   this->projModel = vpCameraParameters::perspectiveProjWithDistortion ;
 
-  this->px    = px ;
-  this->py    = py ;
-  this->u0    = u0 ;
-  this->v0    = v0 ;
-  this->kud   = kud ;
-  this->kdu   = kdu ;
+  this->px    = cam_px ;
+  this->py    = cam_py ;
+  this->u0    = cam_u0 ;
+  this->v0    = cam_v0 ;
+  this->kud   = cam_kud ;
+  this->kdu   = cam_kdu ;
   
   if (fabs(px)<1e-6)
   {
@@ -447,6 +458,7 @@ vpCameraParameters::get_K_inverse() const
 void
 vpCameraParameters::printParameters()
 {
+  std::ios::fmtflags original_flags( std::cout.flags() );
   switch(projModel){
     case vpCameraParameters::perspectiveProjWithoutDistortion :
       std::cout.precision(10);
@@ -465,6 +477,8 @@ vpCameraParameters::printParameters()
       std::cout << "  kdu = " << kdu << std::endl ;
       break;
   } 
+  // Restore ostream format
+  std::cout.flags(original_flags);
 }
 /*!
 
@@ -473,37 +487,33 @@ vpCameraParameters::printParameters()
   \param os : Output stream.
   \param cam : Camera parameters.
 */
-std::ostream & operator << (std::ostream & os,
-			    const vpCameraParameters &cam)
+VISP_EXPORT std::ostream & operator << (std::ostream & os, const vpCameraParameters &cam)
 {
   switch(cam.get_projModel()){
-    case vpCameraParameters::perspectiveProjWithoutDistortion :
-      os << "Camera parameters for perspective projection without distortion:"
-	 << std::endl ;
-      os << "  px = " << cam.get_px() <<"\t py = "<< cam.get_py() 
-	 << std::endl ;
-      os << "  u0 = " << cam.get_u0() <<"\t v0 = "<< cam.get_v0() 
-	 << std::endl ;
-      break;
-    case vpCameraParameters::perspectiveProjWithDistortion :
-      os.precision(10);
-      os << "Camera parameters for perspective projection with distortion:"
-                << std::endl ;
-      os << "  px = " << cam.get_px() <<"\t py = "<< cam.get_py() 
-	 << std::endl ;
-      os << "  u0 = " << cam.get_u0() <<"\t v0 = "<< cam.get_v0()
-	 << std::endl ;
-      os << "  kud = " << cam.get_kud() << std::endl ;
-      os << "  kdu = " << cam.get_kdu() << std::endl ;
-      break;
-  } 
+  case vpCameraParameters::perspectiveProjWithoutDistortion :
+    os << "Camera parameters for perspective projection without distortion:"
+       << std::endl ;
+    os << "  px = " << cam.get_px() <<"\t py = "<< cam.get_py()
+       << std::endl ;
+    os << "  u0 = " << cam.get_u0() <<"\t v0 = "<< cam.get_v0()
+       << std::endl ;
+    break;
+  case vpCameraParameters::perspectiveProjWithDistortion :
+    std::ios_base::fmtflags original_flags = os.flags();
+    os.precision(10);
+    os << "Camera parameters for perspective projection with distortion:"
+       << std::endl ;
+    os << "  px = " << cam.get_px() <<"\t py = "<< cam.get_py()
+       << std::endl ;
+    os << "  u0 = " << cam.get_u0() <<"\t v0 = "<< cam.get_v0()
+       << std::endl ;
+    os << "  kud = " << cam.get_kud() << std::endl ;
+    os << "  kdu = " << cam.get_kdu() << std::endl ;
+
+    os.flags(original_flags); // restore os to standard state
+    break;
+  }
   return os;
 }
 
 
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
-
diff --git a/src/camera/vpCameraParameters.h b/src/camera/vpCameraParameters.h
index 3bd73d45..633cb4ac 100644
--- a/src/camera/vpCameraParameters.h
+++ b/src/camera/vpCameraParameters.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpCameraParameters.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpCameraParameters.h 4620 2014-01-27 21:28:32Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -299,8 +299,7 @@ public :
   vpMatrix get_K_inverse() const;
 
   void printParameters() ;
-  friend VISP_EXPORT std::ostream & operator << (std::ostream & os,
-						 const vpCameraParameters &cam);
+  friend VISP_EXPORT std::ostream & operator << (std::ostream & os, const vpCameraParameters &cam);
 
 private:
   static const double DEFAULT_U0_PARAMETER;
@@ -327,7 +326,6 @@ private:
   double inv_px, inv_py; 
    
   vpCameraParametersProjType projModel ; //!< used projection model
-
 } ;
 
 #endif
diff --git a/src/camera/vpMeterPixelConversion.cpp b/src/camera/vpMeterPixelConversion.cpp
index 726e2f16..a2aedf70 100644
--- a/src/camera/vpMeterPixelConversion.cpp
+++ b/src/camera/vpMeterPixelConversion.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMeterPixelConversion.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMeterPixelConversion.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/camera/vpMeterPixelConversion.h b/src/camera/vpMeterPixelConversion.h
index 13a00c41..4e030f6b 100644
--- a/src/camera/vpMeterPixelConversion.h
+++ b/src/camera/vpMeterPixelConversion.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMeterPixelConversion.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMeterPixelConversion.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/camera/vpPixelMeterConversion.cpp b/src/camera/vpPixelMeterConversion.cpp
index acf73b82..ae35c1da 100644
--- a/src/camera/vpPixelMeterConversion.cpp
+++ b/src/camera/vpPixelMeterConversion.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPixelMeterConversion.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPixelMeterConversion.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/camera/vpPixelMeterConversion.h b/src/camera/vpPixelMeterConversion.h
index 698f53f0..f93f24f7 100644
--- a/src/camera/vpPixelMeterConversion.h
+++ b/src/camera/vpPixelMeterConversion.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPixelMeterConversion.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPixelMeterConversion.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/camera/vpXmlParserCamera.cpp b/src/camera/vpXmlParserCamera.cpp
index a2e0fc04..59ecf5e4 100644
--- a/src/camera/vpXmlParserCamera.cpp
+++ b/src/camera/vpXmlParserCamera.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpXmlParserCamera.cpp 4270 2013-06-25 12:15:16Z fspindle $
+ * $Id: vpXmlParserCamera.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -80,20 +80,22 @@
 /*!
   Default constructor
 */
-vpXmlParserCamera::vpXmlParserCamera(): vpXmlParser(){
-  camera_name = "";
-  image_width = 0;
-  image_height = 0;
-  subsampling_width = 0;
-  subsampling_height = 0;
-  full_width = 0;
-  full_height = 0;
+vpXmlParserCamera::vpXmlParserCamera()
+  : vpXmlParser(),
+    camera(), camera_name(), image_width(0), image_height(0),
+    subsampling_width(0), subsampling_height(0), full_width(0), full_height(0)
+{
 }
 /*!
   Copy constructor
   \param twinParser : parser object to copy
 */
-vpXmlParserCamera::vpXmlParserCamera(vpXmlParserCamera& twinParser): vpXmlParser(twinParser){
+vpXmlParserCamera::vpXmlParserCamera(vpXmlParserCamera& twinParser)
+  : vpXmlParser(twinParser),
+    camera(), camera_name(), image_width(0), image_height(0),
+    subsampling_width(0), subsampling_height(0), full_width(0), full_height(0)
+
+{
   this->camera = twinParser.camera;
   this->camera_name = twinParser.camera_name;
   this->image_width = twinParser.image_width;
@@ -126,22 +128,22 @@ vpXmlParserCamera::operator =(const vpXmlParserCamera& twinParser) {
   Parse an xml file to load camera parameters.
   \param cam : camera parameters to fill.
   \param filename : name of the xml file to parse
-  \param camera_name : name of the camera : useful if the xml file has multiple
+  \param cam_name : name of the camera : useful if the xml file has multiple
   camera parameters. Set as "" if the camera name is not ambiguous.
   \param projModel : camera projection model needed.
-  \param image_width : image width on which camera calibration was performed.
+  \param im_width : image width on which camera calibration was performed.
   Set as 0 if not ambiguous.
-  \param image_height : image height on which camera calibration was performed.
+  \param im_height : image height on which camera calibration was performed.
   Set as 0 if not ambiguous.
 
   \return error code.
 */
 int
 vpXmlParserCamera::parse(vpCameraParameters &cam, const char * filename,
-                         const std::string& camera_name,
+                         const std::string& cam_name,
                          const vpCameraParameters::vpCameraParametersProjType &projModel,
-                         const unsigned int image_width,
-                         const unsigned int image_height)
+                         const unsigned int im_width,
+                         const unsigned int im_height)
 {
   xmlDocPtr doc;
   xmlNodePtr node;
@@ -159,7 +161,7 @@ vpXmlParserCamera::parse(vpCameraParameters &cam, const char * filename,
     return SEQUENCE_ERROR;
   }
 
-  int ret = this ->read (doc, node, camera_name, projModel, image_width, image_height);
+  int ret = this ->read (doc, node, cam_name, projModel, im_width, im_height);
 
   cam = camera ;
 
@@ -172,20 +174,20 @@ vpXmlParserCamera::parse(vpCameraParameters &cam, const char * filename,
   Save camera parameters in an xml file.
   \param cam : camera parameters to save.
   \param filename : name of the xml file to fill.
-  \param camera_name : name of the camera : useful if the xml file has multiple
+  \param cam_name : name of the camera : useful if the xml file has multiple
     camera parameters. Set as "" if the camera name is not ambiguous.
-  \param image_width : width of image  on which camera calibration was performed.
+  \param im_width : width of image  on which camera calibration was performed.
     Set as 0 if not ambiguous.
-  \param image_height : height of the image  on which camera calibration was performed.
+  \param im_height : height of the image  on which camera calibration was performed.
     Set as 0 if not ambiguous.
 
   \return error code.
 */
 int
 vpXmlParserCamera::save(const vpCameraParameters &cam, const char * filename,
-                        const std::string& camera_name,
-                        const unsigned int image_width,
-                        const unsigned int image_height)
+                        const std::string& cam_name,
+                        const unsigned int im_width,
+                        const unsigned int im_height)
 {
   xmlDocPtr doc;
   xmlNodePtr node;
@@ -215,8 +217,8 @@ vpXmlParserCamera::save(const vpCameraParameters &cam, const char * filename,
 
   this->camera = cam;
 
-  int nbCamera = count(doc, node, camera_name,cam.get_projModel(),
-                       image_width, image_height);
+  int nbCamera = count(doc, node, cam_name,cam.get_projModel(),
+                       im_width, im_height);
   if( nbCamera > 0){
 //    vpCERROR << nbCamera
 //             << " set(s) of camera parameters is(are) already "<< std::endl
@@ -248,27 +250,27 @@ vpXmlParserCamera::save(const vpCameraParameters &cam, const char * filename,
 
   \param doc : XML file.
   \param node : XML tree, pointing on a marker equipement.
-  \param camera_name : name of the camera : useful if the xml file has multiple
+  \param cam_name : name of the camera : useful if the xml file has multiple
   camera parameters. Set as "" if the camera name is not ambiguous.
-  \param image_width : width of image  on which camera calibration was performed.
+  \param im_width : width of image  on which camera calibration was performed.
     Set as 0 if not ambiguous.
-  \param image_height : height of the image  on which camera calibration
+  \param im_height : height of the image  on which camera calibration
     was performed. Set as 0 if not ambiguous.
-  \param subsampling_width : subsampling of the image width sent by the camera.
+  \param subsampl_width : subsampling of the image width sent by the camera.
     Set as 0 if not ambiguous.
-  \param subsampling_height : subsampling of the image height sent by the camera.
+  \param subsampl_height : subsampling of the image height sent by the camera.
     Set as 0 if not ambiguous.
 
   \return error code.
  */
 int
 vpXmlParserCamera::read (xmlDocPtr doc, xmlNodePtr node,
-                         const std::string& camera_name,
+                         const std::string& cam_name,
                          const vpCameraParameters::vpCameraParametersProjType &projModel,
-                         const unsigned int image_width,
-                         const unsigned int image_height,
-                         const unsigned int subsampling_width,
-                         const unsigned int subsampling_height)
+                         const unsigned int im_width,
+                         const unsigned int im_height,
+                         const unsigned int subsampl_width,
+                         const unsigned int subsampl_height)
 {
   //    char * val_char;
   vpXmlCodeType prop;
@@ -299,8 +301,8 @@ vpXmlParserCamera::read (xmlDocPtr doc, xmlNodePtr node,
     }
     */
     if (prop == CODE_XML_CAMERA){
-      if (SEQUENCE_OK == this->read_camera (doc, node, camera_name, projModel,
-                                            image_width, image_height, subsampling_width, subsampling_height))
+      if (SEQUENCE_OK == this->read_camera (doc, node, cam_name, projModel,
+                                            im_width, im_height, subsampl_width, subsampl_height))
         nbCamera++;
     }
     else back = SEQUENCE_ERROR;
@@ -326,27 +328,27 @@ vpXmlParserCamera::read (xmlDocPtr doc, xmlNodePtr node,
 
   \param doc : XML file.
   \param node : XML tree, pointing on a marker equipement.
-  \param camera_name : name of the camera : useful if the xml file has multiple
+  \param cam_name : name of the camera : useful if the xml file has multiple
   camera parameters. Set as "" if the camera name is not ambiguous.
-  \param image_width : width of image  on which camera calibration was performed.
+  \param im_width : width of image  on which camera calibration was performed.
     Set as 0 if not ambiguous.
-  \param image_height : height of the image  on which camera calibration
+  \param im_height : height of the image  on which camera calibration
     was performed. Set as 0 if not ambiguous.
-  \param subsampling_width : subsampling of the image width sent by the camera.
+  \param subsampl_width : subsampling of the image width sent by the camera.
     Set as 0 if not ambiguous.
-  \param subsampling_height : subsampling of the image height sent by the camera.
+  \param subsampl_height : subsampling of the image height sent by the camera.
     Set as 0 if not ambiguous.
 
   \return number of available camera parameters corresponding with inputs.
  */
 int
 vpXmlParserCamera::count (xmlDocPtr doc, xmlNodePtr node,
-                          const std::string& camera_name,
+                          const std::string& cam_name,
                           const vpCameraParameters::vpCameraParametersProjType &projModel,
-                          const unsigned int image_width,
-                          const unsigned int image_height,
-                          const unsigned int subsampling_width,
-                          const unsigned int subsampling_height)
+                          const unsigned int im_width,
+                          const unsigned int im_height,
+                          const unsigned int subsampl_width,
+                          const unsigned int subsampl_height)
 {
   //    char * val_char;
   vpXmlCodeType prop;
@@ -374,9 +376,9 @@ vpXmlParserCamera::count (xmlDocPtr doc, xmlNodePtr node,
     }
     */
     if (prop== CODE_XML_CAMERA) {
-      if (SEQUENCE_OK == this->read_camera (doc, node, camera_name, projModel,
-                                            image_width, image_height,
-                                            subsampling_width, subsampling_height))
+      if (SEQUENCE_OK == this->read_camera (doc, node, cam_name, projModel,
+                                            im_width, im_height,
+                                            subsampl_width, subsampl_height))
         nbCamera++;
     }
   }
@@ -389,26 +391,26 @@ vpXmlParserCamera::count (xmlDocPtr doc, xmlNodePtr node,
 
   \param doc : XML file.
   \param node : XML tree, pointing on a marker equipement.
-  \param camera_name : name of the camera : useful if the xml file has multiple
+  \param cam_name : name of the camera : useful if the xml file has multiple
   camera parameters. Set as "" if the camera name is not ambiguous.
-  \param image_width : width of image  on which camera calibration was performed.
+  \param im_width : width of image  on which camera calibration was performed.
     Set as 0 if not ambiguous.
-  \param image_height : height of the image  on which camera calibration
+  \param im_height : height of the image  on which camera calibration
     was performed. Set as 0 if not ambiguous.
-  \param subsampling_width : subsampling of the image width sent by the camera.
+  \param subsampl_width : subsampling of the image width sent by the camera.
     Set as 0 if not ambiguous.
-  \param subsampling_height : subsampling of the image height sent by the camera.
+  \param subsampl_height : subsampling of the image height sent by the camera.
     Set as 0 if not ambiguous.
 
   \return number of available camera parameters corresponding with inputs.
  */
 xmlNodePtr
 vpXmlParserCamera::find_camera (xmlDocPtr doc, xmlNodePtr node,
-                                const std::string& camera_name,
-                                const unsigned int image_width,
-                                const unsigned int image_height,
-                                const unsigned int subsampling_width,
-                                const unsigned int subsampling_height)
+                                const std::string& cam_name,
+                                const unsigned int im_width,
+                                const unsigned int im_height,
+                                const unsigned int subsampl_width,
+                                const unsigned int subsampl_height)
 {
   //    char * val_char;
   vpXmlCodeType prop;
@@ -435,9 +437,9 @@ vpXmlParserCamera::find_camera (xmlDocPtr doc, xmlNodePtr node,
     }
     */
     if(prop == CODE_XML_CAMERA){
-      if (SEQUENCE_OK == this->read_camera_header(doc, node, camera_name,
-                                                  image_width, image_height,
-                                                  subsampling_width, subsampling_height))
+      if (SEQUENCE_OK == this->read_camera_header(doc, node, cam_name,
+                                                  im_width, im_height,
+                                                  subsampl_width, subsampl_height))
         return node;
     }
   }
@@ -449,15 +451,15 @@ vpXmlParserCamera::find_camera (xmlDocPtr doc, xmlNodePtr node,
 
   \param doc : XML file.
   \param node : XML tree, pointing on a marker equipement.
-  \param camera_name : name of the camera : useful if the xml file has multiple
+  \param cam_name : name of the camera : useful if the xml file has multiple
   camera parameters. Set as "" if the camera name is not ambiguous.
-  \param image_width : width of image  on which camera calibration was performed.
+  \param im_width : width of image  on which camera calibration was performed.
     Set as 0 if not ambiguous.
-  \param image_height : height of the image  on which camera calibration
+  \param im_height : height of the image  on which camera calibration
     was performed. Set as 0 if not ambiguous.
-  \param subsampling_width : scale of the image width sent by the camera.
+  \param subsampl_width : scale of the image width sent by the camera.
     Set as 0 if not ambiguous.
-  \param subsampling_height : scale of the image height sent by the camera.
+  \param subsampl_height : scale of the image height sent by the camera.
     Set as 0 if not ambiguous.
 
   \return error code.
@@ -465,12 +467,12 @@ vpXmlParserCamera::find_camera (xmlDocPtr doc, xmlNodePtr node,
  */
 int
 vpXmlParserCamera::read_camera (xmlDocPtr doc, xmlNodePtr node,
-                                const std::string& camera_name,
+                                const std::string& cam_name,
                                 const vpCameraParameters::vpCameraParametersProjType &projModel,
-                                const unsigned int image_width,
-                                const unsigned int image_height,
-                                const unsigned int subsampling_width,
-                                const unsigned int subsampling_height)
+                                const unsigned int im_width,
+                                const unsigned int im_height,
+                                const unsigned int subsampl_width,
+                                const unsigned int subsampl_height)
 {
   vpXmlCodeType prop;
   /* read value in the XML file. */
@@ -552,13 +554,21 @@ vpXmlParserCamera::read_camera (xmlDocPtr doc, xmlNodePtr node,
     }
 
   }
-  if( !((projModelFound == true) && (camera_name == camera_name_tmp) &&
-        (abs((int)image_width - (int)image_width_tmp) < allowedPixelDiffOnImageSize || image_width == 0) &&
-        (abs((int)image_height - (int)image_height_tmp) < allowedPixelDiffOnImageSize || image_height == 0) &&
-        ( subsampling_width == 0 ||
-          abs((int)subsampling_width - (int)subsampling_width_tmp) < (allowedPixelDiffOnImageSize * (int)(subsampling_width_tmp / subsampling_width)))&&
-        ( subsampling_height == 0 ||
-          abs((int)subsampling_height - (int)subsampling_height_tmp) < (allowedPixelDiffOnImageSize * (int)(subsampling_width_tmp / subsampling_width))))){
+  // Create a specific test for subsampling_width and subsampling_height to ensure that division by zero is not possible in the next test
+  bool test_subsampling_width = true;
+  bool test_subsampling_height = true;
+
+  if (subsampling_width) {
+    test_subsampling_width = (abs((int)subsampl_width - (int)subsampling_width_tmp) < (allowedPixelDiffOnImageSize * (int)(subsampling_width_tmp / subsampling_width)));
+  }
+  if (subsampling_height) {
+    test_subsampling_height = (abs((int)subsampl_height - (int)subsampling_height_tmp) < (allowedPixelDiffOnImageSize * (int)(subsampling_height_tmp / subsampling_height)));
+  }
+  if( !((projModelFound == true) && (cam_name == camera_name_tmp) &&
+        (abs((int)im_width - (int)image_width_tmp) < allowedPixelDiffOnImageSize || im_width == 0) &&
+        (abs((int)im_height - (int)image_height_tmp) < allowedPixelDiffOnImageSize || im_height == 0) &&
+        (test_subsampling_width)&&
+        (test_subsampling_height))){
     back = SEQUENCE_ERROR;
   }
   else{
@@ -578,15 +588,15 @@ vpXmlParserCamera::read_camera (xmlDocPtr doc, xmlNodePtr node,
 
   \param doc : XML file.
   \param node : XML tree, pointing on a marker equipement.
-  \param camera_name : name of the camera : useful if the xml file has multiple
+  \param cam_name : name of the camera : useful if the xml file has multiple
   camera parameters. Set as "" if the camera name is not ambiguous.
-  \param image_width : width of image  on which camera calibration was performed.
+  \param im_width : width of image  on which camera calibration was performed.
     Set as 0 if not ambiguous.
-  \param image_height : height of the image  on which camera calibration
+  \param im_height : height of the image  on which camera calibration
     was performed. Set as 0 if not ambiguous.
-  \param subsampling_width : scale of the image width sent by the camera.
+  \param subsampl_width : scale of the image width sent by the camera.
     Set as 0 if not ambiguous.
-  \param subsampling_height : scale of the image height sent by the camera.
+  \param subsampl_height : scale of the image height sent by the camera.
     Set as 0 if not ambiguous.
 
   \return error code.
@@ -595,11 +605,11 @@ vpXmlParserCamera::read_camera (xmlDocPtr doc, xmlNodePtr node,
 int
 vpXmlParserCamera::
 read_camera_header (xmlDocPtr doc, xmlNodePtr node,
-                    const std::string& camera_name,
-                    const unsigned int image_width,
-                    const unsigned int image_height,
-                    const unsigned int subsampling_width,
-                    const unsigned int subsampling_height)
+                    const std::string& cam_name,
+                    const unsigned int im_width,
+                    const unsigned int im_height,
+                    const unsigned int subsampl_width,
+                    const unsigned int subsampl_height)
 {
   vpXmlCodeType prop;
   /* read value in the XML file. */
@@ -672,13 +682,13 @@ read_camera_header (xmlDocPtr doc, xmlNodePtr node,
       break;
     }
   }
-  if( !((camera_name == camera_name_tmp) &&
-        (image_width == image_width_tmp || image_width == 0) &&
-        (image_height == image_height_tmp || image_height == 0) &&
-        (subsampling_width == subsampling_width_tmp ||
-         subsampling_width == 0)&&
-        (subsampling_height == subsampling_height_tmp ||
-         subsampling_height == 0))){
+  if( !((cam_name == camera_name_tmp) &&
+        (im_width == image_width_tmp || im_width == 0) &&
+        (im_height == image_height_tmp || im_height == 0) &&
+        (subsampl_width == subsampling_width_tmp ||
+         subsampl_width == 0)&&
+        (subsampl_height == subsampling_height_tmp ||
+         subsampl_height == 0))){
     back = SEQUENCE_ERROR;
   }
   return back;
@@ -780,14 +790,18 @@ vpXmlParserCamera::read_camera_model (xmlDocPtr doc, xmlNodePtr node,
     }
   }
 
+  if(model_type == NULL) {
+    vpERROR_TRACE("projection model type doesn't match with any known model !");
+    return SEQUENCE_ERROR;
+  }
+
   if( !strcmp(model_type,LABEL_XML_MODEL_WITHOUT_DISTORTION)){
     if (nb != 5 || validation != 0x1F)
     {
       vpCERROR <<"ERROR in 'model' field:\n";
       vpCERROR << "it must contain 5 parameters\n";
-      if(model_type != NULL){
-        xmlFree(model_type);
-      }
+      xmlFree(model_type);
+
       return SEQUENCE_ERROR;
     }
     cam_tmp.initPersProjWithoutDistortion(px,py,u0,v0) ;
@@ -797,23 +811,20 @@ vpXmlParserCamera::read_camera_model (xmlDocPtr doc, xmlNodePtr node,
     {
       vpCERROR <<"ERROR in 'model' field:\n";
       vpCERROR << "it must contain 7 parameters\n";
-      if(model_type != NULL){
-        xmlFree(model_type);
-      }
+      xmlFree(model_type);
+
       return SEQUENCE_ERROR;
     }
     cam_tmp.initPersProjWithDistortion(px,py,u0,v0,kud,kdu);
   }
   else{
     vpERROR_TRACE("projection model type doesn't match with any known model !");
-    if(model_type != NULL){
-      xmlFree(model_type);
-    }
-    return SEQUENCE_ERROR;
-  }
-  if(model_type != NULL){
     xmlFree(model_type);
+
+    return SEQUENCE_ERROR;
   }
+  xmlFree(model_type);
+
   return back;
 }
 
@@ -821,24 +832,24 @@ vpXmlParserCamera::read_camera_model (xmlDocPtr doc, xmlNodePtr node,
   Write camera parameters in an XML Tree.
 
   \param node : XML tree, pointing on a marker equipement.
-  \param camera_name : name of the camera : useful if the xml file has multiple
+  \param cam_name : name of the camera : useful if the xml file has multiple
   camera parameters. Set as "" if the camera name is not ambiguous.
-  \param image_width : width of image  on which camera calibration was performed.
+  \param im_width : width of image  on which camera calibration was performed.
     Set as 0 if not ambiguous.
-  \param image_height : height of the image  on which camera calibration
+  \param im_height : height of the image  on which camera calibration
     was performed. Set as 0 if not ambiguous.
-  \param subsampling_width : subsampling of the image width sent by the camera.
+  \param subsampl_width : subsampling of the image width sent by the camera.
     Set as 0 if not ambiguous.
-  \param subsampling_height : subsampling of the image height sent by the camera.
+  \param subsampl_height : subsampling of the image height sent by the camera.
     Set as 0 if not ambiguous.
 
   \return error code.
  */
 int vpXmlParserCamera::
-write (xmlNodePtr node, const std::string& camera_name,
-       const unsigned int image_width, const unsigned int image_height,
-       const unsigned int subsampling_width,
-       const unsigned int subsampling_height)
+write (xmlNodePtr node, const std::string& cam_name,
+       const unsigned int im_width, const unsigned int im_height,
+       const unsigned int subsampl_width,
+       const unsigned int subsampl_height)
 {
   int back = SEQUENCE_OK;
 
@@ -851,46 +862,46 @@ write (xmlNodePtr node, const std::string& camera_name,
   {
     //<name>
 
-    if(!camera_name.empty()){
+    if(!cam_name.empty()){
       node_tmp = xmlNewComment((xmlChar*)"Name of the camera");
       xmlAddChild(node_camera,node_tmp);
       xmlNewTextChild(node_camera,NULL,(xmlChar*)LABEL_XML_CAMERA_NAME,
-                      (xmlChar*)camera_name.c_str());
+                      (xmlChar*)cam_name.c_str());
     }
 
-    if(image_width != 0 || image_height != 0){
+    if(im_width != 0 || im_height != 0){
       char str[11];
       //<image_width>
       node_tmp = xmlNewComment((xmlChar*)"Size of the image on which camera calibration was performed");
       xmlAddChild(node_camera,node_tmp);
 
-      sprintf(str,"%u",image_width);
+      sprintf(str,"%u",im_width);
       xmlNewTextChild(node_camera,NULL,(xmlChar*)LABEL_XML_WIDTH,(xmlChar*)str);
       //<image_height>
 
-      sprintf(str,"%u",image_height);
+      sprintf(str,"%u",im_height);
       xmlNewTextChild(node_camera,NULL,(xmlChar*)LABEL_XML_HEIGHT,(xmlChar*)str);
       if(subsampling_width != 0 || subsampling_height != 0){
         node_tmp = xmlNewComment((xmlChar*)"Subsampling used to obtain the current size of the image.");
         xmlAddChild(node_camera,node_tmp);
 
         //<subsampling_width>
-        sprintf(str,"%u",subsampling_width);
+        sprintf(str,"%u",subsampl_width);
         xmlNewTextChild(node_camera,NULL,(xmlChar*)LABEL_XML_SUBSAMPLING_WIDTH,
                         (xmlChar*)str);
         //<subsampling_height>
-        sprintf(str,"%u",subsampling_height);
+        sprintf(str,"%u",subsampl_height);
         xmlNewTextChild(node_camera,NULL,(xmlChar*)LABEL_XML_SUBSAMPLING_HEIGHT,
                         (xmlChar*)str);
         node_tmp = xmlNewComment((xmlChar*)"The full size is the sensor size actually used to grab the image. full_width = subsampling_width * image_width");
         xmlAddChild(node_camera,node_tmp);
 
         //<full_width>
-        sprintf(str,"%u",image_width*subsampling_width);
+        sprintf(str,"%u",im_width*subsampl_width);
         xmlNewTextChild(node_camera,NULL,(xmlChar*)LABEL_XML_FULL_WIDTH,
                         (xmlChar*)str);
         //<full_height>
-        sprintf(str,"%u",image_height*subsampling_height);
+        sprintf(str,"%u",im_height*subsampl_height);
         xmlNewTextChild(node_camera,NULL,(xmlChar*)LABEL_XML_FULL_HEIGHT,
                         (xmlChar*)str);
       }
diff --git a/src/camera/vpXmlParserCamera.h b/src/camera/vpXmlParserCamera.h
index de24acd6..f768641e 100644
--- a/src/camera/vpXmlParserCamera.h
+++ b/src/camera/vpXmlParserCamera.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpXmlParserCamera.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpXmlParserCamera.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -257,16 +257,16 @@ public:
   unsigned int getSubsampling_height(){return this->subsampling_height;}
   vpCameraParameters getCameraParameters(){return this->camera;}
 
-  void setCameraName(const std::string& camera_name){
-    this->camera_name = camera_name;
+  void setCameraName(const std::string& name){
+    this->camera_name = name;
   }
   void setWidth(const unsigned int width){ this->image_width = width ; }
   void setHeight(const unsigned int height){ this->image_height = height ; }
-  void setSubsampling_width(const unsigned int subsampling_width){
-    this->subsampling_width = subsampling_width ;
+  void setSubsampling_width(const unsigned int subsampling){
+    this->subsampling_width = subsampling ;
   }
-  void setSubsampling_height(const unsigned int subsampling_height){
-    this->subsampling_height = subsampling_height ;
+  void setSubsampling_height(const unsigned int subsampling){
+    this->subsampling_height = subsampling ;
   }
 
 private:
diff --git a/src/computer-vision/homography-estimation/vpHomography.cpp b/src/computer-vision/homography-estimation/vpHomography.cpp
index a16e81eb..cb4ee303 100644
--- a/src/computer-vision/homography-estimation/vpHomography.cpp
+++ b/src/computer-vision/homography-estimation/vpHomography.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHomography.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpHomography.cpp 4661 2014-02-10 19:34:58Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -47,55 +47,24 @@
   the particular case of homography
 */
 
-#include <visp/vpHomography.h>
+#include <stdio.h>
+
 #include <visp/vpDebug.h>
+#include <visp/vpHomography.h>
 #include <visp/vpMatrix.h>
+#include <visp/vpRobust.h>
 
 // Exception
 #include <visp/vpException.h>
 #include <visp/vpMatrixException.h>
 
-// Debug trace
-#include <visp/vpDebug.h>
-
-#include <stdio.h>
-
-
-
-/*!
-  \brief initialiaze a 4x4 matrix as identity
-*/
-
-void
-vpHomography::init()
-{
-  unsigned int i,j ;
-
-  try {
-    vpMatrix::resize(3,3) ;
-  }
-  catch(vpException me)
-  {
-    vpERROR_TRACE("Error caught") ;
-    throw ;
-  }
-
-
-  for (i=0 ; i < 3 ; i++)
-    for (j=0 ; j < 3; j++)
-      if (i==j)
-	(*this)[i][j] = 1.0 ;
-      else
- 	(*this)[i][j] = 0.0;
-
-}
-
 /*!
   \brief initialize an homography as Identity
 */
-vpHomography::vpHomography() : vpMatrix()
+vpHomography::vpHomography() : data(NULL), aMb(), bP()
 {
-  init() ;
+  data = new double [9];
+  setIdentity();
 }
 
 
@@ -103,98 +72,87 @@ vpHomography::vpHomography() : vpMatrix()
   \brief initialize an homography from another homography
 */
 
-vpHomography::vpHomography(const vpHomography &aHb) : vpMatrix()
+vpHomography::vpHomography(const vpHomography &H) : data(NULL), aMb(), bP()
 {
-  init() ;
-  *this = aHb ;
+  data = new double [9];
+
+  *this = H;
 }
 
 /*!
   \brief initialize an homography from another homography
 */
-
-vpHomography::vpHomography(const vpHomogeneousMatrix &aMb,
-			   const vpPlane &_bP) : vpMatrix()
+vpHomography::vpHomography(const vpHomogeneousMatrix &M, const vpPlane &p) : data(NULL), aMb(), bP()
 {
-
-
-  init() ;
-
-  buildFrom(aMb,_bP) ;
-
-
+  data = new double [9];
+  buildFrom(M, p) ;
 }
 
 vpHomography::vpHomography(const vpThetaUVector &tu,
-			   const vpTranslationVector &atb,
-			   const vpPlane &_bP) : vpMatrix()
+                           const vpTranslationVector &atb,
+                           const vpPlane &p) : data(NULL), aMb(), bP()
 {
-  init() ;
-  buildFrom(tu,atb,_bP) ;
+  data = new double [9];
+  buildFrom(tu, atb, p) ;
 }
 
 vpHomography::vpHomography(const vpRotationMatrix &aRb,
-			   const vpTranslationVector &atb,
-			   const vpPlane &_bP) : vpMatrix()
+                           const vpTranslationVector &atb,
+                           const vpPlane &p) : data(NULL), aMb(), bP()
 {
-  init() ;
-  buildFrom(aRb,atb,_bP) ;
- }
+  data = new double [9];
+  buildFrom(aRb, atb, p) ;
+}
 
-vpHomography::vpHomography(const vpPoseVector &arb,
-			   const vpPlane &_bP) : vpMatrix()
+vpHomography::vpHomography(const vpPoseVector &arb, const vpPlane &p) : data(NULL), aMb(), bP()
 {
-
-  init() ;
-  buildFrom(arb,_bP) ;
+  data = new double [9];
+  buildFrom(arb, p) ;
 }
 
-
+vpHomography::~vpHomography()
+{
+  if (data)
+    delete [] data;
+  data = NULL;
+}
 
 void
-vpHomography::buildFrom(const vpHomogeneousMatrix &aMb,
-			const vpPlane &_bP)
+vpHomography::buildFrom(const vpHomogeneousMatrix &M,
+                        const vpPlane &p)
 {
-
-
-  insert(aMb) ;
-  insert(_bP) ;
+  insert(M) ;
+  insert(p) ;
   build() ;
-
-
 }
 
 void
 vpHomography::buildFrom(const vpThetaUVector &tu,
-			const vpTranslationVector &atb,
-			const vpPlane &_bP)
+                        const vpTranslationVector &atb,
+                        const vpPlane &p)
 {
-
   insert(tu) ;
   insert(atb) ;
-  insert(_bP) ;
+  insert(p) ;
   build() ;
 }
 
 void
 vpHomography::buildFrom(const vpRotationMatrix &aRb,
-			const vpTranslationVector &atb,
-			const vpPlane &_bP)
+                        const vpTranslationVector &atb,
+                        const vpPlane &p)
 {
-  init() ;
   insert(aRb) ;
   insert(atb) ;
-  insert(_bP) ;
+  insert(p) ;
   build() ;
 }
 
 void
-vpHomography::buildFrom(const vpPoseVector &arb,
-			const vpPlane &_bP)
+vpHomography::buildFrom(const vpPoseVector &arb, const vpPlane &p)
 {
-
   aMb.buildFrom(arb[0],arb[1],arb[2],arb[3],arb[4],arb[5]) ;
-  insert(_bP) ;
+  insert(p) ;
   build() ;
 }
 
@@ -204,31 +162,28 @@ vpHomography::buildFrom(const vpPoseVector &arb,
 
 
 /*!
-  \brief insert the rotational component and
-  recompute the homography
+  \brief insert the rotational component.
+  To recompute the homography call build().
 */
 void
 vpHomography::insert(const vpRotationMatrix &aRb)
 {
   aMb.insert(aRb) ;
-  //build() ;
 }
+
 /*!
-  \brief insert the rotational component and
-  recompute the homography
+  \brief insert the rotational component.
+  To recompute the homography call build().
 */
 void
-vpHomography::insert(const vpHomogeneousMatrix &_aMb)
+vpHomography::insert(const vpHomogeneousMatrix &M)
 {
-
-  aMb = _aMb ;
-  //build() ;
+  this->aMb = M ;
 }
 
-
 /*!  \brief insert the rotational component, insert a
-  theta u vector (transformation into a rotation matrix) and
-  recompute the homography
+  theta u vector (transformation into a rotation matrix).
+  To recompute the homography call build().
 
 */
 void
@@ -236,56 +191,53 @@ vpHomography::insert(const vpThetaUVector &tu)
 {
   vpRotationMatrix aRb(tu) ;
   aMb.insert(aRb) ;
-  //build() ;
 }
 
-
 /*!
-  \brief  insert the translational component in a homography and
-  recompute the homography
+  \brief  insert the translational component in a homography.
+  To recompute the homography call build().
 */
 void
 vpHomography::insert(const vpTranslationVector &atb)
 {
   aMb.insert(atb) ;
-  //build() ;
 }
 
 /*!
-  \brief  insert the reference plane and
-  recompute the homography
+  \brief  insert the reference plane.
+  To recompute the homography call build().
 */
 void
-vpHomography::insert(const vpPlane &_bP)
+vpHomography::insert(const vpPlane &p)
 {
-
-  bP= _bP ;
-  //build() ;
+  this->bP = p;
 }
 
-
 /*!
-  \brief invert the homography
+  \brief Invert the homography
 
-
-  \return   [H]^-1
+  \return  \f$\bf H^{-1}\f$
 */
 vpHomography
 vpHomography::inverse() const
 {
-  vpHomography bHa ;
+  vpMatrix M = (*this);
+  vpMatrix Minv;
+  M.pseudoInverse(Minv, 1e-16);
 
+  vpHomography H;
 
-  vpMatrix::pseudoInverse(bHa,1e-16) ;
+  for(unsigned int i=0; i<3; i++)
+    for(unsigned int j=0; j<3; j++)
+      H[i][j] = Minv[i][j];
 
-  return  bHa;
+  return H;
 }
 
 /*!
-  \brief invert the homography
-
+  \brief Invert the homography.
 
-  \param bHa : [H]^-1
+  \param bHa : \f$\bf H^{-1}\f$ with H = *this.
 */
 void
 vpHomography::inverse(vpHomography &bHa) const
@@ -297,14 +249,13 @@ vpHomography::inverse(vpHomography &bHa) const
 void
 vpHomography::save(std::ofstream &f) const
 {
-  if (f != NULL)
+  if (! f.fail())
   {
     f << *this ;
   }
   else
   {
-    vpERROR_TRACE("\t\t file not open " );
-    throw(vpException(vpException::ioError, "\t\t file not open")) ;
+    throw(vpException(vpException::ioError, "Cannot write the homography to the output stream")) ;
   }
 }
 
@@ -328,7 +279,7 @@ vpHomography vpHomography::operator*(const vpHomography &H) const
     for(unsigned int j = 0; j < 3; j++) {
       double s = 0.;
       for(unsigned int k = 0; k < 3; k ++) {
-	s += (*this)[i][k] * H[k][j]; 
+        s += (*this)[i][k] * H[k][j];
       }
       Hp[i][j] = s;
     }
@@ -336,6 +287,27 @@ vpHomography vpHomography::operator*(const vpHomography &H) const
   return Hp;
 }
 
+/*!
+  Operation a = aHb * b.
+
+  \param b : 3 dimension vector.
+*/
+vpColVector
+vpHomography::operator*(const vpColVector &b) const
+{
+  if (b.size() != 3)
+    throw(vpException(vpException::dimensionError, "Cannot multiply an homography by a vector of dimension %d", b.size()));
+
+  vpColVector a(3);
+  for(unsigned int i=0; i<3; i++) {
+    a[i] = 0.;
+    for(unsigned int j=0; j<3; j++)
+      a[i] += (*this)[i][j] * b[j];
+  }
+
+  return a;
+}
+
 /*!
  
   Multiply an homography by a scalar.
@@ -377,14 +349,67 @@ vpHomography vpHomography::operator*(const double &v) const
 vpHomography vpHomography::operator/(const double &v) const
 {
   vpHomography H;
-  double one_over_v = 1. / v;
- 
+  if (std::fabs(v) <= std::numeric_limits<double>::epsilon())
+    throw vpMatrixException(vpMatrixException::divideByZeroError, "Divide by zero in method /=(double v)");
+
+  double vinv = 1/v ;
+
   for (unsigned int i=0; i < 9; i ++) {
-    H.data[i] = this->data[i] * one_over_v;
+    H.data[i] = this->data[i] * vinv;
   }
 
   return H;
 }
+
+//! Divide  all the element of the homography matrix by v : Hij = Hij / v
+vpHomography & vpHomography::operator/=(double v)
+{
+  //if (x == 0)
+  if (std::fabs(v) <= std::numeric_limits<double>::epsilon())
+    throw vpMatrixException(vpMatrixException::divideByZeroError, "Divide by zero in method /=(double v)");
+
+  double vinv = 1/v ;
+
+  for (unsigned int i=0;i<9;i++)
+    data[i] *= vinv;
+
+  return *this;
+}
+
+/*!
+  Copy operator.
+  Allow operation such as aHb = H
+
+  \param H : Homography matrix to be copied.
+*/
+vpHomography &
+vpHomography::operator=(const vpHomography &H)
+{
+  for (unsigned int i=0; i< 3; i++)
+    for (unsigned int j=0; j< 3; j++)
+    (*this)[i][j] = H[i][j];
+
+  return *this;
+}
+/*!
+  Copy operator.
+  Allow operation such as aHb = H
+
+  \param H : Matrix to be copied.
+*/
+vpHomography &
+vpHomography::operator=(const vpMatrix &H)
+{
+  if (H.getRows() !=3 || H.getCols() != 3)
+    throw(vpException(vpException::dimensionError, "The matrix is not an homography"));
+
+  for (unsigned int i=0; i< 3; i++)
+    for (unsigned int j=0; j< 3; j++)
+    (*this)[i][j] = H[i][j];
+
+  return *this;
+}
+
 /*!
   Read an homography in a file, verify if it is really an homogeneous
   matrix.
@@ -394,29 +419,29 @@ vpHomography vpHomography::operator/(const double &v) const
 void
 vpHomography::load(std::ifstream &f)
 {
-  if (f != NULL)
+  if (! f.fail())
   {
     for (unsigned int i=0 ; i < 3 ; i++)
       for (unsigned int j=0 ; j < 3 ; j++)
       {
-	f>>   (*this)[i][j] ;
+        f >> (*this)[i][j] ;
       }
   }
   else
   {
-    vpERROR_TRACE("\t\t file not open " );
-    throw(vpException(vpException::ioError, "\t\t file not open")) ;
+    throw(vpException(vpException::ioError, "Cannot read the homography from the input stream")) ;
   }
 }
 
 
-
-//! Print the matrix as a vector [T thetaU]
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+//! Print the homography as a matrix.
 void
 vpHomography::print()
 {
   std::cout <<*this << std::endl ;
 }
+#endif // #ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
 
 /*!
   \brief Compute aHb such that
@@ -428,23 +453,26 @@ vpHomography::print()
 void
 vpHomography::build()
 {
-  unsigned int i,j ;
-
   vpColVector n(3) ;
   vpColVector atb(3) ;
-  for (i=0 ; i < 3 ; i++)
+  vpMatrix aRb(3,3);
+  for (unsigned int i=0 ; i < 3 ; i++)
   {
-    atb[i] = aMb[i][3] ;
-    for (j=0 ; j < 3 ; j++) (*this)[i][j] = aMb[i][j];
+    atb[i] = aMb[i][3];
+    for (unsigned int j=0 ; j < 3 ; j++)
+      aRb[i][j] = aMb[i][j];
   }
 
   bP.getNormal(n) ;
 
   double d = bP.getD() ;
-  *this -= atb*n.t()/d ; // the d used in the equation is such as nX=d is the
+  vpMatrix aHb = aRb - atb*n.t()/d ; // the d used in the equation is such as nX=d is the
 			 // plane equation. So if the plane is described by
 			 // Ax+By+Cz+D=0, d=-D
 
+  for (unsigned int i=0 ; i < 3 ; i++)
+    for (unsigned int j=0 ; j < 3 ; j++)
+      (*this)[i][j] = aHb[i][j];
 }
 
 /*!
@@ -457,30 +485,284 @@ vpHomography::build()
 */
 void
 vpHomography::build(vpHomography &aHb,
-		    const vpHomogeneousMatrix &aMb,
-		    const vpPlane &bP)
+                    const vpHomogeneousMatrix &aMb,
+                    const vpPlane &bP)
 {
-  unsigned int i,j ;
-
   vpColVector n(3) ;
   vpColVector atb(3) ;
-  for (i=0 ; i < 3 ; i++)
+  vpMatrix aRb(3,3);
+  for (unsigned int i=0 ; i < 3 ; i++)
   {
     atb[i] = aMb[i][3] ;
-    for (j=0 ; j < 3 ; j++) aHb[i][j] = aMb[i][j];
+    for (unsigned int j=0 ; j < 3 ; j++)
+      aRb[i][j] = aMb[i][j];
   }
 
   bP.getNormal(n) ;
 
   double d = bP.getD() ;
-  aHb -= atb*n.t()/d ; // the d used in the equation is such as nX=d is the
+  vpMatrix aHb_ = aRb - atb*n.t()/d ; // the d used in the equation is such as nX=d is the
 		       // plane equation. So if the plane is described by
 		       // Ax+By+Cz+D=0, d=-D
 
+  for (unsigned int i=0 ; i < 3 ; i++)
+    for (unsigned int j=0 ; j < 3 ; j++)
+      aHb[i][j] = aHb_[i][j];
 }
 
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
+/*!
+ Set the homography as identity transformation.
+*/
+void
+vpHomography::setIdentity()
+{
+  for (unsigned int i=0 ; i < 3 ; i++)
+    for (unsigned int j=0 ; j < 3; j++)
+      if (i==j)
+        (*this)[i][j] = 1.0 ;
+      else
+        (*this)[i][j] = 0.0;
+}
+
+/*!
+  Given \c iPa a point with coordinates \f$(u_a,v_a)\f$ expressed in pixel in image a, and the homography \c bHa that
+  links image a and b, computes the coordinates of the point \f$(u_b,v_b)\f$ in the image b using the camera parameters
+  matrix \f$\bf K\f$.
+
+  Compute \f$^b{\bf p} = {\bf K} \; {^b}{\bf H}_a \; {\bf K}^{-1} {^a}{\bf p}\f$ with \f$^a{\bf p}=(u_a,v_a,1)\f$
+  and \f$^b{\bf p}=(u_b,v_b,1)\f$
+
+  \return The coordinates in pixel of the point with coordinates \f$(u_b,v_b)\f$.
+  */
+vpImagePoint vpHomography::project(const vpCameraParameters &cam, const vpHomography &bHa, const vpImagePoint &iPa)
+{
+  double xa = iPa.get_u();
+  double ya = iPa.get_v();
+  vpMatrix H = cam.get_K() * bHa * cam.get_K_inverse();
+  double z = xa * H[2][0] + ya * H[2][1] + H[2][2];
+  double xb = (xa * H[0][0] + ya * H[0][1] + H[0][2]) / z;
+  double yb = (xa * H[1][0] + ya * H[1][1] + H[1][2]) / z;
+
+  vpImagePoint iPb(yb, xb);
+
+  return iPb;
+}
+/*!
+  Given \c Pa a point with normalized coordinates \f$(x_a,y_a,1)\f$ in the image plane a, and the homography \c bHa that
+  links image a and b, computes the normalized coordinates of the point \f$(x_b,y_b,1)\f$ in the image plane b.
+
+  Compute \f$^b{\bf p} = {^b}{\bf H}_a \; {^a}{\bf p}\f$ with \f$^a{\bf p}=(x_a,y_a,1)\f$
+  and \f$^b{\bf p}=(x_b,y_b,1)\f$
+
+  \return The coordinates in meter of the point with coordinates \f$(x_b,y_b)\f$.
+  */
+vpPoint vpHomography::project(const vpHomography &bHa, const vpPoint &Pa)
+{
+  double xa = Pa.get_x();
+  double ya = Pa.get_y();
+  double z = xa * bHa[2][0] + ya * bHa[2][1] + bHa[2][2];
+  double xb = (xa * bHa[0][0] + ya * bHa[0][1] + bHa[0][2]) / z;
+  double yb = (xa * bHa[1][0] + ya * bHa[1][1] + bHa[1][2]) / z;
+
+  vpPoint Pb;
+  Pb.set_x(xb);
+  Pb.set_y(yb);
+
+  return Pb;
+}
+
+/*!
+  From couples of matched points \f$^a{\bf p}=(x_a,y_a,1)\f$ in image a
+  and \f$^b{\bf p}=(x_b,y_b,1)\f$ in image b with homogeneous coordinates, computes the
+  homography matrix by resolving \f$^a{\bf p} = ^a{\bf H}_b\; ^b{\bf p}\f$
+  using a robust estimation scheme.
+
+  This method is to compare to DLT() except that here a robust estimator is used to reject
+  couples of points that are considered as outliers.
+
+  At least 4 couples of points are needed.
+
+  \param xb, yb : Coordinates vector of matched points in image b. These coordinates are expressed in meters.
+  \param xa, ya : Coordinates vector of matched points in image a. These coordinates are expressed in meters.
+  \param aHb : Estimated homography that relies the transformation from image a to image b.
+  \param inliers : Vector that indicates if a matched point is an inlier (true) or an outlier (false).
+  \param residual : Global residual computed as
+  \f$r = \sqrt{1/n \sum_{inliers} {\| {^a{\bf p} - {\hat{^a{\bf H}_b}} {^b{\bf p}}} \|}^{2}}\f$ with \f$n\f$ the
+  number of inliers.
+  \param weights_threshold : Threshold applied on the weights updated during the robust estimation and
+  used to consider if a point is an outlier or an inlier. Values should be in [0:1].
+  A couple of matched points that have a weight lower than this threshold is considered as an outlier.
+  A value equal to zero indicates that all the points are inliers.
+  \param niter : Number of iterations of the estimation process.
+  \param normalization : When set to true, the coordinates of the points are normalized. The normalization
+  carried out is the one preconized by Hartley.
+
+  \sa DLT(), ransac()
  */
+void
+vpHomography::robust(const std::vector<double> &xb, const std::vector<double> &yb,
+                     const std::vector<double> &xa, const std::vector<double> &ya,
+                     vpHomography &aHb,
+                     std::vector<bool> &inliers,
+                     double &residual,
+                     double weights_threshold,
+                     unsigned int niter,
+                     bool normalization)
+{
+  unsigned int n = (unsigned int) xb.size();
+  if (yb.size() != n || xa.size() != n || ya.size() != n)
+    throw(vpException(vpException::dimensionError,
+                      "Bad dimension for robust homography estimation"));
+
+  // 4 point are required
+  if(n<4)
+    throw(vpException(vpException::fatalError, "There must be at least 4 matched points"));
+
+  try{
+    std::vector<double> xan, yan, xbn, ybn;
+
+    double xg1=0., yg1=0., coef1=0., xg2=0., yg2=0., coef2=0.;
+
+    vpHomography aHbn;
+
+    if (normalization) {
+      vpHomography::HartleyNormalization(xb, yb, xbn, ybn, xg1, yg1, coef1);
+      vpHomography::HartleyNormalization(xa, ya, xan, yan, xg2, yg2, coef2);
+    }
+    else {
+      xbn = xb;
+      ybn = yb;
+      xan = xa;
+      yan = ya;
+    }
+
+    unsigned int nbLinesA = 2;
+    vpMatrix A(nbLinesA*n,8);
+    vpColVector X(8);
+    vpColVector Y(nbLinesA*n);
+    vpMatrix W(nbLinesA*n, nbLinesA*n) ; // Weight matrix
+
+    vpColVector w(nbLinesA*n) ;
+
+    // All the weights are set to 1 at the beginning to use a classical least square scheme
+    w = 1;
+    // Update the square matrix associated to the weights
+    for (unsigned int i=0; i < nbLinesA*n; i ++) {
+      W[i][i] = w[i];
+    }
+
+    // build matrix A
+    for(unsigned int i=0; i<n;i++) {
+      A[nbLinesA*i][0]=xbn[i];
+      A[nbLinesA*i][1]=ybn[i];
+      A[nbLinesA*i][2]=1;
+      A[nbLinesA*i][3]=0 ;
+      A[nbLinesA*i][4]=0 ;
+      A[nbLinesA*i][5]=0;
+      A[nbLinesA*i][6]=-xbn[i]*xan[i] ;
+      A[nbLinesA*i][7]=-ybn[i]*xan[i];
+
+      A[nbLinesA*i+1][0]=0 ;
+      A[nbLinesA*i+1][1]=0;
+      A[nbLinesA*i+1][2]=0;
+      A[nbLinesA*i+1][3]=xbn[i];
+      A[nbLinesA*i+1][4]=ybn[i];
+      A[nbLinesA*i+1][5]=1;
+      A[nbLinesA*i+1][6]=-xbn[i]*yan[i];
+      A[nbLinesA*i+1][7]=-ybn[i]*yan[i];
+
+      Y[nbLinesA*i] = xan[i];
+      Y[nbLinesA*i+1] = yan[i];
+    }
+
+    vpMatrix WA;
+    vpMatrix WAp;
+    unsigned int iter = 0;
+    vpRobust r(nbLinesA*n) ; // M-Estimator
+
+    while (iter < niter) {
+      WA = W * A;
+
+      X = WA.pseudoInverse(1e-26)*W*Y;
+      vpColVector residu;
+      residu = Y - A * X;
+
+      // Compute the weights using the Tukey biweight M-Estimator
+      r.setIteration(iter) ;
+      r.MEstimator(vpRobust::TUKEY, residu, w) ;
+
+      // Update the weights matrix
+      for (unsigned int i=0; i < n*nbLinesA; i ++) {
+        W[i][i] = w[i];
+      }
+      // Build the homography
+      for(unsigned int i=0;i<8;i++)
+        aHbn.data[i]= X[i];
+      aHbn[2][2] = 1;
+      {
+        vpMatrix aHbnorm = aHbn;
+        aHbnorm /= aHbnorm[2][2] ;
+      }
+
+      iter ++;
+    }
+    inliers.resize(n);
+    unsigned int nbinliers = 0;
+    for(unsigned int i=0; i< n; i++) {
+      if (w[i*2] < weights_threshold && w[i*2+1] < weights_threshold)
+        inliers[i] = false;
+      else {
+        inliers[i] = true;
+        nbinliers ++;
+      }
+    }
+
+    if (normalization) {
+      // H after denormalization
+      vpHomography::HartleyDenormalization(aHbn, aHb, xg1, yg1, coef1, xg2, yg2, coef2);
+    }
+    else {
+      aHb = aHbn;
+    }
+
+    residual = 0 ;
+    vpColVector a(3), b(3), c(3);
+    for (unsigned int i=0 ; i < n ; i++) {
+      if (inliers[i]) {
+        a[0] = xa[i] ; a[1] = ya[i] ; a[2] = 1 ;
+        b[0] = xb[i] ; b[1] = yb[i] ; b[2] = 1 ;
+
+        c = aHb*b ; c /= c[2] ;
+        residual += (a-c).sumSquare();
+      }
+    }
+
+    residual = sqrt(residual/nbinliers);
+  }
+  catch(...)
+  {
+    throw(vpException(vpException::fatalError, "Cannot estimate an homography")) ;
+  }
+}
+
+/*!
+\brief std::cout a matrix
+*/
+VISP_EXPORT std::ostream &operator <<(std::ostream &s,const vpHomography &H)
+{
+  std::ios_base::fmtflags original_flags = s.flags();
+
+  s.precision(10) ;
+  for (unsigned int i=0;i<H.getRows();i++) {
+    for (unsigned int j=0;j<H.getCols();j++){
+      s <<  H[i][j] << "  ";
+    }
+    // We don't add a \n char on the end of the last matrix line
+    if (i < H.getRows()-1)
+      s << std::endl;
+  }
+
+  s.flags(original_flags); // restore s to standard state
+
+  return s;
+}
diff --git a/src/computer-vision/homography-estimation/vpHomography.h b/src/computer-vision/homography-estimation/vpHomography.h
index f4d031bd..c7c88537 100644
--- a/src/computer-vision/homography-estimation/vpHomography.h
+++ b/src/computer-vision/homography-estimation/vpHomography.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHomography.h 4276 2013-06-25 12:36:48Z fspindle $
+ * $Id: vpHomography.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -51,14 +51,17 @@ tools for homography computation.
 #ifndef vpHomography_hh
 #define vpHomography_hh
 
+#include <list>
+#include <vector>
+
+#include <visp/vpCameraParameters.h>
+#include <visp/vpImagePoint.h>
 #include <visp/vpHomogeneousMatrix.h>
 #include <visp/vpPlane.h>
 #ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
 #  include <visp/vpList.h>
 #endif
 
-#include <list>
-
 /*!  
 
   \class vpHomography
@@ -84,7 +87,9 @@ tools for homography computation.
   { ^b{\bf n}^T}
   \f]
 
-  The example below shows how to manipulate this class to first
+  The \ref tutorial-homography explains how to use this class.
+
+  The example below shows also how to manipulate this class to first
   compute a ground truth homography from camera poses, project pixel
   coordinates points using an homography and lastly estimate an
   homography from a subset of 4 matched points in frame a and frame b
@@ -123,7 +128,7 @@ int main()
   // Compute the coordinates in pixels of the 4 object points in the
   // camera frame a
   vpPoint Pa[4];
-  double xa[4], ya[4]; // Coordinates in pixels of the points in frame a
+  std::vector<double> xa(4), ya(4); // Coordinates in pixels of the points in frame a
   for(int i=0 ; i < 4 ; i++) {
     Pa[i] = Po[i];
     Pa[i].project(aMo); // Project the points from object frame to
@@ -136,7 +141,7 @@ int main()
   // Compute the coordinates in pixels of the 4 object points in the
   // camera frame b
   vpPoint Pb[4];
-  double xb[4], yb[4]; // Coordinates in pixels of the points in frame b
+  std::vector<double> xb(4), yb(4); // Coordinates in pixels of the points in frame b
   for(int i=0 ; i < 4 ; i++) {
     Pb[i] = Po[i];
     Pb[i].project(bMo); // Project the points from object frame to
@@ -162,7 +167,7 @@ int main()
   }
 
   // Estimate the homography from 4 points coordinates expressed in pixels
-  vpHomography::HartleyDLT(4, xb, yb, xa, ya, aHb);
+  vpHomography::DLT(xb, yb, xa, ya, aHb, true);
   aHb /= aHb[2][2]; // Apply a scale factor to have aHb[2][2] = 1
 
   std::cout << "Estimated homography aHb: \n" << aHb<< std::endl;
@@ -170,211 +175,264 @@ int main()
   \endcode
 
 */
-class VISP_EXPORT vpHomography : public vpMatrix
+class VISP_EXPORT vpHomography
 {
-
-private:
-  static const double sing_threshold; // = 0.0001;
-  static const double threshold_rotation; 
-  static const double threshold_displacement;
-  vpHomogeneousMatrix aMb ;
-  //  bool isplanar;
-  //! reference plane coordinates  expressed in Rb
-  vpPlane bP ;
-  void init() ;
-
-private:
-  //! insert a rotation matrix
-  void insert(const vpHomogeneousMatrix &aRb) ;
-  //! insert a rotation matrix
-  void insert(const vpRotationMatrix &aRb) ;
-  //! insert a theta u vector (transformation into a rotation matrix)
-  void insert(const vpThetaUVector &tu) ;
-  //! insert a translation vector
-  void insert(const vpTranslationVector &atb) ;
-  //! insert a translation vector
-  void insert(const vpPlane &bP) ;
-
-  static void  initRansac(unsigned int n,
-                          double *xb, double *yb,
-                          double *xa, double *ya,
-                          vpColVector &x) ;
-
-public:
-  static void HartleyNormalization(unsigned int n,
-                                   double *x, double *y,
-                                   double *xn, double *yn,
-                                   double &xg, double &yg,
-                                   double &coef);
-  static void HartleyDenormalization(vpHomography &aHbn,
-                                     vpHomography &aHb,
-                                     double xg1, double yg1, double coef1,
-                                     double xg2, double yg2, double coef2 ) ;
-
-
-  vpHomography() ;
-
-  //! copy constructor
-  vpHomography(const vpHomography &aMb) ;
-  //! Construction from Translation and rotation and a plane
-  vpHomography(const vpHomogeneousMatrix &aMb,
-               const vpPlane &bP) ;
-  //! Construction from Translation and rotation and a plane
-  vpHomography(const vpRotationMatrix &aRb,
-               const vpTranslationVector &atb,
-               const vpPlane &bP) ;
-  //! Construction from Translation and rotation and a plane
-  vpHomography(const vpThetaUVector &tu,
-               const vpTranslationVector &atb,
-               const vpPlane &bP) ;
-  //! Construction from Translation and rotation and a plane
-  vpHomography(const vpPoseVector &arb,
-               const vpPlane &bP) ;
-  virtual ~vpHomography() { }
-
-  //! Construction from Translation and rotation and a plane
-  void buildFrom(const vpRotationMatrix &aRb,
-                 const vpTranslationVector &atb,
+  public:
+    //! Data array
+    double *data;
+
+  private:
+    static const double sing_threshold; // = 0.0001;
+    static const double threshold_rotation;
+    static const double threshold_displacement;
+    vpHomogeneousMatrix aMb ;
+    //  bool isplanar;
+    //! reference plane coordinates  expressed in Rb
+    vpPlane bP ;
+
+  private:
+    //! build the homography from aMb and Rb
+    void build() ;
+
+    //! insert a rotation matrix
+    void insert(const vpHomogeneousMatrix &aRb) ;
+    //! insert a rotation matrix
+    void insert(const vpRotationMatrix &aRb) ;
+    //! insert a theta u vector (transformation into a rotation matrix)
+    void insert(const vpThetaUVector &tu) ;
+    //! insert a translation vector
+    void insert(const vpTranslationVector &atb) ;
+    //! insert a translation vector
+    void insert(const vpPlane &bP) ;
+
+    static void  initRansac(unsigned int n,
+                            double *xb, double *yb,
+                            double *xa, double *ya,
+                            vpColVector &x) ;
+
+  public:
+    vpHomography() ;
+    vpHomography(const vpHomography &H) ;
+    //! Construction from Translation and rotation and a plane
+    vpHomography(const vpHomogeneousMatrix &aMb,
                  const vpPlane &bP) ;
-  //! Construction from Translation and rotation and a plane
-  void buildFrom(const vpThetaUVector &tu,
+    //! Construction from Translation and rotation and a plane
+    vpHomography(const vpRotationMatrix &aRb,
                  const vpTranslationVector &atb,
                  const vpPlane &bP) ;
-  //! Construction from Translation and rotation  and a plane
-  void buildFrom(const vpPoseVector &arb,
+    //! Construction from Translation and rotation and a plane
+    vpHomography(const vpThetaUVector &tu,
+                 const vpTranslationVector &atb,
                  const vpPlane &bP) ;
-  //! Construction from homogeneous matrix and a plane
-  void buildFrom(const vpHomogeneousMatrix &aMb,
+    //! Construction from Translation and rotation and a plane
+    vpHomography(const vpPoseVector &arb,
                  const vpPlane &bP) ;
-
-  //! build the homography from aMb and Rb
-  void build() ;
-
-
-  void computeDisplacement(vpRotationMatrix &aRb,
-                           vpTranslationVector &atb,
-                           vpColVector &n) ;
-
-  void computeDisplacement(const vpColVector& nd,
-                           vpRotationMatrix &aRb,
-                           vpTranslationVector &atb,
-                           vpColVector &n) ;
-
-  //! Load an homography from a file
-  void load(std::ifstream &f) ;
-  //! Print the matrix
-  void print() ;
-  //! Save an homography in a file
-  void save(std::ofstream &f) const ;
-
-  //! invert the homography
-  vpHomography inverse() const ;
-  //! invert the homography
-  void inverse(vpHomography &Hi) const;
-
-  // Multiplication by an homography
-  vpHomography operator*(const vpHomography &H) const;
-
-  // Multiplication by a scalar
-  vpHomography operator*(const double &v) const;
-
-  // Division by a scalar
-  vpHomography operator/(const double &v) const;
-
-  //! build the homography from aMb and Rb
-  static void build(vpHomography &aHb,
-                    const vpHomogeneousMatrix &aMb,
-                    const vpPlane &bP) ;
-
-  static void DLT(unsigned int n,
-                  double *xb, double *yb ,
-                  double *xa, double *ya,
-                  vpHomography &aHb) ;
-
-  static void HartleyDLT(unsigned int n,
-                         double *xb, double *yb ,
-                         double *xa, double *ya,
-                         vpHomography &aHb) ;
-  static void HLM(unsigned int n,
-                  double *xb, double *yb,
-                  double *xa, double *ya ,
-                  bool isplan,
-                  vpHomography &aHb) ;
-
-  static void computeDisplacement(const vpHomography &aHb,
-                                  const vpColVector& nd,
-                                  vpRotationMatrix &aRb,
-                                  vpTranslationVector &atb,
-                                  vpColVector &n) ;
-
-  static void computeDisplacement (const vpHomography &aHb,
-                                   vpRotationMatrix &aRb,
-                                   vpTranslationVector &atb,
-                                   vpColVector &n) ;
-
-  static void computeDisplacement(const vpMatrix &H,
-                                  const double x,
-                                  const double y,
-                                  std::list<vpRotationMatrix> & vR,
-                                  std::list<vpTranslationVector> & vT,
-                                  std::list<vpColVector> & vN) ;
-  static double  computeDisplacement(unsigned int nbpoint,
-                                     vpPoint *c1P,
-                                     vpPoint *c2P,
-                                     vpPlane &oN,
-                                     vpHomogeneousMatrix &c2Mc1,
-                                     vpHomogeneousMatrix &c1Mo,
-                                     int userobust
-                                     ) ;
-  static double computeDisplacement(unsigned int nbpoint,
-                                    vpPoint *c1P,
-                                    vpPoint *c2P,
-                                    vpPlane *oN,
-                                    vpHomogeneousMatrix &c2Mc1,
-                                    vpHomogeneousMatrix &c1Mo,
-                                    int userobust
-                                    ) ;
-  static double computeResidual(vpColVector &x,  vpColVector &M, vpColVector &d);
-  // VVS
-  static double computeRotation(unsigned int nbpoint,
-                                vpPoint *c1P,
-                                vpPoint *c2P,
-                                vpHomogeneousMatrix &c2Mc1,
-                                int userobust
-                                ) ;
-  static void computeTransformation(vpColVector &x,unsigned int *ind, vpColVector &M) ;
-
-  static bool degenerateConfiguration(vpColVector &x,unsigned int *ind) ;
-  static bool degenerateConfiguration(vpColVector &x,unsigned int *ind, double threshold_area);
-
-  static bool ransac(unsigned int n,
-                     double *xb, double *yb,
-                     double *xa, double *ya ,
-                     vpHomography &aHb,
-                     int consensus = 1000,
-                     double threshold = 1e-6
-                                        ) ;
-
-  static  bool ransac(unsigned int n,
-                      double *xb, double *yb,
-                      double *xa, double *ya ,
-                      vpHomography &aHb,
-                      vpColVector& inliers,
-                      double& residual,
-                      int consensus = 1000,
-                      double epsilon = 1e-6,
-                      double areaThreshold = 0.0);
+    virtual ~vpHomography();
+
+    //! Construction from Translation and rotation and a plane
+    void buildFrom(const vpRotationMatrix &aRb,
+                   const vpTranslationVector &atb,
+                   const vpPlane &bP) ;
+    //! Construction from Translation and rotation and a plane
+    void buildFrom(const vpThetaUVector &tu,
+                   const vpTranslationVector &atb,
+                   const vpPlane &bP) ;
+    //! Construction from Translation and rotation  and a plane
+    void buildFrom(const vpPoseVector &arb,
+                   const vpPlane &bP) ;
+    //! Construction from homogeneous matrix and a plane
+    void buildFrom(const vpHomogeneousMatrix &aMb,
+                   const vpPlane &bP) ;
+
+    void computeDisplacement(vpRotationMatrix &aRb,
+                             vpTranslationVector &atb,
+                             vpColVector &n) ;
+
+    void computeDisplacement(const vpColVector& nd,
+                             vpRotationMatrix &aRb,
+                             vpTranslationVector &atb,
+                             vpColVector &n) ;
+
+    //! Return the number of rows of the homography matrix.
+    inline unsigned int getRows() const { return 3;}
+    //! Return the number of columns of the homography matrix.
+    inline unsigned int getCols() const { return 3; }
+
+    //! invert the homography
+    vpHomography inverse() const ;
+    //! invert the homography
+    void inverse(vpHomography &Hi) const;
+
+    //! Load an homography from a file
+    void load(std::ifstream &f) ;
+
+    //! Write elements Hij (usage : H[i][j] = x )
+    inline double *operator[](unsigned int i) { return &data[i*3]; }
+    //! Read elements Hij  (usage : x = H[i][j] )
+    inline double *operator[](unsigned int i) const {return &data[i*3];}
+
+    // Multiplication by an homography
+    vpHomography operator*(const vpHomography &H) const;
+
+    // Multiplication by a scalar
+    vpHomography operator*(const double &v) const;
+    vpColVector operator*(const vpColVector &b) const;
+
+    // Division by a scalar
+    vpHomography operator/(const double &v) const;
+    vpHomography & operator/=(double v);
+    vpHomography & operator=(const vpHomography &H);
+    vpHomography & operator=(const vpMatrix &H);
+
+    //! Save an homography in a file
+    void save(std::ofstream &f) const ;
+
+    void setIdentity();
+
+    friend VISP_EXPORT std::ostream &operator << (std::ostream &s,const vpHomography &H);
+
+    static void DLT(const std::vector<double> &xb, const std::vector<double> &yb,
+                    const std::vector<double> &xa, const std::vector<double> &ya ,
+                    vpHomography &aHb,
+                    bool normalization=true);
+
+    static void HLM(const std::vector<double> &xb, const std::vector<double> &yb,
+                    const std::vector<double> &xa, const std::vector<double> &ya,
+                    bool isplanar,
+                    vpHomography &aHb) ;
+
+    static bool ransac(const std::vector<double> &xb, const std::vector<double> &yb,
+                       const std::vector<double> &xa, const std::vector<double> &ya,
+                       vpHomography &aHb,
+                       std::vector<bool> &inliers,
+                       double &residual,
+                       unsigned int nbInliersConsensus,
+                       double threshold,
+                       bool normalization=true);
+
+    static vpImagePoint project(const vpCameraParameters &cam, const vpHomography &bHa, const vpImagePoint &iPa);
+    static vpPoint project(const vpHomography &bHa, const vpPoint &Pa);
+
+    static void robust(const std::vector<double> &xb, const std::vector<double> &yb,
+                       const std::vector<double> &xa, const std::vector<double> &ya,
+                       vpHomography &aHb,
+                       std::vector<bool> &inlier,
+                       double &residual,
+                       double weights_threshold=0.4,
+                       unsigned int niter=4,
+                       bool normalization=true);
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+    //! build the homography from aMb and Rb
+    static void build(vpHomography &aHb,
+                      const vpHomogeneousMatrix &aMb,
+                      const vpPlane &bP) ;
+
+    static void computeDisplacement(const vpHomography &aHb,
+                                    const vpColVector& nd,
+                                    vpRotationMatrix &aRb,
+                                    vpTranslationVector &atb,
+                                    vpColVector &n) ;
+
+    static void computeDisplacement (const vpHomography &aHb,
+                                     vpRotationMatrix &aRb,
+                                     vpTranslationVector &atb,
+                                     vpColVector &n) ;
+
+    static void computeDisplacement(const vpMatrix &H,
+                                    const double x,
+                                    const double y,
+                                    std::list<vpRotationMatrix> & vR,
+                                    std::list<vpTranslationVector> & vT,
+                                    std::list<vpColVector> & vN) ;
+    static double  computeDisplacement(unsigned int nbpoint,
+                                       vpPoint *c1P,
+                                       vpPoint *c2P,
+                                       vpPlane &oN,
+                                       vpHomogeneousMatrix &c2Mc1,
+                                       vpHomogeneousMatrix &c1Mo,
+                                       int userobust
+                                       ) ;
+    static double computeDisplacement(unsigned int nbpoint,
+                                      vpPoint *c1P,
+                                      vpPoint *c2P,
+                                      vpPlane *oN,
+                                      vpHomogeneousMatrix &c2Mc1,
+                                      vpHomogeneousMatrix &c1Mo,
+                                      int userobust
+                                      ) ;
+    static double computeResidual(vpColVector &x,  vpColVector &M, vpColVector &d);
+    // VVS
+    static double computeRotation(unsigned int nbpoint,
+                                  vpPoint *c1P,
+                                  vpPoint *c2P,
+                                  vpHomogeneousMatrix &c2Mc1,
+                                  int userobust) ;
+    static void computeTransformation(vpColVector &x,unsigned int *ind, vpColVector &M) ;
+    static bool degenerateConfiguration(vpColVector &x,unsigned int *ind) ;
+    static bool degenerateConfiguration(vpColVector &x,unsigned int *ind, double threshold_area);
+    static bool degenerateConfiguration(const std::vector<double> &xb, const std::vector<double> &yb,
+                                        const std::vector<double> &xa, const std::vector<double> &ya);
+    static void HartleyNormalization(unsigned int n,
+                                     const double *x, const double *y,
+                                     double *xn, double *yn,
+                                     double &xg, double &yg,
+                                     double &coef);
+    static void HartleyNormalization(const std::vector<double> &x, const std::vector<double> &y,
+                                     std::vector<double> &xn, std::vector<double> &yn,
+                                     double &xg, double &yg, double &coef);
+    static void HartleyDenormalization(vpHomography &aHbn,
+                                       vpHomography &aHb,
+                                       double xg1, double yg1, double coef1,
+                                       double xg2, double yg2, double coef2 ) ;
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
 
 #ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
-  /*!
+    /*!
     @name Deprecated functions
   */
-  vp_deprecated static void computeDisplacement(const vpMatrix H,
-                                                const double x,
-                                                const double y,
-                                                vpList<vpRotationMatrix> & vR,
-                                                vpList<vpTranslationVector> & vT,
-                                                vpList<vpColVector> & vN) ;
+    vp_deprecated static void computeDisplacement(const vpMatrix H,
+                                                  const double x,
+                                                  const double y,
+                                                  vpList<vpRotationMatrix> & vR,
+                                                  vpList<vpTranslationVector> & vT,
+                                                  vpList<vpColVector> & vN);
+
+    static void DLT(unsigned int n,
+                    double *xb, double *yb ,
+                    double *xa, double *ya,
+                    vpHomography &aHb) ;
+    vp_deprecated static void HartleyDLT(unsigned int n,
+                                         double *xb, double *yb ,
+                                         double *xa, double *ya,
+                                         vpHomography &aHb) ;
+
+    static void HLM(unsigned int n,
+                    double *xb, double *yb,
+                    double *xa, double *ya ,
+                    bool isplan,
+                    vpHomography &aHb) ;
+
+    //! Print the matrix
+    vp_deprecated void print() ;
+
+    vp_deprecated static bool ransac(unsigned int n,
+                                     double *xb, double *yb,
+                                     double *xa, double *ya ,
+                                     vpHomography &aHb,
+                                     int consensus = 1000,
+                                     double threshold = 1e-6) ;
+
+    vp_deprecated static bool ransac(unsigned int n,
+                                     double *xb, double *yb,
+                                     double *xa, double *ya ,
+                                     vpHomography &aHb,
+                                     vpColVector& inliers,
+                                     double residual = 0.1, // Not used
+                                     int consensus = 1000,
+                                     double threshold = 1e-6,
+                                     double areaThreshold = 0.0);
 
 #endif // VISP_BUILD_DEPRECATED_FUNCTIONS
 } ;
diff --git a/src/computer-vision/homography-estimation/vpHomographyDLT.cpp b/src/computer-vision/homography-estimation/vpHomographyDLT.cpp
index 1c48c142..6669a46d 100644
--- a/src/computer-vision/homography-estimation/vpHomographyDLT.cpp
+++ b/src/computer-vision/homography-estimation/vpHomographyDLT.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHomographyDLT.cpp 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpHomographyDLT.cpp 4661 2014-02-10 19:34:58Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -48,17 +48,74 @@
 */
 
 #include <visp/vpHomography.h>
+#include <visp/vpMatrix.h>
 #include <visp/vpMatrixException.h>
 
 #include <cmath>    // std::fabs
 #include <limits>   // numeric_limits
 
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+void
+vpHomography::HartleyNormalization(const std::vector<double> &x, const std::vector<double> &y,
+                                   std::vector<double> &xn, std::vector<double> &yn,
+                                   double &xg, double &yg, double &coef)
+{
+  if (x.size() != y.size())
+    throw(vpException(vpException::dimensionError,
+                      "Hartley normalization require that x and y vector have the same dimension"));
+
+  unsigned int n = (unsigned int) x.size();
+  if (xn.size() != n)
+    xn.resize(n);
+  if (yn.size() != n)
+    yn.resize(n);
+
+  xg = 0 ;
+  yg = 0 ;
+
+  for (unsigned int i =0 ; i < n ; i++)
+  {
+    xg += x[i] ;
+    yg += y[i] ;
+  }
+  xg /= n ;
+  yg /= n ;
+
+  // Changement d'origine : le centre de gravite doit correspondre
+  // a l'origine des coordonnees
+  double distance=0;
+  for(unsigned int i=0; i<n;i++)
+  {
+    double xni=x[i]-xg;
+    double yni=y[i]-yg;
+    xn[i] = xni ;
+    yn[i] = yni ;
+    distance+=sqrt(vpMath::sqr(xni)+vpMath::sqr(yni));
+  }//for translation sur tous les points
+
+  //Changement d'echelle
+  distance/=n;
+  //calcul du coef de changement d'echelle
+  //if(distance ==0)
+  if(std::fabs(distance) <= std::numeric_limits<double>::epsilon())
+    coef=1;
+  else
+    coef=sqrt(2.0)/distance;
+
+  for(unsigned int i=0; i<n;i++)
+  {
+    xn[i] *= coef;
+    yn[i] *= coef;
+  }
+}
+
 void
 vpHomography::HartleyNormalization(unsigned int n,
-				   double *x, double *y,
-				   double *xn, double *yn,
-				   double &xg, double &yg,
-				   double &coef)
+                                   const double *x, const double *y,
+                                   double *xn, double *yn,
+                                   double &xg, double &yg,
+                                   double &coef)
 {
   unsigned int i;
   xg = 0 ;
@@ -72,8 +129,8 @@ vpHomography::HartleyNormalization(unsigned int n,
   xg /= n ;
   yg /= n ;
 
-  //Changement d'origine : le centre de gravité doit correspondre
-  // à l'origine des coordonnées
+  //Changement d'origine : le centre de gravite doit correspondre
+  // a l'origine des coordonnees
   double distance=0;
   for(i=0; i<n;i++)
   {
@@ -84,9 +141,9 @@ vpHomography::HartleyNormalization(unsigned int n,
     distance+=sqrt(vpMath::sqr(xni)+vpMath::sqr(yni));
   }//for translation sur tous les points
 
-  //Changement d'échelle
+  //Changement d'echelle
   distance/=n;
-  //calcul du coef de changement d'échelle
+  //calcul du coef de changement d'echelle
   //if(distance ==0)
   if(std::fabs(distance) <= std::numeric_limits<double>::epsilon())
     coef=1;
@@ -98,7 +155,6 @@ vpHomography::HartleyNormalization(unsigned int n,
     xn[i] *= coef;
     yn[i] *= coef;
   }
-
 }
 
 //---------------------------------------------------------------------------------------
@@ -110,8 +166,8 @@ vpHomography::HartleyDenormalization(vpHomography &aHbn,
 				     double xg2, double yg2, double coef2 )
 {
 
-  //calcul des transformations à appliquer sur M_norm pour obtenir M
-  //en fonction des deux normalisations effectuées au début sur
+  //calcul des transformations a appliquer sur M_norm pour obtenir M
+  //en fonction des deux normalisations effectuees au debut sur
   //les points: aHb = T2^ aHbn T1
   vpMatrix T1(3,3);
   vpMatrix T2(3,3);
@@ -129,19 +185,29 @@ vpHomography::HartleyDenormalization(vpHomography &aHbn,
   T2[0][2]=-coef2*xg2 ;
   T2[1][2]=-coef2*yg2 ;
 
-
   T2T=T2.pseudoInverse(1e-16) ;
 
-  vpMatrix maHb=T2T*(vpMatrix)aHbn*T1;
+  vpMatrix aHbn_(3,3);
+  for(unsigned int i=0; i<3; i++)
+    for(unsigned int j=0; j<3; j++)
+      aHbn_[i][j] = aHbn[i][j];
 
-  for (unsigned int i=0 ; i < 3 ; i++)
-    for (unsigned int j=0 ; j < 3 ; j++) aHb[i][j] = maHb[i][j] ;
+  vpMatrix maHb=T2T*aHbn_*T1;
 
+  for (unsigned int i=0 ; i < 3 ; i++)
+    for (unsigned int j=0 ; j < 3 ; j++)
+      aHb[i][j] = maHb[i][j] ;
 }
 
+#endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
 
 /*!
 
+  \deprecated You should rather use
+  vpHomography::DLT(const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, vpHomography &, bool)
+
   \brief Computes the homography matrix using the DLT (Direct Linear
   Transform) algorithm on normalized data.
  
@@ -157,12 +223,12 @@ vpHomography::HartleyDenormalization(vpHomography &aHbn,
 */
 void
 vpHomography::HartleyDLT(unsigned int n,
-			 double *xb, double *yb,
-			 double *xa, double *ya ,
-			 vpHomography &aHb)
+                         double *xb, double *yb,
+                         double *xa, double *ya ,
+                         vpHomography &aHb)
 {
   try{
-    //initialise les données initiales
+    //initialise les donnees initiales
     // code_retour =InitialData(n, p1,p2);
 
     // normalize points
@@ -173,9 +239,9 @@ vpHomography::HartleyDLT(unsigned int n,
 
     double xg1, yg1, coef1 ;
     vpHomography::HartleyNormalization(n,
-				       xb,yb,
-				       xbn,ybn,
-				       xg1, yg1,coef1);
+                                       xb,yb,
+                                       xbn,ybn,
+                                       xg1, yg1,coef1);
 
     double *xan;
     double *yan;
@@ -184,15 +250,15 @@ vpHomography::HartleyDLT(unsigned int n,
 
     double xg2, yg2, coef2 ;
     vpHomography::HartleyNormalization(n,
-				       xa,ya,
-				       xan,yan,
-				       xg2, yg2,coef2);
+                                       xa,ya,
+                                       xan,yan,
+                                       xg2, yg2,coef2);
 
     vpHomography aHbn ;
     //compute the homography using the DLT from normalized data
     vpHomography::DLT(n,xbn,ybn,xan,yan,aHbn);
 
-    //H dénormalisée
+    //H denormalisee
     vpHomography::HartleyDenormalization(aHbn,aHb,xg1,yg1,coef1,xg2,yg2, coef2);
 
     delete [] xbn;
@@ -207,9 +273,14 @@ vpHomography::HartleyDLT(unsigned int n,
     throw ;
   }
 }
+#endif //#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
 
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
 
 /*!
+  \deprecated You should rather use
+  vpHomography::DLT(const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, vpHomography &, bool)
+
   \brief Computes the homography matrix wrt. the
   data using the DLT (Direct Linear Transform) algorithm.
 
@@ -225,7 +296,6 @@ vpHomography::HartleyDLT(unsigned int n,
 
   At least 4 correspondant points couples are needed.
 
-
   For each point, in homogeneous coordinates we have:
   \f[
   \mathbf{p}_{a}= \mathbf{H}\mathbf{p}_{b}
@@ -244,7 +314,6 @@ vpHomography::HartleyDLT(unsigned int n,
   \mathbf{p}_{a} \times \mathbf{H}\mathbf{p}_{b}  =\left( \begin{array}{c}y_{a}\mathbf{h}_3^T\mathbf{p}_{b}-w_{a}\mathbf{h}_2^T\mathbf{p}_{b} \\w_{a}\mathbf{h}_1^T\mathbf{p}_{b} -x_{a}\mathbf{h}_3^T \mathbf{p}_{b} \\x_{a}\mathbf{h}_2^T \mathbf{p}_{b}- y_{a}\mathbf{h}_1^T\mathbf{p}_{b}\end{array}\right)
   \f]
 
-
   \f[
   \underbrace{\left( \begin{array}{ccc}\mathbf{0}^T & -w_{a} \mathbf{p}_{b}^T
   & y_{a} \mathbf{p}_{b}^T     \\     w_{a}
@@ -267,9 +336,9 @@ vpHomography::HartleyDLT(unsigned int n,
   that should be 8 is deficient.
 */
 void vpHomography::DLT(unsigned int n,
-		       double *xb, double *yb,
-		       double *xa, double *ya ,
-		       vpHomography &aHb)
+                       double *xb, double *yb,
+                       double *xa, double *ya ,
+                       vpHomography &aHb)
 {
 
   // 4 point are required
@@ -284,19 +353,17 @@ void vpHomography::DLT(unsigned int n,
     vpColVector h(9);
     vpColVector D(9);
     vpMatrix V(9,9);
-    unsigned int i, j;
     
     // We need here to compute the SVD on a (n*2)*9 matrix (where n is
     // the number of points). if n == 4, the matrix has more columns
     // than rows. This kind of matrix is not supported by GSL for
     // SVD. The solution is to add an extra line with zeros
-    if (n == 4) 
+    if (n == 4)
       A.resize(2*n+1,9);
 
     // build matrix A
-    for(i=0; i<n;i++)
+    for(unsigned int i=0; i<n;i++)
     {
-
       A[2*i][0]=0;
       A[2*i][1]=0;
       A[2*i][2]=0;
@@ -321,24 +388,24 @@ void vpHomography::DLT(unsigned int n,
 
     // Add an extra line with zero.
     if (n == 4) {
-      for (int i=0; i < 9; i ++) {
-	A[2*n][i] = 0;
+      for (unsigned int i=0; i < 9; i ++) {
+        A[2*n][i] = 0;
       }
-    }      
+    }
 
     // solve Ah = 0
     // SVD  Decomposition A = UDV^T (destructive wrt A)
     A.svd(D,V);
 
     // on en profite pour effectuer un controle sur le rang de la matrice :
-    // pas plus de 2 valeurs singulières quasi=0
+    // pas plus de 2 valeurs singulieres quasi=0
     int rank=0;
-    for(i = 0; i<9;i++) if(D[i]>1e-7) rank++;
+    for(unsigned int i = 0; i<9;i++) if(D[i]>1e-7) rank++;
     if(rank <7)
     {
       vpTRACE(" Rank is : %d, should be 8", rank);
       throw(vpMatrixException(vpMatrixException::rankDeficient,
-			      "\n\t\t Matrix rank is deficient")) ;
+                              "\n\t\t Matrix rank is deficient")) ;
     }
     //h = is the column of V associated with the smallest singular value of A
 
@@ -346,17 +413,17 @@ void vpHomography::DLT(unsigned int n,
     // singular value... we seek for the smallest
     double smallestSv = 1e30 ;
     unsigned int indexSmallestSv  = 0 ;
-    for (i=0 ; i < 9 ; i++)
+    for (unsigned int i=0 ; i < 9 ; i++)
       if ((D[i] < smallestSv) ){ smallestSv = D[i] ;indexSmallestSv = i ; }
 
 
     h=V.column(indexSmallestSv+1);
 
     // build the homography
-    for(i =0;i<3;i++)
+    for(unsigned int i =0;i<3;i++)
     {
-      for(j=0;j<3;j++)
-	aHb[i][j]=h[3*i+j];
+      for(unsigned int j=0;j<3;j++)
+        aHb[i][j]=h[3*i+j];
     }
 
   }
@@ -373,3 +440,192 @@ void vpHomography::DLT(unsigned int n,
   }
 
 }
+#endif // #ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+
+/*!
+  From couples of matched points \f$^a{\bf p}=(x_a,y_a,1)\f$ in image a
+  and \f$^b{\bf p}=(x_b,y_b,1)\f$ in image b with homogeneous coordinates, computes the
+  homography matrix by resolving \f$^a{\bf p} = ^a{\bf H}_b\; ^b{\bf p}\f$
+  using the DLT (Direct Linear Transform) algorithm.
+
+  At least 4 couples of points are needed.
+
+  To do so, we use the DLT algorithm on the data,
+  ie we resolve the linear system  by SDV : \f$\bf{Ah} =0\f$ where
+  \f$\bf{h}\f$ is the vector with the terms of \f$^a{\bf H}_b\f$ and
+  \f$\mathbf{A}\f$ depends on the  points coordinates.
+
+  For each point, in homogeneous coordinates we have:
+  \f[
+  ^a{\bf p} = ^a{\bf H}_b\; ^b{\bf p}
+  \f]
+  which is equivalent to:
+  \f[
+  ^a{\bf p} \times {^a{\bf H}_b \; ^b{\bf p}}  =0
+  \f]
+  If we note \f$\mathbf{h}_j^T\f$ the  \f$j^{\textrm{th}}\f$ line of  \f$^a{\bf H}_b\f$, we can write:
+  \f[
+  ^a{\bf H}_b \; ^b{\bf p}  = \left( \begin{array}{c}\mathbf{h}_1^T \;^b{\bf p} \\\mathbf{h}_2^T \; ^b{\bf p} \\\mathbf{h}_3^T \;^b{\bf p} \end{array}\right)
+  \f]
+
+  Setting \f$^a{\bf p}=(x_{a},y_{a},w_{a})\f$, the cross product  can be rewritten by:
+  \f[
+  ^a{\bf p} \times ^a{\bf H}_b \; ^b{\bf p}  =\left( \begin{array}{c}y_{a}\mathbf{h}_3^T \; ^b{\bf p}-w_{a}\mathbf{h}_2^T \; ^b{\bf p} \\w_{a}\mathbf{h}_1^T \; ^b{\bf p} -x_{a}\mathbf{h}_3^T \; ^b{\bf p} \\x_{a}\mathbf{h}_2^T \; ^b{\bf p}- y_{a}\mathbf{h}_1^T \; ^b{\bf p}\end{array}\right)
+  \f]
+
+  \f[
+  \underbrace{\left( \begin{array}{ccc}\mathbf{0}^T & -w_{a} \; ^b{\bf p}^T
+  & y_{a} \; ^b{\bf p}^T     \\     w_{a}
+  \; ^b{\bf p}^T&\mathbf{0}^T & -x_{a} \; ^b{\bf p}^T      \\
+  -y_{a} \; ^b{\bf p}^T & x_{a} \; ^b{\bf p}^T &
+  \mathbf{0}^T\end{array}\right)}_{\mathbf{A}_i (3\times 9)}
+  \underbrace{\left( \begin{array}{c}\mathbf{h}_{1}^{T}      \\
+  \mathbf{h}_{2}^{T}\\\mathbf{h}_{3}^{T}\end{array}\right)}_{\mathbf{h} (9\times 1)}=0
+  \f]
+
+  leading to an homogeneous system to be solved:   \f$\mathbf{A}\mathbf{h}=0\f$ with
+  \f$\mathbf{A}=\left(\mathbf{A}_1^T, ..., \mathbf{A}_i^T, ..., \mathbf{A}_n^T \right)^T\f$.
+
+  It can be solved using an SVD decomposition:
+  \f[\bf A = UDV^T \f]
+  <b>h</b> is the column of <b>V</b> associated with the smalest singular value of <b>A
+  </b>
+
+  \param xb, yb : Coordinates vector of matched points in image b. These coordinates are expressed in meters.
+  \param xa, ya : Coordinates vector of matched points in image a. These coordinates are expressed in meters.
+  \param aHb : Estimated homography that relies the transformation from image a to image b.
+  \param normalization : When set to true, the coordinates of the points are normalized. The normalization
+  carried out is the one preconized by Hartley.
+
+  \exception vpMatrixException::rankDeficient : When the rank of the matrix
+  that should be 8 is deficient.
+*/
+void vpHomography::DLT(const std::vector<double> &xb, const std::vector<double> &yb,
+                       const std::vector<double> &xa, const std::vector<double> &ya ,
+                       vpHomography &aHb,
+                       bool normalization)
+{
+  unsigned int n = (unsigned int) xb.size();
+  if (yb.size() != n || xa.size() != n || ya.size() != n)
+    throw(vpException(vpException::dimensionError,
+                      "Bad dimension for DLT homography estimation"));
+
+  // 4 point are required
+  if(n<4)
+    throw(vpException(vpException::fatalError, "There must be at least 4 matched points"));
+
+  try{
+    std::vector<double> xan, yan, xbn, ybn;
+
+    double xg1=0., yg1=0., coef1=0., xg2=0., yg2=0., coef2=0.;
+
+    vpHomography aHbn;
+
+    if (normalization) {
+      vpHomography::HartleyNormalization(xb, yb, xbn, ybn, xg1, yg1, coef1);
+      vpHomography::HartleyNormalization(xa, ya, xan, yan, xg2, yg2, coef2);
+    }
+    else {
+      xbn = xb;
+      ybn = yb;
+      xan = xa;
+      yan = ya;
+    }
+
+    vpMatrix A(2*n,9);
+    vpColVector h(9);
+    vpColVector D(9);
+    vpMatrix V(9,9);
+
+    // We need here to compute the SVD on a (n*2)*9 matrix (where n is
+    // the number of points). if n == 4, the matrix has more columns
+    // than rows. This kind of matrix is not supported by GSL for
+    // SVD. The solution is to add an extra line with zeros
+    if (n == 4)
+      A.resize(2*n+1,9);
+
+    // build matrix A
+    for(unsigned int i=0; i<n;i++)
+    {
+      A[2*i][0]=0;
+      A[2*i][1]=0;
+      A[2*i][2]=0;
+      A[2*i][3]=-xbn[i] ;
+      A[2*i][4]=-ybn[i] ;
+      A[2*i][5]=-1;
+      A[2*i][6]=xbn[i]*yan[i] ;
+      A[2*i][7]=ybn[i]*yan[i];
+      A[2*i][8]=yan[i];
+
+
+      A[2*i+1][0]=xbn[i] ;
+      A[2*i+1][1]=ybn[i] ;
+      A[2*i+1][2]=1;
+      A[2*i+1][3]=0;
+      A[2*i+1][4]=0;
+      A[2*i+1][5]=0;
+      A[2*i+1][6]=-xbn[i]*xan[i];
+      A[2*i+1][7]=-ybn[i]*xan[i];
+      A[2*i+1][8]=-xan[i] ;
+    }
+
+    // Add an extra line with zero.
+    if (n == 4) {
+      for (unsigned int  i=0; i < 9; i ++) {
+        A[2*n][i] = 0;
+      }
+    }
+
+    // solve Ah = 0
+    // SVD  Decomposition A = UDV^T (destructive wrt A)
+    A.svd(D,V);
+
+    // on en profite pour effectuer un controle sur le rang de la matrice :
+    // pas plus de 2 valeurs singulieres quasi=0
+    int rank=0;
+    for(unsigned int i = 0; i<9;i++) if(D[i]>1e-7) rank++;
+    if(rank <7)
+    {
+      vpTRACE(" Rank is : %d, should be 8", rank);
+      throw(vpMatrixException(vpMatrixException::rankDeficient,
+                              "\n\t\t Matrix rank is deficient")) ;
+    }
+    //h = is the column of V associated with the smallest singular value of A
+
+    // since  we are not sure that the svd implemented sort the
+    // singular value... we seek for the smallest
+    double smallestSv = 1e30 ;
+    unsigned int indexSmallestSv  = 0 ;
+    for (unsigned int i=0 ; i < 9 ; i++)
+      if ((D[i] < smallestSv) ){ smallestSv = D[i] ;indexSmallestSv = i ; }
+
+    h=V.column(indexSmallestSv+1);
+
+    // build the homography
+    for(unsigned int i =0;i<3;i++)
+    {
+      for(unsigned int j=0;j<3;j++)
+        aHbn[i][j]=h[3*i+j];
+    }
+
+    if (normalization) {
+      // H after denormalization
+      vpHomography::HartleyDenormalization(aHbn, aHb, xg1, yg1, coef1, xg2, yg2, coef2);
+    }
+    else {
+      aHb = aHbn;
+    }
+
+  }
+  catch(vpMatrixException me)
+  {
+    vpTRACE("Matrix Exception ") ;
+    throw(me) ;
+  }
+  catch(vpException me)
+  {
+    vpERROR_TRACE("caught another error") ;
+    std::cout <<std::endl << me << std::endl ;
+    throw(me) ;
+  }
+}
diff --git a/src/computer-vision/homography-estimation/vpHomographyExtract.cpp b/src/computer-vision/homography-estimation/vpHomographyExtract.cpp
index 63590430..8937d63a 100644
--- a/src/computer-vision/homography-estimation/vpHomographyExtract.cpp
+++ b/src/computer-vision/homography-estimation/vpHomographyExtract.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHomographyExtract.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpHomographyExtract.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -50,16 +50,70 @@
 /* ------------------------------------------------------------------------ */
 const double vpHomography::sing_threshold = 0.0001;
 
+/*!
+  Compute the camera displacement between two images from the homography \f$
+  {^a}{\bf H}_b \f$ which is here an implicit parameter (*this).
+
+  \param aRb : Rotation matrix as an output \f$ {^a}{\bf R}_b \f$.
+
+  \param atb : Translation vector as an output \f$ ^a{\bf t}_b \f$.
+
+  \param n : Normal vector to the plane as an output.
+
+*/
+void vpHomography::computeDisplacement(vpRotationMatrix &aRb,
+                                       vpTranslationVector &atb,
+                                       vpColVector &n)
+{
+
+
+  vpColVector nd(3) ;
+  nd[0]=0;nd[1]=0;nd[2]=1;
+
+  computeDisplacement(*this,aRb,atb,n);
+
+}
+
 /*!
 
   Compute the camera displacement between two images from the homography \f$
-  {^a}{\bf H}_b \f$.
+  {^a}{\bf H}_b \f$ which is here an implicit parameter (*this).
 
   Camera displacement between \f$ {^a}{\bf p} \f$ and \f$ {^a}{\bf p} \f$ is
   represented as a rotation matrix \f$ {^a}{\bf R}_b \f$ and a translation
   vector \f$ ^a{\bf t}_b \f$ from which an homogenous matrix can be build
   (vpHomogeneousMatrix).
 
+  \param nd : Input normal vector to the plane used to compar with the normal
+  vector \e n extracted from the homography.
+
+  \param aRb : Rotation matrix as an output \f$ {^a}{\bf R}_b \f$.
+
+  \param atb : Translation vector as an output \f$ ^a{\bf t}_b \f$.
+
+  \param n : Normal vector to the plane as an output.
+
+*/
+void vpHomography::computeDisplacement(const vpColVector& nd,
+                                       vpRotationMatrix &aRb,
+                                       vpTranslationVector &atb,
+                                       vpColVector &n)
+{
+  computeDisplacement(*this,nd, aRb,atb,n);
+}
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+/*!
+
+  Compute the camera displacement between two images from the homography \f$
+  {^a}{\bf H}_b \f$.
+
+  Camera displacement between \f$ {^a}{\bf p} \f$ and \f$ {^b}{\bf p} \f$ is
+  represented as a rotation matrix \f$ {^a}{\bf R}_b \f$ and a translation
+  vector \f$ ^a{\bf t}_b \f$ from which an homogenous matrix can be build
+  (vpHomogeneousMatrix).
+
   \param aHb : Input homography \f$ {^a}{\bf H}_b \f$.
 
   \param nd : Input normal vector to the plane used to compar with the normal
@@ -79,7 +133,7 @@ void
                                        vpTranslationVector &atb,
                                        vpColVector &n)
 {
-  /**** Déclarations des variables ****/
+  /**** Declarations des variables ****/
 
   vpMatrix aRbint(3,3) ;
   vpColVector svTemp(3), sv(3);
@@ -341,35 +395,6 @@ void
 
 }
 
-/*!
-
-  Compute the camera displacement between two images from the homography \f$
-  {^a}{\bf H}_b \f$ which is here an implicit parameter (*this).
-
-  Camera displacement between \f$ {^a}{\bf p} \f$ and \f$ {^a}{\bf p} \f$ is
-  represented as a rotation matrix \f$ {^a}{\bf R}_b \f$ and a translation
-  vector \f$ ^a{\bf t}_b \f$ from which an homogenous matrix can be build
-  (vpHomogeneousMatrix).
-
-  \param nd : Input normal vector to the plane used to compar with the normal
-  vector \e n extracted from the homography.
-
-  \param aRb : Rotation matrix as an output \f$ {^a}{\bf R}_b \f$.
-
-  \param atb : Translation vector as an output \f$ ^a{\bf t}_b \f$.
-
-  \param n : Normal vector to the plane as an output.
-
-  \sa computeDisplacement(const vpHomography &, const vpColVector &, vpRotationMatrix &, vpTranslationVector &, vpColVector &)
-*/
-void
-    vpHomography::computeDisplacement(const vpColVector& nd,
-                                      vpRotationMatrix &aRb,
-                                      vpTranslationVector &atb,
-                                      vpColVector &n)
-{
-  computeDisplacement(*this,nd, aRb,atb,n);
-}
 /*!
 
   Compute the camera displacement between two images from the homography \f$
@@ -394,7 +419,7 @@ void
                                        vpTranslationVector &atb,
                                        vpColVector &n)
 {
-  /**** Déclarations des variables ****/
+  /**** Declarations des variables ****/
 
   vpMatrix aRbint(3,3) ;
   vpColVector svTemp(3), sv(3);
@@ -655,32 +680,6 @@ void
 
 }
 
-
-/*!
-  Compute the camera displacement between two images from the homography \f$
-  {^a}{\bf H}_b \f$ which is here an implicit parameter (*this).
-
-  \param aRb : Rotation matrix as an output \f$ {^a}{\bf R}_b \f$.
-
-  \param atb : Translation vector as an output \f$ ^a{\bf t}_b \f$.
-
-  \param n : Normal vector to the plane as an output.
-
-  \sa computeDisplacement(const vpHomography &, vpRotationMatrix &, vpTranslationVector &, vpColVector &)
-*/
-void vpHomography::computeDisplacement(vpRotationMatrix &aRb,
-                                       vpTranslationVector &atb,
-                                       vpColVector &n)
-{
-
-
-  vpColVector nd(3) ;
-  nd[0]=0;nd[1]=0;nd[2]=1;
-
-  computeDisplacement(*this,aRb,atb,n);
-
-}
-
 void vpHomography::computeDisplacement(const vpMatrix &H,
                                       const double x,
                                       const double y,
@@ -697,7 +696,7 @@ void vpHomography::computeDisplacement(const vpMatrix &H,
   vT.clear();
   vN.clear();
 
-  /**** Déclarations des variables ****/
+  /**** Declarations des variables ****/
   int cas1 =1, cas2=2, cas3=3, cas4=4;
   int cas =0;
   bool norm1ok=false, norm2ok = false,norm3ok=false,norm4ok =false;
@@ -1333,6 +1332,7 @@ void vpHomography::computeDisplacement(const vpMatrix &H,
   printf("fin : Homographie_EstimationDeplacementCamera\n");
 #endif
 }
+#endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
 
 #ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
 /*!
@@ -1355,7 +1355,7 @@ void vpHomography::computeDisplacement(const vpMatrix H,
   vT.kill();
   vN.kill();
 
-  /**** Déclarations des variables ****/
+  /**** Declarations des variables ****/
   int cas1 =1, cas2=2, cas3=3, cas4=4;
   int cas =0;
   bool norm1ok=false, norm2ok = false,norm3ok=false,norm4ok =false;
diff --git a/src/computer-vision/homography-estimation/vpHomographyMalis.cpp b/src/computer-vision/homography-estimation/vpHomographyMalis.cpp
index 7a75eca1..b723142c 100644
--- a/src/computer-vision/homography-estimation/vpHomographyMalis.cpp
+++ b/src/computer-vision/homography-estimation/vpHomographyMalis.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHomographyMalis.cpp 4276 2013-06-25 12:36:48Z fspindle $
+ * $Id: vpHomographyMalis.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -91,16 +91,36 @@ const double eps = 1e-6 ;
  ****************************************************************************
  */
 
+void changeFrame(unsigned int *pts_ref,
+                 unsigned int nb_pts,
+                 vpMatrix &pd, vpMatrix &p,
+                 vpMatrix &pnd, vpMatrix &pn,
+                 vpMatrix &M, vpMatrix &Mdp);
+void HLM2D(unsigned int nb_pts,
+           vpMatrix &points_des,
+           vpMatrix &points_cour,
+           vpMatrix &H);
+void HLM3D(unsigned int nb_pts,
+           vpMatrix &pd,
+           vpMatrix &p,
+           vpMatrix &H);
+void HLM(unsigned int q_cible,
+         unsigned int nbpt,
+         double *xm, double *ym,
+         double *xmi, double *ymi,
+         vpMatrix &H);
+
+void HLM(unsigned int q_cible,
+         const std::vector<double> &xm, const std::vector<double> &ym,
+         const std::vector<double> &xmi, const std::vector<double> &ymi,
+         vpMatrix &H);
 
 void changeFrame(unsigned int *pts_ref,
-		 unsigned int nb_pts,
-		 vpMatrix &pd, vpMatrix &p,
-		 vpMatrix &pnd, vpMatrix &pn,
-		 vpMatrix &M, vpMatrix &Mdp)
+                 unsigned int nb_pts,
+                 vpMatrix &pd, vpMatrix &p,
+                 vpMatrix &pnd, vpMatrix &pn,
+                 vpMatrix &M, vpMatrix &Mdp)
 {
-
-
-
   unsigned int i,j, k ;
   unsigned int cont_pts;		/* */
   double lamb_des[3];	/* */
@@ -240,16 +260,16 @@ HLM2D(unsigned int nb_pts,
     M[3*j+2][8] =  0 ;
   }
 
-  /** calcul de la pseudo-inverse V de M et des valeurs singulières **/
+  /** calcul de la pseudo-inverse V de M et des valeurs singulieres **/
   M.svd(sv,V);
 
   /*****
 	La meilleure solution est le vecteur de V associe
 	a la valeur singuliere la plus petite en valeur	absolu.
 	Pour cela on parcourt la matrice des valeurs singulieres
-	et on repère la plus petite valeur singulière, on en profite
+	et on repere la plus petite valeur singuliere, on en profite
 	pour effectuer un controle sur le rang de la matrice : pas plus
-	de 2 valeurs singulières quasi=0
+	de 2 valeurs singulieres quasi=0
   *****/
   vals_inf = fabs(sv[0]) ;
   vect = 0 ;
@@ -268,7 +288,7 @@ HLM2D(unsigned int nb_pts,
   }
 
 
-  /** cas d'erreur : plus de 2 valeurs singulières =0 **/
+  /** cas d'erreur : plus de 2 valeurs singulieres =0 **/
   if (contZeros > 2) {
     //vpERROR_TRACE("matrix is rank deficient");
     throw (vpMatrixException(vpMatrixException::matrixError,
@@ -320,8 +340,8 @@ HLM3D(unsigned int nb_pts,
   unsigned int cont_pts;			/* Pour compter le nombre de points dans l'image */
   //unsigned int nl;			/*** Nombre de lignes ***/
   unsigned int nc ;			/*** Nombre de colonnes ***/
-  unsigned int  pts_ref[4];		/*** définit lesquels des points de
-				     l'image sont les points de référence***/
+  unsigned int  pts_ref[4];		/*** definit lesquels des points de
+				     l'image sont les points de reference***/
   /***  ***/
   int perm;			/***  Compte le nombre de permutations, quand le nombre
 				      de permutations =0 arret de l'ordonnancement **/
@@ -345,10 +365,10 @@ HLM3D(unsigned int nb_pts,
 
 
   vpMatrix H_int(3,3) ;
-  vpMatrix pn((nb_pts-3),3) ; //points courant nouveau repère
+  vpMatrix pn((nb_pts-3),3) ; //points courant nouveau repere
 
 
-  vpMatrix pnd((nb_pts-3),3) ; //points dérivés nouveau repère
+  vpMatrix pnd((nb_pts-3),3) ; //points derives nouveau repere
 
   /* preparation du changement de repere */
   /****
@@ -491,7 +511,7 @@ HLM3D(unsigned int nb_pts,
 	pour obtenir une solution il faut au moins 5 equations independantes
 	donc il faut au moins la mise en correspondence de 3+5 points
   *****/
-  vpColVector sv(nc) ; //Vecteur contenant les valeurs singulières
+  vpColVector sv(nc) ; //Vecteur contenant les valeurs singulieres
 
   CtC.svd(sv,V) ;
 
@@ -521,9 +541,9 @@ HLM3D(unsigned int nb_pts,
   }
 
   /*****
-	Parcours de la matrice ordonnée des valeurs singulières
-	On note "cont_zeros" le nbre de valeurs quasi= à 0.
-	On note "vect" le rang de la plus petite valeur singlière
+	Parcours de la matrice ordonnee des valeurs singulieres
+	On note "cont_zeros" le nbre de valeurs quasi= a 0.
+	On note "vect" le rang de la plus petite valeur singliere
 	en valeur absolu
   *****/
 
@@ -605,29 +625,30 @@ HLM3D(unsigned int nb_pts,
   }
 }
 
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
 
 /**************************************************************************
  * NOM :
  * Homographie_CrvMafCalculHomographie
  *
  * DESCRIPTION :
- * Calcul de l'homographie, en fonction de la cible désirée et de la cible
- * en cours. C'est une estimation linéaire.
- * Cette procédure n'effectue pas elle-même le calcul de l'homographie :
- * elle se contente d'appeler la bonne sous-procédure.
- * Cette procédure est appellée par "crv_maf_calcul_tomographie".
+ * Calcul de l'homographie, en fonction de la cible desiree et de la cible
+ * en cours. C'est une estimation lineaire.
+ * Cette procedure n'effectue pas elle-meme le calcul de l'homographie :
+ * elle se contente d'appeler la bonne sous-procedure.
+ * Cette procedure est appellee par "crv_maf_calcul_tomographie".
  *
  ****************************************************************************
  * ENTREES :
  *  STR_CIBLE_ASSER   *cible_asser  	Pointeur sur structure contenant les
- *                                       commandes du robot, les données de la
+ *                                       commandes du robot, les donnees de la
  *					carte...
  *					Voir "cvda/edixaa/param/robot.h"
- *	STR_VITESSE_ROBOT *data_common   Pointeur sur la structure décrivant la
+ *	STR_VITESSE_ROBOT *data_common   Pointeur sur la structure decrivant la
  *					cible d'asservissement.
  *					Voir "cvda/edixia/param/param.h"
  *	STR_MACH_DIV 		*machine_div   Pointeur sur structure contenant divers
- *					paramètres de configuration du robot.
+ *					parametres de configuration du robot.
  *					Voir "cvda/edixia/param/param.h"
  *
  * SORTIES :
@@ -636,7 +657,7 @@ HLM3D(unsigned int nb_pts,
 
  *
  ****************************************************************************
- * AUTEUR : BOSSARD Nicolas.  INSA Rennes 5ème année.
+ * AUTEUR : BOSSARD Nicolas.  INSA Rennes 5eme annee.
  *
  * DATE DE CREATION : 01/12/98
  *
@@ -690,9 +711,57 @@ HLM(unsigned int q_cible,
 
 
 } /* fin procedure calcul_homogaphie */
+#endif // #ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+
+void
+HLM(unsigned int q_cible,
+    const std::vector<double> &xm, const std::vector<double> &ym,
+    const std::vector<double> &xmi, const std::vector<double> &ymi,
+    vpMatrix &H)
+{
+  unsigned int nbpt = (unsigned int)xm.size();
+
+  /****
+       on regarde si il y a au moins un point mais pour l'homographie
+       il faut au moins quatre points
+  ****/
+  vpMatrix pd(nbpt,3) ;
+  vpMatrix p(nbpt,3) ;
+
+  for (unsigned int i=0;i<nbpt;i++)  {
+    /****
+   on assigne les points fournies par la structure robot
+   pour la commande globale
+    ****/
+    pd[i][0] = xmi[i];
+    pd[i][1] = ymi[i];
+    pd[i][2] = 1.0 ;
+    p[i][0] = xm[i];
+    p[i][1] = ym[i];
+    p[i][2] = 1.0 ;
+  }
 
+  switch (q_cible) {
+  case (1):
+  case (2):
+    /* La cible est planaire  de type points   */
 
-#endif
+    HLM2D(nbpt,pd,p,H);
+
+    break;
+  case (3) : /* cible non planaire : chateau */
+    /* cible non planaire  de type points   */
+    HLM3D(nbpt,pd,p,H);
+    break;
+  } /* fin switch */
+
+
+
+} /* fin procedure calcul_homogaphie */
+
+#endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
 
 /*!
   \brief Computes the homography matrix from planar \cite TheseMalis or non planar points
@@ -712,20 +781,15 @@ HLM(unsigned int q_cible,
 
 */
 void vpHomography::HLM(unsigned int n,
-		       double *xb, double *yb,
-		       double *xa, double *ya ,
-		       bool isplanar,
-		       vpHomography &aHb)
+           double *xb, double *yb,
+           double *xa, double *ya ,
+           bool isplanar,
+           vpHomography &aHb)
 {
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-
   unsigned int i,j;
   unsigned int q_cible;
   vpMatrix H; // matrice d'homographie en metre
 
-  aHb.setIdentity();
-
-
   if (isplanar)
     q_cible =1;
   else
@@ -736,7 +800,56 @@ void vpHomography::HLM(unsigned int n,
   for(i=0;i<3;i++)
     for(j=0;j<3;j++)
       aHb[i][j] = H[i][j];
+}
+
+#endif //#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+
+/*!
+  From couples of matched points \f$^a{\bf p}=(x_a,y_a,1)\f$ in image a
+  and \f$^b{\bf p}=(x_b,y_b,1)\f$ in image b with homogeneous coordinates, computes the
+  homography matrix by resolving \f$^a{\bf p} = ^a{\bf H}_b\; ^b{\bf p}\f$
+  using Ezio Malis linear method (HLM) \cite Malis00b.
+
+  This method can consider points that are planar or non planar. The algorithm for planar
+  scene implemented in this file is described in Ezio
+  Malis PhD thesis \cite TheseMalis.
+
+  \param xb, yb : Coordinates vector of matched points in image b. These coordinates are expressed in meters.
+  \param xa, ya : Coordinates vector of matched points in image a. These coordinates are expressed in meters.
+  \param isplanar : If true the points are assumed to be in a plane,
+  otherwise there are assumed to be non planar.
+  \param aHb : Estimated homography that relies the transformation from image a to image b.
+
+  If the boolean isplanar is true the points are assumed to be in a plane
+  otherwise there are assumed to be non planar.
+
+  \sa DLT() when the scene is planar.
+*/
+void vpHomography::HLM(const std::vector<double> &xb, const std::vector<double> &yb,
+                       const std::vector<double> &xa, const std::vector<double> &ya,
+                       bool isplanar,
+                       vpHomography &aHb)
+{
+  unsigned int n = (unsigned int) xb.size();
+  if (yb.size() != n || xa.size() != n || ya.size() != n)
+    throw(vpException(vpException::dimensionError,
+                      "Bad dimension for HLM shomography estimation"));
+
+  // 4 point are required
+  if(n<4)
+    throw(vpException(vpException::fatalError, "There must be at least 4 matched points"));
+
+  // The reference plane is the plane build from the 3 first points.
+  unsigned int q_cible;
+  vpMatrix H; // matrice d'homographie en metre
+
+  if (isplanar)
+    q_cible =1;
+  else
+    q_cible =3;
+
+  ::HLM(q_cible, xa, ya, xb, yb, H) ;
 
-#endif
+  aHb = H;
 }
 
diff --git a/src/computer-vision/homography-estimation/vpHomographyRansac.cpp b/src/computer-vision/homography-estimation/vpHomographyRansac.cpp
index d60d8a77..777c0eeb 100644
--- a/src/computer-vision/homography-estimation/vpHomographyRansac.cpp
+++ b/src/computer-vision/homography-estimation/vpHomographyRansac.cpp
@@ -12,7 +12,7 @@
  * Version control
  * ===============
  *
- *  $Id: vpHomographyRansac.cpp 3496 2011-11-22 15:14:32Z fspindle $
+ *  $Id: vpHomographyRansac.cpp 4649 2014-02-07 14:57:11Z fspindle $
  * optimized by Tran to improve speed.
  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
 
@@ -20,6 +20,10 @@
 #include <visp/vpColVector.h>
 #include <visp/vpRansac.h>
 
+#include <visp/vpImage.h>
+#include <visp/vpDisplay.h>
+#include <visp/vpMeterPixelConversion.h>
+
 #define vpEps 1e-6
 
 /*!
@@ -27,6 +31,10 @@
   \brief function used to estimate an homography using the Ransac algorithm
 */
 
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+bool iscolinear(double *x1, double *x2, double *x3);
+bool isColinear(vpColVector &p1, vpColVector &p2, vpColVector &p3);
 
 bool
 iscolinear(double *x1, double *x2, double *x3)
@@ -42,6 +50,11 @@ iscolinear(double *x1, double *x2, double *x3)
   // scale.
   return ((vpColVector::cross(p2-p1, p3-p1).sumSquare()) < vpEps);
 }
+bool
+isColinear(vpColVector &p1, vpColVector &p2, vpColVector &p3)
+{
+  return ((vpColVector::cross(p2-p1, p3-p1).sumSquare()) < vpEps);
+}
 
 
 bool
@@ -149,14 +162,49 @@ vpHomography::degenerateConfiguration(vpColVector &x, unsigned int *ind)
 	   iscolinear(pb[0],pb[2],pb[3]) ||
 	   iscolinear(pb[1],pb[2],pb[3]));
 }
+bool
+vpHomography::degenerateConfiguration(const std::vector<double> &xb, const std::vector<double> &yb,
+                                      const std::vector<double> &xa, const std::vector<double> &ya)
+{
+  unsigned int n = (unsigned int)xb.size();
+  if (n < 4)
+    throw(vpException(vpException::fatalError, "There must be at least 4 matched points"));
+
+  std::vector<vpColVector> pa(n), pb(n);
+  for (unsigned i=0; i<n;i++) {
+    pa[i].resize(3);
+    pa[i][0] = xa[i];
+    pa[i][1] = ya[i];
+    pa[i][2] = 1;
+    pb[i].resize(3);
+    pb[i][0] = xb[i];
+    pb[i][1] = yb[i];
+    pb[i][2] = 1;
+  }
+
+  for (unsigned int i = 0; i < n-2; i++) {
+    for (unsigned int j = i+1; j < n-1; j++) {
+      for (unsigned int k = j+1; k < n ; k++)
+      {
+        if (isColinear(pa[i], pa[j], pa[k])) {
+          return true;
+        }
+        if (isColinear(pb[i], pb[j], pb[k])){
+          return true;
+        }
+      }
+    }
+  }
+  return false;
+}
 // Fit model to this random selection of data points.
 void
 vpHomography::computeTransformation(vpColVector &x, unsigned int *ind, vpColVector &M)
 {
   unsigned int i ;
   unsigned int n = x.getRows()/4 ;
-  double xa[4], xb[4];
-  double ya[4], yb[4];
+  std::vector<double> xa(4), xb(4);
+  std::vector<double> ya(4), yb(4);
   unsigned int n2 = n * 2;
   unsigned int ind2;
   for(i=0 ; i < 4 ; i++)
@@ -171,8 +219,7 @@ vpHomography::computeTransformation(vpColVector &x, unsigned int *ind, vpColVect
 
   vpHomography aHb ;
   try {
-    vpHomography::HLM(4,xb, yb, xa, ya, true, aHb);
-    //vpHomography::HLM(8, xb, yb, xa, ya, false, aHb); //modified 13/09
+    vpHomography::HLM(xb, yb, xa, ya, true, aHb);
   }
   catch(...)
     {
@@ -240,6 +287,7 @@ vpHomography::computeResidual(vpColVector &x, vpColVector &M, vpColVector &d)
 
   return 0 ;
 }
+#endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
 
 
 void
@@ -261,14 +309,20 @@ vpHomography::initRansac(unsigned int n,
   }
 }
 
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+
+/*!
+  \deprecated This method is deprecated. You should rather use
+  vpHomography::ransac(const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, vpHomography &, std::vector<bool> &, double &, unsigned int, double, bool)
+ */
 bool
 vpHomography::ransac(unsigned int n,
-		     double *xb, double *yb,
-		     double *xa, double *ya ,
-		     vpHomography &aHb,
-		     int consensus,
-		     double threshold
-		     )
+                     double *xb, double *yb,
+                     double *xa, double *ya ,
+                     vpHomography &aHb,
+                     int consensus,
+                     double threshold
+                     )
 {
   vpColVector x ;
   vpHomography::initRansac(n, xb, yb, xa, ya, x) ;
@@ -291,6 +345,8 @@ vpHomography::ransac(unsigned int n,
 }
 
 /*!
+  \deprecated This method is deprecated. You should rather use
+  vpHomography::ransac(const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, vpHomography &, std::vector<bool> &, double &, unsigned int, double, bool)
 
   Computes homography matrix \f$ b^H_a \f$ such as \f$X_b = b^H_a X_a \f$ with
   \f$ X_a = (xa, ya)^t \f$ and \f$ X_b = (xb, yb)^t \f$.
@@ -321,14 +377,14 @@ vpHomography::ransac(unsigned int n,
 
 */
 bool vpHomography::ransac(unsigned int n,
-			  double *xb, double *yb,
-			  double *xa, double *ya ,
-			  vpHomography &bHa,
-			  vpColVector &inliers,
-			  double& /* residual */,
-			  int consensus,
-			  double threshold,
-			  double areaThreshold)
+                          double *xb, double *yb,
+                          double *xa, double *ya ,
+                          vpHomography &bHa,
+                          vpColVector &inliers,
+                          double /* residual */,
+                          int consensus,
+                          double threshold,
+                          double areaThreshold)
 {
   vpColVector x ;
   vpHomography::initRansac(n, xb, yb, xa, ya, x);
@@ -348,9 +404,215 @@ bool vpHomography::ransac(unsigned int n,
   bHa /= bHa[2][2];
   return ransacable;
 }
+#endif //#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
 
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+/*!
+
+  From couples of matched points \f$^a{\bf p}=(x_a,y_a,1)\f$ in image a
+  and \f$^b{\bf p}=(x_b,y_b,1)\f$ in image b with homogeneous coordinates, computes the
+  homography matrix by resolving \f$^a{\bf p} = ^a{\bf H}_b\; ^b{\bf p}\f$
+  using Ransac algorithm.
+
+  \param xb, yb : Coordinates vector of matched points in image b. These coordinates are expressed in meters.
+  \param xa, ya : Coordinates vector of matched points in image a. These coordinates are expressed in meters.
+  \param aHb : Estimated homography that relies the transformation from image a to image b.
+  \param inliers : Vector that indicates if a matched point is an inlier (true) or an outlier (false).
+  \param residual : Global residual computed as
+  \f$r = \sqrt{1/n \sum_{inliers} {\| {^a{\bf p} - {\hat{^a{\bf H}_b}} {^b{\bf p}}} \|}^{2}}\f$ with \f$n\f$ the
+  number of inliers.
+
+  \param nbInliersConsensus : Minimal number of points requested to fit the estimated homography.
+
+  \param threshold : Threshold for outlier removing. A point is considered as an outlier if the reprojection error
+  \f$\| {^a{\bf p} - {\hat{^a{\bf H}_b}} {^b{\bf p}}} \|\f$ is greater than this threshold.
+
+  \param normalization : When set to true, the coordinates of the points are normalized. The normalization
+  carried out is the one preconized by Hartley.
+
+  \return true if the homography could be computed, false otherwise.
+
+*/
+bool vpHomography::ransac(const std::vector<double> &xb, const std::vector<double> &yb,
+                          const std::vector<double> &xa, const std::vector<double> &ya,
+                          vpHomography &aHb,
+                          std::vector<bool> &inliers,
+                          double &residual,
+                          unsigned int nbInliersConsensus,
+                          double threshold,
+                          bool normalization)
+{
+  unsigned int n = (unsigned int)xb.size();
+  if (yb.size() != n || xa.size() != n || ya.size() != n)
+    throw(vpException(vpException::dimensionError,
+                      "Bad dimension for robust homography estimation"));
+
+  // 4 point are required
+  if(n<4)
+    throw(vpException(vpException::fatalError, "There must be at least 4 matched points"));
+
+  vpUniRand random((const long)time(NULL)) ;
+
+  std::vector<unsigned int> best_consensus;
+  std::vector<unsigned int> cur_consensus;
+  std::vector<unsigned int> cur_outliers;
+  std::vector<unsigned int> cur_randoms;
+
+  std::vector<unsigned int> rand_ind;
+
+  unsigned int nbMinRandom = 4 ;
+  unsigned int ransacMaxTrials = 1000;
+  unsigned int maxDegenerateIter = 1000;
+
+  unsigned int nbTrials = 0;
+  unsigned int nbDegenerateIter = 0;
+  unsigned int nbInliers = 0;
+
+  bool foundSolution = false;
+
+  std::vector<double> xa_rand(nbMinRandom);
+  std::vector<double> ya_rand(nbMinRandom);
+  std::vector<double> xb_rand(nbMinRandom);
+  std::vector<double> yb_rand(nbMinRandom);
+
+  if (inliers.size() != n)
+    inliers.resize(n);
+
+  while (nbTrials < ransacMaxTrials && nbInliers < nbInliersConsensus)
+  {
+    cur_outliers.clear();
+    cur_randoms.clear();
+
+    bool degenerate = true;
+    while(degenerate == true){
+      std::vector<bool> usedPt(n, false);
+
+      rand_ind.clear();
+      for(unsigned int i = 0; i < nbMinRandom; i++)
+      {
+        // Generate random indicies in the range 0..n
+        unsigned int r = (unsigned int)ceil(random()*n) -1;
+        while(usedPt[r]) {
+          r = (unsigned int)ceil(random()*n) -1;
+        }
+        usedPt[r] = true;
+        rand_ind.push_back(r);
+
+        xa_rand[i] = xa[r];
+        ya_rand[i] = ya[r];
+        xb_rand[i] = xb[r];
+        yb_rand[i] = yb[r];
+      }
+
+      try{
+        if (! vpHomography::degenerateConfiguration(xb_rand, yb_rand, xa_rand, ya_rand)) {
+          vpHomography::DLT(xb_rand, yb_rand, xa_rand, ya_rand, aHb, normalization);
+         degenerate = false;
+        }
+      }
+      catch(...){
+        degenerate = true;
+      }
+
+      nbDegenerateIter ++;
+
+      if (nbDegenerateIter > maxDegenerateIter){
+        vpERROR_TRACE("Unable to select a nondegenerate data set");
+        throw(vpException(vpException::fatalError, "Unable to select a nondegenerate data set"));
+      }
+    }
+
+    aHb /= aHb[2][2] ;
+
+    // Computing Residual
+    double r = 0;
+    vpColVector a(3), b(3), c(3) ;
+    for (unsigned int i=0 ; i < nbMinRandom ; i++) {
+      a[0] = xa_rand[i] ; a[1] = ya_rand[i] ; a[2] = 1 ;
+      b[0] = xb_rand[i] ; b[1] = yb_rand[i] ; b[2] = 1 ;
+
+      c = aHb*b; c /= c[2] ;
+      r += (a-c).sumSquare() ;
+      //cout << "point " <<i << "  " << (a-c).sumSquare()  <<endl ;;
+    }
+
+    // Finding inliers & ouliers
+    r = sqrt(r/nbMinRandom);
+    //std::cout << "Candidate residual: " << r << std::endl;
+    if (r < threshold)
+    {
+      unsigned int nbInliersCur = 0;
+      for (unsigned int i = 0; i < n ; i++)
+      {
+        a[0] = xa[i] ; a[1] = ya[i] ; a[2] = 1 ;
+        b[0] = xb[i] ; b[1] = yb[i] ; b[2] = 1 ;
+
+        c = aHb*b ; c /= c[2] ;
+        double error = sqrt((a-c).sumSquare()) ;
+        if(error <= threshold){
+          nbInliersCur++;
+          cur_consensus.push_back(i);
+          inliers[i] = true;
+        }
+        else{
+          cur_outliers.push_back(i);
+          inliers[i] = false;
+        }
+      }
+      //std::cout << "nb inliers that matches: " << nbInliersCur << std::endl;
+      if(nbInliersCur > nbInliers)
+      {
+        foundSolution = true;
+        best_consensus = cur_consensus;
+        nbInliers = nbInliersCur;
+      }
+
+      cur_consensus.clear();
+    }
+
+    nbTrials++;
+    if(nbTrials >= ransacMaxTrials){
+      vpERROR_TRACE("Ransac reached the maximum number of trials");
+      foundSolution = true;
+    }
+  }
+
+  if(foundSolution){
+    if(nbInliers >= nbInliersConsensus)
+    {
+      std::vector<double> xa_best(best_consensus.size());
+      std::vector<double> ya_best(best_consensus.size());
+      std::vector<double> xb_best(best_consensus.size());
+      std::vector<double> yb_best(best_consensus.size());
+
+      for(unsigned i = 0 ; i < best_consensus.size(); i++)
+      {
+        xa_best[i] = xa[best_consensus[i]];
+        ya_best[i] = ya[best_consensus[i]];
+        xb_best[i] = xb[best_consensus[i]];
+        yb_best[i] = yb[best_consensus[i]];
+      }
+
+      vpHomography::DLT(xb_best, yb_best, xa_best, ya_best, aHb, normalization) ;
+      aHb /= aHb[2][2];
+
+      residual = 0 ;
+      vpColVector a(3), b(3), c(3);
+      for (unsigned int i=0 ; i < best_consensus.size() ; i++) {
+        a[0] = xa_best[i] ; a[1] = ya_best[i] ; a[2] = 1 ;
+        b[0] = xb_best[i] ; b[1] = yb_best[i] ; b[2] = 1 ;
+
+        c = aHb*b ; c /= c[2] ;
+        residual += (a-c).sumSquare() ;
+      }
+
+      residual = sqrt(residual/best_consensus.size());
+      return true;
+    }
+    else {
+      return false;
+    }
+  }
+  else {
+    return false;
+  }
+}
diff --git a/src/computer-vision/homography-estimation/vpHomographyVVS.cpp b/src/computer-vision/homography-estimation/vpHomographyVVS.cpp
index bbb25b6c..9d8688d7 100644
--- a/src/computer-vision/homography-estimation/vpHomographyVVS.cpp
+++ b/src/computer-vision/homography-estimation/vpHomographyVVS.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHomographyVVS.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpHomographyVVS.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -55,6 +55,8 @@
 const double vpHomography::threshold_rotation = 1e-7;
 const double vpHomography::threshold_displacement = 1e-18;
 
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
 static void
 updatePoseRotation(vpColVector& dx,vpHomogeneousMatrix&  mati)
 {
@@ -126,14 +128,16 @@ vpHomography::computeRotation(unsigned int nbpoint,
   unsigned int n=0 ;
   for (unsigned int i=0 ; i < nbpoint ; i++) {
     //    if ((c2P[i].get_x() !=-1) && (c1P[i].get_x() !=-1))
-    if ( (std::fabs(c2P[i].get_x() + 1) > std::fabs(vpMath::maximum(c2P[i].get_x(), 1.))) 
-	 && 
-	 (std::fabs(c1P[i].get_x() + 1) > std::fabs(vpMath::maximum(c1P[i].get_x(), 1.))) )
-      {
-	n++ ;
-      }
+    if ( (std::fabs(c2P[i].get_x() + 1) > std::fabs(vpMath::maximum(c2P[i].get_x(), 1.)))
+         &&
+         (std::fabs(c1P[i].get_x() + 1) > std::fabs(vpMath::maximum(c1P[i].get_x(), 1.))) )
+    {
+      n++ ;
+    }
   }
-  if ((only_1==1) || (only_2==1))  ; else n *=2 ;
+  //if ((only_1==1) || (only_2==1))  ; else n *=2 ;
+  if ( (! only_1) && (! only_2) )
+    n *=2 ;
 
   vpRobust robust(n);
   vpColVector res(n) ;
@@ -159,9 +163,9 @@ vpHomography::computeRotation(unsigned int nbpoint,
     int k =0 ;
     for (unsigned int i=0 ; i < nbpoint ; i++) {
       //if ((c2P[i].get_x() !=-1) && (c1P[i].get_x() !=-1))
-      if ( (std::fabs(c2P[i].get_x() + 1) > std::fabs(vpMath::maximum(c2P[i].get_x(), 1.))) 
-	 && 
-	   (std::fabs(c1P[i].get_x() + 1) > std::fabs(vpMath::maximum(c1P[i].get_x(), 1.))) )
+      if ( (std::fabs(c2P[i].get_x() + 1) > std::fabs(vpMath::maximum(c2P[i].get_x(), 1.)))
+           &&
+           (std::fabs(c1P[i].get_x() + 1) > std::fabs(vpMath::maximum(c1P[i].get_x(), 1.))) )
       {
         p2[0] = c2P[i].get_x() ;
         p2[1] = c2P[i].get_y() ;
@@ -240,35 +244,35 @@ vpHomography::computeRotation(unsigned int nbpoint,
     {
       robust.setIteration(0);
 
-      for (unsigned int k=0 ; k < n ; k++)
+      for (unsigned int l=0 ; l < n ; l++)
       {
-        res[k] = vpMath::sqr(e[2*k]) + vpMath::sqr(e[2*k+1]) ;
+        res[l] = vpMath::sqr(e[2*l]) + vpMath::sqr(e[2*l+1]) ;
       }
       robust.MEstimator(vpRobust::TUKEY, res, w);
 
 
       // compute the pseudo inverse of the interaction matrix
-      for (unsigned int k=0 ; k < n ; k++)
+      for (unsigned int l=0 ; l < n ; l++)
       {
-        W[2*k][2*k] = w[k] ;
-        W[2*k+1][2*k+1] = w[k] ;
+        W[2*l][2*l] = w[l] ;
+        W[2*l+1][2*l+1] = w[l] ;
       }
     }
     else
     {
-      for (unsigned int k=0 ; k < 2*n ; k++) W[k][k] = 1 ;
+      for (unsigned int l=0 ; l < 2*n ; l++) W[l][l] = 1 ;
     }
     // CreateDiagonalMatrix(w, W) ;
     (L).pseudoInverse(Lp, 1e-6) ;
     // Compute the camera velocity
-    vpColVector c2Rc1, v(6) ;
+    vpColVector c2rc1, v(6) ;
 
-    c2Rc1 = -2*Lp*W*e  ;
-    for (unsigned int i=0 ; i < 3 ; i++) v[i+3] = c2Rc1[i] ;
+    c2rc1 = -2*Lp*W*e  ;
+    for (unsigned int i=0 ; i < 3 ; i++) v[i+3] = c2rc1[i] ;
 
     // only for simulation
 
-    updatePoseRotation(c2Rc1, c2Mc1) ;
+    updatePoseRotation(c2rc1, c2Mc1) ;
     r =e.sumSquare() ;
 
     if ((W*e).sumSquare() < 1e-10) break ;
@@ -307,13 +311,9 @@ vpHomography::computeDisplacement(unsigned int nbpoint,
                                   int userobust
                                  )
 {
-
-
   vpColVector e(2) ;
   double r_1 = -1 ;
 
-
-
   vpColVector p2(3) ;
   vpColVector p1(3) ;
   vpColVector Hp2(3) ;
@@ -324,13 +324,17 @@ vpHomography::computeDisplacement(unsigned int nbpoint,
   vpMatrix H1(2,6) ;
   vpColVector e1(2) ;
 
-  int only_1 = 1 ;
-  int only_2 = 0 ;
+  int only_1;
+  int only_2;
   int iter = 0 ;
-  unsigned int i ;
   unsigned int n=0 ;
   n = nbpoint ;
-  if ((only_1==1) || (only_2==1))  ; else n *=2 ;
+  only_1 = 1 ;
+  only_2 = 0 ;
+
+ //if ((only_1==1) || (only_2==1))  ; else n *=2 ;
+  if ( (! only_1) && (! only_2) )
+    n *=2 ;
 
   vpRobust robust(n);
   vpColVector res(n) ;
@@ -347,11 +351,9 @@ vpHomography::computeDisplacement(unsigned int nbpoint,
   iter =0 ;
   while (vpMath::equal(r_1,r,threshold_displacement) == false )
   {
-
     r_1 =r ;
     // compute current position
 
-
     //Change frame (current)
     vpHomogeneousMatrix c1Mc2, c2Mo ;
     vpRotationMatrix c1Rc2, c2Rc1  ;
@@ -367,10 +369,9 @@ vpHomography::computeDisplacement(unsigned int nbpoint,
     getPlaneInfo(oN, c1Mo, N1, d1) ;
     getPlaneInfo(oN, c2Mo, N2, d2) ;
 
-
     vpMatrix L(2,3), Lp ;
     int k =0 ;
-    for (i=0 ; i < nbpoint ; i++)
+    for (unsigned int i=0 ; i < nbpoint ; i++)
     {
       p2[0] = c2P[i].get_x() ;
       p2[1] = c2P[i].get_y() ;
@@ -405,18 +406,16 @@ vpHomography::computeDisplacement(unsigned int nbpoint,
       vpMatrix c1CFc2(6,6) ;
       {
         vpMatrix sTR = c1Tc2.skew()*(vpMatrix)c1Rc2 ;
-        for (unsigned int k=0 ; k < 3 ; k++)
+        for (unsigned int k_=0 ; k_ < 3 ; k_++)
           for (unsigned int l=0 ; l<3 ; l++)
           {
-            c1CFc2[k][l] = c1Rc2[k][l] ;
-            c1CFc2[k+3][l+3] = c1Rc2[k][l] ;
-            c1CFc2[k][l+3] = sTR[k][l] ;
+            c1CFc2[k_][l] = c1Rc2[k_][l] ;
+            c1CFc2[k_+3][l+3] = c1Rc2[k_][l] ;
+            c1CFc2[k_][l+3] = sTR[k_][l] ;
           }
       }
       H2 = H2*c1CFc2 ;
 
-
-
       // Set up the error vector
       e2[0] = Hp2[0] - c1P[i].get_x() ;
       e2[1] = Hp2[1] - c1P[i].get_y() ;
@@ -435,7 +434,6 @@ vpHomography::computeDisplacement(unsigned int nbpoint,
       e1[0] = Hp1[0] - c2P[i].get_x() ;
       e1[1] = Hp1[1] - c2P[i].get_y() ;
 
-
       if (only_2==1)
       {
         if (k == 0) { L = H2 ; e = e2 ; }
@@ -474,23 +472,22 @@ vpHomography::computeDisplacement(unsigned int nbpoint,
     if (userobust)
     {
       robust.setIteration(0);
-      for (unsigned int k=0 ; k < n ; k++)
+      for (unsigned int l=0 ; l < n ; l++)
       {
-        res[k] = vpMath::sqr(e[2*k]) + vpMath::sqr(e[2*k+1]) ;
+        res[l] = vpMath::sqr(e[2*l]) + vpMath::sqr(e[2*l+1]) ;
       }
       robust.MEstimator(vpRobust::TUKEY, res, w);
 
-
       // compute the pseudo inverse of the interaction matrix
-      for (unsigned int k=0 ; k < n ; k++)
+      for (unsigned int l=0 ; l < n ; l++)
       {
-        W[2*k][2*k] = w[k] ;
-        W[2*k+1][2*k+1] = w[k] ;
+        W[2*l][2*l] = w[l] ;
+        W[2*l+1][2*l+1] = w[l] ;
       }
     }
     else
     {
-      for (unsigned int k=0 ; k < 2*n ; k++) W[k][k] = 1 ;
+      for (unsigned int l=0 ; l < 2*n ; l++) W[l][l] = 1 ;
     }
     (W*L).pseudoInverse(Lp, 1e-16) ;
     // Compute the camera velocity
@@ -504,8 +501,6 @@ vpHomography::computeDisplacement(unsigned int nbpoint,
     //   UpdatePose2(c2Tcc1, c2Mc1) ;
     r =(W*e).sumSquare() ;
 
-
-
     if (r < 1e-15)  {break ; }
     if (iter>1000){break ; }
     if (r>r_1) {  break ; }
@@ -532,8 +527,6 @@ vpHomography::computeDisplacement(unsigned int nbpoint,
   vpColVector e(2) ;
   double r_1 = -1 ;
 
-
-
   vpColVector p2(3) ;
   vpColVector p1(3) ;
   vpColVector Hp2(3) ;
@@ -545,13 +538,17 @@ vpHomography::computeDisplacement(unsigned int nbpoint,
   vpColVector e1(2) ;
 
 
-  int only_1 = 1 ;
-  int only_2 = 0 ;
+  int only_1;
+  int only_2;
   int iter = 0 ;
   unsigned int i ;
   unsigned int n=0 ;
+  only_1 = 1 ;
+  only_2 = 0 ;
   n = nbpoint ;
-  if ((only_1==1) || (only_2==1))  ; else n *=2 ;
+ // if ((only_1==1) || (only_2==1))  ; else n *=2 ;
+  if ( (! only_1) && (! only_2) )
+    n *=2 ;
 
   vpRobust robust(n);
   vpColVector res(n) ;
@@ -626,18 +623,16 @@ vpHomography::computeDisplacement(unsigned int nbpoint,
       vpMatrix c1CFc2(6,6) ;
       {
         vpMatrix sTR = c1Tc2.skew()*(vpMatrix)c1Rc2 ;
-        for (unsigned int k=0 ; k < 3 ; k++)
+        for (unsigned int k_=0 ; k_ < 3 ; k_++)
           for (unsigned int l=0 ; l<3 ; l++)
           {
-            c1CFc2[k][l] = c1Rc2[k][l] ;
-            c1CFc2[k+3][l+3] = c1Rc2[k][l] ;
-            c1CFc2[k][l+3] = sTR[k][l] ;
+            c1CFc2[k_][l] = c1Rc2[k_][l] ;
+            c1CFc2[k_+3][l+3] = c1Rc2[k_][l] ;
+            c1CFc2[k_][l+3] = sTR[k_][l] ;
           }
       }
       H2 = H2*c1CFc2 ;
 
-
-
       // Set up the error vector
       e2[0] = Hp2[0] - c1P[i].get_x() ;
       e2[1] = Hp2[1] - c1P[i].get_y() ;
@@ -695,23 +690,23 @@ vpHomography::computeDisplacement(unsigned int nbpoint,
     if (userobust)
     {
       robust.setIteration(0);
-      for (unsigned int k=0 ; k < n ; k++)
+      for (unsigned int k_=0 ; k_ < n ; k_++)
       {
-        res[k] = vpMath::sqr(e[2*k]) + vpMath::sqr(e[2*k+1]) ;
+        res[k_] = vpMath::sqr(e[2*k_]) + vpMath::sqr(e[2*k_+1]) ;
       }
       robust.MEstimator(vpRobust::TUKEY, res, w);
 
 
       // compute the pseudo inverse of the interaction matrix
-      for (unsigned int k=0 ; k < n ; k++)
+      for (unsigned int k_=0 ; k_ < n ; k_++)
       {
-        W[2*k][2*k] = w[k] ;
-        W[2*k+1][2*k+1] = w[k] ;
+        W[2*k_][2*k_] = w[k_] ;
+        W[2*k_+1][2*k_+1] = w[k_] ;
       }
     }
     else
     {
-      for (unsigned int k=0 ; k < 2*n ; k++) W[k][k] = 1 ;
+      for (unsigned int k_=0 ; k_ < 2*n ; k_++) W[k_][k_] = 1 ;
     }
     (W*L).pseudoInverse(Lp, 1e-16) ;
     // Compute the camera velocity
@@ -737,3 +732,4 @@ vpHomography::computeDisplacement(unsigned int nbpoint,
 
 }
 
+#endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
diff --git a/src/computer-vision/pose-estimation/vpLevenbergMarquartd.cpp b/src/computer-vision/pose-estimation/vpLevenbergMarquartd.cpp
index 2f4c7aaf..b5dcf13e 100644
--- a/src/computer-vision/pose-estimation/vpLevenbergMarquartd.cpp
+++ b/src/computer-vision/pose-estimation/vpLevenbergMarquartd.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpLevenbergMarquartd.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpLevenbergMarquartd.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -46,6 +46,7 @@
 #include <cmath>    // std::fabs
 #include <limits>   // numeric_limits
 #include <iostream>
+#include <algorithm>    // std::min
 
 #define	SIGN(x)		((x) < 0 ? -1 : 1)
 #define	SWAP(a,b,c)	{(c) = (a); (a) = (b); (b) = (c);}
@@ -233,7 +234,7 @@ double	enorm (const double *x, int n)
  *
  */
 int	lmpar(int n, double *r, int ldr, int *ipvt, double *diag, double *qtb,
-	      double *delta, double *par, double *x, double *sdiag, double *wa1, double *wa2)
+          double *delta, double *par, double *x, double *sdiag, double *wa1, double *wa2)
 {
   const double	tol1 = 0.1, tol001 = 0.001;	/* tolerance a 0.1 et a 0.001	*/
 
@@ -276,8 +277,8 @@ int	lmpar(int n, double *r, int ldr, int *ipvt, double *diag, double *qtb,
 
       if (jm1 >= 0)
       {
-	for (unsigned int j = 0; j <= (unsigned int)jm1; j++)
-	  wa1[j] -= *MIJ(r, i, j, ldr) * temp;
+        for (unsigned int j = 0; j <= (unsigned int)jm1; j++)
+          wa1[j] -= *MIJ(r, i, j, ldr) * temp;
       }
     }
   }
@@ -315,22 +316,22 @@ int	lmpar(int n, double *r, int ldr, int *ipvt, double *diag, double *qtb,
     {
       for (int i = 0; i < n; i++)
       {
-	l = ipvt[i];
-	wa1[i] = diag[l] * (wa2[l] / dxnorm);
+        l = ipvt[i];
+        wa1[i] = diag[l] * (wa2[l] / dxnorm);
       }
 
       for (int i = 0; i <  n; i++)
       {
-	long	im1;
-	sum = 0.0;
-	im1 = (i - 1L);
-
-	if (im1 >= 0)
-	{
-	  for (unsigned int j = 0; j <= (unsigned int)im1; j++)
-	    sum += (*MIJ(r, i, j, ldr) * wa1[j]);
-	}
-	wa1[i] = (wa1[i] - sum) / *MIJ(r, i, i, ldr);
+        long	im1;
+        sum = 0.0;
+        im1 = (i - 1L);
+
+        if (im1 >= 0)
+        {
+          for (unsigned int j = 0; j <= (unsigned int)im1; j++)
+            sum += (*MIJ(r, i, j, ldr) * wa1[j]);
+        }
+        wa1[i] = (wa1[i] - sum) / *MIJ(r, i, i, ldr);
       }
 
       temp = enorm(wa1, n);
@@ -346,7 +347,7 @@ int	lmpar(int n, double *r, int ldr, int *ipvt, double *diag, double *qtb,
       sum = 0.0;
 
       for (int j = 0; j <= i; j++)
-	sum += *MIJ(r, i, j, ldr) * qtb[j];
+        sum += *MIJ(r, i, j, ldr) * qtb[j];
 
       l = ipvt[i];
       wa1[i] = sum / diag[l];
@@ -384,17 +385,17 @@ int	lmpar(int n, double *r, int ldr, int *ipvt, double *diag, double *qtb,
        */
       //if (*par == 0.0)
       if (std::fabs(*par) <= std::numeric_limits<double>::epsilon() )
-	*par = vpMath::maximum(dwarf, (tol001 * paru));
+        *par = vpMath::maximum(dwarf, (tol001 * paru));
 
       temp = sqrt(*par);
 
       for (int i = 0; i < n; i++)
-	wa1[i] = temp * diag[i];
+        wa1[i] = temp * diag[i];
 
       qrsolv(n, r, ldr, ipvt, wa1, qtb, x, sdiag, wa2);
 
       for (int i = 0; i < n; i++)
-	wa2[i] = diag[i] * x[i];
+        wa2[i] = diag[i] * x[i];
 
       dxnorm = enorm(wa2, n);
       temp = fp;
@@ -409,16 +410,15 @@ int	lmpar(int n, double *r, int ldr, int *ipvt, double *diag, double *qtb,
       //if ((std::fabs(fp) <= tol1 * (*delta)) || ((parl == 0.0) && (fp <= temp)
       //	  && (temp < 0.0)) || (iter == 10))
       if ((std::fabs(fp) <= tol1 * (*delta)) || ((std::fabs(parl) <= std::numeric_limits<double>::epsilon()) && (fp <= temp)
-	  && (temp < 0.0)) || (iter == 10))
+                                                 && (temp < 0.0)) || (iter == 10))
       {
-	/*
-	 *	terminaison.
-	 */
+        // terminaison.
 
-	if (iter == 0)
-	  *par = 0.0;
+        // Remove the two next lines since this is a dead code
+        /* if (iter == 0)
+          *par = 0.0; */
 
-	return (0);
+        return (0);
       }
 
       /*
@@ -427,20 +427,20 @@ int	lmpar(int n, double *r, int ldr, int *ipvt, double *diag, double *qtb,
 
       for (int i = 0; i < n; i++)
       {
-	l = ipvt[i];
-	wa1[i] = diag[l] * (wa2[l] / dxnorm);
+        l = ipvt[i];
+        wa1[i] = diag[l] * (wa2[l] / dxnorm);
       }
 
       for (unsigned int i = 0; i < (unsigned int)n; i++)
       {
-	wa1[i] = wa1[i] / sdiag[i];
-	temp = wa1[i];
-	jp1 = i + 1;
-	if (  (unsigned int) n >= jp1)
-	{
-	  for (unsigned int j = jp1; j <  (unsigned int)n; j++)
-	    wa1[j] -= (*MIJ(r, i, j, ldr) * temp);
-	}
+        wa1[i] = wa1[i] / sdiag[i];
+        temp = wa1[i];
+        jp1 = i + 1;
+        if (  (unsigned int) n >= jp1)
+        {
+          for (unsigned int j = jp1; j <  (unsigned int)n; j++)
+            wa1[j] -= (*MIJ(r, i, j, ldr) * temp);
+        }
       }
 
       temp = enorm(wa1, n);
@@ -451,10 +451,10 @@ int	lmpar(int n, double *r, int ldr, int *ipvt, double *diag, double *qtb,
        *	de parl ou paru.
        */
       if (fp > 0.0)
-	parl = vpMath::maximum(parl, *par);
+        parl = vpMath::maximum(parl, *par);
 
       if (fp < 0.0)
-	paru = vpMath::minimum(paru, *par);
+        paru = vpMath::minimum(paru, *par);
 
       /*
        *	calcul d'une estimee ameliree de "par".
diff --git a/src/computer-vision/pose-estimation/vpLevenbergMarquartd.h b/src/computer-vision/pose-estimation/vpLevenbergMarquartd.h
index 36ea86d6..a746f59a 100644
--- a/src/computer-vision/pose-estimation/vpLevenbergMarquartd.h
+++ b/src/computer-vision/pose-estimation/vpLevenbergMarquartd.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpLevenbergMarquartd.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpLevenbergMarquartd.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/computer-vision/pose-estimation/vpPose.cpp b/src/computer-vision/pose-estimation/vpPose.cpp
index 292e2b0b..b1391751 100644
--- a/src/computer-vision/pose-estimation/vpPose.cpp
+++ b/src/computer-vision/pose-estimation/vpPose.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
 *
-* $Id: vpPose.cpp 4056 2013-01-05 13:04:42Z fspindle $
+* $Id: vpPose.cpp 4649 2014-02-07 14:57:11Z fspindle $
 *
 * This file is part of the ViSP software.
-* Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+* Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 * 
 * This software is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
@@ -71,11 +71,10 @@ vpPose::init()
 #endif
   npt = 0 ;
   listP.clear() ;
+  c3d.clear();
 
   lambda = 0.25 ;
 
-  c3d = NULL ;
-
   vvsIterMax = 200 ;
 
   distanceToPlaneForCoplanarityTest = 0.001 ;
@@ -86,13 +85,19 @@ vpPose::init()
   ransacThreshold = 0.0001;
   ransacNbInlierConsensus = 4;
 
+  residual = 0;
 #if (DEBUG_LEVEL1)
   std::cout << "end vpPose::Init() " << std::endl ;
 #endif
 
 }
 
+/*! Defaukt constructor. */
 vpPose::vpPose()
+  : npt(0), listP(), residual(0), lambda(0.25), vvsIterMax(200), c3d(),
+    computeCovariance(false), covarianceMatrix(),
+    ransacNbInlierConsensus(4), ransacMaxTrials(1000), ransacInliers(), ransacThreshold(0.0001),
+    distanceToPlaneForCoplanarityTest(0.001)
 {
 #if (DEBUG_LEVEL1)
   std::cout << "begin vpPose::vpPose() " << std::endl ;
@@ -107,7 +112,7 @@ vpPose::vpPose()
 }
 
 /*!
-\brief destructor delete the array of point (freed the memory)
+  Destructor that deletes the array of point (freed the memory).
 */
 vpPose::~vpPose()
 {
@@ -122,7 +127,7 @@ vpPose::~vpPose()
 #endif
 }
 /*!
-\brief  delete the array of point
+  Delete the array of point
 */
 void
 vpPose::clearPoint()
@@ -338,8 +343,7 @@ the pose matrix 'cMo'.
 double
 vpPose::computeResidual(const vpHomogeneousMatrix &cMo) const
 {
-
-  double residual = 0 ;
+  double residual_ = 0 ;
   vpPoint P ;
   for(std::list<vpPoint>::const_iterator it=listP.begin(); it != listP.end(); ++it)
   {
@@ -349,9 +353,9 @@ vpPose::computeResidual(const vpHomogeneousMatrix &cMo) const
 
     P.track(cMo) ;
 
-    residual += vpMath::sqr(x-P.get_x()) + vpMath::sqr(y-P.get_y())  ;
+    residual_ += vpMath::sqr(x-P.get_x()) + vpMath::sqr(y-P.get_y())  ;
   }
-  return residual ;
+  return residual_ ;
 }
 
 
@@ -672,8 +676,8 @@ vpPose::poseFromRectangle(vpPoint &p1,vpPoint &p2,
                           vpHomogeneousMatrix & cMo)
 {
 
-  double rectx[4] ;
-  double recty[4] ;
+  std::vector<double> rectx(4) ;
+  std::vector<double> recty(4) ;
   rectx[0]= 0 ;
   recty[0]=0 ;
   rectx[1]=1 ;
@@ -682,8 +686,8 @@ vpPose::poseFromRectangle(vpPoint &p1,vpPoint &p2,
   recty[2]=1 ;
   rectx[3]=0 ;
   recty[3]=1 ;
-  double irectx[4] ;
-  double irecty[4] ;
+  std::vector<double>  irectx(4) ;
+  std::vector<double>  irecty(4) ;
   irectx[0]=(p1.get_x()) ;
   irecty[0]=(p1.get_y()) ;
   irectx[1]=(p2.get_x()) ;
@@ -697,8 +701,8 @@ vpPose::poseFromRectangle(vpPoint &p1,vpPoint &p2,
   vpMatrix H(3,3);
   vpHomography hom;
 
-  //  vpHomography::HartleyDLT(4,rectx,recty,irectx,irecty,hom);
-  vpHomography::HLM(4,rectx,recty,irectx,irecty,1,hom);
+  //  vpHomography::HartleyDLT(rectx,recty,irectx,irecty,hom);
+  vpHomography::HLM(rectx,recty,irectx,irecty,1,hom);
   for (unsigned int i=0 ; i < 3 ; i++)
     for(unsigned int j=0 ; j < 3 ; j++)
       H[i][j] = hom[i][j] ;
diff --git a/src/computer-vision/pose-estimation/vpPose.h b/src/computer-vision/pose-estimation/vpPose.h
index 282718cf..dd203f1b 100644
--- a/src/computer-vision/pose-estimation/vpPose.h
+++ b/src/computer-vision/pose-estimation/vpPose.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPose.h 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpPose.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -102,7 +102,7 @@ protected :
 private:
   int vvsIterMax ; //! define the maximum number of iteration in VVS
   //! variable used in the Dementhon approach
-  vpPoint *c3d ;
+  std::vector<vpPoint> c3d ;
   //! Flag used to specify if the covariance matrix has to be computed or not.
   bool computeCovariance;
   //! Covariance matrix
@@ -120,7 +120,7 @@ protected:
   int calculArbreDementhon(vpMatrix &b, vpColVector &U, vpHomogeneousMatrix &cMo) ;
 
 public:
-  //! constructor
+  // constructor
   vpPose() ;
   //! destructor
   virtual ~vpPose() ;
@@ -169,8 +169,8 @@ public:
   void setRansacNbInliersToReachConsensus(const unsigned int &nbC){ ransacNbInlierConsensus = nbC; }
   void setRansacThreshold(const double &t){ ransacThreshold = t; }
   void setRansacMaxTrials(const int &rM){ ransacMaxTrials = rM; }
-  unsigned int getRansacNbInliers(){ return (unsigned int) ransacInliers.size(); }
-  std::vector<vpPoint> getRansacInliers(){ return ransacInliers; }
+  unsigned int getRansacNbInliers() const { return (unsigned int) ransacInliers.size(); }
+  std::vector<vpPoint> getRansacInliers() const{ return ransacInliers; }
   
   /*!
     Set if the covaraince matrix has to be computed in the Virtual Visual Servoing approach.
diff --git a/src/computer-vision/pose-estimation/vpPoseDementhon.cpp b/src/computer-vision/pose-estimation/vpPoseDementhon.cpp
index 21906252..0d550387 100644
--- a/src/computer-vision/pose-estimation/vpPoseDementhon.cpp
+++ b/src/computer-vision/pose-estimation/vpPoseDementhon.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
 *
-* $Id: vpPoseDementhon.cpp 4276 2013-06-25 12:36:48Z fspindle $
+* $Id: vpPoseDementhon.cpp 4649 2014-02-07 14:57:11Z fspindle $
 *
 * This file is part of the ViSP software.
-* Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+* Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 * 
 * This software is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
@@ -70,23 +70,17 @@ vpPose::poseDementhonNonPlan(vpHomogeneousMatrix &cMo)
   double seuil=1.0;
   double f=1.;
 
-  //  CPoint c3d[npt] ;
-
-  if (c3d !=NULL) delete [] c3d ;
-  c3d = new vpPoint[npt] ;
-
   vpPoint p0 = listP.front() ;
 
-  vpPoint P ;
-  int i=0;
+  c3d.clear();
+  vpPoint P;
   for (std::list<vpPoint>::const_iterator it = listP.begin(); it != listP.end(); ++it)
   {
-    P = *it ;
-    c3d[i] = P ;
-    c3d[i].set_oX(P.get_oX()-p0.get_oX()) ;
-    c3d[i].set_oY(P.get_oY()-p0.get_oY()) ;
-    c3d[i].set_oZ(P.get_oZ()-p0.get_oZ()) ;
-    ++i;
+    P = (*it);
+    P.set_oX(P.get_oX()-p0.get_oX()) ;
+    P.set_oY(P.get_oY()-p0.get_oY()) ;
+    P.set_oZ(P.get_oZ()-p0.get_oZ()) ;
+    c3d.push_back(P) ;
   }
 
   vpMatrix a ;
@@ -227,8 +221,6 @@ vpPose::poseDementhonNonPlan(vpHomogeneousMatrix &cMo)
   cMo[0][3] -= (p0.get_oX()*cMo[0][0]+p0.get_oY()*cMo[0][1]+p0.get_oZ()*cMo[0][2]);
   cMo[1][3] -= (p0.get_oX()*cMo[1][0]+p0.get_oY()*cMo[1][1]+p0.get_oZ()*cMo[1][2]);
   cMo[2][3] -= (p0.get_oX()*cMo[2][0]+p0.get_oY()*cMo[2][1]+p0.get_oZ()*cMo[2][2]);
-
-  delete [] c3d ; c3d = NULL ;
 }
 
 
@@ -375,7 +367,6 @@ vpPose::calculArbreDementhon(vpMatrix &b, vpColVector &U,
     vpColVector I(3) ;
     vpColVector J(3) ;
 
-    vpHomogeneousMatrix cMo_old ;
     smin_old = 2*smin ;
 
     cpt = 0;
@@ -519,21 +510,17 @@ vpPose::poseDementhonPlan(vpHomogeneousMatrix &cMo)
 
   unsigned int i,j,k ;
 
-  if (c3d !=NULL) delete []c3d ;
-  c3d = new vpPoint[npt] ;
-
   vpPoint p0 = listP.front() ;
 
   vpPoint P ;
-  i=0 ;
+  c3d.clear();
   for (std::list<vpPoint>::const_iterator it = listP.begin(); it != listP.end(); ++it)
   {
     P = *it;
-    c3d[i] = P ;
-    c3d[i].set_oX(P.get_oX()-p0.get_oX()) ;
-    c3d[i].set_oY(P.get_oY()-p0.get_oY()) ;
-    c3d[i].set_oZ(P.get_oZ()-p0.get_oZ()) ;
-    i++  ;
+    P.set_oX(P.get_oX()-p0.get_oX()) ;
+    P.set_oY(P.get_oY()-p0.get_oY()) ;
+    P.set_oZ(P.get_oZ()-p0.get_oZ()) ;
+    c3d.push_back(P);
   }
 
   vpMatrix a ;
@@ -714,7 +701,6 @@ vpPose::poseDementhonPlan(vpHomogeneousMatrix &cMo)
       cMo[1][3] -= p0.get_oX()*cMo[1][0]+p0.get_oY()*cMo[1][1]+p0.get_oZ()*cMo[1][2];
       cMo[2][3] -= p0.get_oX()*cMo[2][0]+p0.get_oY()*cMo[2][1]+p0.get_oZ()*cMo[2][2];
 
-      delete [] c3d ; c3d = NULL ;
 #if (DEBUG_LEVEL1)
       std::cout << "end CCalculPose::PoseDementhonPlan()" << std::endl ;
 #endif
@@ -735,12 +721,10 @@ vpPose::poseDementhonPlan(vpHomogeneousMatrix &cMo)
 */
 double vpPose::computeResidualDementhon(const vpHomogeneousMatrix &cMo)
 {
-  unsigned int i ;
-  double residual = 0 ;
-
+  double residual_ = 0 ;
 
-  residual  =0 ;
-  for (i =0 ; i < npt ; i++)
+  residual_  =0 ;
+  for (unsigned int i =0 ; i < npt ; i++)
   {
 
     double X = c3d[i].get_oX()*cMo[0][0]+c3d[i].get_oY()*cMo[0][1]+c3d[i].get_oZ()*cMo[0][2] + cMo[0][3];
@@ -750,11 +734,9 @@ double vpPose::computeResidualDementhon(const vpHomogeneousMatrix &cMo)
     double x = X/Z ;
     double y = Y/Z ;
 
-
-
-    residual += vpMath::sqr(x-c3d[i].get_x()) +  vpMath::sqr(y-c3d[i].get_y())  ;
+    residual_ += vpMath::sqr(x-c3d[i].get_x()) +  vpMath::sqr(y-c3d[i].get_y())  ;
   }
-  return residual ;
+  return residual_ ;
 }
 
 
diff --git a/src/computer-vision/pose-estimation/vpPoseException.h b/src/computer-vision/pose-estimation/vpPoseException.h
index 09132b6b..23c4c54f 100644
--- a/src/computer-vision/pose-estimation/vpPoseException.h
+++ b/src/computer-vision/pose-estimation/vpPoseException.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPoseException.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPoseException.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -67,12 +67,12 @@
  */
 class VISP_EXPORT vpPoseException : public vpException
 {
-public:
-  /*!
+  public:
+    /*!
     \brief Lists the possible error than can be emmited while calling
     vpPose member
    */
-  enum errorCodeEnum
+    enum errorCodeEnum
     {
       poseError,
       //! something is not initialized
@@ -84,25 +84,20 @@ public:
       notEnoughPointError
     } ;
 
-public:
-  vpPoseException (const int code, const char * msg)
-    : vpException(code, msg){ ; }
-  vpPoseException (const int code, const std::string & msg)
-    : vpException(code, msg){ ; }
-  vpPoseException (const int code)
-    : vpException(code){ ; }
- // vpPoseException() : vpException() { ;}
+  public:
+    vpPoseException (const int id,  const char* format, ...)
+    {
+      this->code = id;
+      va_list args;
+      va_start(args, format);
+      setMessage(format, args);
+      va_end (args);
+    }
+    vpPoseException (const int id, const std::string & msg)
+      : vpException(id, msg){ ; }
+    vpPoseException (const int id)
+      : vpException(id){ ; }
+    // vpPoseException() : vpException() { ;}
 };
 
-
-
-
-
-#endif /* #ifndef __vpPoseException_ERROR_H */
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+#endif
diff --git a/src/computer-vision/pose-estimation/vpPoseFeatures.cpp b/src/computer-vision/pose-estimation/vpPoseFeatures.cpp
index 7f1a1060..132c0743 100644
--- a/src/computer-vision/pose-estimation/vpPoseFeatures.cpp
+++ b/src/computer-vision/pose-estimation/vpPoseFeatures.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPoseFeatures.cpp 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpPoseFeatures.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -44,13 +44,11 @@
   Default constructor.
 */
 vpPoseFeatures::vpPoseFeatures()
+  : maxSize(0), totalSize(0), vvsIterMax(200), lambda(1.0), verbose(false), computeCovariance(false),
+    covarianceMatrix(), featurePoint_Point_list(), featurePoint3D_Point_list(), featureVanishingPoint_Point_list(),
+    featureVanishingPoint_DuoLine_list(), featureEllipse_Sphere_list(), featureEllipse_Circle_list(),
+    featureLine_Line_list(), featureLine_DuoLineInt_List(), featureSegment_DuoPoints_list()
 {
-  lambda = 1.0;
-  vvsIterMax = 200;
-  totalSize = 0;
-  maxSize = 0;
-  
-  verbose = false;
 }
 
 /*!
diff --git a/src/computer-vision/pose-estimation/vpPoseFeatures.h b/src/computer-vision/pose-estimation/vpPoseFeatures.h
index 409cec78..787ed4ba 100644
--- a/src/computer-vision/pose-estimation/vpPoseFeatures.h
+++ b/src/computer-vision/pose-estimation/vpPoseFeatures.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPoseFeatures.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPoseFeatures.h 4660 2014-02-09 14:13:27Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -323,7 +323,7 @@ public:
   \brief Template class that allows to estimate a pose from all kind of specific features if the compiler support C++ 11.
 */
 template< typename featureType, typename RetType, typename ...Args >
-class VISP_EXPORT vpPoseSpecificFeatureTemplate : public vpPoseSpecificFeature
+class vpPoseSpecificFeatureTemplate : public vpPoseSpecificFeature
 {
 private:
   featureType desiredFeature;
@@ -372,7 +372,7 @@ public:
   \brief Template class that allows to estimate a pose from all kind of specific features if the compiler support C++ 11.
 */
 template< typename ObjectType, typename featureType, typename RetType, typename ...Args >
-class VISP_EXPORT vpPoseSpecificFeatureTemplateObject : public vpPoseSpecificFeature
+class vpPoseSpecificFeatureTemplateObject : public vpPoseSpecificFeature
 {
 private:
   featureType desiredFeature;
@@ -440,6 +440,7 @@ private:
   struct vpDuo{
     FeatureType    *desiredFeature;
     FirstParamType firstParam;
+    vpDuo() : desiredFeature(NULL), firstParam() {}
   };
   
   template<typename FeatureType, typename FirstParamType, typename SecondParamType>
@@ -447,6 +448,8 @@ private:
     FeatureType    *desiredFeature;
     FirstParamType  firstParam;
     SecondParamType secondParam;
+
+    vpTrio() : desiredFeature(NULL), firstParam(), secondParam() {}
   };
 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
 
diff --git a/src/computer-vision/pose-estimation/vpPoseLagrange.cpp b/src/computer-vision/pose-estimation/vpPoseLagrange.cpp
index 6f254314..7cf3c5ae 100644
--- a/src/computer-vision/pose-estimation/vpPoseLagrange.cpp
+++ b/src/computer-vision/pose-estimation/vpPoseLagrange.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
 *
-* $Id: vpPoseLagrange.cpp 4056 2013-01-05 13:04:42Z fspindle $
+* $Id: vpPoseLagrange.cpp 4574 2014-01-09 08:48:51Z fspindle $
 *
 * This file is part of the ViSP software.
-* Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+* Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 * 
 * This software is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
@@ -385,8 +385,9 @@ vpPose::poseLagrangePlan(vpHomogeneousMatrix &cMo, const int coplanar_plane_type
     for (i=0;i<3;i++) {s += (X1[i]*X2[i]);}
     for (i=0;i<3;i++)  {X2[i] -= (s*X1[i]);} /* X1^T X2 = 0	*/
 
-    s = 0.0;
-    for (i=0;i<3;i++)  {s += (X2[i]*X2[i]);}
+    //s = 0.0;
+    //for (i=0;i<3;i++)  {s += (X2[i]*X2[i]);}
+    s = X2[0]*X2[0] + X2[1]*X2[1] + X2[2]*X2[2]; // To avoid a Coverity copy/past error
 
     if (s<1e-10)
     {
@@ -559,8 +560,9 @@ vpPose::poseLagrangeNonPlan(vpHomogeneousMatrix &cMo)
     for (i=0;i<3;i++) {s += (X1[i]*X2[i]);}
     for (i=0;i<3;i++)  {X2[i] -= (s*X1[i]);} /* X1^T X2 = 0	*/
 
-    s = 0.0;
-    for (i=0;i<3;i++)  {s += (X2[i]*X2[i]);}
+    //s = 0.0;
+    //for (i=0;i<3;i++)  {s += (X2[i]*X2[i]);}
+    s = X2[0]*X2[0] + X2[1]*X2[1] + X2[2]*X2[2]; // To avoid a Coverity copy/past error
 
     if (s<1e-10)
     {
diff --git a/src/computer-vision/pose-estimation/vpPoseLowe.cpp b/src/computer-vision/pose-estimation/vpPoseLowe.cpp
index 1f5c4f9a..e2ce296f 100644
--- a/src/computer-vision/pose-estimation/vpPoseLowe.cpp
+++ b/src/computer-vision/pose-estimation/vpPoseLowe.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
 *
-* $Id: vpPoseLowe.cpp 4276 2013-06-25 12:36:48Z fspindle $
+* $Id: vpPoseLowe.cpp 4649 2014-02-07 14:57:11Z fspindle $
 *
 * This file is part of the ViSP software.
-* Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+* Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 * 
 * This software is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
@@ -94,6 +94,8 @@ static double	XO[NBPTMAX],YO[NBPTMAX],ZO[NBPTMAX];
 #define MINI 0.001
 #define MINIMUM 0.000001
 
+void eval_function(int npt,double *xc,double *f);
+void	fcn (int m, int n, double *xc, double *fvecc, double *jac, int ldfjac, int iflag);
 
 void eval_function(int npt,double *xc,double *f)
 {
@@ -290,7 +292,6 @@ vpPose::poseLowe(vpHomogeneousMatrix & cMo)
 #if (DEBUG_LEVEL1)
   std::cout << "begin CCalcuvpPose::PoseLowe(...) " << std::endl;
 #endif
-  unsigned int i;
   int	n, m;	/* nombre d'elements dans la matrice jac */
   int	lwa;	/* taille du vecteur wa */
   int	ldfjac;	/* taille maximum d'une ligne de jac */
@@ -321,19 +322,18 @@ vpPose::poseLowe(vpHomogeneousMatrix & cMo)
   }
 
   vpPoint P ;
-  i=0;
+  unsigned int i_=0;
   for (std::list<vpPoint>::const_iterator it = listP.begin(); it != listP.end(); ++it)
   {
     P = *it;
-    XI[i] = P.get_x();//*cam.px + cam.xc ;
-    YI[i] = P.get_y() ;//;*cam.py + cam.yc ;
-    XO[i] = P.get_oX();
-    YO[i] = P.get_oY();
-    ZO[i] = P.get_oZ();
-    ++i;
+    XI[i_] = P.get_x();//*cam.px + cam.xc ;
+    YI[i_] = P.get_y() ;//;*cam.py + cam.yc ;
+    XO[i_] = P.get_oX();
+    YO[i_] = P.get_oY();
+    ZO[i_] = P.get_oZ();
+    ++i_;
   }
-  tst_lmder = lmder1 (&fcn, m, n, sol, f, &jac[0][0], ldfjac, tol, &info,
-    ipvt, lwa, wa);
+  tst_lmder = lmder1 (&fcn, m, n, sol, f, &jac[0][0], ldfjac, tol, &info, ipvt, lwa, wa);
   if (tst_lmder == -1)
   {
     std::cout <<  " in CCalculPose::PoseLowe(...) : " ;
@@ -341,10 +341,10 @@ vpPose::poseLowe(vpHomogeneousMatrix & cMo)
     // return FATAL_ERROR ;
   }
 
-  for (i = 0; i < 3; i++)
+  for (unsigned int i = 0; i < 3; i++)
     u[i] = sol[i + 3];
 
-  for (i=0;i<3;i++)
+  for (unsigned int i=0;i<3;i++)
   {
     cMo[i][3] = sol[i];
     u[i] = sol[i+3];
diff --git a/src/computer-vision/pose-estimation/vpPoseRansac.cpp b/src/computer-vision/pose-estimation/vpPoseRansac.cpp
index e6b6dec1..1d81f615 100644
--- a/src/computer-vision/pose-estimation/vpPoseRansac.cpp
+++ b/src/computer-vision/pose-estimation/vpPoseRansac.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPoseRansac.cpp 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpPoseRansac.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -77,9 +77,15 @@ void vpPose::poseRansac(vpHomogeneousMatrix & cMo)
   int nbTrials = 0;
   unsigned int nbMinRandom = 4 ;
   unsigned int nbInliers = 0;
+  double r, r_lagrange, r_dementhon;
 
   vpHomogeneousMatrix cMo_lagrange, cMo_dementhon;
-  double r, r_lagrange, r_dementhon;
+
+  if (size < 4) {
+    //vpERROR_TRACE("Not enough point to compute the pose");
+    throw(vpPoseException(vpPoseException::notInitializedError,
+                          "Not enough point to compute the pose")) ;
+  }
 
   bool foundSolution = false;
   
@@ -93,12 +99,12 @@ void vpPose::poseRansac(vpHomogeneousMatrix & cMo)
     vpPose poseMin ;
     for(unsigned int i = 0; i < nbMinRandom; i++)
     {
-      unsigned int r = (unsigned int)rand()%size;
-      while(usedPt[r] ) r = (unsigned int)rand()%size;
-      usedPt[r] = true;        
+      unsigned int r_ = (unsigned int)rand()%size;
+      while(usedPt[r_] ) r_ = (unsigned int)rand()%size;
+      usedPt[r_] = true;
       
       std::list<vpPoint>::const_iterator iter = listP.begin();
-      std::advance(iter, r);
+      std::advance(iter, r_);
       vpPoint pt = *iter;
       
       bool degenerate = false;
@@ -112,7 +118,7 @@ void vpPose::poseRansac(vpHomogeneousMatrix & cMo)
       }
       if(!degenerate){
         poseMin.addPoint(pt) ;
-        cur_randoms.push_back(r);
+        cur_randoms.push_back(r_);
       }
       else
         i--;
@@ -153,7 +159,7 @@ void vpPose::poseRansac(vpHomogeneousMatrix & cMo)
           for(unsigned int it_inlier_index = 0; it_inlier_index< cur_consensus.size(); it_inlier_index++){
             std::list<vpPoint>::const_iterator it_point = listP.begin();
             std::advance(it_point, cur_consensus[it_inlier_index]);
-            vpPoint pt = *it_point;
+            pt = *it_point;
 
             vpPoint ptdeg = *it;
             if( ((fabs(pt.get_x() - ptdeg.get_x()) < 1e-6) && (fabs(pt.get_y() - ptdeg.get_y()) < 1e-6))  ||
diff --git a/src/computer-vision/pose-estimation/vpPoseVirtualVisualServoing.cpp b/src/computer-vision/pose-estimation/vpPoseVirtualVisualServoing.cpp
index 6070859e..fa9477c0 100755
--- a/src/computer-vision/pose-estimation/vpPoseVirtualVisualServoing.cpp
+++ b/src/computer-vision/pose-estimation/vpPoseVirtualVisualServoing.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPoseVirtualVisualServoing.cpp 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpPoseVirtualVisualServoing.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -96,7 +96,7 @@ vpPose::poseVirtualVS(vpHomogeneousMatrix & cMo)
       residu_1 = r ;
 
       // Compute the interaction matrix and the error
-      unsigned int k =0 ;
+      k =0 ;
       for (std::list<vpPoint>::const_iterator it = lP.begin(); it != lP.end(); ++it)
       {
         P = *it;
@@ -186,14 +186,14 @@ vpPose::poseVirtualVSrobust(vpHomogeneousMatrix & cMo)
     std::list<vpPoint> lP ;
 
     // create sd
-    unsigned int k =0 ;
+    unsigned int k_ =0 ;
     for (std::list<vpPoint>::const_iterator it = listP.begin(); it != listP.end(); ++it)
     {
       P = *it;
-      sd[2*k] = P.get_x() ;
-      sd[2*k+1] = P.get_y() ;
+      sd[2*k_] = P.get_x() ;
+      sd[2*k_+1] = P.get_y() ;
       lP.push_back(P) ;
-      k ++;
+      k_ ++;
     }
     int iter = 0 ;
     res.resize(s.getRows()/2) ;
@@ -206,8 +206,7 @@ vpPose::poseVirtualVSrobust(vpHomogeneousMatrix & cMo)
       residu_1 = r ;
 
       // Compute the interaction matrix and the error
-      vpPoint P ;
-      k =0 ;
+      k_ =0 ;
       for (std::list<vpPoint>::const_iterator it = lP.begin(); it != lP.end(); ++it)
       {
         P = *it;
@@ -216,24 +215,24 @@ vpPose::poseVirtualVSrobust(vpHomogeneousMatrix & cMo)
         // perspective projection
         P.track(cMo) ;
 
-        double x = s[2*k] = P.get_x();  // point projected from cMo
-        double y = s[2*k+1] = P.get_y();
+        double x = s[2*k_] = P.get_x();  // point projected from cMo
+        double y = s[2*k_+1] = P.get_y();
         double Z = P.get_Z() ;
-        L[2*k][0] = -1/Z  ;
-        L[2*k][1] = 0 ;
-        L[2*k][2] = x/Z ;
-        L[2*k][3] = x*y ;
-        L[2*k][4] = -(1+x*x) ;
-        L[2*k][5] = y ;
-
-        L[2*k+1][0] = 0 ;
-        L[2*k+1][1]  = -1/Z ;
-        L[2*k+1][2] = y/Z ;
-        L[2*k+1][3] = 1+y*y ;
-        L[2*k+1][4] = -x*y ;
-        L[2*k+1][5] = -x ;
-
-        k ++;
+        L[2*k_][0] = -1/Z  ;
+        L[2*k_][1] = 0 ;
+        L[2*k_][2] = x/Z ;
+        L[2*k_][3] = x*y ;
+        L[2*k_][4] = -(1+x*x) ;
+        L[2*k_][5] = y ;
+
+        L[2*k_+1][0] = 0 ;
+        L[2*k_+1][1]  = -1/Z ;
+        L[2*k_+1][2] = y/Z ;
+        L[2*k_+1][3] = 1+y*y ;
+        L[2*k_+1][4] = -x*y ;
+        L[2*k_+1][5] = -x ;
+
+        k_ ++;
 
       }
       error = s - sd ;
diff --git a/src/data-structure/vpList.h b/src/data-structure/vpList.h
index 44baab2e..485acb0d 100644
--- a/src/data-structure/vpList.h
+++ b/src/data-structure/vpList.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpList.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpList.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -64,10 +64,11 @@
 template <class type>
 class vpListElement
 {
- public:
-  vpListElement<type> *prev; //<! pointer to the previous element in the list
-  vpListElement<type> *next; //<! pointer to the next element in the list
-  type val;             //<! value of the element
+  public:
+    vpListElement() : prev(NULL), next(NULL), val() {};
+    vpListElement<type> *prev; //<! pointer to the previous element in the list
+    vpListElement<type> *next; //<! pointer to the next element in the list
+    type val;             //<! value of the element
 } ;
 
 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
@@ -173,7 +174,7 @@ class vpList
   inline unsigned int nbElement(void);       // returns the number of items currently in the list
   inline unsigned int nbElements(void);       // returns the number of items currently in the list
 
-  void operator=(const vpList<type>& l);
+  vpList<type>& operator=(const vpList<type>& l);
   inline void operator+=(vpList<type>& l);
   inline void operator+=(const type& l);
 
@@ -222,7 +223,7 @@ void vpList<type>::init()
   \sa init()
  */
 template<class type>
-vpList<type>::vpList()
+vpList<type>::vpList() : nb(0), first(NULL), last(NULL), cur(NULL)
 {
   init() ;
 }
@@ -236,13 +237,10 @@ vpList<type>::vpList()
 template<class type>
 vpList<type>::~vpList()
 {
-
   kill() ;
 
-  if (first != NULL) delete first ;
-  if (last != NULL) delete last ;
-
-
+  /*if (first != NULL) */ delete first ;
+  /*if (last != NULL)  */ delete last ;
 }
 
 /*!
@@ -741,7 +739,7 @@ void vpList<type>::suppress(void)
  */
 
 template<class type>
-void vpList<type>::operator=(const vpList<type>& l)
+vpList<type>& vpList<type>::operator=(const vpList<type>& l)
 {
   type x ;
   vpListElement<type> *e ;
@@ -758,6 +756,8 @@ void vpList<type>::operator=(const vpList<type>& l)
 
   nb = l.nb ;
   cur = first->next ;
+
+  return *this;
 }
 
 /*!
@@ -806,6 +806,7 @@ void vpList<type>::operator += (const type& l)
 */
 template<class type>
 vpList<type>::vpList(const vpList<type>& l)
+ : nb(0), first(NULL), last(NULL), cur(NULL)
 {
   init() ;
   *this = l;
diff --git a/src/device/display/vpDisplay.cpp b/src/device/display/vpDisplay.cpp
index 50f501fe..a9926151 100644
--- a/src/device/display/vpDisplay.cpp
+++ b/src/device/display/vpDisplay.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplay.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vpDisplay.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,25 +58,28 @@
   Default constructor.
 */
 vpDisplay::vpDisplay()
+  : displayHasBeenInitialized(false), windowXPosition(0), windowYPosition(0), width(0), height(0), title_() {}
+
+/*!
+  Copy constructor.
+*/
+vpDisplay::vpDisplay(const vpDisplay &d)
+  : displayHasBeenInitialized(false), windowXPosition(0), windowYPosition(0), width(0), height(0), title_()
 {
-  displayHasBeenInitialized = false;
-  windowXPosition = 0;
-  windowYPosition = 0;
+  displayHasBeenInitialized = d.displayHasBeenInitialized;
+  windowXPosition = d.windowXPosition;
+  windowYPosition = d.windowYPosition;
 
-  title = new char[1024];
-  strcpy (title, "" );
+  width  = d.width;
+  height = d.height;
 }
+
 /*!
   Destructor that desallocates memory.
 */
 vpDisplay::~vpDisplay()
 {
   displayHasBeenInitialized = false ;
-
-  if (title != NULL) {
-    delete [] title;
-    title = NULL;
-  }
 }
 
 /*!
@@ -117,7 +120,7 @@ vpDisplay::setFont ( const vpImage<unsigned char> &I,
 */
 void
 vpDisplay::setTitle ( const vpImage<unsigned char> &I, 
-		      const char *windowtitle )
+                      const char *windowtitle )
 {
 
   try
diff --git a/src/device/display/vpDisplay.h b/src/device/display/vpDisplay.h
index e350bbc6..dd77098c 100644
--- a/src/device/display/vpDisplay.h
+++ b/src/device/display/vpDisplay.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplay.h 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vpDisplay.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -44,6 +44,8 @@
 #ifndef vpDisplay_h
 #define vpDisplay_h
 
+#include <string>
+
 // image
 #include <visp/vpImage.h>
 
@@ -89,11 +91,10 @@ int main()
   vpImage<unsigned char> I; // Grey level image
 
   // Read an image in PGM P5 format
-#ifdef UNIX
-  //vpImageIo::read(I, "/local/soft/ViSP/ViSP-images/Klimt/Klimt.pgm");
-  vpImageIo::read(I, "/tmp/Klimt.pgm");
-#elif WIN32
+#ifdef _WIN32
   vpImageIo::read(I, "C:/temp/ViSP-images/Klimt/Klimt.pgm");
+#else
+  vpImageIo::read(I, "/local/soft/ViSP/ViSP-images/Klimt/Klimt.pgm");
 #endif
 
   vpDisplay *d;
@@ -181,13 +182,9 @@ class VISP_EXPORT vpDisplay
   int windowXPosition ;
   //! display position
   int windowYPosition ;
-  //! display title
-  char *title ;
-  char *font;
   unsigned int width ;
   unsigned int height ;
-
-  vpDisplay() ;
+  std::string title_;
 
   /*!
     Display an arrow from image point \e ip1 to image point \e ip2.
@@ -316,6 +313,8 @@ class VISP_EXPORT vpDisplay
 				unsigned int thickness=1)=0 ;
 
  public:
+  vpDisplay() ;
+  vpDisplay(const vpDisplay& d) ;
   virtual ~vpDisplay();
 
   /*!
diff --git a/src/device/display/vpDisplayException.h b/src/device/display/vpDisplayException.h
index e3eb704f..7c626314 100644
--- a/src/device/display/vpDisplayException.h
+++ b/src/device/display/vpDisplayException.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplayException.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpDisplayException.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -73,12 +73,12 @@
  */
 class VISP_EXPORT vpDisplayException : public vpException
 {
-public:
-  /*!
+  public:
+    /*!
     \brief Lists the possible error than can be emmited while calling
     vpDisplay member
    */
-  enum errorDisplayCodeEnum
+    enum errorDisplayCodeEnum
     {
       notInitializedError,
       cannotOpenWindowError,
@@ -89,33 +89,26 @@ public:
       depthNotSupportedError
     } ;
 
-public:
-  vpDisplayException(const int code, const char * msg)
-   : vpException(code, msg)
+  public:
+    vpDisplayException(const int id,  const char* format, ...)
     {
+      this->code = id;
+      va_list args;
+      va_start(args, format);
+      setMessage(format, args);
+      va_end (args);
     }
-  
-  vpDisplayException (const int code, const std::string & msg)
-    : vpException(code, msg)
+
+    vpDisplayException (const int id, const std::string & msg)
+      : vpException(id, msg)
     {
     }
-  
-  vpDisplayException (const int code)
-    : vpException(code)
-  {
-  }
-
-};
-
-
-
 
+    vpDisplayException (const int id)
+      : vpException(id)
+    {
+    }
 
-#endif /* #ifndef __vpDisplayException_H */
-
+};
 
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+#endif
diff --git a/src/device/display/vpDisplayGTK.cpp b/src/device/display/vpDisplayGTK.cpp
index 239549e1..e365a0a3 100644
--- a/src/device/display/vpDisplayGTK.cpp
+++ b/src/device/display/vpDisplayGTK.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplayGTK.cpp 4174 2013-03-22 10:28:41Z fspindle $
+ * $Id: vpDisplayGTK.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -80,10 +80,17 @@
 vpDisplayGTK::vpDisplayGTK(vpImage<unsigned char> &I,
                            int x,
                            int y,
-                           const char *title) : vpDisplay()
+                           const char *title)
 {
+  widget = NULL;
+  vectgtk = NULL;
+  font = NULL;
+  colormap = NULL;
+  background = NULL;
+  gc = NULL;
+  nrow = ncol = 0;
   col = NULL;
-  widget = NULL ;
+
   init(I, x, y, title) ;
 }
 
@@ -99,10 +106,17 @@ vpDisplayGTK::vpDisplayGTK(vpImage<unsigned char> &I,
 vpDisplayGTK::vpDisplayGTK(vpImage<vpRGBa> &I,
                            int x,
                            int y,
-                           const char *title) : vpDisplay()
+                           const char *title)
 {
+  widget = NULL;
+  vectgtk = NULL;
+  font = NULL;
+  colormap = NULL;
+  background = NULL;
+  gc = NULL;
+  nrow = ncol = 0;
   col = NULL;
-  widget = NULL ;
+
   init(I, x, y, title) ;
 }
 
@@ -130,16 +144,24 @@ int main()
 }
   \endcode
 */
-vpDisplayGTK::vpDisplayGTK(int x, int y, const char *title) : vpDisplay()
+vpDisplayGTK::vpDisplayGTK(int x, int y, const char *title)
 {
+  widget = NULL;
+  vectgtk = NULL;
+  font = NULL;
+  colormap = NULL;
+  background = NULL;
+  gc = NULL;
+  nrow = ncol = 0;
+  col = NULL;
+
   windowXPosition = x ;
   windowYPosition = y ;
 
-  col = NULL;
-  widget = NULL ;
-
-  if (title != NULL)
-    strcpy(this->title, title) ;
+  if(title != NULL)
+    title_ = std::string(title);
+  else
+    title_ = std::string(" ");
 }
 
 /*!
@@ -163,8 +185,14 @@ int main()
 */
 vpDisplayGTK::vpDisplayGTK() : vpDisplay()
 {
+  widget = NULL;
+  vectgtk = NULL;
+  font = NULL;
+  colormap = NULL;
+  background = NULL;
+  gc = NULL;
+  nrow = ncol = 0;
   col = NULL;
-  widget = NULL ;
 }
 
 /*!
@@ -361,15 +389,20 @@ vpDisplayGTK::init(unsigned int width, unsigned int height,
   gdk_colormap_alloc_color(colormap,&darkGray,FALSE,TRUE);
   col[vpColor::id_darkGray] = &darkGray ;
 
-  /* Chargement des polices */
-  Police1 = gdk_font_load("-*-times-medium-r-normal-*-16-*-*-*-*-*-*-*");
-  Police2 = gdk_font_load("-*-courier-bold-r-normal-*-*-140-*-*-*-*-*-*");
+  // Try to load a default font
+  font = gdk_font_load("-*-times-medium-r-normal-*-16-*-*-*-*-*-*-*");
+  if (font == NULL)
+    font = gdk_font_load("-*-courier-bold-r-normal-*-*-140-*-*-*-*-*-*");
+  if (font == NULL)
+    font = gdk_font_load("-*-courier 10 pitch-medium-r-normal-*-16-*-*-*-*-*-*-*");
 
-  if (title != NULL)
-    strcpy(this->title, title) ;
+  if(title != NULL)
+    title_ = std::string(title);
+  else
+    title_ = std::string(" ");
 
   displayHasBeenInitialized = true ;
-  setTitle(this->title) ;
+  gdk_window_set_title(widget->window, title_.c_str());
 }
 
 
@@ -380,7 +413,7 @@ vpDisplayGTK::init(unsigned int width, unsigned int height,
   Set the font used to display a text in overlay. The display is
   performed using displayCharString().
 
-  \param font : The expected font name. 
+  \param fontname : The expected font name.
 
   \note Under UNIX, to know all the available fonts, use the
   "xlsfonts" binary in a terminal. You can also use the "xfontsel" binary.
@@ -388,9 +421,9 @@ vpDisplayGTK::init(unsigned int width, unsigned int height,
   \sa displayCharString()
 */
 void
-vpDisplayGTK::setFont(const char * /* font */)
+vpDisplayGTK::setFont(const char *fontname)
 {
-  vpERROR_TRACE("Not yet implemented" ) ;
+  font = gdk_font_load((const gchar*)fontname);
 }
 
 /*!
@@ -402,8 +435,11 @@ vpDisplayGTK::setTitle(const char *title)
 {
   if (displayHasBeenInitialized)
   {
-    if (title != NULL)
-      gdk_window_set_title(widget->window,(char *)title);
+    if(title != NULL)
+      title_ = std::string(title);
+    else
+      title_ = std::string(" ");
+    gdk_window_set_title(widget->window, title_.c_str());
   }
   else
   {
@@ -780,12 +816,13 @@ void vpDisplayGTK::displayCharString ( const vpImagePoint &ip,
       gdk_colormap_alloc_color(colormap,&gdkcolor,FALSE,TRUE);
       gdk_gc_set_foreground(gc, &gdkcolor);     
     }
-
-    gdk_draw_string(background, Police2, gc,
-		    vpMath::round( ip.get_u() ), 
-		    vpMath::round( ip.get_v() ),
-		    (const gchar *)text);
-
+    if (font != NULL)
+      gdk_draw_string(background, font, gc,
+                      vpMath::round( ip.get_u() ),
+                      vpMath::round( ip.get_v() ),
+                      (const gchar *)text);
+    else
+      std::cout << "Cannot draw string: no font is selected" << std::endl;
   }
   else
   {
diff --git a/src/device/display/vpDisplayGTK.h b/src/device/display/vpDisplayGTK.h
index 64d34aec..dc58ec2a 100644
--- a/src/device/display/vpDisplayGTK.h
+++ b/src/device/display/vpDisplayGTK.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplayGTK.h 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vpDisplayGTK.h 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -44,10 +44,10 @@
 #define vpDisplayGTK_h
 
 #include <visp/vpConfig.h>
-#include <visp/vpDisplay.h>
 #if ( defined(VISP_HAVE_GTK) )
 
 #include <visp/vpImage.h>
+#include <visp/vpDisplay.h>
 
 #include <gtk/gtk.h>
 #include <gdk/gdkrgb.h>
@@ -83,10 +83,10 @@ int main()
   vpImage<unsigned char> I; // Grey level image
 
   // Read an image in PGM P5 format
-#ifdef UNIX
-  vpImageIo::read(I, "/local/soft/ViSP/ViSP-images/Klimt/Klimt.pgm");
-#elif WIN32
+#ifdef _WIN32
   vpImageIo::read(I, "C:/temp/ViSP-images/Klimt/Klimt.pgm");
+#else
+  vpImageIo::read(I, "/local/soft/ViSP/ViSP-images/Klimt/Klimt.pgm");
 #endif
 
   vpDisplayGTK d; 
@@ -154,7 +154,7 @@ private:
 	   purple, lightGray, gray, darkGray;
   GdkColormap  *colormap;
 
-  GdkFont *Police1,*Police2;
+  GdkFont *font;
   guchar  *vectgtk;
   GdkColor **col ;
   int ncol, nrow ;
@@ -208,7 +208,7 @@ public:
 
 protected:
 
-  void setFont( const char *font );
+  void setFont( const char *fontname );
   void setTitle(const char *title) ;
   void setWindowPosition(int winx, int winy);
 
diff --git a/src/device/display/vpDisplayOpenCV.cpp b/src/device/display/vpDisplayOpenCV.cpp
index 1eafa603..d156fed4 100644
--- a/src/device/display/vpDisplayOpenCV.cpp
+++ b/src/device/display/vpDisplayOpenCV.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplayOpenCV.cpp 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpDisplayOpenCV.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -80,7 +80,7 @@
 vpDisplayOpenCV::vpDisplayOpenCV(vpImage<unsigned char> &I,
                                  int x,
                                  int y,
-                                 const char *title) : vpDisplay()
+                                 const char *title)
 {
   col = NULL;
   background = NULL;
@@ -100,7 +100,7 @@ vpDisplayOpenCV::vpDisplayOpenCV(vpImage<unsigned char> &I,
 vpDisplayOpenCV::vpDisplayOpenCV(vpImage<vpRGBa> &I,
                                  int x,
                                  int y,
-                                 const char *title) : vpDisplay()
+                                 const char *title)
 {
   col = NULL;
   background = NULL;
@@ -130,7 +130,7 @@ int main()
 }
   \endcode
 */
-vpDisplayOpenCV::vpDisplayOpenCV ( int x, int y, const char *title ) : vpDisplay()
+vpDisplayOpenCV::vpDisplayOpenCV ( int x, int y, const char *title )
 {
   col = NULL;
   background = NULL;
@@ -138,8 +138,20 @@ vpDisplayOpenCV::vpDisplayOpenCV ( int x, int y, const char *title ) : vpDisplay
   windowXPosition = x;
   windowYPosition = y;
 
-  if (title != NULL)
-    strcpy (this->title, title);
+  if(title != NULL)
+    title_ = std::string(title);
+  else
+    title_ = std::string(" ");
+
+  fontHeight = 10;
+  ncol = nrow = 0;
+  x_move = y_move = 0; move = false;
+  x_lbuttondown = y_lbuttondown = 0; lbuttondown = false;
+  x_mbuttondown = y_mbuttondown = 0; mbuttondown = false;
+  x_rbuttondown = y_rbuttondown = 0; rbuttondown = false;
+  x_lbuttonup = y_lbuttonup = 0; lbuttonup = false;
+  x_mbuttonup = y_mbuttonup = 0; mbuttonup = false;
+  x_rbuttonup = y_rbuttonup = 0; rbuttonup = false;
 }
 
 /*!
@@ -161,11 +173,20 @@ int main()
 }
   \endcode
 */
-vpDisplayOpenCV::vpDisplayOpenCV() : vpDisplay()
+vpDisplayOpenCV::vpDisplayOpenCV()
 {
   col = NULL;
   background = NULL;
   font = NULL;
+  fontHeight = 10;
+  ncol = nrow = 0;
+  x_move = y_move = 0; move = false;
+  x_lbuttondown = y_lbuttondown = 0; lbuttondown = false;
+  x_mbuttondown = y_mbuttondown = 0; mbuttondown = false;
+  x_rbuttondown = y_rbuttondown = 0; rbuttondown = false;
+  x_lbuttonup = y_lbuttonup = 0; lbuttonup = false;
+  x_mbuttonup = y_mbuttonup = 0; mbuttonup = false;
+  x_rbuttonup = y_rbuttonup = 0; rbuttonup = false;
 }
 
 /*!
@@ -233,7 +254,7 @@ vpDisplayOpenCV::init(vpImage<vpRGBa> &I,
 /*!
   Initialize the display size, position and title.
 
-  \param width, height : Width and height of the window.
+  \param w, h : Width and height of the window.
   \param x, y : The window is set at position x,y (column index, row index).
   \param title : Window title.
 
@@ -241,12 +262,12 @@ vpDisplayOpenCV::init(vpImage<vpRGBa> &I,
   with an available display device suach as Gtk, Cocoa, Carbon, Qt.
 */
 void
-vpDisplayOpenCV::init(unsigned int width, unsigned int height,
+vpDisplayOpenCV::init(unsigned int w, unsigned int h,
                       int x, int y,
                       const char *title)
 {
-  this->width  = width;
-  this->height = height;
+  this->width  = w;
+  this->height = h;
 
   if (x != -1)
     this->windowXPosition = x;
@@ -254,16 +275,18 @@ vpDisplayOpenCV::init(unsigned int width, unsigned int height,
     this->windowYPosition = y;
   int flags = CV_WINDOW_AUTOSIZE;
 
-  if (title != NULL)
-    strcpy(this->title, title) ;
+  if(title != NULL)
+    title_ = std::string(title);
+  else
+    title_ = std::string(" ");
 
   /* Create the window*/
-  if (cvNamedWindow( this->title, flags ) < 0) {
+  if (cvNamedWindow( this->title_.c_str(), flags ) < 0) {
     vpERROR_TRACE("OpenCV was not built with a display device");
     throw(vpDisplayException(vpDisplayException::notInitializedError,
                              "OpenCV was not built with a display device")) ;
   }
-  cvMoveWindow( this->title, this->windowXPosition, this->windowYPosition );
+  cvMoveWindow( this->title_.c_str(), this->windowXPosition, this->windowYPosition );
   move = false;
   lbuttondown = false;
   mbuttondown = false;
@@ -271,11 +294,11 @@ vpDisplayOpenCV::init(unsigned int width, unsigned int height,
   lbuttonup = false;
   mbuttonup = false;
   rbuttonup = false;
-  cvSetMouseCallback( this->title, on_mouse, this );
+  cvSetMouseCallback( this->title_.c_str(), on_mouse, this );
   /* Create background pixmap */
 //   background = cvCreateImage(cvSize((int)width,(int)height),IPL_DEPTH_8U,3);
 //
-//   cvShowImage( this->title,background);
+//   cvShowImage( this->title_.c_str(),background);
 
   col = new CvScalar[vpColor::id_unknown] ;
 
@@ -381,7 +404,7 @@ void vpDisplayOpenCV::setWindowPosition(int winx, int winy)
   if (displayHasBeenInitialized) {
     this->windowXPosition = winx;
     this->windowYPosition = winy;
-    cvMoveWindow( this->title, winx, winy );
+    cvMoveWindow( this->title_.c_str(), winx, winy );
   }
   else
   {
@@ -436,18 +459,17 @@ void vpDisplayOpenCV::displayImage(const vpImage<unsigned char> &I)
   
   \param iP : Top left corner of the region of interest
   
-  \param width : Width of the region of interest
+  \param w, h : Width and height of the region of interest
   
-  \param height : Height of the region of interest
-
   \sa init(), closeDisplay()
 */
-void vpDisplayOpenCV::displayImageROI ( const vpImage<unsigned char> &I,const vpImagePoint &iP, const unsigned int width, const unsigned int height )
+void vpDisplayOpenCV::displayImageROI ( const vpImage<unsigned char> &I,const vpImagePoint &iP,
+                                        const unsigned int w, const unsigned int h )
 {
   if (displayHasBeenInitialized)
   { 
     vpImage<unsigned char> Itemp;
-    vpImageTools::createSubImage(I,(unsigned int)iP.get_i(),(unsigned int)iP.get_j(),height,width,Itemp);
+    vpImageTools::createSubImage(I,(unsigned int)iP.get_i(),(unsigned int)iP.get_j(),h,w,Itemp);
     vpImage<vpRGBa> Ic;
     vpImageConvert::convert(Itemp,Ic);
     
@@ -474,15 +496,15 @@ void vpDisplayOpenCV::displayImageROI ( const vpImage<unsigned char> &I,const vp
     output = output + (int)(iP.get_i()*3*this->width+ iP.get_j()*3);
     
     unsigned int i = 0;
-    while (i < height)
+    while (i < h)
     {
       unsigned int j = 0;
-      while (j < width)
+      while (j < w)
       {
-	*(output+3*j) = *(input+j*3);
-	*(output+3*j+1) = *(input+j*3+1);
-	*(output+3*j+2) = *(input+j*3+2);
-	j++;
+        *(output+3*j) = *(input+j*3);
+        *(output+3*j+1) = *(input+j*3+1);
+        *(output+3*j+2) = *(input+j*3+2);
+        j++;
       }
       input = input + 3*iwidth;
       output = output + 3*this->width;
@@ -543,18 +565,17 @@ void vpDisplayOpenCV::displayImage(const vpImage<vpRGBa> &I)
   
   \param iP : Top left corner of the region of interest
   
-  \param width : Width of the region of interest
+  \param w, h : Width and height of the region of interest
   
-  \param height : Height of the region of interest
-
   \sa init(), closeDisplay()
 */
-void vpDisplayOpenCV::displayImageROI ( const vpImage<vpRGBa> &I,const vpImagePoint &iP, const unsigned int width, const unsigned int height )
+void vpDisplayOpenCV::displayImageROI ( const vpImage<vpRGBa> &I,const vpImagePoint &iP,
+                                        const unsigned int w, const unsigned int h )
 {
   if (displayHasBeenInitialized)
   { 
     vpImage<vpRGBa> Ic;
-    vpImageTools::createSubImage(I,(unsigned int)iP.get_i(),(unsigned int)iP.get_j(),height,width,Ic);
+    vpImageTools::createSubImage(I,(unsigned int)iP.get_i(),(unsigned int)iP.get_j(),h,w,Ic);
     
     CvSize size = cvSize((int)this->width, (int)this->height);
     int depth = 8;
@@ -579,15 +600,15 @@ void vpDisplayOpenCV::displayImageROI ( const vpImage<vpRGBa> &I,const vpImagePo
     output = output + (int)(iP.get_i()*3*this->width+ iP.get_j()*3);
     
     unsigned int i = 0;
-    while (i < height)
+    while (i < h)
     {
       unsigned int j = 0;
-      while (j < width)
+      while (j < w)
       {
-	*(output+3*j) = *(input+j*3);
-	*(output+3*j+1) = *(input+j*3+1);
-	*(output+3*j+2) = *(input+j*3+2);
-	j++;
+        *(output+3*j) = *(input+j*3);
+        *(output+3*j+1) = *(input+j*3+1);
+        *(output+3*j+2) = *(input+j*3+2);
+        j++;
       }
       input = input + 3*iwidth;
       output = output + 3*this->width;
@@ -635,7 +656,7 @@ void vpDisplayOpenCV::closeDisplay()
   }
 
   if (displayHasBeenInitialized) {
-    cvDestroyWindow( this->title );
+    cvDestroyWindow( this->title_.c_str() );
 
     displayHasBeenInitialized= false;
   }
@@ -651,7 +672,7 @@ void vpDisplayOpenCV::flushDisplay()
 {
   if (displayHasBeenInitialized)
   {
-    cvShowImage(this->title, background );
+    cvShowImage(this->title_.c_str(), background );
     cvWaitKey(5);
   }
   else
@@ -671,7 +692,7 @@ void vpDisplayOpenCV::flushDisplayROI(const vpImagePoint &/*iP*/, const unsigned
 {
   if (displayHasBeenInitialized)
   {
-    cvShowImage(this->title, background );
+    cvShowImage(this->title_.c_str(), background );
     cvWaitKey(5);
   }
   else
@@ -1035,7 +1056,7 @@ void vpDisplayOpenCV::displayPoint(const vpImagePoint &ip,
   width and \e height the rectangle size.
 
   \param topLeft : Top-left corner of the rectangle.
-  \param width,height : Rectangle size.
+  \param w,h : Rectangle size in terms of width and height.
   \param color : Rectangle color.
   \param fill : When set to true fill the rectangle.
 
@@ -1045,7 +1066,7 @@ void vpDisplayOpenCV::displayPoint(const vpImagePoint &ip,
 */
 void
 vpDisplayOpenCV::displayRectangle(const vpImagePoint &topLeft,
-                                  unsigned int width, unsigned int height,
+                                  unsigned int w, unsigned int h,
                                   const vpColor &color, bool fill,
                                   unsigned int thickness)
 {
@@ -1053,41 +1074,40 @@ vpDisplayOpenCV::displayRectangle(const vpImagePoint &topLeft,
   {
     if (fill == false) {
       if (color.id < vpColor::id_unknown) {
-	cvRectangle( background,
-		     cvPoint( vpMath::round( topLeft.get_u() ),
-			      vpMath::round( topLeft.get_v() ) ),
-		     cvPoint( vpMath::round( topLeft.get_u()+width ),
-			      vpMath::round( topLeft.get_v()+height ) ),
-		     col[color.id], (int)thickness);
+        cvRectangle( background,
+                     cvPoint( vpMath::round( topLeft.get_u() ),
+                              vpMath::round( topLeft.get_v() ) ),
+                     cvPoint( vpMath::round( topLeft.get_u()+w ),
+                              vpMath::round( topLeft.get_v()+h ) ),
+                     col[color.id], (int)thickness);
       }
       else {
-	cvcolor = CV_RGB(color.R, color.G, color.B) ;
-	cvRectangle( background,
-		     cvPoint( vpMath::round( topLeft.get_u() ),
-			      vpMath::round( topLeft.get_v() ) ),
-		     cvPoint( vpMath::round( topLeft.get_u()+width ),
-			      vpMath::round( topLeft.get_v()+height ) ),
-		     cvcolor, (int)thickness);
+        cvcolor = CV_RGB(color.R, color.G, color.B) ;
+        cvRectangle( background,
+                     cvPoint( vpMath::round( topLeft.get_u() ),
+                              vpMath::round( topLeft.get_v() ) ),
+                     cvPoint( vpMath::round( topLeft.get_u()+w ),
+                              vpMath::round( topLeft.get_v()+h ) ),
+                     cvcolor, (int)thickness);
       }
     }
     else {
       if (color.id < vpColor::id_unknown) {
-	cvRectangle( background,
-		     cvPoint( vpMath::round( topLeft.get_u() ),
-			      vpMath::round( topLeft.get_v() ) ),
-		     cvPoint( vpMath::round( topLeft.get_u()+width ),
-			      vpMath::round( topLeft.get_v()+height ) ),
-		     col[color.id], CV_FILLED);
+        cvRectangle( background,
+                     cvPoint( vpMath::round( topLeft.get_u() ),
+                              vpMath::round( topLeft.get_v() ) ),
+                     cvPoint( vpMath::round( topLeft.get_u()+w ),
+                              vpMath::round( topLeft.get_v()+h ) ),
+                     col[color.id], CV_FILLED);
       }
       else {
-	cvcolor = CV_RGB(color.R, color.G, color.B) ;
-	cvRectangle( background,
-		     cvPoint( vpMath::round( topLeft.get_u() ),
-			      vpMath::round( topLeft.get_v() ) ),
-		     cvPoint( vpMath::round( topLeft.get_u()+width ),
-			      vpMath::round( topLeft.get_v()+height ) ),
-		     cvcolor, CV_FILLED);
-
+        cvcolor = CV_RGB(color.R, color.G, color.B) ;
+        cvRectangle( background,
+                     cvPoint( vpMath::round( topLeft.get_u() ),
+                              vpMath::round( topLeft.get_v() ) ),
+                     cvPoint( vpMath::round( topLeft.get_u()+w ),
+                              vpMath::round( topLeft.get_v()+h ) ),
+                     cvcolor, CV_FILLED);
       }
     }
   }
diff --git a/src/device/display/vpDisplayOpenCV.h b/src/device/display/vpDisplayOpenCV.h
index d27158e8..cd435c99 100644
--- a/src/device/display/vpDisplayOpenCV.h
+++ b/src/device/display/vpDisplayOpenCV.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplayOpenCV.h 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vpDisplayOpenCV.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/display/vpDisplayX.cpp b/src/device/display/vpDisplayX.cpp
index 0fdebd9b..b828e86f 100644
--- a/src/device/display/vpDisplayX.cpp
+++ b/src/device/display/vpDisplayX.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplayX.cpp 4174 2013-03-22 10:28:41Z fspindle $
+ * $Id: vpDisplayX.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -79,8 +79,9 @@
 vpDisplayX::vpDisplayX ( vpImage<unsigned char> &I,
                          int x,
                          int y,
-                         const char *title ) : vpDisplay()
+                         const char *title )
 {
+  size = 0;
   x_color = NULL;
   init ( I, x, y, title ) ;
 }
@@ -98,8 +99,9 @@ vpDisplayX::vpDisplayX ( vpImage<unsigned char> &I,
 vpDisplayX::vpDisplayX ( vpImage<vpRGBa> &I,
                          int x,
                          int y,
-                         const char *title ) : vpDisplay()
+                         const char *title )
 {
+  size = 0;
   x_color = NULL;
   init ( I, x, y, title ) ;
 }
@@ -126,7 +128,7 @@ int main()
 }
   \endcode
 */
-vpDisplayX::vpDisplayX ( int x, int y, const char *title )  : vpDisplay()
+vpDisplayX::vpDisplayX ( int x, int y, const char *title )
 {
   windowXPosition = x ;
   windowYPosition = y ;
@@ -134,9 +136,13 @@ vpDisplayX::vpDisplayX ( int x, int y, const char *title )  : vpDisplay()
   this->x_color = NULL;
 
   if (title != NULL)
-    strcpy (this->title, title);
+    title_ = std::string(title);
+  else
+    title_ = std::string(" ");
 
   ximage_data_init = false;
+
+  size = 0;
 }
 
 /*!
@@ -158,10 +164,11 @@ int main()
 }
   \endcode
 */
-vpDisplayX::vpDisplayX() : vpDisplay()
+vpDisplayX::vpDisplayX()
 {
   x_color = NULL;
   ximage_data_init = false;
+  size = 0;
 }
 
 /*!
@@ -195,8 +202,10 @@ vpDisplayX::init ( vpImage<unsigned char> &I, int x, int y, const char *title )
   if (y != -1)
     windowYPosition = y ;
 
-  if ( title != NULL )
-    strcpy ( this->title, title ) ;
+  if (title != NULL)
+    title_ = std::string(title);
+  else
+    title_ = std::string(" ");
 
   // Positionnement de la fenetre dans l'�cran.
   if ( ( windowXPosition < 0 ) || ( windowYPosition < 0 ) )
@@ -568,7 +577,7 @@ vpDisplayX::init ( vpImage<unsigned char> &I, int x, int y, const char *title )
     }
   }
 
-  XSetStandardProperties ( display, window, this->title, this->title, None, 0, 0, &hints );
+  XSetStandardProperties ( display, window, this->title_.c_str(), this->title_.c_str(), None, 0, 0, &hints );
   XMapWindow ( display, window ) ;
   // Selection des evenements.
   XSelectInput ( display, window,
@@ -612,7 +621,9 @@ vpDisplayX::init ( vpImage<unsigned char> &I, int x, int y, const char *title )
 
   }
   displayHasBeenInitialized = true ;
-  setTitle ( this->title ) ;
+
+  XStoreName ( display, window, title_.c_str() );
+
   XSync ( display, 1 );
 
   I.display = this ;
@@ -642,10 +653,12 @@ vpDisplayX::init ( vpImage<vpRGBa> &I, int x, int y, const char *title )
     x_color= new unsigned long [vpColor::id_unknown]; 
   }
 
-  if ( title != NULL )
-    strcpy ( this->title, title ) ;
+  if (title != NULL)
+    title_ = std::string(title);
+  else
+    title_ = std::string(" ");
 
-  // Positionnement de la fenetre dans l'�cran.
+  // Positionnement de la fenetre dans l'ecran.
   if ( ( windowXPosition < 0 ) || ( windowYPosition < 0 ) )
   {
     hints.flags = 0;
@@ -1019,7 +1032,7 @@ vpDisplayX::init ( vpImage<vpRGBa> &I, int x, int y, const char *title )
     }
   }
 
-  XSetStandardProperties ( display, window, this->title, this->title, None, 0, 0, &hints );
+  XSetStandardProperties ( display, window, this->title_.c_str(), this->title_.c_str(), None, 0, 0, &hints );
   XMapWindow ( display, window ) ;
   // Selection des evenements.
   XSelectInput ( display, window,
@@ -1067,7 +1080,8 @@ vpDisplayX::init ( vpImage<vpRGBa> &I, int x, int y, const char *title )
   displayHasBeenInitialized = true ;
 
   XSync ( display, true );
-  setTitle ( this->title ) ;
+
+  XStoreName ( display, window, title_.c_str() );
 
   I.display = this ;
 }
@@ -1076,17 +1090,15 @@ vpDisplayX::init ( vpImage<vpRGBa> &I, int x, int y, const char *title )
 /*!
   Initialize the display size, position and title.
 
-  \param width, height : Width and height of the window.
+  \param w, h : Width and height of the window.
   \param x, y : The window is set at position x,y (column index, row index).
   \param title : Window title.
 */
-void vpDisplayX::init ( unsigned int width, unsigned int height,
-                        int x, int y, const char *title )
+void vpDisplayX::init ( unsigned int w, unsigned int h, int x, int y, const char *title )
 {
-
   /* setup X11 ------------------------------------------------------------- */
-  this->width  = width;
-  this->height = height;
+  this->width  = w;
+  this->height = h;
 
   XSizeHints  hints;
 
@@ -1106,8 +1118,10 @@ void vpDisplayX::init ( unsigned int width, unsigned int height,
     hints.y = windowYPosition;
   }
 
-  if ( title != NULL )
-    strcpy ( this->title, title ) ;
+  if (title != NULL)
+    title_ = std::string(title);
+  else
+    title_ = std::string(" ");
 
   if ( ( display = XOpenDisplay ( NULL ) ) == NULL )
   {
@@ -1489,7 +1503,7 @@ void vpDisplayX::init ( unsigned int width, unsigned int height,
     }
   }
 
-  XSetStandardProperties ( display, window, this->title, this->title, None, 0, 0, &hints );
+  XSetStandardProperties ( display, window, this->title_.c_str(), this->title_.c_str(), None, 0, 0, &hints );
   XMapWindow ( display, window ) ;
   // Selection des evenements.
   XSelectInput ( display, window,
@@ -1534,8 +1548,8 @@ void vpDisplayX::init ( unsigned int width, unsigned int height,
   displayHasBeenInitialized = true ;
 
   XSync ( display, true );
-  setTitle ( this->title ) ;
 
+  XStoreName ( display, window, title_.c_str() );
 }
 
 /*!  
@@ -1588,7 +1602,11 @@ vpDisplayX::setTitle ( const char *title )
 {
   if ( displayHasBeenInitialized )
   {
-    XStoreName ( display, window, title );
+    if(title != NULL)
+      title_ = std::string(title);
+    else
+      title_ = std::string(" ");
+    XStoreName ( display, window, title_.c_str() );
   }
   else
   {
@@ -1647,11 +1665,11 @@ void vpDisplayX::displayImage ( const vpImage<unsigned char> &I )
         // ROUGE, VERT, BLEU, JAUNE
         {
           unsigned int i = 0;
-          unsigned int size = width * height;
+          unsigned int size_ = width * height;
           unsigned char nivGris;
           unsigned char nivGrisMax = 255 - vpColor::id_unknown;
 
-          while ( i < size )
+          while ( i < size_ )
           {
             nivGris = src_8[i] ;
             if ( nivGris > nivGrisMax )
@@ -1694,10 +1712,10 @@ void vpDisplayX::displayImage ( const vpImage<unsigned char> &I )
       default:
       {
         unsigned char       *dst_32 = NULL;
-        unsigned int size = width * height ;
+        unsigned int size_ = width * height ;
         dst_32 = ( unsigned char* ) Ximage->data;
         unsigned char *bitmap = I.bitmap ;
-        unsigned char *n = I.bitmap + size;
+        unsigned char *n = I.bitmap + size_;
         //for (unsigned int i = 0; i < size; i++) // suppression de l'iterateur i
         while ( bitmap < n )
         {
@@ -1852,136 +1870,135 @@ void vpDisplayX::displayImage ( const unsigned char *I )
   
   \param iP : Top left corner of the region of interest
   
-  \param width : Width of the region of interest
+  \param w, h : Width and height of the region of interest
   
-  \param height : Height of the region of interest
-
   \sa init(), closeDisplay()
 */
-void vpDisplayX::displayImageROI ( const vpImage<unsigned char> &I,const vpImagePoint &iP, const unsigned int width, const unsigned int height )
+void vpDisplayX::displayImageROI ( const vpImage<unsigned char> &I,const vpImagePoint &iP,
+                                   const unsigned int w, const unsigned int h )
 {
   if ( displayHasBeenInitialized )
   {
     switch ( screen_depth )
     {
-      case 8:
+    case 8:
+    {
+      unsigned char       *src_8  = NULL;
+      unsigned char       *dst_8  = NULL;
+      src_8 = ( unsigned char * ) I.bitmap;
+      dst_8 = ( unsigned char * ) Ximage->data;
+      // Correction de l'image de facon a liberer les niveaux de gris
+      // ROUGE, VERT, BLEU, JAUNE
       {
-        unsigned char       *src_8  = NULL;
-        unsigned char       *dst_8  = NULL;
-        src_8 = ( unsigned char * ) I.bitmap;
-        dst_8 = ( unsigned char * ) Ximage->data;
-        // Correction de l'image de facon a liberer les niveaux de gris
-        // ROUGE, VERT, BLEU, JAUNE
+        //int size = width * height;
+        unsigned char nivGris;
+        unsigned char nivGrisMax = 255 - vpColor::id_unknown;
+
+        //unsigned int iwidth = I.getWidth();
+        unsigned int iwidth = I.getWidth();
+
+        src_8 = src_8 + (int)(iP.get_i()*iwidth+ iP.get_j());
+        dst_8 = dst_8 + (int)(iP.get_i()*this->height+ iP.get_j());
+
+        unsigned int i = 0;
+        while (i < h)
         {
-          //int size = width * height;
-          unsigned char nivGris;
-          unsigned char nivGrisMax = 255 - vpColor::id_unknown;
-	  
-	  //unsigned int iwidth = I.getWidth();
-	  unsigned int iwidth = I.getWidth();
-	  
-	  src_8 = src_8 + (int)(iP.get_i()*iwidth+ iP.get_j());
-	  dst_8 = dst_8 + (int)(iP.get_i()*this->height+ iP.get_j());
-	  
-	  unsigned int i = 0;
-	  while (i < height)
-	  {
-	    unsigned int j = 0;
-	    while (j < width)
-	    {
-	      nivGris = *(src_8+j);
-              if ( nivGris > nivGrisMax )
-                *(dst_8+j) = 255;
-              else
-                *(dst_8+j) = nivGris;
-	      j++;
-	    }
-	    src_8 = src_8 + iwidth;
-	    dst_8 = dst_8 + this->height;
-	    i++;
-	  }
+          unsigned int j = 0;
+          while (j < w)
+          {
+            nivGris = *(src_8+j);
+            if ( nivGris > nivGrisMax )
+              *(dst_8+j) = 255;
+            else
+              *(dst_8+j) = nivGris;
+            j++;
+          }
+          src_8 = src_8 + iwidth;
+          dst_8 = dst_8 + this->height;
+          i++;
         }
-
-        // Affichage de l'image dans la Pixmap.
-        XPutImage ( display, pixmap, context, Ximage, iP.get_u(), iP.get_v(), iP.get_u(), iP.get_v(), width, height );
-        XSetWindowBackgroundPixmap ( display, window, pixmap );
-//        XClearWindow ( display, window );
-//        XSync ( display,1 );
-        break;
       }
-      case 16:
-      {
-        unsigned short      *dst_16 = NULL;
-        dst_16 = ( unsigned short* ) Ximage->data;
-	unsigned char       *src_8  = NULL;
-	src_8 = ( unsigned char * ) I.bitmap;
-	
-	unsigned int iwidth = I.getWidth();
-	
-	src_8 = src_8 + (int)(iP.get_i()*iwidth+ iP.get_j());
-	dst_16 = dst_16 + (int)(iP.get_i()*this->height+ iP.get_j());
-	
-	unsigned int i = 0;
-	while (i < height)
-	{
-	  unsigned int j = 0;
-	  while (j < width)
-	  {
-	    *(dst_16+j) = ( unsigned short ) colortable[*(src_8+j)];
-	    j++;
-	  }
-	  src_8 = src_8 + iwidth;
-	  dst_16 = dst_16 + this->height;
-	  i++;
-	}
 
-        // Affichage de l'image dans la Pixmap.
-        XPutImage ( display, pixmap, context, Ximage, iP.get_u(), iP.get_v(), iP.get_u(), iP.get_v(), width, height );
-        XSetWindowBackgroundPixmap ( display, window, pixmap );
-//        XClearWindow ( display, window );
-//        XSync ( display,1 );
-        break;
-      }
+      // Affichage de l'image dans la Pixmap.
+      XPutImage ( display, pixmap, context, Ximage, iP.get_u(), iP.get_v(), iP.get_u(), iP.get_v(), w, h );
+      XSetWindowBackgroundPixmap ( display, window, pixmap );
+      //        XClearWindow ( display, window );
+      //        XSync ( display,1 );
+      break;
+    }
+    case 16:
+    {
+      unsigned short      *dst_16 = NULL;
+      dst_16 = ( unsigned short* ) Ximage->data;
+      unsigned char       *src_8  = NULL;
+      src_8 = ( unsigned char * ) I.bitmap;
 
-      case 24:
-      default:
+      unsigned int iwidth = I.getWidth();
+
+      src_8 = src_8 + (int)(iP.get_i()*iwidth+ iP.get_j());
+      dst_16 = dst_16 + (int)(iP.get_i()*this->height+ iP.get_j());
+
+      unsigned int i = 0;
+      while (i < h)
       {
-        unsigned char       *dst_32 = NULL;
-        //unsigned int size = width * height ;
-        dst_32 = ( unsigned char* ) Ximage->data;
-        unsigned char *src_8 = I.bitmap ;
-        //unsigned char *n = I.bitmap + size;
-	
-	unsigned int iwidth = I.getWidth();
-	
-	src_8 = src_8 + (int)(iP.get_i()*iwidth+ iP.get_j());
-	dst_32 = dst_32 + (int)(iP.get_i()*4*this->width+ iP.get_j()*4);
-	
-	unsigned int i = 0;
-	while (i < height)
-	{
-	  unsigned int j = 0;
-	  while (j < width)
-	  {
-	    unsigned char val = *(src_8+j);
-	    *(dst_32+4*j) = val;
-	    *(dst_32+4*j+1) = val;
-	    *(dst_32+4*j+2) = val;
-	    *(dst_32+4*j+3) = val;
-	    j++;
-	  }
-	  src_8 = src_8 + iwidth;
-	  dst_32 = dst_32 + 4*this->width;
-	  i++;
-	}
+        unsigned int j = 0;
+        while (j < w)
+        {
+          *(dst_16+j) = ( unsigned short ) colortable[*(src_8+j)];
+          j++;
+        }
+        src_8 = src_8 + iwidth;
+        dst_16 = dst_16 + this->height;
+        i++;
+      }
 
-        // Affichage de l'image dans la Pixmap.
-        XPutImage ( display, pixmap, context, Ximage, iP.get_u(), iP.get_v(), iP.get_u(), iP.get_v(), width, height );
-        XSetWindowBackgroundPixmap ( display, window, pixmap );
-//        XClearWindow ( display, window );
-//        XSync ( display,1 );
-        break;
+      // Affichage de l'image dans la Pixmap.
+      XPutImage ( display, pixmap, context, Ximage, iP.get_u(), iP.get_v(), iP.get_u(), iP.get_v(), w, h );
+      XSetWindowBackgroundPixmap ( display, window, pixmap );
+      //        XClearWindow ( display, window );
+      //        XSync ( display,1 );
+      break;
+    }
+
+    case 24:
+    default:
+    {
+      unsigned char       *dst_32 = NULL;
+      //unsigned int size = width * height ;
+      dst_32 = ( unsigned char* ) Ximage->data;
+      unsigned char *src_8 = I.bitmap ;
+      //unsigned char *n = I.bitmap + size;
+
+      unsigned int iwidth = I.getWidth();
+
+      src_8 = src_8 + (int)(iP.get_i()*iwidth+ iP.get_j());
+      dst_32 = dst_32 + (int)(iP.get_i()*4*this->width+ iP.get_j()*4);
+
+      unsigned int i = 0;
+      while (i < h)
+      {
+        unsigned int j = 0;
+        while (j < w)
+        {
+          unsigned char val = *(src_8+j);
+          *(dst_32+4*j) = val;
+          *(dst_32+4*j+1) = val;
+          *(dst_32+4*j+2) = val;
+          *(dst_32+4*j+3) = val;
+          j++;
+        }
+        src_8 = src_8 + iwidth;
+        dst_32 = dst_32 + 4*this->width;
+        i++;
       }
+
+      // Affichage de l'image dans la Pixmap.
+      XPutImage ( display, pixmap, context, Ximage, iP.get_u(), iP.get_v(), iP.get_u(), iP.get_v(), w, h );
+      XSetWindowBackgroundPixmap ( display, window, pixmap );
+      //        XClearWindow ( display, window );
+      //        XSync ( display,1 );
+      break;
+    }
     }
   }
   else
@@ -2004,74 +2021,72 @@ void vpDisplayX::displayImageROI ( const vpImage<unsigned char> &I,const vpImage
   
   \param iP : Top left corner of the region of interest
   
-  \param width : Width of the region of interest
+  \param w, h : Width and height of the region of interest
   
-  \param height : Height of the region of interest
-
   \sa init(), closeDisplay()
 */
-void vpDisplayX::displayImageROI ( const vpImage<vpRGBa> &I,const vpImagePoint &iP, const unsigned int width, const unsigned int height )
+void vpDisplayX::displayImageROI ( const vpImage<vpRGBa> &I,const vpImagePoint &iP,
+                                   const unsigned int w, const unsigned int h )
 {
-
   if ( displayHasBeenInitialized )
   {
 
     switch ( screen_depth )
     {
-      case 24:
-      case 32:
-      {
-        /*
+    case 24:
+    case 32:
+    {
+      /*
          * 32-bit source, 24/32-bit destination
          */
 
-        unsigned char       *dst_32 = NULL;
-        dst_32 = ( unsigned char* ) Ximage->data;
-	vpRGBa* src_32 = I.bitmap;
-	//unsigned int sizeI = I.getWidth() * I.getHeight();
-	
-	unsigned int iwidth = I.getWidth();
-	
-	src_32 = src_32 + (int)(iP.get_i()*iwidth+ iP.get_j());
-	dst_32 = dst_32 + (int)(iP.get_i()*4*this->width+ iP.get_j()*4);
-	
-	unsigned int i = 0;
-	while (i < height)
-	{
-	  unsigned int j = 0;
-	  while (j < width)
-	  {
+      unsigned char       *dst_32 = NULL;
+      dst_32 = ( unsigned char* ) Ximage->data;
+      vpRGBa* src_32 = I.bitmap;
+      //unsigned int sizeI = I.getWidth() * I.getHeight();
+
+      unsigned int iwidth = I.getWidth();
+
+      src_32 = src_32 + (int)(iP.get_i()*iwidth+ iP.get_j());
+      dst_32 = dst_32 + (int)(iP.get_i()*4*this->width+ iP.get_j()*4);
+
+      unsigned int i = 0;
+      while (i < h)
+      {
+        unsigned int j = 0;
+        while (j < w)
+        {
 #ifdef BIGENDIAN
-	    *(dst_32+4*j) = (src_32+j)->A;
-	    *(dst_32+4*j+1) = (src_32+j)->R;
-	    *(dst_32+4*j+2) = (src_32+j)->G;
-	    *(dst_32+4*j+3) = (src_32+j)->B;
+          *(dst_32+4*j) = (src_32+j)->A;
+          *(dst_32+4*j+1) = (src_32+j)->R;
+          *(dst_32+4*j+2) = (src_32+j)->G;
+          *(dst_32+4*j+3) = (src_32+j)->B;
 #else
-	    *(dst_32+4*j) = (src_32+j)->B;
-	    *(dst_32+4*j+1) = (src_32+j)->G;
-	    *(dst_32+4*j+2) = (src_32+j)->R;
-	    *(dst_32+4*j+3) = (src_32+j)->A;
+          *(dst_32+4*j) = (src_32+j)->B;
+          *(dst_32+4*j+1) = (src_32+j)->G;
+          *(dst_32+4*j+2) = (src_32+j)->R;
+          *(dst_32+4*j+3) = (src_32+j)->A;
 #endif
-	    j++;
-	  }
-	  src_32 = src_32 + iwidth;
-	  dst_32 = dst_32 + 4*this->width;
-	  i++;
-	}
-	
-        // Affichage de l'image dans la Pixmap.
-        XPutImage ( display, pixmap, context, Ximage, iP.get_u(), iP.get_v(), iP.get_u(), iP.get_v(), width, height );
-        XSetWindowBackgroundPixmap ( display, window, pixmap );
-//        XClearWindow ( display, window );
-//        XSync ( display,1 );
-        break;
-
+          j++;
+        }
+        src_32 = src_32 + iwidth;
+        dst_32 = dst_32 + 4*this->width;
+        i++;
       }
-      default:
-        vpERROR_TRACE ( "Unsupported depth (%d bpp) for color display",
-                        screen_depth ) ;
-        throw ( vpDisplayException ( vpDisplayException::depthNotSupportedError,
-                                     "Unsupported depth for color display" ) ) ;
+
+      // Affichage de l'image dans la Pixmap.
+      XPutImage ( display, pixmap, context, Ximage, iP.get_u(), iP.get_v(), iP.get_u(), iP.get_v(), w, h );
+      XSetWindowBackgroundPixmap ( display, window, pixmap );
+      //        XClearWindow ( display, window );
+      //        XSync ( display,1 );
+      break;
+
+    }
+    default:
+      vpERROR_TRACE ( "Unsupported depth (%d bpp) for color display",
+                      screen_depth ) ;
+      throw ( vpDisplayException ( vpDisplayException::depthNotSupportedError,
+                                   "Unsupported depth for color display" ) ) ;
     }
   }
   else
@@ -2141,15 +2156,14 @@ void vpDisplayX::flushDisplay()
   It's necessary to use this function to see the results of any drawing.
 
   \param iP : Top left corner of the region of interest
-  \param width  : Width of the region of interest
-  \param height  : Height of the region of interest
+  \param w,h  : Width and height of the region of interest
 */
-void vpDisplayX::flushDisplayROI(const vpImagePoint &iP, const unsigned int width, const unsigned int height)
+void vpDisplayX::flushDisplayROI(const vpImagePoint &iP, const unsigned int w, const unsigned int h)
 {
   if ( displayHasBeenInitialized )
   {
     //XClearWindow ( display, window );
-    XClearArea ( display, window,iP.get_u(),iP.get_v(),width,height,0 );
+    XClearArea ( display, window,iP.get_u(),iP.get_v(),w,h,0 );
     XFlush ( display );
   }
   else
@@ -2354,14 +2368,14 @@ void vpDisplayX::displayCircle ( const vpImagePoint &center,
 /*!
   Display a cross at the image point \e ip location.
   \param ip : Cross location.
-  \param size : Size (width and height) of the cross.
+  \param cross_size : Size (width and height) of the cross.
   \param color : Cross color.
   \param thickness : Thickness of the lines used to display the cross.
 */
 void vpDisplayX::displayCross ( const vpImagePoint &ip, 
-                                unsigned int size, 
-				const vpColor &color,
-				unsigned int thickness)
+                                unsigned int cross_size,
+                                const vpColor &color,
+                                unsigned int thickness)
 {
   if ( displayHasBeenInitialized )
   {
@@ -2371,16 +2385,16 @@ void vpDisplayX::displayCross ( const vpImagePoint &ip,
       double j = ip.get_j();
       vpImagePoint ip1, ip2;
 
-      ip1.set_i( i-size/2 ); 
+      ip1.set_i( i-cross_size/2 );
       ip1.set_j( j );
-      ip2.set_i( i+size/2 ); 
+      ip2.set_i( i+cross_size/2 );
       ip2.set_j( j );
       displayLine ( ip1, ip2, color, thickness ) ;
 
       ip1.set_i( i ); 
-      ip1.set_j( j-size/2 );
+      ip1.set_j( j-cross_size/2 );
       ip2.set_i( i ); 
-      ip2.set_j( j+size/2 );
+      ip2.set_j( j+cross_size/2 );
 
       displayLine ( ip1, ip2, color, thickness ) ;
     }
@@ -2524,7 +2538,7 @@ void vpDisplayX::displayPoint ( const vpImagePoint &ip,
   width and \e height the rectangle size.
 
   \param topLeft : Top-left corner of the rectangle.
-  \param width,height : Rectangle size.
+  \param w,h : Rectangle size in terms of width and height.
   \param color : Rectangle color.
   \param fill : When set to true fill the rectangle.
 
@@ -2534,9 +2548,9 @@ void vpDisplayX::displayPoint ( const vpImagePoint &ip,
 */
 void
 vpDisplayX::displayRectangle ( const vpImagePoint &topLeft,
-                               unsigned int width, unsigned int height,
+                               unsigned int w, unsigned int h,
                                const vpColor &color, bool fill,
-			       unsigned int thickness )
+                               unsigned int thickness )
 {
   if ( displayHasBeenInitialized )
   {
@@ -2558,14 +2572,14 @@ vpDisplayX::displayRectangle ( const vpImagePoint &topLeft,
       XDrawRectangle ( display, pixmap, context, 
 		       vpMath::round( topLeft.get_u() ),
 		       vpMath::round( topLeft.get_v() ),
-		       width-1, height-1 );
+           w-1, h-1 );
     }
     else
     {
       XFillRectangle ( display, pixmap, context, 
 		       vpMath::round( topLeft.get_u() ),
 		       vpMath::round( topLeft.get_v() ),
-		       width, height );
+           w, h );
     }
   }
   else
@@ -2592,7 +2606,7 @@ void
 vpDisplayX::displayRectangle ( const vpImagePoint &topLeft,
                                const vpImagePoint &bottomRight,
                                const vpColor &color, bool fill,
-			       unsigned int thickness )
+                               unsigned int thickness )
 {
   if ( displayHasBeenInitialized )
   {
@@ -2611,22 +2625,22 @@ vpDisplayX::displayRectangle ( const vpImagePoint &topLeft,
     XSetLineAttributes ( display, context, thickness,
                          LineSolid, CapButt, JoinBevel );
 
-    unsigned int width  = (unsigned int)vpMath::round( std::fabs(bottomRight.get_u() - topLeft.get_u()) );
-    unsigned int height = (unsigned int)vpMath::round( std::fabs(bottomRight.get_v() - topLeft.get_v()) );
+    unsigned int w  = (unsigned int)vpMath::round( std::fabs(bottomRight.get_u() - topLeft.get_u()) );
+    unsigned int h = (unsigned int)vpMath::round( std::fabs(bottomRight.get_v() - topLeft.get_v()) );
     if ( fill == false )
     {    
 
       XDrawRectangle ( display, pixmap, context, 
                        vpMath::round( topLeft.get_u() < bottomRight.get_u() ? topLeft.get_u() : bottomRight.get_u() ),
                        vpMath::round( topLeft.get_v() < bottomRight.get_v() ? topLeft.get_v() : bottomRight.get_v() ),
-                       width > 0 ? width-1 : 1, height > 0 ? height : 1 );
+                       w > 0 ? w-1 : 1, h > 0 ? h : 1 );
     }
     else
     {  
       XFillRectangle ( display, pixmap, context, 
                        vpMath::round( topLeft.get_u() < bottomRight.get_u() ? topLeft.get_u() : bottomRight.get_u() ),
                        vpMath::round( topLeft.get_v() < bottomRight.get_v() ? topLeft.get_v() : bottomRight.get_v() ),
-                       width, height );
+                       w, h );
     }
   }
   else
@@ -3024,46 +3038,46 @@ void vpDisplayX::getImage ( vpImage<vpRGBa> &I )
 */
 unsigned int vpDisplayX::getScreenDepth()
 {
-  Display *_display;
-  int  screen;
+  Display *display_;
+  int  screen_;
   unsigned int  depth;
 
-  if ( ( _display = XOpenDisplay ( NULL ) ) == NULL )
+  if ( ( display_ = XOpenDisplay ( NULL ) ) == NULL )
   {
     vpERROR_TRACE ( "Can't connect display on server %s.",
                     XDisplayName ( NULL ) );
     throw ( vpDisplayException ( vpDisplayException::connexionError,
                                  "Can't connect display on server." ) ) ;
   }
-  screen = DefaultScreen ( _display );
-  depth  = (unsigned int)DefaultDepth ( _display, screen );
+  screen_ = DefaultScreen ( display_ );
+  depth  = (unsigned int)DefaultDepth ( display_, screen_ );
 
-  XCloseDisplay ( _display );
+  XCloseDisplay ( display_ );
 
   return ( depth );
 }
 
 /*!
   Gets the window size.
-  \param width, height : Size of the display.
+  \param w, h : Size of the display in therms of width and height.
  */
-void vpDisplayX::getScreenSize ( unsigned int &width, unsigned int &height )
+void vpDisplayX::getScreenSize ( unsigned int &w, unsigned int &h )
 {
-  Display *_display;
-  int  screen;
+  Display *display_;
+  int  screen_;
 
-  if ( ( _display = XOpenDisplay ( NULL ) ) == NULL )
+  if ( ( display_ = XOpenDisplay ( NULL ) ) == NULL )
   {
     vpERROR_TRACE ( "Can't connect display on server %s.",
                     XDisplayName ( NULL ) );
     throw ( vpDisplayException ( vpDisplayException::connexionError,
                                  "Can't connect display on server." ) ) ;
   }
-  screen = DefaultScreen ( _display );
-  width = (unsigned int)DisplayWidth ( _display, screen );
-  height = (unsigned int)DisplayHeight ( _display, screen );
+  screen_ = DefaultScreen ( display_ );
+  w = (unsigned int)DisplayWidth ( display_, screen_ );
+  h = (unsigned int)DisplayHeight ( display_, screen_ );
 
-  XCloseDisplay ( _display );
+  XCloseDisplay ( display_ );
 }
 /*!
 
diff --git a/src/device/display/vpDisplayX.h b/src/device/display/vpDisplayX.h
index d7b9c940..dd82a4f0 100644
--- a/src/device/display/vpDisplayX.h
+++ b/src/device/display/vpDisplayX.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplayX.h 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vpDisplayX.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -174,23 +174,22 @@ public:
   vpDisplayX() ;
   vpDisplayX(int winx, int winy, const char *title=NULL) ;
   vpDisplayX(vpImage<unsigned char> &I, int winx=-1, int winy=-1,
-	     const char *title=NULL) ;
+             const char *title=NULL) ;
   vpDisplayX(vpImage<vpRGBa> &I, int winx=-1, int winy=-1,
-	     const char *title=NULL) ;
-
+             const char *title=NULL) ;
 
   virtual ~vpDisplayX() ;
 
   void init(vpImage<unsigned char> &I,
-	    int winx=-1, int winy=-1,
-	    const char *title=NULL)  ;
+            int winx=-1, int winy=-1,
+            const char *title=NULL)  ;
   void init(vpImage<vpRGBa> &I,
-	   int winx=-1, int winy=-1,
-	   const char *title=NULL)  ;
+            int winx=-1, int winy=-1,
+            const char *title=NULL)  ;
 
   void init(unsigned int width, unsigned int height,
-	    int winx=-1, int winy=-1 ,
-	    const char *title=NULL) ;
+            int winx=-1, int winy=-1 ,
+            const char *title=NULL) ;
   
   unsigned int getScreenDepth();
   void getScreenSize(unsigned int &width, unsigned int &height);
diff --git a/src/device/display/vpMouseButton.h b/src/device/display/vpMouseButton.h
index 138cbd74..081dd21e 100755
--- a/src/device/display/vpMouseButton.h
+++ b/src/device/display/vpMouseButton.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMouseButton.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMouseButton.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/display/windows/vpD3DRenderer.cpp b/src/device/display/windows/vpD3DRenderer.cpp
index 6af10a3a..5ec259de 100755
--- a/src/device/display/windows/vpD3DRenderer.cpp
+++ b/src/device/display/windows/vpD3DRenderer.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpD3DRenderer.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpD3DRenderer.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -41,7 +41,7 @@
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
 
 #include <visp/vpConfig.h>
-#if ( defined(WIN32) & defined(VISP_HAVE_D3D9) )
+#if ( defined(_WIN32) & defined(VISP_HAVE_D3D9) )
 
 #include <visp/vpD3DRenderer.h>
 #include <visp/vpColor.h>
diff --git a/src/device/display/windows/vpD3DRenderer.h b/src/device/display/windows/vpD3DRenderer.h
index 7edb7a90..5231be19 100755
--- a/src/device/display/windows/vpD3DRenderer.h
+++ b/src/device/display/windows/vpD3DRenderer.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpD3DRenderer.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpD3DRenderer.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/display/windows/vpDisplayD3D.cpp b/src/device/display/windows/vpDisplayD3D.cpp
index a3a11d39..36d4f0c2 100755
--- a/src/device/display/windows/vpDisplayD3D.cpp
+++ b/src/device/display/windows/vpDisplayD3D.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplayD3D.cpp 4174 2013-03-22 10:28:41Z fspindle $
+ * $Id: vpDisplayD3D.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -45,7 +45,7 @@
 */ 
 
 #include <visp/vpConfig.h>
-#if ( defined(WIN32) & defined(VISP_HAVE_D3D9) ) 
+#if ( defined(_WIN32) & defined(VISP_HAVE_D3D9) )
 
 #include <visp/vpDisplayD3D.h>
 #include <visp/vpD3DRenderer.h>
@@ -60,17 +60,19 @@ vpDisplayD3D::vpDisplayD3D(): vpDisplayWin32(new vpD3DRenderer()){}
   \brief Constructor : Initialize a display.
 
   \param winx, winy The window is set at position x,y (column index, row index).
-  \param _title  Window's title.
+  \param title  Window's title.
 
 */
-vpDisplayD3D::vpDisplayD3D(int winx, int winy, const char *_title)
+vpDisplayD3D::vpDisplayD3D(int winx, int winy, const char *title)
   : vpDisplayWin32(new vpD3DRenderer())
 {
   windowXPosition = winx;
   windowYPosition = winy;
 
-  if (_title != NULL)
-    strcpy(this->title, _title);
+  if (title != NULL)
+    title_ = std::string(title);
+  else
+    title_ = std::string(" ");
 }
 
 /*!
@@ -80,15 +82,15 @@ vpDisplayD3D::vpDisplayD3D(int winx, int winy, const char *_title)
 
 \param I : Image to be displayed (note that image has to be initialized).
 \param winx, winy : The window is set at position x,y (column index, row index).
-\param _title : Window's title.
+\param title : Window's title.
 
 */
 vpDisplayD3D::vpDisplayD3D(vpImage<vpRGBa> &I,
 			   int winx, int winy,
-			   const char *_title)
+         const char *title)
   : vpDisplayWin32(new vpD3DRenderer())
 {
-  init(I,winx,winy,_title);
+  init(I,winx,winy,title);
 }
 
 /*!
@@ -98,15 +100,15 @@ vpDisplayD3D::vpDisplayD3D(vpImage<vpRGBa> &I,
 
 \param I  Image to be displayed (note that image has to be initialized).
 \param winx, winy The window is set at position x,y (column index, row index).
-\param _title  Window's title.
+\param title  Window's title.
 
 */
 vpDisplayD3D::vpDisplayD3D(vpImage<unsigned char> &I,
 			   int winx, int winy,
-			   const char *_title)
+         const char *title)
   : vpDisplayWin32(new vpD3DRenderer())
 {
-  init(I,winx,winy,_title);
+  init(I,winx,winy,title);
 }
 
 /*!
diff --git a/src/device/display/windows/vpDisplayD3D.h b/src/device/display/windows/vpDisplayD3D.h
index b11f7ef5..dd71b666 100755
--- a/src/device/display/windows/vpDisplayD3D.h
+++ b/src/device/display/windows/vpDisplayD3D.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplayD3D.h 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vpDisplayD3D.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -110,9 +110,9 @@ class VISP_EXPORT vpDisplayD3D : public vpDisplayWin32
 {
 public:
   vpDisplayD3D();
-  vpDisplayD3D(int winx, int winy, const char *_title=NULL);
-  vpDisplayD3D(vpImage<vpRGBa> &I,int winx=-1, int winy=-1, const char *_title=NULL);
-  vpDisplayD3D(vpImage<unsigned char> &I, int winx=-1, int winy=-1, const char *_title=NULL);
+  vpDisplayD3D(int winx, int winy, const char *title=NULL);
+  vpDisplayD3D(vpImage<vpRGBa> &I,int winx=-1, int winy=-1, const char *title=NULL);
+  vpDisplayD3D(vpImage<unsigned char> &I, int winx=-1, int winy=-1, const char *title=NULL);
 
   virtual ~vpDisplayD3D();
   
diff --git a/src/device/display/windows/vpDisplayGDI.cpp b/src/device/display/windows/vpDisplayGDI.cpp
index 01303c07..69721105 100755
--- a/src/device/display/windows/vpDisplayGDI.cpp
+++ b/src/device/display/windows/vpDisplayGDI.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplayGDI.cpp 4174 2013-03-22 10:28:41Z fspindle $
+ * $Id: vpDisplayGDI.cpp 4642 2014-02-05 12:42:30Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -61,17 +61,19 @@ vpDisplayGDI::vpDisplayGDI(): vpDisplayWin32(new vpGDIRenderer()){}
   \brief Constructor : Initialize a display.
 
   \param winx, winy The window is set at position x,y (column index, row index).
-  \param _title  Window's title.
+  \param title  Window's title.
 
 */
-vpDisplayGDI::vpDisplayGDI(int winx, int winy, const char *_title)
+vpDisplayGDI::vpDisplayGDI(int winx, int winy, const char *title)
   : vpDisplayWin32(new vpGDIRenderer())
 {
   windowXPosition = winx;
   windowYPosition = winy;
 
-  if (_title != NULL)
-    strcpy(this->title, _title);
+  if (title != NULL)
+    title_ = std::string(title);
+  else
+    title_ = std::string(" ");
 }
 
 /*!
@@ -81,15 +83,15 @@ vpDisplayGDI::vpDisplayGDI(int winx, int winy, const char *_title)
 
   \param I : image to be displayed (note that image has to be initialized).
   \param winx, winy The window is set at position x,y (column index, row index).
-  \param _title  Window's title.
+  \param title  Window's title.
 
 */
 vpDisplayGDI::vpDisplayGDI(vpImage<vpRGBa> &I,
 			   int winx, int winy,
-			   const char *_title)
+         const char *title)
   : vpDisplayWin32(new vpGDIRenderer())
 {
-  init(I,winx,winy,_title);
+  init(I,winx,winy,title);
 }
 
 /*!
@@ -99,15 +101,15 @@ vpDisplayGDI::vpDisplayGDI(vpImage<vpRGBa> &I,
 
   \param I Image to be displayed (note that image has to be initialized).
   \param winx, winy The window is set at position x,y (column index, row index).
-  \param _title  Window's title.
+  \param title  Window's title.
 
 */
 vpDisplayGDI::vpDisplayGDI(vpImage<unsigned char> &I,
 			   int winx, int winy,
-			   const char *_title)
+         const char *title)
   : vpDisplayWin32(new vpGDIRenderer())
 {
-  init(I,winx,winy,_title);
+  init(I,winx,winy,title);
 }
 
 /*!
diff --git a/src/device/display/windows/vpDisplayGDI.h b/src/device/display/windows/vpDisplayGDI.h
index 7b0f3f41..ffe1b310 100755
--- a/src/device/display/windows/vpDisplayGDI.h
+++ b/src/device/display/windows/vpDisplayGDI.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplayGDI.h 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vpDisplayGDI.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -71,11 +71,10 @@ int main()
   vpImage<unsigned char> I; // Grey level image
 
   // Read an image in PGM P5 format
-#ifdef UNIX
-  //vpImageIo::read(I, "/local/soft/ViSP/ViSP-images/Klimt/Klimt.pgm");
-  vpImageIo::read(I, "/tmp/Klimt.pgm");
-#elif WIN32
+#ifdef _WIN32
   vpImageIo::read(I, "C:/temp/ViSP-images/Klimt/Klimt.pgm");
+#else
+  vpImageIo::read(I, "/local/soft/ViSP/ViSP-images/Klimt/Klimt.pgm");
 #endif
 
   vpDisplayGDI d;
@@ -134,9 +133,9 @@ class VISP_EXPORT vpDisplayGDI : public vpDisplayWin32
 {
 public:
   vpDisplayGDI();
-  vpDisplayGDI(int winx, int winy, const char *_title=NULL);
-  vpDisplayGDI(vpImage<vpRGBa> &I,int winx=-1, int winy=-1, const char *_title=NULL);
-  vpDisplayGDI(vpImage<unsigned char> &I, int winx=-1, int winy=-1, const char *_title=NULL);
+  vpDisplayGDI(int winx, int winy, const char *title=NULL);
+  vpDisplayGDI(vpImage<vpRGBa> &I,int winx=-1, int winy=-1, const char *title=NULL);
+  vpDisplayGDI(vpImage<unsigned char> &I, int winx=-1, int winy=-1, const char *title=NULL);
 
   virtual ~vpDisplayGDI();
 };
diff --git a/src/device/display/windows/vpDisplayWin32.cpp b/src/device/display/windows/vpDisplayWin32.cpp
index bb88afde..fdcbd93b 100755
--- a/src/device/display/windows/vpDisplayWin32.cpp
+++ b/src/device/display/windows/vpDisplayWin32.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplayWin32.cpp 4174 2013-03-22 10:28:41Z fspindle $
+ * $Id: vpDisplayWin32.cpp 4661 2014-02-10 19:34:58Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,7 +58,7 @@ const int vpDisplayWin32::MAX_INIT_DELAY  = 5000;
 void vpCreateWindow(threadParam * param)
 {
   //char* title = param->title;
-  (param->vpDisp)->window.initWindow(param->title, param->x, param->y,
+  (param->vpDisp)->window.initWindow(param->title.c_str(), param->x, param->y,
 				     param->w, param->h);
   delete param;
 }
@@ -150,7 +150,9 @@ void vpDisplayWin32::init(unsigned int width, unsigned int height,
 			  const char *title)
 {
   if (title != NULL)
-    strcpy(this->title, title) ;
+    title_ = std::string(title);
+  else
+    title_ = std::string(" ");
 
   if (x != -1)
     windowXPosition = x;
@@ -164,7 +166,7 @@ void vpDisplayWin32::init(unsigned int width, unsigned int height,
   param->w = width;
   param->h = height;
   param->vpDisp = this;
-  param->title = this->title;
+  param->title = this->title_;
 
   //creates the window in a separate thread
   hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)vpCreateWindow,
@@ -706,7 +708,7 @@ void vpDisplayWin32::flushDisplayROI(const vpImagePoint &iP, const unsigned int
 
   //sends a message to the window
 #  if 1 // new version FS
-  WPARAM wp = (hr1.left_top << sizeof(unsigned short)) + hr1.right_bottom;
+  WPARAM wp = (WPARAM)(hr1.left_top << sizeof(unsigned short)) + hr1.right_bottom;
   LPARAM lp = (hr2.left_top << sizeof(unsigned short)) + hr2.right_bottom;
 #  else // produce warnings with MinGW
   WPARAM wp=*((WPARAM*)(&hr1));
diff --git a/src/device/display/windows/vpDisplayWin32.h b/src/device/display/windows/vpDisplayWin32.h
index b8d9bf0b..3e6e6800 100755
--- a/src/device/display/windows/vpDisplayWin32.h
+++ b/src/device/display/windows/vpDisplayWin32.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplayWin32.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpDisplayWin32.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -46,6 +46,8 @@
 #ifndef vpDisplayWin32_hh
 #define vpDisplayWin32_hh
 
+#include <string>
+
 #include <visp/vpImage.h>
 #include <visp/vpDisplay.h>
 #include <windows.h>
@@ -76,7 +78,7 @@ struct threadParam
   unsigned int h;
 
   //! Title of the window.
-  char * title;
+  std::string title;
 };
 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
 
diff --git a/src/device/display/windows/vpGDIRenderer.cpp b/src/device/display/windows/vpGDIRenderer.cpp
index 468ef7f1..5a6e2f19 100755
--- a/src/device/display/windows/vpGDIRenderer.cpp
+++ b/src/device/display/windows/vpGDIRenderer.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpGDIRenderer.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpGDIRenderer.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/display/windows/vpGDIRenderer.h b/src/device/display/windows/vpGDIRenderer.h
index 9db81833..ca9631dd 100755
--- a/src/device/display/windows/vpGDIRenderer.h
+++ b/src/device/display/windows/vpGDIRenderer.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpGDIRenderer.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpGDIRenderer.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/display/windows/vpWin32API.cpp b/src/device/display/windows/vpWin32API.cpp
index a1342300..c396c28f 100644
--- a/src/device/display/windows/vpWin32API.cpp
+++ b/src/device/display/windows/vpWin32API.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpWin32API.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpWin32API.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/display/windows/vpWin32API.h b/src/device/display/windows/vpWin32API.h
index e5fcb86b..9dfd7575 100644
--- a/src/device/display/windows/vpWin32API.h
+++ b/src/device/display/windows/vpWin32API.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpWin32API.h 4058 2013-01-06 14:59:58Z fspindle $
+ * $Id: vpWin32API.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/display/windows/vpWin32Renderer.h b/src/device/display/windows/vpWin32Renderer.h
index 2dee8936..5602b09f 100755
--- a/src/device/display/windows/vpWin32Renderer.h
+++ b/src/device/display/windows/vpWin32Renderer.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpWin32Renderer.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpWin32Renderer.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/display/windows/vpWin32Window.cpp b/src/device/display/windows/vpWin32Window.cpp
index f6ea76b8..e72a3b64 100755
--- a/src/device/display/windows/vpWin32Window.cpp
+++ b/src/device/display/windows/vpWin32Window.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpWin32Window.cpp 4304 2013-07-04 14:29:24Z fspindle $
+ * $Id: vpWin32Window.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/display/windows/vpWin32Window.h b/src/device/display/windows/vpWin32Window.h
index 7a609e3f..a3ea37c4 100755
--- a/src/device/display/windows/vpWin32Window.h
+++ b/src/device/display/windows/vpWin32Window.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpWin32Window.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpWin32Window.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/framegrabber/1394/vp1394CMUGrabber.cpp b/src/device/framegrabber/1394/vp1394CMUGrabber.cpp
index 2529bccf..0e7dac0a 100644
--- a/src/device/framegrabber/1394/vp1394CMUGrabber.cpp
+++ b/src/device/framegrabber/1394/vp1394CMUGrabber.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vp1394CMUGrabber.cpp 4204 2013-04-10 16:51:46Z fspindle $
+ * $Id: vp1394CMUGrabber.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/framegrabber/1394/vp1394CMUGrabber.h b/src/device/framegrabber/1394/vp1394CMUGrabber.h
index cb45e1d2..c34a837f 100644
--- a/src/device/framegrabber/1394/vp1394CMUGrabber.h
+++ b/src/device/framegrabber/1394/vp1394CMUGrabber.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vp1394CMUGrabber.h 4216 2013-04-17 09:06:18Z fspindle $
+ * $Id: vp1394CMUGrabber.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/framegrabber/1394/vp1394Grabber.cpp b/src/device/framegrabber/1394/vp1394Grabber.cpp
deleted file mode 100644
index 7312e954..00000000
--- a/src/device/framegrabber/1394/vp1394Grabber.cpp
+++ /dev/null
@@ -1,2394 +0,0 @@
-/****************************************************************************
- *
- * $Id: vp1394Grabber.cpp 4056 2013-01-05 13:04:42Z fspindle $
- *
- * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
- * 
- * This software is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * ("GPL") version 2 as published by the Free Software Foundation.
- * See the file LICENSE.txt at the root directory of this source
- * distribution for additional information about the GNU GPL.
- *
- * For using ViSP with software that can not be combined with the GNU
- * GPL, please contact INRIA about acquiring a ViSP Professional 
- * Edition License.
- *
- * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
- * 
- * This software was developed at:
- * INRIA Rennes - Bretagne Atlantique
- * Campus Universitaire de Beaulieu
- * 35042 Rennes Cedex
- * France
- * http://www.irisa.fr/lagadic
- *
- * If you have questions regarding the use of this file, please contact
- * INRIA at visp@inria.fr
- * 
- * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- *
- * Description:
- * Firewire cameras video capture.
- *
- * Authors:
- * Fabien Spindler
- *
- *****************************************************************************/
-
-
-/*!
-  \file vp1394Grabber.cpp
-  \brief member functions for firewire cameras
-  \ingroup libdevice
-*/
-#include <iostream>
-
-#include <visp/vpConfig.h>
-
-#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
-#if defined(VISP_HAVE_DC1394_1)
-
-
-
-#include <visp/vp1394Grabber.h>
-#include <visp/vpFrameGrabberException.h>
-#include <visp/vpImageIo.h>
-#include <visp/vpImageConvert.h>
-
-const int vp1394Grabber::DROP_FRAMES = 1; /*!< With libdc1394-1.0.0 or more rencent versions, DROP_FRAMES has to be set to 1 in order to suppress the latency. */
-const int vp1394Grabber::NUM_BUFFERS = 8; /*!< Number of buffers */
-const int vp1394Grabber::MAX_PORTS   = 4; /*!< Maximal number of ports */
-const int vp1394Grabber::MAX_CAMERAS = 8; /*!< Maximal number of cameras */
-
-const char * vp1394Grabber::strFormats[NUM_FORMATS]= {
-  "Format_0",
-  "Format_1",
-  "Format_2",
-  "Reserved", // 3 reserved formats
-  "Reserved",
-  "Reserved",
-  "Format_6",
-  "Format_7"
-};
-
-const char * vp1394Grabber::strModesInFormat0[NUM_FORMAT0_MODES]= {
-  "Format_0, Mode_0: 160x120 YUV (4:4:4)",
-  "Format_0, Mode_1: 320x240 YUV (4:2:2)",
-  "Format_0, Mode_2: 640x480 YUV (4:1:1)",
-  "Format_0, Mode_3: 640x480 YUV (4:2:2)",
-  "Format_0, Mode_4: 640x480 RGB 24bpp",
-  "Format_0, Mode_5: 640x480 Mono 8bpp",
-  "Format_0, Mode_6: 640x480 Mono 16bpp"
-};
-
-const char * vp1394Grabber::strModesInFormat1[NUM_FORMAT1_MODES]= {
-  "Format_1, Mode_0: 800x600 YUV (4:2:2)",
-  "Format_1, Mode_1: 800x600 RGB 24bpp",
-  "Format_1, Mode_2: 800x600 Mono 8bpp",
-  "Format_1, Mode_3: 1024x768 YUV (4:2:2)",
-  "Format_1, Mode_4: 1024x768 RGB 24bpp",
-  "Format_1, Mode_5: 1024x768 Mono 8bpp",
-  "Format_1, Mode_6: 800x600 Mono 16bpp",
-  "Format_1, Mode_7: 1024x768 Mono 16bpp"
-};
-
-const char * vp1394Grabber::strModesInFormat2[NUM_FORMAT2_MODES]= {
-  "Format_2, Mode_0: 1280x960 YUV (4:2:2)",
-  "Format_2, Mode_1: 1280x960 RGB 24bpp",
-  "Format_2, Mode_2: 1280x960 Mono 8bpp",
-  "Format_2, Mode_3: 1600x1200 YUV (4:2:2)",
-  "Format_2, Mode_4: 1600x1200 RGB 24bpp",
-  "Format_2, Mode_5: 1600x1200 Mono 8bpp",
-  "Format_2, Mode_6: 1280x960 Mono 16bpp",
-  "Format_2, Mode_7: 1600x1200 Mono 16bpp"
-};
-
-const char * vp1394Grabber::strModesInFormat6[NUM_FORMAT6_MODES]= {
-  "Format6, Mode_0: EXIT (not supported)"
-};
-
-const char * vp1394Grabber::strModesInFormat7[NUM_MODE_FORMAT7]= {
-  "Format_7, Mode_0",
-  "Format_7, Mode_1",
-  "Format_7, Mode_2",
-  "Format_7, Mode_3",
-  "Format_7, Mode_4",
-  "Format_7, Mode_5",
-  "Format_7, Mode_6",
-  "Format_7, Mode_7"
-};
-
-const char * vp1394Grabber::strColorsInFormat7[NUM_COLOR_FORMAT7] = {
-  "Format_7 Color, Mono 8bpp",
-  "Format_7 Color, YUV 4:1:1",
-  "Format_7 Color, YUV 4:2:2",
-  "Format_7 Color, YUV 4:4:4",
-  "Format_7 Color, RGB 24bpp",
-  "Format_7 Color, Mono 16bpp",
-  "Format_7 Color, RGB 48bpp"
-};
-
-const char * vp1394Grabber::strFramerates[NUM_FRAMERATES] = {
-  "1.875 Hz",
-  "3.75 Hz",
-  "7.5 Hz",
-  "15 Hz",
-  "30 Hz",
-  "60 Hz"
-};
-
-/*!
-  \deprecated This class is deprecated. You shoud use
-  vp1394TwoGrabber class instead.
-
-  Default constructor. Using this constructor, you have explicitly to call
-  open().
-
-  By default:
-  - the camera is the first found on the bus,
-
-  Current camera settings can be changed using setCamera(),
-  setFormat(), setMode() or setFramerate() after a call to open(). The
-  list of supported formats, modes and framerates is available using
-  respectively getFormatSupported(), getModeSupported(),
-  getFramerateSupported().
-
-  \code
-  vpImage<unsigned char> I;
-  vp1394Grabber g;
-  g.open(I);
-  g.setFormat(FORMAT_VGA_NONCOMPRESSED); // Format_0
-  g.setMode(MODE_640x480_MONO); // Mode 5
-  g.setFramerate(FRAMERATE_15); //  15 fps
-  \endcode
-
-  \sa open(), setCamera(), setFormat(), setMode(), setFramerate()
-
-*/
-vp1394Grabber::vp1394Grabber( )
-{
-  sprintf(device_name, "/dev/video1394/0");
-
-  // allocations
-  handles      = new raw1394handle_t      [vp1394Grabber::MAX_CAMERAS];
-  cameras      = new dc1394_cameracapture [vp1394Grabber::MAX_CAMERAS];
-  cam_count    = new int [vp1394Grabber::MAX_CAMERAS];
-  pformat      = new int [vp1394Grabber::MAX_CAMERAS];
-  pmode        = new int [vp1394Grabber::MAX_CAMERAS];
-  pframerate   = new int [vp1394Grabber::MAX_CAMERAS];
-  _width       = new int [vp1394Grabber::MAX_CAMERAS];
-  _height      = new int [vp1394Grabber::MAX_CAMERAS];
-  image_format = new vp1394ImageFormatType [vp1394Grabber::MAX_CAMERAS];
-
-  // Camera settings initialisation
-  for (int i=0; i < vp1394Grabber::MAX_CAMERAS; i ++) {
-    pformat[i]    = 0;
-    pmode[i]      = 0;
-    pframerate[i] = 0;
-  }
-  verbose = false;
-
-  iso_transmission_started = false;
-  handle_created           = false;
-  camera_found             = false;
-  dma_started              = false;
-  num_cameras              = 0;
-  camera                   = 0; // the first camera on the bus
-
-  // Image settings
-  for (int i=0; i < vp1394Grabber::MAX_CAMERAS; i ++) {
-    _width[i]        = 0;
-    _height[i]       = 0;
-    image_format[i] = RGB;
-  }
-
-  init = false ;
-}
-
-/*!
-
-  \deprecated This class is deprecated. You shoud use
-  vp1394TwoGrabber class instead.
-
-  Constructor which initialize the grabber and call the open() method.
-
-  \param I : Image data structure (8 bits image)
-
-  By default:
-  - the camera is the first found on the bus,
-
-  Current camera settings can be changed using setCamera(),
-  setFormat(), setMode() or setFramerate() after a call to open(). The
-  list of supported formats, modes and framerates is available using
-  respectively getFormatSupported(), getModeSupported(),
-  getFramerateSupported().
-
-  \code
-  vpImage<unsigned char> I;
-  vp1394Grabber g(I);
-  g.setFormat(FORMAT_VGA_NONCOMPRESSED); // Format_0
-  g.setMode(MODE_640x480_MONO); // Mode 5
-  g.setFramerate(FRAMERATE_15); //  15 fps
-  \endcode
-
-  \sa setCamera(), setFormat(), setMode(), setFramerate()
-*/
-vp1394Grabber::vp1394Grabber(vpImage<unsigned char> &I)
-{
-  sprintf(device_name, "/dev/video1394/0");
-
-  // allocations
-  handles      = new raw1394handle_t      [vp1394Grabber::MAX_CAMERAS];
-  cameras      = new dc1394_cameracapture [vp1394Grabber::MAX_CAMERAS];
-  cam_count    = new int [vp1394Grabber::MAX_CAMERAS];
-  pformat      = new int [vp1394Grabber::MAX_CAMERAS];
-  pmode        = new int [vp1394Grabber::MAX_CAMERAS];
-  pframerate   = new int [vp1394Grabber::MAX_CAMERAS];
-  _width       = new int [vp1394Grabber::MAX_CAMERAS];
-  _height      = new int [vp1394Grabber::MAX_CAMERAS];
-  image_format = new vp1394ImageFormatType [vp1394Grabber::MAX_CAMERAS];
-
-  // Camera settings
-  for (int i=0; i < vp1394Grabber::MAX_CAMERAS; i ++) {
-    pformat[i]    = 0;
-    pmode[i]      = 0;
-    pframerate[i] = 0;
-  }
-  verbose = false;
-
-  iso_transmission_started = false;
-  handle_created           = false;
-  camera_found             = false;
-  num_cameras              = 0;
-  camera                   = 0; // the first camera on the bus
-
-  // Image settings
-  for (int i=0; i < vp1394Grabber::MAX_CAMERAS; i ++) {
-    _width[i]        = 0;
-    _height[i]       = 0;
-    image_format[i] = RGB;
-  }
-
-  init = false ;
-
-  open ( I ) ;
-}
-
-/*!
-
-  Destructor.
-
-  Stops the iso transmission and close the device.
-
-  \sa close()
-
-*/
-vp1394Grabber::~vp1394Grabber()
-{
-  close();
-}
-
-/*!
-
-  If multiples cameras are connected on the bus, select the camero to dial
-  with.
-
-  \param camera : A camera. The value must be comprised between 0 (the first
-  camera) and the number of cameras found on the bus and returned by
-  getNumCameras(). If two cameras are connected on the bus, setting \e camera
-  to one allows to communicate with the second one.
-
-  \exception vpFrameGrabberException::settingError : If the required camera is
-  not reachable.
-
-  \warning Has to be called after open() to be sure that a camera is detected.
-
-  \code
-  vpImage<unsigned char> I;
-  vp1394Grabber g;
-  g.open(I);
-  unsigned int num_cameras; // Number of cameras on the bus
-  g.getNumCameras(num_cameras);
-  g.setCamera(num_cameras-1); // To dial with the last camera on the bus
-  g.acquire(I); // I contains the frame captured by the last camera on the bus
-  \endcode
-
-  \sa setFormat(), setMode(), setFramerate(), open(), getNumCameras()
-
-*/
-void
-vp1394Grabber::setCamera(unsigned int camera)
-{
-  if (camera >= num_cameras) {
-    close();
-    vpERROR_TRACE("The required camera is not present");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "The required camera is not present") );
-  }
-
-  this->camera = camera;
-
-}
-/*!
-
-  Get the active camera on the bus.
-
-  \param camera : A camera id. The value is comprised between 0 (the first
-  camera) and the number of cameras found on the bus and returned by
-  getNumCameras().
-
-  \sa setCamera(), getNumCameras()
-
-*/
-void
-vp1394Grabber::getCamera(unsigned int &camera)
-{
-  camera = this->camera;
-
-}
-/*!
-
-  Set the capture format for a given camera on the bus. To set the format for a
-  specific camera, call setCamera() before.
-
-  \param format : The camera image format. The current camera format is given by
-  getFormat(). The camera supported formats are given by
-  getFormatSupported(). The allowed values given in
-  libdc1394/dc1394_control.h are:
-  - FORMAT_VGA_NONCOMPRESSED for the Format_0
-  - FORMAT_SVGA_NONCOMPRESSED_1 for the Format_1
-  - FORMAT_SVGA_NONCOMPRESSED_2 for the Format_2
-  - FORMAT_STILL_IMAGE for the Format_6
-  - FORMAT_SCALABLE_IMAGE_SIZE for the  Format_7
-
-  \warning The requested format is sent to the camera only after a call to
-  close(). Depending on the format and the camera mode, image size can differ.
-
-  \exception vpFrameGrabberException::settingError : If the required camera is
-  not present.
-
-  \warning Has to be called after open() to be sure that a camera is detected.
-
-  \sa setMode(), setFramerate(), open(), setCamera(), getNumCameras()
-
-*/
-void
-vp1394Grabber::setFormat(int format)
-{
-  if (iso_transmission_started  == true) {
-
-    stopIsoTransmission();
-
-    for (unsigned int i=0; i < num_cameras; i++)
-      dc1394_dma_unlisten( handles[i], &cameras[i] );
-    iso_transmission_started = false;
-  }
-
-  this->pformat[camera] = format;
-
-  setup();
-  startIsoTransmission();
-}
-
-/*!
-
-  Query the actual capture format of a given camera. The camera supported
-  formats are given by getFormatSupported().
-
-  \warning Before requerying the actual format a handle must
-  be created by calling open(), and a camera must be connected.
-
-  \param format : The camera capture format (see file
-  libdc1394/dc1394_control.h), either :
-
-  - FORMAT_VGA_NONCOMPRESSED for the Format_0
-  - FORMAT_SVGA_NONCOMPRESSED_1 for the Format_1
-  - FORMAT_SVGA_NONCOMPRESSED_2 for the Format_2
-  - FORMAT_STILL_IMAGE for the Format_6
-  - FORMAT_SCALABLE_IMAGE_SIZE for the  Format_7
-
-  \exception vpFrameGrabberException::settingError : If the required camera is
-  not present or if an error occurs.
-
-  \sa setFormat(), getFormatSupported(), open(), setCamera(), getNumCameras()
-
-*/
-void
-vp1394Grabber::getFormat(int & format)
-{
-  if (handle_created == false) {
-    close();
-    vpERROR_TRACE("To set the shutter the handle must be created");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter the handle must be created") );
-  }
-  if (camera_found == false) {
-    close();
-    vpERROR_TRACE("To set the shutter a camera must be connected");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter a camera must be connected") );
-  }
-
-  if(dc1394_get_camera_misc_info(handles[camera],
-				 cameras[camera].node,
-				 &miscinfo) !=DC1394_SUCCESS) {
-    vpERROR_TRACE("Unable to get misc info");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Unable to get misc info") );
-  }
-
-  format = miscinfo.format;
-}
-
-/*!
-
-  Query the available camera image formats.
-
-  \warning Before requerying supported formats a handle must be created by
-  calling open(), and a camera must be connected.
-
-  \param formats : The list of supported camera image formats.
-
-  \return The number of supported camera image formats, 0 if an error occurs.
-
-  \exception vpFrameGrabberException::settingError : If the required camera is
-  not present or if an error occurs.
-
-  \sa getModeSupported(), getFramerateSupported(), open(),
-  getFormat(), setCamera()
-
-*/
-int
-vp1394Grabber::getFormatSupported(vpList<int> & formats)
-{
-  int nb = 0; // Number of supported formats
-
-  // Refresh the list of supported formats
-  formats.kill();
-
-  if (handle_created == false) {
-    close();
-    vpERROR_TRACE("To set the shutter the handle must be created");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter the handle must be created") );
-  }
-  if (camera_found == false) {
-    close();
-    vpERROR_TRACE("To set the shutter a camera must be connected");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter a camera must be connected") );
-  }
-
-  quadlet_t value;
-  if (dc1394_query_supported_formats(handles[camera],
-				     cameras[camera].node,
-				     &value) != DC1394_SUCCESS) {
-    vpERROR_TRACE("Could not query supported formats");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Could not query supported formats") );
-  }
-
-  if (value & (0x1<<31)) {
-    formats.addRight(FORMAT_VGA_NONCOMPRESSED);
-    nb ++;
-  }
-  if (value & (0x1<<30)) {
-    formats.addRight(FORMAT_SVGA_NONCOMPRESSED_1);
-    nb ++;
-  }
-  if (value & (0x1<<29)) {
-    formats.addRight(FORMAT_SVGA_NONCOMPRESSED_2);
-    nb ++;
-  }
-  if (value & (0x1<<25)) {
-    formats.addRight(FORMAT_STILL_IMAGE);
-    nb ++;
-  }
-  if (value & (0x1<<24)) {
-    formats.addRight(FORMAT_SCALABLE_IMAGE_SIZE);
-    nb ++;
-  }
-
-  return nb;
-}
-
-/*!
-
-  Set the camera capture mode for a given camera on the bus.
-
-  \param mode : The camera capture mode. The current camera mode is
-  given by getMode(). The camera supported modes are given by
-  getSupportedModes(). The allowed values are given in
-  libdc1394/dc1394_control.h file:
-
-  - Allowed mode for Format 0: MODE_160x120_YUV444 = 64, MODE_320x240_YUV422, MODE_640x480_YUV411, MODE_640x480_YUV422, MODE_640x480_RGB, MODE_640x480_MONO, MODE_640x480_MONO16
-
-  - Allowed modes for Format 1: MODE_800x600_YUV422 = 96, MODE_800x600_RGB, MODE_800x600_MONO, MODE_1024x768_YUV422, MODE_1024x768_RGB, MODE_1024x768_MONO, MODE_800x600_MONO16, MODE_1024x768_MONO16
-
-  - Allowed modes for Format 2: MODE_1280x960_YUV422 = 128, MODE_1280x960_RGB, MODE_1280x960_MONO, MODE_1600x1200_YUV422, MODE_1600x1200_RGB, MODE_1600x1200_MONO, MODE_1280x960_MONO16, MODE_1600x1200_MONO16
-
-  - Allowed modes for Format 6: MODE_EXIF= 256
-
-  - Allowed modes for Format 7: MODE_FORMAT7_0= 288, MODE_FORMAT7_1, MODE_FORMAT7_2, MODE_FORMAT7_3, MODE_FORMAT7_4, MODE_FORMAT7_5, MODE_FORMAT7_6, MODE_FORMAT7_7
-
-
-  All these modes are not supported by your camera. The camera supported modes
-  are given by getModeSupported().
-
-  \warning The requested format is sent to the camera only after a call to
-  close(). Depending on the format and the camera mode, image size can differ.
-
-  \exception vpFrameGrabberException::settingError : If the required camera is
-  not present.
-
-  \warning Has to be called after open() to be sure that a camera is detected.
-
-  \sa setFormat(), setFramerate(), open(), getNumCameras(), setCamera()
-
-*/
-void
-vp1394Grabber::setMode(int mode)
-{
-  if (iso_transmission_started  == true) {
-
-    stopIsoTransmission();
-
-    for (unsigned int i=0; i < num_cameras; i++)
-      dc1394_dma_unlisten( handles[i], &cameras[i] );
-    iso_transmission_started = false;
-  }
-
-  this->pmode[camera] = mode;
-
-  setup();
-  startIsoTransmission();
-}
-
-/*!
-
-  Query the actual capture mode of a given camera. Given a format, all
-  the camera supported modes are given by getModeSupported().
-
-  \warning Before requerying the actual mode a handle must
-  be created by calling open(), and a camera must be connected.
-
-  \param mode : The camera capture mode.
-
-  \exception vpFrameGrabberException::settingError : If the required camera is
-  not present.
-
-  \sa setMode(), getModeSupported(), open(), setCamera()
-
-*/
-void
-vp1394Grabber::getMode(int & mode)
-{
-
-  if (handle_created == false) {
-    close();
-    vpERROR_TRACE("To set the shutter the handle must be created");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter the handle must be created") );
-  }
-  if (camera_found == false) {
-    close();
-    vpERROR_TRACE("To set the shutter a camera must be connected");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter a camera must be connected") );
-  }
-  if(dc1394_get_camera_misc_info(handles[camera],
-				 cameras[camera].node,
-				 &miscinfo) !=DC1394_SUCCESS) {
-    vpERROR_TRACE("Unable to get misc info");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Unable to get misc info") );
-  }
-
-  mode = miscinfo.mode;
-}
-
-/*!
-
-  Query the available camera modes for the given format.
-
-  \warning Before requerying supported modes for a given format a handle must
-  be created by calling open(), and a camera must be connected.
-
-  \param format : Camera image format. Values for format are parts of the list
-  (see file libdc1394/dc1394_control.h):
-
-  - FORMAT_VGA_NONCOMPRESSED = 384 for the Format_0
-  - FORMAT_SVGA_NONCOMPRESSED_1 for the Format_1
-  - FORMAT_SVGA_NONCOMPRESSED_2 for the Format_2
-  - FORMAT_STILL_IMAGE = 390 for the Format_6
-  - FORMAT_SCALABLE_IMAGE_SIZE for the Format_7
-
-  \param modes : The list of supported camera modes.
-
-  \return The number of supported camera modes, 0 if an error occurs.
-
-  \exception vpFrameGrabberException::settingError : If the required camera is
-  not present.
-
-  \sa getMode(), getFramerateSupported(), open(), setCamera()
-*/
-int
-vp1394Grabber::getModeSupported(int format, vpList<int> & modes)
-{
-  int nb = 0; // Number of supported modes
-
-  // Refresh the list of supported modes
-  modes.kill();
-
-  if (handle_created == false) {
-    close();
-    vpERROR_TRACE("To set the shutter the handle must be created");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter the handle must be created") );
-  }
-  if (camera_found == false) {
-    close();
-    vpERROR_TRACE("To set the shutter a camera must be connected");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter a camera must be connected") );
-  }
-
-  quadlet_t value;
-  if (dc1394_query_supported_modes(handles[camera],
-				   cameras[camera].node,
-				   format, &value) != DC1394_SUCCESS) {
-    vpERROR_TRACE("Could not query supported modes for format %d\n", format);
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Could not query supported mode") );
-  }
-
-  switch (format) {
-  case FORMAT_VGA_NONCOMPRESSED:
-    for (int m = MODE_FORMAT0_MIN; m <= MODE_FORMAT0_MAX; m ++) {
-      if (value & (0x1<<(31-(m-MODE_FORMAT0_MIN)))) {
-	modes.addRight(m);
-	nb ++;
-      }
-    }
-    break;
-
-  case FORMAT_SVGA_NONCOMPRESSED_1:
-    for (int m = MODE_FORMAT1_MIN; m <= MODE_FORMAT1_MAX; m ++) {
-      if (value & (0x1<<(31-(m-MODE_FORMAT1_MIN)))) {
-	modes.addRight(m);
-	nb ++;
-      }
-    }
-    break;
-
-  case FORMAT_SVGA_NONCOMPRESSED_2:
-    for (int m = MODE_FORMAT2_MIN; m <= MODE_FORMAT2_MAX; m ++) {
-      if (value & (0x1<<(31-(m-MODE_FORMAT2_MIN)))) {
-	modes.addRight(m);
-	nb ++;
-      }
-    }
-    break;
-
-  case FORMAT_STILL_IMAGE:
-    for (int m = MODE_FORMAT6_MIN; m <= MODE_FORMAT6_MAX; m ++) {
-      if (value & (0x1<<(31-(m-MODE_FORMAT6_MIN)))) {
-	modes.addRight(m);
-	nb ++;
-      }
-    }
-    break;
-
-  case FORMAT_SCALABLE_IMAGE_SIZE:
-    for (int m = MODE_FORMAT7_MIN; m <= MODE_FORMAT7_MAX; m ++) {
-      if (value & (0x1<<(31-(m-MODE_FORMAT7_MIN)))) {
-	modes.addRight(m);
-	nb ++;
-      }
-    }
-    break;
-  }
-
-  return nb;
-}
-
-/*!
-
-  Set the capture framerate for a given camera on the bus.
-
-  \param framerate : The camera framerate. The current framerate of the camera
-  is given by getFramerate(). The camera supported framerates are given by
-  getFramerateSupported(). The allowed values given in
-  libdc1394/dc1394_control.h are:
-
-  - FRAMERATE_1_875 = 32 for 1.875 fps,
-  - FRAMERATE_3_75 for 3.75 fps,
-  - FRAMERATE_7_5 for 7.5 fps,
-  - FRAMERATE_15 for 15 fps,
-  - FRAMERATE_30 for 30 fps,
-  - FRAMERATE_60 for 60 fps,
-  - FRAMERATE_120 for 120 fps,
-  - FRAMERATE_240 for 240 fps.
-
-  \exception vpFrameGrabberException::settingError : If the required camera is
-  not present.
-
-  \warning Has to be called after open() to be sure that a camera is detected.
-
-  \sa setFormat(), setMode(), open(), getNumCameras(), setCamera()
-
-*/
-void
-vp1394Grabber::setFramerate(int framerate)
-{
-  if (iso_transmission_started  == true) {
-
-    stopIsoTransmission();
-
-    for (unsigned int i=0; i < num_cameras; i++)
-      dc1394_dma_unlisten( handles[i], &cameras[i] );
-    iso_transmission_started = false;
-  }
-
-  this->pframerate[camera] = framerate;
-
-  setup();
-  startIsoTransmission();
-}
-
-/*!
-
-  Query the actual capture framerate of a given camera. The camera supported
-  framerates are given by getFramerateSupported().
-
-  \warning Before requerying the actual framerate a handle must
-  be created by calling open(), and a camera must be connected.
-
-  \param framerate : The camera capture framerate.
-
-  \return true if the framerate was obtained, false if an error occurs.
-
-  \exception vpFrameGrabberException::settingError : If the required camera is
-  not present.
-
-  \sa setFramerate(), getFramerateSupported(), open(), getNumCameras(),
-  setCamera()
-
-*/
-void
-vp1394Grabber::getFramerate(int & framerate)
-{
-  if (handle_created == false) {
-    close();
-    vpERROR_TRACE("To set the shutter the handle must be created");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter the handle must be created") );
-  }
-  if (camera_found == false) {
-    close();
-    vpERROR_TRACE("To set the shutter a camera must be connected");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter a camera must be connected") );
-  }
-
-  if(dc1394_get_camera_misc_info(handles[camera],
-				 cameras[camera].node,
-				 &miscinfo) !=DC1394_SUCCESS) {
-    vpERROR_TRACE("Unable to get misc info");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Unable to get misc info") );
-  }
-
-  framerate = miscinfo.framerate;
-}
-
-/*!
-
-  Query the available framerates for the given camera image format and mode
-  (see file libdc1394/dc1394_control.h). The framerate is only available if
-  format is either FORMAT_VGA_NONCOMPRESSED (format 0),
-  FORMAT_SVGA_NONCOMPRESSED_1 (format 1) or FORMAT_SVGA_NONCOMPRESSED_2 (format
-  2). If format is equal to FORMAT_STILL_IMAGE (format 6) or
-  FORMAT_SCALABLE_IMAGE_SIZE (format 7), the framerate is not available. In
-  this case, we return 0.
-
-  \warning Before requerying supported framerates for a given format and mode a
-  handle must be created by calling open(), and a camera must be connected.
-
-  \param format : Camera image format.
-  \param mode : Camera mode.
-  \param framerates ; The list of supported camera framerates.
-
-  \return The number of supported camera image framerates, 0 if an error
-  occurs.
-
-  \exception vpFrameGrabberException::settingError : If the required camera is
-  not present.
-
-  \sa getFormatSupported(), getModeSupported(), open(), getFramerate(),
-  setCamera()
-*/
-int
-vp1394Grabber::getFramerateSupported(int format, int mode,
-				     vpList<int> & framerates)
-{
-  int nb = 0; // Number of supported framerates
-
-  // Refresh the list of supported framerates
-  framerates.kill();
-
-  if (handle_created == false) {
-    close();
-    vpERROR_TRACE("To set the shutter the handle must be created");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter the handle must be created") );
-  }
-  if (camera_found == false) {
-    close();
-    vpERROR_TRACE("To set the shutter a camera must be connected");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter a camera must be connected") );
-  }
-
-  switch(format) {
-    case FORMAT_VGA_NONCOMPRESSED:
-    case FORMAT_SVGA_NONCOMPRESSED_1:
-    case FORMAT_SVGA_NONCOMPRESSED_2:
-      {
-
-	quadlet_t value;
-	if (dc1394_query_supported_framerates(handles[camera],
-					      cameras[camera].node,
-					      format, mode,
-					      &value) != DC1394_SUCCESS) {
-	  vpERROR_TRACE("Could not query supported frametates for format %d\n"
-		      "and mode %d\n", format, mode);
-	  throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-					 "Could not query supported framerates") );
-	}
-
-	for (int f = FRAMERATE_MIN; f <= FRAMERATE_MAX; f ++) {
-	  if (value & (0x1<<(31-(f-FRAMERATE_MIN)))) {
-	    framerates.addRight(f);
-	    nb ++;
-	  }
-	}
-      }
-      break;
-  default:
-    // Framerate not available for:
-    //  - FORMAT_STILL_IMAGE for the Format_6
-    //  - FORMAT_SCALABLE_IMAGE_SIZE for the Format_7
-    return 0;
-  }
-
-  return nb;
-}
-
-/*!
-
-  Converts the string containing the description of the format into the format
-  dentifier.
-
-  \param format : The string describing the format given by Format(int)
-
-  \return The camera capture format identifier, either :
-  - FORMAT_VGA_NONCOMPRESSED for the Format_0
-  - FORMAT_SVGA_NONCOMPRESSED_1 for the Format_1
-  - FORMAT_SVGA_NONCOMPRESSED_2 for the Format_2
-  - FORMAT_STILL_IMAGE for the Format_6
-  - FORMAT_SCALABLE_IMAGE_SIZE for the Format_7
-  .
-  This method returns 0 if the string does not match to a format string.
-
-  \sa convertFormat(int), convertMode(std::string), convertFramerate(std::string&)
-
-*/
-int vp1394Grabber::convertFormat(std::string format)
-{
-  for (int i = FORMAT_MIN; i <= FORMAT_MAX; i ++) {
-    //    if (format.compare(0, format(i).length(), format(i)) == 0) {
-    if (format.compare(0, convertFormat(i).length(), convertFormat(i)) == 0) {
-       return i;
-    }
-  };
-
-  return 0;
-}
-/*!
-
-  Converts the string containing the description of the mode into the mode
-  dentifier.
-
-  \param mode : The string describing the mode given by Mode(int)
-
-  \return The camera capture mode identifier.
-
-  This method returns 0 if the string does not match to a mode string.
-
-  \sa convertMode(int), convertFormat(std::string), convertFramerate(std::string)
-
-*/
-int vp1394Grabber::convertMode(std::string mode)
-{
-  for (int i = MODE_FORMAT0_MIN; i <= MODE_FORMAT0_MAX; i ++) {
-    if (mode.compare(convertMode(i)) == 0)
-      return i;
-  };
-  for (int i = MODE_FORMAT1_MIN; i <= MODE_FORMAT1_MAX; i ++) {
-    if (mode.compare(convertMode(i)) == 0)
-      return i;
-  };
-  for (int i = MODE_FORMAT2_MIN; i <= MODE_FORMAT2_MAX; i ++) {
-    if (mode.compare(convertMode(i)) == 0)
-      return i;
-  };
-  for (int i = MODE_FORMAT6_MIN; i <= MODE_FORMAT6_MAX; i ++) {
-    if (mode.compare(convertMode(i)) == 0)
-      return i;
-  };
-  for (int i = MODE_FORMAT7_MIN; i <= MODE_FORMAT7_MAX; i ++) {
-    if (mode.compare(convertMode(i)) == 0)
-      return i;
-  };
-  for (int i = COLOR_FORMAT7_MIN; i <= COLOR_FORMAT7_MAX; i ++) {
-    if (mode.compare(convertMode(i)) == 0)
-      return i;
-  };
-
-  return 0;
-}
-/*!
-
-  Converts the string containing the description of the framerate into the
-  framerate dentifier.
-
-  \param framerate : The string describing the framerate given by
-  Framerate(int).
-
-  \return The camera capture framerate identifier.
-
-  This method returns 0 if the string does not match to a framerate string.
-
-  \sa convertFramerate(int), convertFormat(std::string &), convertMode(std::string)
-
-*/
-int vp1394Grabber::convertFramerate(std::string framerate)
-{
-  for (int i = FRAMERATE_MIN; i <= FRAMERATE_MAX; i ++) {
-    if (framerate.compare(convertFramerate(i)) == 0)
-      return i;
-  };
-
-  return 0;
-}
-
-
-/*!
-
-  Converts the format identifier into a string containing the description of
-  the format.
-
-  \param format : The camera capture format, either :
-  - FORMAT_VGA_NONCOMPRESSED for the Format_0
-  - FORMAT_SVGA_NONCOMPRESSED_1 for the Format_1
-  - FORMAT_SVGA_NONCOMPRESSED_2 for the Format_2
-  - FORMAT_STILL_IMAGE for the Format_6
-  - FORMAT_SCALABLE_IMAGE_SIZE for the Format_7
-
-  \return A string describing the format, an empty string if the format is not
-  supported.
-
-  \sa convertMode(), convertFramerate()
-
-*/
-std::string vp1394Grabber::convertFormat(int format)
-{
-  std::string _format;
-  if ((format >= FORMAT_MIN) && (format <= FORMAT_MAX)) {
-    switch (format) {
-    case FORMAT_VGA_NONCOMPRESSED:    _format = strFormats[0]; break;
-    case FORMAT_SVGA_NONCOMPRESSED_1: _format = strFormats[1]; break;
-    case FORMAT_SVGA_NONCOMPRESSED_2: _format = strFormats[2]; break;
-      // 3 reserved formats
-    case FORMAT_SVGA_NONCOMPRESSED_2 + 1: _format = strFormats[3]; break;
-    case FORMAT_SVGA_NONCOMPRESSED_2 + 2: _format = strFormats[4]; break;
-    case FORMAT_SVGA_NONCOMPRESSED_2 + 3: _format = strFormats[5]; break;
-
-    case FORMAT_STILL_IMAGE:          _format = strFormats[6]; break;
-    case FORMAT_SCALABLE_IMAGE_SIZE:  _format = strFormats[7]; break;
-    default:
-      break;
-    }
-  }
-  else {
-    std::cout << "The format " << format
-	 << " is not supported by the camera" << std::endl;
-    _format = "Not Valid";
-  }
-
-  return _format;
-}
-/*!
-
-  Converts the mode identifier into a string containing the description of the
-  mode.
-
-  \param mode : The camera capture mode.
-
-  \return A string describing the mode, an empty string if the mode is not
-  supported.
-
-  \sa convertFormat(), convertFramerate()
-
-*/
-std::string vp1394Grabber::convertMode(int mode)
-{
-  std::string _mode;
-
-  if ((mode >= MODE_FORMAT0_MIN) && (mode <= MODE_FORMAT0_MAX)) {
-    switch (mode) {
-    case MODE_160x120_YUV444: _mode = strModesInFormat0[0]; break;
-    case MODE_320x240_YUV422: _mode = strModesInFormat0[1]; break;
-    case MODE_640x480_YUV411: _mode = strModesInFormat0[2]; break;
-    case MODE_640x480_YUV422: _mode = strModesInFormat0[3]; break;
-    case MODE_640x480_RGB:    _mode = strModesInFormat0[4]; break;
-    case MODE_640x480_MONO:   _mode = strModesInFormat0[5]; break;
-    case MODE_640x480_MONO16: _mode = strModesInFormat0[6]; break;
-    default: break;
-    }
-  }
-  else if ((mode >= MODE_FORMAT1_MIN) && (mode <= MODE_FORMAT1_MAX)) {
-    switch (mode) {
-    case MODE_800x600_YUV422:  _mode = strModesInFormat1[0]; break;
-    case MODE_800x600_RGB:     _mode = strModesInFormat1[1]; break;
-    case MODE_800x600_MONO:    _mode = strModesInFormat1[2]; break;
-    case MODE_1024x768_YUV422: _mode = strModesInFormat1[3]; break;
-    case MODE_1024x768_RGB:    _mode = strModesInFormat1[4]; break;
-    case MODE_1024x768_MONO:   _mode = strModesInFormat1[5]; break;
-    case MODE_800x600_MONO16:  _mode = strModesInFormat1[6]; break;
-    case MODE_1024x768_MONO16: _mode = strModesInFormat1[7]; break;
-    default: break;
-    }
-  }
-  else if ((mode >= MODE_FORMAT2_MIN) && (mode <= MODE_FORMAT2_MAX)) {
-    switch (mode) {
-    case MODE_1280x960_YUV422:  _mode = strModesInFormat2[0]; break;
-    case MODE_1280x960_RGB:     _mode = strModesInFormat2[1]; break;
-    case MODE_1280x960_MONO:    _mode = strModesInFormat2[2]; break;
-    case MODE_1600x1200_YUV422: _mode = strModesInFormat2[3]; break;
-    case MODE_1600x1200_RGB:    _mode = strModesInFormat2[4]; break;
-    case MODE_1600x1200_MONO:   _mode = strModesInFormat2[5]; break;
-    case MODE_1280x960_MONO16:  _mode = strModesInFormat2[6]; break;
-    case MODE_1600x1200_MONO16: _mode = strModesInFormat2[7]; break;
-    default: break;
-    }
-  }
-  else if ((mode >= MODE_FORMAT6_MIN) && (mode <= MODE_FORMAT6_MAX)) {
-    switch (mode) {
-    case MODE_EXIF: _mode = strModesInFormat6[0]; break;
-    default: break;
-    }
-  }
-  else if ((mode >= MODE_FORMAT7_MIN) && (mode <= MODE_FORMAT7_MAX)) {
-    switch (mode) {
-    case MODE_FORMAT7_0: _mode = strModesInFormat7[0]; break;
-    case MODE_FORMAT7_1: _mode = strModesInFormat7[1]; break;
-    case MODE_FORMAT7_2: _mode = strModesInFormat7[2]; break;
-    case MODE_FORMAT7_3: _mode = strModesInFormat7[3]; break;
-    case MODE_FORMAT7_4: _mode = strModesInFormat7[4]; break;
-    case MODE_FORMAT7_5: _mode = strModesInFormat7[5]; break;
-    case MODE_FORMAT7_6: _mode = strModesInFormat7[6]; break;
-    case MODE_FORMAT7_7: _mode = strModesInFormat7[7]; break;
-    default: break;
-    }
-  }
-  else if ((mode >= COLOR_FORMAT7_MIN) && (mode <= COLOR_FORMAT7_MAX)) {
-    switch (mode) {
-    case COLOR_FORMAT7_MONO8:  _mode = strColorsInFormat7[0]; break;
-    case COLOR_FORMAT7_YUV411: _mode = strColorsInFormat7[1]; break;
-    case COLOR_FORMAT7_YUV422: _mode = strColorsInFormat7[2]; break;
-    case COLOR_FORMAT7_YUV444: _mode = strColorsInFormat7[3]; break;
-    case COLOR_FORMAT7_RGB8:   _mode = strColorsInFormat7[4]; break;
-    case COLOR_FORMAT7_MONO16: _mode = strColorsInFormat7[5]; break;
-    case COLOR_FORMAT7_RGB16:  _mode = strColorsInFormat7[6]; break;
-    default: break;
-    }
-  }
-  else {
-    std::cout << "The mode " << mode << " is not supported by the camera" << std::endl;
-    _mode = "Not valid";
-  }
-
-  return _mode;
-}
-
-/*!
-
-  Converts the framerate identifier into a string
-  containing the description of the framerate.
-
-  \param framerate : The camera capture framerate.
-
-  \return A string describing the framerate, an empty string if the framerate
-  is not supported.
-
-  \sa convertFormat(), convertMode()
-
-*/
-std::string vp1394Grabber::convertFramerate(int framerate)
-{
-  std::string _framerate;
-
-  if ((framerate >= FRAMERATE_MIN) && (framerate <= FRAMERATE_MAX)) {
-    switch (framerate) {
-    case FRAMERATE_1_875: _framerate = strFramerates[0]; break;
-    case FRAMERATE_3_75:  _framerate = strFramerates[1]; break;
-    case FRAMERATE_7_5:   _framerate = strFramerates[2]; break;
-    case FRAMERATE_15:    _framerate = strFramerates[3]; break;
-    case FRAMERATE_30:    _framerate = strFramerates[4]; break;
-    case FRAMERATE_60:    _framerate = strFramerates[5]; break;
-    default: break;
-    }
-  }
-  else {
-    std::cout << "The framerate " << framerate
-	 << " is not supported by the camera" << std::endl;
-    _framerate = "Not valid";
-  }
-
-  return _framerate;
-
-}
-
-/*!
-
-  Set the shutter for a given camera.
-
-  \param shutter : The shutter value to apply to the camera.
-
-
-  \exception vpFrameGrabberException::settingError : If the required camera is
-  not present or if an error occurs.
-
-  \warning Has to be called after open() to be sure that a camera is detected.
-
-  \sa getShutter(), open(), getNumCameras(), setCamera()
-*/
-void
-vp1394Grabber::setShutter(unsigned int shutter)
-{
-  unsigned int min_shutter = 0;
-  unsigned int max_shutter = 0;
-
-
-  if (handle_created == false) {
-    close();
-    vpERROR_TRACE("To set the shutter the handle must be created");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter the handle must be created") );
-  }
-  if (camera_found == false) {
-    close();
-    vpERROR_TRACE("To set the shutter a camera must be connected");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter a camera must be connected") );
-  }
-
-  if(dc1394_get_min_value(handles[camera],
-			  cameras[camera].node,
-			  FEATURE_SHUTTER, &min_shutter) !=DC1394_SUCCESS) {
-    close();
-    vpERROR_TRACE("Unable to get min shutter value");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Unable to get min shutter value") );
-  }
-
-  if(dc1394_get_max_value(handles[camera],
-			  cameras[camera].node,
-			  FEATURE_SHUTTER, &max_shutter) !=DC1394_SUCCESS) {
-    close();
-    vpERROR_TRACE("Unable to get max shutter value");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Unable to get max shutter value") );
-  }
-
-  if (shutter < min_shutter || shutter > max_shutter) {
-    vpCERROR << "The requested shutter " << shutter
-	   << " must be comprised between " << min_shutter
-	   << " and " << max_shutter << std::endl;
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Cannot set shutter: bad value") );
-  }
-
-  if ( dc1394_set_shutter(handles[camera],
-			  cameras[camera].node,
-			  shutter) != DC1394_SUCCESS) {
-    vpERROR_TRACE("Unable to set shutter");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Cannot set shutter") );
-  }
-}
-
-/*!
-
-  Query the actual shutter value of a given camera and the bounded shutter
-  values.
-
-  \warning Before requerying the shutter a handle must
-  be created by calling open(), and a camera must be connected.
-
-  \param min_shutter : Minimal autorized shutter value.
-
-  \param shutter : The current camera shutter value. This value is comprised
-  between \e min_shutter and \e max_shutter.
-
-  \param max_shutter : Maximal autorized shutter value.
-
-
-  \exception vpFrameGrabberException::settingError : If the required camera is
-  not present or if an error occurs.
-
-  \sa setShutter(), open(), getNumCameras(), setCamera()
-
-*/
-void
-vp1394Grabber::getShutter(unsigned int &min_shutter,
-			  unsigned int &shutter,
-			  unsigned int &max_shutter)
-{
-  shutter = 0;
-  min_shutter = 0;
-  max_shutter = 0;
-
-  if (handle_created == false) {
-    close();
-    vpERROR_TRACE("To set the shutter the handle must be created");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter the handle must be created") );
-  }
-  if (camera_found == false) {
-    close();
-    vpERROR_TRACE("To set the shutter a camera must be connected");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter a camera must be connected") );
-  }
-  if(dc1394_get_shutter(handles[camera],
-			cameras[camera].node,
-			&shutter) !=DC1394_SUCCESS) {
-    close();
-    vpERROR_TRACE("Unable to get shutter value");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Unable to get shutter value") );
-
-  }
-
-  if(dc1394_get_min_value(handles[camera],
-			  cameras[camera].node,
-			  FEATURE_SHUTTER, &min_shutter) !=DC1394_SUCCESS) {
-    close();
-    vpERROR_TRACE("Unable to get min shutter value");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Unable to get min shutter value") );
-  }
-
-  if(dc1394_get_max_value(handles[camera],
-			  cameras[camera].node,
-			  FEATURE_SHUTTER, &max_shutter) !=DC1394_SUCCESS) {
-    close();
-    vpERROR_TRACE("Unable to get max shutter value");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Unable to get max shutter value") );
-  }
-}
-
-/*!
-
-  Set the gain for a given camera.
-
-  \warning Before setting the gain a handle must
-  be created by calling open(), and a camera must be connected.
-
-  \param gain The gain value to apply to the camera.
-
-  \exception vpFrameGrabberException::settingError : If the required camera is not present or if an error occurs.
-
-  \sa getGain(), getNumCameras(), setCamera()
-*/
-void
-vp1394Grabber::setGain(unsigned int gain)
-{
-  unsigned int min_gain = 0;
-  unsigned int max_gain = 0;
-
-
-  if (handle_created == false) {
-    close();
-    vpERROR_TRACE("To set the shutter the handle must be created");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter the handle must be created") );
-  }
-  if (camera_found == false) {
-    close();
-    vpERROR_TRACE("To set the shutter a camera must be connected");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter a camera must be connected") );
-  }
-  if(dc1394_get_min_value(handles[camera],
-			  cameras[camera].node,
-			  FEATURE_GAIN, &min_gain) !=DC1394_SUCCESS) {
-    close();
-    vpERROR_TRACE("Unable to get min gain value");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Unable to get min gain value") );
-  }
-
-  if(dc1394_get_max_value(handles[camera],
-			  cameras[camera].node,
-			  FEATURE_GAIN, &max_gain) !=DC1394_SUCCESS) {
-    close();
-    vpERROR_TRACE("Unable to get max gain value");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Unable to get max gain value") );
-  }
-
-  if (gain < min_gain || gain > max_gain) {
-    vpCERROR << "The requested gain " << gain
-	   << " must be comprised between " << min_gain
-	   << " and " << max_gain << std::endl;
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Cannot set shutter: bad value") );
-  }
-
-  if ( dc1394_set_gain(handles[camera],
-		       cameras[camera].node,
-		       gain) != DC1394_SUCCESS) {
-    vpERROR_TRACE("Unable to set gain");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Cannot set gain") );
-  }
-}
-
-/*!
-
-  Query the actual gain value of a given camera and the bounded gain
-  values.
-
-  \warning Before requerying the gain a handle must
-  be created by calling open(), and a camera must be connected.
-
-  \param min_gain : Minimal autorized gain value.
-
-  \param gain : The current camera gain value. This value is comprised
-  between \e min_gain and \e max_gain.
-
-  \param max_gain : Maximal autorized gain value.
-
-  \exception vpFrameGrabberException::settingError :If the required camera is
-  not present or if an error occurs.
-
-  \sa setGain(), open(), getNumCameras(), setCamera()
-
-*/
-void
-vp1394Grabber::getGain(unsigned int &min_gain,
-		       unsigned int &gain,
-		       unsigned int &max_gain)
-{
-  gain = 0;
-  min_gain = 0;
-  max_gain = 0;
-
-  if (handle_created == false) {
-    close();
-    vpERROR_TRACE("To set the shutter the handle must be created");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter the handle must be created") );
-  }
-  if (camera_found == false) {
-    close();
-    vpERROR_TRACE("To set the shutter a camera must be connected");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "To set the shutter a camera must be connected") );
-  }
-
-  if(dc1394_get_gain(handles[camera],
-		     cameras[camera].node,
-		     &gain) !=DC1394_SUCCESS) {
-    close();
-    vpERROR_TRACE("Unable to get gain value");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Unable to get gain value") );
-
-  }
-
-  if(dc1394_get_min_value(handles[camera],
-			  cameras[camera].node,
-			  FEATURE_GAIN, &min_gain) !=DC1394_SUCCESS) {
-    close();
-    vpERROR_TRACE("Unable to get min gain value");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Unable to get min gain value") );
-  }
-
-  if(dc1394_get_max_value(handles[camera],
-			  cameras[camera].node,
-			  FEATURE_GAIN, &max_gain) !=DC1394_SUCCESS) {
-    close();
-    vpERROR_TRACE("Unable to get max gain value");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "Unable to get max gain value") );
-
-  }
-}
-
-/*!
-
-  Get the image width. It depends on the camera format setFormat() and mode
-  setMode(). The width of the images is only available after a call to open().
-
-  \param width : The image width, zero if the required camera is not available.
-
-  \exception vpFrameGrabberException::settingError : If the required camera is
-  not present.
-
-  \warning Has to be called after open() to be sure that a camera is detected.
-
-  \sa getHeight(), setCamera()
-
-*/
-void vp1394Grabber::getWidth(unsigned int &width)
-{
-  if (camera >= num_cameras) {
-    width = 0;
-    close();
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "The required camera is not present") );
-  }
-
-  width = this->_width[camera];
-  this->width = width;
-}
-
-/*!
-
-  Get the image height. It depends on the camera format setFormat() and mode
-  setMode(). The height of the images is only available after a call to
-  open().
-
-  \param height : The image height.
-
-  \exception vpFrameGrabberException::settingError : If the required camera is
-  not present.
-
-  \warning Has to be called after open() to be sure that a camera is detected.
-
-  \sa getWidth(), getImageFormat(), close(), getNumCameras(), setCamera()
-
-*/
-void vp1394Grabber::getHeight(unsigned int &height)
-{
-  if (camera >= num_cameras) {
-    height = 0;
-    close();
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "The required camera is not present") );
-  }
-
-  height = this->_height[camera];
-  this->height = height;
-}
-
-/*!
-
-  Query the number of cameras on the bus.
-
-  \param cameras : The number of cameras found on the bus.
-
-
-*/
-void
-vp1394Grabber::getNumCameras(unsigned int &cameras)
-{
-  if (camera_found == false) {
-    vpCTRACE << "No camera found..."<< std::endl;
-    cameras = 0;
-  }
-
-  cameras = num_cameras;
-}
-
-
-/*!
-  Initialize grey level image acquisition
-
-  \param I : Image data structure (8 bits image)
-
-*/
-void
-vp1394Grabber::open(vpImage<unsigned char> &I)
-{
-
-  open();
-
-  // Get the actual camera format, mode and framerate
-  getFormat(pformat[camera]);
-  getMode(pmode[camera]);
-  getFramerate(pframerate[camera]);
-
-  setup();
-  startIsoTransmission();
-
-  unsigned int w, h;
-  getWidth( w ) ;
-  getHeight( h ) ;
-
-  vpDEBUG_TRACE(10, "%d %d", h, w ) ;
-
-  I.resize(h, w) ;
-
-  init = true ;
-
-}
-
-/*!
-  Initialize color image (in RGBa format) acquisition
-
-  \param I : Image data structure (RGBa format)
-
-*/
-void
-vp1394Grabber::open(vpImage<vpRGBa> &I)
-{
-
-  open();
-
-  // Get the actual camera format, mode and framerate
-  getFormat(pformat[camera]);
-  getMode(pmode[camera]);
-  getFramerate(pframerate[camera]);
-
-  setup();
-  startIsoTransmission();
-
-  unsigned int w, h;
-  getWidth( w ) ;
-  getHeight( h ) ;
-
-  vpDEBUG_TRACE(10, "%d %d", h, w ) ;
-
-  I.resize(h, w) ;
-
-  init = true ;
-
-}
-
-/*!
-  Acquire a grey level image from a given camera.
-
-  \param I : Image data structure (8 bits image)
-
-  \exception vpFrameGrabberException::initializationError : If the device is
-  not openned.
-
-  \sa getField(), setCamera()
-*/
-void
-vp1394Grabber::acquire(vpImage<unsigned char> &I)
-{
-
-  if (init==false)
-  {
-    close();
-    throw (vpFrameGrabberException(vpFrameGrabberException::initializationError,
-				   "Initialization not done") );
-  }
-
-  int  *bitmap = NULL ;
-  bitmap = dmaCapture();
-
-  unsigned int w, h;
-  getWidth( w ) ;
-  getHeight( h ) ;
-
-  if ((I.getWidth() != w)||(I.getHeight() != h))
-    I.resize(h, w) ;
-
-  int size  = I.getHeight()*I.getWidth();
-  switch (image_format[camera])
-  {
-  case MONO:
-    memcpy(I.bitmap, (unsigned char *) bitmap, size*sizeof(unsigned char));
-    break;
-  case YUV411: {
-    vpImageConvert::YUV411ToGrey( (unsigned char *) bitmap, I.bitmap, size);
-    break;
-  }
-  case YUV422: {
-    vpImageConvert::YUV422ToGrey( (unsigned char *) bitmap, I.bitmap, size);
-    break;
-  }
-  case RGB: {
-    vpImageConvert::RGBToGrey((unsigned char *) bitmap, I.bitmap, size);
-    break;
-  }
-  case RGBa: {
-    vpImageConvert::RGBaToGrey((unsigned char *) bitmap, I.bitmap, size);
-    break;
-  }
-  default:
-    throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-				   "Format conversion not implemented. Acquisition failed.") );
-    break;
-  };
-
-  dmaDoneWithBuffer();
-
-}
-
-/*!
-  Acquire a color image from a given camera.
-
-  \param I : Image data structure (RGBa image)
-
-  \exception vpFrameGrabberException::initializationError : If the device is
-  not openned.
-
-  \sa getField(), setCamera()
-*/
-void
-vp1394Grabber::acquire(vpImage<vpRGBa> &I)
-{
-
-  if (init==false)
-  {
-    close();
-    throw (vpFrameGrabberException(vpFrameGrabberException::initializationError,
-				   "Initialization not done") );
-  }
-
-  int  *bitmap = NULL ;
-  bitmap = dmaCapture();
-
-  unsigned int w, h;
-  getWidth( w ) ;
-  getHeight( h ) ;
-
-  if ((I.getWidth() != w)||(I.getHeight() != h))
-    I.resize(h, w) ;
-
-  int size  = I.getHeight()*I.getWidth();
-  switch (image_format[camera])
-  {
-  case MONO:
-    vpImageConvert::GreyToRGBa((unsigned char *) bitmap,
-			       (unsigned char *) I.bitmap, size);
-    break;
-  case YUV411: {
-    vpImageConvert::YUV411ToRGBa( (unsigned char *) bitmap,
-				  (unsigned char *) I.bitmap, size);
-    break;
-  }
-  case YUV422: {
-    vpImageConvert::YUV422ToRGBa( (unsigned char *) bitmap,
-				  (unsigned char *) I.bitmap, size);
-    break;
-  }
-  case RGB: {
-    vpImageConvert::RGBToRGBa((unsigned char *) bitmap,
-			      (unsigned char *) I.bitmap, size);
-    break;
-  }
-  case RGBa: {
-    memcpy((unsigned char *) I.bitmap, (unsigned char *) bitmap, size);
-    break;
-  }
-  default:
-    throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-				   "Format conversion not implemented. Acquisition failed.") );
-    break;
-  };
-
-  dmaDoneWithBuffer();
-
-}
-
-
-/*!
-
-  Open ohci and asign handle to it and get the camera nodes and
-  describe them as we find them.
-
-  \exception vpFrameGrabberException::initializationError : If a raw1394 handle
-  can't be aquired.
-
-  \sa close()
-*/
-void
-vp1394Grabber::open()
-{
-  //int num_nodes;
-  int num_ports = vp1394Grabber::MAX_PORTS;
-  struct raw1394_portinfo ports[vp1394Grabber::MAX_PORTS];
-  raw1394handle_t raw_handle;
-
-  if (handles == NULL)
-    handles      = new raw1394handle_t      [vp1394Grabber::MAX_CAMERAS];
-  if (cameras == NULL)
-    cameras      = new dc1394_cameracapture [vp1394Grabber::MAX_CAMERAS];
-  if (cam_count == NULL)
-    cam_count    = new int [vp1394Grabber::MAX_CAMERAS];
-  if (pformat == NULL)
-    pformat      = new int [vp1394Grabber::MAX_CAMERAS];
-  if (pmode == NULL)
-    pmode        = new int [vp1394Grabber::MAX_CAMERAS];
-  if (pframerate == NULL)
-    pframerate   = new int [vp1394Grabber::MAX_CAMERAS];
-  if (_width == NULL)
-    _width        = new int [vp1394Grabber::MAX_CAMERAS];
-  if (_height == NULL)
-    _height       = new int [vp1394Grabber::MAX_CAMERAS];
-  if (image_format == NULL)
-    image_format = new vp1394ImageFormatType [vp1394Grabber::MAX_CAMERAS];
-
-  raw_handle = raw1394_new_handle();
-
-  if (raw_handle==NULL) {
-    close();
-    vpERROR_TRACE("Unable to aquire a raw1394 handle\n\n"
-		"Please check \n"
-		"  - if the kernel modules `ieee1394',`raw1394' and `ohci1394' are loaded \n"
-		"  - if you have read/write access to /dev/raw1394\n\n");
-    throw (vpFrameGrabberException(vpFrameGrabberException::initializationError,
-				   "Unable to aquire a raw1394 handle") );
-  }
-
-  num_ports = raw1394_get_port_info(raw_handle, ports, num_ports);
-  raw1394_destroy_handle(raw_handle);
-  if (verbose)
-    printf("number of ports detected: %d\n", num_ports);
-
-  if (num_ports < 1) {
-    close();
-    throw (vpFrameGrabberException(vpFrameGrabberException::initializationError,
-				   "no ports found") );
-  }
-
-  //num_nodes = raw1394_get_nodecount(raw_handle);
-  num_cameras = 0;
-
-  /* get dc1394 handle to each port */
-  for (int p = 0; p < num_ports; p++)  {
-
-    /* get the camera nodes and describe them as we find them */
-    raw_handle = raw1394_new_handle();
-    raw1394_set_port( raw_handle, p );
-
-    camera_nodes = NULL;
-    camera_nodes = dc1394_get_camera_nodes(raw_handle, &cam_count[p], 0);
-    raw1394_destroy_handle(raw_handle);
-    if (verbose)
-      fprintf(stdout, "%d camera(s) on port %d\n", cam_count[p], p);
-
-    for (int i = 0; i < cam_count[p]; i++, num_cameras ++) {
-      handles[num_cameras] = dc1394_create_handle(p);
-      if (handles[num_cameras]==NULL) {
-	close();
-	vpERROR_TRACE("Unable to aquire a raw1394 handle\n");
-	vpERROR_TRACE("did you load the drivers?\n");
-	throw (vpFrameGrabberException(vpFrameGrabberException::initializationError,
-				       "Unable to aquire a raw1394 handle.") );
-      }
-      cameras[num_cameras].node = camera_nodes[i];
-
-    }
-    if (cam_count[p])
-      dc1394_free_camera_nodes(camera_nodes);
-  }
-
-  if (num_cameras < 1) {
-    close();
-    throw (vpFrameGrabberException(vpFrameGrabberException::initializationError,
-				   "no cameras found") );
-  }
-  vpDEBUG_TRACE(10, "%d cameras detected\n", num_cameras);
-
-  camera_found = true;
-
-  handle_created = true;
-
-  // Get the actual camera format, mode and framerate
-  getFormat(pformat[camera]);
-  getMode(pmode[camera]);
-  getFramerate(pframerate[camera]);
-}
-
-/*!
-
-  Get the feature and set the dma capture.
-
-  Set the camera to the specified format setFormat(), mode setMode() and
-  framerate setFramerate(). Considering the camera format and mode, updates
-  the captured image size.
-
-  \exception vpFrameGrabberException::otherError : If unable to get feature set
-  or setup the camera.
-
-  \sa setFormat(), setMode(), setFramerate(), getWidth(), getHeight()
-
-*/
-void
-vp1394Grabber::setup()
-{
-  unsigned int channel;
-  unsigned int speed;
-
-  if ( handle_created == true && camera_found == true) {
-
-    for (unsigned int i = 0; i < num_cameras; i++) {
-      if (verbose) {
-	dc1394_feature_set features;
-
-	if(dc1394_get_camera_feature_set(handles[i],
-					 cameras[i].node,
-					 &features) != DC1394_SUCCESS) {
-	  close();
-
-	  throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-					 "Unable to get feature set") );
-	}
-	else {
-	  dc1394_print_feature_set(&features);
-	}
-      }
-
-      // After setting the camera format and mode we update the image size
-      getImageCharacteristics(pformat[i],
-			      pmode[i],
-			      _width[i],
-			      _height[i],
-			      image_format[i]);
-
-      if (dc1394_get_iso_channel_and_speed(handles[i],
-					   cameras[i].node,
-					   &channel,
-					   &speed) != DC1394_SUCCESS) {
-	close();
-	throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-				       "Unable to get the iso channel number") );
-      }
-
-      if (pformat[i] == FORMAT_SCALABLE_IMAGE_SIZE) {
-	if( dc1394_dma_setup_format7_capture(handles[i],
-					     cameras[i].node,
-					     channel,
-					     pmode[i],
-					     speed,
-					     USE_MAX_AVAIL, /*max packet size*/
-					     0, 0, /* left, top */
-					     _width[i],
-					     _height[i],
-					     vp1394Grabber::NUM_BUFFERS,
-					     vp1394Grabber::DROP_FRAMES,
-					     device_name,
-					     &cameras[i]) != DC1394_SUCCESS) {
-	  close();
-
-	  vpERROR_TRACE("Unable to setup camera in format 7 mode 0-\n"
-		      "check line %d of %s to"
-		      "make sure that the video mode,framerate and format are "
-		      "supported by your camera.\n",
-		      __LINE__,__FILE__);
-
-	  throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-				       "Unable to setup camera in format 7 ") );
-
-	}
-	if (verbose) {
-	  unsigned int qpp; // packet bytes
-	  if (dc1394_query_format7_byte_per_packet(handles[i],
-						   cameras[i].node,
-						   pmode[i],
-						   &qpp) != DC1394_SUCCESS) {
-	    close();
-
-	    throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-					   "Unable to query format7 byte_per_packet ") );
-	  }
-	  //std::cout << "Format 7: byte per packet : " << qpp << std::endl;
-	}
-
-      } else {
-
-	if (dc1394_dma_setup_capture(handles[i],
-				     cameras[i].node,
-				     channel,
-				     pformat[i],
-				     pmode[i],
-				     speed,
-				     pframerate[i],
-				     vp1394Grabber::NUM_BUFFERS,
-				     vp1394Grabber::DROP_FRAMES,
-				     device_name,
-				     &cameras[i]) != DC1394_SUCCESS) {
-	  vpERROR_TRACE("Unable to setup camera- check line %d of %s to"
-		      "make sure that the video mode,framerate and format are "
-		      "supported by your camera.\n",
-		      __LINE__,__FILE__);
-	  close();
-
-	  throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-					 "Unable to setup camera ") );
-	}
-      }
-    }
-  }
-}
-
-/*!
-
-  Gets the image size and coding format, depending on the camera image format
-  and the camera mode.
-
-  \param _format : The camera capture format.
-  \param _mode : The camera capture mode.
-  \param width : Width of the image for the given camera capture format
-  and mode.
-
-  \param height : Height of the image for the given camera capture format and
-  mode.
-
-  \param image_format : Coding image format for the given camera capture
-  format and mode.
-
-  \exception vpFrameGrabberException::otherError : If camera mode (see
-  setMode()) and the image format (see setFormat()) are incompatible.
-
-  \sa setFormat(), setMode(), getWidth(), getHeight(), setCamera()
-*/
-void
-vp1394Grabber::getImageCharacteristics(int _format, int _mode,
-				       int &width, int &height,
-				       vp1394ImageFormatType &_image_format)
-{
-  switch(_format)
-  {
-  case FORMAT_VGA_NONCOMPRESSED:
-    switch(_mode)
-    {
-    case MODE_160x120_YUV444:
-      width = 160; height = 120;
-      _image_format = YUV444;
-      break;
-    case MODE_320x240_YUV422:
-      width = 320; height = 240;
-      _image_format = YUV422;
-      break;
-    case MODE_640x480_YUV411:
-      width = 640; height = 480;
-      _image_format = YUV411;
-      break;
-    case MODE_640x480_YUV422:
-      width = 640; height = 480;
-      _image_format = YUV422;
-      break;
-    case MODE_640x480_RGB:
-      width = 640; height = 480;
-      _image_format = RGB;
-      break;
-    case MODE_640x480_MONO:
-      width = 640; height = 480;
-      _image_format = MONO;
-      break;
-    case MODE_640x480_MONO16:
-      width = 640; height = 480;
-      _image_format = MONO;
-      break;
-    default:
-      close();
-      vpERROR_TRACE("Error: camera image format and camera mode are uncompatible...\n");
-      vpERROR_TRACE("format: %d and mode: %d\n", _format, _mode);
-      throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-				     "Wrong mode for format 0") );
-      break;
-    }
-    break;
-  case FORMAT_SVGA_NONCOMPRESSED_1:
-    switch(_mode)
-    {
-    case MODE_800x600_YUV422:
-      width = 800; height = 600;
-      _image_format = YUV422;
-      break;
-    case MODE_800x600_RGB:
-      width = 800; height = 600;
-      _image_format = RGB;
-      break;
-    case MODE_800x600_MONO:
-      width = 800; height = 600;
-      _image_format = MONO;
-      break;
-    case MODE_800x600_MONO16:
-      width = 800; height = 600;
-      _image_format = MONO16;
-      break;
-    case MODE_1024x768_YUV422:
-      width = 1024; height = 768;
-      _image_format = YUV422;
-      break;
-    case MODE_1024x768_RGB:
-      width = 1024; height = 768;
-      _image_format = RGB;
-      break;
-    case MODE_1024x768_MONO:
-      width = 1024; height = 768;
-      _image_format = MONO;
-      break;
-    case MODE_1024x768_MONO16:
-      width = 1024; height = 768;
-      _image_format = MONO16;
-      break;
-    default:
-      close();
-      vpERROR_TRACE("Error: camera image format and camera mode are uncompatible...\n");
-      vpERROR_TRACE("format: %d and mode: %d\n", _format, _mode);
-      throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-				     "Wrong mode for format 1") );
-      break;
-    }
-    break;
-  case FORMAT_SVGA_NONCOMPRESSED_2:
-    switch(_mode)
-    {
-    case MODE_1280x960_YUV422:
-      width = 1280; height = 960;
-      _image_format = YUV422;
-      break;
-    case MODE_1280x960_RGB:
-      width = 1280; height = 960;
-      _image_format = RGB;
-      break;
-    case MODE_1280x960_MONO:
-      width = 1280; height = 960;
-      _image_format = MONO;
-      break;
-   case MODE_1280x960_MONO16:
-      width = 1280; height = 960;
-      _image_format = MONO16;
-      break;
-    case MODE_1600x1200_YUV422:
-      width = 1600; height = 1200;
-      _image_format = YUV422;
-      break;
-    case MODE_1600x1200_RGB:
-      width = 1600; height = 1200;
-      _image_format = RGB;
-      break;
-    case MODE_1600x1200_MONO:
-      width = 1600; height = 1200;
-      _image_format = MONO;
-      break;
-    case MODE_1600x1200_MONO16:
-      width = 1600; height = 1200;
-      _image_format = MONO16;
-     break;
-    default:
-      close();
-      vpERROR_TRACE("Error: camera image format and camera mode are uncompatible...\n");
-      vpERROR_TRACE("format: %d and mode: %d\n", _format, _mode);
-      throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-				     "Wrong mode for format 2") );
-      break;
-    }
-    break;
-  case FORMAT_SCALABLE_IMAGE_SIZE:
-#if 1
-    switch(_mode)
-    {
-    case MODE_FORMAT7_0:
-      width = 656; height = 492;
-      _image_format = YUV422;
-     break;
-
-    case MODE_FORMAT7_1:
-      width = 328; height = 492;
-      _image_format = MONO;
-     break;
-    case MODE_FORMAT7_2:
-      width = 656; height = 244;
-      _image_format = MONO;
-     break;
-    case MODE_FORMAT7_3:
-    case MODE_FORMAT7_4:
-    case MODE_FORMAT7_5:
-    case MODE_FORMAT7_6:
-    case MODE_FORMAT7_7:
-      width = 656; height = 244;
-      _image_format = MONO;
-     break;
-    }
-
-
-#else
-    // Did not work. Even if subsampling is activated in MODE_FORMAT7_1, image
-    // max size is the size of the image without considering the subsampling
-    switch(_mode)
-    {
-    case MODE_FORMAT7_0:
-      //      _width = 656; _height = 492;
-      _image_format = YUV422;
-     break;
-
-    case MODE_FORMAT7_1:
-      //      _width = 328; _height = 492;
-      _image_format = MONO;
-     break;
-    case MODE_FORMAT7_2:
-      //      _width = 656; _height = 244;
-      _image_format = MONO;
-     break;
-    }
-
-    // In format 7 we query set the image size to the maximal image size
-    if (dc1394_query_format7_max_image_size(handles[camera],
-					    cameras[camera].node,
-					    _mode,
-					    &width,
-					    &_eight) != DC1394_SUCCESS) {
-      close();
-      vpERROR_TRACE("Unable to get maximal image size for format 7\n");
-      throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-				     "Unable to get maximal image size for format 7 ") );
-    }
-    std::cout << "max width=" << width << " height: " << height << std::endl;
-#endif
-
-    break;
-  default:
-    close();
-    vpERROR_TRACE("Error: camera image format and camera mode are uncompatible...\n");
-    vpERROR_TRACE("format: %d and mode: %d\n", _format, _mode);
-    throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-				   "Wrong format") );
-    break;
-  }
-}
-
-
-/*!
-
-  Captures a frame from the given camera using DMA (direct memory acces). Two
-  policies are available, either this fonction waits for a frame (waiting
-  mode), either it returns if no frame is available (polling mode).
-
-  After you have finished with the frame, you must return the buffer to the
-  pool by calling dmaDoneWithBuffer().
-
-  \param waiting : Capture mode; true if you want to wait for an available
-  image (waiting mode), false to activate the polling mode.
-
-  \return NULL if no frame is available, the address of the image buffer
-  otherwise.
-
-  \exception vpFrameGrabberException::otherError : If no frame is available.
-
-  \warning Has to be called after open() to be sure that a camera is detected.
-
-  \sa dmaDoneWithBuffer(), getNumCameras(), setCamera()
-*/
-
-int*
-vp1394Grabber::dmaCapture(bool waiting)
-{
-
-  if (camera >= num_cameras) {
-    std::cout << "The required camera is not present..."
-	 << std::endl;
-    return NULL;
-  }
-
-  if ( handle_created == true && camera_found == true) {
-    if (waiting) {
-      if (num_cameras == 1) {
-	// Only one camera on the bus
-	if (dc1394_dma_single_capture(&cameras[camera]) != DC1394_SUCCESS) {
-	  close();
-	  throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-					 "No frame is available...") );
-	  return NULL;
-	}
-      }
-      else {
-	// More than one camera on the bus.
-	if (dc1394_dma_multi_capture(cameras, num_cameras) != DC1394_SUCCESS) {
-	  close();
-	  throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-					 "No frame is available...") );
-	  return NULL;
-	}
-	//	std::cout << "-";
-      }
-    }
-    else {
-      if (num_cameras == 1) {
-	// Only one camera on the bus
-	if (dc1394_dma_single_capture_poll(&cameras[camera]) != DC1394_SUCCESS) {
-	  close();
-	  throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-					 "No frame is available...") );
-	  return NULL;
-	}
-      }
-      else {
-	// More than one camera on the bus.
-	if (dc1394_dma_multi_capture_poll(cameras, num_cameras)
-	    != DC1394_SUCCESS) {
-	  close();
-	  throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-					 "No frame is available...") );
-	  return NULL;
-	}
-
-      }
-    }
-  }
-
-  return cameras[camera].capture_buffer;
-}
-
-/*!
-
-  Return the buffer to the pool for the given camera. This allows the driver to
-  use the buffer previously handed to the user.
-
-  \exception vpFrameGrabberException::settingError :If the required camera is
-  not present.
-
-  \exception vpFrameGrabberException::otherError : If can't stop the dma
-  access.
-
-  \warning Has to be called after open() to be sure that a camera is detected.
-
-  \sa dmaCapture(), setCamera()
-
-*/
-void
-vp1394Grabber::dmaDoneWithBuffer()
-{
-
-  if (camera >= num_cameras) {
-    close();
-    vpERROR_TRACE("The required camera is not present");
-    throw (vpFrameGrabberException(vpFrameGrabberException::settingError,
-				   "The required camera is not present") );
-  }
-
-  if ( handle_created == true && camera_found == true) {
-    if (dc1394_dma_done_with_buffer(&cameras[camera]) != DC1394_SUCCESS) {
-      throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-				     "Can't done the dma") );
-    }
-  }
-}
-
-
-
-/*!
-
-  Close the link between the camera and the acquisition program
-
-*/
-void
-vp1394Grabber::close()
-{
-  if (iso_transmission_started  == true) {
-
-    stopIsoTransmission();
-
-    for (unsigned int i=0; i < num_cameras; i++)
-      dc1394_dma_unlisten( handles[i], &cameras[i] );
-    iso_transmission_started = false;
-  }
-  if ((camera_found  == true) && (dma_started == true)) {
-    for (unsigned int i=0; i < num_cameras; i++)
-      dc1394_dma_release_camera( handles[i], &cameras[i]);
-    camera_found = false;
-    dma_started  = false;
-  }
-  if (handle_created == true) {
-    for (unsigned int i=0; i < num_cameras; i++)
-      dc1394_destroy_handle(handles[i]);
-    handle_created = false;
-  }
-
-  if (handles != NULL)      { delete [] handles;      handles = NULL;      }
-  if (cameras != NULL)      { delete [] cameras;      cameras = NULL;      }
-  if (cam_count != NULL)    { delete [] cam_count;    cam_count = NULL;    }
-  if (pformat != NULL)      { delete [] pformat;      pformat = NULL;      }
-  if (pmode != NULL)        { delete [] pmode;        pmode = NULL;        }
-  if (pframerate != NULL)   { delete [] pframerate;   pframerate = NULL;   }
-  if (_width != NULL)       { delete [] _width;       _width = NULL;       }
-  if (_height != NULL)      { delete [] _height;      _height = NULL;      }
-  if (image_format != NULL) { delete [] image_format; image_format = NULL; }
-
-}
-/*!
-  Start the transmission of the images for all the cameras on the bus.
-
-  \exception vpFrameGrabberException::otherError : If Unable to start camera
-  iso transmission.
-
-  \sa stopIsoTransmission()
-
-*/
-void vp1394Grabber::startIsoTransmission()
-{
-  if ( handle_created == true && camera_found == true)  {
-
-    for (unsigned int i = 0; i < num_cameras; i ++) {
-      if (dc1394_start_iso_transmission(handles[i],
-					cameras[i].node) !=DC1394_SUCCESS) {
-	close();
-	throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-				       "Unable to start camera iso transmission") );
-      }
-    }
-    iso_transmission_started = true;
-  }
-}
-
-/*!
-
-  Stop the Iso transmission for all the cameras on the bus.
-
-  \return true on success, false otherwise.
-
-  \sa StartIsoTransmission()
-
-*/
-void vp1394Grabber::stopIsoTransmission()
-{
-
-  if (iso_transmission_started == true)  {
-    if (handle_created == true && camera_found == true) {
-      for (unsigned int i = 0; i < num_cameras; i ++) {
-	if (dc1394_stop_iso_transmission(handles[i],
-					 cameras[i].node) != DC1394_SUCCESS) {
-	  close();
-	  throw (vpFrameGrabberException(vpFrameGrabberException::otherError,
-					 "Can't stop the camera") );
-	}
-
-      }
-      iso_transmission_started = false;
-    }
-  }
-}
-
-
-#endif
-#endif
diff --git a/src/device/framegrabber/1394/vp1394Grabber.h b/src/device/framegrabber/1394/vp1394Grabber.h
deleted file mode 100644
index fad5e936..00000000
--- a/src/device/framegrabber/1394/vp1394Grabber.h
+++ /dev/null
@@ -1,249 +0,0 @@
-/****************************************************************************
- *
- * $Id: vp1394Grabber.h 4323 2013-07-18 09:24:01Z fspindle $
- *
- * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
- * 
- * This software is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * ("GPL") version 2 as published by the Free Software Foundation.
- * See the file LICENSE.txt at the root directory of this source
- * distribution for additional information about the GNU GPL.
- *
- * For using ViSP with software that can not be combined with the GNU
- * GPL, please contact INRIA about acquiring a ViSP Professional 
- * Edition License.
- *
- * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
- * 
- * This software was developed at:
- * INRIA Rennes - Bretagne Atlantique
- * Campus Universitaire de Beaulieu
- * 35042 Rennes Cedex
- * France
- * http://www.irisa.fr/lagadic
- *
- * If you have questions regarding the use of this file, please contact
- * INRIA at visp@inria.fr
- * 
- * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- *
- * Description:
- * Firewire cameras video capture.
- *
- * Authors:
- * Fabien Spindler
- *
- *****************************************************************************/
-
-/*!
-  \file vp1394Grabber.h
-  \brief class for firewire cameras video capture.
-
-  \warning This class needs at least libdc1394-1.0.0 and
-  libraw1394-1.1.0. These libraries are available from
-  http://sourceforge.net/projects/libdc1394 and
-  http://sourceforge.net/projects/libraw1394 .
-
-  vp1394Grabber was tested with a Marlin F033C camera. This grabber is
-  not working with a PointGrey DragonFly 2 camera. Since libdc1394-1.x
-  is deprecated, you should better use vp1394TwoGrabber based on
-  libdc1394-2.x.
-
-*/
-
-#ifndef vp1394Grabber_h
-#define vp1394Grabber_h
-
-#include <visp/vpConfig.h>
-
-#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
-
-#if defined(VISP_HAVE_DC1394_1)
-
-#include <string>
-
-#include <libraw1394/raw1394.h>
-#include <libdc1394/dc1394_control.h>
-
-#include <visp/vpImage.h>
-#include <visp/vpFrameGrabber.h>
-#include <visp/vpRGBa.h>
-#include <visp/vpList.h>
-
-
-
-/*!
-  \class vp1394Grabber
-
-  \ingroup Framegrabber CameraDriver
-
-  \brief Class for firewire ieee1394 video devices using libdc1394-1.x api
-
-  \deprecated This class is deprecated. You should use
-  vp1394TwoGrabber class instead.
-
-  Needs libraw1394-1.2.0 and libdc1394-1.1.0 or more recent versions
-  available on http://sourceforge.net.
-
-  This class was tested with Marlin F033C and F131B cameras. This grabber is
-  not working with a PointGrey DragonFly 2 camera. Since libdc1394-1.x
-  is deprecated, you should better use vp1394TwoGrabber based on
-  libdc1394-2.x.
-
-  The code below shows how to use this class.
-  \code
-#include <visp/vpConfig.h>
-#include <visp/vpImage.h>
-#include <visp/vpImageIo.h>
-#include <visp/vp1394Grabber.h>
-
-int main()
-{
-#if defined(VISP_HAVE_DC1394_1)
-  vpImage<unsigned char> I; // Create a gray level image container
-  vp1394Grabber g;          // Create a grabber based on libdc1394-1.x third party lib
-  g.setFormat(FORMAT_VGA_NONCOMPRESSED); // Format_0
-  g.setMode(MODE_640x480_MONO);          // Mode 5
-  g.setFramerate(FRAMERATE_15);          // 15 fps
-
-  g.open(I);                           // Open the framegrabber
-  g.acquire(I);                        // Acquire an image
-  vpImageIo::write(I, "image.pgm"); // Write image on the disk
-#endif
-}
-  \endcode
-
-  \author  Fabien Spindler (Fabien.Spindler@irisa.fr), Irisa / Inria Rennes
-
-*/
-class VISP_EXPORT vp1394Grabber : public vpFrameGrabber
-{
-public:
-  /*! \enum vp1394ImageFormatType
-  Supported image coding format.
-  */
-  typedef enum {
-    YUV444, /*!< YUV 4:4:4 coding format (24 bits/pixel) */
-    YUV422, /*!< YUV 4:2:2 coding format (16 bits/pixel) */
-    YUV411, /*!< YUV 4:1:1 coding format (12 bits/pixel) */
-    RGB,    /*!< RGB coding format (24 bits/pixel) */
-    RGBa,   /*!< RGBa coding format (32 bits/pixel) */
-    MONO,   /*!< MONO8 coding format (8 bits/pixel) */
-    MONO16  /*!< MONO16 coding format (16 bits/pixel) */
-  } vp1394ImageFormatType;
-
-  static const int DROP_FRAMES; // Number of frames to drop
-  static const int NUM_BUFFERS; // Number of buffers
-  static const int MAX_PORTS;   // Port maximal number
-  static const int MAX_CAMERAS; // Maximal number of cameras on the bus
-
-  static const char * strFormats[NUM_FORMATS];
-  static const char * strModesInFormat0[NUM_FORMAT0_MODES];
-  static const char * strModesInFormat1[NUM_FORMAT1_MODES];
-  static const char * strModesInFormat2[NUM_FORMAT2_MODES];
-  static const char * strModesInFormat6[NUM_FORMAT6_MODES];
-  static const char * strModesInFormat7[NUM_MODE_FORMAT7];
-  static const char * strColorsInFormat7[NUM_COLOR_FORMAT7];
-  static const char * strFramerates[NUM_FRAMERATES];
-
-
-public:
-  vp_deprecated vp1394Grabber();
-  vp_deprecated vp1394Grabber(vpImage<unsigned char> &I);
-  virtual ~vp1394Grabber();
-
-  void setCamera(unsigned int camera);
-  void getCamera(unsigned int &camera);
-
-  void setFormat(int format);
-  void getFormat(int & format);
-  int  getFormatSupported(vpList<int> & formats);
-
-  void setMode(int mode);
-  void getMode(int & mode);
-  int  getModeSupported(int format, vpList<int> & modes);
-
-  void setFramerate(int framerate);
-  void getFramerate(int & framerate);
-  int  getFramerateSupported(int format, int mode, vpList<int> & framerates);
-
-  int  convertFormat   (std::string format);
-  int  convertMode     (std::string mode);
-  int  convertFramerate(std::string framerate);
-
-  std::string convertFormat   (int format);
-  std::string convertMode     (int mode);
-  std::string convertFramerate(int framerate);
-
-  void setShutter(unsigned int shutter);
-  void getShutter(unsigned int &min_shutter,
-		  unsigned int &shutter,
-		  unsigned int &max_shutter);
-
-  void setGain(unsigned int gain);
-  void getGain(unsigned int &min_gain,
-	       unsigned int &gain,
-	       unsigned int &max_gain);
-
-  void open(vpImage<unsigned char> &I);
-  void acquire(vpImage<unsigned char> &I);
-  void open(vpImage<vpRGBa> &I);
-  void acquire(vpImage<vpRGBa> &I);
-  void close();
-
-  void getWidth (unsigned int &width);
-  void getHeight(unsigned int &height);
-  void getNumCameras(unsigned int &cameras);
-
-
-private:
-
-  void open();
-  void setup();
-
-  void getImageCharacteristics(int _format, int _mode,
-			       int &width, int &height,
-			       vp1394ImageFormatType &imageformat);
-  int* dmaCapture(bool waiting = true);
-  void dmaDoneWithBuffer();
-
-  void startIsoTransmission();
-  void stopIsoTransmission();
-
-private:
-  bool iso_transmission_started;
-  bool handle_created;
-  bool camera_found;
-  bool camera_nodes_allocated;
-  bool dma_started;
-  unsigned int  num_cameras;
-  /* declarations for libdc1394 */
-  raw1394handle_t      *handles; // MAX_CAMERAS
-  dc1394_cameracapture *cameras; // MAX_CAMERAS
-  nodeid_t             *camera_nodes;
-  dc1394_miscinfo      miscinfo;
-  int                  *cam_count; // MAX_CAMERAS
-
-  /* declarations for video1394 */
-  char device_name[FILENAME_MAX];
-
-  unsigned int camera;
-  // Camera settings
-  int  *pformat;    // MAX_CAMERAS
-  int  *pmode;      // MAX_CAMERAS
-  int  *pframerate; // MAX_CAMERAS
-  bool verbose;
-
-  // Image settings
-  int *_width;  // MAX_CAMERAS
-  int *_height; // MAX_CAMERAS
-  vp1394ImageFormatType *image_format; // MAX_CAMERAS
-} ;
-
-#endif
-#endif
-#endif
diff --git a/src/device/framegrabber/1394/vp1394TwoGrabber.cpp b/src/device/framegrabber/1394/vp1394TwoGrabber.cpp
index a5a6d45d..f76e891d 100644
--- a/src/device/framegrabber/1394/vp1394TwoGrabber.cpp
+++ b/src/device/framegrabber/1394/vp1394TwoGrabber.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vp1394TwoGrabber.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vp1394TwoGrabber.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -168,28 +168,20 @@ int main()
 
 */
 vp1394TwoGrabber::vp1394TwoGrabber(bool reset)
+  : camera(NULL), cameras(NULL), num_cameras(0), camera_id(0), verbose(false), camIsOpen(NULL),
+    num_buffers(4), // ring buffer size
+    isDataModified(NULL), initialShutterMode(NULL), dataCam(NULL)
+  #ifdef VISP_HAVE_DC1394_2_CAMERA_ENUMERATE // new API > libdc1394-2.0.0-rc7
+  , d(NULL),
+    list(NULL)
+  #endif
 {
   // protected members
   width = height = 0;
 
   // private members
-  num_cameras = 0;
-  cameras = NULL;
-  camera_id = 0;
-  verbose = false;//true;
-  camIsOpen = NULL;
   init = false;
-  cameras = NULL;
-#ifdef VISP_HAVE_DC1394_2_CAMERA_ENUMERATE // new API > libdc1394-2.0.0-rc7
-  d = NULL;
-  list = NULL;
-#endif
-  num_buffers = 4; // ring buffer size
 
-  isDataModified = NULL; 
-  initialShutterMode = NULL;
-  dataCam = NULL; 
-  
   reset = false;
   initialize(reset);
   
@@ -220,7 +212,7 @@ vp1394TwoGrabber::~vp1394TwoGrabber()
   If multiples cameras are connected on the bus, select the camero to dial
   with.
 
-  \param camera_id : A camera identifier or GUID. By identifier, we
+  \param cam_id : A camera identifier or GUID. By identifier, we
   mean a value comprised between 0 (the first camera found on the bus)
   and the number of cameras found on the bus and returned by
   getNumCameras() minus 1. If two cameras are connected on the bus,
@@ -332,24 +324,23 @@ int main()
 }
   \endcode
 
-
   \sa setFormat(), setVideoMode(), setFramerate(), getNumCameras()
 
 */
 void
-vp1394TwoGrabber::setCamera(uint64_t camera_id)
+vp1394TwoGrabber::setCamera(uint64_t cam_id)
 {
   // Suppose that if camera_id is a camera GUID, this value is greater
   // than the number of cameras connected to the bus
-  if (camera_id >= num_cameras) {
+  if (cam_id >= num_cameras) {
     // Check if camera_id is a camera guid
     bool is_guid = false;
     // check if the camera_id is a guid
     for (unsigned int i=0; i< num_cameras; i++) {
       if (cameras[i]->guid == camera_id) {
-	this->camera_id = i; 
-	is_guid = true;
-	break;
+        this->camera_id = i;
+        is_guid = true;
+        break;
       }
     }
     if (is_guid == false) {
@@ -362,7 +353,7 @@ vp1394TwoGrabber::setCamera(uint64_t camera_id)
     }
   }
   else {
-    this->camera_id =  camera_id;
+    this->camera_id =  cam_id;
   }
 
   // create a pointer to the working camera
@@ -374,7 +365,7 @@ vp1394TwoGrabber::setCamera(uint64_t camera_id)
 
   Get the active camera identifier on the bus.
 
-  \param camera_id : The active camera identifier. The value is
+  \param cam_id : The active camera identifier. The value is
   comprised between 0 (the first camera) and the number of cameras
   found on the bus returned by getNumCameras() minus 1.
 
@@ -385,10 +376,10 @@ vp1394TwoGrabber::setCamera(uint64_t camera_id)
 
 */
 void
-vp1394TwoGrabber::getCamera(uint64_t &camera_id)
+vp1394TwoGrabber::getCamera(uint64_t &cam_id)
 {
   if (num_cameras) {
-    camera_id = this->camera_id;
+    cam_id = this->camera_id;
   }
   else {
     close();
@@ -434,7 +425,7 @@ vp1394TwoGrabber::getCamera()
 
 */
 void
-vp1394TwoGrabber::getNumCameras(unsigned int &ncameras)
+vp1394TwoGrabber::getNumCameras(unsigned int &ncameras) const
 {
   if (! num_cameras) {
     vpCTRACE << "No camera found..."<< std::endl;
@@ -452,7 +443,7 @@ vp1394TwoGrabber::getNumCameras(unsigned int &ncameras)
 
 */
 unsigned int
-vp1394TwoGrabber::getNumCameras()
+vp1394TwoGrabber::getNumCameras() const
 {
   unsigned int ncameras = 0;
   if (! num_cameras) {
@@ -1345,10 +1336,10 @@ vp1394TwoGrabber::isColorCodingSupported(vp1394TwoVideoModeType mode,
 
   \param top : Position of the upper left roi corner.
 
-  \param width : Roi width. If width is set to 0, uses the maximum
+  \param w : Roi width. If width is set to 0, uses the maximum
   allowed image width.
 
-  \param height : Roi height. If width is set to 0, uses the maximum
+  \param h : Roi height. If width is set to 0, uses the maximum
   allowed image height.
 
 
@@ -1362,7 +1353,7 @@ vp1394TwoGrabber::isColorCodingSupported(vp1394TwoVideoModeType mode,
 */
 void
 vp1394TwoGrabber::setFormat7ROI(unsigned int left, unsigned int top,
-                                unsigned int width, unsigned int height)
+                                unsigned int w, unsigned int h)
 {
   open();
   if (! num_cameras) {
@@ -1397,8 +1388,8 @@ vp1394TwoGrabber::setFormat7ROI(unsigned int left, unsigned int top,
     }
 #if 0
     vpTRACE("left: %d top: %d width: %d height: %d", left, top,
-            width == 0 ? DC1394_USE_MAX_AVAIL: width,
-            height == 0 ? DC1394_USE_MAX_AVAIL : height);
+            width == 0 ? DC1394_USE_MAX_AVAIL: w,
+            height == 0 ? DC1394_USE_MAX_AVAIL : h);
     vpTRACE("max_width: %d max_height: %d", max_width, max_height);
 #endif
 
@@ -1416,27 +1407,26 @@ vp1394TwoGrabber::setFormat7ROI(unsigned int left, unsigned int top,
     int32_t roi_width;
     int32_t roi_height;
 
-    if (width != 0) {
+    if (w != 0) {
       // Check if roi width is acceptable (ie roi is contained in the image)
-      if (width > (max_width - left))
-        width = (max_width - left);
-      roi_width = (int32_t)width;
+      if (w > (max_width - left))
+        w = (max_width - left);
+      roi_width = (int32_t)w;
     }
     else {
       roi_width = DC1394_USE_MAX_AVAIL;
     }
 
-    if (height != 0) {
+    if (h != 0) {
       // Check if roi height is acceptable (ie roi is contained in the image)
-      if (height > (max_height - top))
-        height = (max_height - top);
-      roi_height = (int32_t)height;
+      if (h > (max_height - top))
+        h = (max_height - top);
+      roi_height = (int32_t)h;
     }
     else {
       roi_height = DC1394_USE_MAX_AVAIL;
     }
 
-
     if (dc1394_format7_set_roi(camera, _videomode,
                                (dc1394color_coding_t) DC1394_QUERY_FROM_CAMERA, // color_coding
                                DC1394_USE_MAX_AVAIL/*DC1394_QUERY_FROM_CAMERA*/, // bytes_per_packet
@@ -1530,7 +1520,7 @@ vp1394TwoGrabber::initialize(bool reset)
       dc1394_reset_bus(cameras[0]);
     }
 
-    if (list != NULL)
+    // if (list != NULL)
       dc1394_camera_free_list (list);
     list = NULL;
 
@@ -1771,7 +1761,7 @@ vp1394TwoGrabber::setRingBufferSize(unsigned int size)
   \sa setRingBufferSize()
 */
 unsigned int
-vp1394TwoGrabber::getRingBufferSize()
+vp1394TwoGrabber::getRingBufferSize() const
 {
   return num_buffers;
 }
@@ -1781,6 +1771,9 @@ vp1394TwoGrabber::getRingBufferSize()
   and max exposure time, but only for AVT cameras. In that case
   use setAutoShutter(unsigned int, unsigned int).
 
+  \param enable : Flag to enable or disable the auto shutter. If false, set the
+  shutter as manual.
+
   \exception vpFrameGrabberException::initializationError : If no
   camera found on the bus.
 
@@ -1813,7 +1806,7 @@ int main()
   \sa setAutoShutter(unsigned int, unsigned int), getAutoShutter()
 */
 void
-vp1394TwoGrabber::setAutoShutter()
+vp1394TwoGrabber::setAutoShutter(bool enable)
 {
   if (! num_cameras) {
     close();
@@ -1822,6 +1815,14 @@ vp1394TwoGrabber::setAutoShutter()
                                    "No camera found") );
   }
 
+  dc1394feature_mode_t mode;
+  if (enable) {
+    mode = DC1394_FEATURE_MODE_AUTO;
+  }
+  else {
+    mode = DC1394_FEATURE_MODE_MANUAL;
+  }
+
   if (dc1394_feature_set_power(camera, DC1394_FEATURE_SHUTTER, DC1394_ON)
       != DC1394_SUCCESS) {
     //       vpERROR_TRACE("Cannot set shutter on. \n");
@@ -1832,7 +1833,7 @@ vp1394TwoGrabber::setAutoShutter()
 
   if (dc1394_feature_set_mode(camera,
             DC1394_FEATURE_SHUTTER,
-            DC1394_FEATURE_MODE_AUTO)
+            mode)
       != DC1394_SUCCESS) {
     //       vpERROR_TRACE("Cannot set auto shutter. \n");
     close();
@@ -1930,6 +1931,9 @@ vp1394TwoGrabber::getAutoShutter(unsigned int &minvalue, unsigned int &maxvalue)
   and max gain, but only for AVT cameras. In that case
   use setAutoGain(unsigned int, unsigned int).
 
+  \param enable : Flag to enable or disable the auto gain. If false, set the
+  gain as manual.
+
   \exception vpFrameGrabberException::initializationError : If no
   camera found on the bus.
 
@@ -1948,7 +1952,7 @@ int main()
   vp1394TwoGrabber g(false); // Don't reset the bus
   g.setVideoMode(vp1394TwoGrabber::vpVIDEO_MODE_FORMAT7_0 );
   g.setColorCoding(vp1394TwoGrabber::vpCOLOR_CODING_MONO8);
-  g.setAutoGain(); // Enable auto gain
+  g.setAutoGain(true); // Enable auto gain
   g.setIsoTransmissionSpeed(vp1394TwoGrabber::vpISO_SPEED_800); // 1394b
   while(1)
     g.acquire(I);
@@ -1962,7 +1966,7 @@ int main()
   \sa setAutoGain(unsigned int, unsigned int), getAutoGain()
 */
 void
-vp1394TwoGrabber::setAutoGain()
+vp1394TwoGrabber::setAutoGain(bool enable)
 {
   if (! num_cameras) {
     close();
@@ -1971,7 +1975,15 @@ vp1394TwoGrabber::setAutoGain()
                                    "No camera found") );
   }
 
-  if (dc1394_feature_set_power(camera, DC1394_FEATURE_SHUTTER, DC1394_ON)
+  dc1394feature_mode_t mode;
+  if (enable) {
+    mode = DC1394_FEATURE_MODE_AUTO;
+  }
+  else {
+    mode = DC1394_FEATURE_MODE_MANUAL;
+  }
+
+  if (dc1394_feature_set_power(camera, DC1394_FEATURE_GAIN, DC1394_ON)
       != DC1394_SUCCESS) {
     //       vpERROR_TRACE("Cannot set shutter on. \n");
     close();
@@ -1981,7 +1993,7 @@ vp1394TwoGrabber::setAutoGain()
 
   if (dc1394_feature_set_mode(camera,
             DC1394_FEATURE_GAIN,
-            DC1394_FEATURE_MODE_AUTO)
+            mode)
       != DC1394_SUCCESS) {
     //       vpERROR_TRACE("Cannot set auto gain. \n");
     close();
@@ -2924,7 +2936,7 @@ vp1394TwoGrabber::acquire(vpImage<vpRGBa> &I,
   Get the image width. It depends on the camera video mode setVideoMode(). The
   image size is only available after a call to open() or acquire().
 
-  \param width : The image width, zero if the required camera is not available.
+  \param w : The image width, zero if the required camera is not available.
 
   \exception vpFrameGrabberException::initializationError : If no
   camera found on the bus.
@@ -2935,7 +2947,7 @@ vp1394TwoGrabber::acquire(vpImage<vpRGBa> &I,
   \sa getHeight(), open(), acquire()
 
 */
-void vp1394TwoGrabber::getWidth(unsigned int &width)
+void vp1394TwoGrabber::getWidth(unsigned int &w)
 {
   if (! num_cameras) {
     close();
@@ -2944,7 +2956,7 @@ void vp1394TwoGrabber::getWidth(unsigned int &width)
                                    "No camera found") );
   }
 
-  width = this->width;
+  w = this->width;
 }
 
 /*!
@@ -2981,7 +2993,7 @@ unsigned int vp1394TwoGrabber::getWidth()
   setVideoMode(). The image size is only available after a call to
   open() or acquire().
 
-  \param height : The image height.
+  \param h : The image height.
 
   \exception vpFrameGrabberException::initializationError : If no
   camera found on the bus.
@@ -2992,7 +3004,7 @@ unsigned int vp1394TwoGrabber::getWidth()
   \sa getWidth()
 
 */
-void vp1394TwoGrabber::getHeight(unsigned int &height)
+void vp1394TwoGrabber::getHeight(unsigned int &h)
 {
   if (! num_cameras) {
     close();
@@ -3001,7 +3013,7 @@ void vp1394TwoGrabber::getHeight(unsigned int &height)
                                    "No camera found") );
   }
 
-  height = this->height;
+  h = this->height;
 }
 /*!
 
@@ -3096,8 +3108,8 @@ std::string vp1394TwoGrabber::videoMode2string(vp1394TwoVideoModeType videomode)
     _str = strVideoMode[_videomode - DC1394_VIDEO_MODE_MIN];
   }
   else {
-    vpCERROR << "The video mode " << videomode
-    << " is not supported by the camera" << std::endl;
+    vpCERROR << "The video mode " << (int)videomode
+             << " is not supported by the camera" << std::endl;
   }
 
   return _str;
@@ -3125,8 +3137,8 @@ std::string vp1394TwoGrabber::framerate2string(vp1394TwoFramerateType fps)
     _str = strFramerate[_fps - DC1394_FRAMERATE_MIN];
   }
   else {
-    vpCERROR << "The framerate " << fps
-    << " is not supported by the camera" << std::endl;
+    vpCERROR << "The framerate " << (int)fps
+             << " is not supported by the camera" << std::endl;
   }
 
   return _str;
@@ -3155,8 +3167,8 @@ std::string vp1394TwoGrabber::colorCoding2string(vp1394TwoColorCodingType colorc
 
   }
   else {
-    vpCERROR << "The color coding " << colorcoding
-    << " is not supported by the camera" << std::endl;
+    vpCERROR << "The color coding " << (int)colorcoding
+             << " is not supported by the camera" << std::endl;
   }
 
   return _str;
@@ -3319,7 +3331,7 @@ void vp1394TwoGrabber::resetBus()
   dc1394_camera_free (camera);
   dc1394_free (d);
   d = NULL;
-  if (cameras != NULL)
+  //if (cameras != NULL)
     delete [] cameras;
   cameras = NULL ;
 #elif defined VISP_HAVE_DC1394_2_FIND_CAMERAS // old API <= libdc1394-2.0.0-rc7
@@ -3764,7 +3776,7 @@ vp1394TwoGrabber::getFramerateSupported(vp1394TwoVideoModeType mode,
 */
 uint32_t
 vp1394TwoGrabber::getColorCodingSupported(vp1394TwoVideoModeType mode,
-    vpList<vp1394TwoColorCodingType> & codings)
+                                          vpList<vp1394TwoColorCodingType> & codings)
 {
   if (! num_cameras) {
     close();
diff --git a/src/device/framegrabber/1394/vp1394TwoGrabber.h b/src/device/framegrabber/1394/vp1394TwoGrabber.h
index 123a1e72..4422023f 100644
--- a/src/device/framegrabber/1394/vp1394TwoGrabber.h
+++ b/src/device/framegrabber/1394/vp1394TwoGrabber.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vp1394TwoGrabber.h 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vp1394TwoGrabber.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -382,10 +382,10 @@ class VISP_EXPORT vp1394TwoGrabber : public vpFrameGrabber
   void getGuid(uint64_t &guid);
   void getHeight(unsigned int &height);
   unsigned int getHeight();
-  void getNumCameras(unsigned int &ncameras);
-  unsigned int getNumCameras();
+  void getNumCameras(unsigned int &ncameras) const;
+  unsigned int getNumCameras() const;
   unsigned int getParameterValue(vp1394TwoParametersType param);
-  unsigned int getRingBufferSize();
+  unsigned int getRingBufferSize() const;
   void getVideoMode(vp1394TwoVideoModeType & videomode);
   uint32_t getVideoModeSupported(std::list<vp1394TwoVideoModeType> & videomodes);
   void getWidth(unsigned int &width);
@@ -406,9 +406,9 @@ class VISP_EXPORT vp1394TwoGrabber : public vpFrameGrabber
 
   void resetBus();
 
-  void setAutoGain();
+  void setAutoGain(bool enable = true);
   void setAutoGain(unsigned int minvalue, unsigned int maxvalue);
-  void setAutoShutter();
+  void setAutoShutter(bool enable = true);
   void setAutoShutter(unsigned int minvalue, unsigned int maxvalue);
   void setCamera(uint64_t camera);
   void setColorCoding(vp1394TwoColorCodingType coding);
diff --git a/src/device/framegrabber/OpenCV/vpOpenCVGrabber.cpp b/src/device/framegrabber/OpenCV/vpOpenCVGrabber.cpp
index f4e0c0ca..47981f98 100644
--- a/src/device/framegrabber/OpenCV/vpOpenCVGrabber.cpp
+++ b/src/device/framegrabber/OpenCV/vpOpenCVGrabber.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpOpenCVGrabber.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpOpenCVGrabber.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,17 +58,13 @@
 	Basic Constructor.
 */
 vpOpenCVGrabber::vpOpenCVGrabber()
+  : capture(NULL), DeviceType(0), flip(false)
 {
 	// public memebers
 	init = false;
 
 	// protected members
 	width = height = 0;
-
-	// private members
-	capture = NULL;
-	DeviceType = 0;
-	flip = false;
 }
 
 
@@ -245,14 +241,14 @@ void vpOpenCVGrabber::setFramerate(const double framerate)
   
   \warning This function must be called after open() method.
 
-	\param width : The requested value of the captured image width.
+  \param w : The requested value of the captured image width.
 
 	\exception vpFrameGrabberException::initializationError If no
 	camera was found.
 */
-void vpOpenCVGrabber::setWidth(const unsigned int width)
+void vpOpenCVGrabber::setWidth(const unsigned int w)
 {
-	if ( cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, width))
+  if ( cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, w))
 	{
 	  	close();
 		vpERROR_TRACE("Impossible to set the size of the grabber");
@@ -260,7 +256,7 @@ void vpOpenCVGrabber::setWidth(const unsigned int width)
 										"Impossible to set the size of the grabber") );
 	}
 
-	this->width = width;
+  this->width = w;
 }
 
 /*!
@@ -268,14 +264,14 @@ void vpOpenCVGrabber::setWidth(const unsigned int width)
 
   \warning This function must be called after open() method.
 
-	\param height : The requested value of the captured image height.
+  \param h : The requested value of the captured image height.
 
 	\exception vpFrameGrabberException::initializationError If no
 	camera was found.
 */
-void vpOpenCVGrabber::setHeight(const unsigned int height)
+void vpOpenCVGrabber::setHeight(const unsigned int h)
 {
-	if ( cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, height))
+  if ( cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, h))
 	{
 	  	close();
 		vpERROR_TRACE("Impossible to set the size of the grabber");
@@ -283,7 +279,7 @@ void vpOpenCVGrabber::setHeight(const unsigned int height)
 										"Impossible to set the size of the grabber") );
 	}
 
-	this->height = height;
+  this->height = h;
 }
 
 /*!
diff --git a/src/device/framegrabber/OpenCV/vpOpenCVGrabber.h b/src/device/framegrabber/OpenCV/vpOpenCVGrabber.h
index 61b10335..d9f11e2b 100644
--- a/src/device/framegrabber/OpenCV/vpOpenCVGrabber.h
+++ b/src/device/framegrabber/OpenCV/vpOpenCVGrabber.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpOpenCVGrabber.h 4216 2013-04-17 09:06:18Z fspindle $
+ * $Id: vpOpenCVGrabber.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/framegrabber/directshow/vpDirectShowDevice.cpp b/src/device/framegrabber/directshow/vpDirectShowDevice.cpp
index 94536e69..21de5903 100644
--- a/src/device/framegrabber/directshow/vpDirectShowDevice.cpp
+++ b/src/device/framegrabber/directshow/vpDirectShowDevice.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDirectShowDevice.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpDirectShowDevice.cpp 4620 2014-01-27 21:28:32Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -120,5 +120,10 @@ bool vpDirectShowDevice::operator==(vpDirectShowDevice& dev)
 		&& devPath==dev.devPath;
 }
 
+VISP_EXPORT std::ostream& operator<<(std::ostream& os, vpDirectShowDevice& dev)
+{
+  return os<<dev.name<<std::endl<<dev.desc<<std::endl<<dev.devPath;
+}
+
 #endif
 #endif
diff --git a/src/device/framegrabber/directshow/vpDirectShowDevice.h b/src/device/framegrabber/directshow/vpDirectShowDevice.h
index d3bc59cc..6f35fe23 100644
--- a/src/device/framegrabber/directshow/vpDirectShowDevice.h
+++ b/src/device/framegrabber/directshow/vpDirectShowDevice.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDirectShowDevice.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpDirectShowDevice.h 4620 2014-01-27 21:28:32Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -79,10 +79,7 @@ public:
 
 	bool operator==(vpDirectShowDevice& dev);
 
-	friend VISP_EXPORT std::ostream& operator<<(std::ostream& os, vpDirectShowDevice& dev)
-	{
-		return os<<dev.name<<std::endl<<dev.desc<<std::endl<<dev.devPath;
-	}
+  friend VISP_EXPORT std::ostream& operator<<(std::ostream& os, vpDirectShowDevice& dev);
 };
 #endif
 #endif
diff --git a/src/device/framegrabber/directshow/vpDirectShowGrabber.cpp b/src/device/framegrabber/directshow/vpDirectShowGrabber.cpp
index f49bb4f2..22355688 100644
--- a/src/device/framegrabber/directshow/vpDirectShowGrabber.cpp
+++ b/src/device/framegrabber/directshow/vpDirectShowGrabber.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDirectShowGrabber.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpDirectShowGrabber.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/framegrabber/directshow/vpDirectShowGrabber.h b/src/device/framegrabber/directshow/vpDirectShowGrabber.h
index ddc20276..d360e26b 100644
--- a/src/device/framegrabber/directshow/vpDirectShowGrabber.h
+++ b/src/device/framegrabber/directshow/vpDirectShowGrabber.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDirectShowGrabber.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpDirectShowGrabber.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/framegrabber/directshow/vpDirectShowGrabberImpl.cpp b/src/device/framegrabber/directshow/vpDirectShowGrabberImpl.cpp
index 80788896..c2c48933 100755
--- a/src/device/framegrabber/directshow/vpDirectShowGrabberImpl.cpp
+++ b/src/device/framegrabber/directshow/vpDirectShowGrabberImpl.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDirectShowGrabberImpl.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpDirectShowGrabberImpl.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/framegrabber/directshow/vpDirectShowGrabberImpl.h b/src/device/framegrabber/directshow/vpDirectShowGrabberImpl.h
index 7133ec92..6f07bde7 100755
--- a/src/device/framegrabber/directshow/vpDirectShowGrabberImpl.h
+++ b/src/device/framegrabber/directshow/vpDirectShowGrabberImpl.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDirectShowGrabberImpl.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpDirectShowGrabberImpl.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/framegrabber/directshow/vpDirectShowSampleGrabberI.h b/src/device/framegrabber/directshow/vpDirectShowSampleGrabberI.h
index da66cf35..f233f3c1 100644
--- a/src/device/framegrabber/directshow/vpDirectShowSampleGrabberI.h
+++ b/src/device/framegrabber/directshow/vpDirectShowSampleGrabberI.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDirectShowSampleGrabberI.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpDirectShowSampleGrabberI.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/framegrabber/disk/vpDiskGrabber.cpp b/src/device/framegrabber/disk/vpDiskGrabber.cpp
index e31e6e4d..d1c78cd7 100644
--- a/src/device/framegrabber/disk/vpDiskGrabber.cpp
+++ b/src/device/framegrabber/disk/vpDiskGrabber.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDiskGrabber.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpDiskGrabber.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -47,22 +47,30 @@
   Elementary constructor.
 */
 vpDiskGrabber::vpDiskGrabber()
+  : image_number(0), image_step(1), number_of_zero(0), useGenericName(false)
 {
   setDirectory("/tmp");
   setBaseName("I");
-  setImageNumber(0);
-  setStep(1);
-  setNumberOfZero(0);
   setExtension("pgm");
 
   init = false;
-  useGenericName = false;
 }
 
 
-vpDiskGrabber::vpDiskGrabber(const char *genericName)
+vpDiskGrabber::vpDiskGrabber(const char *generic_name)
+  : image_number(0), image_step(1), number_of_zero(0), useGenericName(false)
 {
-  strcpy(this->genericName, genericName);
+  setDirectory("/tmp");
+  setBaseName("I");
+  setExtension("pgm");
+
+  init = false;
+  if (strlen( generic_name ) >= FILENAME_MAX) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the generic name"));
+  }
+
+  strcpy(this->genericName, generic_name);
   useGenericName = true;
 }
 
@@ -82,16 +90,13 @@ vpDiskGrabber::vpDiskGrabber(const char *dir, const char *basename,
                              long number,
                              int step, unsigned int noz,
                              const char *ext)
+  : image_number(number), image_step(step), number_of_zero(noz), useGenericName(false)
 {
   setDirectory(dir);
   setBaseName(basename);
-  setImageNumber(number);
-  setStep(step);
-  setNumberOfZero(noz);
   setExtension(ext);
 
   init = false;
-  useGenericName = false;
 }
 
 void
@@ -244,19 +249,19 @@ vpDiskGrabber::acquire(vpImage<float> &I)
   Acquire an image: read a pgm image from the disk.
   After this call, the image number is incremented considering the step.
 
-  \param I the read image
-  \param image_number The index of the desired image.
+  \param I : The image read from a file.
+  \param img_number : The number of the desired image.
  */
 void
-vpDiskGrabber::acquire(vpImage<unsigned char> &I, long image_number)
+vpDiskGrabber::acquire(vpImage<unsigned char> &I, long img_number)
 {
 
   char name[FILENAME_MAX] ;
 
   if(useGenericName)
-    sprintf(name,genericName,image_number) ;
+    sprintf(name,genericName,img_number) ;
   else
-    sprintf(name,"%s/%s%0*ld.%s",directory,base_name,number_of_zero,image_number,extension) ;
+    sprintf(name,"%s/%s%0*ld.%s",directory,base_name,number_of_zero,img_number,extension) ;
 
   vpDEBUG_TRACE(2, "load: %s\n", name);
 
@@ -270,19 +275,19 @@ vpDiskGrabber::acquire(vpImage<unsigned char> &I, long image_number)
   Acquire an image: read a ppm image from the disk.
   After this call, the image number is incremented considering the step.
 
-  \param I the read image
-  \param image_number The index of the desired image.
+  \param I : The image read from a file.
+  \param img_number : The number of the desired image.
  */
 void
-vpDiskGrabber::acquire(vpImage<vpRGBa> &I, long image_number)
+vpDiskGrabber::acquire(vpImage<vpRGBa> &I, long img_number)
 {
 
   char name[FILENAME_MAX] ;
 
   if(useGenericName)
-    sprintf(name,genericName,image_number) ;
+    sprintf(name,genericName,img_number) ;
   else
-    sprintf(name,"%s/%s%0*ld.%s",directory,base_name,number_of_zero,image_number,extension) ;
+    sprintf(name,"%s/%s%0*ld.%s",directory,base_name,number_of_zero,img_number,extension) ;
 
   vpDEBUG_TRACE(2, "load: %s\n", name);
 
@@ -298,19 +303,19 @@ vpDiskGrabber::acquire(vpImage<vpRGBa> &I, long image_number)
   Acquire an image: read a pfm image from the disk.
   After this call, the image number is incremented considering the step.
 
-  \param I the read image
-  \param image_number The index of the desired image.
+  \param I : The image read from a file.
+  \param img_number : The number of the desired image.
  */
 void
-vpDiskGrabber::acquire(vpImage<float> &I, long image_number)
+vpDiskGrabber::acquire(vpImage<float> &I, long img_number)
 {
 
   char name[FILENAME_MAX] ;
 
   if(useGenericName)
-    sprintf(name,genericName,image_number) ;
+    sprintf(name,genericName,img_number) ;
   else
-    sprintf(name,"%s/%s%0*ld.%s",directory,base_name,number_of_zero,image_number,extension) ;
+    sprintf(name,"%s/%s%0*ld.%s",directory,base_name,number_of_zero,img_number,extension) ;
 
   vpDEBUG_TRACE(2, "load: %s\n", name);
 
@@ -399,8 +404,13 @@ vpDiskGrabber::setNumberOfZero(unsigned int noz)
 }
 
 void
-vpDiskGrabber::setGenericName(const char *genericName)
+vpDiskGrabber::setGenericName(const char *generic_name)
 {
-  strcpy(this->genericName, genericName) ;
+  if (strlen( generic_name ) >= FILENAME_MAX) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the generic name"));
+  }
+
+  strcpy(this->genericName, generic_name) ;
   useGenericName = true;
 }
diff --git a/src/device/framegrabber/disk/vpDiskGrabber.h b/src/device/framegrabber/disk/vpDiskGrabber.h
index eb3b8cfb..a85b70ca 100644
--- a/src/device/framegrabber/disk/vpDiskGrabber.h
+++ b/src/device/framegrabber/disk/vpDiskGrabber.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDiskGrabber.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpDiskGrabber.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/framegrabber/generic-framegrabber/vpFrameGrabber.h b/src/device/framegrabber/generic-framegrabber/vpFrameGrabber.h
index b9bfb74c..975adbd2 100644
--- a/src/device/framegrabber/generic-framegrabber/vpFrameGrabber.h
+++ b/src/device/framegrabber/generic-framegrabber/vpFrameGrabber.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFrameGrabber.h 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vpFrameGrabber.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -121,6 +121,7 @@ public:
   inline  unsigned int getWidth() const { return width ; }
 
 public:
+  vpFrameGrabber() : init(false), height(0), width(0) {};
   virtual ~vpFrameGrabber() { ; }
 
   virtual void open(vpImage<unsigned char> &I) =0 ;
diff --git a/src/device/framegrabber/generic-framegrabber/vpFrameGrabberException.h b/src/device/framegrabber/generic-framegrabber/vpFrameGrabberException.h
index 772263d2..1439f7ab 100644
--- a/src/device/framegrabber/generic-framegrabber/vpFrameGrabberException.h
+++ b/src/device/framegrabber/generic-framegrabber/vpFrameGrabberException.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFrameGrabberException.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFrameGrabberException.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -71,37 +71,32 @@
  */
 class VISP_EXPORT vpFrameGrabberException : public vpException
 {
-public:
-  /*!
+  public:
+    /*!
     \brief Lists the possible error than can be emmited while calling
     vpFrameGrabber member
    */
-  enum errorFrameGrabberCodeEnum
+    enum errorFrameGrabberCodeEnum
     {
       settingError,
       initializationError,
       otherError
     } ;
 
-public:
-  vpFrameGrabberException (const int code, const char * msg)
-    : vpException(code, msg){ ; }
-  vpFrameGrabberException (const int code, const std::string & msg)
-    : vpException(code, msg){ ; }
-  vpFrameGrabberException (const int code)
-    : vpException(code){ ; }
+  public:
+    vpFrameGrabberException (const int id,  const char* format, ...)
+    {
+      this->code = id;
+      va_list args;
+      va_start(args, format);
+      setMessage(format, args);
+      va_end (args);
+    }
+    vpFrameGrabberException (const int id, const std::string & msg)
+      : vpException(id, msg){ ; }
+    vpFrameGrabberException (const int id)
+      : vpException(id){ ; }
 
 };
 
-
-
-
-
 #endif /* #ifndef __vpFrameGrabberException_H */
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/src/device/framegrabber/v4l2/vpV4l2Grabber.cpp b/src/device/framegrabber/v4l2/vpV4l2Grabber.cpp
index 365f7c24..ec0ce3d7 100644
--- a/src/device/framegrabber/v4l2/vpV4l2Grabber.cpp
+++ b/src/device/framegrabber/v4l2/vpV4l2Grabber.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpV4l2Grabber.cpp 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpV4l2Grabber.cpp 4656 2014-02-07 17:21:28Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -919,11 +919,22 @@ vpV4l2Grabber::open()
     if (cap.capabilities & V4L2_CAP_STREAMING)
       fprintf(stdout, "     Support streaming capture.\n");
     else
-      fprintf(stdout, "     Does not support streaming capture.\n");
+      fprintf(stdout, "     Does not support streaming capture\n");
     if(cap.capabilities & V4L2_CAP_ASYNCIO)
-      fprintf(stdout, "     Support asynchronous I/O methods.\n");
+      fprintf(stdout, "     Support asynchronous I/O methods\n");
     else
-      fprintf(stdout, "     Does not support asynchronous I/O methods.\n");
+      fprintf(stdout, "     Does not support asynchronous I/O methods\n");
+    if(cap.capabilities & V4L2_CAP_TIMEPERFRAME)
+      fprintf(stdout, "     Support time per frame field\n");
+    else
+      fprintf(stdout, "     Does not support time per frame field\n");
+    // Get framerate
+    struct v4l2_streamparm streamparm;
+    streamparm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+    if (v4l2_ioctl(fd, VIDIOC_G_PARM, &streamparm) != -1) {
+      fprintf(stdout, "     Current acquisition framerate: %d fps\n",
+              streamparm.parm.output.timeperframe.denominator);
+    }
   }
 
   getCapabilities();
diff --git a/src/device/framegrabber/v4l2/vpV4l2Grabber.h b/src/device/framegrabber/v4l2/vpV4l2Grabber.h
index da741f4d..3c672b86 100644
--- a/src/device/framegrabber/v4l2/vpV4l2Grabber.h
+++ b/src/device/framegrabber/v4l2/vpV4l2Grabber.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpV4l2Grabber.h 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vpV4l2Grabber.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/kinect/vpKinect.cpp b/src/device/kinect/vpKinect.cpp
index cfab762a..9fe7abe1 100644
--- a/src/device/kinect/vpKinect.cpp
+++ b/src/device/kinect/vpKinect.cpp
@@ -1,10 +1,10 @@
 /****************************************************************************
  *
- * $Id: vpKinect.cpp 4329 2013-07-20 07:06:49Z fspindle $
+ * $Id: vpKinect.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/kinect/vpKinect.h b/src/device/kinect/vpKinect.h
index 5eaab28c..d4b2d99b 100644
--- a/src/device/kinect/vpKinect.h
+++ b/src/device/kinect/vpKinect.h
@@ -1,10 +1,10 @@
 /****************************************************************************
  *
- * $Id: vpKinect.h 4131 2013-02-11 20:45:31Z fspindle $
+ * $Id: vpKinect.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/laserscanner/sick/vpSickLDMRS.cpp b/src/device/laserscanner/sick/vpSickLDMRS.cpp
index 86de3d62..78fdf6b0 100644
--- a/src/device/laserscanner/sick/vpSickLDMRS.cpp
+++ b/src/device/laserscanner/sick/vpSickLDMRS.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSickLDMRS.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpSickLDMRS.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -39,22 +39,24 @@
  *
  *****************************************************************************/
 
-#if ( defined(UNIX) && !defined(WIN32) )
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
 
 #include <visp/vpSickLDMRS.h>
 #include <visp/vpMath.h>
 #include <visp/vpDebug.h>
 #include <visp/vpTime.h>
 #include <sys/socket.h>
+#include <sys/select.h>
 #include <netinet/in.h>
 #include <fcntl.h>
 #include <errno.h>
 #include <netdb.h>
 #include <string.h>
-#include <strings.h>
+//#include <strings.h>
 #include <math.h>
 #include <assert.h>
 #include <stdlib.h>
+#include <limits.h>
 
 
 
@@ -72,19 +74,18 @@
   body messages.
 */
 vpSickLDMRS::vpSickLDMRS()
+  : socket_fd(-1), body(NULL), vAngle(), time_offset(0),
+    isFirstMeasure(true), maxlen_body(104000)
 {
   ip = "131.254.12.119";
   port = 12002;
-  body = new unsigned char [104000];
-  isFirstMeasure = true;
-  time_offset = 0;
+  body = new unsigned char [maxlen_body];
 
   vAngle.resize(4); // Vertical angle of the 4 layers
   vAngle[0] = vpMath::rad(-1.2);
   vAngle[1] = vpMath::rad(-0.4); 
   vAngle[2] = vpMath::rad( 0.4); 
   vAngle[3] = vpMath::rad( 1.2);
-
 }
 
 /*!
@@ -99,16 +100,16 @@ vpSickLDMRS::~vpSickLDMRS()
 /*! 
   Initialize the connexion with the Sick LD-MRS laser scanner.
 
-  \param ip : Ethernet address of the laser.
-  \param port : Ethernet port of the laser.
+  \param ip_address : Ethernet address of the laser.
+  \param com_port : Ethernet port of the laser.
 
   \return true if the device was initialized, false otherwise.
   
 */
-bool vpSickLDMRS::setup(std::string ip, int port)
+bool vpSickLDMRS::setup(std::string ip_address, int com_port)
 {
-  setIpAddress( ip );
-  setPort( port );
+  setIpAddress( ip_address );
+  setPort( com_port );
   return ( this->setup() );
 }
 
@@ -130,7 +131,8 @@ bool vpSickLDMRS::setup()
      fprintf(stderr, "Failed to create socket\n"); 
      return false;
   }
-  bzero(&serv_addr, sizeof(serv_addr));
+  //bzero(&serv_addr, sizeof(serv_addr));
+  memset(&serv_addr, 0, sizeof(serv_addr));
   serv_addr.sin_family = AF_INET;                     // Internet/IP
   serv_addr.sin_addr.s_addr = inet_addr(ip.c_str());  // IP address
   serv_addr.sin_port = htons(port);                   // server port
@@ -266,6 +268,9 @@ bool vpSickLDMRS::measure(vpLaserScan laserscan[4])
   double rDist; // radial distance in meters
   vpScanPoint scanPoint;
 
+  if (numPoints > USHRT_MAX-2)
+    throw(vpException (vpException::ioError, "Out of range number of point"));
+
   for (int i=0; i < numPoints; i++) {
     ushortptr = (unsigned short *) (body+44+i*10);
     unsigned char layer = ((unsigned char)  body[44+i*10])&0x0F;
diff --git a/src/device/laserscanner/sick/vpSickLDMRS.h b/src/device/laserscanner/sick/vpSickLDMRS.h
index b6fd4781..062517c5 100644
--- a/src/device/laserscanner/sick/vpSickLDMRS.h
+++ b/src/device/laserscanner/sick/vpSickLDMRS.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSickLDMRS.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpSickLDMRS.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -43,17 +43,18 @@
 
 #include <visp/vpConfig.h>
 
-#if ( defined(UNIX) && !defined(WIN32) )
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
 
 #include <arpa/inet.h>
 #include <iostream>
 #include <vector>
-
+#include <string.h>
 
 #include <visp/vpScanPoint.h>
 #include <visp/vpLaserScan.h>
 #include <visp/vpLaserScanner.h>
 #include <visp/vpColVector.h>
+#include <visp/vpException.h>
 
 /*!
 
@@ -80,7 +81,7 @@
 
 int main()
 {
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   std::string ip = "131.254.12.119";
 
   vpSickLDMRS laser;
@@ -98,7 +99,7 @@ int main()
       vpScanPoint p;
     
       for (unsigned int i=0; i < pointsInLayer.size(); i++) {
-	std::cout << pointsInLayer[i] << std::endl; 
+        std::cout << pointsInLayer[i] << std::endl;
       }
     }
   }
@@ -117,26 +118,42 @@ class VISP_EXPORT vpSickLDMRS : public vpLaserScanner
   };
   vpSickLDMRS();
   /*! Copy constructor. */
-  vpSickLDMRS(const vpSickLDMRS &sick) : vpLaserScanner(sick) {
+  vpSickLDMRS(const vpSickLDMRS &sick)
+    : vpLaserScanner(sick), socket_fd(-1), body(NULL), vAngle(), time_offset(0),
+      isFirstMeasure(true), maxlen_body(104000)
+ {
+    *this = sick;
+  };
+  virtual ~vpSickLDMRS();
+  /*! Copy constructor. */
+  vpSickLDMRS &operator=(const vpSickLDMRS &sick)
+  {
     socket_fd = sick.socket_fd;
+    vAngle = sick.vAngle;
+    time_offset = sick.time_offset;
+    isFirstMeasure = sick.isFirstMeasure;
+    maxlen_body = sick.maxlen_body;
+    if (body) delete [] body;
     body = new unsigned char [104000];
+    memcpy(body, sick.body, maxlen_body);
+    return (*this);
   };
-  virtual ~vpSickLDMRS();
+
   bool setup(std::string ip, int port);
   bool setup();
   bool measure(vpLaserScan laserscan[4]);
 
  protected:
-#ifdef WIN32
+#if defined(_WIN32)
   SOCKET socket_fd;
 #else
   int socket_fd;  
 #endif
- private:
   unsigned char *body;
   vpColVector vAngle; // constant vertical angle for each layer
   double time_offset;
   bool isFirstMeasure;
+  size_t maxlen_body;
  };
 
 #endif
diff --git a/src/device/laserscanner/vpLaserScan.h b/src/device/laserscanner/vpLaserScan.h
index 6ca3763f..b2e57ae5 100644
--- a/src/device/laserscanner/vpLaserScan.h
+++ b/src/device/laserscanner/vpLaserScan.h
@@ -1,10 +1,10 @@
 /****************************************************************************
  *
- * $Id: vpLaserScan.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpLaserScan.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
- * 
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * ("GPL") version 2 as published by the Free Software Foundation.
@@ -12,11 +12,11 @@
  * distribution for additional information about the GNU GPL.
  *
  * For using ViSP with software that can not be combined with the GNU
- * GPL, please contact INRIA about acquiring a ViSP Professional 
+ * GPL, please contact INRIA about acquiring a ViSP Professional
  * Edition License.
  *
  * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
- * 
+ *
  * This software was developed at:
  * INRIA Rennes - Bretagne Atlantique
  * Campus Universitaire de Beaulieu
@@ -26,7 +26,7 @@
  *
  * If you have questions regarding the use of this file, please contact
  * INRIA at visp@inria.fr
- * 
+ *
  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
@@ -67,17 +67,16 @@ class VISP_EXPORT vpLaserScan
 {
  public:
   /*! Default constructor that initialize all the internal variable to zero. */
-  vpLaserScan() {
-    startTimestamp = 0;
-    endTimestamp = 0;
-    measurementId = 0;
-    numSteps = 0;
-    startAngle = 0;
-    stopAngle = 0;
-    numPoints = 0;
+    vpLaserScan()
+      : listScanPoints(), startTimestamp(0), endTimestamp(0), measurementId(0),
+        numSteps(0), startAngle(0), stopAngle(0), numPoints(0)
+  {
   }
   /*! Copy constructor. */
-  vpLaserScan(const vpLaserScan &scan) {
+  vpLaserScan(const vpLaserScan &scan)
+    : listScanPoints(), startTimestamp(0), endTimestamp(0), measurementId(0),
+      numSteps(0), startAngle(0), stopAngle(0), numPoints(0)
+  {
     startTimestamp = scan.startTimestamp;
     endTimestamp = scan.endTimestamp;
     measurementId = scan.measurementId;
@@ -103,32 +102,32 @@ class VISP_EXPORT vpLaserScan
   }
   /*! Specifies the id of former measurements and increases with
       every measurement. */
-  inline void setMeasurementId(const unsigned short &measurementId) {
-    this->measurementId = measurementId;
+  inline void setMeasurementId(const unsigned short &id) {
+    this->measurementId = id;
   }
   /*! Start time of measurement. */
-  inline void setStartTimestamp(const double &startTimestamp) {
-    this->startTimestamp = startTimestamp;
+  inline void setStartTimestamp(const double &start_timestamp) {
+    this->startTimestamp = start_timestamp;
   }
   /*! End time of measurement. */
-  inline void setEndTimestamp(const double &endTimestamp) {
-    this->endTimestamp = endTimestamp;
+  inline void setEndTimestamp(const double &end_timestamp) {
+    this->endTimestamp = end_timestamp;
   }
   /*! Angular steps per scanner rotation. */
-  inline void setNumSteps(const unsigned short &numSteps) {
-    this->numSteps = numSteps;
+  inline void setNumSteps(const unsigned short &num_steps) {
+    this->numSteps = num_steps;
   }
   /*! Start angle of the measurement in angular steps. */
-  inline void setStartAngle(const short &startAngle) {
-    this->startAngle = startAngle;
+  inline void setStartAngle(const short &start_angle) {
+    this->startAngle = start_angle;
   }
   /*! Stop angle of the measurement in angular steps. */
-  inline void setStopAngle(const short &stopAngle) {
-    this->stopAngle = stopAngle;
+  inline void setStopAngle(const short &stop_angle) {
+    this->stopAngle = stop_angle;
   }
   /*! Number of measured points of the measurement. */
-  inline void setNumPoints(const unsigned short &numPoints) {
-    this->numPoints = numPoints;
+  inline void setNumPoints(const unsigned short &num_points) {
+    this->numPoints = num_points;
   }
   /*! Return the measurement start time. */
   inline double getStartTimestamp() {
diff --git a/src/device/laserscanner/vpLaserScanner.h b/src/device/laserscanner/vpLaserScanner.h
index 5c986f4e..bc30f0d7 100644
--- a/src/device/laserscanner/vpLaserScanner.h
+++ b/src/device/laserscanner/vpLaserScanner.h
@@ -1,10 +1,10 @@
 /****************************************************************************
  *
- * $Id: vpLaserScanner.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpLaserScanner.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
- * 
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * ("GPL") version 2 as published by the Free Software Foundation.
@@ -12,11 +12,11 @@
  * distribution for additional information about the GNU GPL.
  *
  * For using ViSP with software that can not be combined with the GNU
- * GPL, please contact INRIA about acquiring a ViSP Professional 
+ * GPL, please contact INRIA about acquiring a ViSP Professional
  * Edition License.
  *
  * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
- * 
+ *
  * This software was developed at:
  * INRIA Rennes - Bretagne Atlantique
  * Campus Universitaire de Beaulieu
@@ -26,7 +26,7 @@
  *
  * If you have questions regarding the use of this file, please contact
  * INRIA at visp@inria.fr
- * 
+ *
  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
@@ -61,12 +61,11 @@ class VISP_EXPORT vpLaserScanner
 {
  public:
   /*! Default constructor that initialize all the internal variable to zero. */
-  vpLaserScanner() {
-    ip = "null";
-    port = 0;
-  };
+    vpLaserScanner() : ip("null"), port(0) {};
   /*! Copy constructor. */
-  vpLaserScanner(const vpLaserScanner &scanner) {
+  vpLaserScanner(const vpLaserScanner &scanner)
+    : ip("null"), port(0)
+  {
     ip = scanner.ip;
     port = scanner.port;
   };
@@ -74,15 +73,15 @@ class VISP_EXPORT vpLaserScanner
   virtual ~vpLaserScanner() {};
 
   /*! Set the Ethernet address of the laser. */
-  void setIpAddress(std::string ip) {
-    this->ip = ip;
+  void setIpAddress(std::string ip_address) {
+    this->ip = ip_address;
   };
-  
+
   /*! Set the communication port. */
-  void setPort(int port) {
-    this->port = port;
+  void setPort(int com_port) {
+    this->port = com_port;
   };
-  
+
  protected:
   std::string ip;
   int port;
diff --git a/src/device/laserscanner/vpScanPoint.h b/src/device/laserscanner/vpScanPoint.h
index 74e135b7..cd8533e3 100644
--- a/src/device/laserscanner/vpScanPoint.h
+++ b/src/device/laserscanner/vpScanPoint.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpScanPoint.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpScanPoint.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -44,6 +44,7 @@
 #include <visp/vpMath.h>
 
 #include <ostream>
+#include <sstream>
 #include <cmath>    // std::fabs
 #include <limits>   // numeric_limits
 #include <math.h>
@@ -75,40 +76,38 @@ class /* VISP_EXPORT */ vpScanPoint // Note that here VISP_EXPORT should not be
 {
  public:
   /*! Default constructor. */
-  inline vpScanPoint() {
-    this->rDist = 0;
-    this->hAngle = 0;
-    this->vAngle = 0;
-  }
+    inline vpScanPoint() : rDist(0), hAngle(0), vAngle(0) {}
   /*! Copy constructor. */
-  inline vpScanPoint(const vpScanPoint &scanpoint) {
+  inline vpScanPoint(const vpScanPoint &scanpoint) : rDist(0), hAngle(0), vAngle(0) {
     this->rDist = scanpoint.rDist;
     this->hAngle = scanpoint.hAngle;
     this->vAngle = scanpoint.vAngle;
   }
   /*! 
     Set the polar point coordinates. 
-    \param rDist : Radial distance in meter.
-    \param hAngle : Horizontal angle in radian.
-    \param vAngle : Vertical angle in radian.   
+    \param r_dist : Radial distance in meter.
+    \param h_angle : Horizontal angle in radian.
+    \param v_angle : Vertical angle in radian.
   */
-  inline vpScanPoint(double rDist, double hAngle, double vAngle) {
-    this->rDist = rDist;
-    this->hAngle = hAngle;
-    this->vAngle = vAngle;
+  inline vpScanPoint(double r_dist, double h_angle, double v_angle)
+    : rDist(r_dist), hAngle(h_angle), vAngle(v_angle)
+  {
+    this->rDist = r_dist;
+    this->hAngle = h_angle;
+    this->vAngle = v_angle;
   }
   /*! Destructor that does nothing. */
   inline virtual ~vpScanPoint() {};
   /*! 
     Set the polar point coordinates. 
-    \param rDist : Radial distance in meter.
-    \param hAngle : Horizontal angle in radian.
-    \param vAngle : Vertical angle in radian.   
+    \param r_dist : Radial distance in meter.
+    \param h_angle : Horizontal angle in radian.
+    \param v_angle : Vertical angle in radian.
   */
-  inline void setPolar(double rDist, double hAngle, double vAngle) {
-    this->rDist = rDist;
-    this->hAngle = hAngle;
-    this->vAngle = vAngle;
+  inline void setPolar(double r_dist, double h_angle, double v_angle) {
+    this->rDist = r_dist;
+    this->hAngle = h_angle;
+    this->vAngle = v_angle;
   }
   /*! 
     Return the radial distance in meter.
@@ -250,13 +249,18 @@ std::cout << p << std::endl;
 
  */
 inline std::ostream &operator << (std::ostream &s, const vpScanPoint &p) {
-   s.precision(10);
-   s << p.getRadialDist() << " "
-     << p.getHAngle() << " "
-     << p.getVAngle() << " "
-     << p.getX() << " "
-     << p.getY() << " " << p.getZ();
-   return s;
- }
+  std::ios_base::fmtflags original_flags = s.flags();
+
+  s.precision(10);
+  s << p.getRadialDist() << " "
+    << p.getHAngle() << " "
+    << p.getVAngle() << " "
+    << p.getX() << " "
+    << p.getY() << " " << p.getZ();
+
+  s.setf(original_flags); // restore s to standard state
+
+  return s;
+}
 
 #endif
diff --git a/src/device/light/vpRingLight.cpp b/src/device/light/vpRingLight.cpp
index d16a526a..2f02477b 100644
--- a/src/device/light/vpRingLight.cpp
+++ b/src/device/light/vpRingLight.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRingLight.cpp 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpRingLight.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/device/light/vpRingLight.h b/src/device/light/vpRingLight.h
index 6d349c37..b1784f40 100644
--- a/src/device/light/vpRingLight.h
+++ b/src/device/light/vpRingLight.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRingLight.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRingLight.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/exceptions/vpException.cpp b/src/exceptions/vpException.cpp
index c0af7b8b..c5eda215 100644
--- a/src/exceptions/vpException.cpp
+++ b/src/exceptions/vpException.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpException.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpException.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -44,44 +44,37 @@
    \brief error that can be emited by the vp class and its derivates
  */
 
+#include <stdio.h>
 #include "visp/vpException.h"
 
 
 /* ------------------------------------------------------------------------- */
 /* --- CONSTRUCTORS -------------------------------------------------------- */
 /* ------------------------------------------------------------------------- */
-
-
-vpException::vpException (int _code)
-    :
-    code (_code),
-    message ()
-
+vpException::vpException (int id)
+  : code (id), message ()
 {
-    return ;
 }
 
-
-vpException::vpException (int _code,
-	     const std::string & _msg)
-    :
-    code (_code),
-    message (_msg)
-
+vpException::vpException (int id, const std::string & msg)
+  : code (id), message (msg)
 {
-    return ;
 }
 
-
-vpException::vpException (int _code,
-	     const char * _msg)
-    :
-    code (_code),
-    message (_msg)
+vpException::vpException (int id, const char* format, ...)
+  : code (id), message ()
 {
-    return ;
+  va_list args;
+  va_start(args, format);
+  setMessage(format, args);
+  va_end (args);
 }
 
+vpException::vpException (const int id, const char* format, va_list args)
+  : code (id), message ()
+{
+  setMessage(format, args);
+}
 /* ------------------------------------------------------------------------ */
 /* --- DESTRUCTORS -------------------------------------------------------- */
 /* ------------------------------------------------------------------------ */
@@ -92,11 +85,19 @@ vpException::vpException (int _code,
 // {
 // }
 
+
+void vpException::setMessage(const char* format, va_list args)
+{
+  char buffer[1024];
+  vsnprintf (buffer, 1024, format, args);
+  std::string msg(buffer);
+  message = msg;
+}
+
 /* ------------------------------------------------------------------------ */
 /* --- ACCESSORS ---------------------------------------------------------- */
 /* ------------------------------------------------------------------------ */
 
-
 const char *vpException::getMessage (void)
 {
     return (this->message) .c_str();
@@ -133,9 +134,8 @@ const char* vpException::what () const throw()
 /* --- OP << --------------------------------------------------------------- */
 /* ------------------------------------------------------------------------- */
 
-std::ostream &
-operator << (std::ostream & os,
-	     const vpException & error)
+VISP_EXPORT std::ostream &
+operator << (std::ostream & os, const vpException & error)
 {
   os << "Error [" << error.code << "]:\t" << error.message << std::endl;
 
diff --git a/src/exceptions/vpException.h b/src/exceptions/vpException.h
index e64558db..d15124f7 100644
--- a/src/exceptions/vpException.h
+++ b/src/exceptions/vpException.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpException.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpException.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -57,6 +57,7 @@
 /* Classes standards. */
 #include <iostream>                /* Classe std::ostream.    */
 #include <string>                  /* Classe string.     */
+#include <stdarg.h>
 
 /* --------------------------------------------------------------------- */
 /* --- CLASS ----------------------------------------------------------- */
@@ -74,23 +75,23 @@
  */
 class VISP_EXPORT vpException : public std::exception
 {
+  protected:
 
-private:
+    //! Contains the error code, see the errorCodeEnum table for details.
+    int code;
 
-  //! Contains the error code, see the errorCodeEnum table for details.
-  int code;
+    //! Contains an error message (can be empty)
+    std::string message;
 
-  //! Contains an error message (can be empty)
-  std::string message;
+    //! Set the message container
+    void setMessage(const char* format, va_list args);
 
-private:
+    //!  forbid the empty constructor (protected)
+    vpException(): code(notInitialized), message("") { };
 
-  //!  forbid the empty constructor (private)
-  vpException();
+  public:
 
-public:
-
-  enum generalExceptionEnum
+    enum generalExceptionEnum
     {
       memoryAllocationError,
       memoryFreeError,
@@ -105,42 +106,31 @@ public:
       notInitialized /*!< Used to indicate that a parameter is not initialized. */
     } ;
 
-  vpException (const int code, const char * msg);
-  vpException (const int code, const std::string & msg);
-  vpException (const int code);
+    vpException (const int code, const char* format, va_list args);
+    vpException (const int code, const char* format, ...);
+    vpException (const int code, const std::string & msg);
+    vpException (const int code);
 
-  /*!
-    Basic destructor. Do nothing but implemented to fit the inheritance from
-    std::exception
-  */
-  virtual ~vpException() throw() {}
+    /*!
+      Basic destructor. Do nothing but implemented to fit the inheritance from
+      std::exception
+    */
+    virtual ~vpException() throw() {}
 
-  //!  send the object code
-  int getCode (void);
+    //!  send the object code
+    int getCode (void);
 
-  //! send a reference (constant) related the error message (can be empty)
-  const std::string &getStringMessage (void);
-  //! send a pointer on the array of  \e char related to the error string.
-  //!Cannot be  \e NULL.
-  const char *getMessage (void);
+    //! send a reference (constant) related the error message (can be empty)
+    const std::string &getStringMessage (void);
+    //! send a pointer on the array of  \e char related to the error string.
+    //!Cannot be  \e NULL.
+    const char *getMessage (void);
 
-  //! print the error structure
-  friend VISP_EXPORT std::ostream & operator << (std::ostream & os,
-				const vpException & art);
+    //! print the error structure
+    friend VISP_EXPORT std::ostream & operator << (std::ostream & os, const vpException & art);
 
-  const char* what () const throw();
+    const char* what () const throw();
 
 };
 
-
-
-
-
 #endif /* #ifndef __vpException_H */
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/src/image/vpColor.cpp b/src/image/vpColor.cpp
index 42e762aa..27598c61 100755
--- a/src/image/vpColor.cpp
+++ b/src/image/vpColor.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpColor.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpColor.cpp 4620 2014-01-27 21:28:32Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -121,3 +121,25 @@ vpColor const vpColor::allColors[vpColor::nbColors] = {
 /*!< Predefined none color with R=G=B=0 and identifier vpColor::id_unknown. */
 vpColor const vpColor::none = vpColor(0, 0, 0, id_unknown);
 
+/*!
+  Compare two colors.
+
+  Return true if the R,G,B components are the same.
+
+  \param c1,c2 : Color to compare.
+*/
+VISP_EXPORT bool operator==( const vpColor &c1, const vpColor &c2 ) {
+  return ( ( c1.R == c2.R ) && ( c1.G == c2.G ) && ( c1.B == c2.B) );
+}
+
+/*!
+
+  Compare two colors.
+
+  Return true if the R,G,B components are different.
+
+  \param c1,c2 : Color to compare.
+*/
+VISP_EXPORT bool operator!=( const vpColor &c1, const vpColor &c2 ) {
+  return ( ( c1.R != c2.R ) || ( c1.G != c2.G ) || ( c1.B == c2.B) );
+}
diff --git a/src/image/vpColor.h b/src/image/vpColor.h
index 5a6b7359..db77d187 100644
--- a/src/image/vpColor.h
+++ b/src/image/vpColor.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpColor.h 4243 2013-05-07 07:58:55Z fspindle $
+ * $Id: vpColor.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -194,33 +194,35 @@ class VISP_EXPORT vpColor : public vpRGBa
   /*!
     Construct a color from its RGB values.
     
-    \param R : Red component.
-    \param G : Green component.
-    \param B : Blue component.
+    \param r : Red component.
+    \param g : Green component.
+    \param b : Blue component.
 
-    \param id : The color identifier to indicate if this color is or
+    \param cid : The color identifier to indicate if this color is or
     not a predefined one.
   */  
-  inline vpColor(unsigned char R, unsigned char G, unsigned char B, 
-		 vpColor::vpColorIdentifier id=vpColor::id_unknown) 
-    : vpRGBa(R, G, B), id(id)
+  inline vpColor(unsigned char r, unsigned char g, unsigned char b,
+     vpColor::vpColorIdentifier cid=vpColor::id_unknown)
+    : vpRGBa(r, g, b), id(cid)
   {};
 
+  friend VISP_EXPORT bool operator==( const vpColor &c1, const vpColor &c2 );
+  friend VISP_EXPORT bool operator!=( const vpColor &c1, const vpColor &c2 );
   /*!
     Set a color from its RGB values.
     
-    \param R : Red component.
-    \param G : Green component.
-    \param B : Blue component.
+    \param r : Red component.
+    \param g : Green component.
+    \param b : Blue component.
 
     The color identifier is set to vpColor::id_unknown to indicate
     that this color is not a predefined one.
 
   */  
-  inline void setColor(unsigned char R, unsigned char G, unsigned char B) {
-    this->R = R;
-    this->G = G;
-    this->B = B;
+  inline void setColor(unsigned char r, unsigned char g, unsigned char b) {
+    this->R = r;
+    this->G = g;
+    this->B = b;
     this->A = 0;
     id = id_unknown;
   };
@@ -231,37 +233,10 @@ class VISP_EXPORT vpColor : public vpRGBa
 
    \param i : color indice
    */
-  static inline vpColor getColor(const unsigned int &i) {return vpColor::allColors[i % vpColor::nbColors];};
+  static inline vpColor getColor(const unsigned int &i) {
+    return vpColor::allColors[i % vpColor::nbColors];
+  };
 
 };
 
-/*!
-  Compare two colors.
-
-  Return true if the R,G,B components are the same.
-
-  \param c1,c2 : Color to compare.
-*/
-VISP_EXPORT inline bool operator==( const vpColor &c1, const vpColor &c2 ) {
-  return ( ( c1.R == c2.R ) && ( c1.G == c2.G ) && ( c1.B == c2.B) );
-}
- 
-/*!
-
-  Compare two colors.
-
-  Return true if the R,G,B components are different.
-
-  \param c1,c2 : Color to compare.
-*/
-VISP_EXPORT inline bool operator!=( const vpColor &c1, const vpColor &c2 ) {
-  return ( ( c1.R != c2.R ) || ( c1.G != c2.G ) || ( c1.B == c2.B) );
-}
-
 #endif
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/src/image/vpImage.h b/src/image/vpImage.h
index 08dd1a23..e485d515 100644
--- a/src/image/vpImage.h
+++ b/src/image/vpImage.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpImage.h 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vpImage.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -135,7 +135,7 @@ public:
   //! set the size of the image
   void init(unsigned int height, unsigned int width, Type value) ;
   //! set the size of the image
-  void resize(const unsigned int height, const unsigned int width) ;
+  void resize(const unsigned int h, const unsigned int w) ;
   //! destructor
   void destroy() ;
 
@@ -217,9 +217,11 @@ public:
 
   //! operator[] allows operation like I[i] = x.
   inline Type *operator[]( const unsigned int i)   { return row[i];}
+  inline Type *operator[]( const int i)   { return row[i];}
 
   //! operator[] allows operation like x = I[i]
   inline const  Type *operator[](unsigned int i) const { return row[i];}
+  inline const  Type *operator[](int i) const { return row[i];}
 
   /*!
     Get the value of an image point.
@@ -287,9 +289,9 @@ public:
   vpImage<Type> operator-(const vpImage<Type> &B);
 
   //! Copy operator
-  void operator=(const vpImage<Type> &I) ;
+  vpImage<Type>&  operator=(const vpImage<Type> &I) ;
 
-  void operator=(const Type &v);
+  vpImage<Type>& operator=(const Type &v);
   bool operator==(const vpImage<Type> &I);
   bool operator!=(const vpImage<Type> &I);
 
@@ -331,21 +333,23 @@ private:
 /*!
   \brief Image initialisation
 
-  Allocate memory for an [height x width] image
+  Allocate memory for an [h x w] image.
 
-  Set all the element of the bitmap to value
+  \param w : Image width.
+  \param h : Image height.
+  \param value : Set all the element of the bitmap to \e value.
 
   \exception vpException::memoryAllocationError
 
-  \sa vpImage::init(height, width)
+  \sa vpImage::init(h, w)
 */
 template<class Type>
 void
-vpImage<Type>::init(unsigned int height, unsigned int width, Type value)
+vpImage<Type>::init(unsigned int h, unsigned int w, Type value)
 {
   try
   {
-    init(height,width) ;
+    init(h,w) ;
   }
   catch(vpException me)
   {
@@ -361,7 +365,10 @@ vpImage<Type>::init(unsigned int height, unsigned int width, Type value)
 /*!
   \brief Image initialization
 
-  Allocate memory for an [height x width] image
+  Allocate memory for an [h x w] image.
+
+  \param w : Image width.
+  \param h : Image height.
 
   Element of the bitmap are not initialized
 
@@ -374,10 +381,10 @@ vpImage<Type>::init(unsigned int height, unsigned int width, Type value)
 */
 template<class Type>
 void
-vpImage<Type>::init(unsigned int height, unsigned int width)
+vpImage<Type>::init(unsigned int h, unsigned int w)
 {
 
-  if (height != this->height) {
+  if (h != this->height) {
     if (row != NULL)  {
       vpDEBUG_TRACE(10,"Destruction row[]");
       delete [] row;
@@ -385,7 +392,7 @@ vpImage<Type>::init(unsigned int height, unsigned int width)
     }
   }
 
-  if ((height != this->height) || (width != this->width))
+  if ((h != this->height) || (w != this->width))
   {
     if (bitmap != NULL) {
       vpDEBUG_TRACE(10,"Destruction bitmap[]") ;
@@ -394,14 +401,11 @@ vpImage<Type>::init(unsigned int height, unsigned int width)
     }
   }
 
-
-
-  this->width = width ;
-  this->height = height ;
+  this->width = w ;
+  this->height = h;
 
   npixels=width*height;
 
-
   if (bitmap == NULL)  bitmap = new  Type[npixels] ;
 
   //  vpERROR_TRACE("Allocate bitmap %p",bitmap) ;
@@ -429,9 +433,12 @@ vpImage<Type>::init(unsigned int height, unsigned int width)
 /*!
   \brief Constructor
 
-  Allocate memory for an [height x width] image
+  Allocate memory for an [h x w] image.
+
+  \param w : Image width.
+  \param h : Image height.
 
-  Element of the bitmap are set to zero
+  Element of the bitmap are set to zero.
 
   If the image has been already initialized, memory allocation is done
   only if the new image size is different, else we re-use the same
@@ -442,20 +449,15 @@ vpImage<Type>::init(unsigned int height, unsigned int width)
   \sa vpImage::init(height, width)
 */
 template<class Type>
-vpImage<Type>::vpImage(unsigned int height, unsigned int width)
+vpImage<Type>::vpImage(unsigned int h, unsigned int w)
+  : bitmap(NULL), display(NULL), npixels(0), width(0), height(0), row(NULL)
 {
-  bitmap = NULL ;
-  row = NULL ;
-
-  display =  NULL ;
-  this->height = this->width = 0 ;
   try
   {
-    init(height,width,0) ;
+    init(h,w,0) ;
   }
-  catch(vpException me)
+  catch(...)
   {
-    vpERROR_TRACE(" ") ;
     throw ;
   }
 }
@@ -463,9 +465,11 @@ vpImage<Type>::vpImage(unsigned int height, unsigned int width)
 /*!
   \brief Constructor
 
-  Allocate memory for an [height x width] image
+  Allocate memory for an [height x width] image.
 
-  set all the element of the bitmap to value
+  \param w : Image width.
+  \param h : Image height.
+  \param value : Set all the element of the bitmap to value.
 
   If the image has been already initialized, memory allocation is done
   only if the new image size is different, else we re-use the same
@@ -476,16 +480,12 @@ vpImage<Type>::vpImage(unsigned int height, unsigned int width)
   \sa vpImage::init(height, width, value)
 */
 template<class Type>
-vpImage<Type>::vpImage (unsigned int height, unsigned int width, Type value)
+vpImage<Type>::vpImage (unsigned int h, unsigned int w, Type value)
+  : bitmap(NULL), display(NULL), npixels(0), width(0), height(0), row(NULL)
 {
-  bitmap = NULL ;
-  row = NULL ;
-
-  display =  NULL ;
-  this->height = this->width = 0 ;
   try
   {
-    init(height,width,value) ;
+    init(h,w,value) ;
   }
   catch(vpException me)
   {
@@ -505,14 +505,8 @@ vpImage<Type>::vpImage (unsigned int height, unsigned int width, Type value)
 */
 template<class Type>
 vpImage<Type>::vpImage()
+  : bitmap(NULL), display(NULL), npixels(0), width(0), height(0), row(NULL)
 {
-  bitmap = NULL ;
-  row = NULL ;
-
-  display =  NULL ;
-
-  this->height = this->width = 0 ;
-  this->npixels = 0;
 }
 
 /*!
@@ -520,6 +514,9 @@ vpImage<Type>::vpImage()
 
   Allocate memory for an [height x width] image
 
+  \param w : Image width.
+  \param h : Image height.
+
   Element of the bitmap are not initialized
 
   If the image has been already initialized, memory allocation is done
@@ -532,11 +529,11 @@ vpImage<Type>::vpImage()
 */
 template<class Type>
 void
-vpImage<Type>::resize(unsigned int height, unsigned int width)
+vpImage<Type>::resize(unsigned int h, unsigned int w)
 {
   try
   {
-    init(height, width) ;
+    init(h, w) ;
   }
   catch(vpException me)
   {
@@ -596,23 +593,13 @@ vpImage<Type>::~vpImage()
 */
 template<class Type>
 vpImage<Type>::vpImage(const vpImage<Type>& I)
+  : bitmap(NULL), display(NULL), npixels(0), width(0), height(0), row(NULL)
 {
-  bitmap = NULL ;
-  row = NULL ;  
-    /* we first have to set the initial values of the image because resize function calls init function that test the actual size of the image */
-  this->width = 0;
-  this->height = 0;
-  this->npixels = 0;
   try
   {
-    //if (I.bitmap!=NULL)
-//    if(I.getHeight() != 0 || I.getWidth() != 0)
-    {
-      resize(I.getHeight(),I.getWidth());
-      unsigned int i;
-      memcpy(bitmap, I.bitmap, I.npixels*sizeof(Type)) ;
-      for (i =0  ; i < this->height ; i++) row[i] = bitmap + i*this->width ;
-    }
+    resize(I.getHeight(),I.getWidth());
+    memcpy(bitmap, I.bitmap, I.npixels*sizeof(Type)) ;
+    for (unsigned int i =0  ; i < this->height ; i++) row[i] = bitmap + i*this->width ;
   }
   catch(vpException me)
   {
@@ -673,7 +660,7 @@ void vpImage<Type>::getMinMaxValue(Type &min, Type &max) const
   \brief Copy operator
 */
 template<class Type>
-void vpImage<Type>::operator=(const vpImage<Type> &I)
+vpImage<Type> & vpImage<Type>::operator=(const vpImage<Type> &I)
 {
     /* we first have to set the initial values of the image because resize function calls init function that test the actual size of the image */
   if(bitmap != NULL){
@@ -723,6 +710,7 @@ void vpImage<Type>::operator=(const vpImage<Type> &I)
     vpERROR_TRACE(" ") ;
     throw ;
   }
+  return (* this);
 }
 
 
@@ -733,10 +721,12 @@ void vpImage<Type>::operator=(const vpImage<Type> &I)
    \warning = must be defined for \f$ <\f$ Type \f$ > \f$
 */
 template<class Type>
-void vpImage<Type>::operator=(const Type &v)
+vpImage<Type>& vpImage<Type>::operator=(const Type &v)
 {
   for (unsigned int i=0 ; i < npixels ; i++)
     bitmap[i] = v ;
+
+  return *this;
 }
 
 /*!
diff --git a/src/image/vpImageConvert.cpp b/src/image/vpImageConvert.cpp
index f4f7b053..d01f315e 100644
--- a/src/image/vpImageConvert.cpp
+++ b/src/image/vpImageConvert.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpImageConvert.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vpImageConvert.cpp 4661 2014-02-10 19:34:58Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -65,8 +65,7 @@ Convert a vpImage\<vpRGBa\> to a vpImage\<unsigned char\>
 \param dest : destination image
 */
 void
-vpImageConvert::convert(const vpImage<unsigned char> &src,
-      vpImage<vpRGBa> & dest)
+vpImageConvert::convert(const vpImage<unsigned char> &src, vpImage<vpRGBa> & dest)
 {
   dest.resize(src.getHeight(), src.getWidth()) ;
 
@@ -80,8 +79,7 @@ Convert a vpImage\<unsigned char\> to a vpImage\<vpRGBa\>
 \param dest : destination image
 */
 void
-vpImageConvert::convert(const vpImage<vpRGBa> &src,
-      vpImage<unsigned char> & dest)
+vpImageConvert::convert(const vpImage<vpRGBa> &src, vpImage<unsigned char> & dest)
 {
   dest.resize(src.getHeight(), src.getWidth()) ;
 
@@ -96,8 +94,7 @@ Convert a vpImage\<float\> to a vpImage\<unsigend char\> by renormalizing betwee
 \param dest : destination image
 */
 void
-vpImageConvert::convert(const vpImage<float> &src,
-          vpImage<unsigned char> &dest)
+vpImageConvert::convert(const vpImage<float> &src, vpImage<unsigned char> &dest)
 {
   dest.resize(src.getHeight(), src.getWidth()) ;
   unsigned int max_xy = src.getWidth()*src.getHeight();
@@ -112,7 +109,7 @@ vpImageConvert::convert(const vpImage<float> &src,
     else if(val > 255)
       dest.bitmap[i] = 255;
     else
-      dest.bitmap[i] = (int)val;
+      dest.bitmap[i] = (unsigned char)val;
   }
 }
 
@@ -122,8 +119,7 @@ Convert a vpImage\<unsigned char\> to a vpImage\<float\> by basic casting.
 \param dest : destination image
 */
 void
-vpImageConvert::convert(const vpImage<unsigned char> &src,
-          vpImage<float> &dest)
+vpImageConvert::convert(const vpImage<unsigned char> &src, vpImage<float> &dest)
 {
   dest.resize(src.getHeight(), src.getWidth()) ;
   for (unsigned int i = 0; i < src.getHeight()*src.getWidth(); i++)
@@ -136,8 +132,7 @@ Convert a vpImage\<double\> to a vpImage\<unsigend char\> by renormalizing betwe
 \param dest : destination image
 */
 void
-vpImageConvert::convert(const vpImage<double> &src,
-          vpImage<unsigned char> &dest)
+vpImageConvert::convert(const vpImage<double> &src, vpImage<unsigned char> &dest)
 {
   dest.resize(src.getHeight(), src.getWidth()) ;
   unsigned int max_xy = src.getWidth()*src.getHeight();
@@ -152,7 +147,7 @@ vpImageConvert::convert(const vpImage<double> &src,
     else if(val > 255)
       dest.bitmap[i] = 255;
     else
-      dest.bitmap[i] = (int)val;
+      dest.bitmap[i] = (unsigned char)val;
   }
 }
 
@@ -162,8 +157,7 @@ Convert a vpImage\<unsigned char\> to a vpImage\<double\> by basic casting.
 \param dest : destination image
 */
 void
-vpImageConvert::convert(const vpImage<unsigned char> &src,
-          vpImage<double> &dest)
+vpImageConvert::convert(const vpImage<unsigned char> &src, vpImage<double> &dest)
 {
   dest.resize(src.getHeight(), src.getWidth()) ;
   for (unsigned int i = 0; i < src.getHeight()*src.getWidth(); i++)
@@ -315,8 +309,7 @@ int main()
   \endcode
 */
 void
-vpImageConvert::convert(const IplImage* src,
-      vpImage<unsigned char> &dest, bool flip)
+vpImageConvert::convert(const IplImage* src, vpImage<unsigned char> &dest, bool flip)
 {
   int nChannel = src->nChannels;
   int depth = src->depth;
@@ -357,21 +350,21 @@ vpImageConvert::convert(const IplImage* src,
   }
   else
   {
-      if(nChannel == 1 && depth == 8){
+    if(nChannel == 1 && depth == 8){
+      dest.resize((unsigned int)height, (unsigned int)width) ;
       unsigned char* beginOutput = (unsigned char*)dest.bitmap;
-        dest.resize((unsigned int)height, (unsigned int)width) ;
-        for (int i =0  ; i < height ; i++){
-          memcpy(beginOutput + lineStep * ( 4 * width * ( height - 1 - i ) ) , src->imageData + i*widthStep,
-                (size_t)width);
-        }
-      }
-      if(nChannel == 3 && depth == 8){
-        dest.resize((unsigned int)height, (unsigned int)width) ;
-        //for (int i = 0  ; i < height ; i++){
-          BGRToGrey((unsigned char*)src->imageData /*+ i*widthStep*/,
-                      dest.bitmap /*+ i*width*/, (unsigned int)width, (unsigned int)height/*1*/, true);
-        //}
+      for (int i =0  ; i < height ; i++){
+        memcpy(beginOutput + lineStep * ( 4 * width * ( height - 1 - i ) ) , src->imageData + i*widthStep,
+               (size_t)width);
       }
+    }
+    if(nChannel == 3 && depth == 8){
+      dest.resize((unsigned int)height, (unsigned int)width) ;
+      //for (int i = 0  ; i < height ; i++){
+      BGRToGrey((unsigned char*)src->imageData /*+ i*widthStep*/,
+                dest.bitmap /*+ i*width*/, (unsigned int)width, (unsigned int)height/*1*/, true);
+      //}
+    }
   }
 }
 
@@ -502,8 +495,7 @@ int main()
   \endcode
 */
 void
-vpImageConvert::convert(const vpImage<unsigned char> & src,
-      IplImage* &dest)
+vpImageConvert::convert(const vpImage<unsigned char> & src, IplImage* &dest)
 {
   unsigned int height = src.getHeight();
   unsigned int width  = src.getWidth();
@@ -577,8 +569,7 @@ int main()
   \endcode
 */
 void
-vpImageConvert::convert(const cv::Mat& src,
-          vpImage<vpRGBa>& dest, const bool flip)
+vpImageConvert::convert(const cv::Mat& src, vpImage<vpRGBa>& dest, const bool flip)
 {
   if(src.type() == CV_8UC4){
     dest.resize((unsigned int)src.rows, (unsigned int)src.cols);
@@ -671,8 +662,7 @@ int main()
   \endcode
 */
 void
-vpImageConvert::convert(const cv::Mat& src,
-          vpImage<unsigned char>& dest, const bool flip)
+vpImageConvert::convert(const cv::Mat& src, vpImage<unsigned char>& dest, const bool flip)
 {
   if(src.type() == CV_8UC1){
     dest.resize((unsigned int)src.rows, (unsigned int)src.cols);
@@ -754,8 +744,7 @@ int main()
   \endcode
 */
 void
-vpImageConvert::convert(const vpImage<vpRGBa> & src,
-          cv::Mat& dest)
+vpImageConvert::convert(const vpImage<vpRGBa> & src, cv::Mat& dest)
 {
   cv::Mat vpToMat((int)src.getRows(), (int)src.getCols(), CV_8UC4, (void*)src.bitmap);
 
@@ -809,8 +798,7 @@ int main()
   \endcode
 */
 void
-vpImageConvert::convert(const vpImage<unsigned char> & src,
-          cv::Mat& dest, const bool copyData)
+vpImageConvert::convert(const vpImage<unsigned char> & src, cv::Mat& dest, const bool copyData)
 {
   if(copyData){
     cv::Mat tmpMap((int)src.getRows(), (int)src.getCols(), CV_8UC1, (void*)src.bitmap);
@@ -857,7 +845,7 @@ int main()
   \endcode
 */
 void vpImageConvert::convert(const vpImage<unsigned char> & src,
-	yarp::sig::ImageOf< yarp::sig::PixelMono > *dest, const bool copyData)
+                             yarp::sig::ImageOf< yarp::sig::PixelMono > *dest, const bool copyData)
 {
   if(copyData)
   {
@@ -905,7 +893,7 @@ int main()
   \endcode
 */
 void vpImageConvert::convert(const yarp::sig::ImageOf< yarp::sig::PixelMono > *src,
-	vpImage<unsigned char> & dest,const bool copyData )
+                             vpImage<unsigned char> & dest,const bool copyData)
 {
   dest.resize(src->height(),src->width());
   if(copyData)
@@ -948,7 +936,7 @@ int main()
   \endcode
 */	
 void vpImageConvert::convert(const vpImage<vpRGBa> & src,
-	yarp::sig::ImageOf< yarp::sig::PixelRgba > *dest, const bool copyData)
+                             yarp::sig::ImageOf< yarp::sig::PixelRgba > *dest, const bool copyData)
 {
   if(copyData){
     dest->resize(src.getWidth(),src.getHeight());
@@ -996,7 +984,7 @@ int main()
   \endcode
 */
 void vpImageConvert::convert(const yarp::sig::ImageOf< yarp::sig::PixelRgba > *src,
-	vpImage<vpRGBa> & dest,const bool copyData)
+                             vpImage<vpRGBa> & dest,const bool copyData)
 {
   dest.resize(src->height(),src->width());
   if(copyData)
@@ -1037,8 +1025,7 @@ int main()
 }
   \endcode
 */
-void vpImageConvert::convert(const vpImage<vpRGBa> & src,
-	yarp::sig::ImageOf< yarp::sig::PixelRgb > *dest)
+void vpImageConvert::convert(const vpImage<vpRGBa> & src, yarp::sig::ImageOf< yarp::sig::PixelRgb > *dest)
 {
   dest->resize(src.getWidth(),src.getHeight());
   for(unsigned int i = 0 ; i < src.getRows() ; i++){
@@ -1086,8 +1073,7 @@ int main()
 }
   \endcode
 */
-void vpImageConvert::convert(const yarp::sig::ImageOf< yarp::sig::PixelRgb > *src,
-	vpImage<vpRGBa> & dest)
+void vpImageConvert::convert(const yarp::sig::ImageOf< yarp::sig::PixelRgb > *src, vpImage<vpRGBa> & dest)
 {
   dest.resize(src->height(),src->width());
   for(int i = 0 ; i < src->height() ; i++){
@@ -1213,7 +1199,7 @@ void vpImageConvert::convertToJPEGBuffer(unsigned char *src, long unsigned int s
   \sa YUV422ToRGBa()
 */
 void vpImageConvert::YUYVToRGBa(unsigned char* yuyv, unsigned char* rgba,
-        unsigned int width, unsigned int height)
+                                unsigned int width, unsigned int height)
 {
   unsigned char *s;
   unsigned char *d;
@@ -1269,7 +1255,7 @@ void vpImageConvert::YUYVToRGBa(unsigned char* yuyv, unsigned char* rgba,
   \sa YUV422ToRGB()
 */
 void vpImageConvert::YUYVToRGB(unsigned char* yuyv, unsigned char* rgb,
-             unsigned int width, unsigned int height)
+                               unsigned int width, unsigned int height)
 {
   unsigned char *s;
   unsigned char *d;
@@ -1321,8 +1307,7 @@ void vpImageConvert::YUYVToRGB(unsigned char* yuyv, unsigned char* rgb,
 
   \sa YUV422ToGrey()
 */
-void vpImageConvert::YUYVToGrey(unsigned char* yuyv, unsigned char* grey,
-        unsigned int size)
+void vpImageConvert::YUYVToGrey(unsigned char* yuyv, unsigned char* grey, unsigned int size)
 {
   unsigned int i=0,j=0;
 
@@ -1341,9 +1326,7 @@ Convert YUV411 into RGB32
 yuv411 : u y1 y2 v y3 y4
 
 */
-void vpImageConvert::YUV411ToRGBa(unsigned char* yuv,
-          unsigned char* rgba,
-          unsigned int size)
+void vpImageConvert::YUV411ToRGBa(unsigned char* yuv, unsigned char* rgba, unsigned int size)
 {
 #if 1
   //  std::cout << "call optimized ConvertYUV411ToRGBa()" << std::endl;
@@ -1470,9 +1453,7 @@ void vpImageConvert::YUV411ToRGBa(unsigned char* yuv,
 
   \sa YUYVToRGBa()
 */
-void vpImageConvert::YUV422ToRGBa(unsigned char* yuv,
-          unsigned char* rgba,
-          unsigned int size)
+void vpImageConvert::YUV422ToRGBa(unsigned char* yuv, unsigned char* rgba, unsigned int size)
 {
 
 #if 1
@@ -1552,12 +1533,8 @@ Convert YUV411 into Grey
 yuv411 : u y1 y2 v y3 y4
 
 */
-void vpImageConvert::YUV411ToGrey(unsigned char* yuv,
-          unsigned char* grey,
-          unsigned int size)
+void vpImageConvert::YUV411ToGrey(unsigned char* yuv, unsigned char* grey, unsigned int size)
 {
-
-
   unsigned int i=0,j=0;
   while( j < size*3/2)
   {
@@ -1581,9 +1558,7 @@ void vpImageConvert::YUV411ToGrey(unsigned char* yuv,
   \sa YUYVToRGB()
 
 */
-void vpImageConvert::YUV422ToRGB(unsigned char* yuv,
-         unsigned char* rgb,
-         unsigned int size)
+void vpImageConvert::YUV422ToRGB(unsigned char* yuv, unsigned char* rgb, unsigned int size)
 {
 #if 1
   //  std::cout << "call optimized convertYUV422ToRGB()" << std::endl;
@@ -1661,9 +1636,7 @@ void vpImageConvert::YUV422ToRGB(unsigned char* yuv,
   \sa YUYVToGrey()
 
 */
-void vpImageConvert::YUV422ToGrey(unsigned char* yuv,
-          unsigned char* grey,
-          unsigned int size)
+void vpImageConvert::YUV422ToGrey(unsigned char* yuv, unsigned char* grey, unsigned int size)
 {
  unsigned int i=0,j=0;
 
@@ -1681,9 +1654,7 @@ Convert YUV411 into RGB
 yuv411 : u y1 y2 v y3 y4
 
 */
-void vpImageConvert::YUV411ToRGB(unsigned char* yuv,
-         unsigned char* rgb,
-         unsigned int size)
+void vpImageConvert::YUV411ToRGB(unsigned char* yuv, unsigned char* rgb, unsigned int size)
 {
 #if 1
   //  std::cout << "call optimized ConvertYUV411ToRGB()" << std::endl;
@@ -1806,9 +1777,8 @@ void vpImageConvert::YUV411ToRGB(unsigned char* yuv,
   yuv420 : Y(NxM), U(N/2xM/2), V(N/2xM/2)
 
 */
-void vpImageConvert::YUV420ToRGBa(unsigned char* yuv,
-         unsigned char* rgba,
-         unsigned int width, unsigned int height)
+void vpImageConvert::YUV420ToRGBa(unsigned char* yuv, unsigned char* rgba,
+                                  unsigned int width, unsigned int height)
 {
   //  std::cout << "call optimized ConvertYUV420ToRGBa()" << std::endl;
   register int U, V, R, G, B, V2, U5, UV;
@@ -1908,8 +1878,8 @@ void vpImageConvert::YUV420ToRGBa(unsigned char* yuv,
 
 */
 void vpImageConvert::YUV420ToRGB(unsigned char* yuv,
-         unsigned char* rgb,
-         unsigned int width, unsigned int height)
+                                 unsigned char* rgb,
+                                 unsigned int width, unsigned int height)
 {
   //  std::cout << "call optimized ConvertYUV420ToRGB()" << std::endl;
   register int U, V, R, G, B, V2, U5, UV;
@@ -2005,9 +1975,7 @@ void vpImageConvert::YUV420ToRGB(unsigned char* yuv,
   yuv420 : Y(NxM), U(N/2xM/2), V(N/2xM/2)
 
 */
-void vpImageConvert::YUV420ToGrey(unsigned char* yuv,
-         unsigned char* grey,
-         unsigned int size)
+void vpImageConvert::YUV420ToGrey(unsigned char* yuv, unsigned char* grey, unsigned int size)
 {
   for(unsigned int i=0 ; i < size ; i++)
   {
@@ -2021,9 +1989,7 @@ void vpImageConvert::YUV420ToGrey(unsigned char* yuv,
   yuv444 :  u y v
 
 */
-void vpImageConvert::YUV444ToRGBa(unsigned char* yuv,
-         unsigned char* rgba,
-         unsigned int size)
+void vpImageConvert::YUV444ToRGBa(unsigned char* yuv, unsigned char* rgba, unsigned int size)
 {
   register int U, V, R, G, B, V2, U5, UV;
   register int Y;
@@ -2062,9 +2028,7 @@ void vpImageConvert::YUV444ToRGBa(unsigned char* yuv,
   yuv444 : u y v
 
 */
-void vpImageConvert::YUV444ToRGB(unsigned char* yuv,
-         unsigned char* rgb,
-         unsigned int size)
+void vpImageConvert::YUV444ToRGB(unsigned char* yuv, unsigned char* rgb, unsigned int size)
 {
   register int U, V, R, G, B, V2, U5, UV;
   register int Y;
@@ -2103,9 +2067,7 @@ void vpImageConvert::YUV444ToRGB(unsigned char* yuv,
   yuv444 : u y v
 
 */
-void vpImageConvert::YUV444ToGrey(unsigned char* yuv,
-         unsigned char* grey,
-         unsigned int size)
+void vpImageConvert::YUV444ToGrey(unsigned char* yuv, unsigned char* grey, unsigned int size)
 {
   yuv++;
   for(unsigned int i=0 ; i < size ; i++)
@@ -2121,9 +2083,8 @@ void vpImageConvert::YUV444ToGrey(unsigned char* yuv,
   yuv420 : Y(NxM), V(N/2xM/2), U(N/2xM/2)
 
 */
-void vpImageConvert::YV12ToRGBa(unsigned char* yuv,
-         unsigned char* rgba,
-         unsigned int width, unsigned int height)
+void vpImageConvert::YV12ToRGBa(unsigned char* yuv, unsigned char* rgba,
+                                unsigned int width, unsigned int height)
 {
   //  std::cout << "call optimized ConvertYV12ToRGBa()" << std::endl;
   register int U, V, R, G, B, V2, U5, UV;
@@ -2222,9 +2183,8 @@ void vpImageConvert::YV12ToRGBa(unsigned char* yuv,
   yuv420 : Y(NxM),  V(N/2xM/2), U(N/2xM/2)
 
 */
-void vpImageConvert::YV12ToRGB(unsigned char* yuv,
-         unsigned char* rgb,
-         unsigned int height, unsigned int width)
+void vpImageConvert::YV12ToRGB(unsigned char* yuv, unsigned char* rgb,
+                               unsigned int height, unsigned int width)
 {
   //  std::cout << "call optimized ConvertYV12ToRGB()" << std::endl;
   register int U, V, R, G, B, V2, U5, UV;
@@ -2320,9 +2280,8 @@ void vpImageConvert::YV12ToRGB(unsigned char* yuv,
   yuv420 : Y(NxM), V(N/4xM/4), U(N/4xM/4)
 
 */
-void vpImageConvert::YVU9ToRGBa(unsigned char* yuv,
-         unsigned char* rgba,
-         unsigned int width, unsigned int height)
+void vpImageConvert::YVU9ToRGBa(unsigned char* yuv, unsigned char* rgba,
+                                unsigned int width, unsigned int height)
 {
   //  std::cout << "call optimized ConvertYVU9ToRGBa()" << std::endl;
   register int U, V, R, G, B, V2, U5, UV;
@@ -2614,9 +2573,8 @@ void vpImageConvert::YVU9ToRGBa(unsigned char* yuv,
   yuv420 : Y(NxM),  V(N/4xM/4), U(N/4xM/4)
 
 */
-void vpImageConvert::YVU9ToRGB(unsigned char* yuv,
-         unsigned char* rgb,
-         unsigned int height, unsigned int width)
+void vpImageConvert::YVU9ToRGB(unsigned char* yuv, unsigned char* rgb,
+                               unsigned int height, unsigned int width)
 {
   //  std::cout << "call optimized ConvertYVU9ToRGB()" << std::endl;
   register int U, V, R, G, B, V2, U5, UV;
@@ -2892,8 +2850,7 @@ void vpImageConvert::YVU9ToRGB(unsigned char* yuv,
   Convert RGB into RGBa
 
 */
-void vpImageConvert::RGBToRGBa(unsigned char* rgb, unsigned char* rgba,
-             unsigned int size)
+void vpImageConvert::RGBToRGBa(unsigned char* rgb, unsigned char* rgba, unsigned int size)
 {
   unsigned char *pt_input = rgb;
   unsigned char *pt_end = rgb + 3*size;
@@ -2912,8 +2869,7 @@ void vpImageConvert::RGBToRGBa(unsigned char* rgb, unsigned char* rgba,
   Convert RGB into RGBa
 
 */
-void vpImageConvert::RGBaToRGB(unsigned char* rgba, unsigned char* rgb,
-             unsigned int size)
+void vpImageConvert::RGBaToRGB(unsigned char* rgba, unsigned char* rgb, unsigned int size)
 {
   unsigned char *pt_input = rgba;
   unsigned char *pt_end = rgba + 4*size;
@@ -2932,8 +2888,7 @@ void vpImageConvert::RGBaToRGB(unsigned char* rgba, unsigned char* rgb,
   http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html
 
 */
-void vpImageConvert::RGBToGrey(unsigned char* rgb, unsigned char* grey,
-             unsigned int size)
+void vpImageConvert::RGBToGrey(unsigned char* rgb, unsigned char* grey, unsigned int size)
 {
   unsigned char *pt_input = rgb;
   unsigned char* pt_end = rgb + size*3;
@@ -2953,8 +2908,7 @@ void vpImageConvert::RGBToGrey(unsigned char* rgb, unsigned char* grey,
   http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html
 
 */
-void vpImageConvert::RGBaToGrey(unsigned char* rgba, unsigned char* grey,
-        unsigned int size)
+void vpImageConvert::RGBaToGrey(unsigned char* rgba, unsigned char* grey, unsigned int size)
 {
   unsigned char *pt_input = rgba;
   unsigned char* pt_end = rgba + size*4;
@@ -2974,8 +2928,7 @@ void vpImageConvert::RGBaToGrey(unsigned char* rgba, unsigned char* grey,
 
 */
 void
-vpImageConvert::GreyToRGBa(unsigned char* grey,
-         unsigned char* rgba, unsigned int size)
+vpImageConvert::GreyToRGBa(unsigned char* grey, unsigned char* rgba, unsigned int size)
 {
   unsigned char *pt_input = grey;
   unsigned char *pt_end = grey + size;
@@ -2998,8 +2951,7 @@ vpImageConvert::GreyToRGBa(unsigned char* grey,
 
 */
 void
-vpImageConvert::GreyToRGB(unsigned char* grey,
-        unsigned char* rgb, unsigned int size)
+vpImageConvert::GreyToRGB(unsigned char* grey, unsigned char* rgb, unsigned int size)
 {
   unsigned char *pt_input = grey;
   unsigned char* pt_end = grey + size;
@@ -3024,7 +2976,7 @@ vpImageConvert::GreyToRGB(unsigned char* grey,
 */
 void
 vpImageConvert::BGRToRGBa(unsigned char * bgr, unsigned char * rgba,
-        unsigned int width, unsigned int height, bool flip)
+                          unsigned int width, unsigned int height, bool flip)
 {
   //if we have to flip the image, we start from the end last scanline so the
   //step is negative
@@ -3062,7 +3014,7 @@ vpImageConvert::BGRToRGBa(unsigned char * bgr, unsigned char * rgba,
 */
 void
 vpImageConvert::BGRToGrey(unsigned char * bgr, unsigned char * grey,
-        unsigned int width, unsigned int height, bool flip)
+                          unsigned int width, unsigned int height, bool flip)
 {
   //if we have to flip the image, we start from the end last scanline so the
   //step is negative
@@ -3097,7 +3049,7 @@ vpImageConvert::BGRToGrey(unsigned char * bgr, unsigned char * grey,
 */
 void
 vpImageConvert::RGBToRGBa(unsigned char * rgb, unsigned char * rgba,
-        unsigned int width, unsigned int height, bool flip)
+                          unsigned int width, unsigned int height, bool flip)
 {
   //if we have to flip the image, we start from the end last scanline so the
   //step is negative
@@ -3132,7 +3084,7 @@ vpImageConvert::RGBToRGBa(unsigned char * rgb, unsigned char * rgba,
 */
 void
 vpImageConvert::RGBToGrey(unsigned char * rgb, unsigned char * grey,
-        unsigned int width, unsigned int height, bool flip)
+                          unsigned int width, unsigned int height, bool flip)
 {
   //if we have to flip the image, we start from the end last scanline so the
   //step is negative
@@ -3206,8 +3158,7 @@ void vpImageConvert::computeYCbCrLUT()
 
 
 */
-void vpImageConvert::YCbCrToRGB(unsigned char *ycbcr, unsigned char *rgb,
-        unsigned int size)
+void vpImageConvert::YCbCrToRGB(unsigned char *ycbcr, unsigned char *rgb, unsigned int size)
 {
   unsigned char *cbv;
   unsigned char *crv;
@@ -3265,8 +3216,7 @@ void vpImageConvert::YCbCrToRGB(unsigned char *ycbcr, unsigned char *rgb,
 
 
 */
-void vpImageConvert::YCbCrToRGBa(unsigned char *ycbcr, unsigned char *rgba,
-         unsigned int size)
+void vpImageConvert::YCbCrToRGBa(unsigned char *ycbcr, unsigned char *rgba, unsigned int size)
 {
   unsigned char *cbv;
   unsigned char *crv;
@@ -3321,9 +3271,7 @@ void vpImageConvert::YCbCrToRGBa(unsigned char *ycbcr, unsigned char *rgba,
   - In grey format, each pixel is coded using 8 bytes.
 
 */
-void vpImageConvert::YCbCrToGrey(unsigned char* yuv,
-          unsigned char* grey,
-          unsigned int size)
+void vpImageConvert::YCbCrToGrey(unsigned char* yuv, unsigned char* grey, unsigned int size)
 {
  unsigned int i=0,j=0;
 
@@ -3353,8 +3301,7 @@ void vpImageConvert::YCbCrToGrey(unsigned char* yuv,
     Byte 2: Blue
 
 */
-void vpImageConvert::YCrCbToRGB(unsigned char *ycrcb, unsigned char *rgb,
-        unsigned int size)
+void vpImageConvert::YCrCbToRGB(unsigned char *ycrcb, unsigned char *rgb, unsigned int size)
 {
   unsigned char *cbv;
   unsigned char *crv;
@@ -3410,8 +3357,7 @@ void vpImageConvert::YCrCbToRGB(unsigned char *ycrcb, unsigned char *rgb,
 
 
 */
-void vpImageConvert::YCrCbToRGBa(unsigned char *ycrcb, unsigned char *rgba,
-         unsigned int size)
+void vpImageConvert::YCrCbToRGBa(unsigned char *ycrcb, unsigned char *rgba, unsigned int size)
 {
   unsigned char *cbv;
   unsigned char *crv;
@@ -3485,10 +3431,10 @@ int main()
   \endcode
 */
 void vpImageConvert::split(const vpImage<vpRGBa> &src,
-                    vpImage<unsigned char>* pR,
-                    vpImage<unsigned char>* pG,
-                    vpImage<unsigned char>* pB,
-                    vpImage<unsigned char>* pa)
+                           vpImage<unsigned char>* pR,
+                           vpImage<unsigned char>* pG,
+                           vpImage<unsigned char>* pB,
+                           vpImage<unsigned char>* pa)
 {
   register size_t n = src.getNumberOfPixel();
   unsigned int height = src.getHeight();
@@ -3549,8 +3495,7 @@ void vpImageConvert::split(const vpImage<vpRGBa> &src,
   \param size : The image size or the number of pixels.
 
 */
-void vpImageConvert::MONO16ToGrey(unsigned char *grey16, unsigned char *grey,
-          unsigned int size)
+void vpImageConvert::MONO16ToGrey(unsigned char *grey16, unsigned char *grey, unsigned int size)
 {
   register int i = (((int)size)<<1)-1;
   register int j = (int)size-1;
@@ -3572,8 +3517,7 @@ void vpImageConvert::MONO16ToGrey(unsigned char *grey16, unsigned char *grey,
   \param size : The image size or the number of pixels.
 
 */
-void vpImageConvert::MONO16ToRGBa(unsigned char *grey16, unsigned char *rgba,
-          unsigned int size)
+void vpImageConvert::MONO16ToRGBa(unsigned char *grey16, unsigned char *rgba, unsigned int size)
 {
   register int i = (((int)size)<<1)-1;
   register int j = (int)(size*4-1);
diff --git a/src/image/vpImageConvert.h b/src/image/vpImageConvert.h
index c43d62d3..2a88695f 100644
--- a/src/image/vpImageConvert.h
+++ b/src/image/vpImageConvert.h
@@ -1,9 +1,9 @@
 /****************************************************************************
 *
-* $Id: vpImageConvert.h 4216 2013-04-17 09:06:18Z fspindle $
+* $Id: vpImageConvert.h 4604 2014-01-21 14:15:23Z fspindle $
 *
 * This file is part of the ViSP software.
-* Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+* Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 *
 * This software is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
@@ -71,7 +71,7 @@
 #  include <yarp/sig/Image.h>
 #endif
 
-#ifdef WIN32
+#if defined(_WIN32)
 #  include <windows.h>
 #endif
 
diff --git a/src/image/vpImageException.h b/src/image/vpImageException.h
index 7519545c..79c7fe9b 100644
--- a/src/image/vpImageException.h
+++ b/src/image/vpImageException.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpImageException.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpImageException.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -73,12 +73,12 @@
  */
 class VISP_EXPORT vpImageException : public vpException
 {
-public:
-  /*!
+  public:
+    /*!
     \brief Lists the possible error than can be emmited while calling
     vpImage member
    */
-  enum errorImageCodeEnum
+    enum errorImageCodeEnum
     {
       ioError,
       noFileNameError,
@@ -87,25 +87,19 @@ public:
       notInTheImage
     } ;
 
-public:
-  vpImageException (const int code, const char * msg)
-    : vpException(code, msg){ ; }
-  vpImageException (const int code, const std::string & msg)
-    : vpException(code, msg){ ; }
-  vpImageException (const int code)
-    : vpException(code){ ; }
-
+  public:
+    vpImageException (const int id, const char* format, ...)
+    {
+      this->code = id;
+      va_list args;
+      va_start(args, format);
+      setMessage(format, args);
+      va_end (args);
+    }
+    vpImageException (const int id, const std::string & msg)
+      : vpException(id, msg){ ; }
+    vpImageException (const int id)
+      : vpException(id){ ; }
 };
 
-
-
-
-
-#endif /* #ifndef __vpImageException_H */
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+#endif
diff --git a/src/image/vpImageFilter.cpp b/src/image/vpImageFilter.cpp
index e659452e..c74971b7 100644
--- a/src/image/vpImageFilter.cpp
+++ b/src/image/vpImageFilter.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpImageFilter.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpImageFilter.cpp 4661 2014-02-10 19:34:58Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -43,7 +43,7 @@
 #include <visp/vpImageConvert.h>
 #if defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020101)
 #include <opencv2/imgproc/imgproc_c.h>
-#elif defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100)
+#elif defined(VISP_HAVE_OPENCV)
 #include <cv.h>
 #endif
 
@@ -192,3 +192,480 @@ vpImageFilter:: canny(const vpImage<unsigned char>& Isrc,
   cvReleaseImage(&edges_ipl);
 }
 #endif
+
+/*!
+  Apply a separable filter.
+ */
+void vpImageFilter::filter(const vpImage<unsigned char> &I, vpImage<double>& GI, const double *filter,unsigned  int size)
+{
+  vpImage<double> GIx ;
+  filterX(I, GIx,filter,size);
+  filterY(GIx, GI,filter,size);
+  GIx.destroy();
+}
+
+/*!
+  Apply a separable filter.
+ */
+void vpImageFilter::filter(const vpImage<double> &I, vpImage<double>& GI, const double *filter,unsigned  int size)
+{
+  vpImage<double> GIx ;
+  filterX(I, GIx,filter,size);
+  filterY(GIx, GI,filter,size);
+  GIx.destroy();
+}
+
+void vpImageFilter::filterX(const vpImage<unsigned char> &I, vpImage<double>& dIx, const double *filter,unsigned  int size)
+{
+  dIx.resize(I.getHeight(),I.getWidth()) ;
+  for (unsigned int i=0 ; i < I.getHeight() ; i++)
+  {
+    for (unsigned int j=0 ; j < (size-1)/2 ; j++)
+    {
+      dIx[i][j]=vpImageFilter::filterXLeftBorder(I,i,j,filter,size);
+      //dIx[i][j]=0;
+    }
+    for (unsigned int j=(size-1)/2 ; j < I.getWidth()-(size-1)/2 ; j++)
+    {
+      dIx[i][j]=vpImageFilter::filterX(I,i,j,filter,size);
+    }
+    for (unsigned int j=I.getWidth()-(size-1)/2 ; j < I.getWidth() ; j++)
+    {
+      dIx[i][j]=vpImageFilter::filterXRightBorder(I,i,j,filter,size);
+      //dIx[i][j]=0;
+    }
+  }
+}
+void vpImageFilter::filterX(const vpImage<double> &I, vpImage<double>& dIx, const double *filter,unsigned  int size)
+{
+  dIx.resize(I.getHeight(),I.getWidth()) ;
+  for (unsigned int i=0 ; i < I.getHeight() ; i++)
+  {
+    for (unsigned int j=0 ; j < (size-1)/2 ; j++)
+    {
+      dIx[i][j]=vpImageFilter::filterXLeftBorder(I,i,j,filter,size);
+      //dIx[i][j]=0;
+    }
+    for (unsigned int j=(size-1)/2 ; j < I.getWidth()-(size-1)/2 ; j++)
+    {
+      dIx[i][j]=vpImageFilter::filterX(I,i,j,filter,size);
+    }
+    for (unsigned int j=I.getWidth()-(size-1)/2 ; j < I.getWidth() ; j++)
+    {
+      dIx[i][j]=vpImageFilter::filterXRightBorder(I,i,j,filter,size);
+      //dIx[i][j]=0;
+    }
+  }
+}
+void vpImageFilter::filterY(const vpImage<unsigned char> &I, vpImage<double>& dIy, const double *filter,unsigned  int size)
+{
+  dIy.resize(I.getHeight(),I.getWidth()) ;
+  for (unsigned int i=0 ; i < (size-1)/2 ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=vpImageFilter::filterYTopBorder(I,i,j,filter,size);
+    }
+  }
+  for (unsigned int i=(size-1)/2 ; i < I.getHeight()-(size-1)/2 ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=vpImageFilter::filterY(I,i,j,filter,size);
+    }
+  }
+  for (unsigned int i=I.getHeight()-(size-1)/2 ; i < I.getHeight() ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=vpImageFilter::filterYBottomBorder(I,i,j,filter,size);
+    }
+  }
+}
+void vpImageFilter::filterY(const vpImage<double> &I, vpImage<double>& dIy, const double *filter,unsigned  int size)
+{
+  dIy.resize(I.getHeight(),I.getWidth()) ;
+  for (unsigned int i=0 ; i < (size-1)/2 ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=vpImageFilter::filterYTopBorder(I,i,j,filter,size);
+    }
+  }
+  for (unsigned int i=(size-1)/2 ; i < I.getHeight()-(size-1)/2 ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=vpImageFilter::filterY(I,i,j,filter,size);
+    }
+  }
+  for (unsigned int i=I.getHeight()-(size-1)/2 ; i < I.getHeight() ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=vpImageFilter::filterYBottomBorder(I,i,j,filter,size);
+    }
+  }
+}
+
+/*!
+  Apply a Gaussian blur to an image.
+  \param I : Input image.
+  \param GI : Filtered image.
+  \param size : Filter size. This value should be odd.
+  \param sigma : Gaussian standard deviation. If it is equal to zero or negative, it is computed from filter size as sigma = (size-1)/6.
+  \param normalize : Flag indicating whether to normalize the filter coefficients or not.
+
+ */
+void vpImageFilter::gaussianBlur(const vpImage<unsigned char> &I, vpImage<double>& GI, unsigned int size, double sigma, bool normalize)
+{
+  double *fg=new double[(size+1)/2] ;
+  vpImageFilter::getGaussianKernel(fg, size, sigma, normalize) ;
+  vpImage<double> GIx ;
+  vpImageFilter::filterX(I, GIx,fg,size);
+  vpImageFilter::filterY(GIx, GI,fg,size);
+  GIx.destroy();
+  delete[] fg;
+}
+
+/*!
+  Return the coefficients of a Gaussian filter.
+
+  \param filter : Pointer to the filter kernel that should refer to a (size+1)/2 array.
+  The first value refers to the central coefficient, the next one to the right coefficients. Left coefficients could be deduced by symmetry.
+  \param size : Filter size. This value should be odd.
+  \param sigma : Gaussian standard deviation. If it is equal to zero or negative, it is computed from filter size as sigma = (size-1)/6.
+  \param normalize : Flag indicating whether to normalize the filter coefficients or not.
+*/
+void vpImageFilter::getGaussianKernel(double *filter, unsigned int size, double sigma, bool normalize)
+{
+  if (size%2 != 1)
+    throw (vpImageException(vpImageException::incorrectInitializationError,
+          "Bad Gaussian filter size"));
+
+  if (sigma<= 0)
+    sigma = (size-1)/6.0;
+
+  int middle = (int)(size-1)/2;
+  double sigma2 = vpMath::sqr(sigma);
+  for( int i=0; i<= middle; i++)
+  {
+    filter[i] = (1./(sigma*sqrt(2.*M_PI)))*exp(-(i*i)/(2.*sigma2));
+  }
+  if (normalize) {
+    //renormalization
+    double sum=0;
+    for(int i=1; i<=middle; i++)
+    {
+      sum += 2*filter[i] ;
+    }
+    sum += filter[0];
+
+    for(int i=0; i<=middle; i++)
+    {
+      filter[i] = filter[i]/sum;
+    }
+  }
+}
+
+/*!
+  Return the coefficients of a Gaussian derivative filter that may be used to compute spatial image derivatives after applying a Gaussian blur.
+
+  \param filter : Pointer to the filter kernel that should refer to a (size+1)/2 array.
+  The first value refers to the central coefficient, the next one to the right coefficients. Left coefficients could be deduced by symmetry.
+  \param size : Filter size. This value should be odd.
+  \param sigma : Gaussian standard deviation. If it is equal to zero or negative, it is computed from filter size as sigma = (size-1)/6.
+  \param normalize : Flag indicating whether to normalize the filter coefficients or not.
+*/
+void vpImageFilter::getGaussianDerivativeKernel(double *filter, unsigned int size, double sigma, bool normalize)
+{
+  if (size%2 != 1)
+    throw (vpImageException(vpImageException::incorrectInitializationError,
+          "Bad Gaussian filter size"));
+
+  if (sigma<= 0)
+    sigma = (size-1)/6.0;
+
+  int middle = (int)(size-1)/2;
+  double sigma2 = vpMath::sqr(sigma);
+  filter[0] = 0.;
+  for(int i=1; i<= middle; i++)
+  {
+    filter[i] = -(1./(sigma*sqrt(2.*M_PI)))*(exp(-((i+1)*(i+1))/(2.*sigma2))-exp(-((i-1)*(i-1))/(2.*sigma2)))/2.;
+  }
+
+  if (normalize) {
+    double sum=0;
+    for(int i=1; i<=middle; i++)
+    {
+      sum += 2.*(1./(sigma*sqrt(2.*M_PI)))*exp(-(i*i)/(2.*sigma2));
+    }
+    sum += (1./(sigma*sqrt(2.*M_PI))) ;
+
+    for(int i=1; i<=middle; i++)
+    {
+      filter[i] = filter[i]/sum;
+    }
+  }
+}
+
+
+void vpImageFilter::getGradX(const vpImage<unsigned char> &I, vpImage<double>& dIx)
+{
+  dIx.resize(I.getHeight(),I.getWidth()) ;
+  //dIx=0;
+  for (unsigned int i=0 ; i < I.getHeight() ; i++)
+  {
+    for (unsigned int j=0 ; j < 3 ; j++)
+    {
+      dIx[i][j]=0;
+    }
+    for (unsigned int j=3 ; j < I.getWidth()-3 ; j++)
+    {
+      dIx[i][j]=vpImageFilter::derivativeFilterX(I,i,j);
+    }
+    for (unsigned int j=I.getWidth()-3 ; j < I.getWidth() ; j++)
+    {
+      dIx[i][j]=0;
+    }
+  }
+}
+
+void vpImageFilter::getGradY(const vpImage<unsigned char> &I, vpImage<double>& dIy)
+{
+  dIy.resize(I.getHeight(),I.getWidth()) ;
+  //dIy=0;
+  for (unsigned int i=0 ; i < 3 ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=0;
+    }
+  }
+  for (unsigned int i=3 ; i < I.getHeight()-3 ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=vpImageFilter::derivativeFilterY(I,i,j);
+    }
+  }
+  for (unsigned int i=I.getHeight()-3 ; i < I.getHeight() ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=0;
+    }
+  }
+}
+
+void vpImageFilter::getGradX(const vpImage<unsigned char> &I, vpImage<double>& dIx, const double *filter,unsigned  int size)
+{
+  dIx.resize(I.getHeight(),I.getWidth()) ;
+  //#pragma omp parallel for
+  for (unsigned int i=0 ; i < I.getHeight() ; i++)
+  {
+    for (unsigned int j=0 ; j < (size-1)/2 ; j++)
+    {
+      dIx[i][j]=0;
+    }
+    for (unsigned int j=(size-1)/2 ; j < I.getWidth()-(size-1)/2 ; j++)
+    {
+      dIx[i][j]=vpImageFilter::derivativeFilterX(I,i,j,filter,size);
+    }
+    for (unsigned int j=I.getWidth()-(size-1)/2 ; j < I.getWidth() ; j++)
+    {
+      dIx[i][j]=0;
+    }
+  }
+}
+void vpImageFilter::getGradX(const vpImage<double> &I, vpImage<double>& dIx, const double *filter,unsigned  int size)
+{
+  dIx.resize(I.getHeight(),I.getWidth()) ;
+  //dIx=0;
+  for (unsigned int i=0 ; i < I.getHeight() ; i++)
+  {
+    for (unsigned int j=0 ; j < (size-1)/2 ; j++)
+    {
+      dIx[i][j]=0;
+    }
+    for (unsigned int j=(size-1)/2 ; j < I.getWidth()-(size-1)/2 ; j++)
+    {
+      dIx[i][j]=vpImageFilter::derivativeFilterX(I,i,j,filter,size);
+    }
+    for (unsigned int j=I.getWidth()-(size-1)/2 ; j < I.getWidth() ; j++)
+    {
+      dIx[i][j]=0;
+    }
+  }
+}
+
+void vpImageFilter::getGradY(const vpImage<unsigned char> &I, vpImage<double>& dIy, const double *filter,unsigned  int size)
+{
+  dIy.resize(I.getHeight(),I.getWidth()) ;
+  //#pragma omp parallel for
+  for (unsigned int i=0 ; i < (size-1)/2 ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=0;
+    }
+  }
+  //#pragma omp parallel for
+  for (unsigned int i=(size-1)/2 ; i < I.getHeight()-(size-1)/2 ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=vpImageFilter::derivativeFilterY(I,i,j,filter,size);
+    }
+  }
+  //#pragma omp parallel for
+  for (unsigned int i=I.getHeight()-(size-1)/2 ; i < I.getHeight() ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=0;
+    }
+  }
+}
+
+void vpImageFilter::getGradY(const vpImage<double> &I, vpImage<double>& dIy, const double *filter,unsigned  int size)
+{
+  dIy.resize(I.getHeight(),I.getWidth()) ;
+  //dIy=0;
+  for (unsigned int i=0 ; i < (size-1)/2 ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=0;
+    }
+  }
+  for (unsigned int i=(size-1)/2 ; i < I.getHeight()-(size-1)/2 ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=vpImageFilter::derivativeFilterY(I,i,j,filter,size);
+    }
+  }
+  for (unsigned int i=I.getHeight()-(size-1)/2 ; i < I.getHeight() ; i++)
+  {
+    for (unsigned int j=0 ; j < I.getWidth() ; j++)
+    {
+      dIy[i][j]=0;
+    }
+  }
+}
+
+/*!
+   Compute the gradient along X after applying a gaussian filter along Y.
+   \param I : Input image
+   \param dIx : Gradient along X.
+   \param gaussianKernel : Gaussian kernel which values should be computed using vpImageFilter::getGaussianKernel().
+   \param gaussianDerivativeKernel : Gaussian derivative kernel which values should be computed using vpImageFilter::getGaussianDerivativeKernel().
+   \param size : Size of the Gaussian and Gaussian derivative kernels.
+ */
+void vpImageFilter::getGradXGauss2D(const vpImage<unsigned char> &I, vpImage<double>& dIx, const double *gaussianKernel, const double *gaussianDerivativeKernel, unsigned  int size)
+{
+  vpImage<double> GIy;
+  vpImageFilter::filterY(I,  GIy, gaussianKernel, size);
+  vpImageFilter::getGradX(GIy, dIx, gaussianDerivativeKernel, size);
+}
+
+/*!
+   Compute the gradient along Y after applying a gaussian filter along X.
+   \param I : Input image
+   \param dIy : Gradient along Y.
+   \param gaussianKernel : Gaussian kernel which values should be computed using vpImageFilter::getGaussianKernel().
+   \param gaussianDerivativeKernel : Gaussian derivative kernel which values should be computed using vpImageFilter::getGaussianDerivativeKernel().
+   \param size : Size of the Gaussian and Gaussian derivative kernels.
+ */
+void vpImageFilter::getGradYGauss2D(const vpImage<unsigned char> &I, vpImage<double>& dIy, const double *gaussianKernel, const double *gaussianDerivativeKernel,unsigned  int size)
+{
+  vpImage<double> GIx;
+  vpImageFilter::filterX(I,  GIx, gaussianKernel, size);
+  vpImageFilter::getGradY(GIx, dIy, gaussianDerivativeKernel, size);
+}
+
+//operation pour pyramide gaussienne
+void vpImageFilter::getGaussPyramidal(const vpImage<unsigned char> &I, vpImage<unsigned char>& GI)
+{
+  vpImage<unsigned char> GIx;
+#ifdef VISP_HAVE_OPENCV
+  IplImage* imgsrc = NULL;//cvCreateImage(cvGetSize(imgign), IPL_DEPTH_8U, 1);
+  IplImage* imgdest = NULL;//cvCreateImage(cvGetSize(imgign), IPL_DEPTH_8U, 1);
+  imgsrc = cvCreateImage(cvSize((int)I.getWidth(),(int)I.getHeight()), IPL_DEPTH_8U, 1);
+  imgdest = cvCreateImage(cvSize((int)I.getWidth()/2,(int)I.getHeight()/2), IPL_DEPTH_8U, 1);
+  vpImageConvert::convert(I,imgsrc);
+  cvPyrDown( imgsrc, imgdest);
+  vpImageConvert::convert(imgdest,GI);
+
+  cvReleaseImage(&imgsrc);
+  cvReleaseImage(&imgdest);
+  //vpImage<unsigned char> sGI;sGI=GI;
+
+#else
+  vpImageFilter::getGaussXPyramidal(I,GIx);
+  vpImageFilter::getGaussYPyramidal(GIx,GI);
+#endif
+}
+
+void vpImageFilter::getGaussXPyramidal(const vpImage<unsigned char> &I, vpImage<unsigned char>& GI)
+{
+#if 0
+  GI.resize(I.getHeight(),(int)((I.getWidth()+1.)/2.)) ;
+  for (unsigned int i=0 ; i < I.getHeight() ; i++)
+  {
+    GI[i][0]=I[i][0];
+    for (unsigned int j=1 ; j < ((I.getWidth()+1.)/2.)-1 ; j++)
+    {
+      GI[i][j]=vpImageFilter::filterGaussXPyramidal(I,i,2*j);
+    }
+    GI[i][(int)((I.getWidth()+1.)/2.)-1]=I[i][2*((int)((I.getWidth()+1.)/2.)-1)];
+  }
+#else
+  unsigned int w = I.getWidth()/2;
+
+  GI.resize(I.getHeight(), w) ;
+  for (unsigned int i=0 ; i < I.getHeight() ; i++)
+  {
+    GI[i][0]=I[i][0];
+    for (unsigned int j=1 ; j < w-1 ; j++)
+    {
+      GI[i][j]=vpImageFilter::filterGaussXPyramidal(I,i,2*j);
+    }
+    GI[i][w-1]=I[i][2*w-1];
+  }
+
+#endif
+}
+void vpImageFilter::getGaussYPyramidal(const vpImage<unsigned char> &I, vpImage<unsigned char>& GI)
+{
+
+#ifdef ORIG
+  GI.resize((int)((I.getHeight()+1.)/2.),I.getWidth()) ;
+  for (unsigned int j=0 ; j < I.getWidth() ; j++)
+  {
+    GI[0][j]=I[0][j];
+    for (unsigned int i=1 ; i < ((I.getHeight()+1.)/2.)-1 ; i++)
+    {
+      GI[i][j]=vpImageFilter::filterGaussYPyramidal(I,2*i,j);
+    }
+    GI[(int)((I.getHeight()+1.)/2.)-1][j]=I[2*((int)((I.getHeight()+1.)/2.)-1)][j];
+  }
+
+#else
+  unsigned int h = I.getHeight()/2;
+
+  GI.resize(h, I.getWidth()) ;
+  for (unsigned int j=0 ; j < I.getWidth() ; j++)
+  {
+    GI[0][j]=I[0][j];
+    for (unsigned int i=1 ; i < h-1 ; i++)
+    {
+         GI[i][j]=vpImageFilter::filterGaussYPyramidal(I,2*i,j);
+    }
+    GI[h-1][j]=I[2*h-1][j];
+  }
+#endif
+}
+
+
diff --git a/src/image/vpImageFilter.h b/src/image/vpImageFilter.h
index db72daa6..cb8c9cf6 100644
--- a/src/image/vpImageFilter.h
+++ b/src/image/vpImageFilter.h
@@ -1,10 +1,10 @@
 /****************************************************************************
  *
- * $Id: vpImageFilter.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpImageFilter.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
- * 
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * ("GPL") version 2 as published by the Free Software Foundation.
@@ -12,11 +12,11 @@
  * distribution for additional information about the GNU GPL.
  *
  * For using ViSP with software that can not be combined with the GNU
- * GPL, please contact INRIA about acquiring a ViSP Professional 
+ * GPL, please contact INRIA about acquiring a ViSP Professional
  * Edition License.
  *
  * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
- * 
+ *
  * This software was developed at:
  * INRIA Rennes - Bretagne Atlantique
  * Campus Universitaire de Beaulieu
@@ -26,7 +26,7 @@
  *
  * If you have questions regarding the use of this file, please contact
  * INRIA at visp@inria.fr
- * 
+ *
  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
@@ -72,16 +72,6 @@ class VISP_EXPORT vpImageFilter
 {
 
 public:
-  static void filter(const vpImage<double> &I,
-		     vpImage<double>& Iu,
-		     vpImage<double>& Iv,
-		     const vpMatrix& M) ;
-
-
-  static void filter(const vpImage<unsigned char> &I,
-		     vpImage<double>& If,
-		     const vpMatrix& M) ;
-
 #if defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100)
   static void canny(const vpImage<unsigned char>& I,
                     vpImage<unsigned char>& Ic,
@@ -91,161 +81,368 @@ public:
 #endif
 
   /*!
-   Apply a 5x5 Gaussian filter to an image pixel.
+   Apply a 1x3 derivative filter to an image pixel.
 
-   \param fr : Image to filter
-   \param r : coordinates (row) of the pixel
+   \param I : Image to filter
+   \param r: coordinates (row) of the pixel
    \param c : coordinates (column) of the pixel
    */
   template<class T>
-  static double
-  gaussianFilter(vpImage<T> & fr,
-                                const unsigned int r, const unsigned int c)
+  static double derivativeFilterX(const vpImage<T> &I,
+                                  const unsigned int r, const unsigned int c)
   {
-    //filter Gaussien
-    return (
-                                          15.0 * fr[r][c]
-                                          + 12.0 * ( fr[r-1][c]  + fr[r][c-1]  + fr[r+1][c]   + fr[r][c+1]   )
-                                          + 9.0  * ( fr[r-1][c-1] + fr[r+1][c-1] + fr[r-1][c+1] + fr[r+1][c+1])
-                                          + 5.0  * ( fr[r-2][c]   + fr[r][c-2]   + fr[r+2][c]   + fr[r][c+2] )
-                                          + 4.0  * ( fr[r-2][c+1] + fr[r-2][c-1] + fr[r-1][c-2] + fr[r+1][c-2] +
-                                                                                  fr[r+2][c-1] + fr[r+2][c+1] + fr[r-1][c+2] + fr[r+1][c+2] )
-                                          + 2.0  * ( fr[r-2][c-2] + fr[r+2][c-2] + fr[r-2][c+2] + fr[r+2][c+2] )
-                                          )
-          /159.0;
+    return (2047.0 *(I[r][c+1] - I[r][c-1])
+            +913.0 *(I[r][c+2] - I[r][c-2])
+            +112.0 *(I[r][c+3] - I[r][c-3]))/8418.0;
   }
 
-
-
   /*!
-   Apply a 1x3 Derivative Filter to an image pixel.
+   Apply a 3x1 derivative filter to an image pixel.
 
-   \param fr : Image to filter
-   \param r: coordinates (row) of the pixel
+   \param I : Image to filter
+   \param r : coordinates (row) of the pixel
    \param c : coordinates (column) of the pixel
    */
   template<class T>
-  static double
-  derivativeFilterX(vpImage<T> & fr,
-                                   const unsigned int r, const unsigned int c)
+  static double derivativeFilterY(const vpImage<T> &I,
+                                  const unsigned int r, const unsigned int c)
   {
-    return (2047.0 *(fr[r][c+1] - fr[r][c-1])
-            +913.0 *(fr[r][c+2] - fr[r][c-2])
-            +112.0 *(fr[r][c+3] - fr[r][c-3]))/8418.0;
+    return (2047.0 *(I[r+1][c] - I[r-1][c])
+            +913.0 *(I[r+2][c] - I[r-2][c])
+            +112.0 *(I[r+3][c] - I[r-3][c]))/8418.0;
   }
 
   /*!
-   Apply a 3x1 Derivative Filter to an image pixel.
+   Apply a 1 x size Derivative Filter in X to an image pixel.
 
-   \param fr : Image to filter
+   \param I : Image to filter
    \param r : coordinates (row) of the pixel
    \param c : coordinates (column) of the pixel
+   \param filter : coefficients of the filter to be initialized using vpImageFilter::getGaussianDerivativeKernel().
+   \param size : size of the filter
+
+   \sa vpImageFilter::getGaussianDerivativeKernel()
    */
+
   template<class T>
-  static double
-  derivativeFilterY(vpImage<T> & fr,
-                                   const unsigned int r, const unsigned int c)
+  static double derivativeFilterX(const vpImage<T> &I,
+                                  const unsigned int r, const unsigned int c,
+                                  const double *filter, const unsigned int size)
   {
-    return (2047.0 *(fr[r+1][c] - fr[r-1][c])
-            +913.0 *(fr[r+2][c] - fr[r-2][c])
-            +112.0 *(fr[r+3][c] - fr[r-3][c]))/8418.0;
+    unsigned int i;
+    double result;
+
+    result = 0;
+
+    for(i=1; i<=(size-1)/2; i++)
+    {
+      result += filter[i]*(I[r][c+i] - I[r][c-i]) ;
+    }
+    return result;
   }
 
+
+
   /*!
-   build a Gaussian Derivative filter
+   Apply a size x 1 Derivative Filter in Y to an image pixel.
 
-          \param filter : array (of size t/2) that contains the filter
-          \param t : size of the filter
+   \param I : Image to filter
+   \param r : coordinates (row) of the pixel
+   \param c : coordinates (column) of the pixel
+   \param filter : coefficients of the filter to be initialized using vpImageFilter::getGaussianDerivativeKernel().
+   \param size : size of the filter
 
-   \warning filter has to be deallocated
+  \sa vpImageFilter::getGaussianDerivativeKernel()
    */
-  static void
-  coefficientGaussianDerivative(double *filter, const unsigned int t)
+  template<class T>
+  static double derivativeFilterY(const vpImage<T> &I,
+                                  const unsigned int r, const unsigned int c,
+                                  const double *filter, const unsigned int size)
   {
     unsigned int i;
-    //  double sigma;
-          if (filter == NULL)
-                  filter = new double[t/2] ;
+    double result;
 
-    double s2 = vpMath::sqr((t-1)/6.0);
+    result = 0;
 
-    for(i=1; i<=(t-1)/2; i++)
+    for(i=1; i<=(size-1)/2; i++)
     {
-      filter[i] = (i/(s2*sqrt(2*M_PI)))*exp((i*i)/(-2*s2));
+      result += filter[i]*(I[r+i][c] - I[r-i][c]) ;
+    }
+    return result;
+  }
+
+  static void filter(const vpImage<double> &I,
+                     vpImage<double>& Iu,
+                     vpImage<double>& Iv,
+                     const vpMatrix& M) ;
+
+
+  static void filter(const vpImage<unsigned char> &I,
+                     vpImage<double>& If,
+                     const vpMatrix& M) ;
+
+
+  static void filter(const vpImage<unsigned char> &I, vpImage<double>& GI, const double *filter,unsigned  int size);
+  static void filter(const vpImage<double> &I, vpImage<double>& GI, const double *filter,unsigned  int size);
+
+  static inline unsigned char filterGaussXPyramidal(const vpImage<unsigned char> &I, unsigned int i, unsigned int j)
+  {
+    return (unsigned char)((1.*I[i][j-2]+4.*I[i][j-1]+6.*I[i][j]+4.*I[i][j+1]+1.*I[i][j+2])/16.);
+  }
+  static inline unsigned char filterGaussYPyramidal(const vpImage<unsigned char> &I, unsigned int i, unsigned int j)
+  {
+    return (unsigned char)((1.*I[i-2][j]+4.*I[i-1][j]+6.*I[i][j]+4.*I[i+1][j]+1.*I[i+2][j])/16.);
+  }
+
+  static void filterX(const vpImage<unsigned char> &I, vpImage<double>& dIx, const double *filter,unsigned  int size);
+  static void filterX(const vpImage<double> &I, vpImage<double>& dIx, const double *filter,unsigned  int size);
 
+  static inline double filterX(const vpImage<unsigned char> &I,
+                               unsigned int r, unsigned int c,
+                               const double *filter,unsigned  int size)
+  {
+    double result;
+
+    result = 0;
+
+    for(unsigned int i=1; i<=(size-1)/2; i++)
+    {
+      result += filter[i]*(I[r][c+i] + I[r][c-i]) ;
     }
+    return result+filter[0]*I[r][c];
+  }
+
+
+  static inline double filterXLeftBorder(const vpImage<unsigned char> &I,
+                                         unsigned int r, unsigned int c,
+                                         const double *filter,unsigned  int size)
+  {
+    double result;
+
+    result = 0;
 
+    for(unsigned int i=1; i<=(size-1)/2; i++)
+    {
+      if(c>i)
+        result += filter[i]*(I[r][c+i] + I[r][c-i]) ;
+      else
+        result += filter[i]*(I[r][c+i] + I[r][i-c]) ;
+    }
+    return result+filter[0]*I[r][c];
   }
 
+  static inline double filterXRightBorder(const vpImage<unsigned char> &I,
+                                          unsigned int r, unsigned int c,
+                                          const double *filter,unsigned  int size)
+  {
+    double result;
 
-  /*!
-   Apply a 1 x size Derivative Filter in X to an image pixel.
+    result = 0;
 
-   \param I : Image to filter
-   \param r : coordinates (row) of the pixel
-   \param c : coordinates (column) of the pixel
-   \param filter : coefficients of the filter to be initialized using vpImageFilter::coefficientGaussianDerivative().
-   \param size : size of the filter
+    for(unsigned int i=1; i<=(size-1)/2; i++)
+    {
+      if(c+i<I.getWidth())
+        result += filter[i]*(I[r][c+i] + I[r][c-i]) ;
+      else
+        result += filter[i]*(I[r][2*I.getWidth()-c-i-1] + I[r][c-i]) ;
+    }
+    return result+filter[0]*I[r][c];
+  }
 
-   \sa vpImageFilter::coefficientGaussianDerivative()
-   */
+  static inline double filterX(const vpImage<double> &I,
+                               unsigned int r, unsigned int c,
+                               const double *filter,unsigned  int size)
+  {
+    double result;
 
-  template<class T>
-  static double
-  derivativeFilterX(vpImage<T> &I,
-                                   const unsigned int r, const unsigned int c,
-                                   double *filter, const unsigned int size)
+    result = 0;
+
+    for(unsigned int i=1; i<=(size-1)/2; i++)
+    {
+      result += filter[i]*(I[r][c+i] + I[r][c-i]) ;
+    }
+    return result+filter[0]*I[r][c];
+  }
+
+  static inline double filterXLeftBorder(const vpImage<double> &I,
+                                         unsigned int r, unsigned int c,
+                                         const double *filter,unsigned  int size)
   {
-          unsigned int i;
-          double result;
+    double result;
 
-          result = 0;
+    result = 0;
 
-          for(i=1; i<=(size-1)/2; i++)
-          {
-                  result += filter[i]*(I[r][c+i] - I[r][c-i]) ;
-          }
-          return result;
+    for(unsigned int i=1; i<=(size-1)/2; i++)
+    {
+      if(c>i)
+        result += filter[i]*(I[r][c+i] + I[r][c-i]) ;
+      else
+        result += filter[i]*(I[r][c+i] + I[r][i-c]) ;
+    }
+    return result+filter[0]*I[r][c];
   }
 
+  static inline double filterXRightBorder(const vpImage<double> &I,
+                                          unsigned int r, unsigned int c,
+                                          const double *filter,unsigned  int size)
+  {
+    double result;
 
+    result = 0;
 
+    for(unsigned int i=1; i<=(size-1)/2; i++)
+    {
+      if(c+i<I.getWidth())
+        result += filter[i]*(I[r][c+i] + I[r][c-i]) ;
+      else
+        result += filter[i]*(I[r][2*I.getWidth()-c-i-1] + I[r][c-i]) ;
+    }
+    return result+filter[0]*I[r][c];
+  }
+
+  static void filterY(const vpImage<unsigned char> &I, vpImage<double>& dIx, const double *filter,unsigned  int size);
+  static void filterY(const vpImage<double> &I, vpImage<double>& dIx, const double *filter,unsigned  int size);
+  static inline double filterY(const vpImage<unsigned char> &I,
+                               unsigned int r, unsigned int c,
+                               const double *filter,unsigned  int size)
+  {
+    double result;
+
+    result = 0;
+
+    for(unsigned int i=1; i<=(size-1)/2; i++)
+    {
+      result += filter[i]*(I[r+i][c] + I[r-i][c]) ;
+    }
+    return result+filter[0]*I[r][c];
+  }
+
+  double static inline filterYTopBorder(const vpImage<unsigned char> &I, unsigned int r, unsigned int c, const double *filter,unsigned  int size)
+  {
+    double result;
+
+    result = 0;
+
+    for(unsigned int i=1; i<=(size-1)/2; i++)
+    {
+      if(r>i)
+        result += filter[i]*(I[r+i][c] + I[r-i][c]) ;
+      else
+        result += filter[i]*(I[r+i][c] + I[i-r][c]) ;
+    }
+    return result+filter[0]*I[r][c];
+  }
+
+  double static inline filterYBottomBorder(const vpImage<unsigned char> &I, unsigned int r, unsigned int c, const double *filter,unsigned  int size)
+  {
+    double result;
+
+    result = 0;
+
+    for(unsigned int i=1; i<=(size-1)/2; i++)
+    {
+      if(r+i<I.getHeight())
+        result += filter[i]*(I[r+i][c] + I[r-i][c]) ;
+      else
+        result += filter[i]*(I[2*I.getHeight()-r-i-1][c] + I[r-i][c]) ;
+    }
+    return result+filter[0]*I[r][c];
+  }
+
+  static inline double filterYTopBorder(const vpImage<double> &I, unsigned int r, unsigned int c, const double *filter,unsigned  int size)
+  {
+    double result;
+
+    result = 0;
+
+    for(unsigned int i=1; i<=(size-1)/2; i++)
+    {
+      if(r>i)
+        result += filter[i]*(I[r+i][c] + I[r-i][c]) ;
+      else
+        result += filter[i]*(I[r+i][c] + I[i-r][c]) ;
+    }
+    return result+filter[0]*I[r][c];
+  }
+
+  static inline double filterYBottomBorder(const vpImage<double> &I, unsigned int r, unsigned int c, const double *filter,unsigned  int size)
+  {
+    double result;
+
+    result = 0;
+
+    for(unsigned int i=1; i<=(size-1)/2; i++)
+    {
+      if(r+i<I.getHeight())
+        result += filter[i]*(I[r+i][c] + I[r-i][c]) ;
+      else
+        result += filter[i]*(I[2*I.getHeight()-r-i-1][c] + I[r-i][c]) ;
+    }
+    return result+filter[0]*I[r][c];
+  }
+
+  static inline double filterY(const vpImage<double> &I,
+                               unsigned int r, unsigned int c,
+                               const double *filter,unsigned  int size)
+  {
+    double result;
+
+    result = 0;
+
+    for(unsigned int i=1; i<=(size-1)/2; i++)
+    {
+      result += filter[i]*(I[r+i][c] + I[r-i][c]) ;
+    }
+    return result+filter[0]*I[r][c];
+  }
+
+  static void gaussianBlur(const vpImage<unsigned char> &I, vpImage<double>& GI, unsigned int size=7, double sigma=0., bool normalize=true);
   /*!
-   Apply a size x 1 Derivative Filter in Y to an image pixel.
+   Apply a 5x5 Gaussian filter to an image pixel.
 
-   \param I : Image to filter
+   \param fr : Image to filter
    \param r : coordinates (row) of the pixel
    \param c : coordinates (column) of the pixel
-   \param filter : coefficients of the filter to be initialized using vpImageFilter::coefficientGaussianDerivative().
-   \param size : size of the filter
-
-  \sa vpImageFilter::coefficientGaussianDerivative()
    */
   template<class T>
-  static double
-  derivativeFilterY(vpImage<T> &I,
-                                   const unsigned int r, const unsigned int c,
-                                   double *filter, const unsigned int size)
+  static double gaussianFilter(const vpImage<T> & fr,
+                               const unsigned int r, const unsigned int c)
   {
-          unsigned int i;
-          double result;
-
-          result = 0;
-
-          for(i=1; i<=(size-1)/2; i++)
-          {
-                  result += filter[i]*(I[r+i][c] - I[r-i][c]) ;
-          }
-          return result;
+    //filter Gaussien
+    return (
+          15.0 * fr[r][c]
+          + 12.0 * ( fr[r-1][c]  + fr[r][c-1]  + fr[r+1][c]   + fr[r][c+1]   )
+          + 9.0  * ( fr[r-1][c-1] + fr[r+1][c-1] + fr[r-1][c+1] + fr[r+1][c+1])
+          + 5.0  * ( fr[r-2][c]   + fr[r][c-2]   + fr[r+2][c]   + fr[r][c+2] )
+          + 4.0  * ( fr[r-2][c+1] + fr[r-2][c-1] + fr[r-1][c-2] + fr[r+1][c-2] +
+                     fr[r+2][c-1] + fr[r+2][c+1] + fr[r-1][c+2] + fr[r+1][c+2] )
+          + 2.0  * ( fr[r-2][c-2] + fr[r+2][c-2] + fr[r-2][c+2] + fr[r+2][c+2] )
+          )
+        /159.0;
   }
+  //operation pour pyramide gaussienne
+  static void getGaussPyramidal(const vpImage<unsigned char> &I, vpImage<unsigned char>& GI);
+  static void getGaussXPyramidal(const vpImage<unsigned char> &I, vpImage<unsigned char>& GI);
+  static void getGaussYPyramidal(const vpImage<unsigned char> &I, vpImage<unsigned char>& GI);
+
+  static void getGaussianKernel(double *filter, unsigned int size, double sigma=0., bool normalize=true);
+  static void getGaussianDerivativeKernel(double *filter, unsigned int size, double sigma=0., bool normalize=true);
+
+  //fonction renvoyant le gradient en X de l'image I pour traitement pyramidal => dimension /2
+  static void getGradX(const vpImage<unsigned char> &I, vpImage<double>& dIx);
+  static void getGradX(const vpImage<unsigned char> &I, vpImage<double>& dIx, const double *filter, unsigned int size);
+  static void getGradX(const vpImage<double> &I, vpImage<double>& dIx, const double *filter, unsigned int size);
+  static void getGradXGauss2D(const vpImage<unsigned char> &I, vpImage<double>& dIx, const double *gaussianKernel,
+                              const double *gaussianDerivativeKernel, unsigned  int size);
+
+  //fonction renvoyant le gradient en Y de l'image I
+  static void getGradY(const vpImage<unsigned char> &I, vpImage<double>& dIy);
+  static void getGradY(const vpImage<unsigned char> &I, vpImage<double>& dIy, const double *filter, unsigned int size);
+  static void getGradY(const vpImage<double> &I, vpImage<double>& dIy, const double *filter, unsigned int size);
+  static void getGradYGauss2D(const vpImage<unsigned char> &I, vpImage<double>& dIy, const double *gaussianKernel,
+                              const double *gaussianDerivativeKernel,unsigned  int size);
+
 } ;
 
 
 #endif
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/src/image/vpImageIo.cpp b/src/image/vpImageIo.cpp
index e93254ac..c02bd4b8 100644
--- a/src/image/vpImageIo.cpp
+++ b/src/image/vpImageIo.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpImageIo.cpp 4315 2013-07-16 20:32:52Z fspindle $
+ * $Id: vpImageIo.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -47,6 +47,7 @@
 #include <visp/vpImage.h>
 #include <visp/vpImageIo.h>
 #include <visp/vpImageConvert.h> //image  conversion
+#include <visp/vpIoTools.h>
 
 const int vpImageIo::vpMAX_LEN = 100;
 
@@ -276,6 +277,11 @@ std::string vpImageIo::getExtension(const std::string &filename)
 void
 vpImageIo::read(vpImage<unsigned char> &I, const char *filename)
 {
+  bool exist = vpIoTools::checkFilename(filename);
+  if (!exist) {
+    std::string message = "Cannot read file: \"" + std::string(filename) + "\" doesn't exist";
+    throw (vpImageException(vpImageException::ioError, message));
+  }
   bool try_opencv_reader = false;
 
   switch(getFormat(filename)){
@@ -314,9 +320,8 @@ vpImageIo::read(vpImage<unsigned char> &I, const char *filename)
     cv::Mat cvI = cv::imread(filename, CV_LOAD_IMAGE_GRAYSCALE);
     vpImageConvert::convert(cvI, I);
 #else
-    vpCERROR << "Cannot read file: Image format not supported..." << std::endl;
-    throw (vpImageException(vpImageException::ioError,
-                            "Cannot read file: Image format not supported")) ;
+    std::string message = "Cannot read file \"" + std::string(filename) + "\": Image format not supported";
+    throw (vpImageException(vpImageException::ioError, message)) ;
 #endif
   }
 }
@@ -360,6 +365,12 @@ vpImageIo::read(vpImage<unsigned char> &I, const std::string filename)
 void
 vpImageIo::read(vpImage<vpRGBa> &I, const char *filename)
 {
+  bool exist = vpIoTools::checkFilename(filename);
+  if (!exist) {
+    std::string message = "Cannot read file: \"" + std::string(filename) + "\" doesn't exist";
+    throw (vpImageException(vpImageException::ioError, message));
+  }
+
   bool try_opencv_reader = false;
 
   switch(getFormat(filename)){
@@ -398,9 +409,8 @@ vpImageIo::read(vpImage<vpRGBa> &I, const char *filename)
     cv::Mat cvI = cv::imread(filename, CV_LOAD_IMAGE_COLOR);
     vpImageConvert::convert(cvI, I);
 #else
-    vpCERROR << "Cannot read file: Image format not supported..." << std::endl;
-    throw (vpImageException(vpImageException::ioError,
-                            "Cannot read file: Image format not supported")) ;
+    std::string message = "Cannot read file \"" + std::string(filename) + "\": Image format not supported";
+    throw (vpImageException(vpImageException::ioError, message)) ;
 #endif
   }
 }
@@ -774,9 +784,9 @@ vpImageIo::writePGM(const vpImage<vpRGBa> &I, const char *filename)
 }
 
 /*!
-  Read a PGM P5 file and initialize a scalar image.
+  Read a PFM P8 file and initialize a float image.
 
-  Read the contents of the portable gray pixmap (PGM P5) filename, allocate
+  Read the contents of the portable gray pixmap (PFM P8) filename, allocate
   memory for the corresponding image, and set the bitmap whith the content of
   the file.
 
@@ -818,7 +828,7 @@ vpImageIo::readPFM(vpImage<float> &I, const char *filename)
           "couldn't read file")) ;
   }
 
-  // Read the first line with magic number P5
+  // Read the first line with magic number P8
   line = 0;
 
   err = fgets(str, vpMAX_LEN - 1, fd);
@@ -834,9 +844,9 @@ vpImageIo::readPFM(vpImage<float> &I, const char *filename)
   if (strlen(str) < 3)
   {
     fclose (fd);
-    vpERROR_TRACE("\"%s\" is not a PGM file\n", filename) ;
+    vpERROR_TRACE("\"%s\" is not a PFM file\n", filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "this is not a pfm file")) ;
+          "this is not a PFM file")) ;
   }
 
   str[2] = '\0';
@@ -845,7 +855,7 @@ vpImageIo::readPFM(vpImage<float> &I, const char *filename)
     fclose (fd);
     vpERROR_TRACE("\"%s\" is not a PFM file\n", filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "this is not a pgm file")) ;
+          "this is not a PFM file")) ;
   }
 
   // Jump the possible comment, or empty line and read the following line
@@ -855,11 +865,18 @@ vpImageIo::readPFM(vpImage<float> &I, const char *filename)
     if (err == NULL) {
       fprintf(stderr, "couldn't read line %d of file \"%s\"\n", line, filename);
       fclose (fd);
+      throw (vpImageException(vpImageException::ioError,
+                              "Cannot read content of PFM file")) ;
     }
   } while ((str[0] == '#') || (str[0] == '\n'));
 
   // Extract image size
   ierr = sscanf(str, "%d %d", &w, &h);
+  if (w > 100000 || h>100000) {
+    fclose (fd);
+    throw(vpException(vpException::badValue, "Bad image size"));
+  }
+
   if(ierr == 1){// the norm allows to have the two values on two separated lines.
     do {
       err = fgets(str, vpMAX_LEN - 1, fd);
@@ -867,6 +884,8 @@ vpImageIo::readPFM(vpImage<float> &I, const char *filename)
       if (err == NULL) {
         fprintf(stderr, "couldn't read line %d of file \"%s\"\n", line, filename);
         fclose (fd);
+        throw (vpImageException(vpImageException::ioError,
+                                "Cannot read content of PFM file")) ;
       }
     } while ((str[0] == '#') || (str[0] == '\n'));
     ierr = sscanf(str, "%d", &h);
@@ -876,20 +895,20 @@ vpImageIo::readPFM(vpImage<float> &I, const char *filename)
     fclose (fd);
     vpERROR_TRACE("couldn't read line %d of file \"%s\"\n",line, filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "couldn't read file")) ;
+                            "Cannot read content of PFM file")) ;
   }
 
   if ((h != I.getHeight())||( w != I.getWidth()))
   {
-
     try
     {
       I.resize(h,w) ;
     }
     catch(...)
     {
-      vpERROR_TRACE(" ") ;
-      throw ;
+      fclose (fd);
+      throw (vpImageException(vpImageException::ioError,
+                              "Cannot read content of PFM file")) ;
     }
   }
 
@@ -900,7 +919,7 @@ vpImageIo::readPFM(vpImage<float> &I, const char *filename)
     fclose (fd);
     vpERROR_TRACE("couldn't read line %d of file \"%s\"\n",line, filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "couldn't read file")) ;
+                            "Cannot read content of PFM file")) ;
   }
 
   ierr = sscanf(str, "%d", &is255);
@@ -908,7 +927,7 @@ vpImageIo::readPFM(vpImage<float> &I, const char *filename)
     fclose (fd);
     vpERROR_TRACE("couldn't read line %d of file \"%s\"\n", line, filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "couldn't read file")) ;
+                            "Cannot read content of PFM file")) ;
   }
 
   if (is255 != 255)
@@ -916,7 +935,7 @@ vpImageIo::readPFM(vpImage<float> &I, const char *filename)
     fclose (fd);
     vpERROR_TRACE("MAX_VAL is not 255 in file \"%s\"\n", filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "error reading pfm file")) ;
+                            "Cannot read content of PFM file")) ;
   }
 
   unsigned int nbyte = I.getHeight()*I.getWidth();
@@ -925,12 +944,10 @@ vpImageIo::readPFM(vpImage<float> &I, const char *filename)
     fclose (fd);
     vpERROR_TRACE("couldn't read %d bytes in file \"%s\"\n", nbyte, filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "error reading pfm file")) ;
+                            "Cannot read content of PFM file")) ;
   }
 
   fclose (fd);
-
-
 }
 
 
@@ -956,143 +973,189 @@ vpImageIo::readPGM(vpImage<unsigned char> &I, const char *filename)
 {
   FILE* fd = NULL; // File descriptor
   int   ierr;
-  int   line;
-  int   is255;
   char* err ;
   char  str[vpMAX_LEN];
-  unsigned int   w, h;
+  unsigned int magic=5, w=0, h=0, maxval=255;
 
   // Test the filename
-  if (filename == '\0')
-  {
-    vpERROR_TRACE("no filename") ;
+  if (filename == '\0') {
     throw (vpImageException(vpImageException::ioError,
-          " no filename")) ;
-
+          "No filename")) ;
   }
 
   // Open the filename
-  fd = fopen(filename, "rb");
-  if (fd == NULL)
-  {
-    vpERROR_TRACE("couldn't read file \"%s\"", filename) ;
+  if ((fd = fopen(filename, "rb")) == NULL) {
     throw (vpImageException(vpImageException::ioError,
-          "couldn't read file")) ;
+          "Cannot read file \"%s\"", filename)) ;
   }
 
-  // Read the first line with magic number P5
-  line = 0;
-
-  err = fgets(str, vpMAX_LEN - 1, fd);
-  line++;
-  if (err == NULL)
-  {
+  while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
+  if (err == NULL) {
     fclose (fd);
-    vpERROR_TRACE("couldn't read line %d of file \"%s\"\n",  line, filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "couldn't read file")) ;
+          "Cannot read header of file \"%s\"",  filename));
   }
-
-  if (strlen(str) < 3)
-  {
+  if ((ierr = sscanf(str, "P%u %u %u %u", &magic, &w, &h, &maxval)) == 0) {
     fclose (fd);
-    vpERROR_TRACE("\"%s\" is not a PGM file\n", filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "this is not a pgm file")) ;
+          "Cannot read header of file \"%s\"",  filename));
   }
 
-  str[2] = '\0';
-  if (strcmp(str, "P5") != 0)
-  {
+  if (magic != 5) {
     fclose (fd);
-    vpERROR_TRACE("\"%s\" is not a PGM file\n", filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "this is not a pgm file")) ;
+                            "\"%s\" is not a PGM P5 file", filename));
   }
 
-  // Jump the possible comment, or empty line and read the following line
-  do {
-    err = fgets(str, vpMAX_LEN - 1, fd);
-    line++;
+  // Depending on ierr the line may contain:
+  // 1 : P5
+  // 2 : P5 w
+  // 3 : P5 w h
+  // 4 : P5 w h maxval
+
+  if (ierr == 1) {
+//    std::cout << "magic: " << magic << std::endl;
+    while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
     if (err == NULL) {
-      fprintf(stderr, "couldn't read line %d of file \"%s\"\n", line, filename);
       fclose (fd);
+      throw (vpImageException(vpImageException::ioError,
+            "Cannot read header of file \"%s\"",  filename));
     }
-  } while ((str[0] == '#') || (str[0] == '\n'));
+    if (((ierr = sscanf(str, "%u %u %u", &w, &h, &maxval)) == 0) || (ierr != 1 && ierr != 2 && ierr != 3)) {
+      fclose (fd);
+      throw (vpImageException(vpImageException::ioError,
+            "Cannot read header of file \"%s\"",  filename));
+    }
+    // Depending on ierr the line may contain:
+    // 1 : w
+    // 2 : w h
+    // 3 : w h maxval
+    if (ierr == 1) {
+//      std::cout << "w: " << w << std::endl;
+      while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
+      if (err == NULL) {
+        fclose (fd);
+        throw (vpImageException(vpImageException::ioError,
+              "Cannot read header of file \"%s\"",  filename));
+      }
+      if (((ierr = sscanf(str, "%u %u", &h, &maxval)) == 0) || (ierr != 1 && ierr != 2)) {
+        fclose (fd);
+        throw (vpImageException(vpImageException::ioError,
+              "Cannot read header of file \"%s\"",  filename));
+      }
+      if (ierr == 1) {
+//        std::cout << "h: " << h << std::endl;
+        while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
+        if (err == NULL) {
+          fclose (fd);
+          throw (vpImageException(vpImageException::ioError,
+                "Cannot read header of file \"%s\"",  filename));
+        }
+        if ((ierr = sscanf(str, "%u", &maxval)) != 1) {
+          fclose (fd);
+          throw (vpImageException(vpImageException::ioError,
+                "Cannot read header of file \"%s\"",  filename));
+        }
+      }
+//      else {
+//        std::cout << "h: " << h << " maxval: " << maxval << std::endl;
+//      }
+    }
+    else if (ierr == 2) {
+//      std::cout << "w: " << w << " h: " << h << std::endl;
 
-  // Extract image size
-  ierr = sscanf(str, "%d %d", &w, &h);
-  if(ierr == 1){// the norm allows to have the two values on two separated lines.
-    do {
-      err = fgets(str, vpMAX_LEN - 1, fd);
-      line++;
+      while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
       if (err == NULL) {
-        fprintf(stderr, "couldn't read line %d of file \"%s\"\n", line, filename);
         fclose (fd);
+        throw (vpImageException(vpImageException::ioError,
+              "Cannot read header of file \"%s\"",  filename));
       }
-    } while ((str[0] == '#') || (str[0] == '\n'));
-    ierr = sscanf(str, "%d", &h);
+      if ((ierr = sscanf(str, "%u", &maxval)) != 1)  {
+        fclose (fd);
+        throw (vpImageException(vpImageException::ioError,
+              "Cannot read header of file \"%s\"",  filename));
+      }
+//      std::cout << "maxval: " << maxval << std::endl;
+    }
+//    else {
+//      std::cout << "w: " << w << " h: " << h << " maxval: " << maxval << std::endl;
+//    }
   }
-  if (ierr == EOF)
-  {
-    fclose (fd);
-    vpERROR_TRACE("couldn't read line %d of file \"%s\"\n",line, filename) ;
-    throw (vpImageException(vpImageException::ioError,
-          "couldn't read file")) ;
+  else if (ierr == 2) {
+//    std::cout << "magic: " << magic << " w: " << w << std::endl;
+    while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
+    if (err == NULL) {
+      fclose (fd);
+      throw (vpImageException(vpImageException::ioError,
+            "Cannot read header of file \"%s\"",  filename));
+    }
+    if (((ierr = sscanf(str, "%u %u", &h, &maxval)) == 0) || (ierr != 1 && ierr != 2)) {
+      fclose (fd);
+      throw (vpImageException(vpImageException::ioError,
+            "Cannot read header of file \"%s\"",  filename));
+    }
+    if (ierr == 1) {
+//      std::cout << "h: " << h << std::endl;
+      while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
+      if (err == NULL) {
+        fclose (fd);
+        throw (vpImageException(vpImageException::ioError,
+              "Cannot read header of file \"%s\"",  filename));
+      }
+      if ((ierr = sscanf(str, "%u", &maxval)) != 1) {
+        fclose (fd);
+        throw (vpImageException(vpImageException::ioError,
+              "Cannot read header of file \"%s\"",  filename));
+      }
+//      std::cout << "maxval: " << maxval << std::endl;
+    }
+//    else {
+//      std::cout << "h: " << h << " maxval: " << maxval << std::endl;
+//    }
   }
-
-  if ((h != I.getHeight())||( w != I.getWidth()))
-  {
-
-    try
-    {
-      I.resize(h,w) ;
+  else if (ierr == 3) {
+//    std::cout << "magic: " << magic << " w: " << w << " h: " << h << std::endl;
+    while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
+    if (err == NULL) {
+      fclose (fd);
+      throw (vpImageException(vpImageException::ioError,
+            "Cannot read header of file \"%s\"",  filename));
     }
-    catch(...)
-    {
-      vpERROR_TRACE(" ") ;
-      throw ;
+    if ((ierr = sscanf(str, "%u", &maxval)) != 1)  {
+      fclose (fd);
+      throw (vpImageException(vpImageException::ioError,
+            "Cannot read header of file \"%s\"",  filename));
     }
+//    std::cout << "maxval: " << maxval << std::endl;
   }
+//  else if (ierr == 4) {
+//    std::cout << "magic: " << magic << " w: " << w << " h: " << h << " maxval: " << maxval << std::endl;
+//  }
 
-  // Read 255
-  err = fgets(str, vpMAX_LEN - 1, fd);
-  line++;
-  if (err == NULL) {
+  if (w > 100000 || h>100000) {
     fclose (fd);
-    vpERROR_TRACE("couldn't read line %d of file \"%s\"\n",line, filename) ;
-    throw (vpImageException(vpImageException::ioError,
-          "couldn't read file")) ;
+    throw(vpException(vpException::badValue, "Bad image size in \"%s\"",  filename));
   }
-
-  ierr = sscanf(str, "%d", &is255);
-  if (ierr == EOF) {
+  if (maxval != 255)
+  {
     fclose (fd);
-    vpERROR_TRACE("couldn't read line %d of file \"%s\"\n", line, filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "couldn't read file")) ;
+          "Bad maxval in \"%s\"",  filename));
   }
 
-  if (is255 != 255)
-  {
-    fclose (fd);
-    vpERROR_TRACE("MAX_VAL is not 255 in file \"%s\"\n", filename) ;
-    throw (vpImageException(vpImageException::ioError,
-          "error reading pgm file")) ;
+  if ((h != I.getHeight())||( w != I.getWidth())) {
+    I.resize(h,w) ;
   }
 
   unsigned int nbyte = I.getHeight()*I.getWidth();
-  if (fread (I.bitmap, sizeof(unsigned char), nbyte, fd ) != nbyte)
-  {
+  size_t n;
+  if ((n = fread (I.bitmap, sizeof(unsigned char), nbyte, fd)) != nbyte) {
     fclose (fd);
-    vpERROR_TRACE("couldn't read %d bytes in file \"%s\"\n", nbyte, filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "error reading pgm file")) ;
+          "Read only %d of %d bytes in file \"%s\"", n, nbyte, filename));
   }
 
   fclose (fd);
-
-
 }
 
 
@@ -1117,14 +1180,12 @@ vpImageIo::readPGM(vpImage<unsigned char> &I, const char *filename)
 void
 vpImageIo::readPGM(vpImage<vpRGBa> &I, const char *filename)
 {
-
   try
   {
     vpImage<unsigned char> Itmp ;
 
     vpImageIo::readPGM(Itmp, filename) ;
 
-
     vpImageConvert::convert(Itmp, I) ;
 
   }
@@ -1190,132 +1251,180 @@ vpImageIo::readPPM(vpImage<unsigned char> &I, const char *filename)
 void
 vpImageIo::readPPM(vpImage<vpRGBa> &I, const char *filename)
 {
-
   FILE* fd = NULL; // File descriptor
   int   ierr;
-  int   line;
-  int   is255;
   char* err ;
   char  str[vpMAX_LEN];
-  unsigned int   w, h;
+  unsigned int magic=5, w=0, h=0, maxval=255;
 
   // Test the filename
-  if (filename == '\0')
-  {
-    vpERROR_TRACE("no filename") ;
+  if (filename == '\0') {
     throw (vpImageException(vpImageException::ioError,
-          " no filename")) ;
-
+          "No filename")) ;
   }
 
   // Open the filename
-  fd = fopen(filename, "rb");
-  if (fd == NULL)
-  {
-    vpERROR_TRACE("couldn't read file \"%s\"", filename) ;
+  if ((fd = fopen(filename, "rb")) == NULL) {
     throw (vpImageException(vpImageException::ioError,
-          "couldn't read file")) ;
+          "Cannot read file \"%s\"", filename)) ;
   }
 
-  // Read the first line with magic number P5
-  line = 0;
-
-  err = fgets(str, vpMAX_LEN - 1, fd);
-  line++;
-  if (err == NULL)
-  {
+  while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
+  if (err == NULL) {
     fclose (fd);
-    vpERROR_TRACE("couldn't read line %d of file \"%s\"\n",  line, filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "couldn't read file")) ;
+          "Cannot read header of file \"%s\"",  filename));
   }
-
-  if (strlen(str) < 3)
-  {
+  if ((ierr = sscanf(str, "P%u %u %u %u", &magic, &w, &h, &maxval)) == 0) {
     fclose (fd);
-    vpERROR_TRACE("\"%s\" is not a PPM file\n", filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "this is not a ppm file")) ;
+          "Cannot read header of file \"%s\"",  filename));
   }
 
-  str[2] = '\0';
-  if (strcmp(str, "P6") != 0)
-  {
+  if (magic != 6) {
     fclose (fd);
-    vpERROR_TRACE("\"%s\" is not a PPM file\n", filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "this is not a ppm file")) ;
+                            "\"%s\" is not a PGM P6 file", filename));
   }
 
-  // Jump the possible comment, or empty line and read the following line
-  do {
-    err = fgets(str, vpMAX_LEN - 1, fd);
-    line++;
+  // Depending on ierr the line may contain:
+  // 1 : P6
+  // 2 : P6 w
+  // 3 : P6 w h
+  // 4 : P6 w h maxval
+
+  if (ierr == 1) {
+//    std::cout << "magic: " << magic << std::endl;
+    while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
     if (err == NULL) {
-      fprintf(stderr, "couldn't read line %d of file \"%s\"\n", line, filename);
       fclose (fd);
+      throw (vpImageException(vpImageException::ioError,
+            "Cannot read header of file \"%s\"",  filename));
     }
-  } while ((str[0] == '#') || (str[0] == '\n'));
+    if (((ierr = sscanf(str, "%u %u %u", &w, &h, &maxval)) == 0) || (ierr != 1 && ierr != 2 && ierr != 3)) {
+      fclose (fd);
+      throw (vpImageException(vpImageException::ioError,
+            "Cannot read header of file \"%s\"",  filename));
+    }
+    // Depending on ierr the line may contain:
+    // 1 : w
+    // 2 : w h
+    // 3 : w h maxval
+    if (ierr == 1) {
+//      std::cout << "w: " << w << std::endl;
+      while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
+      if (err == NULL) {
+        fclose (fd);
+        throw (vpImageException(vpImageException::ioError,
+              "Cannot read header of file \"%s\"",  filename));
+      }
+      if (((ierr = sscanf(str, "%u %u", &h, &maxval)) == 0) || (ierr != 1 && ierr != 2)) {
+        fclose (fd);
+        throw (vpImageException(vpImageException::ioError,
+              "Cannot read header of file \"%s\"",  filename));
+      }
+      if (ierr == 1) {
+//        std::cout << "h: " << h << std::endl;
+        while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
+        if (err == NULL) {
+          fclose (fd);
+          throw (vpImageException(vpImageException::ioError,
+                "Cannot read header of file \"%s\"",  filename));
+        }
+        if ((ierr = sscanf(str, "%u", &maxval)) != 1) {
+          fclose (fd);
+          throw (vpImageException(vpImageException::ioError,
+                "Cannot read header of file \"%s\"",  filename));
+        }
+      }
+//      else {
+//        std::cout << "h: " << h << " maxval: " << maxval << std::endl;
+//      }
+    }
+    else if (ierr == 2) {
+//      std::cout << "w: " << w << " h: " << h << std::endl;
 
-  // Extract image size
-  ierr = sscanf(str, "%d %d", &w, &h);
-  if(ierr == 1){// the norm allows to have the two values on two separated lines.
-    do {
-      err = fgets(str, vpMAX_LEN - 1, fd);
-      line++;
+      while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
       if (err == NULL) {
-        fprintf(stderr, "couldn't read line %d of file \"%s\"\n", line, filename);
         fclose (fd);
+        throw (vpImageException(vpImageException::ioError,
+              "Cannot read header of file \"%s\"",  filename));
       }
-    } while ((str[0] == '#') || (str[0] == '\n'));
-    ierr = sscanf(str, "%d", &h);
+      if ((ierr = sscanf(str, "%u", &maxval)) != 1)  {
+        fclose (fd);
+        throw (vpImageException(vpImageException::ioError,
+              "Cannot read header of file \"%s\"",  filename));
+      }
+//      std::cout << "maxval: " << maxval << std::endl;
+    }
+//    else {
+//      std::cout << "w: " << w << " h: " << h << " maxval: " << maxval << std::endl;
+//    }
   }
-  if (ierr == EOF)
-  {
-    fclose (fd);
-    vpERROR_TRACE("couldn't read line %d of file \"%s\"\n",line, filename) ;
-    throw (vpImageException(vpImageException::ioError,
-          "couldn't read file")) ;
+  else if (ierr == 2) {
+//    std::cout << "magic: " << magic << " w: " << w << std::endl;
+    while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
+    if (err == NULL) {
+      fclose (fd);
+      throw (vpImageException(vpImageException::ioError,
+            "Cannot read header of file \"%s\"",  filename));
+    }
+    if (((ierr = sscanf(str, "%u %u", &h, &maxval)) == 0) || (ierr != 1 && ierr != 2)) {
+      fclose (fd);
+      throw (vpImageException(vpImageException::ioError,
+            "Cannot read header of file \"%s\"",  filename));
+    }
+    if (ierr == 1) {
+//      std::cout << "h: " << h << std::endl;
+      while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
+      if (err == NULL) {
+        fclose (fd);
+        throw (vpImageException(vpImageException::ioError,
+              "Cannot read header of file \"%s\"",  filename));
+      }
+      if ((ierr = sscanf(str, "%u", &maxval)) != 1) {
+        fclose (fd);
+        throw (vpImageException(vpImageException::ioError,
+              "Cannot read header of file \"%s\"",  filename));
+      }
+//      std::cout << "maxval: " << maxval << std::endl;
+    }
+//    else {
+//      std::cout << "h: " << h << " maxval: " << maxval << std::endl;
+//    }
   }
-
-  if ((h != I.getHeight())||( w != I.getWidth()))
-  {
-
-    try
-    {
-      I.resize(h,w) ;
+  else if (ierr == 3) {
+//    std::cout << "magic: " << magic << " w: " << w << " h: " << h << std::endl;
+    while ((err = fgets(str, vpMAX_LEN - 1, fd)) != NULL && ((str[0] == '#') || (str[0] == '\n'))) {};
+    if (err == NULL) {
+      fclose (fd);
+      throw (vpImageException(vpImageException::ioError,
+            "Cannot read header of file \"%s\"",  filename));
     }
-    catch(...)
-    {
-      vpERROR_TRACE(" ") ;
-      throw ;
+    if ((ierr = sscanf(str, "%u", &maxval)) != 1)  {
+      fclose (fd);
+      throw (vpImageException(vpImageException::ioError,
+            "Cannot read header of file \"%s\"",  filename));
     }
+//    std::cout << "maxval: " << maxval << std::endl;
   }
+//  else if (ierr == 4) {
+//    std::cout << "magic: " << magic << " w: " << w << " h: " << h << " maxval: " << maxval << std::endl;
+//  }
 
-  // Read 255
-  err = fgets(str, vpMAX_LEN - 1, fd);
-  line++;
-  if (err == NULL) {
+  if (w > 100000 || h>100000) {
     fclose (fd);
-    vpERROR_TRACE("couldn't read line %d of file \"%s\"\n",line, filename) ;
-    throw (vpImageException(vpImageException::ioError,
-          "couldn't read file")) ;
+    throw(vpException(vpException::badValue, "Bad image size in \"%s\"",  filename));
   }
-
-  ierr = sscanf(str, "%d", &is255);
-  if (ierr == EOF) {
+  if (maxval != 255)
+  {
     fclose (fd);
-    vpERROR_TRACE("couldn't read line %d of file \"%s\"\n", line, filename) ;
     throw (vpImageException(vpImageException::ioError,
-          "couldn't read file")) ;
+          "Bad maxval in \"%s\"",  filename));
   }
 
-  if (is255 != 255)
-  {
-    fclose (fd);
-    vpERROR_TRACE("MAX_VAL is not 255 in file \"%s\"\n", filename) ;
-    throw (vpImageException(vpImageException::ioError,
-          "error reading ppm file")) ;
+  if ((h != I.getHeight())||( w != I.getWidth())) {
+    I.resize(h,w) ;
   }
 
   for(unsigned int i=0;i<I.getHeight();i++)
@@ -1328,16 +1437,15 @@ vpImageIo::readPPM(vpImage<vpRGBa> &I, const char *filename)
       res |= fread(&v.B,sizeof(v.B),1,fd) ;
       if (res==0)
       {
-   fclose (fd);
-   vpERROR_TRACE("couldn't read  bytes in file \"%s\"\n", filename) ;
-   throw (vpImageException(vpImageException::ioError,
-         "error reading ppm file")) ;
+        fclose (fd);
+        throw (vpImageException(vpImageException::ioError,
+              "Cannot read bytes in file \"%s\"\n", filename));
       }
       I[i][j] = v ;
     }
   }
-  fclose(fd) ;
 
+  fclose (fd);
 }
 
 /*!
diff --git a/src/image/vpImageIo.h b/src/image/vpImageIo.h
index 69acede1..f08f6d8f 100644
--- a/src/image/vpImageIo.h
+++ b/src/image/vpImageIo.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpImageIo.h 4314 2013-07-16 17:41:21Z fspindle $
+ * $Id: vpImageIo.h 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -56,7 +56,7 @@
 #include <stdio.h>
 #include <iostream>
 
-#ifdef WIN32
+#if defined(_WIN32)
 #  include <windows.h>
 #endif
 
@@ -89,10 +89,10 @@
 int main()
 {
   vpImage<unsigned char> I;
-#ifdef UNIX
-  std::string filename("/local/soft/ViSP/ViSP-images/Klimt/Klimt.ppm");
-#elif WIN32
+#if defined(_WIN32)
   std::string filename("C:/temp/ViSP-images/Klimt/Klimt.ppm");
+#else // UNIX
+  std::string filename("/local/soft/ViSP/ViSP-images/Klimt/Klimt.ppm");
 #endif
 
   vpImageIo::read(I, filename); // Convert the color image in a gray level image
diff --git a/src/image/vpImageMorphology.h b/src/image/vpImageMorphology.h
index 8f0385fd..076e0dc3 100644
--- a/src/image/vpImageMorphology.h
+++ b/src/image/vpImageMorphology.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpImageMorphology.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpImageMorphology.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/image/vpImagePoint.cpp b/src/image/vpImagePoint.cpp
index 6bffc2e4..8bd2415c 100644
--- a/src/image/vpImagePoint.cpp
+++ b/src/image/vpImagePoint.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpImagePoint.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpImagePoint.cpp 4640 2014-02-05 12:41:38Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -86,3 +86,318 @@ vpImagePoint::projection(const vpHomography& aHb)
 
   return ap;
 }
+
+/*!
+
+  Operator +=.
+
+  This operator can be used to compute the center of gravity of a set of image points.
+
+  \code
+#include <iostream>
+#include <vector>
+#include <visp/vpImagePoint.h>
+
+int main()
+{
+std::vector<vpImagePoint> ip(2);
+
+ip[0].set_ij(100, 200);
+ip[1].set_ij(300, 400);
+
+vpImagePoint cog(0,0);
+for(unsigned int i=0; i<ip.size(); i++)
+  cog += ip[i];
+cog /= ip.size();
+std::cout << "cog: " << cog << std::endl;
+}
+  \endcode
+
+*/
+vpImagePoint& vpImagePoint::operator+=(const vpImagePoint &ip) {
+  this->i += ip.i;
+  this->j += ip.j;
+  return *this;
+}
+
+/*!
+
+  Operator /=.
+
+  This operator can be used to compute the center of gravity of a set of image points.
+  \code
+#include <iostream>
+#include <vector>
+#include <visp/vpImagePoint.h>
+
+int main()
+{
+std::vector<vpImagePoint> ip(2);
+
+ip[0].set_ij(100, 200);
+ip[1].set_ij(300, 400);
+
+vpImagePoint cog(0,0);
+for(unsigned int i=0; i<ip.size(); i++)
+  cog += ip[i];
+cog /= ip.size();
+std::cout << "cog: " << cog << std::endl;
+}
+  \endcode
+
+*/
+vpImagePoint& vpImagePoint::operator/=(const double scale) {
+  this->i /= scale;
+  this->j /= scale;
+  return *this;
+}
+
+/*!
+  \relates vpImagePoint
+
+  Returns true if ip1 and ip2 are equal; otherwire returns false.
+
+*/
+VISP_EXPORT bool operator==( const vpImagePoint &ip1, const vpImagePoint &ip2 ) {
+  //return ( ( ip1.get_i() == ip2.get_i() ) && ( ip1.get_j() == ip2.get_j() ) );
+
+  double i1 = ip1.get_i();
+  double j1 = ip1.get_j();
+  double i2 = ip2.get_i();
+  double j2 = ip2.get_j();
+
+  return (
+    ( std::fabs(i1-i2) <= std::fabs(vpMath::maximum(i1, i2))*std::numeric_limits<double>::epsilon() )
+    &&
+    ( std::fabs(j1-j2) <= std::fabs(vpMath::maximum(j1, j2))*std::numeric_limits<double>::epsilon() )
+    );
+}
+
+/*!
+
+  \relates vpImagePoint
+
+  Returns true if ip1 and ip2 are different; otherwire returns true.
+
+*/
+VISP_EXPORT bool operator!=( const vpImagePoint &ip1, const vpImagePoint &ip2 ) {
+  //return ( ( ip1.get_i() != ip2.get_i() ) || ( ip1.get_j() != ip2.get_j() ) );
+  double i1 = ip1.get_i();
+  double j1 = ip1.get_j();
+  double i2 = ip2.get_i();
+  double j2 = ip2.get_j();
+
+  return (
+    ( std::fabs(i1-i2) > std::fabs(vpMath::maximum(i1, i2))*std::numeric_limits<double>::epsilon() )
+    ||
+    ( std::fabs(j1-j2) > std::fabs(vpMath::maximum(j1, j2))*std::numeric_limits<double>::epsilon() )
+    );
+}
+
+/*!
+
+  \relates vpImagePoint
+
+  Returns a vpImagePoint wich is the sum of \f$ ip1 \f$ and \f$ ip2 \f$.
+
+*/
+VISP_EXPORT vpImagePoint operator+( const vpImagePoint &ip1, const vpImagePoint &ip2 ) {
+  return ( vpImagePoint(ip1.get_i()+ip2.get_i(), ip1.get_j()+ip2.get_j()));
+}
+/*!
+
+  \relates vpImagePoint
+
+  Returns a vpImagePoint wich is the sum of \f$ ip1 \f$ and \f$ ip2 \f$.
+
+*/
+VISP_EXPORT vpImagePoint operator+=( const vpImagePoint &ip1, const vpImagePoint &ip2 ) {
+  return ( vpImagePoint(ip1.get_i()+ip2.get_i(), ip1.get_j()+ip2.get_j()));
+}
+/*!
+
+  \relates vpImagePoint
+
+  Returns a vpImagePoint with an offset added to the two coordinates.
+
+  \code
+#include <iostream>
+#include <visp/vpImagePoint.h>
+
+int main()
+{
+  vpImagePoint ip(100, 200); // Create an image point with coordinates i=100, j=200
+  std::cout << "ip: " << ip << std::endl; // coordinates (100, 200)
+  std::cout << "ip+10: " << ip+10 << std::endl; // new coordinates (110, 210)
+
+  return 0;
+}
+  \endcode
+*/
+VISP_EXPORT vpImagePoint operator+( const vpImagePoint &ip1, const int offset ) {
+  return ( vpImagePoint(ip1.get_i()+offset, ip1.get_j()+offset));
+}
+/*!
+
+  \relates vpImagePoint
+
+  Returns a vpImagePoint with an offset added to the two coordinates.
+
+  \code
+#include <iostream>
+#include <visp/vpImagePoint.h>
+
+int main()
+{
+  vpImagePoint ip(100, 200); // Create an image point with coordinates i=100, j=200
+  std::cout << "ip: " << ip << std::endl; // coordinates (100, 200)
+  std::cout << "ip+12.34: " << ip+12.34 << std::endl; // new coordinates (112.34, 212.34)
+
+  return 0;
+}
+  \endcode
+*/
+VISP_EXPORT vpImagePoint operator+( const vpImagePoint &ip1, const double offset ) {
+  return ( vpImagePoint(ip1.get_i()+offset, ip1.get_j()+offset));
+}
+
+/*!
+
+  \relates vpImagePoint
+
+  Returns a vpImagePoint wich is the difference between \f$ ip1 \f$ and \f$ ip2 \f$.
+
+*/
+VISP_EXPORT vpImagePoint operator-( const vpImagePoint &ip1, const vpImagePoint &ip2 ) {
+  return ( vpImagePoint(ip1.get_i()-ip2.get_i(), ip1.get_j()-ip2.get_j()));
+}
+/*!
+
+  \relates vpImagePoint
+
+  Returns a vpImagePoint with an offset substracted to the two coordinates.
+
+  \code
+#include <iostream>
+#include <visp/vpImagePoint.h>
+
+int main()
+{
+  vpImagePoint ip(100, 200); // Create an image point with coordinates i=100, j=200
+  std::cout << "ip: " << ip << std::endl; // coordinates (100, 200)
+  std::cout << "ip-10: " << ip-10 << std::endl; // new coordinates (90, 190)
+
+  return 0;
+}
+  \endcode
+*/
+VISP_EXPORT vpImagePoint operator-( const vpImagePoint &ip1, const int offset ) {
+  return ( vpImagePoint(ip1.get_i()-offset, ip1.get_j()-offset));
+}
+/*!
+
+  \relates vpImagePoint
+
+  Returns a vpImagePoint with an offset substracted to the two coordinates.
+
+  \code
+#include <iostream>
+#include <visp/vpImagePoint.h>
+
+int main()
+{
+  vpImagePoint ip(100, 200); // Create an image point with coordinates i=100, j=200
+  std::cout << "ip: " << ip << std::endl; // coordinates (100, 200)
+  std::cout << "ip-12.34: " << ip-12.34 << std::endl; // new coordinates (87.66, 187.66)
+
+  return 0;
+}
+  \endcode
+*/
+VISP_EXPORT vpImagePoint operator-( const vpImagePoint &ip1, const double offset ) {
+  return ( vpImagePoint(ip1.get_i()-offset, ip1.get_j()-offset));
+}
+/*!
+
+  \relates vpImagePoint
+
+  Returns a vpImagePoint with coordinates multiplied by a scale factor.
+
+  \code
+#include <iostream>
+#include <visp/vpImagePoint.h>
+
+int main()
+{
+  vpImagePoint ip(100, 200); // Create an image point with coordinates i=100, j=200
+  std::cout << "ip: " << ip << std::endl; // coordinates (100, 200)
+  std::cout << "ip*2: " << ip*2 << std::endl; // new coordinates (200, 400)
+
+  return 0;
+}
+  \endcode
+*/
+VISP_EXPORT vpImagePoint operator*( const vpImagePoint &ip1, const double scale ) {
+  return ( vpImagePoint(ip1.get_i()*scale, ip1.get_j()*scale));
+}
+/*!
+
+  \relates vpImagePoint
+
+  Returns a vpImagePoint with coordinates divided by a scale factor.
+
+  \code
+#include <iostream>
+#include <visp/vpImagePoint.h>
+
+int main()
+{
+  vpImagePoint ip(100, 200); // Create an image point with coordinates i=100, j=200
+  std::cout << "ip: " << ip << std::endl; // coordinates (100, 200)
+  std::cout << "ip/2: " << ip/2 << std::endl; // new coordinates (50, 100)
+
+  return 0;
+}
+  \endcode
+*/
+VISP_EXPORT vpImagePoint operator/( const vpImagePoint &ip1, const double scale ) {
+  return ( vpImagePoint(ip1.get_i()/scale, ip1.get_j()/scale));
+}
+
+/*!
+
+  \relates vpImagePoint
+
+  Writes the image point coordinates \e ip to the stream \e os, and
+  returns a reference to the stream. Writes the first coordinate along
+  the \e i axis and then the second one along the \e j axis. The
+  coordinates are separated by a comma.
+
+  The following code
+  \code
+#include <iostream>
+
+#include <visp/vpImagePoint.h>
+int main()
+{
+  vpImagePoint ip;
+
+  ip.set_i(10);
+  ip.set_j(11.1);
+
+  std::cout << "Image point with coordinates: " << ip << std::endl;
+
+  return 0;
+}
+  \endcode
+
+  The previous sample code produces the output:
+  \verbatim
+Image point with coordinates: 10, 11.1
+  \endverbatim
+*/
+VISP_EXPORT std::ostream& operator<< (std::ostream &os, const vpImagePoint& ip)
+ {
+  os << ip.get_i() << ", " << ip.get_j();
+  return os;
+}
diff --git a/src/image/vpImagePoint.h b/src/image/vpImagePoint.h
index 1b3e7f11..95350fea 100644
--- a/src/image/vpImagePoint.h
+++ b/src/image/vpImagePoint.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpImagePoint.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpImagePoint.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -96,18 +96,12 @@ class VISP_EXPORT vpImagePoint
     Default constructor that initialize the coordinates of the image
     point to zero.
   */
-  inline vpImagePoint() {
-    i = 0;
-    j = 0;
-  }
+  inline vpImagePoint() : i(0), j(0) {}
   /*!
     Default constructor that initialize the coordinates of the image
-    thanks to the parameters \f$ i \f$ and \f$ j \f$.
+    thanks to the parameters \f$ ii \f$ and \f$ jj \f$.
   */
-  inline vpImagePoint(double i, double j) {
-    this->i = i;
-    this->j = j;
-  }
+  inline vpImagePoint(double ii, double jj) : i(ii), j(jj) {}
   /*!
     Copy constructor.
 
@@ -115,15 +109,12 @@ class VISP_EXPORT vpImagePoint
 
     \param ip : An image point.
   */
-  inline vpImagePoint(const vpImagePoint &ip) {
-    this->i = ip.i;
-    this->j = ip.j;
-  }
+  inline vpImagePoint(const vpImagePoint &ip) : i(ip.i), j(ip.j) {}
   //! Destructor.
   inline virtual ~vpImagePoint() { ; }
 
   /*!
-  
+
     Copy operator.
 
   */
@@ -132,41 +123,63 @@ class VISP_EXPORT vpImagePoint
     this->j = ip.j;
     return *this;
   }
+   vpImagePoint& operator+=(const vpImagePoint &ip);
+
+  /*!
+
+    Operator -=.
+
+  */
+  inline vpImagePoint& operator-=(const vpImagePoint &ip) {
+    this->i -= ip.i;
+    this->j -= ip.j;
+    return *this;
+  }
+  vpImagePoint& operator/=(const double scale);
+  /*!
+
+    Operator *=.
+*/
+  inline vpImagePoint& operator*=(const double scale) {
+    this->i *= scale;
+    this->j *= scale;
+    return *this;
+  }
 
   /*!
 
     Sets the point coordinate corresponding to the \f$ i \f$ axes in
     the frame (i,j).
 
-    \param i : The desired value for the coordinate along the \f$ i \f$ axes.
+    \param ii : The desired value for the coordinate along the \f$ i \f$ axes.
 
     \sa set_j(), set_u(), set_v()
   */
-  inline void set_i(const double i) {  this->i = i ; }
+  inline void set_i(const double ii) {  this->i = ii ; }
 
   /*!
 
     Sets the point coordinate corresponding to the \f$ j \f$ axes in
     the frame (i,j).
 
-    \param j : The desired value for the coordinate along the \f$ j \f$ axes.
+    \param jj : The desired value for the coordinate along the \f$ j \f$ axes.
 
     \sa set_i(), set_u(), set_v()
   */
-  inline void set_j(const double j) {  this->j = j ; }
+  inline void set_j(const double jj) {  this->j = jj ; }
 
   /*!
 
     Sets the point coordinates in the frame (i,j).
 
-    \param i : The desired value for the coordinate along the \f$ i \f$ axes.
-    \param j : The desired value for the coordinate along the \f$ j \f$ axes.
+    \param ii : The desired value for the coordinate along the \f$ i \f$ axes.
+    \param jj : The desired value for the coordinate along the \f$ j \f$ axes.
 
     \sa set_i(), set_j(), set_u(), set_v()
   */
-  inline void set_ij(const double i, const double j) {
-    this->i = i ;
-    this->j = j ;
+  inline void set_ij(const double ii, const double jj) {
+    this->i = ii ;
+    this->j = jj ;
   }
 
   /*!
@@ -276,268 +289,23 @@ class VISP_EXPORT vpImagePoint
   
   bool inRectangle( const vpRect &rect ) const;
 
+  friend VISP_EXPORT bool operator==( const vpImagePoint &ip1, const vpImagePoint &ip2 );
+  friend VISP_EXPORT bool operator!=( const vpImagePoint &ip1, const vpImagePoint &ip2 );
+  friend VISP_EXPORT vpImagePoint operator+=( const vpImagePoint &ip1, const vpImagePoint &ip2 );
+  friend VISP_EXPORT vpImagePoint operator+( const vpImagePoint &ip1, const vpImagePoint &ip2 );
+  friend VISP_EXPORT vpImagePoint operator+( const vpImagePoint &ip1, const int offset );
+  friend VISP_EXPORT vpImagePoint operator+( const vpImagePoint &ip1, const double offset );
+  friend VISP_EXPORT vpImagePoint operator-( const vpImagePoint &ip1, const vpImagePoint &ip2 );
+  friend VISP_EXPORT vpImagePoint operator-( const vpImagePoint &ip1, const int offset );
+  friend VISP_EXPORT vpImagePoint operator-( const vpImagePoint &ip1, const double offset );
+  friend VISP_EXPORT vpImagePoint operator*( const vpImagePoint &ip1, const double scale );
+  friend VISP_EXPORT vpImagePoint operator/( const vpImagePoint &ip1, const double scale );
+  friend VISP_EXPORT std::ostream& operator<< (std::ostream &os, const vpImagePoint& ip);
+
   vpImagePoint projection(const vpHomography& aHb);
 
  private:
   double i,j;
 };
 
-/*!
-  \relates vpImagePoint
-
-  Returns true if ip1 and ip2 are equal; otherwire returns false.
-
-*/
-VISP_EXPORT inline bool operator==( const vpImagePoint &ip1, 
-				    const vpImagePoint &ip2 ) {
-  //return ( ( ip1.get_i() == ip2.get_i() ) && ( ip1.get_j() == ip2.get_j() ) );
-
-  double i1 = ip1.get_i();
-  double j1 = ip1.get_j();
-  double i2 = ip2.get_i();
-  double j2 = ip2.get_j();
-
-  return (
-	  ( std::fabs(i1-i2) <= std::fabs(vpMath::maximum(i1, i2))*std::numeric_limits<double>::epsilon() )
-	  && 
-	  ( std::fabs(j1-j2) <= std::fabs(vpMath::maximum(j1, j2))*std::numeric_limits<double>::epsilon() )
-	  );
-}
-
-/*!
-
-  \relates vpImagePoint
-
-  Returns true if ip1 and ip2 are different; otherwire returns true.
-
-*/
-VISP_EXPORT inline bool operator!=( const vpImagePoint &ip1, 
-				    const vpImagePoint &ip2 ) {
-  //return ( ( ip1.get_i() != ip2.get_i() ) || ( ip1.get_j() != ip2.get_j() ) );
-  double i1 = ip1.get_i();
-  double j1 = ip1.get_j();
-  double i2 = ip2.get_i();
-  double j2 = ip2.get_j();
-
-  return (
-	  ( std::fabs(i1-i2) > std::fabs(vpMath::maximum(i1, i2))*std::numeric_limits<double>::epsilon() )
-	  || 
-	  ( std::fabs(j1-j2) > std::fabs(vpMath::maximum(j1, j2))*std::numeric_limits<double>::epsilon() )
-	  );
-}
-
-/*!
-
-  \relates vpImagePoint
-
-  Returns a vpImagePoint wich is the sum of \f$ ip1 \f$ and \f$ ip2 \f$.
-
-*/
-VISP_EXPORT inline vpImagePoint operator+( const vpImagePoint &ip1, 
-				           const vpImagePoint &ip2 ) {
-  return ( vpImagePoint(ip1.get_i()+ip2.get_i(), ip1.get_j()+ip2.get_j()));
-}
-/*!
-
-  \relates vpImagePoint
-
-  Returns a vpImagePoint with an offset added to the two coordinates.
-
-  \code
-#include <iostream>
-#include <visp/vpImagePoint.h>
-
-int main()
-{
-  vpImagePoint ip(100, 200); // Create an image point with coordinates i=100, j=200
-  std::cout << "ip: " << ip << std::endl; // coordinates (100, 200)
-  std::cout << "ip+10: " << ip+10 << std::endl; // new coordinates (110, 210)
- 
-  return 0;
-}
-  \endcode
-*/
-VISP_EXPORT inline vpImagePoint operator+( const vpImagePoint &ip1, 
-				           const int offset ) {
-  return ( vpImagePoint(ip1.get_i()+offset, ip1.get_j()+offset));
-}
-/*!
-
-  \relates vpImagePoint
-
-  Returns a vpImagePoint with an offset added to the two coordinates.
-
-  \code
-#include <iostream>
-#include <visp/vpImagePoint.h>
-
-int main()
-{
-  vpImagePoint ip(100, 200); // Create an image point with coordinates i=100, j=200
-  std::cout << "ip: " << ip << std::endl; // coordinates (100, 200)
-  std::cout << "ip+12.34: " << ip+12.34 << std::endl; // new coordinates (112.34, 212.34)
-
-  return 0;
-}
-  \endcode
-*/
-VISP_EXPORT inline vpImagePoint operator+( const vpImagePoint &ip1, 
-				           const double offset ) {
-  return ( vpImagePoint(ip1.get_i()+offset, ip1.get_j()+offset));
-}
-
-/*!
-
-  \relates vpImagePoint
-
-  Returns a vpImagePoint wich is the difference between \f$ ip1 \f$ and \f$ ip2 \f$.
-
-*/
-VISP_EXPORT inline vpImagePoint operator-( const vpImagePoint &ip1, 
-				           const vpImagePoint &ip2 ) {
-  return ( vpImagePoint(ip1.get_i()-ip2.get_i(), ip1.get_j()-ip2.get_j()));
-}
-/*!
-
-  \relates vpImagePoint
-
-  Returns a vpImagePoint with an offset substracted to the two coordinates.
-
-  \code
-#include <iostream>
-#include <visp/vpImagePoint.h>
-
-int main()
-{
-  vpImagePoint ip(100, 200); // Create an image point with coordinates i=100, j=200
-  std::cout << "ip: " << ip << std::endl; // coordinates (100, 200)
-  std::cout << "ip-10: " << ip-10 << std::endl; // new coordinates (90, 190)
-
-  return 0;
-}
-  \endcode
-*/
-VISP_EXPORT inline vpImagePoint operator-( const vpImagePoint &ip1, 
-				           const int offset ) {
-  return ( vpImagePoint(ip1.get_i()-offset, ip1.get_j()-offset));
-}
-/*!
-
-  \relates vpImagePoint
-
-  Returns a vpImagePoint with an offset substracted to the two coordinates.
-
-  \code
-#include <iostream>
-#include <visp/vpImagePoint.h>
-
-int main()
-{
-  vpImagePoint ip(100, 200); // Create an image point with coordinates i=100, j=200
-  std::cout << "ip: " << ip << std::endl; // coordinates (100, 200)
-  std::cout << "ip-12.34: " << ip-12.34 << std::endl; // new coordinates (87.66, 187.66)
-
-  return 0;
-}
-  \endcode
-*/
-VISP_EXPORT inline vpImagePoint operator-( const vpImagePoint &ip1, 
-				           const double offset ) {
-  return ( vpImagePoint(ip1.get_i()-offset, ip1.get_j()-offset));
-}
-/*!
-
-  \relates vpImagePoint
-
-  Returns a vpImagePoint with coordinates multiplied by a scale factor.
-
-  \code
-#include <iostream>
-#include <visp/vpImagePoint.h>
-
-int main()
-{
-  vpImagePoint ip(100, 200); // Create an image point with coordinates i=100, j=200
-  std::cout << "ip: " << ip << std::endl; // coordinates (100, 200)
-  std::cout << "ip*2: " << ip*2 << std::endl; // new coordinates (200, 400)
-
-  return 0;
-}
-  \endcode
-*/
-VISP_EXPORT inline vpImagePoint operator*( const vpImagePoint &ip1, 
-				           const double scale ) {
-  return ( vpImagePoint(ip1.get_i()*scale, ip1.get_j()*scale));
-}
-/*!
-
-  \relates vpImagePoint
-
-  Returns a vpImagePoint with coordinates divided by a scale factor.
-
-  \code
-#include <iostream>
-#include <visp/vpImagePoint.h>
-
-int main()
-{
-  vpImagePoint ip(100, 200); // Create an image point with coordinates i=100, j=200
-  std::cout << "ip: " << ip << std::endl; // coordinates (100, 200)
-  std::cout << "ip/2: " << ip/2 << std::endl; // new coordinates (50, 100)
-
-  return 0;
-}
-  \endcode
-*/
-VISP_EXPORT inline vpImagePoint operator/( const vpImagePoint &ip1, 
-				           const double scale ) {
-  return ( vpImagePoint(ip1.get_i()/scale, ip1.get_j()/scale));
-}
-
-/*!
-
-  \relates vpImagePoint
-
-  Writes the image point coordinates \e ip to the stream \e os, and
-  returns a reference to the stream. Writes the first coordinate along
-  the \e i axis and then the second one along the \e j axis. The
-  coordinates are separated by a comma.
-
-  The following code
-  \code
-#include <iostream>
-
-#include <visp/vpImagePoint.h>
-int main()
-{
-  vpImagePoint ip;
-
-  ip.set_i(10);
-  ip.set_j(11.1);
-
-  std::cout << "Image point with coordinates: " << ip << std::endl;
-
-  return 0;
-}
-  \endcode
-
-  The previous sample code produces the output:
-  \verbatim
-Image point with coordinates: 10, 11.1
-  \endverbatim
-*/
-VISP_EXPORT inline std::ostream& operator<< (std::ostream &os,
-					     const vpImagePoint& ip)
- {
-  os << ip.get_i() << ", " << ip.get_j();
-  return os;
-}
-
-
 #endif
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/src/image/vpImageTools.cpp b/src/image/vpImageTools.cpp
index 59a4eef4..c0ea67ad 100644
--- a/src/image/vpImageTools.cpp
+++ b/src/image/vpImageTools.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpImageTools.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpImageTools.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -74,18 +74,18 @@
 
   \code
 #include <visp/vpImageTools.h>
-
 #include <visp/vpImage.h>
 #include <visp/vpImageIo.h>
 
 int main()
 {
   vpImage<unsigned char> I;
-#ifdef UNIX
-  std::string filename("/local/soft/ViSP/ViSP-images/Klimt/Klimt.pgm");
-#elif WIN32
-  std::string filename("C:/temp/ViSP-images/Klimt/Klimt.pgm");
+#ifdef _WIN32
+  std::string filename("C:/temp/ViSP-images/Klimt/Klimt.ppm");
+#else
+  std::string filename("/local/soft/ViSP/ViSP-images/Klimt/Klimt.ppm");
 #endif
+
   // Read an image from the disk
   vpImageIo::read(I, filename); 
 
diff --git a/src/image/vpImageTools.h b/src/image/vpImageTools.h
index 4a984273..e9723577 100644
--- a/src/image/vpImageTools.h
+++ b/src/image/vpImageTools.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpImageTools.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpImageTools.h 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -249,7 +249,11 @@ public:
   unsigned int nthreads;
   unsigned int threadid;
 public:
-  vpUndistortInternalType() {};
+  vpUndistortInternalType() {
+    src = dst = NULL;
+    width = height = 0;
+    nthreads = threadid = 0;
+  };
   vpUndistortInternalType(const vpUndistortInternalType<Type> &u) {
     src = u.src;
     dst = u.dst;
@@ -548,6 +552,31 @@ void vpImageTools::flip(const vpImage<Type> &I,
   Flip vertically the input image.
 
   \param I : Input image which is flipped and modified in output.
+
+  The following example shows how to use this function:
+  \code
+#include <visp/vpImageTools.h>
+#include <visp/vpImage.h>
+#include <visp/vpImageIo.h>
+
+int main()
+{
+  vpImage<vpRGBa> I;
+#ifdef _WIN32
+  std::string filename("C:/temp/ViSP-images/Klimt/Klimt.ppm");
+#else
+  std::string filename("/local/soft/ViSP/ViSP-images/Klimt/Klimt.ppm");
+#endif
+
+  // Read an image from the disk
+  vpImageIo::read(I, filename);
+
+  // Flip the image
+  vpImageTools::flip(I);
+
+  vpImageIo::write(I, "Klimt-flip.ppm"); // Write the image in a PGM P5 image file format
+}
+  \endcode
 */
 template<class Type>
 void vpImageTools::flip(vpImage<Type> &I)
diff --git a/src/image/vpRGBa.cpp b/src/image/vpRGBa.cpp
index 8360c08c..297b3205 100644
--- a/src/image/vpRGBa.cpp
+++ b/src/image/vpRGBa.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRGBa.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRGBa.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,25 +58,27 @@
 
   \param v : Input color ( R = G = B = v )
 */
-void
+vpRGBa &
 vpRGBa::operator=(const unsigned char &v)
 {
   this->R = v;
   this->G = v;
   this->B = v;
   this->A = v;
+  return *this;
 }
 
 /*!
   Copy operator.
 */
-void
+vpRGBa &
 vpRGBa::operator=(const vpRGBa &v)
 {
   this->R = v.R;
   this->G = v.G;
   this->B = v.B;
   this->A = v.A;
+  return *this;
 }
 
 /*!
@@ -88,7 +90,7 @@ vpRGBa::operator=(const vpRGBa &v)
   \exception vpException::dimensionError : If v is not a 4 four
   dimention vector.
 */
-void
+vpRGBa &
 vpRGBa::operator=(const vpColVector &v)
 {
   if (v.getRows() != 4) {
@@ -99,6 +101,7 @@ vpRGBa::operator=(const vpColVector &v)
   G = (unsigned char)v[1];
   B = (unsigned char)v[2];
   A = (unsigned char)v[3];
+  return *this;
 }
 
 /*!
diff --git a/src/image/vpRGBa.h b/src/image/vpRGBa.h
index 5307f17b..5566e567 100644
--- a/src/image/vpRGBa.h
+++ b/src/image/vpRGBa.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRGBa.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRGBa.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -74,27 +74,22 @@ public:
     Build a black value.
     
   */
-  inline vpRGBa() 
-    : R(0), G(0), B(0), A(0) 
-    {
-    };
+  inline vpRGBa() : R(0), G(0), B(0), A(0) {};
   
   /*!
     Constructor.
     
     Initialize the color with R, G, B, A values.
     
-    \param R : Red value.
-    \param G : Green value.
-    \param B : Blue value.
-    \param A : Additional value.
+    \param r : Red value.
+    \param g : Green value.
+    \param b : Blue value.
+    \param a : Additional value.
     
   */
-  inline vpRGBa(const unsigned char &R, const unsigned char &G,
-		const unsigned char &B, const unsigned char &A=0) 
-    : R(R), G(G), B(B), A(A)
-  {
-  };
+  inline vpRGBa(const unsigned char &r, const unsigned char &g,
+    const unsigned char &b, const unsigned char &a=0)
+    : R(r), G(g), B(b), A(a) {};
 
 
   /*!
@@ -105,19 +100,13 @@ public:
     \param v : Value to set.
     
   */
-  inline vpRGBa(const unsigned char &v) 
-    : R(v), G(v), B(v), A(v)
-  {
-  };
+  inline vpRGBa(const unsigned char &v) : R(v), G(v), B(v), A(v) {};
 
 
   /*!
     Copy constructor.
   */
-  inline vpRGBa(const vpRGBa &v)
-  {
-    *this = v ;
-  };
+  inline vpRGBa(const vpRGBa &v) : R(v.R), G(v.G), B(v.B), A(v.A) {};
 
   /*!
     Create a RGBa value from a 4 dimension column vector.
@@ -128,14 +117,18 @@ public:
     A=v[3]
     
   */
-  inline vpRGBa(const vpColVector &v)
+  inline vpRGBa(const vpColVector &v) : R(0), G(0), B(0), A(0)
   {
-    *this = v ;
-  }
+    *this = v;
+  };
+
+  // We cannot add here the following destructor without changing the hypothesis that the size of this class is 4.
+  // With the destructor it becomes 16 that does break a lot of things arround image conversions
+  // virtual ~vpRGBa() {}; // Not to implement
 
-  void operator=(const unsigned char &v) ;
-  void operator=(const vpRGBa &v) ;
-  void operator=(const vpColVector &v) ;
+  vpRGBa & operator=(const unsigned char &v) ;
+  vpRGBa & operator=(const vpRGBa &v) ;
+  vpRGBa & operator=(const vpColVector &v) ;
   bool operator==(const vpRGBa &v);
   bool operator!=(const vpRGBa &v);
 
diff --git a/src/key-point/vpBasicKeyPoint.cpp b/src/key-point/vpBasicKeyPoint.cpp
index 19e8dfb2..68ad68b1 100644
--- a/src/key-point/vpBasicKeyPoint.cpp
+++ b/src/key-point/vpBasicKeyPoint.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpBasicKeyPoint.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpBasicKeyPoint.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -42,23 +42,12 @@
 
 #include <visp/vpBasicKeyPoint.h>
 
-#include <vector>
-
 /*!
   Basic constructor.
 */
 vpBasicKeyPoint::vpBasicKeyPoint()
+  : referenceImagePointsList(), currentImagePointsList(), matchedReferencePoints(), _reference_computed(false)
 {
-  _reference_computed = false;
-  matchedReferencePoints.resize(0);
-  currentImagePointsList.resize(0);
-  referenceImagePointsList.resize(0);
 }
 
 
-/*
- * Local variables:
- * c-basic-offset: 4
- * End:
- */
-
diff --git a/src/key-point/vpBasicKeyPoint.h b/src/key-point/vpBasicKeyPoint.h
index 3cf81c00..375aa749 100644
--- a/src/key-point/vpBasicKeyPoint.h
+++ b/src/key-point/vpBasicKeyPoint.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpBasicKeyPoint.h 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpBasicKeyPoint.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/key-point/vpFernClassifier.cpp b/src/key-point/vpFernClassifier.cpp
index bfd3a784..f8035811 100644
--- a/src/key-point/vpFernClassifier.cpp
+++ b/src/key-point/vpFernClassifier.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFernClassifier.cpp 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpFernClassifier.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -54,9 +54,14 @@
   Basic constructor 
   
 */
-vpFernClassifier::vpFernClassifier():vpBasicKeyPoint(), gen(0, 256, 5, true, 0.6, 1.5, -CV_PI/2, CV_PI/2, -CV_PI/2, CV_PI/2)
+vpFernClassifier::vpFernClassifier()
+  : vpBasicKeyPoint(),
+    ldetector(), fernClassifier(), gen(0, 256, 5, true, 0.6, 1.5, -CV_PI/2, CV_PI/2, -CV_PI/2, CV_PI/2),
+    hasLearn(false), threshold(20), nbView(2000), dist(2), nbClassfier(100), ClassifierSize(11),
+    nbOctave(2), patchSize(32), radius(7), nbPoints(200), blurImage(true), radiusBlur(7),
+    sigmaBlur(1), nbMinPoint(10), curIplImg(NULL), objKeypoints(), modelROI_Ref(), modelROI(),
+    modelPoints(), imgKeypoints(), refPt(), curPt()
 {
-  init();
 }
 
 /*!
@@ -70,9 +75,14 @@ vpFernClassifier::vpFernClassifier():vpBasicKeyPoint(), gen(0, 256, 5, true, 0.6
   \param _objectName : the name of the object to load
 */
 vpFernClassifier::vpFernClassifier(const std::string& _dataFile, const std::string& _objectName)
+  : vpBasicKeyPoint(),
+    ldetector(), fernClassifier(), gen(0, 256, 5, true, 0.6, 1.5, -CV_PI/2, CV_PI/2, -CV_PI/2, CV_PI/2),
+    hasLearn(false), threshold(20), nbView(2000), dist(2), nbClassfier(100), ClassifierSize(11),
+    nbOctave(2), patchSize(32), radius(7), nbPoints(200), blurImage(true), radiusBlur(7),
+    sigmaBlur(1), nbMinPoint(10), curIplImg(NULL), objKeypoints(), modelROI_Ref(), modelROI(),
+    modelPoints(), imgKeypoints(), refPt(), curPt()
 {
-  init();
-  this->load(_dataFile, _objectName);
+   this->load(_dataFile, _objectName);
 }
 
 /*!
diff --git a/src/key-point/vpFernClassifier.h b/src/key-point/vpFernClassifier.h
index 399cbc6c..f840e3f2 100644
--- a/src/key-point/vpFernClassifier.h
+++ b/src/key-point/vpFernClassifier.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFernClassifier.h 4201 2013-04-08 08:20:47Z fspindle $
+ * $Id: vpFernClassifier.h 4664 2014-02-16 16:17:54Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -73,13 +73,8 @@
   image. The points of interests belonging to the model and the points detected
   in the current image are given in pixels thanks to the vpImagePoint class.
   
-  For more details about the Ferns Classifier and the point detector, see
-   - Mustafa Özuysal, Michael Calonder, Vincent Lepetit, Pascal Fua, "Fast 
-      KeyPoint Recognition Using Random Ferns", IEEE Transactions on Pattern 
-      Analysis and Machine Intelligence, 15 Jan. 2009.
-
-   - Vincent Lepetit, Pascal Fua, “Towards Recognizing Feature Points Using 
-      Classification Trees”, Technical Report IC/2004/74, EPFL, 2004.
+  For more details about the Ferns Classifier and the point detector,
+  see \cite Ozuysal10 and \cite Lepetit04c.
       
   To use this class, you first have to detect points in the model and train the 
   associated Fern classifier. Then, for each new grabbed image, You can detect
diff --git a/src/key-point/vpKeyPointSurf.cpp b/src/key-point/vpKeyPointSurf.cpp
index 126fed3b..7a7d8194 100644
--- a/src/key-point/vpKeyPointSurf.cpp
+++ b/src/key-point/vpKeyPointSurf.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpKeyPointSurf.cpp 4182 2013-03-27 13:20:58Z fspindle $
+ * $Id: vpKeyPointSurf.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -56,9 +56,21 @@
 #include <vector>
 #include <list>
 
+double compareSURFDescriptors( const float* d1, const float* d2, double best, int length );
+int naiveNearestNeighbor( const float *vec, int laplacian,
+                          const CvSeq *model_keypoints,
+                          const CvSeq *model_descriptors );
+int naiveNearestNeighbor( const float *vec,
+                          const CvSeq *ref_keypoints,
+                          const CvSeq *ref_descriptors );
+void findPairs( const CvSeq* objectKeypoints,
+                const CvSeq* objectDescriptors,
+                const CvSeq* imageKeypoints,
+                const CvSeq* imageDescriptors,
+                std::vector<int>& ptpairs );
+
 // Compare two surf descriptors.
-double compareSURFDescriptors( const float* d1, const float* d2,
-			       double best, int length )
+double compareSURFDescriptors( const float* d1, const float* d2, double best, int length )
 {
   double total_cost = 0;
   int i;
@@ -79,8 +91,8 @@ double compareSURFDescriptors( const float* d1, const float* d2,
 
 //Find for a point candidate the most similar point in the reference point list.
 int naiveNearestNeighbor( const float *vec, int laplacian,
-			  const CvSeq *model_keypoints,
-			  const CvSeq *model_descriptors )
+                          const CvSeq *model_keypoints,
+                          const CvSeq *model_descriptors )
 {
   int length = (int)(model_descriptors->elem_size/(int)sizeof(float));
   int i, neighbor = -1;
@@ -115,8 +127,8 @@ int naiveNearestNeighbor( const float *vec, int laplacian,
 
 //Find for a point candidate the most similar point in the reference point list.
 int naiveNearestNeighbor( const float *vec,
-			  const CvSeq *ref_keypoints,
-			  const CvSeq *ref_descriptors )
+                          const CvSeq *ref_keypoints,
+                          const CvSeq *ref_descriptors )
 {
   int length = (int)(ref_descriptors->elem_size/(int)sizeof(float));
   int i, neighbor = -1;
@@ -149,10 +161,10 @@ int naiveNearestNeighbor( const float *vec,
 
 //Find all the matched points
 void findPairs( const CvSeq* objectKeypoints,
-		const CvSeq* objectDescriptors,
-		const CvSeq* imageKeypoints,
-		const CvSeq* imageDescriptors,
-		std::vector<int>& ptpairs )
+                const CvSeq* objectDescriptors,
+                const CvSeq* imageKeypoints,
+                const CvSeq* imageDescriptors,
+                std::vector<int>& ptpairs )
 {
   int i;
   CvSeqReader reader, kreader;
@@ -187,18 +199,12 @@ void findPairs( const CvSeq* objectKeypoints,
   type to extended.
 
 */
-vpKeyPointSurf::vpKeyPointSurf():vpBasicKeyPoint()
+vpKeyPointSurf::vpKeyPointSurf()
+  : vpBasicKeyPoint(),
+    storage(NULL), params(), storage_cur(NULL), image_keypoints(NULL), image_descriptors(NULL),
+    ref_keypoints(NULL), ref_descriptors(NULL), hessianThreshold(500), descriptorType(extendedDescriptor)
 {
-  descriptorType = extendedDescriptor;
-  hessianThreshold = 500;
   init();
-
-  image_keypoints = NULL;
-  image_descriptors = NULL;
-  ref_keypoints = NULL;
-  ref_descriptors = NULL;
-
-  storage_cur = NULL;
 }
 
 /*!
diff --git a/src/key-point/vpKeyPointSurf.h b/src/key-point/vpKeyPointSurf.h
index 4002854c..afea5383 100644
--- a/src/key-point/vpKeyPointSurf.h
+++ b/src/key-point/vpKeyPointSurf.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpKeyPointSurf.h 4201 2013-04-08 08:20:47Z fspindle $
+ * $Id: vpKeyPointSurf.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -83,7 +83,7 @@
   The coordinates of the different reference points and matched points
   are given in pixel thanks to the class vpImagePoint. In this
   documentation we do not explain the SURF technics. So if you want to
-  learn more about it you can refere to the following article :
+  learn more about it you can refer to the following article :
   Herbert Bay, Tinne Tuytelaars and Luc Van Gool "SURF: Speeded Up
   Robust Features", Proceedings of the 9th European Conference on
   Computer Vision, Springer LNCS volume 3951, part 1, pp 404--417,
@@ -188,6 +188,8 @@ int main()
 int main() {}
 #endif
   \endcode
+
+  This class is also described in \ref tutorial-matching.
 */
 
 class VISP_EXPORT vpKeyPointSurf : public vpBasicKeyPoint
@@ -239,10 +241,10 @@ class VISP_EXPORT vpKeyPointSurf : public vpBasicKeyPoint
       Computer Vision, Springer LNCS volume 3951, part 1, pp 404--417,
       2006.
 
-      \param hessianThreshold : Desired hessian threshold value.
+      \param hessian_threshold : Desired hessian threshold value.
     */
-    void setHessianThreshold (double hessianThreshold) {
-			this->hessianThreshold = hessianThreshold;
+    void setHessianThreshold (double hessian_threshold) {
+      this->hessianThreshold = hessian_threshold;
 			params = cvSURFParams(this->hessianThreshold, this->descriptorType);
     } ;
 
@@ -250,10 +252,10 @@ class VISP_EXPORT vpKeyPointSurf : public vpBasicKeyPoint
 
       Sets the type of descriptors to use.
 
-      \param descriptorType : Type of descriptor to use.
+      \param descriptor_type : Type of descriptor to use.
     */
-    void setDescriptorType (vpDescriptorType descriptorType) {
-			this->descriptorType = descriptorType;
+    void setDescriptorType (vpDescriptorType descriptor_type) {
+      this->descriptorType = descriptor_type;
 			params = cvSURFParams(this->hessianThreshold, this->descriptorType);
     } ;
 
diff --git a/src/key-point/vpPlanarObjectDetector.cpp b/src/key-point/vpPlanarObjectDetector.cpp
index ddbdaf03..71b4704e 100755
--- a/src/key-point/vpPlanarObjectDetector.cpp
+++ b/src/key-point/vpPlanarObjectDetector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPlanarObjectDetector.cpp 4182 2013-03-27 13:20:58Z fspindle $
+ * $Id: vpPlanarObjectDetector.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -60,13 +60,9 @@
 
 */
 vpPlanarObjectDetector::vpPlanarObjectDetector()
+  : fern(), homography(), H(), dst_corners(), isCorrect(false), ref_corners(), modelROI(), currentImagePoints(),
+    refImagePoints(), minNbMatching(10)
 {
-  isCorrect = false;
-  dst_corners.resize(0); 
-  ref_corners.resize(0);
-  currentImagePoints.resize(0);
-  refImagePoints.resize(0);
-  minNbMatching = 10;
 }
 
 /*!
@@ -78,19 +74,18 @@ vpPlanarObjectDetector::vpPlanarObjectDetector()
 
 */
 vpPlanarObjectDetector::vpPlanarObjectDetector(const std::string& _dataFile, const std::string& _objectName)
+  : fern(), homography(), H(), dst_corners(), isCorrect(false), ref_corners(), modelROI(), currentImagePoints(),
+    refImagePoints(), minNbMatching(10)
 {
-  isCorrect = false;
   load(_dataFile, _objectName);
 }
 
 /*!
-  initialise stuff
-  
+  Initialise stuff. For the moment does nothing.
 */
 void
 vpPlanarObjectDetector::init()
 {
-
 }
 
 /*!
diff --git a/src/key-point/vpPlanarObjectDetector.h b/src/key-point/vpPlanarObjectDetector.h
index 2613dcf8..72d3074e 100755
--- a/src/key-point/vpPlanarObjectDetector.h
+++ b/src/key-point/vpPlanarObjectDetector.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPlanarObjectDetector.h 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpPlanarObjectDetector.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/kalman/vpKalmanFilter.cpp b/src/math/kalman/vpKalmanFilter.cpp
index 336a6d7a..10067e50 100644
--- a/src/math/kalman/vpKalmanFilter.cpp
+++ b/src/math/kalman/vpKalmanFilter.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpKalmanFilter.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpKalmanFilter.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -53,20 +53,20 @@
 /*!
   Initialize the Kalman filter.
   
-  \param size_state : Size of the state vector \f${\bf x}_{k}\f$ for one signal.
+  \param size_state_vector : Size of the state vector \f${\bf x}_{k}\f$ for one signal.
 
-  \param size_measure : Size of the measure vector \f${\bf z}_{k}\f$
+  \param size_measure_vector : Size of the measure vector \f${\bf z}_{k}\f$
   for one signal.
 
-  \param nsignal : Number of signal to filter.
+  \param n_signal : Number of signal to filter.
 */
 void
-vpKalmanFilter::init(unsigned int size_state, unsigned int size_measure, 
-		     unsigned int nsignal)
+vpKalmanFilter::init(unsigned int size_state_vector, unsigned int size_measure_vector,
+                     unsigned int n_signal)
 {
-  this->size_state = size_state;
-  this->size_measure = size_measure ;
-  this->nsignal = nsignal ;
+  this->size_state = size_state_vector;
+  this->size_measure = size_measure_vector ;
+  this->nsignal = n_signal ;
   F.resize(size_state*nsignal, size_state*nsignal) ;
   H.resize(size_measure*nsignal,  size_state*nsignal) ;
 
@@ -91,14 +91,9 @@ vpKalmanFilter::init(unsigned int size_state, unsigned int size_measure,
   
 */
 vpKalmanFilter::vpKalmanFilter()
+  : iter(0), size_state(0), size_measure(0), nsignal(0), verbose_mode(false),
+    Xest(), Xpre(), F(), H(), R(), Q(), dt(-1), Ppre(), Pest(), W(), I()
 {
-  verbose(false);
-  //  init_done = false ;
-  this->size_state = 0;
-  this->size_measure = 0 ;
-  this->nsignal = 0 ;
-  iter = 0 ;
-  dt = -1 ;
 }
 
 /*!
@@ -106,17 +101,12 @@ vpKalmanFilter::vpKalmanFilter()
 
   The verbose mode is by default desactivated.
   
-  \param nsignal : Number of signal to filter.
+  \param n_signal : Number of signal to filter.
 */
-vpKalmanFilter::vpKalmanFilter(unsigned int nsignal)
+vpKalmanFilter::vpKalmanFilter(unsigned int n_signal)
+  : iter(0), size_state(0), size_measure(0), nsignal(n_signal), verbose_mode(false),
+    Xest(), Xpre(), F(), H(), R(), Q(), dt(-1), Ppre(), Pest(), W(), I()
 {
-  verbose(false);
-  // init_done = false;
-  this->size_state = 0;
-  this->size_measure = 0 ;
-  this->nsignal = nsignal;
-  iter = 0 ;
-  dt = -1 ;
 }
 
 /*!
@@ -124,17 +114,18 @@ vpKalmanFilter::vpKalmanFilter(unsigned int nsignal)
 
   The verbose mode is by default desactivated.
   
-  \param size_state : Size of the state vector \f${\bf x}_{(k)}\f$ for one signal.
+  \param size_state_vector : Size of the state vector \f${\bf x}_{(k)}\f$ for one signal.
 
-  \param size_measure : Size of the measure vector \f${\bf z}_{(k)}\f$
+  \param size_measure_vector : Size of the measure vector \f${\bf z}_{(k)}\f$
   for one signal.
 
-  \param nsignal : Number of signal to filter.
+  \param n_signal : Number of signal to filter.
 */
-vpKalmanFilter::vpKalmanFilter(unsigned int size_state, unsigned int size_measure, unsigned int nsignal)
+vpKalmanFilter::vpKalmanFilter(unsigned int size_state_vector, unsigned int size_measure_vector, unsigned int n_signal)
+  : iter(0), size_state(0), size_measure(0), nsignal(0), verbose_mode(false),
+    Xest(), Xpre(), F(), H(), R(), Q(), dt(-1), Ppre(), Pest(), W(), I()
 {
-  verbose(false);
-  init( size_state, size_measure, nsignal) ;
+  init( size_state_vector, size_measure_vector, n_signal) ;
 }
 
 /*!
diff --git a/src/math/kalman/vpKalmanFilter.h b/src/math/kalman/vpKalmanFilter.h
index d7e1e080..823dfe8a 100644
--- a/src/math/kalman/vpKalmanFilter.h
+++ b/src/math/kalman/vpKalmanFilter.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpKalmanFilter.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpKalmanFilter.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -128,18 +128,20 @@ protected :
 
 public:
   vpKalmanFilter() ;
-  vpKalmanFilter(unsigned int nsignal) ;
-  vpKalmanFilter(unsigned int size_state, unsigned int size_measure, unsigned int nsignal) ;
+  vpKalmanFilter(unsigned int n_signal) ;
+  vpKalmanFilter(unsigned int size_state, unsigned int size_measure, unsigned int n_signal) ;
+  /*! Destructor that does noting. */
+  virtual ~vpKalmanFilter() {};
   /*!
     Set the number of signal to filter.
   */
-  void setNumberOfSignal(unsigned int nsignal)
+  void setNumberOfSignal(unsigned int n_signal)
   {
-    this->nsignal = nsignal;
+    this->nsignal = n_signal;
   }
 
   // int init() { return init_done ; }
-  void init(unsigned int size_state, unsigned int size_measure, unsigned int nsignal) ;
+  void init(unsigned int size_state, unsigned int size_measure, unsigned int n_signal) ;
   void prediction() ;
   void filtering(vpColVector &z) ;
   /*!
diff --git a/src/math/kalman/vpLinearKalmanFilterInstantiation.cpp b/src/math/kalman/vpLinearKalmanFilterInstantiation.cpp
index 492b4b8a..dbd55d47 100644
--- a/src/math/kalman/vpLinearKalmanFilterInstantiation.cpp
+++ b/src/math/kalman/vpLinearKalmanFilterInstantiation.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpLinearKalmanFilterInstantiation.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpLinearKalmanFilterInstantiation.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -62,7 +62,7 @@
 
   \warning It is requiered to set the state model before using this method.
 
-  \param nsignal : Number of signal to filter.
+  \param n_signal : Number of signal to filter.
  
   \param sigma_state : Vector that contains the variance of the state
   noise. The dimension of this vector is equal to the state vector
@@ -79,7 +79,7 @@
   \param rho : Degree of correlation between successive accelerations. Values 
   are in [0:1[.
 
-  \param dt : Sampling time \f$\Delta t\f$ expressed is
+  \param delta_t : Sampling time \f$\Delta t\f$ expressed is
   second. Depending on the filter modelization, this value may not be
   used. This is for example the case for the
   vpLinearKalmanFilterInstantiation::stateConstVelWithColoredNoise_MeasureVel model
@@ -174,23 +174,23 @@ int main()
   \endcode
  */
 void
-vpLinearKalmanFilterInstantiation::initFilter(unsigned int nsignal, 
-			   vpColVector &sigma_state,
-			   vpColVector &sigma_measure,
-			   double rho, double dt)
+vpLinearKalmanFilterInstantiation::initFilter(unsigned int n_signal,
+                                              vpColVector &sigma_state,
+                                              vpColVector &sigma_measure,
+                                              double rho, double delta_t)
 {
   switch (model) {
   case stateConstVelWithColoredNoise_MeasureVel:
-    initStateConstVelWithColoredNoise_MeasureVel(nsignal, sigma_state, 
+    initStateConstVelWithColoredNoise_MeasureVel(n_signal, sigma_state,
 						 sigma_measure, rho);
     break;
   case stateConstVel_MeasurePos:
-    initStateConstVel_MeasurePos(nsignal, sigma_state, 
-				 sigma_measure, dt);
+    initStateConstVel_MeasurePos(n_signal, sigma_state,
+         sigma_measure, delta_t);
     break;
   case stateConstAccWithColoredNoise_MeasureVel:
-    initStateConstAccWithColoredNoise_MeasureVel(nsignal, sigma_state, 
-						 sigma_measure, rho, dt);
+    initStateConstAccWithColoredNoise_MeasureVel(n_signal, sigma_state,
+             sigma_measure, rho, delta_t);
     break;
   case unknown:
     vpERROR_TRACE("Kalman state model is not set") ;    
@@ -282,7 +282,7 @@ vpLinearKalmanFilterInstantiation::initFilter(unsigned int nsignal,
   \right] 
   \f]
 
-  \param nsignal : Number of signal to filter.
+  \param n_signal : Number of signal to filter.
 
   \param sigma_state : Vector that fix the variance of the state covariance matrix
   \f$[\sigma^2_Q \; 0]^T\f$. The dimension of
@@ -292,19 +292,19 @@ vpLinearKalmanFilterInstantiation::initFilter(unsigned int nsignal,
   noise. The dimension of this vector is equal to the number of signal
   to filter.
 
-  \param dt : Sampling time \f$\Delta t\f$ expressed is second. 
+  \param delta_t : Sampling time \f$\Delta t\f$ expressed is second.
 
 */
 void
-vpLinearKalmanFilterInstantiation::initStateConstVel_MeasurePos(unsigned int nsignal,
+vpLinearKalmanFilterInstantiation::initStateConstVel_MeasurePos(unsigned int n_signal,
 					     vpColVector &sigma_state,
 					     vpColVector &sigma_measure, 
-					     double dt )
+               double delta_t )
 {
   // init_done = true ;
   setStateModel(stateConstVel_MeasurePos);
 
-  init(size_state, size_measure, nsignal);
+  init(size_state, size_measure, n_signal);
 
   iter = 0;
   Pest = 0;
@@ -313,12 +313,12 @@ vpLinearKalmanFilterInstantiation::initStateConstVel_MeasurePos(unsigned int nsi
   H    = 0;
   R    = 0;
   Q    = 0;
-  this->dt = dt ;
+  this->dt = delta_t ;
 
   double dt2 = dt*dt ;
   double dt3 = dt2*dt ;
 
-  for (unsigned int i=0;  i < size_measure*nsignal ;  i++ ) {
+  for (unsigned int i=0;  i < size_measure*n_signal ;  i++ ) {
     // State model
     //         | 1  dt |
     //     F = |       |
@@ -443,7 +443,7 @@ vpLinearKalmanFilterInstantiation::initStateConstVel_MeasurePos(unsigned int nsi
   \right] 
   \f]
  
-  \param nsignal : Number of signal to filter.
+  \param n_signal : Number of signal to filter.
 
   \param sigma_state : Vector that fix the variance of the state covariance matrix
   \f$[0 \; \sigma^2_Q]^T\f$. The dimension of
@@ -505,7 +505,7 @@ int main()
   \endcode
 */
 void 
-vpLinearKalmanFilterInstantiation::initStateConstVelWithColoredNoise_MeasureVel(unsigned int nsignal,
+vpLinearKalmanFilterInstantiation::initStateConstVelWithColoredNoise_MeasureVel(unsigned int n_signal,
 					       vpColVector &sigma_state,
 					       vpColVector &sigma_measure,
 					       double rho)
@@ -517,7 +517,7 @@ vpLinearKalmanFilterInstantiation::initStateConstVelWithColoredNoise_MeasureVel(
 
   setStateModel(stateConstVelWithColoredNoise_MeasureVel);
 
-  init(size_state, size_measure, nsignal);
+  init(size_state, size_measure, n_signal);
 
   iter = 0;
   Pest = 0;
@@ -527,7 +527,7 @@ vpLinearKalmanFilterInstantiation::initStateConstVelWithColoredNoise_MeasureVel(
   R    = 0;
   Q    = 0;
 
-  for (unsigned int i=0;  i < size_measure*nsignal ;  i++ ) {
+  for (unsigned int i=0;  i < size_measure*n_signal ;  i++ ) {
     // State model
     //         | 1    1  |
     //     F = |         |
@@ -658,7 +658,7 @@ vpLinearKalmanFilterInstantiation::initStateConstVelWithColoredNoise_MeasureVel(
   \right] 
   \f]
  
-  \param nsignal : Number of signal to filter.
+  \param n_signal : Number of signal to filter.
  
   \param sigma_state : Vector that fix the variance of the state
   covariance matrix \f$[0 \; \sigma^2_{Q_1} \;
@@ -672,7 +672,7 @@ vpLinearKalmanFilterInstantiation::initStateConstVelWithColoredNoise_MeasureVel(
   \param rho : Degree of correlation between successive accelerations. Values 
   are in [0:1[.
 
-  \param dt : Sampling time \f$\Delta t\f$ expressed is second. 
+  \param delta_t : Sampling time \f$\Delta t\f$ expressed is second.
 
   \exception vpException::badValue : Bad rho value wich is not in [0:1[.
 
@@ -728,11 +728,11 @@ int main()
 
 */
 void
-vpLinearKalmanFilterInstantiation::initStateConstAccWithColoredNoise_MeasureVel(unsigned int nsignal, 
+vpLinearKalmanFilterInstantiation::initStateConstAccWithColoredNoise_MeasureVel(unsigned int n_signal,
 							 vpColVector &sigma_state,
 							 vpColVector &sigma_measure,
 							 double rho,
-							 double dt)
+               double delta_t)
 {
   if ((rho < 0) || (rho >= 1)) {
     vpERROR_TRACE("Bad rho value %g; should be in [0:1[", rho) ;    
@@ -740,7 +740,7 @@ vpLinearKalmanFilterInstantiation::initStateConstAccWithColoredNoise_MeasureVel(
   }
   setStateModel(stateConstAccWithColoredNoise_MeasureVel);
 
-  init(size_state, size_measure, nsignal);
+  init(size_state, size_measure, n_signal);
 
   iter = 0;
   Pest = 0;
@@ -749,7 +749,7 @@ vpLinearKalmanFilterInstantiation::initStateConstAccWithColoredNoise_MeasureVel(
   H    = 0;
   R    = 0;
   Q    = 0;
-  this->dt = dt;
+  this->dt = delta_t;
   // initialise les matrices decrivant les modeles
   for (unsigned int i=0;  i < size_measure*nsignal ;  i++ ) {
     // State model
diff --git a/src/math/kalman/vpLinearKalmanFilterInstantiation.h b/src/math/kalman/vpLinearKalmanFilterInstantiation.h
index 84296995..5ff208bb 100644
--- a/src/math/kalman/vpLinearKalmanFilterInstantiation.h
+++ b/src/math/kalman/vpLinearKalmanFilterInstantiation.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpLinearKalmanFilterInstantiation.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpLinearKalmanFilterInstantiation.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -88,11 +88,12 @@ class VISP_EXPORT vpLinearKalmanFilterInstantiation : public vpKalmanFilter
     By default the state model is unknown and set to
     vpLinearKalmanFilterInstantiation::unknown.
   */
-  vpLinearKalmanFilterInstantiation() : vpKalmanFilter()
+    vpLinearKalmanFilterInstantiation() : model(unknown)
     {
-      setStateModel(unknown);
     };
 
+  /*! Destructor that does nothng. */
+  virtual ~vpLinearKalmanFilterInstantiation() {};
   /*!
     Return the current state model.
    */
@@ -155,8 +156,8 @@ int main()
 }
   \endcode
 */
-void vpLinearKalmanFilterInstantiation::setStateModel(vpStateModel model) {
-  this->model = model;
+void vpLinearKalmanFilterInstantiation::setStateModel(vpStateModel mdl) {
+  this->model = mdl;
   switch(model) {
   case stateConstVel_MeasurePos:
   case stateConstVelWithColoredNoise_MeasureVel:
diff --git a/src/math/matrix/vpColVector.cpp b/src/math/matrix/vpColVector.cpp
index b765b2b9..f931cc88 100644
--- a/src/math/matrix/vpColVector.cpp
+++ b/src/math/matrix/vpColVector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpColVector.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpColVector.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -139,7 +139,7 @@ vpColVector::vpColVector (const vpRotationVector &v){
 
   
  //! operator A = -A
-vpColVector vpColVector::operator-()
+vpColVector vpColVector::operator-() const
 {
   vpColVector A ;
   try {
@@ -185,12 +185,10 @@ vpColVector vpColVector::operator*(double x) const
 */
 vpColVector &vpColVector::operator=(const vpMatrix &m)
 {
-
-
   if (m.getCols() !=1)
   {
     vpTRACE(" m should be a 1 cols matrix ") ;
-    throw (vpException(vpException::dimensionError)," m should be a 1 cols matrix ");
+    throw (vpException(vpException::dimensionError,"m should be a 1 cols matrix "));
   }
 
   try {
diff --git a/src/math/matrix/vpColVector.h b/src/math/matrix/vpColVector.h
index 3868f4e4..3ec8895b 100644
--- a/src/math/matrix/vpColVector.h
+++ b/src/math/matrix/vpColVector.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpColVector.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpColVector.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -121,7 +121,7 @@ public:
   //! operator multiplication by a scalar V =  A * x
   vpColVector operator*(const double x) const;
   //! operator A = -A
-  vpColVector operator-() ;
+  vpColVector operator-() const;
 
   vpColVector rows(unsigned int first_row, unsigned int last_row)
   { 
@@ -175,20 +175,20 @@ public:
 
   */
   inline void rad2deg() {
-    double rad2deg = 180.0/M_PI;
+    double r2d = 180.0/M_PI;
 
     for (unsigned int i=0; i < rowNum; i++)
-      (*this)[i] *= rad2deg;
+      (*this)[i] *= r2d;
   }
   /*!
     Convert a column vector containing angles in degrees into radians.
 
   */
   inline void deg2rad() {
-    double deg2rad = M_PI/180.0;
+    double d2r = M_PI/180.0;
 
     for (unsigned int i=0; i < rowNum; i++)
-      (*this)[i] *= deg2rad;
+      (*this)[i] *= d2r;
   }
 
   /*!
diff --git a/src/math/matrix/vpGEMM.h b/src/math/matrix/vpGEMM.h
index c266fa62..0360d0ea 100644
--- a/src/math/matrix/vpGEMM.h
+++ b/src/math/matrix/vpGEMM.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpGEMM.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpGEMM.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/matrix/vpMatrix.cpp b/src/math/matrix/vpMatrix.cpp
index 674e6e4e..711b6505 100644
--- a/src/math/matrix/vpMatrix.cpp
+++ b/src/math/matrix/vpMatrix.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
 *
-* $Id: vpMatrix.cpp 4210 2013-04-16 08:57:46Z fspindle $
+* $Id: vpMatrix.cpp 4649 2014-02-07 14:57:11Z fspindle $
 *
 * This file is part of the ViSP software.
-* Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+* Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 * 
 * This software is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
@@ -56,6 +56,7 @@
 
 #include <visp/vpMatrix.h>
 #include <visp/vpMath.h>
+#include <visp/vpHomography.h>
 #include <visp/vpTranslationVector.h>
 
 // Exception
@@ -77,6 +78,10 @@
 #include <cmath>    // std::fabs
 #include <limits>   // numeric_limits
 
+#ifdef VISP_HAVE_GSL
+#include <gsl/gsl_linalg.h>
+#endif
+
 #define DEBUG_LEVEL1 0
 #define DEBUG_LEVEL2 0
 
@@ -109,8 +114,8 @@ Construction of the object matrix.
 Number of columns and rows are zero.
 */
 vpMatrix::vpMatrix()
+  : rowNum(0), colNum(0), data(NULL), rowPtrs(NULL), dsize(0), trsize(0)
 {
-  init() ;
 }
 
 
@@ -123,20 +128,25 @@ Initialize a matrix with 0.
 \param c : Matrix number of columns.
 */
 vpMatrix::vpMatrix(unsigned int r, unsigned int c)
+  : rowNum(0), colNum(0), data(NULL), rowPtrs(NULL), dsize(0), trsize(0)
 {
-  init() ;
   resize(r, c);
 }
 
+vpMatrix::vpMatrix(const vpHomography& H)
+  : rowNum(0), colNum(0), data(NULL), rowPtrs(NULL), dsize(0), trsize(0)
+{
+  (*this) = H;
+}
+
 /*!
 \brief submatrix constructor
 */
 vpMatrix::vpMatrix(const vpMatrix &m,
                    unsigned int r, unsigned int c, 
                    unsigned int nrows, unsigned int ncols)
+  : rowNum(0), colNum(0), data(NULL), rowPtrs(NULL), dsize(0), trsize(0)
 {
-  init() ;
-
   if (((r + nrows) > m.rowNum) || ((c + ncols) > m.colNum))
   {
     vpERROR_TRACE("\n\t\t SubvpMatrix larger than vpMatrix") ;
@@ -149,9 +159,8 @@ vpMatrix::vpMatrix(const vpMatrix &m,
 
 //! copie constructor
 vpMatrix::vpMatrix(const vpMatrix& m)
+  : rowNum(0), colNum(0), data(NULL), rowPtrs(NULL), dsize(0), trsize(0)
 {
-  init() ;
-
   resize(m.rowNum,m.colNum);
 
   memcpy(data,m.data,rowNum*colNum*sizeof(double)) ;
@@ -222,8 +231,8 @@ void vpMatrix::resize(const unsigned int nrows, const unsigned int ncols,
 
     vpDEBUG_TRACE (25, "Recomputation this->trsize array values.");
     {
-      double **t= rowPtrs;
-      for (unsigned int i=0; i<dsize; i+=ncols)  { *t++ = this->data + i; }
+      double **t_= rowPtrs;
+      for (unsigned int i=0; i<dsize; i+=ncols)  { *t_++ = this->data + i; }
     }
 
     this->rowNum = nrows; this->colNum = ncols;
@@ -332,6 +341,24 @@ vpMatrix::operator=(const vpMatrix &B)
   return *this;
 }
 
+/*!
+\brief Copy operator.
+Allow operation such as A = H
+
+\param H : homography matrix to be copied.
+*/
+vpMatrix &
+vpMatrix::operator=(const vpHomography& H)
+{
+  init() ;
+  resize(3,3);
+  for(unsigned int i=0; i<3; i++)
+    for(unsigned int j=0; j<3; j++)
+      (*this)[i][j] = H[i][j];
+
+  return *this;
+}
+
 //! set all the element of the matrix A to x
 vpMatrix &
 vpMatrix::operator=(double x)
@@ -441,6 +468,28 @@ vpMatrix vpMatrix::operator*(const vpMatrix &B) const
 
   return C;
 }
+/*!
+  Allows to multiply a matrix by an homography.
+  Operation M = K * H (H is unchanged).
+
+*/
+vpMatrix vpMatrix::operator*(const vpHomography &H) const
+{
+  if (colNum != 3)
+    throw(vpException(vpMatrixException::dimensionError, "Cannot multiply the matrix by the homography; bad matrix size"));
+  vpMatrix M(rowNum, 3);
+
+  for (unsigned int i=0;i<rowNum;i++){
+    for (unsigned int j=0;j<3;j++) {
+      double s = 0;
+      for (unsigned int k=0;k<3;k++) s += (*this)[i][k] * H[k][j];
+      M[i][j] = s;
+    }
+  }
+
+  return M;
+}
+
 /*!
 Operation C = A*wA + B*wB 
 
@@ -859,7 +908,7 @@ vpMatrix::operator*(const vpTranslationVector &b) const
   if (rowNum != 3 || colNum != 3)
   {
     vpERROR_TRACE("vpMatrix mismatch in vpMatrix::operator*(const vpTranslationVector)") ;
-    throw(vpMatrixException::incorrectMatrixSizeError) ;
+    throw(vpMatrixException(vpMatrixException::incorrectMatrixSizeError, "vpMatrix mismatch in vpMatrix::operator*()")) ;
   }
 
   for (unsigned int j=0;j<3;j++) c[j]=0 ;
@@ -1232,10 +1281,10 @@ void  vpMatrix::transpose(vpMatrix & At )const{
 
   for( unsigned int i = 0; i < colNum; i++ )
   {
-    double * row = AtRowPtrs[i];
+    double * row_ = AtRowPtrs[i];
     double * col = rowPtrs[0]+i;
     for( unsigned int j = 0; j < rowNum; j++, col+=A_step )
-      *(row++)=*col;   
+      *(row_++)=*col;
   }
 }
 
@@ -2380,7 +2429,7 @@ vpMatrix::insert(const vpMatrix &A, const vpMatrix &B, vpMatrix &C,
                  const unsigned int r, const unsigned int c)
 {
   if( ( (r + B.getRows()) <= A.getRows() ) && 
-    ( (c + B.getCols()) <= A.getRows() ) ){
+    ( (c + B.getCols()) <= A.getCols() ) ){
       try {
         C.resize(A.getRows(),A.getCols()  ) ;
       }
@@ -2573,8 +2622,10 @@ vpMatrix::createDiagonalMatrix(const vpColVector &A, vpMatrix &DA)
 /*!
 \brief std::cout a matrix
 */
-std::ostream &operator <<(std::ostream &s,const vpMatrix &m)
+VISP_EXPORT std::ostream &operator <<(std::ostream &s,const vpMatrix &m)
 {
+  std::ios_base::fmtflags original_flags = s.flags();
+
   s.precision(10) ;
   for (unsigned int i=0;i<m.getRows();i++) {
     for (unsigned int j=0;j<m.getCols();j++){
@@ -2585,6 +2636,8 @@ std::ostream &operator <<(std::ostream &s,const vpMatrix &m)
       s << std::endl;
   }
 
+  s.flags(original_flags); // restore s to standard state
+
   return s;
 }
 
@@ -2622,6 +2675,8 @@ vpMatrix::print(std::ostream& s, unsigned int length, char const* intro)
   std::vector<std::string> values(m*n);
   std::ostringstream oss;
   std::ostringstream ossFixed;
+  std::ios_base::fmtflags original_flags = oss.flags();
+
   // ossFixed <<std::fixed;
   ossFixed.setf ( std::ios::fixed, std::ios::floatfield );
 
@@ -2690,6 +2745,8 @@ vpMatrix::print(std::ostream& s, unsigned int length, char const* intro)
     s <<std::endl;
   }
 
+  s.flags(original_flags); // restore s to standard state
+
   return (int)(maxBefore+maxAfter);
 }
 
@@ -2703,7 +2760,7 @@ d,e,f;
 g,h,i]
 */
 std::ostream & vpMatrix::
-matlabPrint(std::ostream & os)
+matlabPrint(std::ostream & os) const
 {
 
   unsigned int i,j;
@@ -2732,7 +2789,7 @@ Print using the following way so that this output can be directly copied into MA
 ])
 */
 std::ostream & vpMatrix::
-maplePrint(std::ostream & os)
+maplePrint(std::ostream & os) const
 {
   unsigned int i,j;
 
@@ -2749,6 +2806,32 @@ maplePrint(std::ostream & os)
   return os;
 };
 
+/*!
+\brief Print matrix in csv format.
+
+Print as comma separated values so that this output can be imported into any program which has a csv data import option:
+0.939846, 0.0300754, 0.340272
+0.0300788, 0.984961, -0.170136
+-0.340272, 0.170136, 0.924807
+*/
+std::ostream & vpMatrix::
+csvPrint(std::ostream & os) const
+{
+  unsigned int i,j;
+
+  for (i=0; i < this->getRows(); ++ i)
+  {
+    for (j=0; j < this->getCols(); ++ j)
+    {
+      os <<  (*this)[i][j];
+      if (!(j==(this->getCols()-1)))
+        os << ", ";
+    }
+    os << std::endl;
+  }
+  return os;
+};
+
 
 /*!
 \brief Print to be used as part of a C++ code later.
@@ -2765,7 +2848,7 @@ the line vpMatrix A(6,7) (see example).
 each bytes of the double array.
 */
 std::ostream & vpMatrix::
-cppPrint(std::ostream & os, const char * matrixName, bool octet)
+cppPrint(std::ostream & os, const char * matrixName, bool octet) const
 {
 
   unsigned int i,j;
@@ -2863,7 +2946,7 @@ See the Numerical Recipes in C page 43 for further explanations.
 
 double vpMatrix::detByLU() const
 {
-  double det(0);
+  double det_ = 0;
 
   // Test wether the matrix is squred
   if (rowNum == colNum)
@@ -2884,10 +2967,10 @@ double vpMatrix::detByLU() const
     delete[]perm;
 
     // compute the determinant that is the product of the eigen values
-    det = (double) d;
+    det_ = (double) d;
     for(unsigned int i=0;i<rowNum;i++)
     {
-      det*=tmp[i][i];
+      det_*=tmp[i][i];
     }
   }
 
@@ -2898,7 +2981,7 @@ double vpMatrix::detByLU() const
 
 
   }
-  return det ;
+  return det_ ;
 }
 
 
@@ -3336,10 +3419,10 @@ vpMatrix::kernel(vpMatrix &kerA, double svThreshold)
       }
       //   if (noyau == 1)
       {
-        double maxsv = 0 ;
+        maxsv = 0 ;
         for (i=0 ; i < ddl ; i++)
           if (fabs(sv[i]) > maxsv) maxsv = fabs(sv[i]) ;
-        unsigned int rank = 0 ;
+        rank = 0 ;
         for (i=0 ; i < ddl ; i++)
           if (fabs(sv[i]) > maxsv*svThreshold) rank++ ;
         vpMatrix cons(ddl,ddl) ;
@@ -3412,14 +3495,14 @@ A.det(vpMatrix::LU_DECOMPOSITION ) << std::endl;
 */
 double vpMatrix::det(vpDetMethod method) const
 {
-  double det = 0;
+  double det_ = 0;
 
   if ( method == LU_DECOMPOSITION )
   {
-    det = this->detByLU();
+    det_ = this->detByLU();
   }
 
-  return (det);
+  return (det_);
 }
 
 
@@ -3429,7 +3512,7 @@ Save a matrix to a file.
 \param filename : Absolute file name.
 \param M : Matrix to be saved.
 \param binary : If true the matrix is saved in a binary file, else a text file.
-\param Header : Optional line that will be saved at the beginning of the file.
+\param header : Optional line that will be saved at the beginning of the file.
 
 \return Returns true if no problem happened.
 
@@ -3438,7 +3521,7 @@ less than if you save it in a binary file.
 */
 bool
 vpMatrix::saveMatrix(const char *filename, const vpMatrix &M, 
-                     const bool binary, const char *Header)
+                     const bool binary, const char *header)
 {
   std::fstream file;
 
@@ -3459,10 +3542,10 @@ vpMatrix::saveMatrix(const char *filename, const vpMatrix &M,
     {
       unsigned int i = 0;
       file << "# ";
-      while (Header[i] != '\0')
+      while (header[i] != '\0')
       {
-        file << Header[i];
-        if (Header[i] == '\n')
+        file << header[i];
+        if (header[i] == '\n')
           file << "# ";
         i++;
       }
@@ -3474,8 +3557,8 @@ vpMatrix::saveMatrix(const char *filename, const vpMatrix &M,
     else
     {
       int headerSize = 0;
-      while (Header[headerSize] != '\0') headerSize++;
-      file.write(Header,headerSize+1);
+      while (header[headerSize] != '\0') headerSize++;
+      file.write(header,headerSize+1);
       unsigned int matrixSize;
       matrixSize = M.getRows();
       file.write((char*)&matrixSize,sizeof(int));
@@ -3497,21 +3580,119 @@ vpMatrix::saveMatrix(const char *filename, const vpMatrix &M,
   return true;
 }
 
+/*!
+  Save a matrix in a YAML-formatted file.
+
+  \param filename : absolute file name.
+  \param M : matrix to be saved in the file.
+  \param header : optional lines that will be saved at the beginning of the file. Should be YAML-formatted and will adapt to the indentation if any.
+
+  \return Returns true if success.
+
+  Here is an example of outputs.
+\code
+vpMatrix M(3,4);
+vpMatrix::saveMatrixYAML("matrix.yml", M, "example: a YAML-formatted header");
+vpMatrix::saveMatrixYAML("matrixIndent.yml", M, "example:\n    - a YAML-formatted header\n    - with inner indentation");
+\endcode
+Content of matrix.yml:
+\code
+example: a YAML-formatted header
+rows: 3
+cols: 4
+data:
+  - [0, 0, 0, 0]
+  - [0, 0, 0, 0]
+  - [0, 0, 0, 0]
+\endcode
+Content of matrixIndent.yml:
+\code
+example:
+    - a YAML-formatted header
+    - with inner indentation
+rows: 3
+cols: 4
+data:
+    - [0, 0, 0, 0]
+    - [0, 0, 0, 0]
+    - [0, 0, 0, 0]
+\endcode
+
+  \sa loadMatrixYAML()
+*/
+bool vpMatrix::saveMatrixYAML(const char *filename, const vpMatrix &M, const char *header)
+{
+    std::fstream file;
+
+    file.open(filename, std::fstream::out);
+
+    if(!file)
+    {
+        file.close();
+        return false;
+    }
+
+    unsigned int i = 0;
+    bool inIndent = false;
+    std::string indent = "";
+    bool checkIndent = true;
+    while (header[i] != '\0')
+    {
+        file << header[i];
+        if(checkIndent)
+        {
+            if (inIndent)
+            {
+                if(header[i] == ' ')
+                    indent +=  " ";
+                else if (indent.length() > 0)
+                    checkIndent = false;
+            }
+            if (header[i] == '\n' || (inIndent && header[i] == ' '))
+                inIndent = true;
+            else
+                inIndent = false;
+        }
+        i++;
+    }
+
+    if(i != 0)
+        file << std::endl;
+    file << "rows: " << M.getRows() << std::endl;
+    file << "cols: " << M.getCols() << std::endl;
+
+    if(indent.length() == 0)
+        indent = "  ";
+
+    file << "data: " << std::endl;
+    unsigned int j;
+    for(i=0;i<M.getRows();++i)
+    {
+        file << indent << "- [";
+        for(j=0;j<M.getCols()-1;++j)
+            file << M[i][j] << ", ";
+        file << M[i][j] << "]" << std::endl;
+    }
+
+    file.close();
+    return true;
+}
+
 
 /*!
-  Load a matrix to a file.
+  Load a matrix from a file.
 
   \param filename : Absolute file name.
   \param M : Matrix to be loaded.
   \param binary : If true the matrix is loaded from a binary file, 
   else from a text file.
-  \param Header : Header of the file loaded in this parameter.
+  \param header : header of the file loaded in this parameter.
 
   \return Returns true if no problem happened.
 */
 bool
 vpMatrix::loadMatrix(const char *filename, vpMatrix &M, const bool binary, 
-                     char *Header)
+                     char *header)
 {
   std::fstream file;
 
@@ -3537,12 +3718,17 @@ vpMatrix::loadMatrix(const char *filename, vpMatrix &M, const bool binary,
         file.read(&c,1);
         h+=c;
       }
-      if (Header != NULL)
-        strncpy(Header, h.c_str(), h.size() + 1);
+      if (header != NULL)
+        strncpy(header, h.c_str(), h.size() + 1);
 
       unsigned int rows, cols;
       file >> rows;
       file >> cols;
+
+      if (rows > std::numeric_limits<unsigned int>::max()
+          || cols > std::numeric_limits<unsigned int>::max())
+        throw vpException(vpException::badValue, "Matrix exceed the max size.");
+
       M.resize(rows,cols);
 
       double value;
@@ -3564,8 +3750,8 @@ vpMatrix::loadMatrix(const char *filename, vpMatrix &M, const bool binary,
         file.read(&c,1);
         h+=c;
       }
-      if (Header != NULL)
-        strncpy(Header, h.c_str(), h.size() + 1);
+      if (header != NULL)
+        strncpy(header, h.c_str(), h.size() + 1);
 
       unsigned int rows, cols;
       file.read((char*)&rows,sizeof(unsigned int));
@@ -3589,6 +3775,88 @@ vpMatrix::loadMatrix(const char *filename, vpMatrix &M, const bool binary,
 }
 
 
+/*!
+  Load a matrix from a YAML-formatted file.
+
+  \param filename : absolute file name.
+  \param M : matrix to be loaded from the file.
+  \param header : header of the file is loaded in this parameter.
+
+  \return Returns true on success.
+
+  \sa saveMatrixYAML()
+
+*/
+bool
+vpMatrix::loadMatrixYAML(const char *filename, vpMatrix &M, char *header)
+{
+    std::fstream file;
+
+    file.open(filename, std::fstream::in);
+
+    if(!file)
+    {
+        file.close();
+        return false;
+    }
+
+    unsigned int rows = 0,cols = 0;
+    std::string h;
+    std::string line,subs;
+    bool inheader = true;
+    unsigned int i=0, j;
+    unsigned int lineStart = 0;
+
+    while ( getline (file,line) )
+    {
+        if(inheader)
+        {
+            if(rows == 0 && line.compare(0,5,"rows:") == 0)
+            {
+                std::stringstream ss(line);
+                ss >> subs;
+                ss >> rows;
+            }
+            else if (cols == 0 && line.compare(0,5,"cols:") == 0)
+            {
+                std::stringstream ss(line);
+                ss >> subs;
+                ss >> cols;
+            }
+            else if (line.compare(0,5,"data:") == 0)
+                inheader = false;
+            else
+                h += line + "\n";
+        }
+        else
+        {
+            // if i == 0, we just got out of the header: initialize matrix dimensions
+            if(i == 0)
+            {
+                if(rows == 0 || cols == 0)
+                {
+                    file.close();
+                    return false;
+                }
+                M.resize(rows, cols);
+                // get indentation level which is common to all lines
+				lineStart = (unsigned int)line.find("[") + 1;
+            }
+            std::stringstream ss(line.substr(lineStart, line.find("]") - lineStart));
+            j = 0;
+            while(getline(ss, subs, ','))
+                M[i][j++] = atof(subs.c_str());
+            i++;
+        }
+    }
+
+    if (header != NULL)
+      strncpy(header, h.substr(0,h.length()-1).c_str(), h.size());
+
+    file.close();
+    return true;
+}
+
 /*!
 
 Compute the exponential matrix of a square matrix.
@@ -3607,6 +3875,21 @@ vpMatrix::expm()
   }
   else
   {
+#ifdef VISP_HAVE_GSL
+    size_t size = rowNum * colNum;
+    double *b = new double [size];
+    for (size_t i=0; i< size; i++)
+      b[i] = 0.;
+    gsl_matrix_view m  = gsl_matrix_view_array(this->data, rowNum, colNum);
+    gsl_matrix_view em = gsl_matrix_view_array(b, rowNum, colNum);
+    gsl_linalg_exponential_ss(&m.matrix, &em.matrix, 0);
+    //gsl_matrix_fprintf(stdout, &em.matrix, "%g");
+    vpMatrix expA(rowNum, colNum);
+    memcpy(expA.data, b, size * sizeof(double));
+
+    delete [] b;
+    return expA;
+#else
     vpMatrix _expE(rowNum, colNum);
     vpMatrix _expD(rowNum, colNum);
     vpMatrix _expX(rowNum, colNum);
@@ -3664,6 +3947,7 @@ vpMatrix::expm()
       exp=_expE;
     }
     return exp;
+#endif
   }
 }
 
@@ -3736,6 +4020,56 @@ vpMatrix subblock(const vpMatrix &M, unsigned int col, unsigned int row)
   return M_comp;
 }
 
+/*!
+   \return The condition number, the ratio of the largest singular value of the matrix to the smallest.
+ */
+double vpMatrix::cond()
+{
+  vpMatrix v;
+  vpColVector w;
+
+  vpMatrix M;
+  M = *this;
+
+  M.svd(w, v);
+  double min=w[0];
+  double max=w[0];
+  for(unsigned int i=0;i<M.getCols();i++)
+  {
+    if(min>w[i])min=w[i];
+    if(max<w[i])max=w[i];
+  }
+  return max/min;
+}
+
+/*!
+  Compute \f${\bf H} + \alpha * diag({\bf H})\f$
+  \param H : input Matrix \f${\bf H}\f$. This matrix should be square.
+  \param alpha : Scalar \f$\alpha\f$
+  \param HLM : Resulting operation.
+ */
+void vpMatrix::computeHLM(const vpMatrix &H, const double &alpha, vpMatrix &HLM)
+{
+  if(H.getCols() != H.getRows())
+  {
+    vpTRACE("The matrix must be square");
+    throw(vpMatrixException(vpMatrixException::incorrectMatrixSizeError,
+                            "The matrix must be square" ));
+  }
+  HLM.resize(H.getRows(), H.getCols());
+
+  for(unsigned int i=0;i<H.getCols();i++)
+  {
+    for(unsigned int j=0;j<H.getCols();j++)
+    {
+      HLM[i][j]=H[i][j];
+      if(i==j)
+        HLM[i][j]+= alpha*H[i][j];
+    }
+  }
+
+}
+
 #undef DEBUG_LEVEL1
 #undef DEBUG_LEVEL2
 
diff --git a/src/math/matrix/vpMatrix.h b/src/math/matrix/vpMatrix.h
index 6e574e4e..be6df84d 100644
--- a/src/math/matrix/vpMatrix.h
+++ b/src/math/matrix/vpMatrix.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMatrix.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMatrix.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -45,6 +45,7 @@
 #define vpMatrix_H
 
 #include <visp/vpConfig.h>
+#include <visp/vpException.h>
 #include <visp/vpTime.h>
 
 #ifdef VISP_HAVE_GSL
@@ -63,6 +64,7 @@ class vpTranslationVector;
 class vpColVector;
 class vpTranslationVector;
 class vpRowVector;
+class vpHomography;
 
 
 
@@ -133,6 +135,8 @@ protected:
   vpMatrix(const vpMatrix &m, unsigned int r, unsigned int c, 
 	   unsigned int nrows, unsigned int ncols) ;
 
+  vpMatrix(const vpHomography& H);
+
   //! Destructor (Memory de-allocation)
   virtual ~vpMatrix();
 
@@ -176,50 +180,14 @@ protected:
   //@{
 
   int print(std::ostream& s, unsigned int length, char const* intro=0);
-  std::ostream & matlabPrint(std::ostream & os);
-  std::ostream & maplePrint(std::ostream & os);
-  std::ostream & cppPrint(std::ostream & os, const char * matrixName = NULL, bool octet = false);
+  std::ostream & matlabPrint(std::ostream & os) const;
+  std::ostream & maplePrint(std::ostream & os) const;
+  std::ostream & csvPrint(std::ostream & os) const;
+  std::ostream & cppPrint(std::ostream & os, const char * matrixName = NULL, bool octet = false) const;
 
   void printSize() { std::cout << getRows() <<" x " << getCols() <<"  " ; }
   //@}
   
-  static bool saveMatrix(const char *filename, const vpMatrix &M, const bool binary = false, const char *Header = "");
-  static bool loadMatrix(const char *filename, vpMatrix &M, const bool binary = false, char *Header = NULL);
-
-  /*!
-    Save a matrix to a file.
-
-    \param filename : absolute file name
-    \param M : matrix to be saved
-    \param binary :If true the matrix is save in a binary file, else a text file.
-    \param Header : optional line that will be saved at the beginning of the file
-
-    \return Returns true if no problem appends.
-
-    Warning : If you save the matrix as in a text file the precision is less than if you save it in a binary file.
-  */
-  static inline bool saveMatrix(std::string filename, const vpMatrix &M, 
-				const bool binary = false, 
-				const char *Header = "")
-  {
-    return vpMatrix::saveMatrix(filename.c_str(), M, binary, Header);
-  }
-
-  /*!
-    Load a matrix to a file.
-
-    \param filename : absolute file name
-    \param M : matrix to be loaded
-    \param binary :If true the matrix is load from a binary file, else from a text file.
-    \param Header : Header of the file is load in this parameter
-
-    \return Returns true if no problem appends.
-  */
-  static inline bool loadMatrix(std::string filename, vpMatrix &M, 
-				const bool binary = false, char *Header = NULL)
-  {
-    return vpMatrix::loadMatrix(filename.c_str(), M, binary, Header);
-  }
 
   //---------------------------------
   // Copy / assignment
@@ -234,6 +202,8 @@ protected:
 
   //! Copy operator.   Allow operation such as A = B
   vpMatrix &operator=(const vpMatrix &B);
+  //! Copy operator.   Allow operation such as A = H
+  vpMatrix &operator=(const vpHomography &H);
   //! Set all the element of the matrix A to x
   vpMatrix &operator=(const double x);
   void diag(const vpColVector &A);
@@ -245,24 +215,118 @@ protected:
   /** @name Access/modification operators  */
   //@{
   //! write elements Aij (usage : A[i][j] = x )
-  inline double *operator[](unsigned int n) { return rowPtrs[n]; }
+  inline double *operator[](unsigned int i) { return rowPtrs[i]; }
   //! read elements Aij  (usage : x = A[i][j] )
-  inline double *operator[](unsigned int n) const {return rowPtrs[n];}
+  inline double *operator[](unsigned int i) const {return rowPtrs[i];}
   //@}
 
   //---------------------------------
   // Matrix operations (Static).
-  //---------------------------------
+  //---------------------------------  
 
-  static void mult2Matrices(const vpMatrix &A, const vpMatrix &B, vpMatrix &C);
   static void add2Matrices(const vpMatrix &A, const vpMatrix &B, vpMatrix &C);
   static void add2WeightedMatrices(const vpMatrix &A, const double &wA, const vpMatrix &B,const double &wB, vpMatrix &C);
-  static void sub2Matrices(const vpMatrix &A, const vpMatrix &B, vpMatrix &C);
-  static void negateMatrix(const vpMatrix &A, vpMatrix &C);
-  static void multMatrixVector(const vpMatrix &A, const vpColVector &b, vpColVector &c);
-  
   static vpMatrix computeCovarianceMatrix(const vpMatrix &A, const vpColVector &x, const vpColVector &b);
   static vpMatrix computeCovarianceMatrix(const vpMatrix &A, const vpColVector &x, const vpColVector &b, const vpMatrix &w);
+  static void computeHLM(const vpMatrix &H, const double &alpha, vpMatrix &HLM);
+
+  // Create a diagonal matrix with the element of a vector DAii = Ai
+  static void createDiagonalMatrix(const vpColVector &A, vpMatrix &DA)  ;
+  // Insert matrix A in the current matrix at the given position (r, c).
+  void insert(const vpMatrix&A, const unsigned int r, const unsigned int c);
+  // Insert matrix B in matrix A at the given position (r, c).
+  static vpMatrix insert(const vpMatrix &A,const  vpMatrix &B, const unsigned int r, const unsigned int c) ;
+  // Insert matrix B in matrix A (not modified) at the given position (r, c), the result is given in matrix C.
+  static void insert(const vpMatrix &A, const vpMatrix &B, vpMatrix &C, const unsigned int r, const unsigned int c) ;
+
+  // Juxtapose to matrices C = [ A B ]
+  static vpMatrix juxtaposeMatrices(const vpMatrix &A,const  vpMatrix &B) ;
+  // Juxtapose to matrices C = [ A B ]
+  static void juxtaposeMatrices(const vpMatrix &A,const  vpMatrix &B, vpMatrix &C) ;
+  // Compute Kronecker product matrix
+  static void kron(const vpMatrix  &m1, const vpMatrix  &m2 , vpMatrix  &out);
+
+  // Compute Kronecker product matrix
+  static vpMatrix kron(const vpMatrix  &m1, const vpMatrix  &m2 );
+
+  /*!
+    Load a matrix from a file.
+
+    \param filename : absolute file name
+    \param M : matrix to be loaded
+    \param binary :If true the matrix is loaded from a binary file, else from a text file.
+    \param Header : Header of the file is loaded in this parameter
+
+    \return Returns true if no problem appends.
+  */
+  static inline bool loadMatrix(std::string filename, vpMatrix &M,
+                                const bool binary = false, char *Header = NULL)
+  {
+    return vpMatrix::loadMatrix(filename.c_str(), M, binary, Header);
+  }
+  static bool loadMatrix(const char *filename, vpMatrix &M, const bool binary = false, char *Header = NULL);
+  static void mult2Matrices(const vpMatrix &A, const vpMatrix &B, vpMatrix &C);
+  static void multMatrixVector(const vpMatrix &A, const vpColVector &b, vpColVector &c);
+  static void negateMatrix(const vpMatrix &A, vpMatrix &C);
+  /*!
+    Save a matrix to a file.
+
+    \param filename : absolute file name
+    \param M : matrix to be saved
+    \param binary :If true the matrix is save in a binary file, else a text file.
+    \param Header : optional line that will be saved at the beginning of the file
+
+    \return Returns true if no problem appends.
+
+    Warning : If you save the matrix as in a text file the precision is less than if you save it in a binary file.
+  */
+  static inline bool saveMatrix(std::string filename, const vpMatrix &M,
+        const bool binary = false,
+        const char *Header = "")
+  {
+    return vpMatrix::saveMatrix(filename.c_str(), M, binary, Header);
+  }
+  static bool saveMatrix(const char *filename, const vpMatrix &M, const bool binary = false, const char *Header = "");
+
+  /*!
+    Save a matrix in a YAML-formatted file.
+
+    \param filename : absolute file name.
+    \param M : matrix to be saved in the file.
+    \param header : optional lines that will be saved at the beginning of the file. Should be YAML-formatted and will adapt to the indentation if any.
+
+    \return Returns true if success.
+
+  */
+  static inline bool saveMatrixYAML(std::string filename, const vpMatrix &M, const char *header = "")
+  {
+    return vpMatrix::saveMatrixYAML(filename.c_str(), M, header);
+  }
+  static bool saveMatrixYAML(const char *filename, const vpMatrix &M, const char *header = "");
+  /*!
+    Load a matrix from a YAML-formatted file.
+
+    \param filename : absolute file name.
+    \param M : matrix to be loaded from the file.
+    \param header : Header of the file is loaded in this parameter.
+
+    \return Returns true if no problem appends.
+  */
+  static inline bool loadMatrixYAML(std::string filename, vpMatrix &M, char *header = NULL)
+  {
+    return vpMatrix::loadMatrixYAML(filename.c_str(), M, header);
+  }
+  static bool loadMatrixYAML(const char *filename, vpMatrix &M, char *header = NULL);
+
+
+  // Stack the matrix A below the current one, copy if not initialized this = [ this A ]^T
+  void stackMatrices(const vpMatrix &A);
+  //! Stack two Matrices C = [ A B ]^T
+  static vpMatrix stackMatrices(const vpMatrix &A,const  vpMatrix &B) ;
+  //! Stack two Matrices C = [ A B ]^T
+  static void stackMatrices(const vpMatrix &A,const  vpMatrix &B, vpMatrix &C) ;
+  static void sub2Matrices(const vpMatrix &A, const vpMatrix &B, vpMatrix &C);
+  
 
   //---------------------------------
   // Matrix operations.
@@ -275,6 +339,7 @@ protected:
   vpMatrix &operator-=(const vpMatrix &B);
 
   vpMatrix operator*(const vpMatrix &B) const;
+  vpMatrix operator*(const vpHomography &H) const;
   vpMatrix operator+(const vpMatrix &B) const;
   vpMatrix operator-(const vpMatrix &B) const;
   vpMatrix operator-() const;
@@ -372,13 +437,6 @@ protected:
   vpMatrix kron(const vpMatrix  &m1);
   //@}
   
-  // Compute Kronecker product matrix 
-  static void kron(const vpMatrix  &m1, const vpMatrix  &m2 , vpMatrix  &out);
-
-  // Compute Kronecker product matrix 
-  static vpMatrix kron(const vpMatrix  &m1, const vpMatrix  &m2 );
-
-
   //-------------------------------------------------
   // Matrix inversion
   //-------------------------------------------------
@@ -460,6 +518,7 @@ protected:
   vpColVector solveBySVD(const vpColVector &B) const ;
 
   unsigned int kernel(vpMatrix &KerA, double svThreshold=1e-6);
+  double cond();
   //@}
 
   //-------------------------------------------------
@@ -474,28 +533,6 @@ protected:
   void eigenValues(vpColVector &evalue, vpMatrix &evector);
   //@}
 
-  //! Stack two Matrices C = [ A B ]^T
-  static vpMatrix stackMatrices(const vpMatrix &A,const  vpMatrix &B) ;
-  //! Stack two Matrices C = [ A B ]^T
-  static void stackMatrices(const vpMatrix &A,const  vpMatrix &B, vpMatrix &C) ;
-  // Juxtapose to matrices C = [ A B ]
-  static vpMatrix juxtaposeMatrices(const vpMatrix &A,const  vpMatrix &B) ;
-  // Juxtapose to matrices C = [ A B ]
-  static void juxtaposeMatrices(const vpMatrix &A,const  vpMatrix &B, vpMatrix &C) ;
-
-  // Create a diagonal matrix with the element of a vector DAii = Ai
-  static void createDiagonalMatrix(const vpColVector &A, vpMatrix &DA)  ;
-  
-  // Stack the matrix A below the current one, copy if not initialized this = [ this A ]^T
-  void stackMatrices(const vpMatrix &A);
-
-  // Insert matrix A in the current matrix at the given position (r, c). 
-  void insert(const vpMatrix&A, const unsigned int r, const unsigned int c);
-  // Insert matrix B in matrix A at the given position (r, c). 
-  static vpMatrix insert(const vpMatrix &A,const  vpMatrix &B, const unsigned int r, const unsigned int c) ;
-  // Insert matrix B in matrix A (not modified) at the given position (r, c), the result is given in matrix C. 
-  static void insert(const vpMatrix &A, const vpMatrix &B, vpMatrix &C, const unsigned int r, const unsigned int c) ;
-
   // -------------------------
   // Norms
   // -------------------------
diff --git a/src/math/matrix/vpMatrixException.h b/src/math/matrix/vpMatrixException.h
index 60ba790d..2d23f349 100644
--- a/src/math/matrix/vpMatrixException.h
+++ b/src/math/matrix/vpMatrixException.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMatrixException.h 4195 2013-04-05 08:28:41Z marchand $
+ * $Id: vpMatrixException.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -68,12 +68,12 @@
  */
 class VISP_EXPORT vpMatrixException : public vpException
 {
-public:
-  /*!
+  public:
+    /*!
     \brief Lists the possible error than can be emmited while calling
     vpMatrix member
    */
-  enum errorCodeEnum
+    enum errorCodeEnum
     {
       //! error returns by a constructor
       constructionError,
@@ -92,25 +92,20 @@ public:
       rankDeficient
     } ;
 
-public:
-  vpMatrixException (const int code, const char * msg)
-    : vpException(code, msg){ ; }
-  vpMatrixException (const int code, const std::string & msg)
-    : vpException(code, msg){ ; }
-  vpMatrixException (const int code)
-    : vpException(code){ ; }
- // vpMatrixException() : vpException() { ;}
+  public:
+    vpMatrixException (const int id,  const char* format, ...)
+    {
+      this->code = id;
+      va_list args;
+      va_start(args, format);
+      setMessage(format, args);
+      va_end (args);
+    }
+    vpMatrixException (const int id, const std::string & msg)
+      : vpException(id, msg){ ; }
+    vpMatrixException (const int id)
+      : vpException(id){ ; }
+    // vpMatrixException() : vpException() { ;}
 };
 
-
-
-
-
-#endif /* #ifndef __vpMatrixException_ERROR_H */
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+#endif
diff --git a/src/math/matrix/vpMatrix_cholesky.cpp b/src/math/matrix/vpMatrix_cholesky.cpp
index b3200842..ec4af3f4 100644
--- a/src/math/matrix/vpMatrix_cholesky.cpp
+++ b/src/math/matrix/vpMatrix_cholesky.cpp
@@ -3,7 +3,7 @@
  * $Id: vpMatrix_lu.cpp 3530 2012-01-03 10:52:12Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -60,30 +60,27 @@ extern "C" int dpotri_(char *uplo, int *n, double *a, int *lda, int *info);
 
 #ifdef VISP_HAVE_LAPACK
 vpMatrix vpMatrix::inverseByCholeskyLapack() const{
-  int rowNum = (int)this->getRows();
-  int lda = (int)rowNum; //lda is the number of rows because we don't use a submatrix
+  int rowNum_ = (int)this->getRows();
+  int lda = (int)rowNum_; //lda is the number of rows because we don't use a submatrix
   int info;
 
   vpMatrix A = *this;
-  dpotrf_((char*)"L",&rowNum,A.data,&lda,&info);
+  dpotrf_((char*)"L",&rowNum_,A.data,&lda,&info);
 
   if(info!=0)
     std::cout << "cholesky:dpotrf_:error" << std::endl;
 
-  dpotri_((char*)"L",&rowNum,A.data,&lda,&info);
+  dpotri_((char*)"L",&rowNum_,A.data,&lda,&info);
   if(info!=0){
     std::cout << "cholesky:dpotri_:error" << std::endl;
     throw vpMatrixException::badValue;
   }
 
-
   for(unsigned int i=0;i<A.getRows();i++)
     for(unsigned int j=0;j<A.getCols();j++)
       if(i>j) A[i][j] = A[j][i];
 
-
   return A;
-
 }
 #endif
 
@@ -102,9 +99,10 @@ int main()
 {
   vpMatrix A(4,4);
 
-  A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.; A[0][3] = 1/4.;
+  // Symmetric matrix
+  A[0][0] = 1/1.; A[0][1] = 1/5.; A[0][2] = 1/6.; A[0][3] = 1/7.;
   A[1][0] = 1/5.; A[1][1] = 1/3.; A[1][2] = 1/3.; A[1][3] = 1/5.;
-  A[2][0] = 1/6.; A[2][1] = 1/4.; A[2][2] = 1/2.; A[2][3] = 1/6.;
+  A[2][0] = 1/6.; A[2][1] = 1/3.; A[2][2] = 1/2.; A[2][3] = 1/6.;
   A[3][0] = 1/7.; A[3][1] = 1/5.; A[3][2] = 1/6.; A[3][3] = 1/7.;
 
   // Compute the inverse
diff --git a/src/math/matrix/vpMatrix_covariance.cpp b/src/math/matrix/vpMatrix_covariance.cpp
index 12ebed27..9bb66442 100644
--- a/src/math/matrix/vpMatrix_covariance.cpp
+++ b/src/math/matrix/vpMatrix_covariance.cpp
@@ -3,7 +3,7 @@
  * $Id: vpMatrix_lu.cpp 3530 2012-01-03 10:52:12Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/matrix/vpMatrix_lu.cpp b/src/math/matrix/vpMatrix_lu.cpp
index 8833e6d8..d43710ef 100644
--- a/src/math/matrix/vpMatrix_lu.cpp
+++ b/src/math/matrix/vpMatrix_lu.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMatrix_lu.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMatrix_lu.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -260,7 +260,13 @@ vpMatrix::inverseByLU() const
   unsigned int *perm = new unsigned int[rowNum];
   int p;
 
-  A.LUDcmp(perm, p);
+  try {
+    A.LUDcmp(perm, p);
+  }
+  catch(vpException e) {
+    delete [] perm;
+    throw(e);
+  }
 
   vpColVector c_tmp(rowNum)  ;
   for (j=1; j<=rowNum; j++)
diff --git a/src/math/matrix/vpMatrix_qr.cpp b/src/math/matrix/vpMatrix_qr.cpp
index 8708bed3..e56d0294 100644
--- a/src/math/matrix/vpMatrix_qr.cpp
+++ b/src/math/matrix/vpMatrix_qr.cpp
@@ -3,7 +3,7 @@
  * $Id: vpMatrix_lu.cpp 3530 2012-01-03 10:52:12Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -39,6 +39,7 @@
  *
  *****************************************************************************/
 
+#include <algorithm> // for std::min and std::max
 #include <visp/vpConfig.h>
 
 #include <visp/vpMatrix.h>
@@ -52,6 +53,7 @@
 // Debug trace
 #include <visp/vpDebug.h>
 
+int allocate_work(double** work);
 
 #ifdef VISP_HAVE_LAPACK
 extern "C" int dgeqrf_(int *m, int *n, double*a, int *lda, double *tau, double *work, int *lwork, int *info);
@@ -63,18 +65,19 @@ extern "C" int dorgqr_(int *, int *, int *, double *, int *,
 extern "C" int dtrtri_(char *uplo, char *diag, int *n, double *a, int *lda, int *info);
 #endif
 
-int allocate_work(double** work){
-  int dimWork = (int)((*work)[0]);
+int allocate_work(double** work)
+{
+  unsigned int dimWork = (unsigned int)((*work)[0]);
   delete[] *work;
   *work = new double[dimWork];
-  return dimWork;
+  return (int)dimWork;
 }
 #ifdef VISP_HAVE_LAPACK
 vpMatrix vpMatrix::inverseByQRLapack() const{
-  int rowNum = (int)this->getRows();
-  int colNum = (int)this->getCols();
-  int lda = (int)rowNum; //lda is the number of rows because we don't use a submatrix
-  int dimTau = std::min(rowNum,colNum);
+  int rowNum_ = (int)this->getRows();
+  int colNum_ = (int)this->getCols();
+  int lda = (int)rowNum_; //lda is the number of rows because we don't use a submatrix
+  int dimTau = std::min(rowNum_,colNum_);
   int dimWork = -1;
   double *tau = new double[dimTau];
   double *work = new double[1];
@@ -85,8 +88,8 @@ vpMatrix vpMatrix::inverseByQRLapack() const{
   try{
     //1) Extract householder reflections (useful to compute Q) and R
     dgeqrf_(
-            &rowNum,        //The number of rows of the matrix A.  M >= 0.
-            &colNum,        //The number of columns of the matrix A.  N >= 0.
+            &rowNum_,        //The number of rows of the matrix A.  M >= 0.
+            &colNum_,        //The number of columns of the matrix A.  N >= 0.
             A.data,     /*On entry, the M-by-N matrix A.
                               On exit, the elements on and above the diagonal of the array
                               contain the min(M,N)-by-N upper trapezoidal matrix R (R is
@@ -110,8 +113,8 @@ vpMatrix vpMatrix::inverseByQRLapack() const{
     dimWork = allocate_work(&work);
 
     dgeqrf_(
-          &rowNum,        //The number of rows of the matrix A.  M >= 0.
-          &colNum,        //The number of columns of the matrix A.  N >= 0.
+          &rowNum_,        //The number of rows of the matrix A.  M >= 0.
+          &colNum_,        //The number of columns of the matrix A.  N >= 0.
           A.data,     /*On entry, the M-by-N matrix A.
                             On exit, the elements on and above the diagonal of the array
                             contain the min(M,N)-by-N upper trapezoidal matrix R (R is
@@ -156,7 +159,6 @@ vpMatrix vpMatrix::inverseByQRLapack() const{
       for(unsigned int j=0;j<C.getRows();j++)
         if(j>i) C[i][j] = 0.;
 
-
     dimWork = -1;
     int ldc = lda;
 
@@ -164,14 +166,14 @@ vpMatrix vpMatrix::inverseByQRLapack() const{
     //get R^-1*tQ
     //C contains R^-1
     //A contains Q
-    dormqr_((char*)"R", (char*)"T", &rowNum, &colNum, &dimTau, A.data, &lda, tau, C.data, &ldc, work, &dimWork, &info);
+    dormqr_((char*)"R", (char*)"T", &rowNum_, &colNum_, &dimTau, A.data, &lda, tau, C.data, &ldc, work, &dimWork, &info);
     if(info != 0){
       std::cout << "dormqr_:Preparation"<< -info << "th element had an illegal value" << std::endl;
       throw vpMatrixException::badValue;
     }
     dimWork = allocate_work(&work);
 
-    dormqr_((char*)"R", (char*)"T", &rowNum, &colNum, &dimTau, A.data, &lda, tau, C.data, &ldc, work, &dimWork, &info);
+    dormqr_((char*)"R", (char*)"T", &rowNum_, &colNum_, &dimTau, A.data, &lda, tau, C.data, &ldc, work, &dimWork, &info);
 
     if(info != 0){
       std::cout << "dormqr_:"<< -info << "th element had an illegal value" << std::endl;
diff --git a/src/math/matrix/vpMatrix_svd.cpp b/src/math/matrix/vpMatrix_svd.cpp
index f6783b59..4a9184e9 100644
--- a/src/math/matrix/vpMatrix_svd.cpp
+++ b/src/math/matrix/vpMatrix_svd.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMatrix_svd.cpp 4210 2013-04-16 08:57:46Z fspindle $
+ * $Id: vpMatrix_svd.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -297,8 +297,10 @@ void vpMatrix::svdNr(vpColVector& W, vpMatrix& V)
 	g=c*g;
 	z=pythag(f,h);
 	rv1[j]=z;
-	c=f/z;
-	s=h/z;
+  if ((std::fabs(z) > epsilon) /*|| (fabs(z) > EPS_SVD)*/) {
+    c=f/z;
+    s=h/z;
+  }
 	f=x*c+g*s;
 	g=g*c-x*s;
 	h=y*s;
@@ -593,8 +595,7 @@ void vpMatrix::svdLapack(vpColVector& W, vpMatrix& V){
   dgesdd_( (char*)"S", &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, work, &lwork, iwork, &info );
 
   if( info > 0 ) {
-    std::cout << "The algorithm computing SVD failed to converge." << std::endl;
-
+   vpTRACE("The algorithm computing SVD failed to converge.");
   }
 
   V=V.transpose();
diff --git a/src/math/matrix/vpRowVector.cpp b/src/math/matrix/vpRowVector.cpp
index 03a4adc1..a7b70e40 100644
--- a/src/math/matrix/vpRowVector.cpp
+++ b/src/math/matrix/vpRowVector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRowVector.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRowVector.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -150,7 +150,8 @@ vpRowVector vpRowVector::operator*(const vpMatrix &A) const
   if (colNum != A.getRows())
   {
     vpERROR_TRACE("vpMatrix mismatch in vpRowVector/matrix multiply") ;
-    throw(vpMatrixException::incorrectMatrixSizeError) ;
+    throw(vpMatrixException(vpMatrixException::incorrectMatrixSizeError,
+                            "vpMatrix mismatch in vpRowVector/matrix multiply")) ;
   }
 
   c = 0.0;
diff --git a/src/math/matrix/vpRowVector.h b/src/math/matrix/vpRowVector.h
index 562a1fa1..8d049a45 100644
--- a/src/math/matrix/vpRowVector.h
+++ b/src/math/matrix/vpRowVector.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRowVector.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRowVector.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/matrix/vpSubColVector.cpp b/src/math/matrix/vpSubColVector.cpp
index 4141fe42..4b93b5f0 100644
--- a/src/math/matrix/vpSubColVector.cpp
+++ b/src/math/matrix/vpSubColVector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSubColVector.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpSubColVector.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -46,15 +46,9 @@
 #include <visp/vpDebug.h>
 #include <stdlib.h>
 
-vpSubColVector::vpSubColVector(){
-   data=NULL;
-   parent=NULL;
-   rowPtrs=NULL;
-   rowNum=0;
-   colNum=0;
-   pRowNum=0;
-   dsize=0;
-   trsize=0;
+vpSubColVector::vpSubColVector()
+  : pRowNum(0), parent(NULL)
+{
 }
 
 /*!
@@ -63,7 +57,9 @@ vpSubColVector::vpSubColVector(){
   \param offset : offset where subColVector start in the parent colVector
   \param nrows : size of the subColVector
 */
-vpSubColVector::vpSubColVector(vpColVector &v, const unsigned int & offset,const unsigned int & nrows){
+vpSubColVector::vpSubColVector(vpColVector &v, const unsigned int & offset, const unsigned int & nrows)
+  : pRowNum(0), parent(NULL)
+{
   init(v,offset,nrows);
 }
 
diff --git a/src/math/matrix/vpSubColVector.h b/src/math/matrix/vpSubColVector.h
index 055091e8..59cd355c 100644
--- a/src/math/matrix/vpSubColVector.h
+++ b/src/math/matrix/vpSubColVector.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSubColVector.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpSubColVector.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/matrix/vpSubMatrix.cpp b/src/math/matrix/vpSubMatrix.cpp
index 9a6939c1..6ba81a2f 100644
--- a/src/math/matrix/vpSubMatrix.cpp
+++ b/src/math/matrix/vpSubMatrix.cpp
@@ -1,11 +1,11 @@
 /****************************************************************************
  *
- * $Id: vpSubMatrix.cpp 4057 2013-01-05 13:10:29Z fspindle $
+ * $Id: vpSubMatrix.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
- * Copyright (C) 2005 - 2013 Inria. All rights reserved.
+ * Copyright (C) 2005 - 2014 Inria. All rights reserved.
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -46,39 +46,35 @@
 #include <visp/vpDebug.h>
 #include <stdlib.h>
 
-vpSubMatrix::vpSubMatrix(){
-  data=NULL;
-  parent=NULL;
-  rowPtrs=NULL;
-  rowNum=0;
-  colNum=0;
-  pRowNum=0;
-  pColNum=0;
-  dsize=0;
-  trsize=0;
+vpSubMatrix::vpSubMatrix()
+  : pRowNum(0), pColNum(0), parent(NULL)
+{
 }
 
 /*!
   \brief Constructor
   \param m : parent matrix
-  \param row : row offset 
-  \param col : col offset 
+  \param row_offset : row offset
+  \param col_offset : col offset
   \param nrows : number of rows of the sub matrix
   \param ncols : number of columns of the sub matrix
 */
-vpSubMatrix::vpSubMatrix(vpMatrix &m, const unsigned int & row, const unsigned int &col , const unsigned int & nrows ,  const unsigned int & ncols){
-  init(m,row,col,nrows,ncols);
+vpSubMatrix::vpSubMatrix(vpMatrix &m, const unsigned int &row_offset, const unsigned int &col_offset,
+                         const unsigned int & nrows,  const unsigned int & ncols)
+  : pRowNum(0), pColNum(0), parent(NULL)
+{
+  init(m,row_offset,col_offset,nrows,ncols);
 }
 
 /*!
   \brief Initialisation of a sub matrix
   \param m : parent matrix
-  \param row : row offset 
-  \param col : col offset 
+  \param row_offset : row offset
+  \param col_offset : col offset
   \param nrows : number of rows of the sub matrix
   \param ncols : number of columns of the sub matrix
 */
-void vpSubMatrix::init(vpMatrix &m, const unsigned int & row, const unsigned int &col , const unsigned int & nrows ,  const unsigned int & ncols){
+void vpSubMatrix::init(vpMatrix &m, const unsigned int &row_offset, const unsigned int &col_offset , const unsigned int & nrows ,  const unsigned int & ncols){
   
   if(! m.data){
     vpERROR_TRACE("\n\t\t SubMatrix parent matrix is not allocated") ;
@@ -86,7 +82,7 @@ void vpSubMatrix::init(vpMatrix &m, const unsigned int & row, const unsigned int
 			    "\n\t\t SubMatrix parent matrix is not allocated")) ;
   } 
   
-  if(row+nrows <= m.getRows() && col+ncols <= m.getCols()){	
+  if(row_offset+nrows <= m.getRows() && col_offset+ncols <= m.getCols()){
     data=m.data;
     parent =&m; 
     rowNum = nrows;
@@ -99,7 +95,7 @@ void vpSubMatrix::init(vpMatrix &m, const unsigned int & row, const unsigned int
     
     rowPtrs=(double**) malloc(nrows * sizeof(double*));
     for(unsigned int r=0;r<nrows;r++)
-      rowPtrs[r]= m.data+col+(r+row)*pColNum;
+      rowPtrs[r]= m.data+col_offset+(r+row_offset)*pColNum;
     
     dsize = pRowNum*pColNum ;
     trsize =0 ;
diff --git a/src/math/matrix/vpSubMatrix.h b/src/math/matrix/vpSubMatrix.h
index b33af1bd..9dcae3e8 100644
--- a/src/math/matrix/vpSubMatrix.h
+++ b/src/math/matrix/vpSubMatrix.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSubMatrix.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpSubMatrix.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/matrix/vpSubRowVector.cpp b/src/math/matrix/vpSubRowVector.cpp
index c2061611..935f0cb2 100644
--- a/src/math/matrix/vpSubRowVector.cpp
+++ b/src/math/matrix/vpSubRowVector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSubRowVector.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpSubRowVector.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -46,16 +46,10 @@
 #include <visp/vpDebug.h>
 #include <stdlib.h>
 
-    vpSubRowVector::vpSubRowVector(){
-       data=NULL;
-       parent=NULL;
-       rowPtrs=NULL;
-       rowNum=0;
-       colNum=0;
-       pColNum=0;
-       dsize=0;
-       trsize=0;
-    }
+vpSubRowVector::vpSubRowVector()
+  : pColNum(0), parent(NULL)
+{
+}
 
 /*!
   \brief Constructor
@@ -63,8 +57,10 @@
   \param offset : offset where subRowVector start in the parent vector
   \param ncols : size of the subRowVector
 */
-vpSubRowVector::vpSubRowVector(vpRowVector &v, const unsigned int & offset,const unsigned int & ncols){
-    init(v,offset,ncols);
+vpSubRowVector::vpSubRowVector(vpRowVector &v, const unsigned int & offset,const unsigned int & ncols)
+  : pColNum(0), parent(NULL)
+{
+  init(v, offset, ncols);
 }
 
 /*!
diff --git a/src/math/matrix/vpSubRowVector.h b/src/math/matrix/vpSubRowVector.h
index 331220e4..eb91bfaa 100644
--- a/src/math/matrix/vpSubRowVector.h
+++ b/src/math/matrix/vpSubRowVector.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSubRowVector.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpSubRowVector.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/misc/vpHinkley.cpp b/src/math/misc/vpHinkley.cpp
index 73b490aa..d7d88939 100755
--- a/src/math/misc/vpHinkley.cpp
+++ b/src/math/misc/vpHinkley.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHinkley.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpHinkley.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -78,11 +78,8 @@
 
 */
 vpHinkley::vpHinkley()
+  : dmin2(0.1), alpha(0.2), nsignal(0), mean(0), Sk(0), Mk(0), Tk(0), Nk(0)
 {
-  init();
-
-  setAlpha(0.2);
-  setDelta(0.2);
 }
 
 /*!
@@ -92,21 +89,18 @@ vpHinkley::vpHinkley()
   Call init() to initialise the Hinkley's test and set \f$\alpha\f$
   and \f$\delta\f$ thresholds.
 
-  \param alpha : \f$\alpha\f$ is a predefined threshold.
+  \param alpha_val : \f$\alpha\f$ is a predefined threshold.
 
-  \param delta : \f$\delta\f$ denotes the jump minimal magnitude that
+  \param delta_val : \f$\delta\f$ denotes the jump minimal magnitude that
   we want to detect.
 
   \sa setAlpha(), setDelta()
 
 */
 
-vpHinkley::vpHinkley(double alpha, double delta)
+vpHinkley::vpHinkley(double alpha_val, double delta_val)
+  : dmin2(delta_val/2.), alpha(alpha_val), nsignal(0), mean(0), Sk(0), Mk(0), Tk(0), Nk(0)
 {
-  init();
-
-  setAlpha(alpha);
-  setDelta(delta);
 }
 
 /*!
@@ -114,21 +108,21 @@ vpHinkley::vpHinkley(double alpha, double delta)
   Call init() to initialise the Hinkley's test and set \f$\alpha\f$
   and \f$\delta\f$ thresholds.
 
-  \param alpha : \f$\alpha\f$ is a predefined threshold.
+  \param alpha_val : \f$\alpha\f$ is a predefined threshold.
 
-  \param delta : \f$\delta\f$ denotes the jump minimal magnitude that
+  \param delta_val : \f$\delta\f$ denotes the jump minimal magnitude that
   we want to detect.
 
   \sa setAlpha(), setDelta()
 
 */
 void
-vpHinkley::init(double alpha, double delta)
+vpHinkley::init(double alpha_val, double delta_val)
 {
   init();
 
-  setAlpha(alpha);
-  setDelta(delta);
+  setAlpha(alpha_val);
+  setDelta(delta_val);
 }
 
 /*!
@@ -178,9 +172,9 @@ void vpHinkley::setDelta(double delta)
   \sa setDelta()
 
 */
-void vpHinkley::setAlpha(double alpha)
+void vpHinkley::setAlpha(double alpha_val)
 {
-  this->alpha = alpha;
+  this->alpha = alpha_val;
 }
 
 /*!
diff --git a/src/math/misc/vpHinkley.h b/src/math/misc/vpHinkley.h
index 197e6a17..97fad837 100755
--- a/src/math/misc/vpHinkley.h
+++ b/src/math/misc/vpHinkley.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHinkley.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpHinkley.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/misc/vpMath.cpp b/src/math/misc/vpMath.cpp
index 692c83ff..ac637a11 100644
--- a/src/math/misc/vpMath.cpp
+++ b/src/math/misc/vpMath.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMath.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMath.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/misc/vpMath.h b/src/math/misc/vpMath.h
index 2d991ea9..491fcf6a 100644
--- a/src/math/misc/vpMath.h
+++ b/src/math/misc/vpMath.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMath.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMath.h 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -54,7 +54,7 @@
 
 #include <math.h>
 
-#ifdef WIN32	// Not defined in Microsoft math.h
+#if defined(_WIN32)	// Not defined in Microsoft math.h
 
 # ifndef M_PI
 #   define M_PI            3.14159265358979323846f
diff --git a/src/math/misc/vpNoise.cpp b/src/math/misc/vpNoise.cpp
index 72553f88..d1616ae4 100644
--- a/src/math/misc/vpNoise.cpp
+++ b/src/math/misc/vpNoise.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpNoise.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpNoise.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/misc/vpNoise.h b/src/math/misc/vpNoise.h
index ac9289d7..0db43e4b 100644
--- a/src/math/misc/vpNoise.h
+++ b/src/math/misc/vpNoise.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpNoise.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpNoise.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -71,37 +71,26 @@
  */
 class VISP_EXPORT vpUniRand
 {
-
-
-	/*unsigned*/ long    a  ;
-	/*unsigned*/ long    m ; //2^31-1
-	/*unsigned*/ long    q ; //integer part of m/a
-	/*unsigned*/ long    r ;//r=m mod a
-	double    normalizer ; //we use a normalizer > m to ensure ans will never be 1 (it is the case if x = 739806647)
-
-
-private:
-	void draw0();
-protected:
-	long x;
-	double draw1();
-	void init()
-	{
-		a = 16807 ;
-		m = /*(unsigned long)*/2147483647 ; //2^31-1
-		q = 127773 ; //integer part of m/a
-		r = 2836 ;//r=m mod a
-		//we use a normalizer > m to ensure ans will never be
-		// 1 (it is the case if x = 739806647)
-		normalizer = 2147484721.0 ;
-	}
-
-public:
-	vpUniRand(const long seed = 0):x((seed)? seed : 739806647)
-	{
-		init() ;
-	}
-	double operator()() {return draw1();}
+    /*unsigned*/ long    a  ;
+    /*unsigned*/ long    m ; //2^31-1
+    /*unsigned*/ long    q ; //integer part of m/a
+    /*unsigned*/ long    r ;//r=m mod a
+    double    normalizer ; //we use a normalizer > m to ensure ans will never be 1 (it is the case if x = 739806647)
+
+  private:
+    void draw0();
+  protected:
+    long x;
+    double draw1();
+
+  public:
+    vpUniRand(const long seed = 0)
+      : a(16807), m(2147483647), q(127773), r(2836), normalizer(2147484721.0), x((seed)? seed : 739806647)
+    {
+    }
+    virtual ~vpUniRand() {};
+
+    double operator()() {return draw1();}
 
 };
 
@@ -117,12 +106,11 @@ public:
 
   \code
 #include <iostream>
-
 #include <visp/vpNoise.h>
 
 int main()
 {
-  vpGaussRand noise(0.5, 0);
+  vpGaussRand noise(0.5, 10);
   for(int i=0; i< 10; i++) {
     std::cout << "noise " << i << ": " << noise() << std::endl;
   }
@@ -132,38 +120,54 @@ int main()
  */
 class vpGaussRand : public vpUniRand
 {
-	double mean;
-	double sigma;
-
-public:
-
-	// Initialization
-	vpGaussRand() {init();mean=0;sigma=0;x=739806647;}
-	vpGaussRand(const double sqrtvariance,
-			const double _mean,
-			const long seed = 0):mean(_mean), sigma(sqrtvariance)
-	{
-		init() ;
-		mean = 0 ;
-		if (seed) x=seed; else x=739806647;
-	}
-	/*!
-      Set the standard deviation and mean for gaussian noise
-
-      \param _s new standard deviation
-      \param _m new mean
-	 */
-	inline void setSigmaMean(const double _s, const double _m) {mean=_m;sigma=_s;}
-	/*!
-        Set the seed of the noise
-
-        \param seed new seed
-	 */
-	inline void seed(const long seed) {x=seed;}
-	inline double operator()() {return sigma*gaussianDraw()+mean;}
-
-private :
-	double gaussianDraw();
+  private :
+    double mean;
+    double sigma;
+    double gaussianDraw();
+
+  public:
+
+    /*!
+      Default noise generator constructor.
+     */
+    vpGaussRand() : vpUniRand(), mean(0), sigma(0) {}
+
+    /*!
+      Gaussian noise random generator constructor.
+
+      \param sigma_val : Standard deviation.
+      \param mean_val : Mean value.
+      \param noise_seed : Seed of the noise
+    */
+    vpGaussRand(const double sigma_val, const double mean_val, const long noise_seed = 0)
+      : vpUniRand(noise_seed), mean(mean_val), sigma(sigma_val) {}
+
+    /*!
+      Set the standard deviation and mean for gaussian noise.
+
+      \param sigma_val : New standard deviation sigma.
+      \param mean_val : New mean value.
+    */
+    void setSigmaMean(const double sigma_val, const double mean_val) {
+      this->mean = mean_val;
+      this->sigma = sigma_val;
+    }
+
+    /*!
+      Set the seed of the noise.
+
+      \param seed_val : New seed.
+    */
+    void seed(const long seed_val) {
+      x=seed_val;
+    }
+
+    /*!
+      Return a random value from the Gaussian noise generator.
+    */
+    double operator()() {
+      return sigma*gaussianDraw()+mean;
+    }
 };
 
 #endif
diff --git a/src/math/robust/vpRansac.h b/src/math/robust/vpRansac.h
index 5f4d1d34..b3029d90 100644
--- a/src/math/robust/vpRansac.h
+++ b/src/math/robust/vpRansac.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRansac.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRansac.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -63,16 +63,7 @@
   \brief This class is a generic implementation of the Ransac algorithm. It 
   cannot be used alone.
 
-  Creation: june, 15 2005
-
-  RANSAC is described in :
-  
-  M.A. Fishler and R.C. Boles. "Random sample consensus: A paradigm for model
-  fitting with applications to image analysis and automated cartography". Comm.
-  Assoc. Comp, Mach., Vol 24, No 6, pp 381-395, 1981
-
-  Richard Hartley and Andrew Zisserman. "Multiple View Geometry in
-  Computer Vision". pp 101-113. Cambridge University Press, 2001
+  RANSAC is described in \cite Fischler81 and \cite Hartley01a.
 
   The code of this class is inspired by :
   Peter Kovesi
@@ -81,14 +72,9 @@
   pk at csse uwa edu au
   http://www.csse.uwa.edu.au/~pk
 
-
   \sa vpHomography
 
-
  */
-
-
-
 template <class vpTransformation>
 class vpRansac
 {
@@ -114,7 +100,7 @@ public:
   npts is the number of data points.
 
   \param s : The minimum number of samples from x required by fitting fn to
-  fit a model.
+  fit a model. Value should be greater or equal to 4.
 
   \param t : The distance threshold between data point and the model used to
   decide whether a point is an inlier or not.
@@ -141,22 +127,22 @@ vpRansac<vpTransformation>::ransac(unsigned int npts, vpColVector &x,
 				   vpColVector &inliers,
 				   int consensus,
            double /* areaThreshold */,
-           const int maxNbumbersOfTrials
-				   )
+           const int maxNbumbersOfTrials)
 {
-
-
-/*   bool isplanar; */
-/*   if (s == 4) isplanar = true; */
-/*   else isplanar = false; */
+  /*   bool isplanar; */
+  /*   if (s == 4) isplanar = true; */
+  /*   else isplanar = false; */
 
   double eps = 1e-6 ;
   double p = 0.99;    // Desired probability of choosing at least one sample
-					  // free from outliers
+  // free from outliers
 
   int maxTrials = maxNbumbersOfTrials;      // Maximum number of trials before we give up.
   int  maxDataTrials = 1000;  // Max number of attempts to select a non-degenerate
-							  // data set.
+  // data set.
+
+  if (s<4)
+    s = 4;
 
   // Sentinel value allowing detection of solution failure.
   bool solutionFind = false ;
@@ -184,7 +170,7 @@ vpRansac<vpTransformation>::ransac(unsigned int npts, vpColVector &x,
     {
       // Generate s random indicies in the range 1..npts
       for  (unsigned int i=0 ; i < s ; i++)
-	ind[i] = (unsigned int)ceil(random()*npts) -1;
+        ind[i] = (unsigned int)ceil(random()*npts) -1;
 
       // Test that these points are not a degenerate configuration.
       degenerate = vpTransformation::degenerateConfiguration(x,ind) ;
@@ -194,10 +180,10 @@ vpRansac<vpTransformation>::ransac(unsigned int npts, vpColVector &x,
       count = count + 1;
 
       if (count > maxDataTrials)      {
-	      delete [] ind;
-	      vpERROR_TRACE("Unable to select a nondegenerate data set");
-	      throw(vpException(vpException::fatalError, "Unable to select a nondegenerate data set"));
-	      //return false; //Useless after a throw() function
+        delete [] ind;
+        vpERROR_TRACE("Unable to select a nondegenerate data set");
+        throw(vpException(vpException::fatalError, "Unable to select a nondegenerate data set"));
+        //return false; //Useless after a throw() function
       }
     }
     // Fit model to this random selection of data points.
@@ -215,9 +201,9 @@ vpRansac<vpTransformation>::ransac(unsigned int npts, vpColVector &x,
       double resid = fabs(d[i]);
       if (resid < t)
       {
-	inliers[i] = 1 ;
-	ninliers++ ;
-	residual += fabs(d[i]);
+        inliers[i] = 1 ;
+        ninliers++ ;
+        residual += fabs(d[i]);
       }
       else inliers[i] = 0;
     }
diff --git a/src/math/robust/vpRobust.cpp b/src/math/robust/vpRobust.cpp
index d404fcf2..83557417 100644
--- a/src/math/robust/vpRobust.cpp
+++ b/src/math/robust/vpRobust.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobust.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRobust.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -70,16 +70,14 @@
 
 */
 vpRobust::vpRobust(unsigned int n_data)
+  : normres(), sorted_normres(), sorted_residues(), NoiseThreshold(0.0017), sig_prev(0), it(0), swap(0), size(n_data)
 {
   vpCDEBUG(2) << "vpRobust constructor reached" << std::endl;
 
-  size=n_data;
   normres.resize(n_data); 
   sorted_normres.resize(n_data); 
   sorted_residues.resize(n_data);
-  it=0;
-  NoiseThreshold=0.0017; //Can not be more accurate than 1 pixel
-
+  // NoiseThreshold=0.0017; //Can not be more accurate than 1 pixel
 }
 
 /*!
@@ -354,7 +352,7 @@ vpRobust::simultMEstimator(vpColVector &residues)
   double sigma=0;				// Standard Deviation
 
   unsigned int n_data = residues.getRows();
-  vpColVector normres(n_data); // Normalized Residue
+  vpColVector norm_res(n_data); // Normalized Residue
   vpColVector w(n_data);
   
   vpCDEBUG(2) << "vpRobust MEstimator reached. No. data = " << n_data
@@ -366,14 +364,14 @@ vpRobust::simultMEstimator(vpColVector &residues)
 
   // Normalize residues
   for(unsigned int i=0; i<n_data; i++)
-    normres[i] = (fabs(residues[i]- med));
+    norm_res[i] = (fabs(residues[i]- med));
 
   // Check for various methods.
   // For Huber compute Simultaneous scale estimate
   // For Others use MAD calculated on first iteration
   if(it==0)
   {
-    normmedian = select(normres, 0, n_data-1, ind_med/*(int)n_data/2*/);
+    normmedian = select(norm_res, 0, n_data-1, ind_med/*(int)n_data/2*/);
     // 1.48 keeps scale estimate consistent for a normal probability dist.
     sigma = 1.4826*normmedian; // Median Absolute Deviation
   }
@@ -390,10 +388,9 @@ vpRobust::simultMEstimator(vpColVector &residues)
     sigma= NoiseThreshold;
   }
 
-
   vpCDEBUG(2) << "MAD and C computed" << std::endl;
 
-  psiHuber(sigma, normres,w);
+  psiHuber(sigma, norm_res,w);
 
   sig_prev = sigma;
 
diff --git a/src/math/robust/vpRobust.h b/src/math/robust/vpRobust.h
index 39168c04..b6849689 100644
--- a/src/math/robust/vpRobust.h
+++ b/src/math/robust/vpRobust.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobust.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRobust.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/robust/vpScale.cpp b/src/math/robust/vpScale.cpp
index 15e3758f..dff1b375 100644
--- a/src/math/robust/vpScale.cpp
+++ b/src/math/robust/vpScale.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpScale.cpp 4312 2013-07-16 15:12:42Z ayol $
+ * $Id: vpScale.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -60,14 +60,11 @@
 
 //! Constructor
 vpScale::vpScale()
+  : bandwidth(0.02), dimension(1), kernel_type(EPANECHNIKOV)
 {
 #if (DEBUG_LEVEL2)
   std::cout << "vpScale constructor reached" << std::endl;
 #endif
-  bandwidth = 0.02;
-  dimension = 1;
-  kernel_type = EPANECHNIKOV;
-
 #if (DEBUG_LEVEL2)
   std::cout << "vpScale constructor finished" << std::endl;
 #endif
@@ -75,31 +72,23 @@ vpScale::vpScale()
 }
 
 //! Constructor
-vpScale::vpScale(double kernel_bandwidth,
-		 int dimension=1, int kernel_type=EPANECHNIKOV)
+vpScale::vpScale(double kernel_bandwidth, int dim=1, int type=EPANECHNIKOV)
+  : bandwidth(kernel_bandwidth), dimension(dim), kernel_type(type)
+
 {
 #if (DEBUG_LEVEL2)
   std::cout << "vpScale constructor reached" << std::endl;
 #endif
-
-  bandwidth = kernel_bandwidth;
-  this->dimension = (unsigned)dimension;
-  this->kernel_type = kernel_type;
-
 #if (DEBUG_LEVEL2)
   std::cout << "vpScale constructor finished" << std::endl;
 #endif
-
 }
 
 //! Destructor
 vpScale::~vpScale()
 {
-
 }
 
-
-
 // Calculate the modes of the density for the distribution
 // and their associated errors
 double
diff --git a/src/math/robust/vpScale.h b/src/math/robust/vpScale.h
index 9c9c6dd9..a39029c1 100644
--- a/src/math/robust/vpScale.h
+++ b/src/math/robust/vpScale.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpScale.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpScale.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/spline/vpBSpline.cpp b/src/math/spline/vpBSpline.cpp
index f0ef2887..c78e194d 100644
--- a/src/math/spline/vpBSpline.cpp
+++ b/src/math/spline/vpBSpline.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpBSpline.cpp 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpBSpline.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -49,8 +49,9 @@
   compute cubic B-Spline.
 */
 vpBSpline::vpBSpline()
+  : controlPoints(), knots(), p(3), // By default : p=3 for clubic spline
+    crossingPoints()
 {
-  p = 3;  //By default : clubic spline
 }
 
 /*!
@@ -58,6 +59,8 @@ vpBSpline::vpBSpline()
   
 */
 vpBSpline::vpBSpline(const vpBSpline &bspline)
+  : controlPoints(), knots(), p(3), // By default : p=3 for clubic spline
+    crossingPoints()
 {
   controlPoints = bspline.controlPoints;
   knots = bspline.knots;
diff --git a/src/math/spline/vpBSpline.h b/src/math/spline/vpBSpline.h
index cb7d93d6..c1c371f8 100644
--- a/src/math/spline/vpBSpline.h
+++ b/src/math/spline/vpBSpline.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpBSpline.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpBSpline.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -168,9 +168,9 @@ class VISP_EXPORT vpBSpline
 	/*!
 	  Sets the degree of the B-Spline.
 	  
-	  \param p : the degree of the B-Spline.
+    \param degree : the degree of the B-Spline.
 	*/
-	inline void set_p(unsigned int p) {this->p = p;}
+  inline void set_p(unsigned int degree) {this->p = degree;}
 
 
   /*!
diff --git a/src/math/spline/vpNurbs.cpp b/src/math/spline/vpNurbs.cpp
index 163a2887..a4139150 100644
--- a/src/math/spline/vpNurbs.cpp
+++ b/src/math/spline/vpNurbs.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpNurbs.cpp 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpNurbs.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -64,6 +64,7 @@ inline double distance(const vpImagePoint &iP1, const double w1, const vpImagePo
   compute cubic NURBS.
 */
 vpNurbs::vpNurbs()
+  : weights()
 {
   p = 3;
 }
@@ -71,7 +72,7 @@ vpNurbs::vpNurbs()
 /*!
   Copy constructor.
 */
-vpNurbs::vpNurbs(const vpNurbs &nurbs)  : vpBSpline(nurbs)
+vpNurbs::vpNurbs(const vpNurbs &nurbs)  : vpBSpline(nurbs), weights()
 {
   weights = nurbs.weights;
 }
@@ -691,13 +692,19 @@ vpNurbs::removeCurveKnot(double u, unsigned int r, unsigned int num, double TOL)
   The result of the method is composed by a knot vector, a set of control points and a set of associated weights.
   
   \param l_crossingPoints : The list of data points which have to be interpolated.
-  \param l_p : Degree of the NURBS basis functions.
+  \param l_p : Degree of the NURBS basis functions. This value need to be > 0.
   \param l_knots : The knot vector
   \param l_controlPoints : the list of control points.
   \param l_weights : the list of weights.
 */
 void vpNurbs::globalCurveInterp(std::vector<vpImagePoint> &l_crossingPoints, unsigned int l_p, std::vector<double> &l_knots, std::vector<vpImagePoint> &l_controlPoints, std::vector<double> &l_weights)
 {
+  if (l_p == 0) {
+    //vpERROR_TRACE("Bad degree of the NURBS basis functions");
+    throw(vpException(vpException::badValue,
+                      "Bad degree of the NURBS basis functions")) ;
+  }
+
   l_knots.clear();
   l_controlPoints.clear();
   l_weights.clear();
@@ -786,8 +793,8 @@ void vpNurbs::globalCurveInterp(vpList<vpMeSite> &l_crossingPoints)
   l_crossingPoints.next();
   while(!l_crossingPoints.outside())
   {
-    vpMeSite s = l_crossingPoints.value();
-    vpImagePoint pt(s.ifloat,s.jfloat);
+    s = l_crossingPoints.value();
+    pt.set_ij(s.ifloat,s.jfloat);
     if (vpImagePoint::distance(pt_1,pt) >= 10)
     {
       v_crossingPoints.push_back(pt);
@@ -890,11 +897,10 @@ void vpNurbs::globalCurveApprox(std::vector<vpImagePoint> &l_crossingPoints, uns
   
   d = (double)(m+1)/(double)(l_n-l_p+1);
   
-  double i;
   double alpha;
   for(unsigned int j = 1; j <= l_n-l_p; j++)
   {
-    i = floor(j*d);
+    double i = floor(j*d);
     alpha = j*d-i;
     l_knots.push_back((1.0-alpha)*ubar[(unsigned int)i-1]+alpha*ubar[(unsigned int)i]);
   }
diff --git a/src/math/spline/vpNurbs.h b/src/math/spline/vpNurbs.h
index f896637b..f0d5fdb6 100644
--- a/src/math/spline/vpNurbs.h
+++ b/src/math/spline/vpNurbs.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpNurbs.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpNurbs.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/transformation/vpExponentialMap.cpp b/src/math/transformation/vpExponentialMap.cpp
index 2a66fe84..128df224 100644
--- a/src/math/transformation/vpExponentialMap.cpp
+++ b/src/math/transformation/vpExponentialMap.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpExponentialMap.cpp 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpExponentialMap.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/transformation/vpExponentialMap.h b/src/math/transformation/vpExponentialMap.h
index 0ab20ef8..f8ed340d 100644
--- a/src/math/transformation/vpExponentialMap.h
+++ b/src/math/transformation/vpExponentialMap.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpExponentialMap.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpExponentialMap.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/transformation/vpForceTwistMatrix.cpp b/src/math/transformation/vpForceTwistMatrix.cpp
index 550c8f09..96b3acad 100644
--- a/src/math/transformation/vpForceTwistMatrix.cpp
+++ b/src/math/transformation/vpForceTwistMatrix.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpForceTwistMatrix.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpForceTwistMatrix.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -162,16 +162,16 @@ vpForceTwistMatrix::vpForceTwistMatrix(const vpHomogeneousMatrix &M) : vpMatrix(
   Initialize a force/torque twist transformation matrix from a translation vector
   \e t and a rotation vector with \f$\theta u \f$ parametrization.
 
-  \param t : Translation vector.
+  \param tv : Translation vector.
   
   \param thetau : \f$\theta u\f$ rotation vector.
 
 */
-vpForceTwistMatrix::vpForceTwistMatrix(const vpTranslationVector &t,
-				       const vpThetaUVector &thetau) : vpMatrix()
+vpForceTwistMatrix::vpForceTwistMatrix(const vpTranslationVector &tv,
+                                       const vpThetaUVector &thetau) : vpMatrix()
 {
   init() ;
-  buildFrom(t, thetau) ;
+  buildFrom(tv, thetau) ;
 }
 
 /*!
@@ -179,16 +179,16 @@ vpForceTwistMatrix::vpForceTwistMatrix(const vpTranslationVector &t,
   Initialize a force/torque twist transformation matrix from a translation vector
   \e t and a rotation matrix R.
 
-  \param t : Translation vector.
+  \param tv : Translation vector.
   
   \param R : Rotation matrix.
 
 */
-vpForceTwistMatrix::vpForceTwistMatrix(const vpTranslationVector &t,
+vpForceTwistMatrix::vpForceTwistMatrix(const vpTranslationVector &tv,
 				       const vpRotationMatrix &R)
 {
   init() ;
-  buildFrom(t,R) ;
+  buildFrom(tv,R) ;
 }
 
 /*!
@@ -365,17 +365,17 @@ vpForceTwistMatrix::operator*(const vpColVector &H) const
   Build a force/torque twist transformation matrix from a translation vector
   \e t and a rotation matrix M.
 
-  \param t : Translation vector.
+  \param tv : Translation vector.
   
   \param R : Rotation matrix.
 
 */
 vpForceTwistMatrix
-vpForceTwistMatrix::buildFrom(const vpTranslationVector &t,
-			 const vpRotationMatrix &R)
+vpForceTwistMatrix::buildFrom(const vpTranslationVector &tv,
+                              const vpRotationMatrix &R)
 {
   unsigned int i, j;
-  vpMatrix skewaR = t.skew(t)*R ;
+  vpMatrix skewaR = tv.skew(tv)*R ;
   
   for (i=0 ; i < 3 ; i++) {
     for (j=0 ; j < 3 ; j++)	{
@@ -392,18 +392,18 @@ vpForceTwistMatrix::buildFrom(const vpTranslationVector &t,
   Initialize a force/torque twist transformation matrix from a translation vector
   \e t and a rotation vector with \f$\theta u \f$ parametrization.
 
-  \param t : Translation vector.
+  \param tv : Translation vector.
   
   \param thetau : \f$\theta u\f$ rotation vector.
 
 */
 vpForceTwistMatrix
-vpForceTwistMatrix::buildFrom(const vpTranslationVector &t,
-			      const vpThetaUVector &thetau)
+vpForceTwistMatrix::buildFrom(const vpTranslationVector &tv,
+                              const vpThetaUVector &thetau)
 {
   vpRotationMatrix R ;
   R.buildFrom(thetau) ;
-  buildFrom(t,R) ;
+  buildFrom(tv,R) ;
   return (*this) ;
 }
 
@@ -421,12 +421,12 @@ vpForceTwistMatrix::buildFrom(const vpTranslationVector &t,
 vpForceTwistMatrix
 vpForceTwistMatrix::buildFrom(const vpHomogeneousMatrix &M)
 {
-  vpTranslationVector t ;
+  vpTranslationVector tv ;
   vpRotationMatrix R ;
   M.extract(R) ;
-  M.extract(t) ;
+  M.extract(tv) ;
   
-  buildFrom(t, R) ;
+  buildFrom(tv, R) ;
   return (*this) ;
 }
 
diff --git a/src/math/transformation/vpForceTwistMatrix.h b/src/math/transformation/vpForceTwistMatrix.h
index e337a132..33a797a2 100644
--- a/src/math/transformation/vpForceTwistMatrix.h
+++ b/src/math/transformation/vpForceTwistMatrix.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpForceTwistMatrix.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpForceTwistMatrix.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/transformation/vpHomogeneousMatrix.cpp b/src/math/transformation/vpHomogeneousMatrix.cpp
index 3dc24280..db8ca5d5 100644
--- a/src/math/transformation/vpHomogeneousMatrix.cpp
+++ b/src/math/transformation/vpHomogeneousMatrix.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHomogeneousMatrix.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpHomogeneousMatrix.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -86,11 +86,11 @@ vpHomogeneousMatrix::init()
 
 }
 
-vpHomogeneousMatrix::vpHomogeneousMatrix(const vpTranslationVector &t, 
-					 const vpQuaternionVector &q) 
+vpHomogeneousMatrix::vpHomogeneousMatrix(const vpTranslationVector &tv,
+                                         const vpQuaternionVector &q)
 {
   init();
-  buildFrom(t,q);
+  buildFrom(tv,q);
 }
 
 /*!
@@ -111,19 +111,19 @@ vpHomogeneousMatrix::vpHomogeneousMatrix(const vpHomogeneousMatrix &M) : vpMatri
   *this = M ;
 }
 
-vpHomogeneousMatrix::vpHomogeneousMatrix(const vpTranslationVector &t,
+vpHomogeneousMatrix::vpHomogeneousMatrix(const vpTranslationVector &tv,
                                          const vpThetaUVector &tu) : vpMatrix()
 {
   init() ;
-  buildFrom(t,tu) ;
+  buildFrom(tv,tu) ;
 }
 
-vpHomogeneousMatrix::vpHomogeneousMatrix(const vpTranslationVector &t,
+vpHomogeneousMatrix::vpHomogeneousMatrix(const vpTranslationVector &tv,
                                          const vpRotationMatrix &R) : vpMatrix()
 {
   init() ;
   insert(R) ;
-  insert(t) ;
+  insert(tv) ;
 }
 
 vpHomogeneousMatrix::vpHomogeneousMatrix(const vpPoseVector &p) : vpMatrix()
@@ -145,20 +145,20 @@ vpHomogeneousMatrix::vpHomogeneousMatrix(const double tx,
 }
 
 void
-vpHomogeneousMatrix::buildFrom(const vpTranslationVector &t,
+vpHomogeneousMatrix::buildFrom(const vpTranslationVector &tv,
                                const vpThetaUVector &tu)
 {
   insert(tu) ;
-  insert(t) ;
+  insert(tv) ;
 }
 
 void
-vpHomogeneousMatrix::buildFrom(const vpTranslationVector &t,
+vpHomogeneousMatrix::buildFrom(const vpTranslationVector &tv,
                                const vpRotationMatrix &R)
 {
   init() ;
   insert(R) ;
-  insert(t) ;
+  insert(tv) ;
 }
 
 
@@ -166,17 +166,17 @@ void
 vpHomogeneousMatrix::buildFrom(const vpPoseVector &p)
 {
 
-  vpTranslationVector t(p[0],p[1],p[2]) ;
+  vpTranslationVector tv(p[0],p[1],p[2]) ;
   vpThetaUVector tu(p[3],p[4],p[5]) ;
 
   insert(tu) ;
-  insert(t) ;
+  insert(tv) ;
 }
 
-void vpHomogeneousMatrix::buildFrom(const vpTranslationVector &t, 
+void vpHomogeneousMatrix::buildFrom(const vpTranslationVector &tv,
 				    const vpQuaternionVector &q) 
 {
-  insert(t);
+  insert(tv);
   insert(q);
 }
 
@@ -189,10 +189,10 @@ vpHomogeneousMatrix::buildFrom(const double tx,
 			       const double tuz)
 {
   vpRotationMatrix R(tux, tuy, tuz) ;
-  vpTranslationVector t(tx, ty, tz) ;
+  vpTranslationVector tv(tx, ty, tz) ;
 
   insert(R) ;
-  insert(t) ;
+  insert(tv) ;
 }
 
 /*!
@@ -308,11 +308,11 @@ vpHomogeneousMatrix::extract(vpRotationMatrix &R) const
   Extract the translation vector from the homogeneous matrix. 
 */
 void
-vpHomogeneousMatrix::extract(vpTranslationVector &t) const
+vpHomogeneousMatrix::extract(vpTranslationVector &tv) const
 {
-  t[0] = (*this)[0][3] ;
-  t[1] = (*this)[1][3] ;
-  t[2] = (*this)[2][3] ;
+  tv[0] = (*this)[0][3] ;
+  tv[1] = (*this)[1][3] ;
+  tv[2] = (*this)[2][3] ;
 }
 /*!
   Extract the rotation as a Theta U vector.
@@ -481,7 +481,7 @@ vpHomogeneousMatrix::inverse(vpHomogeneousMatrix &M) const
 void
 vpHomogeneousMatrix::save(std::ofstream &f) const
 {
-  if (f != NULL)
+  if (! f.fail())
   {
     f << *this ;
   }
@@ -514,12 +514,12 @@ vpHomogeneousMatrix::save(std::ofstream &f) const
 void
 vpHomogeneousMatrix::load(std::ifstream &f)
 {
-  if (f != NULL)
+  if (! f.fail())
   {
     for (unsigned int i=0 ; i < 4 ; i++)
       for (unsigned int j=0 ; j < 4 ; j++)
       {
-	f>>   (*this)[i][j] ;
+        f >> (*this)[i][j] ;
       }
   }
   else
diff --git a/src/math/transformation/vpHomogeneousMatrix.h b/src/math/transformation/vpHomogeneousMatrix.h
index 43c7b5f2..9d1abda1 100644
--- a/src/math/transformation/vpHomogeneousMatrix.h
+++ b/src/math/transformation/vpHomogeneousMatrix.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHomogeneousMatrix.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpHomogeneousMatrix.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/transformation/vpPoseVector.cpp b/src/math/transformation/vpPoseVector.cpp
index b2656527..bb472e20 100644
--- a/src/math/transformation/vpPoseVector.cpp
+++ b/src/math/transformation/vpPoseVector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPoseVector.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPoseVector.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -119,15 +119,15 @@ vpPoseVector::vpPoseVector(const double tx,
   u]^\top\f$ from a translation vector \f$ \bf t \f$ and a \f$\Theta
   \bf u\f$ vector.
 
-  \param t : Translation vector \f$ \bf t \f$.
+  \param tv : Translation vector \f$ \bf t \f$.
   \param tu : \f$\Theta \bf u\f$ rotation  vector.
 
 */
-vpPoseVector::vpPoseVector(const vpTranslationVector& t,
+vpPoseVector::vpPoseVector(const vpTranslationVector& tv,
                            const vpThetaUVector& tu)
 {
   init() ;
-  buildFrom(t,tu) ;
+  buildFrom(tv,tu) ;
 }
 
 /*! 
@@ -136,17 +136,17 @@ vpPoseVector::vpPoseVector(const vpTranslationVector& t,
   u]^\top\f$ from a translation vector \f$ \bf t \f$ and a rotation
   matrix \f$ \bf R \f$.
 
-  \param t : Translation vector \f$ \bf t \f$.
+  \param tv : Translation vector \f$ \bf t \f$.
 
   \param R : Rotation matrix \f$ \bf R \f$ from which \f$\Theta \bf
   u\f$ vector is extracted to initialise the pose vector.
 
 */
-vpPoseVector::vpPoseVector(const vpTranslationVector& t,
+vpPoseVector::vpPoseVector(const vpTranslationVector& tv,
                            const vpRotationMatrix& R)
 {
   init() ;
-  buildFrom(t,R) ;
+  buildFrom(tv,R) ;
 }
 
 /*! 
@@ -180,8 +180,8 @@ vpPoseVector
 vpPoseVector::buildFrom(const vpHomogeneousMatrix& M)
 {
   vpRotationMatrix R ;    M.extract(R) ;
-  vpTranslationVector t ; M.extract(t) ;
-  buildFrom(t,R) ;
+  vpTranslationVector tv ; M.extract(tv) ;
+  buildFrom(tv,R) ;
   return *this ;
 }
 
@@ -191,18 +191,18 @@ vpPoseVector::buildFrom(const vpHomogeneousMatrix& M)
   from a translation vector \f$ \bf t \f$ and a \f$\Theta \bf u\f$
   vector.
 
-  \param t : Translation vector \f$ \bf t \f$.
+  \param tv : Translation vector \f$ \bf t \f$.
   \param tu : \f$\Theta \bf u\f$ rotation  vector.
 
   \return The build pose vector.
 */
 vpPoseVector
-vpPoseVector::buildFrom(const vpTranslationVector& t,
+vpPoseVector::buildFrom(const vpTranslationVector& tv,
                         const vpThetaUVector& tu)
 {
   for (unsigned int i =0  ; i < 3 ; i++)
     {
-      (*this)[i] = t[i] ;
+      (*this)[i] = tv[i] ;
       (*this)[i+3] = tu[i] ;
     }
   return *this ;
@@ -214,7 +214,7 @@ vpPoseVector::buildFrom(const vpTranslationVector& t,
   from a translation vector \f$ \bf t \f$ and a rotation matrix \f$
   \bf R \f$.
 
-  \param t : Translation vector \f$ \bf t \f$.
+  \param tv : Translation vector \f$ \bf t \f$.
 
   \param R : Rotation matrix \f$ \bf R \f$ from which \f$\Theta \bf
   u\f$ vector is extracted to initialise the pose vector.
@@ -222,13 +222,13 @@ vpPoseVector::buildFrom(const vpTranslationVector& t,
   \return The build pose vector.
 */
 vpPoseVector
-vpPoseVector::buildFrom(const vpTranslationVector& t,
+vpPoseVector::buildFrom(const vpTranslationVector& tv,
                         const vpRotationMatrix& R)
 {
   vpThetaUVector tu ;
   tu.buildFrom(R) ;
 
-  buildFrom(t,tu) ;
+  buildFrom(tv,tu) ;
   return *this ;
 }
 
@@ -276,7 +276,7 @@ vpPoseVector::print()
 void
 vpPoseVector::save(std::ofstream &f) const
 {
-  if (f != NULL)
+  if (! f.fail())
     {
       f << *this ;
     }
@@ -301,18 +301,18 @@ vpPoseVector::save(std::ofstream &f) const
 void
 vpPoseVector::load(std::ifstream &f)
 {
-  if (f != NULL)
+  if (! f.fail())
+  {
+    for (unsigned int i=0 ; i < 6 ; i++)
     {
-      for (unsigned int i=0 ; i < 6 ; i++)
-	{
-	  f>>   (*this)[i] ;
-	}
+      f >> (*this)[i] ;
     }
+  }
   else
-    {
-      vpERROR_TRACE("\t\t file not open " );
-      throw(vpException(vpException::ioError, "\t\t file not open")) ;
-    }
+  {
+    vpERROR_TRACE("\t\t file not open " );
+    throw(vpException(vpException::ioError, "\t\t file not open")) ;
+  }
 }
 
 
diff --git a/src/math/transformation/vpPoseVector.h b/src/math/transformation/vpPoseVector.h
index dd502301..607fdcdd 100644
--- a/src/math/transformation/vpPoseVector.h
+++ b/src/math/transformation/vpPoseVector.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPoseVector.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPoseVector.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/transformation/vpQuaternionVector.cpp b/src/math/transformation/vpQuaternionVector.cpp
index 07beeca3..f00cab04 100644
--- a/src/math/transformation/vpQuaternionVector.cpp
+++ b/src/math/transformation/vpQuaternionVector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpQuaternionVector.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpQuaternionVector.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -54,14 +54,13 @@ const double vpQuaternionVector::minimum = 0.0001;
   \file vpQuaternionVector.cpp
   \brief Defines a quaternion and common operations on it.
 */
-vpQuaternionVector::vpQuaternionVector() : vpRotationVector(4) {  }
 
 //! Constructor from doubles.
-vpQuaternionVector::vpQuaternionVector(const double x, const double y, 
-				       const double z,const double w) 
+vpQuaternionVector::vpQuaternionVector(const double x_, const double y_,
+               const double z_,const double w_)
   : vpRotationVector(4) 
 {
-  set(x, y, z, w);
+  set(x_, y_, z_, w_);
 }
 
 /*! 
@@ -74,30 +73,21 @@ vpQuaternionVector::vpQuaternionVector(const vpRotationMatrix &R)
 {	
   buildFrom(R);
 }
-/*! 
-  Copy constructor.
-  \param q : quaternion to construct from.
-*/
-vpQuaternionVector::vpQuaternionVector(const vpQuaternionVector &q) 
-  : vpRotationVector(4) 
-{  
-  for(unsigned int i=0;i<size();i++) (*this)[i]=q.r[i];   
-}
-    
+
 /*! 
   Manually change values of a quaternion.
-  \param x : x quaternion parameter.
-  \param y : y quaternion parameter.
-  \param z : z quaternion parameter.
-  \param w : w quaternion parameter.
+  \param x_ : x quaternion parameter.
+  \param y_ : y quaternion parameter.
+  \param z_ : z quaternion parameter.
+  \param w_ : w quaternion parameter.
 */
-void vpQuaternionVector::set(const double x, const double y, 
-			     const double z,const double w) 
+void vpQuaternionVector::set(const double x_, const double y_,
+           const double z_,const double w_)
 {
-  r[0]=x;
-  r[1]=y;
-  r[2]=z;
-  r[3]=w;
+  r[0]=x_;
+  r[1]=y_;
+  r[2]=z_;
+  r[3]=w_;
 }
 
     
@@ -144,13 +134,6 @@ vpQuaternionVector vpQuaternionVector::operator* ( vpQuaternionVector &rq) {
 			    w() * rq.w() - x() * rq.x() - y() * rq.y() - z() * rq.z());
 }
 
-//! Copy operator.   Allow operation such as Q = q.
-vpQuaternionVector &vpQuaternionVector::operator=( vpQuaternionVector &q)
-{ 
-  for(unsigned int i=0;i<size();i++) (*this)[i]=q.r[i];
-  return *this;
-} 
-
 /*! 
   Constructs a quaternion from a rotation matrix.
   
diff --git a/src/math/transformation/vpQuaternionVector.h b/src/math/transformation/vpQuaternionVector.h
index a98224bb..a41a41ff 100644
--- a/src/math/transformation/vpQuaternionVector.h
+++ b/src/math/transformation/vpQuaternionVector.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpQuaternionVector.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpQuaternionVector.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -82,9 +82,11 @@ private:
   static const double minimum;
 public:
     
-  vpQuaternionVector() ;    
+  /*! Default constructor that initialize all the angles to zero. */
+  vpQuaternionVector() : vpRotationVector(4) {}
+  /*! Copy constructor. */
+  vpQuaternionVector(const vpQuaternionVector &q) : vpRotationVector(q) {}
   vpQuaternionVector(const double x, const double y, const double z,const double w) ;    
-  vpQuaternionVector(const vpQuaternionVector &q);
   vpQuaternionVector(const vpRotationMatrix &R);
 
   void buildFrom(const vpRotationMatrix& R);
@@ -104,8 +106,7 @@ public:
   vpQuaternionVector operator-( vpQuaternionVector &q)  ;
   vpQuaternionVector operator-()  ;
   vpQuaternionVector operator*(const double l) ;
-  vpQuaternionVector operator* ( vpQuaternionVector &rq) ;
-  vpQuaternionVector &operator=( vpQuaternionVector &q); 
+  vpQuaternionVector operator*( vpQuaternionVector &rq) ;
 } ;
 
 #endif
diff --git a/src/math/transformation/vpRotationMatrix.cpp b/src/math/transformation/vpRotationMatrix.cpp
index f3894e97..b1fe772b 100644
--- a/src/math/transformation/vpRotationMatrix.cpp
+++ b/src/math/transformation/vpRotationMatrix.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRotationMatrix.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRotationMatrix.cpp 4620 2014-01-27 21:28:32Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -456,7 +456,7 @@ vpRotationMatrix::inverse(vpRotationMatrix &M) const
 
 
 //! std::cout an rotation matrix [thetaU]
-std::ostream &operator <<(std::ostream &s,const vpRotationMatrix &R)
+VISP_EXPORT std::ostream &operator <<(std::ostream &s,const vpRotationMatrix &R)
 {
   for (unsigned int i=0; i<3; i++)
   {
diff --git a/src/math/transformation/vpRotationMatrix.h b/src/math/transformation/vpRotationMatrix.h
index 04b47d96..dfbad694 100644
--- a/src/math/transformation/vpRotationMatrix.h
+++ b/src/math/transformation/vpRotationMatrix.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRotationMatrix.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRotationMatrix.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/transformation/vpRotationVector.cpp b/src/math/transformation/vpRotationVector.cpp
index 6c95e25f..5829b3ed 100644
--- a/src/math/transformation/vpRotationVector.cpp
+++ b/src/math/transformation/vpRotationVector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRotationVector.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRotationVector.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -97,8 +97,9 @@ Rxyz rotation vector:
 0
   \endcode
 */
-std::ostream &operator <<(std::ostream &s,const vpRotationVector &m)
+VISP_EXPORT std::ostream &operator <<(std::ostream &s,const vpRotationVector &m)
 {
+  std::ios::fmtflags original_flags( s.flags() );
   s.precision(10) ;
 
   for (unsigned int i=0; i < m.size(); i++)
@@ -106,12 +107,15 @@ std::ostream &operator <<(std::ostream &s,const vpRotationVector &m)
 
   s << std::endl;
 
+  // Restore ostream format
+  s.flags(original_flags);
+
   return s;
 }
 
 
-void vpRotationVector::init(const unsigned int size){
-	this->_size = size;
+void vpRotationVector::init(const unsigned int vector_size){
+  this->_size = vector_size;
 	r = new double[this->_size];
 	std::fill(r,r+this->_size,0.);
 }
@@ -119,9 +123,3 @@ void vpRotationVector::init(const unsigned int size){
 vpRotationVector::~vpRotationVector(){
 	delete[] r;
 }
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/src/math/transformation/vpRotationVector.h b/src/math/transformation/vpRotationVector.h
index 118b41ab..965ee37d 100644
--- a/src/math/transformation/vpRotationVector.h
+++ b/src/math/transformation/vpRotationVector.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRotationVector.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpRotationVector.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -83,11 +83,10 @@ int main()
   
   std::cout << "Rxyz rotation vector: " << r << std::endl;
 
-  double rx = r[1];       // Get the value of the angle around x axis
-  double ry = r[2];       // Get the value of the angle around y axis
-  double rz = r[3];       // Get the value of the angle around z axis
+  double rx = r[0];       // Get the value of the angle around x axis
+  double ry = r[1];       // Get the value of the angle around y axis
+  double rz = r[2];       // Get the value of the angle around z axis
 }
-  
   \endcode
 
 */
@@ -100,18 +99,29 @@ protected:
   unsigned int _size;
   void init(const unsigned int size);
 public:
-  //! Constructor that constructs a vector of size 3 initialize three vector values to zero.
-  vpRotationVector() { 
-	init(3);
+  //! Constructor that constructs a vector of size 3 and initialize all values to zero.
+  vpRotationVector()
+    : r(NULL), _size(0)
+  {
+    init(3);
   }
 
-  
-  //! Constructor that constructs a vector of size n initialize three vector values to zero.
-  vpRotationVector(const unsigned int n) { 
-	init(n);
+  //! Constructor that constructs a vector of size n and initialize all values to zero.
+  vpRotationVector(const unsigned int n)
+    : r(NULL), _size(n)
+  {
+    init(n);
+  }
+  /*!
+    Copy operator.
+  */
+  vpRotationVector(const vpRotationVector &v)
+    : r(NULL), _size(0)
+  {
+    *this = v;
   }
-  
-  ~vpRotationVector();
+
+  virtual ~vpRotationVector();
 
   /*!
     Operator that allows to set the value of an element of the rotation 
@@ -124,7 +134,19 @@ public:
   */
   inline const double &operator [](unsigned int n) const { return *(r+n);  }
 
-    
+  /*!
+    Affectation of two vectors.
+  */
+  vpRotationVector &operator=(const vpRotationVector &v)
+  {
+    init(v.size());
+    for (unsigned int i=0; i<_size; i++)
+    {
+      r[i] = v.r[i] ;
+    }
+    return *this;
+  }
+
   /*! Returns the size of the rotation vector
    */
   unsigned int size() const;
@@ -132,8 +154,7 @@ public:
   // Transpose of the rotation vector.
   vpRowVector t() const;
 
-  friend VISP_EXPORT std::ostream &operator << (std::ostream &s,
-						const vpRotationVector &m);
+  friend VISP_EXPORT std::ostream &operator << (std::ostream &s, const vpRotationVector &m);
 
 } ;
 
diff --git a/src/math/transformation/vpRxyzVector.cpp b/src/math/transformation/vpRxyzVector.cpp
index 6fe57a9a..cc2218eb 100644
--- a/src/math/transformation/vpRxyzVector.cpp
+++ b/src/math/transformation/vpRxyzVector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRxyzVector.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRxyzVector.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -51,27 +51,6 @@
 */
 
 
-/*!
-  Affectation of two vectors.
-*/
-vpRxyzVector &
-vpRxyzVector::operator=(const vpRxyzVector &m)
-{
-
-  for (int i=0; i<3; i++)
-  {
-      r[i] = m.r[i] ;
-  }
-  return *this;
-}
-
-
-//! Copy constructor.
-vpRxyzVector::vpRxyzVector(const vpRxyzVector &m) : vpRotationVector()
-{
-  *this = m ;
-}
-
 /*! 
   Constructor that initialize \f$R_{xyz}=(\varphi,\theta,\psi)\f$ Euler
   angles from a rotation matrix.
diff --git a/src/math/transformation/vpRxyzVector.h b/src/math/transformation/vpRxyzVector.h
index a52f2f6d..ec1f258a 100644
--- a/src/math/transformation/vpRxyzVector.h
+++ b/src/math/transformation/vpRxyzVector.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRxyzVector.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRxyzVector.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -155,12 +155,11 @@ class VISP_EXPORT vpRxyzVector : public vpRotationVector
   friend class vpThetaUVector;
   
  public:
-  //! Default constructor. Initialize the angles to zero.
-  vpRxyzVector() { ; }
-    
-  // Copy constructor.
-  vpRxyzVector(const vpRxyzVector &m);
-    
+  /*! Default constructor that initialize all the angles to zero. */
+  vpRxyzVector() {}
+  /*! Copy constructor. */
+  vpRxyzVector(const vpRxyzVector &rxyz) : vpRotationVector(rxyz) {}
+
   /*!
     Constructor from 3 angles (in radian).
     \param phi : \f$\varphi\f$ angle around the \f$x\f$ axis.
@@ -176,9 +175,6 @@ class VISP_EXPORT vpRxyzVector : public vpRotationVector
   // initialize a Rxyz vector from a ThetaU vector
   vpRxyzVector(const vpThetaUVector&  tu) ;
 
-  // Affectation of two vectors.
-  vpRxyzVector &operator=(const vpRxyzVector &m);
-
   /*!
     Construction from 3 angles (in radian).
     \param phi : \f$\varphi\f$ angle around the \f$x\f$ axis.
@@ -201,9 +197,3 @@ class VISP_EXPORT vpRxyzVector : public vpRotationVector
 } ;
 
 #endif
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/src/math/transformation/vpRzyxVector.cpp b/src/math/transformation/vpRzyxVector.cpp
index d2e5b18b..abeab6c9 100644
--- a/src/math/transformation/vpRzyxVector.cpp
+++ b/src/math/transformation/vpRzyxVector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRzyxVector.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRzyxVector.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -51,29 +51,6 @@
 
 */
 
-
-/*!
-  Affectation of two vectors.
-*/
-vpRzyxVector &
-vpRzyxVector::operator=(const vpRzyxVector &m)
-{
-
-  for (int i=0; i<3; i++)
-  {
-      r[i] = m.r[i] ;
-  }
-  return *this;
-}
-
-
-//! Copy constructor.
-vpRzyxVector::vpRzyxVector(const vpRzyxVector &m) : vpRotationVector()
-{
-  *this = m ;
-}
-
-
 /*! 
   Constructor that initialize \f$R_{zyx}=(\varphi,\theta,\psi)\f$ Euler
   angles from a rotation matrix.
diff --git a/src/math/transformation/vpRzyxVector.h b/src/math/transformation/vpRzyxVector.h
index 5d2af9bd..329c4b49 100644
--- a/src/math/transformation/vpRzyxVector.h
+++ b/src/math/transformation/vpRzyxVector.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRzyxVector.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRzyxVector.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -154,11 +154,10 @@ class VISP_EXPORT vpRzyxVector : public vpRotationVector
   friend class vpThetaUVector;
 
 public:
-  //! Default constructor. Initialize the angles to zero.
-  vpRzyxVector() { ; }
-
-  // Copy constructor.
-  vpRzyxVector(const vpRzyxVector &m);
+  /*! Default constructor that initialize all the angles to zero. */
+  vpRzyxVector() {}
+  /*! Copy constructor. */
+  vpRzyxVector(const vpRzyxVector &rzyx) : vpRotationVector(rzyx) {}
 
   /*!
     Constructor from 3 angles (in radian).
@@ -173,10 +172,7 @@ public:
   vpRzyxVector(const vpRotationMatrix& R) ;
 
   // initialize a Rzyx vector from a ThetaU vector
-  vpRzyxVector(const vpThetaUVector&  tu) ;
-
-  // Affectation of two vectors.
-  vpRzyxVector &operator=(const vpRzyxVector &m);
+  vpRzyxVector(const vpThetaUVector& tu) ;
 
   /*!
     Construction from 3 angles (in radian).
diff --git a/src/math/transformation/vpRzyzVector.cpp b/src/math/transformation/vpRzyzVector.cpp
index 63c1f3f6..d0d0eb2f 100644
--- a/src/math/transformation/vpRzyzVector.cpp
+++ b/src/math/transformation/vpRzyzVector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRzyzVector.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRzyzVector.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -51,28 +51,6 @@
   Rzyz(phi,theta,psi) = Rot(z,phi)Rot(y,theta)Rot(z,psi)
 */
 
-
-/*!
-  Affectation of two vectors.
-*/
-vpRzyzVector &
-vpRzyzVector::operator=(const vpRzyzVector &m)
-{
-
-  for (int i=0; i<3; i++)
-  {
-      r[i] = m.r[i] ;
-  }
-  return *this;
-}
-
-
-//! Copy constructor.
-vpRzyzVector::vpRzyzVector(const vpRzyzVector &m) : vpRotationVector()
-{
-  *this = m ;
-}
-
 /*! 
   Constructor that initialize \f$R_{zyz}=(\varphi,\theta,\psi)\f$ Euler
   angles from a rotation matrix.
@@ -83,7 +61,6 @@ vpRzyzVector::vpRzyzVector(const vpRotationMatrix& R)
   buildFrom(R) ;
 }
 
-
 /*!
   Constructor that initialize \f$R_{zyz}=(\varphi,\theta,\psi)\f$ Euler
   angles vector from a \f$\theta u\f$ vector.
@@ -144,11 +121,30 @@ vpRzyzVector::buildFrom(const vpThetaUVector& tu)
     return *this ;
 }
 
+/*!
+
+  Initialize each element of the vector to the same angle value \e v.
+
+  \param v : Angle value to set for each element of the vector.
+
+\code
+#include <visp/vpMath.h>
+#include <visp/vpRzyzVector.h>
+
+int main()
+{
+  vpRzyzVector r;
 
+  // Initialise the rotation vector
+  r = vpMath::rad( 45.f); // All the 3 angles are set to 45 degrees
+}
+\endcode
+*/
+vpRzyzVector &vpRzyzVector::operator=(double v)
+{
+  for (int i=0; i< 3; i++)
+    r[i] = v;
 
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+  return *this;
+}
 
diff --git a/src/math/transformation/vpRzyzVector.h b/src/math/transformation/vpRzyzVector.h
index 801f04c4..90865e95 100644
--- a/src/math/transformation/vpRzyzVector.h
+++ b/src/math/transformation/vpRzyzVector.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRzyzVector.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRzyzVector.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -153,12 +153,11 @@ class VISP_EXPORT vpRzyzVector : public vpRotationVector
   friend class vpThetaUVector;
 
  public:
-  //! Default constructor. Initialize the angles to zero.
-  vpRzyzVector() {  ; }
+  /*! Default constructor that initialize all the angles to zero. */
+  vpRzyzVector() {}
+  /*! Copy constructor. */
+  vpRzyzVector(const vpRzyzVector &rzyz) : vpRotationVector(rzyz) {}
 
-  // Copy constructor.
-  vpRzyzVector(const vpRzyzVector &m);
-  
   /*!
     Constructor from 3 angles (in radian).
     \param phi : \f$\varphi\f$ angle around the \f$z\f$ axis.
@@ -174,9 +173,6 @@ class VISP_EXPORT vpRzyzVector : public vpRotationVector
   // initialize a Rzyz vector from a ThetaU vector
   vpRzyzVector(const vpThetaUVector&  tu);
 
-  // Affectation of two vectors.
-  vpRzyzVector &operator=(const vpRzyzVector &m);
-
   /*!
     Construction from 3 angles (in radian).
     \param phi : \f$\varphi\f$ angle around the \f$z\f$ axis.
@@ -195,11 +191,9 @@ class VISP_EXPORT vpRzyzVector : public vpRotationVector
 
   // convert a ThetaU vector into a Rzyz vector
   vpRzyzVector buildFrom(const vpThetaUVector& R) ;
+
+  vpRzyzVector &operator=(double x) ;
+
 } ;
 #endif
 
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/src/math/transformation/vpThetaUVector.cpp b/src/math/transformation/vpThetaUVector.cpp
index 4e5b6905..84f4176a 100644
--- a/src/math/transformation/vpThetaUVector.cpp
+++ b/src/math/transformation/vpThetaUVector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
 *
-* $Id: vpThetaUVector.cpp 4056 2013-01-05 13:04:42Z fspindle $
+* $Id: vpThetaUVector.cpp 4632 2014-02-03 17:06:40Z fspindle $
 *
 * This file is part of the ViSP software.
-* Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+* Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 * 
 * This software is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
@@ -54,28 +54,6 @@ rotation
 
 const double vpThetaUVector::minimum = 0.0001;
 
-/*!
-Affectation of two \f$\theta {\bf u}\f$ vector.
-*/
-vpThetaUVector &
-vpThetaUVector::operator=(const vpThetaUVector &m)
-{
-  for (int i=0; i<3; i++)
-  {
-    r[i] = m.r[i] ;
-  }
-  return *this;
-}
-
-
-/*!
-Copy constructor.
-*/
-vpThetaUVector::vpThetaUVector(const vpThetaUVector &m) : vpRotationVector()
-{
-  *this = m ;
-}
-
 /*!
 Initialize a \f$\theta {\bf u}\f$ vector from an homogeneous matrix.
 */
@@ -271,7 +249,7 @@ vpThetaUVector::buildFrom(const vpRxyzVector& rxyz)
   return *this ;
 }
 
-/*! 
+/*!
 
 Initialize each element of the \f$\theta {\bf u}\f$ vector to the
 same angle value \e v.
@@ -327,8 +305,3 @@ vpThetaUVector::extract(double &theta, vpColVector &u) const
 }
 
 #undef vpDEBUG_LEVEL1
-/*
-* Local variables:
-* c-basic-offset: 2
-* End:
-*/
diff --git a/src/math/transformation/vpThetaUVector.h b/src/math/transformation/vpThetaUVector.h
index 43e2f5f9..27b1331f 100644
--- a/src/math/transformation/vpThetaUVector.h
+++ b/src/math/transformation/vpThetaUVector.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpThetaUVector.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpThetaUVector.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -148,10 +148,10 @@ private:
 
 public:
 
-  // constructor
-  vpThetaUVector() { ; }
-  // copy constructor
-  vpThetaUVector(const vpThetaUVector &tu) ;
+  /*! Default constructor that initialize all the angles to zero. */
+  vpThetaUVector() {}
+  /*! Copy constructor. */
+  vpThetaUVector(const vpThetaUVector &tu) : vpRotationVector(tu) {}
 
   // constructor initialize a Theta U vector from a homogeneous matrix
   vpThetaUVector(const vpHomogeneousMatrix & M) ;
@@ -181,8 +181,6 @@ public:
   // convert an Rxyz vector into Theta U vector
   vpThetaUVector buildFrom(const vpRxyzVector &xyz) ;
 
-  // copy operator
-  vpThetaUVector &operator=(const vpThetaUVector &tu);
   vpThetaUVector &operator=(double x) ;
 
   // extract the angle and the axis from the ThetaU representation
diff --git a/src/math/transformation/vpTranslationVector.cpp b/src/math/transformation/vpTranslationVector.cpp
index 46e35fac..9222e979 100644
--- a/src/math/transformation/vpTranslationVector.cpp
+++ b/src/math/transformation/vpTranslationVector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpTranslationVector.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpTranslationVector.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -82,7 +82,7 @@ vpTranslationVector::vpTranslationVector(const double tx,
 /*!
   Copy constructor.
 
-  \param t : Translation vector to copy.
+  \param tv : Translation vector to copy.
 
   \code
   vpTranslationVector t1(1,2,3); // Create and initialize a translation vector
@@ -91,7 +91,7 @@ vpTranslationVector::vpTranslationVector(const double tx,
   \endcode
 
 */
-vpTranslationVector::vpTranslationVector (const vpTranslationVector &t) : vpColVector(t)
+vpTranslationVector::vpTranslationVector (const vpTranslationVector &tv) : vpColVector(tv)
 {
 }
 
@@ -114,7 +114,7 @@ vpTranslationVector::set(const double tx,
 /*!
   Operator that allows to add two translation vectors.
 
-  \param t : Translation  vector to add.
+  \param tv : Translation  vector to add.
 
   \return The sum of the current translation vector (*this) and the one to add.
   \code
@@ -129,11 +129,11 @@ vpTranslationVector::set(const double tx,
 
 */
 vpTranslationVector
-vpTranslationVector::operator+(const vpTranslationVector &t) const
+vpTranslationVector::operator+(const vpTranslationVector &tv) const
 {
     vpTranslationVector sum ;
 
-    for (unsigned int i=0;i<3;i++)  sum[i] = (*this)[i]+t[i] ;
+    for (unsigned int i=0;i<3;i++)  sum[i] = (*this)[i]+tv[i] ;
 
     return sum;
 }
@@ -141,7 +141,7 @@ vpTranslationVector::operator+(const vpTranslationVector &t) const
 /*!
   Operator that allows to substract two translation vectors.
 
-  \param t : Translation  vector to substract.
+  \param tv : Translation  vector to substract.
 
   \return The substraction of the current translation vector (*this) and the one to substract.
   \code
@@ -156,11 +156,11 @@ vpTranslationVector::operator+(const vpTranslationVector &t) const
 
 */
 vpTranslationVector
-vpTranslationVector::operator-(const vpTranslationVector &t) const
+vpTranslationVector::operator-(const vpTranslationVector &tv) const
 {
     vpTranslationVector sub ;
 
-    for (unsigned int i=0;i<3;i++)  sub[i] = (*this)[i]-t[i] ;
+    for (unsigned int i=0;i<3;i++)  sub[i] = (*this)[i]-tv[i] ;
 
     return sub;
 }
@@ -182,13 +182,13 @@ vpTranslationVector::operator-(const vpTranslationVector &t) const
 */
 vpTranslationVector vpTranslationVector::operator-() const //negate
 {
-    vpTranslationVector t ;
-    for (unsigned int i=0;i<dsize;i++)
-    {
-	*(t.data + i) = -*(data + i) ;
-    }
+  vpTranslationVector tv ;
+  for (unsigned int i=0;i<dsize;i++)
+  {
+    *(tv.data + i) = -*(data + i) ;
+  }
 
-    return t;
+  return tv;
 }
 
 /*!
@@ -208,18 +208,18 @@ vpTranslationVector vpTranslationVector::operator-() const //negate
 */
 vpTranslationVector vpTranslationVector::operator*(const double x) const 
 {
-    vpTranslationVector t ;
-    for (unsigned int i=0;i<dsize;i++)
-    {
-	*(t.data + i) = (*(data + i)) * x ;
-    }
+  vpTranslationVector tv ;
+  for (unsigned int i=0;i<dsize;i++)
+  {
+    *(tv.data + i) = (*(data + i)) * x ;
+  }
 
-    return t;
+  return tv;
 }
 
 /*!
   Copy operator.  
-  \param t : Translation vector to copy
+  \param tv : Translation vector to copy
   \return A copy of t.
 
   \code
@@ -230,10 +230,10 @@ vpTranslationVector vpTranslationVector::operator*(const double x) const
   // t2 is now equal to t1 : 1, 2, 3 
   \endcode
 */
-vpTranslationVector &vpTranslationVector::operator=(const vpTranslationVector &t)
+vpTranslationVector &vpTranslationVector::operator=(const vpTranslationVector &tv)
 {
 
-  unsigned int k = t.rowNum ;
+  unsigned int k = tv.rowNum ;
   if (rowNum != k){
     try {
       resize(k);
@@ -245,7 +245,7 @@ vpTranslationVector &vpTranslationVector::operator=(const vpTranslationVector &t
     }
   }
 
-  memcpy(data, t.data, rowNum*sizeof(double)) ;
+  memcpy(data, tv.data, rowNum*sizeof(double)) ;
 
   return *this;
 }
diff --git a/src/math/transformation/vpTranslationVector.h b/src/math/transformation/vpTranslationVector.h
index 53d4e552..16c5d06f 100644
--- a/src/math/transformation/vpTranslationVector.h
+++ b/src/math/transformation/vpTranslationVector.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpTranslationVector.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpTranslationVector.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/math/transformation/vpVelocityTwistMatrix.cpp b/src/math/transformation/vpVelocityTwistMatrix.cpp
index 3bf50675..add5bec6 100644
--- a/src/math/transformation/vpVelocityTwistMatrix.cpp
+++ b/src/math/transformation/vpVelocityTwistMatrix.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpVelocityTwistMatrix.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpVelocityTwistMatrix.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -146,16 +146,16 @@ vpVelocityTwistMatrix::vpVelocityTwistMatrix(const vpHomogeneousMatrix &M) : vpM
   Initialize a velocity twist transformation matrix from a translation vector
   \e t and a rotation vector with \f$\theta u \f$ parametrization.
 
-  \param t : Translation vector.
+  \param tv : Translation vector.
   
   \param thetau : \f$\theta u\f$ rotation vector.
 
 */
-vpVelocityTwistMatrix::vpVelocityTwistMatrix(const vpTranslationVector &t,
+vpVelocityTwistMatrix::vpVelocityTwistMatrix(const vpTranslationVector &tv,
 					     const vpThetaUVector &thetau) : vpMatrix()
 {
   init() ;
-  buildFrom(t, thetau) ;
+  buildFrom(tv, thetau) ;
 }
 
 /*!
@@ -163,16 +163,16 @@ vpVelocityTwistMatrix::vpVelocityTwistMatrix(const vpTranslationVector &t,
   Initialize a velocity twist transformation matrix from a translation vector
   \e t and a rotation matrix M.
 
-  \param t : Translation vector.
+  \param tv : Translation vector.
   
   \param R : Rotation matrix.
 
 */
-vpVelocityTwistMatrix::vpVelocityTwistMatrix(const vpTranslationVector &t,
+vpVelocityTwistMatrix::vpVelocityTwistMatrix(const vpTranslationVector &tv,
 					     const vpRotationMatrix &R)
 {
   init() ;
-  buildFrom(t,R) ;
+  buildFrom(tv,R) ;
 }
 
 /*!
@@ -313,17 +313,18 @@ vpVelocityTwistMatrix::operator*(const vpColVector &v) const
   vpColVector c(6);
 
   if (6 != v.getRows())
-    {
-      vpERROR_TRACE("vpVelocityTwistMatrix mismatch in vpVelocityTwistMatrix/vector multiply") ;
-      throw(vpMatrixException::incorrectMatrixSizeError) ;
-    }
+  {
+    vpERROR_TRACE("vpVelocityTwistMatrix mismatch in vpVelocityTwistMatrix/vector multiply") ;
+    throw(vpMatrixException(vpMatrixException::incorrectMatrixSizeError,
+                            "Mismatch in vpVelocityTwistMatrix/vector multiply")) ;
+  }
 
   c = 0.0;
 
   for (unsigned int i=0;i<6;i++) {
     for (unsigned int j=0;j<6;j++) {
       {
- 	c[i]+=rowPtrs[i][j] * v[j];
+        c[i]+=rowPtrs[i][j] * v[j];
       }
     }
   }
@@ -337,26 +338,26 @@ vpVelocityTwistMatrix::operator*(const vpColVector &v) const
   Build a velocity twist transformation matrix from a translation vector
   \e t and a rotation matrix M.
 
-  \param t : Translation vector.
+  \param tv : Translation vector.
   
   \param R : Rotation matrix.
 
 */
 vpVelocityTwistMatrix
-vpVelocityTwistMatrix::buildFrom(const vpTranslationVector &t,
+vpVelocityTwistMatrix::buildFrom(const vpTranslationVector &tv,
 				 const vpRotationMatrix &R)
 {
   unsigned int i, j;
-  vpMatrix skewaR = t.skew(t)*R ;
+  vpMatrix skewaR = tv.skew(tv)*R ;
 
   for (i=0 ; i < 3 ; i++)
     for (j=0 ; j < 3 ; j++)
-      {
-	(*this)[i][j] = R[i][j] ;
-	(*this)[i+3][j+3] = R[i][j] ;
-	(*this)[i][j+3] = skewaR[i][j] ;
+    {
+      (*this)[i][j] = R[i][j] ;
+      (*this)[i+3][j+3] = R[i][j] ;
+      (*this)[i][j+3] = skewaR[i][j] ;
 
-      }
+    }
   return (*this) ;
 }
 
@@ -365,18 +366,18 @@ vpVelocityTwistMatrix::buildFrom(const vpTranslationVector &t,
   Initialize a velocity twist transformation matrix from a translation vector
   \e t and a rotation vector with \f$\theta u \f$ parametrization.
 
-  \param t : Translation vector.
+  \param tv : Translation vector.
   
   \param thetau : \f$\theta u\f$ rotation vector.
 
 */
 vpVelocityTwistMatrix
-vpVelocityTwistMatrix::buildFrom(const vpTranslationVector &t,
+vpVelocityTwistMatrix::buildFrom(const vpTranslationVector &tv,
 				 const vpThetaUVector &thetau)
 {
   vpRotationMatrix R ;
   R.buildFrom(thetau) ;
-  buildFrom(t,R) ;
+  buildFrom(tv,R) ;
   return (*this) ;
 
 }
@@ -395,12 +396,12 @@ vpVelocityTwistMatrix::buildFrom(const vpTranslationVector &t,
 vpVelocityTwistMatrix
 vpVelocityTwistMatrix::buildFrom(const vpHomogeneousMatrix &M)
 {
-  vpTranslationVector t ;
+  vpTranslationVector tv ;
   vpRotationMatrix R ;
   M.extract(R) ;
-  M.extract(t) ;
+  M.extract(tv) ;
 
-  buildFrom(t, R) ;
+  buildFrom(tv, R) ;
   return (*this) ;
 }
 
@@ -438,7 +439,7 @@ vpVelocityTwistMatrix::extract( vpRotationMatrix &R) const
 
 //! extract the translation vector from the twist matrix
 void
-vpVelocityTwistMatrix::extract(vpTranslationVector &t) const
+vpVelocityTwistMatrix::extract(vpTranslationVector &tv) const
 {
 	vpRotationMatrix R;extract(R);
 	vpMatrix skTR(3,3);
@@ -447,9 +448,9 @@ vpVelocityTwistMatrix::extract(vpTranslationVector &t) const
 		skTR[i][j] = (*this)[i][j+3];
 
 	vpMatrix skT = skTR*R.t();
-	t[0] = skT[2][1];
-	t[1] = skT[0][2];
-	t[2] = skT[1][0];
+  tv[0] = skT[2][1];
+  tv[1] = skT[0][2];
+  tv[2] = skT[1][0];
 }
 
 /*
diff --git a/src/math/transformation/vpVelocityTwistMatrix.h b/src/math/transformation/vpVelocityTwistMatrix.h
index b8d0221e..1ca88bc4 100644
--- a/src/math/transformation/vpVelocityTwistMatrix.h
+++ b/src/math/transformation/vpVelocityTwistMatrix.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpVelocityTwistMatrix.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpVelocityTwistMatrix.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/network/vpClient.cpp b/src/network/vpClient.cpp
index fb887c27..66e5e2a3 100644
--- a/src/network/vpClient.cpp
+++ b/src/network/vpClient.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpClient.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpClient.cpp 4661 2014-02-10 19:34:58Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -42,8 +42,9 @@
 #include <visp/vpClient.h>
 
 
-vpClient::vpClient() :  vpNetwork()
-{}
+vpClient::vpClient() :  vpNetwork(), numberOfAttempts(0)
+{
+}
 
 /*!
   Disconnect the client from all the servers, and close the sockets.
@@ -82,7 +83,7 @@ bool vpClient::connectToHostname(const std::string &hostname, const unsigned int
   
   serv.socketFileDescriptorReceptor = socket( AF_INET, SOCK_STREAM, 0 );
 
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   if ( serv.socketFileDescriptorReceptor < 0){
 #else
   if ( serv.socketFileDescriptorReceptor == INVALID_SOCKET){
@@ -117,7 +118,7 @@ bool vpClient::connectToIP(const std::string &ip, const unsigned int &port_serv)
   
   serv.socketFileDescriptorReceptor = socket( AF_INET, SOCK_STREAM, 0 );
 
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   if ( serv.socketFileDescriptorReceptor < 0){
 #else
   if ( serv.socketFileDescriptorReceptor == INVALID_SOCKET){
@@ -144,9 +145,9 @@ void vpClient::deconnect(const unsigned int &index)
 {   
   if(index < receptor_list.size())
   {
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
     shutdown( receptor_list[index].socketFileDescriptorReceptor, SHUT_RDWR );
-#else // WIN32
+#else // _WIN32
     shutdown( receptor_list[index].socketFileDescriptorReceptor, SD_BOTH );
 #endif
     receptor_list.erase(receptor_list.begin()+(int)index);
@@ -159,9 +160,9 @@ void vpClient::deconnect(const unsigned int &index)
 void vpClient::stop()
 {
   for(unsigned int i = 0 ; i < receptor_list.size() ; i++){
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
     shutdown( receptor_list[i].socketFileDescriptorReceptor, SHUT_RDWR );
-#else // WIN32
+#else // _WIN32
     shutdown( receptor_list[i].socketFileDescriptorReceptor, SD_BOTH );
 #endif
     receptor_list.erase(receptor_list.begin()+(int)i);
@@ -184,7 +185,7 @@ bool vpClient::connectServer(vpNetwork::vpReceptor &serv)
   
   numberOfAttempts = 15;
   unsigned int ind = 1;
-  int connectionResult;
+  int connectionResult=-1;
   
   while(ind <= numberOfAttempts){
     std::cout << "Attempt number " << ind << "..." << std::endl;
diff --git a/src/network/vpClient.h b/src/network/vpClient.h
index 2197739e..0f457799 100644
--- a/src/network/vpClient.h
+++ b/src/network/vpClient.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpClient.h 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpClient.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/network/vpNetwork.cpp b/src/network/vpNetwork.cpp
index 579e79e2..7f8e57c0 100644
--- a/src/network/vpNetwork.cpp
+++ b/src/network/vpNetwork.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpNetwork.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpNetwork.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -43,19 +43,15 @@
 #include <visp/vpNetwork.h>
 
 vpNetwork::vpNetwork()
-{
-  separator = "[*@*]";
-  beginning = "[*start*]";
-  end = "[*end*]";
-  param_sep = "[*|*]";
-  max_size_message = 999999;
-  
-  tv_sec = 0;
-  tv_usec = 10;
+  : emitter(), receptor_list(), readFileDescriptor(), socketMax(0), request_list(),
+    max_size_message(999999), separator("[*@*]"), beginning("[*start*]"), end("[*end*]"),
+    param_sep("[*|*]"), currentMessageReceived(), tv(), tv_sec(0), tv_usec(10),
+    verboseMode(false)
+{ 
+  tv.tv_sec = tv_sec;
+  tv.tv_usec = tv_usec;
   
-  verboseMode = false;
-
-#ifdef WIN32
+#if defined(_WIN32)
   //Enable the sockets to be used
   //Note that: if we were using "winsock.h" instead of "winsock2.h" we would had to use:
   //WSAStartup(MAKEWORD(1,0), &WSAData);
@@ -66,7 +62,7 @@ vpNetwork::vpNetwork()
 
 vpNetwork::~vpNetwork()
 {
-#ifdef WIN32
+#if defined(_WIN32)
   WSACleanup();
 #endif
 }
@@ -135,7 +131,7 @@ void vpNetwork::print(const char *id)
   
   \param name : Name of the receptor.
   
-  \return Index of the receptor.
+  \return Index of the receptor, or -1 if an error occurs.
 */
 int vpNetwork::getReceptorIndex(const char *name)
 {
@@ -146,7 +142,8 @@ int vpNetwork::getReceptorIndex(const char *name)
     std::string noSuchHostMessage( "ERROR, " );
     noSuchHostMessage.append( name );
     noSuchHostMessage.append( ": no such host\n" );
-    vpERROR_TRACE( noSuchHostMessage.c_str(), "vpClient::getReceptorIndex()" );
+    vpERROR_TRACE( noSuchHostMessage.c_str(), "vpNetwork::getReceptorIndex()" );
+    return -1;
   }
   
   std::string ip = inet_ntoa(*(in_addr *)server->h_addr);
@@ -216,11 +213,12 @@ int vpNetwork::sendRequestTo(vpRequest &req, const unsigned int &dest)
   message += end;
   
   int flags = 0;
-#if ! defined(APPLE) && ! defined(WIN32)
+//#if ! defined(APPLE) && ! defined(SOLARIS) && ! defined(_WIN32)
+#if defined(__linux__)
   flags = MSG_NOSIGNAL; // Only for Linux
 #endif
 
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   int value = sendto(receptor_list[dest].socketFileDescriptorReceptor, message.c_str(), message.size(), flags,
                      (sockaddr*) &receptor_list[dest].receptorAddress,receptor_list[dest].receptorAddressSize);
 #else
@@ -689,17 +687,17 @@ int vpNetwork::_receiveRequestOnce()
     for(unsigned int i=0; i<receptor_list.size(); i++){
       if(FD_ISSET((unsigned int)receptor_list[i].socketFileDescriptorReceptor,&readFileDescriptor)){
         char *buf = new char [max_size_message];
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
         numbytes=recv(receptor_list[i].socketFileDescriptorReceptor, buf, max_size_message, 0);
 #else
         numbytes=recv((unsigned int)receptor_list[i].socketFileDescriptorReceptor, buf, (int)max_size_message, 0);
 #endif
-        
-        
+          
         if(numbytes <= 0)
         {
           std::cout << "Disconnected : " << inet_ntoa(receptor_list[i].receptorAddress.sin_addr) << std::endl;
           receptor_list.erase(receptor_list.begin()+(int)i);
+          delete [] buf;
           return numbytes;
         }
         else if(numbytes > 0){
@@ -768,7 +766,7 @@ int vpNetwork::_receiveRequestOnceFrom(const unsigned int &receptorEmitting)
   else{
     if(FD_ISSET((unsigned int)receptor_list[receptorEmitting].socketFileDescriptorReceptor,&readFileDescriptor)){
       char *buf = new char [max_size_message];
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       numbytes=recv(receptor_list[receptorEmitting].socketFileDescriptorReceptor, buf, max_size_message, 0);
 #else
       numbytes=recv((unsigned int)receptor_list[receptorEmitting].socketFileDescriptorReceptor, buf, (int)max_size_message, 0);
@@ -777,6 +775,7 @@ int vpNetwork::_receiveRequestOnceFrom(const unsigned int &receptorEmitting)
       {
         std::cout << "Disconnected : " << inet_ntoa(receptor_list[receptorEmitting].receptorAddress.sin_addr) << std::endl;
         receptor_list.erase(receptor_list.begin()+(int)receptorEmitting);
+        delete [] buf;
         return numbytes;
       }
       else if(numbytes > 0){
diff --git a/src/network/vpNetwork.h b/src/network/vpNetwork.h
index 8a840770..4be624c6 100644
--- a/src/network/vpNetwork.h
+++ b/src/network/vpNetwork.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpNetwork.h 4135 2013-02-13 16:48:19Z fspindle $
+ * $Id: vpNetwork.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -50,7 +50,7 @@
 #include <string.h>
 #include <iostream>
 
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
 #  include <unistd.h> 
 #  include <sys/socket.h>
 #  include <netinet/in.h>
@@ -85,7 +85,7 @@ class VISP_EXPORT vpNetwork
 protected:
 
   struct vpReceptor{
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
     int                   socketFileDescriptorReceptor;
     socklen_t             receptorAddressSize;
 #else
@@ -94,15 +94,24 @@ protected:
 #endif
     struct sockaddr_in    receptorAddress;
     std::string           receptorIP;
+
+    vpReceptor() : socketFileDescriptorReceptor(0), receptorAddressSize(), receptorAddress(), receptorIP() {}
   };
   
   struct vpEmitter{
-    struct sockaddr_in    emitterAdress;
-#ifdef UNIX
+    struct sockaddr_in    emitterAddress;
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
     int                   socketFileDescriptorEmitter;
 #else
     SOCKET                socketFileDescriptorEmitter;
 #endif
+    vpEmitter() : emitterAddress(), socketFileDescriptorEmitter(0)
+    {
+      emitterAddress.sin_family = AF_INET;
+      emitterAddress.sin_addr.s_addr = INADDR_ANY;
+      emitterAddress.sin_port = 0;
+      socketFileDescriptorEmitter = 0;
+    }
   };
   
   //######## PARAMETERS ########
@@ -112,7 +121,7 @@ protected:
   vpEmitter               emitter;
   std::vector<vpReceptor> receptor_list;
   fd_set                  readFileDescriptor;
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   int                     socketMax;
 #else
   SOCKET                  socketMax;
@@ -305,7 +314,7 @@ int vpNetwork::receive(T* object, const unsigned int &sizeOfObject)
   else{
     for(unsigned int i=0; i<receptor_list.size(); i++){
       if(FD_ISSET((unsigned int)receptor_list[i].socketFileDescriptorReceptor,&readFileDescriptor)){
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
         numbytes = recv(receptor_list[i].socketFileDescriptorReceptor, (char*)(void*)object, sizeOfObject, 0);
 #else
         numbytes = recv((unsigned int)receptor_list[i].socketFileDescriptorReceptor, (char*)(void*)object, (int)sizeOfObject, 0);
@@ -378,7 +387,7 @@ int vpNetwork::receiveFrom(T* object, const unsigned int &receptorEmitting, cons
   }
   else{
     if(FD_ISSET((unsigned int)receptor_list[receptorEmitting].socketFileDescriptorReceptor,&readFileDescriptor)){
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       numbytes = recv(receptor_list[receptorEmitting].socketFileDescriptorReceptor, (char*)(void*)object, sizeOfObject, 0);
 #else
       numbytes = recv((unsigned int)receptor_list[receptorEmitting].socketFileDescriptorReceptor, (char*)(void*)object, (int)sizeOfObject, 0);
@@ -426,11 +435,12 @@ int vpNetwork::send(T* object, const unsigned int &sizeOfObject)
   }
   
   int flags = 0;
-#if ! defined(APPLE) && ! defined(WIN32)
+//#if ! defined(APPLE) && ! defined(SOLARIS) && ! defined(_WIN32)
+#if defined(__linux__)
   flags = MSG_NOSIGNAL; // Only for Linux
 #endif
 
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   return sendto(receptor_list[0].socketFileDescriptorReceptor, (const char*)(void*)object, sizeOfObject, 
                 flags, (sockaddr*) &receptor_list[0].receptorAddress,receptor_list[0].receptorAddressSize);
 #else
@@ -472,11 +482,12 @@ int vpNetwork::sendTo(T* object, const unsigned int &dest, const unsigned int &s
   }
   
   int flags = 0;
-#if ! defined(APPLE) && ! defined(WIN32)
+//#if ! defined(APPLE) && ! defined(SOLARIS) && ! defined(_WIN32)
+#if defined(__linux__)
   flags = MSG_NOSIGNAL; // Only for Linux
 #endif
 
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   return sendto(receptor_list[dest].socketFileDescriptorReceptor, (const char*)(void*)object, sizeOfObject, 
                 flags, (sockaddr*) &receptor_list[dest].receptorAddress,receptor_list[dest].receptorAddressSize);
 #else
diff --git a/src/network/vpRequest.cpp b/src/network/vpRequest.cpp
index b300c787..4195c39a 100644
--- a/src/network/vpRequest.cpp
+++ b/src/network/vpRequest.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRequest.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRequest.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -42,6 +42,7 @@
 #include <visp/vpRequest.h>
 
 vpRequest::vpRequest()
+  : request_id(""), listOfParams()
 {}
 
 vpRequest::~vpRequest()
diff --git a/src/network/vpRequest.h b/src/network/vpRequest.h
index 0a0ea6bf..a1551605 100644
--- a/src/network/vpRequest.h
+++ b/src/network/vpRequest.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRequest.h 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpRequest.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/network/vpServer.cpp b/src/network/vpServer.cpp
index 2d853093..01647acc 100644
--- a/src/network/vpServer.cpp
+++ b/src/network/vpServer.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpServer.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpServer.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -45,11 +45,11 @@
 /*!
   Construct a server on the machine launching it.
 */
-vpServer::vpServer( ) : vpNetwork(), started(false)
+vpServer::vpServer( ) : adress(), port(0), started(false), max_clients(10)
 {
   int protocol = 0;
   emitter.socketFileDescriptorEmitter = socket(AF_INET, SOCK_STREAM, protocol);
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   if (emitter.socketFileDescriptorEmitter < 0)
 #else
   if (emitter.socketFileDescriptorEmitter == INVALID_SOCKET)
@@ -57,12 +57,12 @@ vpServer::vpServer( ) : vpNetwork(), started(false)
   {
     vpERROR_TRACE( "vpServer::vpServer(), cannot open socket." );
   }
-  emitter.emitterAdress.sin_family = AF_INET;
-  emitter.emitterAdress.sin_addr.s_addr = INADDR_ANY;
-  emitter.emitterAdress.sin_port = 0; 
+  emitter.emitterAddress.sin_family = AF_INET;
+  emitter.emitterAddress.sin_addr.s_addr = INADDR_ANY;
+  emitter.emitterAddress.sin_port = 0;
   
-  adress = inet_ntoa(emitter.emitterAdress.sin_addr);
-  port = emitter.emitterAdress.sin_port;
+  adress = inet_ntoa(emitter.emitterAddress.sin_addr);
+  port = emitter.emitterAddress.sin_port;
 }
 
 /*!
@@ -70,11 +70,11 @@ vpServer::vpServer( ) : vpNetwork(), started(false)
   
   \param port_serv : server's port.
 */
-vpServer::vpServer( const int &port_serv ) : vpNetwork(), started(false)
+vpServer::vpServer( const int &port_serv ) : adress(), port(0), started(false), max_clients(10)
 {
   int protocol = 0;
   emitter.socketFileDescriptorEmitter = socket(AF_INET, SOCK_STREAM, protocol);
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   if (emitter.socketFileDescriptorEmitter < 0)
 #else
   if (emitter.socketFileDescriptorEmitter == INVALID_SOCKET)
@@ -82,11 +82,11 @@ vpServer::vpServer( const int &port_serv ) : vpNetwork(), started(false)
   {
     vpERROR_TRACE( "vpServer::vpServer(const int &port_serv), cannot open socket." );
   }
-  emitter.emitterAdress.sin_family = AF_INET;
-  emitter.emitterAdress.sin_addr.s_addr = INADDR_ANY; //inet_addr("127.0.0.1");;
-  emitter.emitterAdress.sin_port = htons( (unsigned short)port_serv ); 
+  emitter.emitterAddress.sin_family = AF_INET;
+  emitter.emitterAddress.sin_addr.s_addr = INADDR_ANY; //inet_addr("127.0.0.1");;
+  emitter.emitterAddress.sin_port = htons( (unsigned short)port_serv );
   
-  adress = inet_ntoa(emitter.emitterAdress.sin_addr);
+  adress = inet_ntoa(emitter.emitterAddress.sin_addr);
   port = port_serv;
 }
 
@@ -96,11 +96,12 @@ vpServer::vpServer( const int &port_serv ) : vpNetwork(), started(false)
   \param adress_serv : server's adress.
   \param port_serv : server's port.
 */
-vpServer::vpServer( const std::string &adress_serv,const int &port_serv ) : vpNetwork(), started(false)
+vpServer::vpServer( const std::string &adress_serv,const int &port_serv )
+  : adress(), port(0), started(false), max_clients(10)
 {
   int protocol = 0;
   emitter.socketFileDescriptorEmitter = socket(AF_INET, SOCK_STREAM, protocol);
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   if (emitter.socketFileDescriptorEmitter < 0)
 #else
   if (emitter.socketFileDescriptorEmitter == INVALID_SOCKET)
@@ -108,9 +109,9 @@ vpServer::vpServer( const std::string &adress_serv,const int &port_serv ) : vpNe
   {
     vpERROR_TRACE( "vpServer::vpServer(const std::string &adress_serv,const int &port_serv), cannot open socket." );
   }
-  emitter.emitterAdress.sin_family = AF_INET;
-  emitter.emitterAdress.sin_addr.s_addr = inet_addr(adress_serv.c_str());
-  emitter.emitterAdress.sin_port = htons( (unsigned short)port_serv );
+  emitter.emitterAddress.sin_family = AF_INET;
+  emitter.emitterAddress.sin_addr.s_addr = inet_addr(adress_serv.c_str());
+  emitter.emitterAddress.sin_port = htons( (unsigned short)port_serv );
   
   adress = adress_serv;
   port = port_serv;
@@ -121,14 +122,14 @@ vpServer::vpServer( const std::string &adress_serv,const int &port_serv ) : vpNe
 */
 vpServer::~vpServer()
 {
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   close( emitter.socketFileDescriptorEmitter );
 #else //Win32
   closesocket( (unsigned)emitter.socketFileDescriptorEmitter );
 #endif
 
   for(unsigned int i = 0 ; i < receptor_list.size() ; i++)
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
     close( receptor_list[i].socketFileDescriptorReceptor );
 #else //Win32
     closesocket( (unsigned)receptor_list[i].socketFileDescriptorReceptor );
@@ -143,11 +144,11 @@ vpServer::~vpServer()
 */
 bool vpServer::start()
 {  
-  int serverStructLength = sizeof(emitter.emitterAdress);
-#ifdef UNIX
-  int bindResult = bind( emitter.socketFileDescriptorEmitter, (struct sockaddr *) &emitter.emitterAdress, (unsigned)serverStructLength );
+  int serverStructLength = sizeof(emitter.emitterAddress);
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
+  int bindResult = bind( emitter.socketFileDescriptorEmitter, (struct sockaddr *) &emitter.emitterAddress, (unsigned)serverStructLength );
 #else //Win32
-  int bindResult = bind( (unsigned)emitter.socketFileDescriptorEmitter, (struct sockaddr *) &emitter.emitterAdress, serverStructLength );
+  int bindResult = bind( (unsigned)emitter.socketFileDescriptorEmitter, (struct sockaddr *) &emitter.emitterAddress, serverStructLength );
 #endif
   
   
@@ -176,7 +177,7 @@ bool vpServer::start()
   }
 #endif // SO_NOSIGPIPE
 
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   listen( emitter.socketFileDescriptorEmitter, (int)max_clients );
 #else //Win32
   listen( (unsigned)emitter.socketFileDescriptorEmitter, (int)max_clients );
@@ -230,13 +231,13 @@ bool vpServer::checkForConnections()
     if(FD_ISSET((unsigned int)emitter.socketFileDescriptorEmitter,&readFileDescriptor)){
       vpNetwork::vpReceptor client;
       client.receptorAddressSize = sizeof(client.receptorAddress);
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       client.socketFileDescriptorReceptor = accept(emitter.socketFileDescriptorEmitter,(struct sockaddr*) &client.receptorAddress, &client.receptorAddressSize);
 #else //Win32
       client.socketFileDescriptorReceptor = accept((unsigned int)emitter.socketFileDescriptorEmitter,(struct sockaddr*) &client.receptorAddress, &client.receptorAddressSize);
 #endif
       
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       if((client.socketFileDescriptorReceptor) == -1)
 #else
       if((client.socketFileDescriptorReceptor) == INVALID_SOCKET)
@@ -253,7 +254,7 @@ bool vpServer::checkForConnections()
       for(unsigned int i=0; i<receptor_list.size(); i++){
         if(FD_ISSET((unsigned int)receptor_list[i].socketFileDescriptorReceptor,&readFileDescriptor)){
           char deco;
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
           int numbytes = recv(receptor_list[i].socketFileDescriptorReceptor, &deco, 1, MSG_PEEK);
 #else //Win32
           int numbytes = recv((unsigned int)receptor_list[i].socketFileDescriptorReceptor, &deco, 1, MSG_PEEK);
diff --git a/src/network/vpServer.h b/src/network/vpServer.h
index 5adf8070..b1873e2c 100644
--- a/src/network/vpServer.h
+++ b/src/network/vpServer.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpServer.h 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpServer.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/robot/real-robot/afma4/vpAfma4.cpp b/src/robot/real-robot/afma4/vpAfma4.cpp
index 66c2751f..32ee3c9d 100644
--- a/src/robot/real-robot/afma4/vpAfma4.cpp
+++ b/src/robot/real-robot/afma4/vpAfma4.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpAfma4.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpAfma4.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -69,6 +69,7 @@ const unsigned int vpAfma4::njoint = 4;
 
 */
 vpAfma4::vpAfma4()
+  : _a1(0), _d3(0), _d4(0), _etc(), _erc(), _eMc()
 {
   // Set the default parameters in case of the config files on the NAS
   // at Inria are not available.
@@ -148,7 +149,7 @@ vpAfma4::init (void)
 
 */
 vpHomogeneousMatrix
-vpAfma4::getForwardKinematics(const vpColVector & q)
+vpAfma4::getForwardKinematics(const vpColVector & q) const
 {
   vpHomogeneousMatrix fMc;
   fMc = get_fMc(q);
@@ -186,7 +187,7 @@ vpAfma4::getForwardKinematics(const vpColVector & q)
   \sa getForwardKinematics(const vpColVector & q)
 */
 vpHomogeneousMatrix
-vpAfma4::get_fMc (const vpColVector & q)
+vpAfma4::get_fMc (const vpColVector & q) const
 {
   vpHomogeneousMatrix fMc;
   get_fMc(q, fMc);
@@ -221,7 +222,7 @@ vpAfma4::get_fMc (const vpColVector & q)
 
 */
 void
-vpAfma4::get_fMc(const vpColVector & q, vpHomogeneousMatrix & fMc)
+vpAfma4::get_fMc(const vpColVector & q, vpHomogeneousMatrix & fMc) const
 {
 
   // Compute the direct geometric model: fMe = transformation between
@@ -269,7 +270,7 @@ vpAfma4::get_fMc(const vpColVector & q, vpHomogeneousMatrix & fMc)
 
 */
 void
-vpAfma4::get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe)
+vpAfma4::get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe) const
 {
   double            q1 = q[0]; // rot touret
   double            q2 = q[1]; // vertical translation
@@ -320,7 +321,7 @@ vpAfma4::get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe)
 
 */
 void
-vpAfma4::get_cMe(vpHomogeneousMatrix &cMe)
+vpAfma4::get_cMe(vpHomogeneousMatrix &cMe) const
 {
   cMe = this->_eMc.inverse();
 }
@@ -335,7 +336,7 @@ vpAfma4::get_cMe(vpHomogeneousMatrix &cMe)
 
 */
 void
-vpAfma4::get_cVe(vpVelocityTwistMatrix &cVe)
+vpAfma4::get_cVe(vpVelocityTwistMatrix &cVe) const
 {
   vpHomogeneousMatrix cMe ;
   get_cMe(cMe) ;
@@ -364,7 +365,7 @@ vpAfma4::get_cVe(vpVelocityTwistMatrix &cVe)
 
 */
 void
-vpAfma4::get_cVf(const vpColVector & q, vpVelocityTwistMatrix &cVf)
+vpAfma4::get_cVf(const vpColVector & q, vpVelocityTwistMatrix &cVf) const
 {
   vpHomogeneousMatrix fMc, cMf ;
   get_fMc(q, fMc) ;
@@ -375,8 +376,6 @@ vpAfma4::get_cVf(const vpColVector & q, vpVelocityTwistMatrix &cVf)
   return;
 }
 
-
-
 /*!
 
   Get the robot jacobian expressed in the end-effector frame:
@@ -414,7 +413,7 @@ vpAfma4::get_cVf(const vpColVector & q, vpVelocityTwistMatrix &cVf)
   \sa get_fJe()
 */
 void
-vpAfma4::get_eJe(const vpColVector &q, vpMatrix &eJe)
+vpAfma4::get_eJe(const vpColVector &q, vpMatrix &eJe) const
 {
   double            q4 = q[2]; // pan
   double            q5 = q[3]; // tilt
@@ -468,7 +467,7 @@ vpAfma4::get_eJe(const vpColVector &q, vpMatrix &eJe)
 */
 
 void
-vpAfma4::get_fJe(const vpColVector &q, vpMatrix &fJe)
+vpAfma4::get_fJe(const vpColVector &q, vpMatrix &fJe) const
 {
   fJe.resize(6,4) ;
 
@@ -524,7 +523,7 @@ vpAfma4::get_fJe(const vpColVector &q, vpMatrix &fJe)
   \sa get_eJe() and get_fJe()
 
 */
-void vpAfma4::get_fJe_inverse(const vpColVector &q, vpMatrix &fJe_inverse)
+void vpAfma4::get_fJe_inverse(const vpColVector &q, vpMatrix &fJe_inverse) const
 {
   fJe_inverse.resize(4, 6) ;
   fJe_inverse = 0;
@@ -560,7 +559,7 @@ void vpAfma4::get_fJe_inverse(const vpColVector &q, vpMatrix &fJe_inverse)
 
 */
 vpColVector
-vpAfma4::getJointMin()
+vpAfma4::getJointMin() const
 {
   vpColVector qmin(4);
   for (unsigned int i=0; i < 4; i ++)
@@ -577,7 +576,7 @@ vpAfma4::getJointMin()
 
 */
 vpColVector
-vpAfma4::getJointMax()
+vpAfma4::getJointMax() const
 {
   vpColVector qmax(4);
   for (unsigned int i=0; i < 4; i ++)
@@ -596,7 +595,7 @@ vpAfma4::getJointMax()
   \param os : Output stream.
   \param afma4 : Robot parameters.
 */
-std::ostream & operator << (std::ostream & os,
+VISP_EXPORT std::ostream & operator << (std::ostream & os,
 			    const vpAfma4 & afma4)
 {
   vpRotationMatrix eRc;
@@ -649,9 +648,3 @@ std::ostream & operator << (std::ostream & os,
 
   return os;
 }
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/src/robot/real-robot/afma4/vpAfma4.h b/src/robot/real-robot/afma4/vpAfma4.h
index 4acab0cd..376314a6 100644
--- a/src/robot/real-robot/afma4/vpAfma4.h
+++ b/src/robot/real-robot/afma4/vpAfma4.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpAfma4.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpAfma4.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -113,28 +113,29 @@ class VISP_EXPORT vpAfma4
 {
  public:
   vpAfma4();
+  /*! Destructor that does nothing. */
+  virtual ~vpAfma4() {};
 
   void init (void);
 
-  vpHomogeneousMatrix getForwardKinematics(const vpColVector & q);
+  vpHomogeneousMatrix getForwardKinematics(const vpColVector & q) const;
 /*   int getInverseKinematics(const vpHomogeneousMatrix & fMc, */
 /* 			   vpColVector & q, const bool &nearest=true); */
-  vpHomogeneousMatrix get_fMc (const vpColVector & q);
-  void get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe);
-  void get_fMc(const vpColVector & q, vpHomogeneousMatrix & fMc);
-
-  void get_cMe(vpHomogeneousMatrix &cMe) ;
-  void get_cVe(vpVelocityTwistMatrix &cVe) ;
-  void get_cVf(const vpColVector & q, vpVelocityTwistMatrix &cVf);
-  void get_eJe(const vpColVector &q, vpMatrix &eJe)  ;
-  void get_fJe(const vpColVector &q, vpMatrix &fJe)  ;
-  void get_fJe_inverse(const vpColVector &q, vpMatrix &fJe_inverse)  ;
-
-  friend VISP_EXPORT std::ostream & operator << (std::ostream & os,
-						 const vpAfma4 & afma4);
-
-  vpColVector getJointMin();
-  vpColVector getJointMax();
+  vpHomogeneousMatrix get_fMc (const vpColVector & q) const;
+  void get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe) const;
+  void get_fMc(const vpColVector & q, vpHomogeneousMatrix & fMc) const;
+
+  void get_cMe(vpHomogeneousMatrix &cMe) const;
+  void get_cVe(vpVelocityTwistMatrix &cVe) const;
+  void get_cVf(const vpColVector & q, vpVelocityTwistMatrix &cVf) const;
+  void get_eJe(const vpColVector &q, vpMatrix &eJe) const;
+  void get_fJe(const vpColVector &q, vpMatrix &fJe) const;
+  void get_fJe_inverse(const vpColVector &q, vpMatrix &fJe_inverse) const;
+
+  friend VISP_EXPORT std::ostream & operator << (std::ostream & os, const vpAfma4 & afma4);
+
+  vpColVector getJointMin() const;
+  vpColVector getJointMax() const;
 
  public:
 
diff --git a/src/robot/real-robot/afma4/vpRobotAfma4.cpp b/src/robot/real-robot/afma4/vpRobotAfma4.cpp
index d79c9d7c..731a3579 100644
--- a/src/robot/real-robot/afma4/vpRobotAfma4.cpp
+++ b/src/robot/real-robot/afma4/vpRobotAfma4.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotAfma4.cpp 4107 2013-02-06 10:04:49Z fspindle $
+ * $Id: vpRobotAfma4.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -554,7 +554,7 @@ vpRobotAfma4::getPowerState(void)
 
 */
 void
-vpRobotAfma4::get_cVe(vpVelocityTwistMatrix &cVe)
+vpRobotAfma4::get_cVe(vpVelocityTwistMatrix &cVe) const
 {
   vpHomogeneousMatrix cMe ;
   vpAfma4::get_cMe(cMe) ;
@@ -572,7 +572,7 @@ vpRobotAfma4::get_cVe(vpVelocityTwistMatrix &cVe)
 
 */
 void
-vpRobotAfma4::get_cVf(vpVelocityTwistMatrix &cVf)
+vpRobotAfma4::get_cVf(vpVelocityTwistMatrix &cVf) const
 {
   double position[this->njoint];
   double timestamp;
@@ -604,7 +604,7 @@ vpRobotAfma4::get_cVf(vpVelocityTwistMatrix &cVf)
 
 */
 void
-vpRobotAfma4::get_cMe(vpHomogeneousMatrix &cMe)
+vpRobotAfma4::get_cMe(vpHomogeneousMatrix &cMe) const
 {
   vpAfma4::get_cMe(cMe) ;
 }
diff --git a/src/robot/real-robot/afma4/vpRobotAfma4.h b/src/robot/real-robot/afma4/vpRobotAfma4.h
index e61dea0e..b7d19e0f 100644
--- a/src/robot/real-robot/afma4/vpRobotAfma4.h
+++ b/src/robot/real-robot/afma4/vpRobotAfma4.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotAfma4.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpRobotAfma4.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -251,11 +251,11 @@ public:  /* Methode publiques */
   vpColVector getVelocity (const vpRobot::vpControlFrameType frame);
   vpColVector getVelocity (const vpRobot::vpControlFrameType frame, double &timestamp);
 
-  void get_cMe(vpHomogeneousMatrix &cMe) ;
-  void get_cVe(vpVelocityTwistMatrix &cVe) ;
-  void get_cVf(vpVelocityTwistMatrix &cVf) ;
-  void get_eJe(vpMatrix &eJe)  ;
-  void get_fJe(vpMatrix &fJe)  ;
+  void get_cMe(vpHomogeneousMatrix &cMe) const;
+  void get_cVe(vpVelocityTwistMatrix &cVe) const;
+  void get_cVf(vpVelocityTwistMatrix &cVf) const;
+  void get_eJe(vpMatrix &eJe);
+  void get_fJe(vpMatrix &fJe);
 
   void init (void);
 
diff --git a/src/robot/real-robot/afma4/vpServolens.cpp b/src/robot/real-robot/afma4/vpServolens.cpp
index 1fe21d8f..1104be29 100644
--- a/src/robot/real-robot/afma4/vpServolens.cpp
+++ b/src/robot/real-robot/afma4/vpServolens.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpServolens.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpServolens.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -49,7 +49,7 @@
 
 */
 
-#if defined(UNIX)
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
 
 #include <unistd.h>
 #include <termios.h>
@@ -71,9 +71,8 @@
   \sa open()
 
 */
-vpServolens::vpServolens()
+vpServolens::vpServolens() : remfd(0), isinit(false)
 {
-  isinit = false;
 }
 
 /*! 
@@ -84,10 +83,8 @@ vpServolens::vpServolens()
 
   \sa open()
 */
-vpServolens::vpServolens(const char *port)
+vpServolens::vpServolens(const char *port) : remfd(0), isinit(false)
 {
-  isinit = false;
-
   this->open(port);
 }
 
@@ -131,7 +128,7 @@ vpServolens::open(const char *port)
 			      "Cannot open Servolens serial port.");
     }
 
-    // Lecture des paramètres courants de la liaison série.
+    // Lecture des parametres courants de la liaison serie.
     if (tcgetattr(this->remfd, &info) < 0) {
       ::close(this->remfd);
       vpERROR_TRACE ("Error using TCGETS in ioctl.");
@@ -144,11 +141,11 @@ vpServolens::open(const char *port)
     // 9600 bauds, 1 bit de stop, parite paire, 7 bits de donnee
     //
 
-    // Traitement sur les caractères recus
+    // Traitement sur les caracteres recus
     info.c_iflag = 0;
     info.c_iflag |= INLCR;
 
-    // Traitement sur les caractères envoyés sur la RS232.
+    // Traitement sur les caracteres envoyes sur la RS232.
     info.c_oflag = 0;  // idem
 
     // Traitement des lignes
@@ -159,7 +156,7 @@ vpServolens::open(const char *port)
     info.c_cflag |= CREAD;		// Validation reception
     info.c_cflag |= B9600 | CS7 | PARENB; // 9600 baus, 7 data, parite paire
 
-    // Caractères immédiatement disponibles.
+    // Caracteres immediatement disponibles.
     //  info.c_cc[VMIN] = 1;
     //  info.c_cc[VTIME] = 0;
 
@@ -210,7 +207,7 @@ vpServolens::close()
   with Servolens.
 */
 void
-vpServolens::reset()
+vpServolens::reset() const
 {
   if (!isinit) {
     vpERROR_TRACE ("Cannot dial with Servolens.");
@@ -248,7 +245,7 @@ vpServolens::reset()
   \sa open()
 */
 void
-vpServolens::init()
+vpServolens::init() const
 {
   if (!isinit) {
     vpERROR_TRACE ("Cannot dial with Servolens.");
@@ -283,7 +280,7 @@ vpServolens::init()
 
 */
 void 
-vpServolens::enableCmdComplete(vpServoType servo, bool active)
+vpServolens::enableCmdComplete(vpServoType servo, bool active) const
 {
   if (!isinit) {
     vpERROR_TRACE ("Cannot dial with Servolens.");
@@ -331,7 +328,7 @@ vpServolens::enableCmdComplete(vpServoType servo, bool active)
 
 */
 void 
-vpServolens::enablePrompt(bool active)
+vpServolens::enablePrompt(bool active) const
 {
   if (!isinit) {
     vpERROR_TRACE ("Cannot dial with Servolens.");
@@ -358,7 +355,7 @@ vpServolens::enablePrompt(bool active)
   with Servolens.
 */
 void 
-vpServolens::setController(vpControllerType controller)
+vpServolens::setController(vpControllerType controller) const
 {
   if (!isinit) {
     vpERROR_TRACE ("Cannot dial with Servolens.");
@@ -399,7 +396,7 @@ vpServolens::setController(vpControllerType controller)
 
 */
 void 
-vpServolens::setAutoIris(bool enable)
+vpServolens::setAutoIris(bool enable) const
 {
   if (!isinit) {
     vpERROR_TRACE ("Cannot dial with Servolens.");
@@ -427,7 +424,7 @@ vpServolens::setAutoIris(bool enable)
 
 */
 void
-vpServolens::setPosition(vpServoType servo, unsigned int position)
+vpServolens::setPosition(vpServoType servo, unsigned int position) const
 {
   if (!isinit) {
     vpERROR_TRACE ("Cannot dial with Servolens.");
@@ -442,15 +439,15 @@ vpServolens::setPosition(vpServoType servo, unsigned int position)
   this->wait();
   */
 
-#if FINSERVO
+#ifdef FINSERVO
   /* envoie des commandes pour qu'en fin de mouvement servolens renvoie */
   /* une commande de fin de mouvement (ex: ZF, FF, DF). */
   this->enableCommandComplete();
 #endif	/* FINSERVO */
 
   // 08/08/00 Fabien S. - Correction de la consigne demandee
-  // pour prendre en compte l'erreur entre la consigne demandée
-  // et la consigne mesurée.
+  // pour prendre en compte l'erreur entre la consigne demandee
+  // et la consigne mesuree.
   // A la consigne du zoom on retranche 1.
   // A la consigne du focus on ajoute 1.
   // A la consigne du iris on ajoute 1.
@@ -488,13 +485,13 @@ vpServolens::setPosition(vpServoType servo, unsigned int position)
       break;
     }
   /* envoie de la commande */
-#if PRINT
+#ifdef PRINT
   printf("\ncommande: %s", commande);
 #endif
 
   this->write(commande);
 
-#if FINSERVO
+#ifdef FINSERVO
   /* on attend la fin du mouvement des objectifs */
   this->wait(servo);  /* on attend les codes ZF, FF, DF */
 #endif
@@ -511,7 +508,7 @@ vpServolens::setPosition(vpServoType servo, unsigned int position)
 
 */
 bool
-vpServolens::getPosition(vpServoType servo, unsigned int &position)
+vpServolens::getPosition(vpServoType servo, unsigned int &position) const
 {
   if (!isinit) {
     vpERROR_TRACE ("Cannot dial with Servolens.");
@@ -634,7 +631,7 @@ vpServolens::getPosition(vpServoType servo, unsigned int &position)
   
   int main()
   {
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
     vpServolens servolens("/dev/ttyS0");
     
     vpImage<unsigned char> I(240, 320);
@@ -649,7 +646,7 @@ vpServolens::getPosition(vpServoType servo, unsigned int &position)
   
  */
 vpCameraParameters 
-vpServolens::getCameraParameters(vpImage<unsigned char> &I)
+vpServolens::getCameraParameters(vpImage<unsigned char> &I) const
 {
   if (!isinit) {
     vpERROR_TRACE ("Cannot dial with Servolens.");
@@ -697,7 +694,7 @@ vpServolens::getCameraParameters(vpImage<unsigned char> &I)
   with Servolens.
 */
 char 
-vpServolens::wait()
+vpServolens::wait() const
 {
   if (!isinit) {
     vpERROR_TRACE ("Cannot dial with Servolens.");
@@ -732,7 +729,7 @@ vpServolens::wait()
 
 */
 void
-vpServolens::wait(vpServoType servo)
+vpServolens::wait(vpServoType servo) const
 {
   if (!isinit) {
     vpERROR_TRACE ("Cannot dial with Servolens.");
@@ -798,7 +795,7 @@ vpServolens::wait(vpServoType servo)
   with Servolens.
 */
 bool 
-vpServolens::read(char *c, long timeout_s)
+vpServolens::read(char *c, long timeout_s) const
 {
   if (!isinit) {
     vpERROR_TRACE ("Cannot dial with Servolens.");
@@ -835,7 +832,7 @@ vpServolens::read(char *c, long timeout_s)
   with Servolens.
 */
 void 
-vpServolens::write(const char *s)
+vpServolens::write(const char *s) const
 {
   if (!isinit) {
     vpERROR_TRACE ("Cannot dial with Servolens.");
@@ -874,7 +871,7 @@ vpServolens::write(const char *s)
 
 */
 bool 
-vpServolens::clean(const char *in, char *out)
+vpServolens::clean(const char *in, char *out) const
 {
   short nb_car, i=0;
   bool error = false;
diff --git a/src/robot/real-robot/afma4/vpServolens.h b/src/robot/real-robot/afma4/vpServolens.h
index f7e98de4..fcf4e64a 100644
--- a/src/robot/real-robot/afma4/vpServolens.h
+++ b/src/robot/real-robot/afma4/vpServolens.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpServolens.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpServolens.h 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -45,7 +45,7 @@
 
 #include <visp/vpConfig.h>
 
-#if defined(UNIX)
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
 
 /*!
 
@@ -120,39 +120,34 @@ class VISP_EXPORT vpServolens
 
   void open(const char *port="/dev/ttyS0");
   void close();
-  void reset();
+  void reset() const;
 
-  void setController(vpControllerType controller);
-  void setAutoIris(bool enable);
-  void setPosition(vpServoType servo, unsigned int position);
-  bool getPosition(vpServoType servo, unsigned int &position);
-  vpCameraParameters getCameraParameters(vpImage<unsigned char> &I);
+  void setController(vpControllerType controller) const;
+  void setAutoIris(bool enable) const;
+  void setPosition(vpServoType servo, unsigned int position) const;
+  bool getPosition(vpServoType servo, unsigned int &position) const;
+  vpCameraParameters getCameraParameters(vpImage<unsigned char> &I) const;
 
-  void enablePrompt(bool active);
+  void enablePrompt(bool active) const;
 
  private:
 
-  void init();
+  void init() const;
 
-  void enableCmdComplete(vpServoType servo, bool active);
+  void enableCmdComplete(vpServoType servo, bool active) const;
 
-  char wait();
-  void wait(vpServoType servo);
+  char wait() const;
+  void wait(vpServoType servo) const;
 
-  bool read(char *c, long timeout_s);
-  void write(const char *s);
+  bool read(char *c, long timeout_s) const;
+  void write(const char *s) const;
 
-  bool clean(const char *in, char *out);
+  bool clean(const char *in, char *out) const;
 
   int remfd; // file pointer of the host's tty
   bool isinit;
 };
 
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
 #endif
 #endif
 
diff --git a/src/robot/real-robot/afma6/vpAfma6.cpp b/src/robot/real-robot/afma6/vpAfma6.cpp
index 67879f29..38008ff1 100644
--- a/src/robot/real-robot/afma6/vpAfma6.cpp
+++ b/src/robot/real-robot/afma6/vpAfma6.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpAfma6.cpp 4210 2013-04-16 08:57:46Z fspindle $
+ * $Id: vpAfma6.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -68,70 +68,70 @@ static const char *opt_Afma6[] = {"JOINT_MAX","JOINT_MIN","LONG_56","COUPL_56",
                                   NULL};
 
 const char * const vpAfma6::CONST_AFMA6_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Afma6/current/include/const_Afma6.cnf";
 #else
 = "/udd/fspindle/robot/Afma6/current/include/const_Afma6.cnf";
 #endif
 
 const char * const vpAfma6::CONST_EMC_CCMOP_WITHOUT_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Afma6/current/include/const_eMc_ccmop_without_distortion_Afma6.cnf";
 #else
 = "/udd/fspindle/robot/Afma6/current/include/const_eMc_ccmop_without_distortion_Afma6.cnf";
 #endif
 
 const char * const vpAfma6::CONST_EMC_CCMOP_WITH_DISTORTION_FILENAME
-#ifdef WIN32 
+#if defined(_WIN32) 
 = "Z:/robot/Afma6/current/include/const_eMc_ccmop_with_distortion_Afma6.cnf";
 #else
 = "/udd/fspindle/robot/Afma6/current/include/const_eMc_ccmop_with_distortion_Afma6.cnf";
 #endif
 
 const char * const vpAfma6::CONST_EMC_GRIPPER_WITHOUT_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Afma6/current/include/const_eMc_gripper_without_distortion_Afma6.cnf";
 #else
 = "/udd/fspindle/robot/Afma6/current/include/const_eMc_gripper_without_distortion_Afma6.cnf";
 #endif
 
 const char * const vpAfma6::CONST_EMC_GRIPPER_WITH_DISTORTION_FILENAME
-#ifdef WIN32 
+#if defined(_WIN32) 
 = "Z:/robot/Afma6/current/include/const_eMc_gripper_with_distortion_Afma6.cnf";
 #else
 = "/udd/fspindle/robot/Afma6/current/include/const_eMc_gripper_with_distortion_Afma6.cnf";
 #endif
 
 const char * const vpAfma6::CONST_EMC_VACUUM_WITHOUT_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Afma6/current/include/const_eMc_vacuum_without_distortion_Afma6.cnf";
 #else
 = "/udd/fspindle/robot/Afma6/current/include/const_eMc_vacuum_without_distortion_Afma6.cnf";
 #endif
 
 const char * const vpAfma6::CONST_EMC_VACUUM_WITH_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Afma6/current/include/const_eMc_vacuum_with_distortion_Afma6.cnf";
 #else
 = "/udd/fspindle/robot/Afma6/current/include/const_eMc_vacuum_with_distortion_Afma6.cnf";
 #endif
 
 const char * const vpAfma6::CONST_EMC_GENERIC_WITHOUT_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Afma6/current/include/const_eMc_generic_without_distortion_Afma6.cnf";
 #else
 = "/udd/fspindle/robot/Afma6/current/include/const_eMc_generic_without_distortion_Afma6.cnf";
 #endif
 
 const char * const vpAfma6::CONST_EMC_GENERIC_WITH_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Afma6/current/include/const_eMc_generic_with_distortion_Afma6.cnf";
 #else
 = "/udd/fspindle/robot/Afma6/current/include/const_eMc_generic_with_distortion_Afma6.cnf";
 #endif
 
 const char * const vpAfma6::CONST_CAMERA_AFMA6_FILENAME
-#ifdef WIN32 
+#if defined(_WIN32) 
 = "Z:/robot/Afma6/current/include/const_camera_Afma6.xml";
 #else
 = "/udd/fspindle/robot/Afma6/current/include/const_camera_Afma6.xml";
@@ -154,6 +154,9 @@ const unsigned int vpAfma6::njoint = 6;
 
 */
 vpAfma6::vpAfma6()
+  : _coupl_56(0), _long_56(0), _etc(), _erc(), _eMc(),
+    tool_current(vpAfma6::defaultTool),
+    projModel(vpCameraParameters::perspectiveProjWithoutDistortion)
 {
   // Set the default parameters in case of the config files on the NAS
   // at Inria are not available.
@@ -237,15 +240,15 @@ vpAfma6::init (const char * paramAfma6,
 
   \param tool : Camera in use.
 
-  \param projModel : Projection model of the camera.
+  \param proj_model : Projection model of the camera.
 
 */
 void
 vpAfma6::init (vpAfma6::vpAfma6ToolType tool,
-               vpCameraParameters::vpCameraParametersProjType projModel)
+               vpCameraParameters::vpCameraParametersProjType proj_model)
 {
   
-  this->projModel = projModel;
+  this->projModel = proj_model;
   
 #ifdef VISP_HAVE_ACCESS_TO_NAS
   // Read the robot parameters from files
@@ -254,19 +257,19 @@ vpAfma6::init (vpAfma6::vpAfma6ToolType tool,
   case vpAfma6::TOOL_CCMOP: {
     switch(projModel) {
     case vpCameraParameters::perspectiveProjWithoutDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_CCMOP_WITHOUT_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_CCMOP_WITHOUT_DISTORTION_FILENAME);
 #endif
       break;
     case vpCameraParameters::perspectiveProjWithDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_CCMOP_WITH_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_CCMOP_WITH_DISTORTION_FILENAME);
 #endif
@@ -277,19 +280,19 @@ vpAfma6::init (vpAfma6::vpAfma6ToolType tool,
   case vpAfma6::TOOL_GRIPPER: {
     switch(projModel) {
     case vpCameraParameters::perspectiveProjWithoutDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_GRIPPER_WITHOUT_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_GRIPPER_WITHOUT_DISTORTION_FILENAME);
 #endif
       break;
     case vpCameraParameters::perspectiveProjWithDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_GRIPPER_WITH_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_GRIPPER_WITH_DISTORTION_FILENAME);
 #endif
@@ -300,19 +303,19 @@ vpAfma6::init (vpAfma6::vpAfma6ToolType tool,
   case vpAfma6::TOOL_VACUUM: {
     switch(projModel) {
     case vpCameraParameters::perspectiveProjWithoutDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_VACUUM_WITHOUT_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_VACUUM_WITHOUT_DISTORTION_FILENAME);
 #endif
       break;
     case vpCameraParameters::perspectiveProjWithDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_VACUUM_WITH_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_VACUUM_WITH_DISTORTION_FILENAME);
 #endif
@@ -323,19 +326,19 @@ vpAfma6::init (vpAfma6::vpAfma6ToolType tool,
   case vpAfma6::TOOL_GENERIC_CAMERA: {
     switch(projModel) {
     case vpCameraParameters::perspectiveProjWithoutDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_GENERIC_WITHOUT_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_GENERIC_WITHOUT_DISTORTION_FILENAME);
 #endif
       break;
     case vpCameraParameters::perspectiveProjWithDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_GENERIC_WITH_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_GENERIC_WITH_DISTORTION_FILENAME);
 #endif
@@ -382,6 +385,7 @@ vpAfma6::init (vpAfma6::vpAfma6ToolType tool,
       _etc[2] = 0.2286; // tz
       break;
     }
+    break;
   }
   case vpAfma6::TOOL_GRIPPER: {
     switch(projModel) {
@@ -402,6 +406,7 @@ vpAfma6::init (vpAfma6::vpAfma6ToolType tool,
       _etc[2] = 0.1642; // tz
       break;
     }
+    break;
   }
   case vpAfma6::TOOL_VACUUM: {
     switch(projModel) {
@@ -422,6 +427,7 @@ vpAfma6::init (vpAfma6::vpAfma6ToolType tool,
       _etc[2] = 0.1658; // tz
       break;
     }
+    break;
   }
   case vpAfma6::TOOL_GENERIC_CAMERA: {
     switch(projModel) {
@@ -436,6 +442,7 @@ vpAfma6::init (vpAfma6::vpAfma6ToolType tool,
       _etc[2] = 0; // tz
       break;
     }
+    break;
   }
   }
   vpRotationMatrix eRc(_erc);
@@ -472,7 +479,7 @@ vpAfma6::init (vpAfma6::vpAfma6ToolType tool,
 
 */
 vpHomogeneousMatrix
-vpAfma6::getForwardKinematics(const vpColVector & q)
+vpAfma6::getForwardKinematics(const vpColVector & q) const
 {
   vpHomogeneousMatrix fMc;
   fMc = get_fMc(q);
@@ -555,7 +562,7 @@ int main()
 */
 int
 vpAfma6::getInverseKinematics(const vpHomogeneousMatrix & fMc,
-                              vpColVector & q, const bool &nearest, const bool &verbose)
+                              vpColVector & q, const bool &nearest, const bool &verbose) const
 {
   vpHomogeneousMatrix fMe;
   double q_[2][6],d[2],t;
@@ -735,7 +742,7 @@ vpAfma6::getInverseKinematics(const vpHomogeneousMatrix & fMc,
   \sa getForwardKinematics(const vpColVector & q)
 */
 vpHomogeneousMatrix
-vpAfma6::get_fMc (const vpColVector & q)
+vpAfma6::get_fMc (const vpColVector & q) const
 {
   vpHomogeneousMatrix fMc;
   get_fMc(q, fMc);
@@ -763,7 +770,7 @@ vpAfma6::get_fMc (const vpColVector & q)
 
 */
 void
-vpAfma6::get_fMc(const vpColVector & q, vpHomogeneousMatrix & fMc)
+vpAfma6::get_fMc(const vpColVector & q, vpHomogeneousMatrix & fMc) const
 {
 
   // Compute the direct geometric model: fMe = transformation between
@@ -797,7 +804,7 @@ vpAfma6::get_fMc(const vpColVector & q, vpHomogeneousMatrix & fMc)
 
 */
 void
-vpAfma6::get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe)
+vpAfma6::get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe) const
 {
   double            q0 = q[0]; // meter
   double            q1 = q[1]; // meter
@@ -851,7 +858,7 @@ vpAfma6::get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe)
 
 */
 void
-vpAfma6::get_cMe(vpHomogeneousMatrix &cMe)
+vpAfma6::get_cMe(vpHomogeneousMatrix &cMe) const
 {
   cMe = this->_eMc.inverse();
 }
@@ -866,7 +873,7 @@ vpAfma6::get_cMe(vpHomogeneousMatrix &cMe)
 
 */
 void
-vpAfma6::get_cVe(vpVelocityTwistMatrix &cVe)
+vpAfma6::get_cVe(vpVelocityTwistMatrix &cVe) const
 {
   vpHomogeneousMatrix cMe ;
   get_cMe(cMe) ;
@@ -889,40 +896,41 @@ vpAfma6::get_cVe(vpVelocityTwistMatrix &cVe)
 
 */
 void
-vpAfma6::get_eJe(const vpColVector &q, vpMatrix &eJe)
+vpAfma6::get_eJe(const vpColVector &q, vpMatrix &eJe) const
 {
 
   eJe.resize(6,6) ;
 
-  double s3,c3,s4,c4,s5,c5 ;
+  double s4,c4,s5,c5,s6,c6 ;
 
-  s3=sin(q[3]); c3=cos(q[3]);
-  s4=sin(q[4]); c4=cos(q[4]);
-  s5=sin(q[5]); c5=cos(q[5]);
+  s4=sin(q[3]); c4=cos(q[3]);
+  s5=sin(q[4]); c5=cos(q[4]);
+  s6=sin(q[5]-this->_coupl_56*q[4]); c6=cos(q[5]-this->_coupl_56*q[4]);
 
   eJe = 0;
-  eJe[0][0] = s3*s4*c5+c3*s5;
-  eJe[0][1] = -c3*s4*c5+s3*s5;
-  eJe[0][2] = c4*c5;
-  eJe[0][3] = - this->_long_56*s4*c5;
+  eJe[0][0] = s4*s5*c6+c4*s6;
+  eJe[0][1] = -c4*s5*c6+s4*s6;
+  eJe[0][2] = c5*c6;
+  eJe[0][3] = - this->_long_56*s5*c6;
 
-  eJe[1][0] = -s3*s4*s5+c3*c5;
-  eJe[1][1] = c3*s4*s5+s3*c5;
-  eJe[1][2] = -c4*s5;
-  eJe[1][3] = this->_long_56*s4*s5;
+  eJe[1][0] = -s4*s5*s6+c4*c6;
+  eJe[1][1] = c4*s5*s6+s4*c6;
+  eJe[1][2] = -c5*s6;
+  eJe[1][3] = this->_long_56*s5*s6;
 
-  eJe[2][0] = -s3*c4;
-  eJe[2][1] = c3*c4;
-  eJe[2][2] = s4;
-  eJe[2][3] = this->_long_56*c4;
+  eJe[2][0] = -s4*c5;
+  eJe[2][1] = c4*c5;
+  eJe[2][2] = s5;
+  eJe[2][3] = this->_long_56*c5;
 
-  eJe[3][3] = c4*c5;
-  eJe[3][4] = s5;
+  eJe[3][3] = c5*c6;
+  eJe[3][4] = s6;
 
-  eJe[4][3] = -c4*s5;
-  eJe[4][4] = c5;
+  eJe[4][3] = -c5*s6;
+  eJe[4][4] = c6;
 
-  eJe[5][3] = s4;
+  eJe[5][3] = s5;
+  eJe[5][4] = -this->_coupl_56;
   eJe[5][5] = 1;
 
   return;
@@ -939,12 +947,13 @@ vpAfma6::get_eJe(const vpColVector &q, vpMatrix &eJe)
   1  &   0  &   0  & -Ls4 &   0  &   0   \\
   0  &   1  &   0  &  Lc4 &   0  &   0   \\
   0  &   0  &   1  &   0  &   0  &   0   \\
-  0  &   0  &   0  &   0  &   c4 & -s4c5 \\
-  0  &   0  &   0  &   0  &   s4 &  c4c5 \\
-  0  &   0  &   0  &   1  &   0  &  s5   \\
+  0  &   0  &   0  &   0  &   c4+\gamma s4c5 & -s4c5 \\
+  0  &   0  &   0  &   0  &   s4-\gamma c4c5 &  c4c5 \\
+  0  &   0  &   0  &   1  &   -gamma s5  &  s5   \\
   \end{array}
   \right)
   \f]
+  where \f$\gamma\f$ is the coupling factor between join 5 and 6.
 
   \param q : Articular joint position of the robot. q[0], q[1], q[2]
   correspond to the first 3 translations expressed in meter, while
@@ -956,7 +965,7 @@ vpAfma6::get_eJe(const vpColVector &q, vpMatrix &eJe)
 */
 
 void
-vpAfma6::get_fJe(const vpColVector &q, vpMatrix &fJe)
+vpAfma6::get_fJe(const vpColVector &q, vpMatrix &fJe) const
 {
 
   fJe.resize(6,6) ;
@@ -964,8 +973,8 @@ vpAfma6::get_fJe(const vpColVector &q, vpMatrix &fJe)
   // block superieur gauche
   fJe[0][0] = fJe[1][1] = fJe[2][2] = 1 ;
 
-  double s4 = sin(q[4]) ;
-  double c4 = cos(q[4]) ;
+  double s4 = sin(q[3]) ;
+  double c4 = cos(q[3]) ;
 
 
   // block superieur droit
@@ -973,13 +982,18 @@ vpAfma6::get_fJe(const vpColVector &q, vpMatrix &fJe)
   fJe[1][3] =   this->_long_56*c4 ;
 
 
-  double s5 = sin(q[5]) ;
-  double c5 = cos(q[5]) ;
+  double s5 = sin(q[4]) ;
+  double c5 = cos(q[4]) ;
   // block inferieur droit
   fJe[3][4] = c4 ;     fJe[3][5] = -s4*c5 ;
   fJe[4][4] = s4 ;     fJe[4][5] = c4*c5 ;
   fJe[5][3] = 1 ;      fJe[5][5] = s5 ;
 
+  // coupling between joint 5 and 6
+  fJe[3][4] += this->_coupl_56*s4*c5;
+  fJe[4][4] += -this->_coupl_56*c4*c5;
+  fJe[5][4] += -this->_coupl_56*s5;
+
   return;
 }
 
@@ -993,7 +1007,7 @@ vpAfma6::get_fJe(const vpColVector &q, vpMatrix &fJe)
 
 */
 vpColVector
-vpAfma6::getJointMin()
+vpAfma6::getJointMin() const
 {
   vpColVector qmin(6);
   for (unsigned int i=0; i < 6; i ++)
@@ -1010,7 +1024,7 @@ vpAfma6::getJointMin()
 
 */
 vpColVector
-vpAfma6::getJointMax()
+vpAfma6::getJointMax() const
 {
   vpColVector qmax(6);
   for (unsigned int i=0; i < 6; i ++)
@@ -1025,7 +1039,7 @@ vpAfma6::getJointMax()
   \return Coupling factor between join 5 and 6.
 */
 double
-vpAfma6::getCoupl56()
+vpAfma6::getCoupl56() const
 {
   return _coupl_56;
 }
@@ -1037,7 +1051,7 @@ vpAfma6::getCoupl56()
   \return Distance between join 5 and 6.
 */
 double
-vpAfma6::getLong56()
+vpAfma6::getLong56() const
 {
   return _long_56;
 }
@@ -1233,7 +1247,7 @@ int main()
 void
 vpAfma6::getCameraParameters (vpCameraParameters &cam,
                               const unsigned int &image_width,
-                              const unsigned int &image_height)
+                              const unsigned int &image_height) const
 {
 #if defined(VISP_HAVE_XML2) && defined (VISP_HAVE_ACCESS_TO_NAS)
   vpXmlParserCamera parser;
@@ -1451,7 +1465,7 @@ int main()
 */
 void
 vpAfma6::getCameraParameters (vpCameraParameters &cam,
-                              const vpImage<unsigned char> &I)
+                              const vpImage<unsigned char> &I) const
 {
   getCameraParameters(cam,I.getWidth(),I.getHeight());
 }
@@ -1500,7 +1514,7 @@ int main()
 
 void
 vpAfma6::getCameraParameters (vpCameraParameters &cam,
-                              const vpImage<vpRGBa> &I)
+                              const vpImage<vpRGBa> &I) const
 {
   getCameraParameters(cam,I.getWidth(),I.getHeight());
 }
@@ -1515,7 +1529,7 @@ vpAfma6::getCameraParameters (vpCameraParameters &cam,
   \param os : Output stream.
   \param afma6 : Robot parameters.
 */
-std::ostream & operator << (std::ostream & os,
+VISP_EXPORT std::ostream & operator << (std::ostream & os,
                             const vpAfma6 & afma6)
 {
   vpRotationMatrix eRc;
@@ -1568,8 +1582,4 @@ std::ostream & operator << (std::ostream & os,
 
   return os;
 }
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+
diff --git a/src/robot/real-robot/afma6/vpAfma6.h b/src/robot/real-robot/afma6/vpAfma6.h
index 4351f36a..0b5f173e 100644
--- a/src/robot/real-robot/afma6/vpAfma6.h
+++ b/src/robot/real-robot/afma6/vpAfma6.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpAfma6.h 4191 2013-04-01 07:46:05Z fspindle $
+ * $Id: vpAfma6.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -118,6 +118,8 @@ class VISP_EXPORT vpAfma6
 
  public:
   vpAfma6();
+  /*! Destructor that does nothing. */
+  virtual ~vpAfma6() {};
 
   void init (void);
 #ifdef VISP_HAVE_ACCESS_TO_NAS
@@ -127,45 +129,45 @@ class VISP_EXPORT vpAfma6
 	     vpCameraParameters::vpCameraParametersProjType projModel =
 	     vpCameraParameters::perspectiveProjWithoutDistortion);
 
-  vpHomogeneousMatrix getForwardKinematics(const vpColVector & q);
+  vpHomogeneousMatrix getForwardKinematics(const vpColVector & q) const;
   int getInverseKinematics(const vpHomogeneousMatrix & fMc,
-         vpColVector & q, const bool &nearest=true, const bool &verbose=false);
-  vpHomogeneousMatrix get_fMc (const vpColVector & q);
-  void get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe);
-  void get_fMc(const vpColVector & q, vpHomogeneousMatrix & fMc);
+                           vpColVector & q, const bool &nearest=true,
+                           const bool &verbose=false) const;
+  vpHomogeneousMatrix get_fMc (const vpColVector & q) const;
+  void get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe) const;
+  void get_fMc(const vpColVector & q, vpHomogeneousMatrix & fMc) const;
 
-  void get_cMe(vpHomogeneousMatrix &cMe) ;
-  void get_cVe(vpVelocityTwistMatrix &cVe) ;
-  void get_eJe(const vpColVector &q, vpMatrix &eJe)  ;
-  void get_fJe(const vpColVector &q, vpMatrix &fJe)  ;
+  void get_cMe(vpHomogeneousMatrix &cMe) const;
+  void get_cVe(vpVelocityTwistMatrix &cVe) const;
+  void get_eJe(const vpColVector &q, vpMatrix &eJe) const;
+  void get_fJe(const vpColVector &q, vpMatrix &fJe) const;
 
 #ifdef VISP_HAVE_ACCESS_TO_NAS
   void parseConfigFile (const char * filename);
 #endif
 
   //! Get the current tool type
-  vpAfma6ToolType getToolType(){
+  vpAfma6ToolType getToolType() const {
     return tool_current;
   };
   //! Get the current camera model projection type
-  vpCameraParameters::vpCameraParametersProjType getCameraParametersProjType(){
+  vpCameraParameters::vpCameraParametersProjType getCameraParametersProjType() const{
     return projModel;
   };
 
   void getCameraParameters(vpCameraParameters &cam,
-			   const unsigned int &image_width,
-			   const unsigned int &image_height);
+                           const unsigned int &image_width,
+                           const unsigned int &image_height) const;
   void getCameraParameters(vpCameraParameters &cam,
-			   const vpImage<unsigned char> &I);
-  void getCameraParameters(vpCameraParameters &cam, const vpImage<vpRGBa> &I);
+                           const vpImage<unsigned char> &I) const;
+  void getCameraParameters(vpCameraParameters &cam, const vpImage<vpRGBa> &I) const;
 
-  friend VISP_EXPORT std::ostream & operator << (std::ostream & os,
-						 const vpAfma6 & afma6);
+  friend VISP_EXPORT std::ostream & operator << (std::ostream & os, const vpAfma6 & afma6);
 
-  vpColVector getJointMin();
-  vpColVector getJointMax();
-  double getCoupl56();
-  double getLong56();
+  vpColVector getJointMin() const;
+  vpColVector getJointMax() const;
+  double getCoupl56() const;
+  double getLong56() const;
 
  protected:
   //! Set the current tool type
diff --git a/src/robot/real-robot/afma6/vpRobotAfma6.cpp b/src/robot/real-robot/afma6/vpRobotAfma6.cpp
index 40479e35..ba60fa50 100644
--- a/src/robot/real-robot/afma6/vpRobotAfma6.cpp
+++ b/src/robot/real-robot/afma6/vpRobotAfma6.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotAfma6.cpp 4107 2013-02-06 10:04:49Z fspindle $
+ * $Id: vpRobotAfma6.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -649,7 +649,7 @@ vpRobotAfma6::getPowerState(void)
 
 */
 void
-vpRobotAfma6::get_cVe(vpVelocityTwistMatrix &cVe)
+vpRobotAfma6::get_cVe(vpVelocityTwistMatrix &cVe) const
 {
   vpHomogeneousMatrix cMe ;
   vpAfma6::get_cMe(cMe) ;
@@ -668,7 +668,7 @@ vpRobotAfma6::get_cVe(vpVelocityTwistMatrix &cVe)
 
 */
 void
-vpRobotAfma6::get_cMe(vpHomogeneousMatrix &cMe)
+vpRobotAfma6::get_cMe(vpHomogeneousMatrix &cMe) const
 {
   vpAfma6::get_cMe(cMe) ;
 }
diff --git a/src/robot/real-robot/afma6/vpRobotAfma6.h b/src/robot/real-robot/afma6/vpRobotAfma6.h
index 6713b36c..f7b48b0d 100644
--- a/src/robot/real-robot/afma6/vpRobotAfma6.h
+++ b/src/robot/real-robot/afma6/vpRobotAfma6.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotAfma6.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpRobotAfma6.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -294,10 +294,10 @@ public:  /* Methode publiques */
   vpColVector getVelocity (const vpRobot::vpControlFrameType frame);
   vpColVector getVelocity (const vpRobot::vpControlFrameType frame, double &timestamp);
 
-  void get_cMe(vpHomogeneousMatrix &_cMe) ;
-  void get_cVe(vpVelocityTwistMatrix &_cVe) ;
-  void get_eJe(vpMatrix &_eJe)  ;
-  void get_fJe(vpMatrix &_fJe)  ;
+  void get_cMe(vpHomogeneousMatrix &_cMe) const;
+  void get_cVe(vpVelocityTwistMatrix &_cVe) const;
+  void get_eJe(vpMatrix &_eJe);
+  void get_fJe(vpMatrix &_fJe);
 
   void init (void);
   void init (vpAfma6::vpAfma6ToolType tool,
diff --git a/src/robot/real-robot/biclops/vpBiclops.cpp b/src/robot/real-robot/biclops/vpBiclops.cpp
index b30fdbf9..92a2baec 100644
--- a/src/robot/real-robot/biclops/vpBiclops.cpp
+++ b/src/robot/real-robot/biclops/vpBiclops.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpBiclops.cpp 4321 2013-07-17 19:26:03Z fspindle $
+ * $Id: vpBiclops.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -77,7 +77,7 @@ const float vpBiclops::speedLimit = (float)(M_PI/3.0); /*!< Maximum speed (in ra
   \sa get_fMc(const vpColVector &, vpHomogeneousMatrix &)
 */
 void
-vpBiclops::computeMGD (const vpColVector & q, vpHomogeneousMatrix & fMc)
+vpBiclops::computeMGD (const vpColVector & q, vpHomogeneousMatrix & fMc) const
 {
   vpHomogeneousMatrix fMe = get_fMe(q);
   fMc = fMe * cMe_.inverse();
@@ -98,7 +98,7 @@ vpBiclops::computeMGD (const vpColVector & q, vpHomogeneousMatrix & fMc)
 
 */
 void
-vpBiclops::get_fMc (const vpColVector &q, vpHomogeneousMatrix &fMc)
+vpBiclops::get_fMc (const vpColVector &q, vpHomogeneousMatrix &fMc) const
 {
   vpHomogeneousMatrix fMe = get_fMe(q);
   fMc = fMe * cMe_.inverse();
@@ -123,7 +123,7 @@ vpBiclops::get_fMc (const vpColVector &q, vpHomogeneousMatrix &fMc)
   \sa get_fMc(const vpColVector &)
 */
 vpHomogeneousMatrix
-vpBiclops::computeMGD (const vpColVector & q)
+vpBiclops::computeMGD (const vpColVector & q) const
 {
   vpHomogeneousMatrix fMc;
 
@@ -143,7 +143,7 @@ vpBiclops::computeMGD (const vpColVector & q)
 
 */
 vpHomogeneousMatrix
-vpBiclops::get_fMc (const vpColVector & q)
+vpBiclops::get_fMc (const vpColVector & q) const
 {
   vpHomogeneousMatrix fMc;
 
@@ -163,7 +163,7 @@ vpBiclops::get_fMc (const vpColVector & q)
 
 */
 vpHomogeneousMatrix
-vpBiclops::get_fMe (const vpColVector & q)
+vpBiclops::get_fMe (const vpColVector & q) const
 {
   vpHomogeneousMatrix fMe;
 
@@ -243,7 +243,7 @@ vpBiclops::get_fMe (const vpColVector & q)
 */
 
 void
-vpBiclops::computeMGD (const vpColVector &q, vpPoseVector &fvc)
+vpBiclops::computeMGD (const vpColVector &q, vpPoseVector &fvc) const
 {
   vpHomogeneousMatrix fMc;
 
@@ -264,7 +264,7 @@ vpBiclops::computeMGD (const vpColVector &q, vpPoseVector &fvc)
 */
 
 void
-vpBiclops::get_fMc (const vpColVector &q, vpPoseVector &fvc)
+vpBiclops::get_fMc (const vpColVector &q, vpPoseVector &fvc) const
 {
   vpHomogeneousMatrix fMc;
 
@@ -285,6 +285,7 @@ vpBiclops::get_fMc (const vpColVector &q, vpPoseVector &fvc)
 
 */
 vpBiclops::vpBiclops (void)
+  : dh_model_(DH1), cMe_()
 {
   init();
 }
@@ -300,6 +301,7 @@ vpBiclops::vpBiclops (void)
 void
 vpBiclops::init ()
 {
+  dh_model_ = DH1;
   set_cMe();
   return ;
 }
@@ -309,10 +311,8 @@ vpBiclops::init ()
 /* --- DISPLAY ----------------------------------------------------------- */
 /* ----------------------------------------------------------------------- */
 
-std::ostream & operator << (std::ostream & os,
-			    const vpBiclops & /*constant*/)
+VISP_EXPORT std::ostream & operator << (std::ostream & os, const vpBiclops & /*constant*/)
 {
-
   os
     << "Geometric parameters: " << std::endl
     << "h: "
@@ -333,7 +333,7 @@ std::ostream & operator << (std::ostream & os,
 
 */
 void
-vpBiclops::get_cVe(vpVelocityTwistMatrix &cVe)
+vpBiclops::get_cVe(vpVelocityTwistMatrix &cVe) const
 {
   cVe.buildFrom(cMe_) ;
 }
@@ -386,10 +386,8 @@ vpBiclops::set_cMe()
 
 */
 void
-vpBiclops::get_eJe(const vpColVector &q, vpMatrix &eJe)
+vpBiclops::get_eJe(const vpColVector &q, vpMatrix &eJe) const
 {
-
-
   eJe.resize(6,2) ;
 
   if (q.getRows() != 2) {
@@ -428,9 +426,8 @@ vpBiclops::get_eJe(const vpColVector &q, vpMatrix &eJe)
 */
 
 void
-vpBiclops::get_fJe(const vpColVector &q, vpMatrix &fJe)
+vpBiclops::get_fJe(const vpColVector &q, vpMatrix &fJe) const
 {
-
   if (q.getRows() != 2) {
     vpERROR_TRACE("Bad dimension for biclops articular vector");
     throw(vpException(vpException::dimensionError, "Bad dimension for biclops articular vector"));
@@ -456,4 +453,3 @@ vpBiclops::get_fJe(const vpColVector &q, vpMatrix &fJe)
     fJe[5][0] = 1;
   }
 }
-
diff --git a/src/robot/real-robot/biclops/vpBiclops.h b/src/robot/real-robot/biclops/vpBiclops.h
index 2c6ee8d7..2461b4d0 100644
--- a/src/robot/real-robot/biclops/vpBiclops.h
+++ b/src/robot/real-robot/biclops/vpBiclops.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpBiclops.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpBiclops.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -140,12 +140,14 @@ protected:
 
 public:
   vpBiclops (void);
-  void init (void);
+  /*! Destructor that does nothing. */
+  virtual ~vpBiclops() {};
 
-  void computeMGD (const vpColVector &q, vpHomogeneousMatrix & fMc);
+  void init (void);
 
-  vpHomogeneousMatrix computeMGD (const vpColVector & q);
-  void computeMGD (const vpColVector &q,  vpPoseVector &fvc);
+  void computeMGD (const vpColVector &q, vpHomogeneousMatrix & fMc) const;
+  vpHomogeneousMatrix computeMGD (const vpColVector & q) const;
+  void computeMGD (const vpColVector &q,  vpPoseVector &fvc) const;
 
   /*!
     Return the tranformation \f${^c}{\bf M}_e\f$ between the camera frame and the end
@@ -156,20 +158,20 @@ public:
     return cMe_;
   }
 
-  void get_cVe(vpVelocityTwistMatrix &_cVe) ;
-  void get_fMc (const vpColVector &q, vpHomogeneousMatrix &fMc);
-  void get_fMc (const vpColVector &q,  vpPoseVector &fvc);
-  vpHomogeneousMatrix get_fMc (const vpColVector &q);
-  vpHomogeneousMatrix get_fMe (const vpColVector &q);
+  void get_cVe(vpVelocityTwistMatrix &_cVe) const;
+  void get_fMc (const vpColVector &q, vpHomogeneousMatrix &fMc) const;
+  void get_fMc (const vpColVector &q,  vpPoseVector &fvc) const;
+  vpHomogeneousMatrix get_fMc (const vpColVector &q) const;
+  vpHomogeneousMatrix get_fMe (const vpColVector &q) const;
 
-  void get_eJe(const vpColVector &q, vpMatrix &eJe);
-  void get_fJe(const vpColVector &q, vpMatrix &fJe);
+  void get_eJe(const vpColVector &q, vpMatrix &eJe) const;
+  void get_fJe(const vpColVector &q, vpMatrix &fJe) const;
 
   /*!
     Return the Denavit Hartenberg representation used to model the head.
     \sa vpBiclops::DenavitHartenbergModel
     */
-  inline vpBiclops::DenavitHartenbergModel getDenavitHartenbergModel()
+  inline vpBiclops::DenavitHartenbergModel getDenavitHartenbergModel() const
   {
     return dh_model_;
   }
@@ -192,8 +194,7 @@ public:
     dh_model_ = m;
   }
 
-  friend std::ostream & operator << (std::ostream & os,
-				     const vpBiclops & constant);
+  friend VISP_EXPORT std::ostream & operator << (std::ostream & os, const vpBiclops & constant);
 };
 
 
diff --git a/src/robot/real-robot/biclops/vpRobotBiclops.cpp b/src/robot/real-robot/biclops/vpRobotBiclops.cpp
index 5c58fe05..f1ef8fb5 100644
--- a/src/robot/real-robot/biclops/vpRobotBiclops.cpp
+++ b/src/robot/real-robot/biclops/vpRobotBiclops.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotBiclops.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRobotBiclops.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -127,6 +127,8 @@ vpRobotBiclops::vpRobotBiclops ()
   pthread_mutex_init (&vpShm_mutex, NULL);
   pthread_mutex_init (&vpEndThread_mutex, NULL);
   pthread_mutex_init (&vpMeasure_mutex, NULL);
+
+  positioningVelocity = defaultPositioningVelocity ;
 }
 
 /*!
@@ -175,8 +177,9 @@ vpRobotBiclops::vpRobotBiclops (const char * filename)
   // Initialize the mutex dedicated to she shm protection
   pthread_mutex_init (&vpShm_mutex, NULL);
   pthread_mutex_init (&vpEndThread_mutex, NULL);
-  pthread_mutex_init (&vpMeasure_mutex
-, NULL);
+  pthread_mutex_init (&vpMeasure_mutex, NULL);
+
+  positioningVelocity = defaultPositioningVelocity ;
 
   init();
 
@@ -275,8 +278,6 @@ vpRobotBiclops::init ()
 
   vpRobotBiclops::robotAlreadyCreated = true;
 
-  positioningVelocity = defaultPositioningVelocity ;
-
   // Initialize previous articular position to manage getDisplacement()
   q_previous.resize(vpBiclops::ndof);
   q_previous = 0;
@@ -670,7 +671,7 @@ vpRobotBiclops::stopMotion(void)
 
 */
 void
-vpRobotBiclops::get_cVe(vpVelocityTwistMatrix &cVe)
+vpRobotBiclops::get_cVe(vpVelocityTwistMatrix &cVe) const
 {
   vpHomogeneousMatrix cMe ;
   cMe = vpBiclops::get_cMe() ;
@@ -688,7 +689,7 @@ vpRobotBiclops::get_cVe(vpVelocityTwistMatrix &cVe)
 
 */
 void
-vpRobotBiclops::get_cMe(vpHomogeneousMatrix &cMe)
+vpRobotBiclops::get_cMe(vpHomogeneousMatrix &cMe) const
 {
   cMe = vpBiclops::get_cMe() ;
 }
@@ -1279,16 +1280,19 @@ vpRobotBiclops::readPositionFile(const char *filename, vpColVector &q)
     // skip lines begining with # for comments
     if (fgets (line, 100, pt_f) != NULL) {
       if ( strncmp (line, "#", 1) != 0) {
-	// this line is not a comment
-	if ( fscanf (pt_f, "%s", line) != EOF)   {
-	  if ( strcmp (line, head) == 0)
-	    end = true; 	// robot position was found
-	}
-	else
-	  return (false); // end of file without position
+        // this line is not a comment
+        if ( fscanf (pt_f, "%s", line) != EOF)   {
+          if ( strcmp (line, head) == 0)
+            end = true; 	// robot position was found
+        }
+        else {
+          fclose(pt_f);
+          return (false); // end of file without position
+        }
       }
     }
     else {
+      fclose(pt_f);
       return (false);// end of file
     }
 
@@ -1298,6 +1302,7 @@ vpRobotBiclops::readPositionFile(const char *filename, vpColVector &q)
   double q1,q2;
   // Read positions
   if (fscanf(pt_f, "%lf %lf", &q1, &q2) == EOF) {
+    fclose(pt_f);
     std::cout << "Cannot read joint positions." << std::endl;
     return false;
   }
diff --git a/src/robot/real-robot/biclops/vpRobotBiclops.h b/src/robot/real-robot/biclops/vpRobotBiclops.h
index c402d226..cc749a49 100644
--- a/src/robot/real-robot/biclops/vpRobotBiclops.h
+++ b/src/robot/real-robot/biclops/vpRobotBiclops.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotBiclops.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpRobotBiclops.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -136,8 +136,8 @@ public:
 
   void init (void);
 
-  void get_cMe(vpHomogeneousMatrix &_cMe) ;
-  void get_cVe(vpVelocityTwistMatrix &_cVe) ;
+  void get_cMe(vpHomogeneousMatrix &_cMe) const;
+  void get_cVe(vpVelocityTwistMatrix &_cVe) const;
   void get_eJe(vpMatrix &_eJe)  ;
   void get_fJe(vpMatrix &_fJe)  ;
 
diff --git a/src/robot/real-robot/biclops/vpRobotBiclopsController.cpp b/src/robot/real-robot/biclops/vpRobotBiclopsController.cpp
index 57ac29ca..1be2483f 100644
--- a/src/robot/real-robot/biclops/vpRobotBiclopsController.cpp
+++ b/src/robot/real-robot/biclops/vpRobotBiclopsController.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotBiclopsController.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRobotBiclopsController.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -41,7 +41,7 @@
 
 #include <signal.h>
 #include <string.h>
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
 #  include <unistd.h>
 #endif
 #include <visp/vpConfig.h>
@@ -89,6 +89,7 @@ vpRobotBiclopsController::vpRobotBiclopsController()
     shm.q_dot[i] = 0.;
     shm.actual_q[i] = 0.;
     shm.jointLimit[i] = false;
+    shm.status[i] = STOP;
   }
 
 }
diff --git a/src/robot/real-robot/biclops/vpRobotBiclopsController.h b/src/robot/real-robot/biclops/vpRobotBiclopsController.h
index f8236e6b..b615ccf8 100644
--- a/src/robot/real-robot/biclops/vpRobotBiclopsController.h
+++ b/src/robot/real-robot/biclops/vpRobotBiclopsController.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotBiclopsController.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRobotBiclopsController.h 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -61,7 +61,7 @@
 #include "Biclops.h"	// Contrib for Biclops robot
 #include "PMDUtils.h"  	// Contrib for Biclops robot
 
-#ifdef WIN32
+#if defined(_WIN32)
 class VISP_EXPORT Biclops; //needed for dll creation
 #endif
 
diff --git a/src/robot/real-robot/cycab/vpRobotCycab.cpp b/src/robot/real-robot/cycab/vpRobotCycab.cpp
deleted file mode 100644
index 4d2b0ab3..00000000
--- a/src/robot/real-robot/cycab/vpRobotCycab.cpp
+++ /dev/null
@@ -1,295 +0,0 @@
-/****************************************************************************
- *
- * $Id: vpRobotCycab.cpp 4056 2013-01-05 13:04:42Z fspindle $
- *
- * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
- * 
- * This software is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * ("GPL") version 2 as published by the Free Software Foundation.
- * See the file LICENSE.txt at the root directory of this source
- * distribution for additional information about the GNU GPL.
- *
- * For using ViSP with software that can not be combined with the GNU
- * GPL, please contact INRIA about acquiring a ViSP Professional 
- * Edition License.
- *
- * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
- * 
- * This software was developed at:
- * INRIA Rennes - Bretagne Atlantique
- * Campus Universitaire de Beaulieu
- * 35042 Rennes Cedex
- * France
- * http://www.irisa.fr/lagadic
- *
- * If you have questions regarding the use of this file, please contact
- * INRIA at visp@inria.fr
- * 
- * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- *
- * Description:
- * Interface for the car-like Cycab mobile robot.
- *
- * Authors:
- * Fabien Spindler
- *
- *****************************************************************************/
-
-#include <visp/vpConfig.h>
-#include <visp/vpRobotCycab.h>
-
-#ifdef VISP_HAVE_CYCAB
-
-/*!
-  Initialize the client to be able to communicate with the Cycab server.
-  
-  By default, the steering mode is set such as only the front steering
-  angle is controlled.
-
-  To change this behavior, use setDualSteering(true) function.
-*/
-vpRobotCycab::vpRobotCycab()
-{
-#ifdef VISP_HAVE_CYCABTK_OLD
-  // Old low level controller based on Syndex (obsolete)
-  end = false;
-  cycab = NULL;
-  sprintf(servername, "cycab-hf1");
-  cycab = new EtherCycab(servername, &LTR);
-  if (!cycab->doInitialization(&end, 50, 0, false)) {
-    printf("ERROR: Can't connect to %s\n", servername);
-    exit(-1);
-  }
-  cycab->releaseSecurity();
-  printf("Control limits : phi in [%f:%f], V in [%f:%f]\n",
-         cycab->minAllowedSteering(),
-	 cycab->maxAllowedSteering(),
-         cycab->minAllowedSpeed(),
-	 cycab->maxAllowedSpeed());
-#elif defined VISP_HAVE_CYCABTK
-  // New low level controller based on Syndex (to use)
-  std::string name = "cycab";
-  CycabCarCommand cycab_command;
-  setDualSteering(false);
-  store.connect();
-  cycab_commandId = store.lookupVariable( name + cycabCarCommandSuffix );
-  cycab_stateId = store.lookupVariable( name + cycabStateSuffix );
-  store.writeVariable( cycab_commandId, cycab_command );
-#endif
-}
-
-/*!
-  Close the connection with the Cycab server.
-*/
-vpRobotCycab::~vpRobotCycab()
-{
-#ifdef VISP_HAVE_CYCABTK_OLD
-  if (cycab != NULL) delete cycab;
-  cycab = NULL;
-#endif
-}
-
-/*!
-  Set the steering mode.
-  
-  \param dual : If false, only the front steering angle is
-  conntrolled. If true, front and read steering angles are controlled.
-
-*/
-void vpRobotCycab::setDualSteering(bool dual)
-{
-  dualSteering = dual;
-}
-
-/*!
-  Send the command to the cycab server.
-  
-  \param v : Velocity in m/s.
-  \param phi : Front steering angle in rad.
- */
-void vpRobotCycab::setCommand(double v, double phi)
-{
-#ifdef VISP_HAVE_CYCABTK_OLD
-  // Old low level controller based on Syndex (obsolete)
-  cycab->sendCommands(v, phi);
-#elif defined VISP_HAVE_CYCABTK
-  // New low level controller based on Syndex (to use)
-  CycabCarCommand cycab_command;
-  store.readVariable( cycab_commandId, cycab_command );
-  cycab_command.v = v;
-  cycab_command.phi = phi;
-  cycab_command.manualDriving = false;
-  cycab_command.dualSteering = dualSteering;
-  store.writeVariable( cycab_commandId, cycab_command );
-#endif
-}
-
-/*!
-  Get measures from odometry.
-  
-  \param vmean : Measured mean velocity in m/s. This value is computed by considering 
-  the mean velocity between rear-left and rear-right wheel velocities.
-
-  \param phi : Measured front steering angle in rad.
-
-*/
-void vpRobotCycab::getOdometry(double &vmean, double &phi)
-{
-  double timestamp;
-  getOdometry(vmean, phi, timestamp);
-}
-
-/*!
-  Get measures from odometry.
- 
-  \param v : Measured mean velocity in m/s. This value is computed by considering 
-  the mean velocity between rear-left and rear-right wheel velocities.
-
-  \param phi : Measured front steering angle in rad.
-
-  \param timestamp : Time stamp in milli second associates to the measured
-  values of \e vmean and \e phi.
-*/
-void vpRobotCycab::getOdometry(double &vmean, double &phi, double &timestamp)
-{
-  vmean = 0.;
-  phi=0.;
-  timestamp=0.;
-  
-#ifdef VISP_HAVE_CYCABTK_OLD
-  // Old low level controller based on Syndex (obsolete)
-  Record rec;
-  double dsl,dsr,lphi,ltime;
-  cycab->waitUpdate();
-  cycab->getState(&rec, &dsl, &dsr, &lphi, &ltime);
-  //   printf("Ktate %f : phi %f vl %f vr %f\n\t",ltime,
-  //          lphi,rec.vmsec[REAR][LEFT],rec.vmsec[REAR][RIGHT]);
-  // calculate speed
-  vmean = (rec.vmsec[REAR][LEFT] + rec.vmsec[REAR][RIGHT])*0.5;
-  phi = lphi;
-  timestamp = ltime;
-#elif defined VISP_HAVE_CYCABTK
-  // New low level controller based on Syndex (to use)
-  CycabState cycab_state;
-  store.readVariable(cycab_stateId, cycab_state);
-  vmean = (cycab_state.v_rear_left + cycab_state.v_rear_right)*0.5; 
-  //printf("vl %f vr %f\n", cycab_state.v_rear_left, cycab_state.v_rear_right);
-  phi = cycab_state.phi_front;
-  timeval tp = store.getTimestamp(cycab_stateId);
-  timestamp = 1000.0*tp.tv_sec + tp.tv_usec/1000.0;
-#endif
-}
-/*!
-  Get measures from odometry.
-  
-  \param vfl : Measured front-left wheel velocity in m/s. 
-  \param vfr : Measured front-right wheel velocity in m/s. 
-  \param vrl : Measured rear-left wheel velocity in m/s. 
-  \param vrr : Measured rear-right wheel velocity in m/s. 
-
-  \param phi : Measured front steering angle in rad.
-
-*/
-void vpRobotCycab::getOdometry(double &vfl, double &vfr, 
-			       double &vrl, double &vrr,
-			       double &phi)
-{
-  double timestamp;
-  getOdometry(vfl, vfr, vrl, vrr, phi, timestamp);
-}
-
-/*!
-  Get measures from odometry.
-
-  \param vfl : Measured front-left wheel velocity in m/s. 
-  \param vfr : Measured front-right wheel velocity in m/s. 
-  \param vrl : Measured rear-left wheel velocity in m/s. 
-  \param vrr : Measured rear-right wheel velocity in m/s. 
-
-  \param phi : Measured front steering angle in rad.
-
-  \param timestamp : Time stamp in milli second associates to the measured
-  values of \e vmean and \e phi.
-*/
-void vpRobotCycab::getOdometry(double &vfl, double &vfr, 
-			       double &vrl, double &vrr,
-			       double &phi, double &timestamp)
-{
-  vfr = vfr = vrl = vrr = 0.;
-  phi=0.;
-  timestamp=0.;
-  
-#ifdef VISP_HAVE_CYCABTK_OLD
-  // Old low level controller based on Syndex (obsolete)
-  Record rec;
-  double dsl,dsr,lphi,ltime;
-  cycab->waitUpdate();
-  cycab->getState(&rec, &dsl, &dsr, &lphi, &ltime);
-  //   printf("Ktate %f : phi %f vl %f vr %f\n\t",ltime,
-  //          lphi,rec.vmsec[REAR][LEFT],rec.vmsec[REAR][RIGHT]);
-  // calculate speed
-  vfl = rec.vmsec[FRONT][LEFT];
-  vfr = rec.vmsec[FRONT][RIGHT];
-  vrl = rec.vmsec[REAR][LEFT];
-  vrr = rec.vmsec[REAR][RIGHT];
-  phi = lphi;
-  timestamp = ltime;
-#elif defined VISP_HAVE_CYCABTK
-  // New low level controller based on Syndex (to use)
-  CycabState cycab_state;
-  store.readVariable(cycab_stateId, cycab_state);
-  vfl = cycab_state.v_front_left;
-  vfr = cycab_state.v_front_right;
-  vrl = cycab_state.v_rear_left;
-  vrr = cycab_state.v_rear_right;
-
-  phi = cycab_state.phi_front;
-  timeval tp = store.getTimestamp(cycab_stateId);
-  timestamp = 1000.0*tp.tv_sec + tp.tv_usec/1000.0;
-#endif
-}
-
-/*!
-  Get the joystick positions.
-  
-  \param x : Joystick left/right position. 
-  \param y : Joystick front/rear position. 
- */
-void vpRobotCycab::getJoystickPosition(double &x, double &y)
-{
-  double timestamp;
-  getJoystickPosition(x, y, timestamp);
-}
-
-/*!
-  Get the joystick positions.
-  
-  \param x : Joystick left/right position. 
-  \param y : Joystick front/rear position. 
-  \param timestamp : Time stamp in milli second associates to the measured
-  values of \e x and \e y.
- */
-void vpRobotCycab::getJoystickPosition(double &x, double &y, double &timestamp)
-{
-#ifdef VISP_HAVE_CYCABTK_OLD
-  // Old low level controller based on Syndex (obsolete)
-  x = 0.;
-  y = 0.;
-  timestamp = 0.;
-#elif defined VISP_HAVE_CYCABTK
-  // New low level controller based on Syndex (to use)
-  CycabState cycab_state;
-  store.readVariable(cycab_stateId, cycab_state);
-  x = cycab_state.joy_x; 
-  y = cycab_state.joy_y; 
-  timeval tp = store.getTimestamp(cycab_stateId);
-  timestamp = 1000.0*tp.tv_sec + tp.tv_usec/1000.0;
-#endif
-}
-
-
-#endif
diff --git a/src/robot/real-robot/cycab/vpRobotCycab.h b/src/robot/real-robot/cycab/vpRobotCycab.h
deleted file mode 100644
index d83b32d4..00000000
--- a/src/robot/real-robot/cycab/vpRobotCycab.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/****************************************************************************
- *
- * $Id: vpRobotCycab.h 4056 2013-01-05 13:04:42Z fspindle $
- *
- * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
- * 
- * This software is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * ("GPL") version 2 as published by the Free Software Foundation.
- * See the file LICENSE.txt at the root directory of this source
- * distribution for additional information about the GNU GPL.
- *
- * For using ViSP with software that can not be combined with the GNU
- * GPL, please contact INRIA about acquiring a ViSP Professional 
- * Edition License.
- *
- * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
- * 
- * This software was developed at:
- * INRIA Rennes - Bretagne Atlantique
- * Campus Universitaire de Beaulieu
- * 35042 Rennes Cedex
- * France
- * http://www.irisa.fr/lagadic
- *
- * If you have questions regarding the use of this file, please contact
- * INRIA at visp@inria.fr
- * 
- * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- *
- * Description:
- * Interface for the car-like Cycab mobile robot.
- *
- * Authors:
- * Fabien Spindler
- *
- *****************************************************************************/
-#ifndef vpRobotCycab_h
-#define vpRobotCycab_h
-
-/*!
-
-  \file vpRobotCycab.h
-
-  Interface for the car-like Cycab mobile robot.
-
-*/
-
-/*!
-
-  \class vpRobotCycab
-
-  \ingroup Cycab RobotDriver
-
-  \brief Interface for the car-like Cycab mobile robot.
-
-*/
-
-#include <visp/vpConfig.h>
-
-#ifdef VISP_HAVE_CYCAB
-
-#ifdef VISP_HAVE_CYCABTK_OLD
-// Old low level controller based on Syndex (obsolete)
-#  include <EtherCycab/EtherCycab.hpp>
-#elif defined VISP_HAVE_CYCABTK
-// New low level controller based on Syndex (to use)
-#  include <hugr.hpp>
-#  include <CycabStructs.hpp>
-
-using namespace hugr;
-
-#endif //VISP_HAVE_CYCABTK_OLD
-
-class VISP_EXPORT vpRobotCycab
-{
- public:
-  vpRobotCycab();
-  virtual ~vpRobotCycab();
-  
-  void setDualSteering(bool dual);
-  void setCommand(double v, double phi);
-  void getOdometry(double &vmean, double &phi);
-  void getOdometry(double &vmean, double &phi, double &timestamp);
-  void getOdometry(double &vfl, double &vfr, double &vrl, double &vrr,
-		   double &phi);
-  void getOdometry(double &vfl, double &vfr, double &vrl, double &vrr,
-		   double &phi, double &timestamp);
-  void getJoystickPosition(double &x, double &y);
-  void getJoystickPosition(double &x, double &y, double &timestamp);
-
- private:
-  bool dualSteering;
-#ifdef VISP_HAVE_CYCABTK_OLD
-  // Old low level controller based on Syndex (obsolete)
-  bool end;
-  LockedTimeReq LTR;
-  char servername[1024];
-  EtherCycab *cycab;
-#elif defined VISP_HAVE_CYCABTK
-  // New low level controller based on Syndex (to use)
-  Store store;
-  VariableId cycab_stateId, cycab_commandId;
-#endif
-};
-
-#endif
-#endif
diff --git a/src/robot/real-robot/pioneer/vpPioneer.h b/src/robot/real-robot/pioneer/vpPioneer.h
index da99e508..9dc27277 100644
--- a/src/robot/real-robot/pioneer/vpPioneer.h
+++ b/src/robot/real-robot/pioneer/vpPioneer.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPioneer.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPioneer.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/robot/real-robot/pioneer/vpPioneerPan.h b/src/robot/real-robot/pioneer/vpPioneerPan.h
index 969c9afb..5d1f6d98 100644
--- a/src/robot/real-robot/pioneer/vpPioneerPan.h
+++ b/src/robot/real-robot/pioneer/vpPioneerPan.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPioneerPan.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPioneerPan.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -102,7 +102,7 @@ public:
   /*!
     Create a pioneer mobile robot equiped with a pan head.
     */
-  vpPioneerPan() : vpUnicycle()
+    vpPioneerPan() : mMp_(), pMe_()
   {
     double q = 0; // Initial position of the pan axis
     set_mMp();
diff --git a/src/robot/real-robot/pioneer/vpRobotPioneer.cpp b/src/robot/real-robot/pioneer/vpRobotPioneer.cpp
index 4d3888e0..bd72577e 100644
--- a/src/robot/real-robot/pioneer/vpRobotPioneer.cpp
+++ b/src/robot/real-robot/pioneer/vpRobotPioneer.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotPioneer.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRobotPioneer.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/robot/real-robot/pioneer/vpRobotPioneer.h b/src/robot/real-robot/pioneer/vpRobotPioneer.h
index 77190e20..a18e1982 100644
--- a/src/robot/real-robot/pioneer/vpRobotPioneer.h
+++ b/src/robot/real-robot/pioneer/vpRobotPioneer.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotPioneer.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpRobotPioneer.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/robot/real-robot/pioneer/vpUnicycle.h b/src/robot/real-robot/pioneer/vpUnicycle.h
index fb3012c5..eb4328da 100644
--- a/src/robot/real-robot/pioneer/vpUnicycle.h
+++ b/src/robot/real-robot/pioneer/vpUnicycle.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpUnicycle.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpUnicycle.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -63,7 +63,7 @@ public:
   /*!
     Default constructor that does nothing.
     */
-  vpUnicycle()
+  vpUnicycle() : cMe_(), eJe_()
   {
   };
   /*!
diff --git a/src/robot/real-robot/ptu46/vpPtu46.cpp b/src/robot/real-robot/ptu46/vpPtu46.cpp
index 3b2fb96b..2fea9f60 100644
--- a/src/robot/real-robot/ptu46/vpPtu46.cpp
+++ b/src/robot/real-robot/ptu46/vpPtu46.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPtu46.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPtu46.cpp 4620 2014-01-27 21:28:32Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -55,10 +55,6 @@
 #include <math.h>
 #include <visp/vpMath.h>
 
-
-
-
-
 /* ------------------------------------------------------------------------ */
 /* --- COMPUTE ------------------------------------------------------------ */
 /* ------------------------------------------------------------------------ */
@@ -80,7 +76,7 @@ const float vpPtu46::h    = 0.068f; /*<! Vertical offset from last joint to
 
 */
 void
-vpPtu46::computeMGD (const vpColVector & q, vpHomogeneousMatrix & fMc)
+vpPtu46::computeMGD (const vpColVector & q, vpHomogeneousMatrix & fMc) const
 {
   if (q.getRows() != 2) {
     vpERROR_TRACE("Bad dimension for ptu-46 articular vector");
@@ -131,7 +127,7 @@ vpPtu46::computeMGD (const vpColVector & q, vpHomogeneousMatrix & fMc)
 
 */
 vpHomogeneousMatrix
-vpPtu46::computeMGD (const vpColVector & q)
+vpPtu46::computeMGD (const vpColVector & q) const
 {
   vpHomogeneousMatrix fMc;
 
@@ -150,7 +146,7 @@ vpPtu46::computeMGD (const vpColVector & q)
 
 */
 void
-vpPtu46::computeMGD (const vpColVector & q, vpPoseVector & r)
+vpPtu46::computeMGD (const vpColVector & q, vpPoseVector & r) const
 {
   vpHomogeneousMatrix fMc;
 
@@ -195,10 +191,8 @@ vpPtu46::init ()
 /* --- DISPLAY ----------------------------------------------------------- */
 /* ----------------------------------------------------------------------- */
 
-std::ostream & operator << (std::ostream & os,
-			    const vpPtu46 & /* constant */)
+VISP_EXPORT std::ostream & operator << (std::ostream & os, const vpPtu46 & /* constant */)
 {
-
   os
     << "Geometric parameters: " << std::endl
     << "L: "
@@ -221,7 +215,7 @@ std::ostream & operator << (std::ostream & os,
 
 */
 void
-vpPtu46::get_cVe(vpVelocityTwistMatrix &cVe)
+vpPtu46::get_cVe(vpVelocityTwistMatrix &cVe) const
 {
   vpHomogeneousMatrix cMe ;
   get_cMe(cMe) ;
@@ -239,7 +233,7 @@ vpPtu46::get_cVe(vpVelocityTwistMatrix &cVe)
 
 */
 void
-vpPtu46::get_cMe(vpHomogeneousMatrix &cMe)
+vpPtu46::get_cMe(vpHomogeneousMatrix &cMe) const
 {
   vpHomogeneousMatrix eMc ;
 
@@ -279,7 +273,7 @@ vpPtu46::get_cMe(vpHomogeneousMatrix &cMe)
 
 */
 void
-vpPtu46::get_eJe(const vpColVector &q, vpMatrix &eJe)
+vpPtu46::get_eJe(const vpColVector &q, vpMatrix &eJe) const
 {
 
 
@@ -298,7 +292,6 @@ vpPtu46::get_eJe(const vpColVector &q, vpMatrix &eJe)
   eJe[3][0] = c2;
   eJe[4][1] = 1;
   eJe[5][0] = s2;
-
 }
 
 /*!
@@ -311,7 +304,7 @@ vpPtu46::get_eJe(const vpColVector &q, vpMatrix &eJe)
 
 */
 void
-vpPtu46::get_fJe(const vpColVector &q, vpMatrix &fJe)
+vpPtu46::get_fJe(const vpColVector &q, vpMatrix &fJe) const
 {
 
   if (q.getRows() != 2) {
@@ -330,12 +323,3 @@ vpPtu46::get_fJe(const vpColVector &q, vpMatrix &fJe)
   fJe[4][1] = -c1;
   fJe[5][0] = 1;
 }
-
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
-
diff --git a/src/robot/real-robot/ptu46/vpPtu46.h b/src/robot/real-robot/ptu46/vpPtu46.h
index 076a506b..554fe89f 100644
--- a/src/robot/real-robot/ptu46/vpPtu46.h
+++ b/src/robot/real-robot/ptu46/vpPtu46.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPtu46.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPtu46.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -93,20 +93,21 @@ public: /* Constants */
 public: /* Methodes publiques */
 
   vpPtu46 (void);
-  void init (void);
+  /*! Destructor that does nothing. */
+  virtual ~vpPtu46() {};
 
-  void  computeMGD (const vpColVector &q, vpHomogeneousMatrix & fMc);
+  void init (void);
 
-  vpHomogeneousMatrix computeMGD (const vpColVector & q);
-  void  computeMGD (const vpColVector & q,  vpPoseVector & r);
+  void  computeMGD (const vpColVector &q, vpHomogeneousMatrix & fMc) const;
+  vpHomogeneousMatrix computeMGD (const vpColVector & q) const;
+  void  computeMGD (const vpColVector & q,  vpPoseVector & r) const;
 
-  void get_cMe(vpHomogeneousMatrix &_cMe) ;
-  void get_cVe(vpVelocityTwistMatrix &_cVe) ;
-  void get_eJe(const vpColVector &q, vpMatrix &eJe);
-  void get_fJe(const vpColVector &q, vpMatrix &fJe);
+  void get_cMe(vpHomogeneousMatrix &_cMe) const;
+  void get_cVe(vpVelocityTwistMatrix &_cVe) const;
+  void get_eJe(const vpColVector &q, vpMatrix &eJe) const;
+  void get_fJe(const vpColVector &q, vpMatrix &fJe) const;
 
-  friend VISP_EXPORT std::ostream & operator << (std::ostream & os,
-				     const vpPtu46 & constant);
+  friend VISP_EXPORT std::ostream & operator << (std::ostream & os, const vpPtu46 & constant);
 };
 
 
diff --git a/src/robot/real-robot/ptu46/vpRobotPtu46.cpp b/src/robot/real-robot/ptu46/vpRobotPtu46.cpp
index 2f8d2fd2..0edcb335 100644
--- a/src/robot/real-robot/ptu46/vpRobotPtu46.cpp
+++ b/src/robot/real-robot/ptu46/vpRobotPtu46.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotPtu46.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRobotPtu46.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -235,7 +235,7 @@ vpRobotPtu46::stopMotion(void)
 
 */
 void
-vpRobotPtu46::get_cVe(vpVelocityTwistMatrix &cVe)
+vpRobotPtu46::get_cVe(vpVelocityTwistMatrix &cVe) const
 {
   vpHomogeneousMatrix cMe ;
   vpPtu46::get_cMe(cMe) ;
@@ -253,7 +253,7 @@ vpRobotPtu46::get_cVe(vpVelocityTwistMatrix &cVe)
 
 */
 void
-vpRobotPtu46::get_cMe(vpHomogeneousMatrix &cMe)
+vpRobotPtu46::get_cMe(vpHomogeneousMatrix &cMe) const
 {
   vpPtu46::get_cMe(cMe) ;
 }
diff --git a/src/robot/real-robot/ptu46/vpRobotPtu46.h b/src/robot/real-robot/ptu46/vpRobotPtu46.h
index 4f7ccbfb..a5702d0e 100644
--- a/src/robot/real-robot/ptu46/vpRobotPtu46.h
+++ b/src/robot/real-robot/ptu46/vpRobotPtu46.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotPtu46.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpRobotPtu46.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -112,8 +112,8 @@ public:
   vpRobotPtu46 (vpRobotPtu46 * pub);
   virtual ~vpRobotPtu46 (void);
 
-  void get_cMe(vpHomogeneousMatrix &_cMe) ;
-  void get_cVe(vpVelocityTwistMatrix &_cVe) ;
+  void get_cMe(vpHomogeneousMatrix &_cMe) const;
+  void get_cVe(vpVelocityTwistMatrix &_cVe) const;
   void get_eJe(vpMatrix &_eJe);
   void get_fJe(vpMatrix &_fJe);
 
diff --git a/src/robot/real-robot/viper/vpRobotViper650.cpp b/src/robot/real-robot/viper/vpRobotViper650.cpp
index 461f80e5..f5795447 100644
--- a/src/robot/real-robot/viper/vpRobotViper650.cpp
+++ b/src/robot/real-robot/viper/vpRobotViper650.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotViper650.cpp 4218 2013-04-17 09:55:47Z fspindle $
+ * $Id: vpRobotViper650.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -679,7 +679,7 @@ void
   \sa powerOn(), powerOff()
 */
 bool
-    vpRobotViper650::getPowerState(void)
+    vpRobotViper650::getPowerState(void) const
 {
   InitTry;
   bool status = false;
@@ -712,7 +712,7 @@ bool
 
 */
 void
-    vpRobotViper650::get_cVe(vpVelocityTwistMatrix &cVe)
+    vpRobotViper650::get_cVe(vpVelocityTwistMatrix &cVe) const
 {
   vpHomogeneousMatrix cMe ;
   vpViper650::get_cMe(cMe) ;
@@ -732,7 +732,7 @@ void
 
 */
 void
-    vpRobotViper650::get_cMe(vpHomogeneousMatrix &cMe)
+    vpRobotViper650::get_cMe(vpHomogeneousMatrix &cMe) const
 {
   vpViper650::get_cMe(cMe) ;
 }
@@ -861,7 +861,7 @@ void
   \sa setPositioningVelocity()
 */
 double
-    vpRobotViper650::getPositioningVelocity (void)
+    vpRobotViper650::getPositioningVelocity (void) const
 {
   return positioningVelocity;
 }
@@ -1992,7 +1992,7 @@ bool
     return false;
 
   fprintf(fd, "\
-#Viper - Position - Version 1.0\n\
+#Viper650 - Position - Version 1.00\n\
 #\n\
 # R: A B C D E F\n\
 # Joint position in degrees\n\
@@ -2167,7 +2167,7 @@ void
 
 */
 void
-    vpRobotViper650::biasForceTorqueSensor()
+    vpRobotViper650::biasForceTorqueSensor() const
 {
   InitTry;
 
@@ -2224,7 +2224,7 @@ int main()
 
 */
 void
-    vpRobotViper650::getForceTorque(vpColVector &H)
+    vpRobotViper650::getForceTorque(vpColVector &H) const
 {
   InitTry;
 
@@ -2245,7 +2245,7 @@ void
 
   \sa disbleJoint6Limits()
 */
-void vpRobotViper650::enableJoint6Limits()
+void vpRobotViper650::enableJoint6Limits() const
 {
   InitTry;
   Try( PrimitiveREMOVE_JOINT6_LIMITS_Viper650(0) );
@@ -2267,7 +2267,7 @@ void vpRobotViper650::enableJoint6Limits()
 
   \sa enableJoint6Limits()
 */
-void vpRobotViper650::disableJoint6Limits()
+void vpRobotViper650::disableJoint6Limits() const
 {
   InitTry;
   Try( PrimitiveREMOVE_JOINT6_LIMITS_Viper650(1) );
diff --git a/src/robot/real-robot/viper/vpRobotViper650.h b/src/robot/real-robot/viper/vpRobotViper650.h
index 3b363bbe..c28f8b5f 100644
--- a/src/robot/real-robot/viper/vpRobotViper650.h
+++ b/src/robot/real-robot/viper/vpRobotViper650.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotViper650.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpRobotViper650.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -336,22 +336,22 @@ public:  /* Methode publiques */
   virtual ~vpRobotViper650 (void);
 
   // Force/Torque control
-  void biasForceTorqueSensor();
+  void biasForceTorqueSensor() const;
 
-  void disableJoint6Limits();
-  void enableJoint6Limits();
+  void disableJoint6Limits() const;
+  void enableJoint6Limits() const;
 
   /*!
     \return The control mode indicating if the robot is in automatic,
     manual (usage of the dead man switch) or emergnecy stop mode.
   */
-  vpControlModeType getControlMode() {
+  vpControlModeType getControlMode() const {
     return controlMode;
   }
 
   void getDisplacement(vpRobot::vpControlFrameType frame,
                        vpColVector &displacement);
-  void getForceTorque(vpColVector &H);
+  void getForceTorque(vpColVector &H) const;
 
   void getPosition (const vpRobot::vpControlFrameType frame,
                     vpColVector &position);
@@ -364,8 +364,8 @@ public:  /* Methode publiques */
                     vpPoseVector &position,
                     double &timestamp);
 
-  double getPositioningVelocity (void);
-  bool getPowerState();
+  double getPositioningVelocity (void) const;
+  bool getPowerState() const;
 
   double getTime () const;
   void getVelocity (const vpRobot::vpControlFrameType frame,
@@ -376,23 +376,23 @@ public:  /* Methode publiques */
   vpColVector getVelocity (const vpRobot::vpControlFrameType frame);
   vpColVector getVelocity (const vpRobot::vpControlFrameType frame, double &timestamp);
 
-  void get_cMe(vpHomogeneousMatrix &cMe) ;
-  void get_cVe(vpVelocityTwistMatrix &cVe) ;
-  void get_eJe(vpMatrix &eJe)  ;
-  void get_fJe(vpMatrix &fJe)  ;
+  void get_cMe(vpHomogeneousMatrix &cMe) const;
+  void get_cVe(vpVelocityTwistMatrix &cVe) const;
+  void get_eJe(vpMatrix &eJe);
+  void get_fJe(vpMatrix &fJe);
 
   void init (void);
   void init (vpViper650::vpToolType tool,
              vpCameraParameters::vpCameraParametersProjType
              projModel = vpCameraParameters::perspectiveProjWithoutDistortion);
 
-  void move(const char *filename) ;
+  void move(const char *filename);
 
-  void powerOn() ;
-  void powerOff() ;
+  void powerOn();
+  void powerOff();
 
-  static bool readPosFile(const char *filename, vpColVector &q)  ;
-  static bool savePosFile(const char *filename, const vpColVector &q)  ;
+  static bool readPosFile(const char *filename, vpColVector &q);
+  static bool savePosFile(const char *filename, const vpColVector &q);
 
   // Position control
   void setPosition(const vpRobot::vpControlFrameType frame,
@@ -409,7 +409,7 @@ public:  /* Methode publiques */
   void setVelocity (const vpRobot::vpControlFrameType frame,
                     const vpColVector & velocity);
 
-  void stopMotion() ;
+  void stopMotion();
 
 private:
   void getArticularDisplacement(vpColVector &displacement);
diff --git a/src/robot/real-robot/viper/vpRobotViper850.cpp b/src/robot/real-robot/viper/vpRobotViper850.cpp
index d422612d..f68efb58 100644
--- a/src/robot/real-robot/viper/vpRobotViper850.cpp
+++ b/src/robot/real-robot/viper/vpRobotViper850.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotViper850.cpp 4218 2013-04-17 09:55:47Z fspindle $
+ * $Id: vpRobotViper850.cpp 4594 2014-01-20 15:08:07Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -218,6 +218,8 @@ vpRobotViper850::vpRobotViper850 (bool verbose)
   }
   positioningVelocity  = defaultPositioningVelocity ;
 
+  maxRotationVelocity_joint6 = maxRotationVelocity;
+
   vpRobotViper850::robotAlreadyCreated = true;
 
   return ;
@@ -680,7 +682,7 @@ void
   \sa powerOn(), powerOff()
 */
 bool
-    vpRobotViper850::getPowerState(void)
+    vpRobotViper850::getPowerState(void) const
 {
   InitTry;
   bool status = false;
@@ -713,7 +715,7 @@ bool
 
 */
 void
-    vpRobotViper850::get_cVe(vpVelocityTwistMatrix &cVe)
+    vpRobotViper850::get_cVe(vpVelocityTwistMatrix &cVe) const
 {
   vpHomogeneousMatrix cMe ;
   vpViper850::get_cMe(cMe) ;
@@ -733,7 +735,7 @@ void
 
 */
 void
-    vpRobotViper850::get_cMe(vpHomogeneousMatrix &cMe)
+    vpRobotViper850::get_cMe(vpHomogeneousMatrix &cMe) const
 {
   vpViper850::get_cMe(cMe) ;
 }
@@ -862,7 +864,7 @@ void
   \sa setPositioningVelocity()
 */
 double
-    vpRobotViper850::getPositioningVelocity (void)
+    vpRobotViper850::getPositioningVelocity (void) const
 {
   return positioningVelocity;
 }
@@ -1537,8 +1539,15 @@ void vpRobotViper850::setVelocity(const vpRobot::vpControlFrameType frame,
   case vpRobot::ARTICULAR_FRAME : {
       vpColVector vel_max(6);
 
-      for (unsigned int i=0; i<6; i++)
-        vel_max[i] = getMaxRotationVelocity();
+      if (getMaxRotationVelocity() == getMaxRotationVelocityJoint6()) {
+        for (unsigned int i=0; i<6; i++)
+          vel_max[i] = getMaxRotationVelocity();
+      }
+      else {
+        for (unsigned int i=0; i<5; i++)
+          vel_max[i] = getMaxRotationVelocity();
+        vel_max[5] = getMaxRotationVelocityJoint6();
+      }
 
       vel_sat = vpRobot::saturateVelocities(vel, vel_max, true);
     }
@@ -2006,7 +2015,7 @@ bool
     return false;
 
   fprintf(fd, "\
-#Viper - Position - Version 1.0\n\
+#Viper850 - Position - Version 1.00\n\
 #\n\
 # R: A B C D E F\n\
 # Joint position in degrees\n\
@@ -2181,7 +2190,7 @@ void
 
 */
 void
-    vpRobotViper850::biasForceTorqueSensor()
+    vpRobotViper850::biasForceTorqueSensor() const
 {
   InitTry;
 
@@ -2238,7 +2247,7 @@ int main()
 
 */
 void
-    vpRobotViper850::getForceTorque(vpColVector &H)
+    vpRobotViper850::getForceTorque(vpColVector &H) const
 {
   InitTry;
 
@@ -2280,7 +2289,7 @@ void
   \sa openGripper()
 
 */
-void vpRobotViper850::closeGripper()
+void vpRobotViper850::closeGripper() const
 {
   InitTry;
   Try( PrimitiveGripper_Viper850(0) );
@@ -2298,7 +2307,7 @@ void vpRobotViper850::closeGripper()
 
   \sa disbleJoint6Limits()
 */
-void vpRobotViper850::enableJoint6Limits()
+void vpRobotViper850::enableJoint6Limits() const
 {
   InitTry;
   Try( PrimitiveREMOVE_JOINT6_LIMITS_Viper850(0) );
@@ -2320,7 +2329,7 @@ void vpRobotViper850::enableJoint6Limits()
 
   \sa enableJoint6Limits()
 */
-void vpRobotViper850::disableJoint6Limits()
+void vpRobotViper850::disableJoint6Limits() const
 {
   InitTry;
   Try( PrimitiveREMOVE_JOINT6_LIMITS_Viper850(1) );
@@ -2333,5 +2342,59 @@ void vpRobotViper850::disableJoint6Limits()
   }
 }
 
+/*!
+
+  Set the maximal rotation velocity that can be sent to the robot  during a velocity control.
+
+  \param w_max : Maximum rotation velocity expressed in rad/s.
+*/
+
+void
+vpRobotViper850::setMaxRotationVelocity (double w_max)
+{
+  vpRobot::setMaxRotationVelocity(w_max);
+  setMaxRotationVelocityJoint6(w_max);
+
+  return;
+}
+
+/*!
+
+  Set the maximal rotation velocity on joint 6 that is used only during velocity joint control.
+
+  This function affects only the velocities that are sent as joint velocities.
+
+  \code
+  vpRobotViper850 robot;
+  robot.setMaxRotationVelocity( vpMath::rad(20) );
+  robot.setMaxRotationVelocityJoint6( vpMath::rad(50) );
+
+  robot.setRobotState(vpRobot::STATE_VELOCITY_CONTROL);
+  robot.setVelocity(ARTICULAR_FRAME, v);
+  \endcode
+
+
+  \param w6_max : Maximum rotation velocity expressed in rad/s on joint 6.
+*/
+
+void
+vpRobotViper850::setMaxRotationVelocityJoint6 (const double w6_max)
+{
+  maxRotationVelocity_joint6 = w6_max;
+  return;
+}
+
+/*!
+
+  Get the maximal rotation velocity on joint 6 that is used only during velocity joint control.
+
+  \return Maximum rotation velocity on joint 6 expressed in rad/s.
+*/
+double
+vpRobotViper850::getMaxRotationVelocityJoint6() const
+{
+  return maxRotationVelocity_joint6;
+}
+
 #endif
 
diff --git a/src/robot/real-robot/viper/vpRobotViper850.h b/src/robot/real-robot/viper/vpRobotViper850.h
index 161f778c..5d5d7d00 100644
--- a/src/robot/real-robot/viper/vpRobotViper850.h
+++ b/src/robot/real-robot/viper/vpRobotViper850.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotViper850.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpRobotViper850.h 4594 2014-01-20 15:08:07Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -336,12 +336,12 @@ public:  /* Methode publiques */
   virtual ~vpRobotViper850 (void);
 
   // Force/Torque control
-  void biasForceTorqueSensor();
+  void biasForceTorqueSensor() const;
 
-  void closeGripper();
+  void closeGripper() const;
 
-  void disableJoint6Limits();
-  void enableJoint6Limits();
+  void disableJoint6Limits() const;
+  void enableJoint6Limits() const;
 
   void getDisplacement(vpRobot::vpControlFrameType frame,
                        vpColVector &displacement);
@@ -349,12 +349,13 @@ public:  /* Methode publiques */
     \return The control mode indicating if the robot is in automatic, 
     manual (usage of the dead man switch) or emergnecy stop mode.
   */
-  vpControlModeType getControlMode() {
+  vpControlModeType getControlMode() const {
     return controlMode;
   }
 
-  void getForceTorque(vpColVector &H);
+  void getForceTorque(vpColVector &H) const;
 
+  double getMaxRotationVelocityJoint6() const;
   void getPosition (const vpRobot::vpControlFrameType frame,
                     vpColVector &position);
   void getPosition (const vpRobot::vpControlFrameType frame,
@@ -364,8 +365,8 @@ public:  /* Methode publiques */
   void getPosition (const vpRobot::vpControlFrameType frame,
                     vpPoseVector &position, double &timestamp);
 
-  double getPositioningVelocity (void);
-  bool getPowerState();
+  double getPositioningVelocity (void) const;
+  bool getPowerState() const;
 
   void getVelocity (const vpRobot::vpControlFrameType frame,
                     vpColVector & velocity);
@@ -377,10 +378,10 @@ public:  /* Methode publiques */
 
   double getTime() const;
 
-  void get_cMe(vpHomogeneousMatrix &cMe) ;
-  void get_cVe(vpVelocityTwistMatrix &cVe) ;
-  void get_eJe(vpMatrix &eJe)  ;
-  void get_fJe(vpMatrix &fJe)  ;
+  void get_cMe(vpHomogeneousMatrix &cMe) const;
+  void get_cVe(vpVelocityTwistMatrix &cVe) const;
+  void get_eJe(vpMatrix &eJe);
+  void get_fJe(vpMatrix &fJe);
 
   void init (void);
   void init (vpViper850::vpToolType tool,
@@ -397,6 +398,9 @@ public:  /* Methode publiques */
   static bool readPosFile(const char *filename, vpColVector &q)  ;
   static bool savePosFile(const char *filename, const vpColVector &q)  ;
 
+  void setMaxRotationVelocity(double w_max);
+  void setMaxRotationVelocityJoint6(double w6_max);
+
   // Position control
   void setPosition(const vpRobot::vpControlFrameType frame,
                    const vpColVector &position) ;
@@ -418,6 +422,8 @@ public:  /* Methode publiques */
 private:
   void getArticularDisplacement(vpColVector &displacement);
   void getCameraDisplacement(vpColVector &displacement);
+
+  double maxRotationVelocity_joint6;
 };
 
 
diff --git a/src/robot/real-robot/viper/vpViper.cpp b/src/robot/real-robot/viper/vpViper.cpp
index b3bbae7d..250410c8 100644
--- a/src/robot/real-robot/viper/vpViper.cpp
+++ b/src/robot/real-robot/viper/vpViper.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpViper.cpp 4206 2013-04-13 07:29:06Z fspindle $
+ * $Id: vpViper.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -68,6 +68,7 @@ const unsigned int vpViper::njoint = 6;
 
 */
 vpViper::vpViper()
+  : eMc(), etc(), erc(), a1(0), d1(0), a2(), a3(), d4(0), d6(0), c56(0), joint_max(), joint_min()
 {
   // Default values are initialized
 
@@ -125,7 +126,7 @@ vpViper::vpViper()
 
 */
 vpHomogeneousMatrix
-vpViper::getForwardKinematics(const vpColVector & q)
+vpViper::getForwardKinematics(const vpColVector & q) const
 {
   vpHomogeneousMatrix fMc;
   fMc = get_fMc(q);
@@ -148,7 +149,7 @@ vpViper::getForwardKinematics(const vpColVector & q)
   \return true if the joint position is in the joint limits. false otherwise. 
  */
 bool 
-vpViper::convertJointPositionInLimits(unsigned int joint, const double &q, double &q_mod, const bool &verbose)
+vpViper::convertJointPositionInLimits(unsigned int joint, const double &q, double &q_mod, const bool &verbose) const
 {
   double eps = 0.01;
   if (q >= joint_min[joint]-eps && q <= joint_max[joint]+eps ) {
@@ -228,7 +229,7 @@ vpViper::convertJointPositionInLimits(unsigned int joint, const double &q, doubl
 
 */
 unsigned int
-vpViper::getInverseKinematicsWrist(const vpHomogeneousMatrix & fMw, vpColVector & q, const bool &verbose)
+vpViper::getInverseKinematicsWrist(const vpHomogeneousMatrix & fMw, vpColVector & q, const bool &verbose) const
 {
   vpColVector q_sol[8];
 
@@ -573,14 +574,14 @@ vpViper::getInverseKinematicsWrist(const vpHomogeneousMatrix & fMw, vpColVector
 
 */
 unsigned int
-vpViper::getInverseKinematics(const vpHomogeneousMatrix & fMc, vpColVector & q, const bool &verbose)
+vpViper::getInverseKinematics(const vpHomogeneousMatrix & fMc, vpColVector & q, const bool &verbose) const
 {
   vpHomogeneousMatrix fMw;
   vpHomogeneousMatrix wMe;
-  vpHomogeneousMatrix eMc;
+  vpHomogeneousMatrix eMc_;
   this->get_wMe(wMe);
-  this->get_eMc(eMc);
-  fMw = fMc * eMc.inverse() * wMe.inverse();
+  this->get_eMc(eMc_);
+  fMw = fMc * eMc_.inverse() * wMe.inverse();
   
   return (getInverseKinematicsWrist(fMw, q, verbose));
 }
@@ -611,7 +612,7 @@ vpViper::getInverseKinematics(const vpHomogeneousMatrix & fMc, vpColVector & q,
 
 */
 vpHomogeneousMatrix
-vpViper::get_fMc (const vpColVector & q)
+vpViper::get_fMc (const vpColVector & q) const
 {
   vpHomogeneousMatrix fMc;
   get_fMc(q, fMc);
@@ -641,7 +642,7 @@ vpViper::get_fMc (const vpColVector & q)
   \sa get_fMe(), get_eMc()
 */
 void
-vpViper::get_fMc(const vpColVector & q, vpHomogeneousMatrix & fMc)
+vpViper::get_fMc(const vpColVector & q, vpHomogeneousMatrix & fMc) const
 {
 
   // Compute the direct geometric model: fMe = transformation between
@@ -728,7 +729,7 @@ int main()
 
 */
 void
-vpViper::get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe)
+vpViper::get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe) const
 {
   double q1 = q[0];
   double q2 = q[1];
@@ -824,7 +825,7 @@ vpViper::get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe)
   
 */
 void
-vpViper::get_fMw(const vpColVector & q, vpHomogeneousMatrix & fMw)
+vpViper::get_fMw(const vpColVector & q, vpHomogeneousMatrix & fMw) const
 {
   double q1 = q[0];
   double q2 = q[1];
@@ -857,7 +858,6 @@ vpViper::get_fMw(const vpColVector & q, vpHomogeneousMatrix & fMw)
   double c23 = cos(q2+q3);
   double s23 = sin(q2+q3);
 
-
   fMw[0][0] = c1*(c23*(c4*c5*c6-s4*s6)-s23*s5*c6)-s1*(s4*c5*c6+c4*s6);
   fMw[1][0] = -s1*(c23*(-c4*c5*c6+s4*s6)+s23*s5*c6)+c1*(s4*c5*c6+c4*s6);
   fMw[2][0] = s23*(s4*s6-c4*c5*c6)-c23*s5*c6;
@@ -890,7 +890,7 @@ vpViper::get_fMw(const vpColVector & q, vpHomogeneousMatrix & fMw)
 
 */
 void
-vpViper::get_wMe(vpHomogeneousMatrix & wMe)
+vpViper::get_wMe(vpHomogeneousMatrix & wMe) const
 {
   // Set the rotation as identity
   wMe.setIdentity();
@@ -905,15 +905,15 @@ vpViper::get_wMe(vpHomogeneousMatrix & wMe)
   the camera frame. This transformation is constant and correspond to
   the extrinsic camera parameters estimated by calibration.
 
-  \param eMc : Transformation between the the
+  \param eMc_ : Transformation between the the
   end-effector frame and the camera frame.
 
   \sa get_cMe()
 */
 void
-vpViper::get_eMc(vpHomogeneousMatrix &eMc)
+vpViper::get_eMc(vpHomogeneousMatrix &eMc_) const
 {
-  eMc = this->eMc;
+  eMc_ = this->eMc;
 }
 
 /*!
@@ -928,7 +928,7 @@ vpViper::get_eMc(vpHomogeneousMatrix &eMc)
   \sa get_eMc()
 */
 void
-vpViper::get_cMe(vpHomogeneousMatrix &cMe)
+vpViper::get_cMe(vpHomogeneousMatrix &cMe) const
 {
   cMe = this->eMc.inverse();
 }
@@ -949,7 +949,7 @@ vpViper::get_cMe(vpHomogeneousMatrix &cMe)
 
 */
 void
-vpViper::get_cVe(vpVelocityTwistMatrix &cVe)
+vpViper::get_cVe(vpVelocityTwistMatrix &cVe) const
 {
   vpHomogeneousMatrix cMe ;
   get_cMe(cMe) ;
@@ -982,7 +982,7 @@ vpViper::get_cVe(vpVelocityTwistMatrix &cVe)
   \sa get_fJw()
 */
 void
-vpViper::get_eJe(const vpColVector &q, vpMatrix &eJe)
+vpViper::get_eJe(const vpColVector &q, vpMatrix &eJe) const
 {
   vpMatrix V(6,6);
   V = 0;
@@ -1068,7 +1068,7 @@ vpViper::get_eJe(const vpColVector &q, vpMatrix &eJe)
 */
 
 void
-vpViper::get_fJw(const vpColVector &q, vpMatrix &fJw)
+vpViper::get_fJw(const vpColVector &q, vpMatrix &fJw) const
 {
   double q1 = q[0];
   double q2 = q[1];
@@ -1174,7 +1174,7 @@ vpViper::get_fJw(const vpColVector &q, vpMatrix &fJw)
   \sa get_fJw
 */
 void
-vpViper::get_fJe(const vpColVector &q, vpMatrix &fJe)
+vpViper::get_fJe(const vpColVector &q, vpMatrix &fJe) const
 {
   vpMatrix V(6,6);
   V = 0;
@@ -1216,7 +1216,7 @@ vpViper::get_fJe(const vpColVector &q, vpMatrix &fJe)
 
 */
 vpColVector
-vpViper::getJointMin()
+vpViper::getJointMin() const
 {
   return joint_min;
 }
@@ -1229,7 +1229,7 @@ vpViper::getJointMin()
 
 */
 vpColVector
-vpViper::getJointMax()
+vpViper::getJointMax() const
 {
   return joint_max;
 }
@@ -1245,13 +1245,11 @@ vpViper::getJointMax()
 
 */
 double
-vpViper::getCoupl56()
+vpViper::getCoupl56() const
 {
   return c56;
 }
 
-
-
 /*!
 
   Print on the output stream \e os the robot parameters (joint
@@ -1261,7 +1259,7 @@ vpViper::getCoupl56()
   \param os : Output stream.
   \param viper : Robot parameters.
 */
-std::ostream & operator << (std::ostream & os, const vpViper & viper)
+VISP_EXPORT std::ostream & operator << (std::ostream & os, const vpViper & viper)
 {
   vpRotationMatrix eRc;
   viper.eMc.extract(eRc);
@@ -1302,8 +1300,3 @@ std::ostream & operator << (std::ostream & os, const vpViper & viper)
 
   return os;
 }
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/src/robot/real-robot/viper/vpViper.h b/src/robot/real-robot/viper/vpViper.h
index a2b0a0f6..e67984c6 100644
--- a/src/robot/real-robot/viper/vpViper.h
+++ b/src/robot/real-robot/viper/vpViper.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpViper.h 4191 2013-04-01 07:46:05Z fspindle $
+ * $Id: vpViper.h 4620 2014-01-27 21:28:32Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -114,31 +114,30 @@ class VISP_EXPORT vpViper
   vpViper();
   virtual ~vpViper() {};
 
-  vpHomogeneousMatrix getForwardKinematics(const vpColVector & q);
-  unsigned int getInverseKinematicsWrist(const vpHomogeneousMatrix & fMw, vpColVector & q, const bool &verbose=false);
-  unsigned int getInverseKinematics(const vpHomogeneousMatrix & fMc, vpColVector & q, const bool &verbose=false);
-  vpHomogeneousMatrix get_fMc (const vpColVector & q);
-  void get_fMw(const vpColVector & q, vpHomogeneousMatrix & fMw);
-  void get_wMe(vpHomogeneousMatrix & wMe);
-  void get_eMc(vpHomogeneousMatrix & eMc);
-  void get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe);
-  void get_fMc(const vpColVector & q, vpHomogeneousMatrix & fMc);
-
-  void get_cMe(vpHomogeneousMatrix &cMe) ;
-  void get_cVe(vpVelocityTwistMatrix &cVe) ;
-  void get_fJw(const vpColVector &q, vpMatrix &fJw)  ;
-  void get_fJe(const vpColVector &q, vpMatrix &fJe)  ;
-  void get_eJe(const vpColVector &q, vpMatrix &eJe)  ;
-
-  friend VISP_EXPORT std::ostream & operator << (std::ostream & os,
-						 const vpViper & viper);
-
-  vpColVector getJointMin();
-  vpColVector getJointMax();
-  double getCoupl56();
+  vpHomogeneousMatrix getForwardKinematics(const vpColVector & q) const;
+  unsigned int getInverseKinematicsWrist(const vpHomogeneousMatrix & fMw, vpColVector & q, const bool &verbose=false) const;
+  unsigned int getInverseKinematics(const vpHomogeneousMatrix & fMc, vpColVector & q, const bool &verbose=false) const;
+  vpHomogeneousMatrix get_fMc (const vpColVector & q) const;
+  void get_fMw(const vpColVector & q, vpHomogeneousMatrix & fMw) const;
+  void get_wMe(vpHomogeneousMatrix & wMe) const;
+  void get_eMc(vpHomogeneousMatrix & eMc) const;
+  void get_fMe(const vpColVector & q, vpHomogeneousMatrix & fMe) const;
+  void get_fMc(const vpColVector & q, vpHomogeneousMatrix & fMc) const;
+
+  void get_cMe(vpHomogeneousMatrix &cMe) const;
+  void get_cVe(vpVelocityTwistMatrix &cVe) const;
+  void get_fJw(const vpColVector &q, vpMatrix &fJw) const;
+  void get_fJe(const vpColVector &q, vpMatrix &fJe) const;
+  void get_eJe(const vpColVector &q, vpMatrix &eJe) const;
+
+  friend VISP_EXPORT std::ostream & operator << (std::ostream & os, const vpViper & viper);
+
+  vpColVector getJointMin() const;
+  vpColVector getJointMax() const;
+  double getCoupl56() const;
 
  private:
-  bool convertJointPositionInLimits(unsigned int joint, const double &q, double &q_mod, const bool &verbose=false);
+  bool convertJointPositionInLimits(unsigned int joint, const double &q, double &q_mod, const bool &verbose=false) const;
 
  public:
   static const unsigned int njoint; ///< Number of joint.
@@ -160,15 +159,7 @@ class VISP_EXPORT vpViper
   // Software joint limits in radians
   vpColVector joint_max; // Maximal value of the joints
   vpColVector joint_min; // Minimal value of the joints
-
-
 };
 
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
-
 #endif
 
diff --git a/src/robot/real-robot/viper/vpViper650.cpp b/src/robot/real-robot/viper/vpViper650.cpp
index 0535055f..0e8c2df6 100644
--- a/src/robot/real-robot/viper/vpViper650.cpp
+++ b/src/robot/real-robot/viper/vpViper650.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpViper650.cpp 4210 2013-04-16 08:57:46Z fspindle $
+ * $Id: vpViper650.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -57,56 +57,56 @@ static const char *opt_viper650[] = {"CAMERA", "eMc_ROT_XYZ","eMc_TRANS_XYZ",
                                      NULL};
 
 const char * const vpViper650::CONST_EMC_MARLIN_F033C_WITHOUT_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Viper650/current/include/const_eMc_MarlinF033C_without_distortion_Viper650.cnf";
 #else
 = "/udd/fspindle/robot/Viper650/current/include/const_eMc_MarlinF033C_without_distortion_Viper650.cnf";
 #endif
 
 const char * const vpViper650::CONST_EMC_MARLIN_F033C_WITH_DISTORTION_FILENAME
-#ifdef WIN32 
+#if defined(_WIN32) 
 = "Z:/robot/Viper650/current/include/const_eMc_MarlinF033C_with_distortion_Viper650.cnf";
 #else
 = "/udd/fspindle/robot/Viper650/current/include/const_eMc_MarlinF033C_with_distortion_Viper650.cnf";
 #endif
 
 const char * const vpViper650::CONST_EMC_PTGREY_FLEA2_WITHOUT_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Viper650/current/include/const_eMc_PTGreyFlea2_without_distortion_Viper650.cnf";
 #else
 = "/udd/fspindle/robot/Viper650/current/include/const_eMc_PTGreyFlea2_without_distortion_Viper650.cnf";
 #endif
 
 const char * const vpViper650::CONST_EMC_PTGREY_FLEA2_WITH_DISTORTION_FILENAME
-#ifdef WIN32 
+#if defined(_WIN32) 
 = "Z:/robot/Viper650/current/include/const_eMc_PTGreyFlea2_with_distortion_Viper650.cnf";
 #else
 = "/udd/fspindle/robot/Viper650/current/include/const_eMc_PTGreyFlea2_with_distortion_Viper650.cnf";
 #endif
 
 const char * const vpViper650::CONST_EMC_SCHUNK_GRIPPER_WITHOUT_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Viper650/current/include/const_eMc_schunk_gripper_without_distortion_Viper650.cnf";
 #else
 = "/udd/fspindle/robot/Viper650/current/include/const_eMc_schunk_gripper_without_distortion_Viper650.cnf";
 #endif
 
 const char * const vpViper650::CONST_EMC_SCHUNK_GRIPPER_WITH_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Viper650/current/include/const_eMc_schunk_gripper_with_distortion_Viper650.cnf";
 #else
 = "/udd/fspindle/robot/Viper650/current/include/const_eMc_schunk_gripper_with_distortion_Viper650.cnf";
 #endif
 
 const char * const vpViper650::CONST_EMC_GENERIC_WITHOUT_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Viper650/current/include/const_eMc_generic_without_distortion_Viper650.cnf";
 #else
 = "/udd/fspindle/robot/Viper650/current/include/const_eMc_generic_without_distortion_Viper650.cnf";
 #endif
 
 const char * const vpViper650::CONST_EMC_GENERIC_WITH_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Viper650/current/include/const_eMc_generic_with_distortion_Viper650.cnf";
 #else
 = "/udd/fspindle/robot/Viper650/current/include/const_eMc_generic_with_distortion_Viper650.cnf";
@@ -114,7 +114,7 @@ const char * const vpViper650::CONST_EMC_GENERIC_WITH_DISTORTION_FILENAME
 
 
 const char * const vpViper650::CONST_CAMERA_FILENAME
-#ifdef WIN32 
+#if defined(_WIN32) 
 = "Z:/robot/Viper650/current/include/const_camera_Viper650.xml";
 #else
 = "/udd/fspindle/robot/Viper650/current/include/const_camera_Viper650.xml";
@@ -139,6 +139,7 @@ const vpViper650::vpToolType vpViper650::defaultTool = vpViper650::TOOL_PTGREY_F
 
 */
 vpViper650::vpViper650()
+  : tool_current(vpViper650::defaultTool), projModel(vpCameraParameters::perspectiveProjWithoutDistortion)
 {
   // Denavit Hartenberg parameters
   a1 = 0.075;
@@ -209,15 +210,15 @@ vpViper650::init (const char *camera_extrinsic_parameters)
 
   \param tool : Camera in use.
 
-  \param projModel : Projection model of the camera.
+  \param proj_model : Projection model of the camera.
 
 */
 void
 vpViper650::init (vpViper650::vpToolType tool,
-                  vpCameraParameters::vpCameraParametersProjType projModel)
+                  vpCameraParameters::vpCameraParametersProjType proj_model)
 {
   
-  this->projModel = projModel;
+  this->projModel = proj_model;
   
 #ifdef VISP_HAVE_ACCESS_TO_NAS
   // Read the robot parameters from files
@@ -226,19 +227,19 @@ vpViper650::init (vpViper650::vpToolType tool,
   case vpViper650::TOOL_MARLIN_F033C_CAMERA: {
     switch(projModel) {
     case vpCameraParameters::perspectiveProjWithoutDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_MARLIN_F033C_WITHOUT_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_MARLIN_F033C_WITHOUT_DISTORTION_FILENAME);
 #endif
       break;
     case vpCameraParameters::perspectiveProjWithDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_MARLIN_F033C_WITH_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_MARLIN_F033C_WITH_DISTORTION_FILENAME);
 #endif
@@ -249,19 +250,19 @@ vpViper650::init (vpViper650::vpToolType tool,
   case vpViper650::TOOL_PTGREY_FLEA2_CAMERA: {
     switch(projModel) {
     case vpCameraParameters::perspectiveProjWithoutDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_PTGREY_FLEA2_WITHOUT_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_PTGREY_FLEA2_WITHOUT_DISTORTION_FILENAME);
 #endif
       break;
     case vpCameraParameters::perspectiveProjWithDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_PTGREY_FLEA2_WITH_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_PTGREY_FLEA2_WITH_DISTORTION_FILENAME);
 #endif
@@ -272,19 +273,19 @@ vpViper650::init (vpViper650::vpToolType tool,
   case vpViper650::TOOL_SCHUNK_GRIPPER_CAMERA: {
     switch(projModel) {
     case vpCameraParameters::perspectiveProjWithoutDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_SCHUNK_GRIPPER_WITHOUT_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_SCHUNK_GRIPPER_WITHOUT_DISTORTION_FILENAME);
 #endif
       break;
     case vpCameraParameters::perspectiveProjWithDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_SCHUNK_GRIPPER_WITH_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_SCHUNK_GRIPPER_WITH_DISTORTION_FILENAME);
 #endif
@@ -295,19 +296,19 @@ vpViper650::init (vpViper650::vpToolType tool,
   case vpViper650::TOOL_GENERIC_CAMERA: {
     switch(projModel) {
     case vpCameraParameters::perspectiveProjWithoutDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_GENERIC_WITHOUT_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_GENERIC_WITHOUT_DISTORTION_FILENAME);
 #endif
       break;
     case vpCameraParameters::perspectiveProjWithDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_GENERIC_WITH_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_GENERIC_WITH_DISTORTION_FILENAME);
 #endif
@@ -354,6 +355,7 @@ vpViper650::init (vpViper650::vpToolType tool,
       etc[2] =  0.1022; // tz
       break;
     }
+    break;
   }
   case vpViper650::TOOL_PTGREY_FLEA2_CAMERA:
   case vpViper650::TOOL_SCHUNK_GRIPPER_CAMERA:  {
@@ -375,6 +377,7 @@ vpViper650::init (vpViper650::vpToolType tool,
       etc[2] =  0.078; // tz
       break;
     }
+    break;
   }
   case vpViper650::TOOL_GENERIC_CAMERA: {
     // Set eMc to identity
@@ -389,6 +392,7 @@ vpViper650::init (vpViper650::vpToolType tool,
       etc[2] = 0; // tz
       break;
     }
+    break;
   }
   }
   vpRotationMatrix eRc(erc);
@@ -574,7 +578,7 @@ int main()
 void
 vpViper650::getCameraParameters (vpCameraParameters &cam,
                                  const unsigned int &image_width,
-                                 const unsigned int &image_height)
+                                 const unsigned int &image_height) const
 {
 #if defined(VISP_HAVE_XML2) && defined (VISP_HAVE_ACCESS_TO_NAS)
   vpXmlParserCamera parser;
@@ -796,7 +800,7 @@ int main()
 */
 void
 vpViper650::getCameraParameters (vpCameraParameters &cam,
-                                 const vpImage<unsigned char> &I)
+                                 const vpImage<unsigned char> &I) const
 {
   getCameraParameters(cam,I.getWidth(),I.getHeight());
 }
@@ -866,15 +870,7 @@ int main()
 
 void
 vpViper650::getCameraParameters (vpCameraParameters &cam,
-                                 const vpImage<vpRGBa> &I)
+                                 const vpImage<vpRGBa> &I) const
 {
   getCameraParameters(cam,I.getWidth(),I.getHeight());
 }
-
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/src/robot/real-robot/viper/vpViper650.h b/src/robot/real-robot/viper/vpViper650.h
index 883a6634..b19a7aaa 100644
--- a/src/robot/real-robot/viper/vpViper650.h
+++ b/src/robot/real-robot/viper/vpViper650.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpViper650.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpViper650.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -111,19 +111,19 @@ class VISP_EXPORT vpViper650: public vpViper
 
 
   //! Get the current camera model projection type
-  vpCameraParameters::vpCameraParametersProjType getCameraParametersProjType(){
+  vpCameraParameters::vpCameraParametersProjType getCameraParametersProjType() const {
     return projModel;
   };
 
   void getCameraParameters(vpCameraParameters &cam,
 			   const unsigned int &image_width,
-			   const unsigned int &image_height);
+               const unsigned int &image_height) const;
   void getCameraParameters(vpCameraParameters &cam,
-			   const vpImage<unsigned char> &I);
-  void getCameraParameters(vpCameraParameters &cam, const vpImage<vpRGBa> &I);
+               const vpImage<unsigned char> &I) const;
+  void getCameraParameters(vpCameraParameters &cam, const vpImage<vpRGBa> &I) const;
 
   //! Get the current tool type
-  vpToolType getToolType(){
+  vpToolType getToolType() const{
     return tool_current;
   };
 
diff --git a/src/robot/real-robot/viper/vpViper850.cpp b/src/robot/real-robot/viper/vpViper850.cpp
index f465ee8f..3a29dc4c 100644
--- a/src/robot/real-robot/viper/vpViper850.cpp
+++ b/src/robot/real-robot/viper/vpViper850.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpViper850.cpp 4210 2013-04-16 08:57:46Z fspindle $
+ * $Id: vpViper850.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -57,56 +57,56 @@ static const char *opt_viper850[] = {"CAMERA", "eMc_ROT_XYZ","eMc_TRANS_XYZ",
                                      NULL};
 
 const char * const vpViper850::CONST_EMC_MARLIN_F033C_WITHOUT_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Viper850/current/include/const_eMc_MarlinF033C_without_distortion_Viper850.cnf";
 #else
 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_MarlinF033C_without_distortion_Viper850.cnf";
 #endif
 
 const char * const vpViper850::CONST_EMC_MARLIN_F033C_WITH_DISTORTION_FILENAME
-#ifdef WIN32 
+#if defined(_WIN32) 
 = "Z:/robot/Viper850/current/include/const_eMc_MarlinF033C_with_distortion_Viper850.cnf";
 #else
 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_MarlinF033C_with_distortion_Viper850.cnf";
 #endif
 
 const char * const vpViper850::CONST_EMC_PTGREY_FLEA2_WITHOUT_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Viper850/current/include/const_eMc_PTGreyFlea2_without_distortion_Viper850.cnf";
 #else
 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_PTGreyFlea2_without_distortion_Viper850.cnf";
 #endif
 
 const char * const vpViper850::CONST_EMC_PTGREY_FLEA2_WITH_DISTORTION_FILENAME
-#ifdef WIN32 
+#if defined(_WIN32) 
 = "Z:/robot/Viper850/current/include/const_eMc_PTGreyFlea2_with_distortion_Viper850.cnf";
 #else
 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_PTGreyFlea2_with_distortion_Viper850.cnf";
 #endif
 
 const char * const vpViper850::CONST_EMC_SCHUNK_GRIPPER_WITHOUT_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Viper850/current/include/const_eMc_schunk_gripper_without_distortion_Viper850.cnf";
 #else
 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_schunk_gripper_without_distortion_Viper850.cnf";
 #endif
 
 const char * const vpViper850::CONST_EMC_SCHUNK_GRIPPER_WITH_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Viper850/current/include/const_eMc_schunk_gripper_with_distortion_Viper850.cnf";
 #else
 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_schunk_gripper_with_distortion_Viper850.cnf";
 #endif
 
 const char * const vpViper850::CONST_EMC_GENERIC_WITHOUT_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Viper850/current/include/const_eMc_generic_without_distortion_Viper850.cnf";
 #else
 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_generic_without_distortion_Viper850.cnf";
 #endif
 
 const char * const vpViper850::CONST_EMC_GENERIC_WITH_DISTORTION_FILENAME
-#ifdef WIN32
+#if defined(_WIN32)
 = "Z:/robot/Viper850/current/include/const_eMc_generic_with_distortion_Viper850.cnf";
 #else
 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_generic_with_distortion_Viper850.cnf";
@@ -114,7 +114,7 @@ const char * const vpViper850::CONST_EMC_GENERIC_WITH_DISTORTION_FILENAME
 
 
 const char * const vpViper850::CONST_CAMERA_FILENAME
-#ifdef WIN32 
+#if defined(_WIN32) 
 = "Z:/robot/Viper850/current/include/const_camera_Viper850.xml";
 #else
 = "/udd/fspindle/robot/Viper850/current/include/const_camera_Viper850.xml";
@@ -139,6 +139,8 @@ const vpViper850::vpToolType vpViper850::defaultTool = vpViper850::TOOL_PTGREY_F
 
 */
 vpViper850::vpViper850()
+  : tool_current(vpViper850::defaultTool), projModel(vpCameraParameters::perspectiveProjWithoutDistortion)
+
 {
   // Denavit Hartenberg parameters
   a1 = 0.075;
@@ -209,15 +211,15 @@ vpViper850::init (const char *camera_extrinsic_parameters)
 
   \param tool : Camera in use.
 
-  \param projModel : Projection model of the camera.
+  \param proj_model : Projection model of the camera.
 
 */
 void
 vpViper850::init (vpViper850::vpToolType tool,
-                  vpCameraParameters::vpCameraParametersProjType projModel)
+                  vpCameraParameters::vpCameraParametersProjType proj_model)
 {
   
-  this->projModel = projModel;
+  this->projModel = proj_model;
   
 #ifdef VISP_HAVE_ACCESS_TO_NAS
   // Read the robot parameters from files
@@ -226,19 +228,19 @@ vpViper850::init (vpViper850::vpToolType tool,
   case vpViper850::TOOL_MARLIN_F033C_CAMERA: {
     switch(projModel) {
     case vpCameraParameters::perspectiveProjWithoutDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_MARLIN_F033C_WITHOUT_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_MARLIN_F033C_WITHOUT_DISTORTION_FILENAME);
 #endif
       break;
     case vpCameraParameters::perspectiveProjWithDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_MARLIN_F033C_WITH_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_MARLIN_F033C_WITH_DISTORTION_FILENAME);
 #endif
@@ -249,19 +251,19 @@ vpViper850::init (vpViper850::vpToolType tool,
   case vpViper850::TOOL_PTGREY_FLEA2_CAMERA: {
     switch(projModel) {
     case vpCameraParameters::perspectiveProjWithoutDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_PTGREY_FLEA2_WITHOUT_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_PTGREY_FLEA2_WITHOUT_DISTORTION_FILENAME);
 #endif
       break;
     case vpCameraParameters::perspectiveProjWithDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_PTGREY_FLEA2_WITH_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_PTGREY_FLEA2_WITH_DISTORTION_FILENAME);
 #endif
@@ -272,19 +274,19 @@ vpViper850::init (vpViper850::vpToolType tool,
   case vpViper850::TOOL_SCHUNK_GRIPPER_CAMERA: {
     switch(projModel) {
     case vpCameraParameters::perspectiveProjWithoutDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_SCHUNK_GRIPPER_WITHOUT_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_SCHUNK_GRIPPER_WITHOUT_DISTORTION_FILENAME);
 #endif
       break;
     case vpCameraParameters::perspectiveProjWithDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_SCHUNK_GRIPPER_WITH_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_SCHUNK_GRIPPER_WITH_DISTORTION_FILENAME);
 #endif
@@ -295,19 +297,19 @@ vpViper850::init (vpViper850::vpToolType tool,
   case vpViper850::TOOL_GENERIC_CAMERA: {
     switch(projModel) {
     case vpCameraParameters::perspectiveProjWithoutDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_GENERIC_WITHOUT_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_GENERIC_WITHOUT_DISTORTION_FILENAME);
 #endif
       break;
     case vpCameraParameters::perspectiveProjWithDistortion :
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
       snprintf(filename_eMc, FILENAME_MAX, "%s",
                CONST_EMC_GENERIC_WITH_DISTORTION_FILENAME);
-#else // WIN32
+#else // _WIN32
       _snprintf(filename_eMc, FILENAME_MAX, "%s",
                 CONST_EMC_GENERIC_WITH_DISTORTION_FILENAME);
 #endif
@@ -354,6 +356,7 @@ vpViper850::init (vpViper850::vpToolType tool,
       etc[2] =  0.1022; // tz
       break;
     }
+    break;
   }
   case vpViper850::TOOL_PTGREY_FLEA2_CAMERA:
   case vpViper850::TOOL_SCHUNK_GRIPPER_CAMERA:  {
@@ -375,6 +378,7 @@ vpViper850::init (vpViper850::vpToolType tool,
       etc[2] =  0.078; // tz
       break;
     }
+    break;
   }
   case vpViper850::TOOL_GENERIC_CAMERA: {
     // Set eMc to identity
@@ -389,6 +393,7 @@ vpViper850::init (vpViper850::vpToolType tool,
       etc[2] = 0; // tz
       break;
     }
+    break;
   }
   }
   vpRotationMatrix eRc(erc);
@@ -574,7 +579,7 @@ int main()
 void
 vpViper850::getCameraParameters (vpCameraParameters &cam,
                                  const unsigned int &image_width,
-                                 const unsigned int &image_height)
+                                 const unsigned int &image_height) const
 {
 #if defined(VISP_HAVE_XML2) && defined (VISP_HAVE_ACCESS_TO_NAS)
   vpXmlParserCamera parser;
@@ -796,7 +801,7 @@ int main()
 */
 void
 vpViper850::getCameraParameters (vpCameraParameters &cam,
-                                 const vpImage<unsigned char> &I)
+                                 const vpImage<unsigned char> &I) const
 {
   getCameraParameters(cam,I.getWidth(),I.getHeight());
 }
@@ -866,15 +871,7 @@ int main()
 
 void
 vpViper850::getCameraParameters (vpCameraParameters &cam,
-                                 const vpImage<vpRGBa> &I)
+                                 const vpImage<vpRGBa> &I) const
 {
   getCameraParameters(cam,I.getWidth(),I.getHeight());
 }
-
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/src/robot/real-robot/viper/vpViper850.h b/src/robot/real-robot/viper/vpViper850.h
index a9d1a343..8418cf0e 100644
--- a/src/robot/real-robot/viper/vpViper850.h
+++ b/src/robot/real-robot/viper/vpViper850.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpViper850.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpViper850.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -111,19 +111,19 @@ class VISP_EXPORT vpViper850: public vpViper
 
 
   //! Get the current camera model projection type
-  vpCameraParameters::vpCameraParametersProjType getCameraParametersProjType(){
+  vpCameraParameters::vpCameraParametersProjType getCameraParametersProjType() const{
     return projModel;
   };
 
   void getCameraParameters(vpCameraParameters &cam,
 			   const unsigned int &image_width,
-			   const unsigned int &image_height);
+               const unsigned int &image_height) const;
   void getCameraParameters(vpCameraParameters &cam,
-			   const vpImage<unsigned char> &I);
-  void getCameraParameters(vpCameraParameters &cam, const vpImage<vpRGBa> &I);
+               const vpImage<unsigned char> &I) const;
+  void getCameraParameters(vpCameraParameters &cam, const vpImage<vpRGBa> &I) const;
 
   //! Get the current tool type
-  vpToolType getToolType(){
+  vpToolType getToolType() const {
     return tool_current;
   };
 
diff --git a/src/robot/robot/vpRobot.cpp b/src/robot/robot/vpRobot.cpp
index 9b1945c9..1f331bca 100644
--- a/src/robot/robot/vpRobot.cpp
+++ b/src/robot/robot/vpRobot.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobot.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRobot.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -53,14 +53,50 @@ const double vpRobot::maxRotationVelocityDefault = 0.7;
 
 vpRobot::vpRobot (void)
   :
+  stateRobot(vpRobot::STATE_STOP), frameRobot(vpRobot::CAMERA_FRAME),
   maxTranslationVelocity (maxTranslationVelocityDefault),
-  maxRotationVelocity (maxRotationVelocityDefault)
+  maxRotationVelocity (maxRotationVelocityDefault),
+  nDof(0),
+  eJe(), eJeAvailable(false), fJe(), fJeAvailable(false), areJointLimitsAvailable(false),
+  qmin(NULL), qmax(NULL), verbose_(true)
 {
-  frameRobot = vpRobot::CAMERA_FRAME;
-  stateRobot = vpRobot::STATE_STOP ;
-  verbose_ = true;
 }
 
+vpRobot::vpRobot (const vpRobot &robot)
+  :
+  stateRobot(vpRobot::STATE_STOP), frameRobot(vpRobot::CAMERA_FRAME),
+  maxTranslationVelocity (maxTranslationVelocityDefault),
+  maxRotationVelocity (maxRotationVelocityDefault),
+  nDof(0),
+  eJe(), eJeAvailable(false), fJe(), fJeAvailable(false), areJointLimitsAvailable(false),
+  qmin(NULL), qmax(NULL), verbose_(true)
+{
+  *this = robot;
+}
+
+/*! Copy operator. */
+vpRobot & vpRobot::operator=(const vpRobot &robot)
+{
+  stateRobot = robot.stateRobot;
+  frameRobot = robot.frameRobot;
+  maxTranslationVelocity = robot.maxTranslationVelocity;
+  maxRotationVelocity = robot.maxRotationVelocity;
+  nDof = robot.nDof;
+  eJe = robot.eJe;
+  eJeAvailable = robot.eJeAvailable;
+  fJe= robot.fJe;
+  fJeAvailable = robot.fJeAvailable;
+  areJointLimitsAvailable = robot.areJointLimitsAvailable;
+  qmin = new double [nDof];
+  qmax = new double [nDof];
+  for (int i = 0; i< nDof; i++) {
+    qmin[i] = robot.qmin[i];
+    qmax[i] = robot.qmax[i];
+  }
+  verbose_ = robot.verbose_;
+
+  return (*this);
+}
 /*!
   Saturate velocities.
 
diff --git a/src/robot/robot/vpRobot.h b/src/robot/robot/vpRobot.h
index 70bbb1f1..7839599f 100644
--- a/src/robot/robot/vpRobot.h
+++ b/src/robot/robot/vpRobot.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobot.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRobot.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -116,13 +116,14 @@ protected:
 
 public:
   vpRobot (void);
+  vpRobot (const vpRobot &robot);
   virtual ~vpRobot() { ; }
 
   //---------- Jacobian -----------------------------
   //! Get the robot Jacobian expressed in the end-effector frame
-  virtual void get_eJe(vpMatrix &_eJe)  = 0 ;
+  virtual void get_eJe(vpMatrix &_eJe) = 0 ;
   //! Get the robot Jacobian expressed in the robot reference (or world) frame.
-  virtual void get_fJe(vpMatrix &_fJe)  = 0 ;
+  virtual void get_fJe(vpMatrix &_fJe) = 0 ;
 
   //! Get a displacement (frame as to ve specified) between two successive position control.
   virtual void getDisplacement(const vpRobot::vpControlFrameType frame,
@@ -136,10 +137,12 @@ public:
 
   // Return the robot position (frame has to be specified).
   vpColVector getPosition (const vpRobot::vpControlFrameType frame);
-  virtual vpRobotStateType getRobotState (void) { return stateRobot ; }
+  virtual vpRobotStateType getRobotState (void) const { return stateRobot ; }
 
   virtual void init() = 0 ;
 
+  vpRobot & operator=(const vpRobot &robot);
+
   static vpColVector saturateVelocities(const vpColVector &v_in, const vpColVector &v_max, bool verbose=false);
 
   void setMaxRotationVelocity (const double maxVr);
@@ -156,7 +159,7 @@ public:
 
 protected:
   vpControlFrameType setRobotFrame (vpRobot::vpControlFrameType newFrame);
-  vpControlFrameType getRobotFrame (void) { return frameRobot ; }
+  vpControlFrameType getRobotFrame (void) const { return frameRobot ; }
 } ;
 
 #endif
diff --git a/src/robot/robot/vpRobotException.h b/src/robot/robot/vpRobotException.h
index 969f3851..7fb9a36c 100644
--- a/src/robot/robot/vpRobotException.h
+++ b/src/robot/robot/vpRobotException.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotException.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRobotException.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -70,85 +70,78 @@
  */
 class VISP_EXPORT vpRobotException : public vpException
 {
-public:
-  /*!
+  public:
+    /*!
     \brief Lists the possible error than can be emmited while calling
     vpRobot member
    */
-  enum errorRobotCodeEnum
+    enum errorRobotCodeEnum
     {
 
-	    /** Erreur lancee par le constructor. */
-	    constructionError,
-
-	    /** Erreur lancee lors de la construction d'un objet CRobot
-	     * correspondant a un robot reel si l'objet de la classe en
-	     * question doit etre unique. */
-	    uniqueRobotError,
-
-	    /** Erreur lancee par les fonctions de commande si le
-	     * robot n'est pas dans le bon etat au moment du passage
-	     * d'ordre. */
-	    wrongStateError,
-
-	    /** Erreur lancee par les fonctions de changement d'etat
-	     * si le changement demandee n'est pas possible. */
-	    stateModificationError,
-
-	    /** Erreur generee lors d'un retour non nulle d'une fonction
-	     * de communication de la lib Afma6. */
-	    communicationError,
-
-	    /** Erreur lancee apres un appel a une fonction de la lib
-	     * bas-niveau de control de l'afma6 ayant renvoye une erreur. */
-	    lowLevelError,
-
-	    /** Erreur lancee par la fonction de parsing des parametres du
-	     * robot, si le fichier donne en entree n'est pas valide.
-	     */
-	    readingParametersError,
-
-	    /** Erreur lancee par les methodes d'une classe qui necessite
-	     * un appel a une fonction d'initialisation apres la
-	     * construction si l'init n'a pas ete fait. */
-	    notInitializedError,
-
-	    /** Erreur lancee par les fonctions decrites dans lAPI mais
-	     * pas completement implementee. Dans ce cas, la fonction
-	     * affiche simplement un message d'erreur avant de sortir
-	     * par le 'throw'.
-	     */
-	    notImplementedError,
-	    /** Position is out of range.
-	     */
-	    positionOutOfRangeError
+      /** Erreur lancee par le constructor. */
+      constructionError,
+
+      /** Erreur lancee lors de la construction d'un objet CRobot
+       * correspondant a un robot reel si l'objet de la classe en
+       * question doit etre unique. */
+      uniqueRobotError,
+
+      /** Erreur lancee par les fonctions de commande si le
+       * robot n'est pas dans le bon etat au moment du passage
+       * d'ordre. */
+      wrongStateError,
+
+      /** Erreur lancee par les fonctions de changement d'etat
+       * si le changement demandee n'est pas possible. */
+      stateModificationError,
+
+      /** Erreur generee lors d'un retour non nulle d'une fonction
+       * de communication de la lib Afma6. */
+      communicationError,
+
+      /** Erreur lancee apres un appel a une fonction de la lib
+       * bas-niveau de control de l'afma6 ayant renvoye une erreur. */
+      lowLevelError,
+
+      /** Erreur lancee par la fonction de parsing des parametres du
+       * robot, si le fichier donne en entree n'est pas valide.
+       */
+      readingParametersError,
+
+      /** Erreur lancee par les methodes d'une classe qui necessite
+       * un appel a une fonction d'initialisation apres la
+       * construction si l'init n'a pas ete fait. */
+      notInitializedError,
+
+      /** Erreur lancee par les fonctions decrites dans lAPI mais
+       * pas completement implementee. Dans ce cas, la fonction
+       * affiche simplement un message d'erreur avant de sortir
+       * par le 'throw'.
+       */
+      notImplementedError,
+      /** Position is out of range.
+       */
+      positionOutOfRangeError
     } ;
 
-public:
-  vpRobotException (const int code, const char * msg)
-    : vpException(code, msg)
+  public:
+    vpRobotException (const int id,  const char* format, ...)
     {
+      this->code = id;
+      va_list args;
+      va_start(args, format);
+      setMessage(format, args);
+      va_end (args);
     }
-  vpRobotException (const int code, const std::string & msg)
-    : vpException(code, msg)
+    vpRobotException (const int id, const std::string & msg)
+      : vpException(id, msg)
+    {
+    }
+    vpRobotException (const int id)
+      : vpException(id)
     {
     }
-  vpRobotException (const int code)
-    : vpException(code)
-  {
-  }
-  
-};
-
-
-
-
-
-#endif /* #ifndef __vpRobotException_H */
 
+};
 
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+#endif
diff --git a/src/robot/robot/vpRobotTemplate.cpp b/src/robot/robot/vpRobotTemplate.cpp
index 3a77f0ee..441da224 100644
--- a/src/robot/robot/vpRobotTemplate.cpp
+++ b/src/robot/robot/vpRobotTemplate.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotTemplate.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRobotTemplate.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/robot/robot/vpRobotTemplate.h b/src/robot/robot/vpRobotTemplate.h
index aac9e9ea..8d527b8a 100644
--- a/src/robot/robot/vpRobotTemplate.h
+++ b/src/robot/robot/vpRobotTemplate.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotTemplate.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRobotTemplate.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/robot/simulator-robot/arms/CMakeRobotArmsList.cmake b/src/robot/simulator-robot/arms/CMakeRobotArmsList.cmake
index d4a4ca20..4cf0a103 100644
--- a/src/robot/simulator-robot/arms/CMakeRobotArmsList.cmake
+++ b/src/robot/simulator-robot/arms/CMakeRobotArmsList.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeRobotArmsList.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeRobotArmsList.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/src/robot/simulator-robot/vpRobotCamera.cpp b/src/robot/simulator-robot/vpRobotCamera.cpp
index a17d410c..b9b206f9 100644
--- a/src/robot/simulator-robot/vpRobotCamera.cpp
+++ b/src/robot/simulator-robot/vpRobotCamera.cpp
@@ -3,7 +3,7 @@
  * $Id: vpRobotCamera.cpp 2456 2010-01-07 10:33:12Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -72,6 +72,7 @@
 
 */
 vpRobotCamera::vpRobotCamera()
+  : cMw_()
 {
   init() ;
 }
@@ -118,7 +119,7 @@ vpRobotCamera::~vpRobotCamera()
 
 */
 void
-vpRobotCamera::get_cVe(vpVelocityTwistMatrix &cVe)
+vpRobotCamera::get_cVe(vpVelocityTwistMatrix &cVe) const
 {
   vpVelocityTwistMatrix cVe_;
   cVe = cVe_;
@@ -128,13 +129,13 @@ vpRobotCamera::get_cVe(vpVelocityTwistMatrix &cVe)
   Get the robot jacobian expressed in the end-effector frame.
   For that simple robot the Jacobian is the identity.
 
-  \param eJe : A 6 by 6 matrix representing the robot jacobian \f$ {^e}{\bf
+  \param eJe_ : A 6 by 6 matrix representing the robot jacobian \f$ {^e}{\bf
   J}_e\f$ expressed in the end-effector frame.
 */
 void
-vpRobotCamera::get_eJe(vpMatrix &eJe)
+vpRobotCamera::get_eJe(vpMatrix &eJe_)
 {
-  eJe = this->eJe ;
+  eJe_ = this->eJe ;
 }
 
 /*!
diff --git a/src/robot/simulator-robot/vpRobotCamera.h b/src/robot/simulator-robot/vpRobotCamera.h
index 34016109..4c34837c 100644
--- a/src/robot/simulator-robot/vpRobotCamera.h
+++ b/src/robot/simulator-robot/vpRobotCamera.h
@@ -3,7 +3,7 @@
  * $Id: vpRobotCamera.h 2456 2010-01-07 10:33:12Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -116,8 +116,8 @@ public:
   vpRobotCamera() ;
   virtual ~vpRobotCamera() ;
 
-  void get_cVe(vpVelocityTwistMatrix &cVe);
-  void get_eJe(vpMatrix &eJe)    ;
+  void get_cVe(vpVelocityTwistMatrix &cVe) const;
+  void get_eJe(vpMatrix &eJe);
 
   void getPosition(vpHomogeneousMatrix &cMw) const   ;
   void getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q);
diff --git a/src/robot/simulator-robot/vpRobotSimulator.cpp b/src/robot/simulator-robot/vpRobotSimulator.cpp
index 41c90695..92cf1ec7 100644
--- a/src/robot/simulator-robot/vpRobotSimulator.cpp
+++ b/src/robot/simulator-robot/vpRobotSimulator.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotSimulator.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRobotSimulator.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -46,7 +46,6 @@
 /*!
   Basic constructor that sets the sampling time by default to 40ms.
 */
-vpRobotSimulator::vpRobotSimulator() : vpRobot()
+vpRobotSimulator::vpRobotSimulator() : vpRobot(), delta_t_(0.040f)
 {
-  setSamplingTime(0.040f);
 }
diff --git a/src/robot/simulator-robot/vpRobotSimulator.h b/src/robot/simulator-robot/vpRobotSimulator.h
index 9b9663e4..7c193b90 100644
--- a/src/robot/simulator-robot/vpRobotSimulator.h
+++ b/src/robot/simulator-robot/vpRobotSimulator.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRobotSimulator.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRobotSimulator.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/robot/simulator-robot/vpRobotWireFrameSimulator.cpp b/src/robot/simulator-robot/vpRobotWireFrameSimulator.cpp
index ebce5539..2749c10a 100644
--- a/src/robot/simulator-robot/vpRobotWireFrameSimulator.cpp
+++ b/src/robot/simulator-robot/vpRobotWireFrameSimulator.cpp
@@ -3,7 +3,7 @@
  * $Id: vpRobotWireFrameSimulator.cpp 3530 2012-01-03 10:52:12Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -43,14 +43,24 @@
 
 
 
-#if defined(WIN32) || defined(VISP_HAVE_PTHREAD)
+#if defined(_WIN32) || defined(VISP_HAVE_PTHREAD)
 #include <visp/vpRobotWireFrameSimulator.h>
 #include <visp/vpSimulatorViper850.h>
 
 /*!
   Basic constructor
 */
-vpRobotWireFrameSimulator::vpRobotWireFrameSimulator():vpWireFrameSimulator(), vpRobotSimulator()
+vpRobotWireFrameSimulator::vpRobotWireFrameSimulator()
+  : vpWireFrameSimulator(), vpRobotSimulator(),
+    I(), tcur(0), tprev(0), robotArms(NULL), size_fMi(8), fMi(NULL), artCoord(), artVel(), velocity(),
+    /* thread(), attr(), */ mutex_fMi(), mutex_artVel(), mutex_artCoord(), mutex_velocity(), mutex_display(),
+    displayBusy(false), robotStop(false), jointLimit(false), jointLimitArt(false), singularityManagement(true),
+    cameraParam(),
+#if defined(VISP_HAVE_DISPLAY)
+    display(),
+#endif
+    displayType(MODEL_3D), displayAllowed(true), constantSamplingTimeMode(false),
+    setVelocityCalled(false), verbose_(false)
 {
   setSamplingTime(0.010);
   velocity.resize(6);
@@ -59,48 +69,37 @@ vpRobotWireFrameSimulator::vpRobotWireFrameSimulator():vpWireFrameSimulator(), v
 #if defined(VISP_HAVE_DISPLAY)
   display.init(I, 0, 0,"The External view");
 #endif
-  robotStop = false;
-  jointLimit = false;
-  displayBusy = false;
-  displayType = MODEL_3D;
-  displayAllowed = true;
-  singularityManagement = true;
-  robotArms = NULL;   
-  
-  constantSamplingTimeMode = false;
-  setVelocityCalled = false;
-  
-  verbose_ = false;
+
  //pid_t pid = getpid();
  // setpriority (PRIO_PROCESS, pid, 19);
 }
 
 /*!
   Default constructor.
-  \param display : When true, enables the display of the external view.
+  \param do_display : When true, enables the display of the external view.
   */
-vpRobotWireFrameSimulator::vpRobotWireFrameSimulator(bool display) : vpWireFrameSimulator(), vpRobotSimulator()
+vpRobotWireFrameSimulator::vpRobotWireFrameSimulator(bool do_display)
+  : vpWireFrameSimulator(), vpRobotSimulator(),
+    I(), tcur(0), tprev(0), robotArms(NULL), size_fMi(8), fMi(NULL), artCoord(), artVel(), velocity(),
+    /* thread(), attr(), */ mutex_fMi(), mutex_artVel(), mutex_artCoord(), mutex_velocity(), mutex_display(),
+    displayBusy(false), robotStop(false), jointLimit(false), jointLimitArt(false), singularityManagement(true),
+    cameraParam(),
+#if defined(VISP_HAVE_DISPLAY)
+    display(),
+#endif
+    displayType(MODEL_3D), displayAllowed(do_display), constantSamplingTimeMode(false),
+    setVelocityCalled(false), verbose_(false)
 {
   setSamplingTime(0.010);
   velocity.resize(6);
   I.resize(480,640);
   I = 255;
   
-  displayAllowed = display;
 #if defined(VISP_HAVE_DISPLAY)
-  if (display)
+  if (do_display)
     this->display.init(I, 0, 0,"The External view");
 #endif  
-  robotStop = false;
-  jointLimit = false;
-  displayBusy = false;
-  displayType = MODEL_3D;
-  singularityManagement = true;
-  robotArms = NULL;
-  
-  constantSamplingTimeMode = false;
-  setVelocityCalled = false;
- 
+   
  //pid_t pid = getpid();
  // setpriority (PRIO_PROCESS, pid, 19);
 }
@@ -121,15 +120,15 @@ vpRobotWireFrameSimulator::~vpRobotWireFrameSimulator()
   It exists several default scenes you can use. Use the vpSceneObject and the vpSceneDesiredObject attributes to use them in this method. The corresponding files are stored in the "data" folder which is in the ViSP build directory.
 
   \param obj : Type of scene used to display the object at the current position.
-  \param desiredObject : Type of scene used to display the object at the desired pose (in the internal view).
+  \param desired_object : Type of scene used to display the object at the desired pose (in the internal view).
 */
 void
-vpRobotWireFrameSimulator::initScene(const vpSceneObject &obj, const vpSceneDesiredObject &desiredObject)
+vpRobotWireFrameSimulator::initScene(const vpSceneObject &obj, const vpSceneDesiredObject &desired_object)
 {
   if(displayCamera){
     free_Bound_scene (&(this->camera));
   }
-  vpWireFrameSimulator::initScene(obj, desiredObject);
+  vpWireFrameSimulator::initScene(obj, desired_object);
   if(displayCamera){
     free_Bound_scene (&(this->camera));
   }
@@ -144,15 +143,15 @@ vpRobotWireFrameSimulator::initScene(const vpSceneObject &obj, const vpSceneDesi
   It is also possible to use a vrml (.wrl) file.
 
   \param obj : Path to the scene file you want to use.
-  \param desiredObject : Path to the scene file you want to use.
+  \param desired_object : Path to the scene file you want to use.
 */
 void
-vpRobotWireFrameSimulator::initScene(const char* obj, const char* desiredObject)
+vpRobotWireFrameSimulator::initScene(const char* obj, const char* desired_object)
 {
   if(displayCamera){
     free_Bound_scene (&(this->camera));
   }
-  vpWireFrameSimulator::initScene(obj, desiredObject);
+  vpWireFrameSimulator::initScene(obj, desired_object);
   if(displayCamera){
     free_Bound_scene (&(this->camera));
   }
@@ -206,12 +205,12 @@ vpRobotWireFrameSimulator::initScene(const char* obj)
   
   According to the initialisation method you used, the current position and maybee the desired position of the object are displayed.
   
-  \param I : The image where the internal view is displayed.
+  \param I_ : The image where the internal view is displayed.
   
   \warning : The objects are displayed thanks to overlays. The image I is not modified.
 */
 void
-vpRobotWireFrameSimulator::getInternalView(vpImage<vpRGBa> &I)
+vpRobotWireFrameSimulator::getInternalView(vpImage<vpRGBa> &I_)
 {
   
   if (!sceneInitialized)
@@ -224,13 +223,13 @@ vpRobotWireFrameSimulator::getInternalView(vpImage<vpRGBa> &I)
   if( (std::fabs(px_int-1.) > vpMath::maximum(px_int,1.)*std::numeric_limits<double>::epsilon()) 
       && (std::fabs(py_int-1) > vpMath::maximum(py_int,1.)*std::numeric_limits<double>::epsilon()))
   {
-    u = (double)I.getWidth()/(2*px_int);
-    v = (double)I.getHeight()/(2*py_int);
+    u = (double)I_.getWidth()/(2*px_int);
+    v = (double)I_.getHeight()/(2*py_int);
   }
   else
   {
-    u = (double)I.getWidth()/(vpMath::minimum(I.getWidth(),I.getHeight()));
-    v = (double)I.getHeight()/(vpMath::minimum(I.getWidth(),I.getHeight()));
+    u = (double)I_.getWidth()/(vpMath::minimum(I_.getWidth(),I_.getHeight()));
+    v = (double)I_.getHeight()/(vpMath::minimum(I_.getWidth(),I_.getHeight()));
   }
 
   float o44c[4][4],o44cd[4][4],x,y,z;
@@ -255,7 +254,7 @@ vpRobotWireFrameSimulator::getInternalView(vpImage<vpRGBa> &I)
   add_vwstack ("start","vup", o44c[1][0],o44c[1][1],o44c[1][2]);
   add_vwstack ("start","window", -u, u, -v, v);
   if (displayObject)
-    display_scene(id,this->scene,I, curColor);
+    display_scene(id,this->scene,I_, curColor);
 
   add_vwstack ("start","cop", o44cd[3][0],o44cd[3][1],o44cd[3][2]);
   x = o44cd[2][0] + o44cd[3][0];
@@ -267,8 +266,8 @@ vpRobotWireFrameSimulator::getInternalView(vpImage<vpRGBa> &I)
   add_vwstack ("start","window", -u, u, -v, v);
   if (displayDesiredObject)
   {
-    if (desiredObject == D_TOOL) display_scene(o44cd,desiredScene,I, vpColor::red);
-    else display_scene(id,desiredScene,I, desColor);
+    if (desiredObject == D_TOOL) display_scene(o44cd,desiredScene,I_, vpColor::red);
+    else display_scene(id,desiredScene,I_, desColor);
   }
   delete[] fMit;
   set_displayBusy(false);
@@ -279,12 +278,12 @@ vpRobotWireFrameSimulator::getInternalView(vpImage<vpRGBa> &I)
   
   According to the initialisation method you used, the current position and maybee the desired position of the object are displayed.
   
-  \param I : The image where the internal view is displayed.
+  \param I_ : The image where the internal view is displayed.
   
   \warning : The objects are displayed thanks to overlays. The image I is not modified.
 */
 void
-vpRobotWireFrameSimulator::getInternalView(vpImage<unsigned char> &I)
+vpRobotWireFrameSimulator::getInternalView(vpImage<unsigned char> &I_)
 {
   
   if (!sceneInitialized)
@@ -302,8 +301,8 @@ vpRobotWireFrameSimulator::getInternalView(vpImage<unsigned char> &I)
   }
   else
   {
-    u = (double)I.getWidth()/(vpMath::minimum(I.getWidth(),I.getHeight()));
-    v = (double)I.getHeight()/(vpMath::minimum(I.getWidth(),I.getHeight()));
+    u = (double)I_.getWidth()/(vpMath::minimum(I_.getWidth(),I_.getHeight()));
+    v = (double)I_.getHeight()/(vpMath::minimum(I_.getWidth(),I_.getHeight()));
   }
 
   float o44c[4][4],o44cd[4][4],x,y,z;
@@ -329,7 +328,7 @@ vpRobotWireFrameSimulator::getInternalView(vpImage<unsigned char> &I)
   add_vwstack ("start","window", -u, u, -v, v);
   if (displayObject)
   {
-    display_scene(id,this->scene,I, curColor);
+    display_scene(id,this->scene,I_, curColor);
   }
 
   add_vwstack ("start","cop", o44cd[3][0],o44cd[3][1],o44cd[3][2]);
@@ -342,8 +341,8 @@ vpRobotWireFrameSimulator::getInternalView(vpImage<unsigned char> &I)
   add_vwstack ("start","window", -u, u, -v, v);
   if (displayDesiredObject)
   {
-    if (desiredObject == D_TOOL) display_scene(o44cd,desiredScene,I, vpColor::red);
-    else display_scene(id,desiredScene,I, desColor);
+    if (desiredObject == D_TOOL) display_scene(o44cd,desiredScene,I_, vpColor::red);
+    else display_scene(id,desiredScene,I_, desColor);
   }
   delete[] fMit;
   set_displayBusy(false);
diff --git a/src/robot/simulator-robot/vpRobotWireFrameSimulator.h b/src/robot/simulator-robot/vpRobotWireFrameSimulator.h
index 106f7c62..7a4435ec 100644
--- a/src/robot/simulator-robot/vpRobotWireFrameSimulator.h
+++ b/src/robot/simulator-robot/vpRobotWireFrameSimulator.h
@@ -3,7 +3,7 @@
  * $Id: vpRobotWireFrameSimulator.h 3530 2012-01-03 10:52:12Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -51,10 +51,10 @@
 
 
 
-#if defined(WIN32) || defined(VISP_HAVE_PTHREAD)
+#if defined(_WIN32) || defined(VISP_HAVE_PTHREAD)
 #include <cmath>    // std::fabs
 #include <limits>   // numeric_limits
-#if defined(WIN32)
+#if defined(_WIN32)
 #  include <windows.h>
 #elif defined(VISP_HAVE_PTHREAD)
 #  include <pthread.h>
@@ -121,14 +121,14 @@ class VISP_EXPORT vpRobotWireFrameSimulator : protected vpWireFrameSimulator, pu
     /*! The velocity in the current frame (articular, camera or reference)*/
     vpColVector velocity;
 
-	#if defined(WIN32)
-    HANDLE  hThread;
-	HANDLE mutex_fMi;
+#if defined(_WIN32)
+    HANDLE hThread;
+    HANDLE mutex_fMi;
     HANDLE mutex_artVel;
     HANDLE mutex_artCoord;
     HANDLE mutex_velocity;
     HANDLE mutex_display;
-    #elif defined(VISP_HAVE_PTHREAD)
+#elif defined(VISP_HAVE_PTHREAD)
     pthread_t thread;
     pthread_attr_t attr;
     pthread_mutex_t mutex_fMi;
@@ -136,7 +136,7 @@ class VISP_EXPORT vpRobotWireFrameSimulator : protected vpWireFrameSimulator, pu
     pthread_mutex_t mutex_artCoord;
     pthread_mutex_t mutex_velocity;
     pthread_mutex_t mutex_display;
-    #endif
+#endif
     
     bool displayBusy;
 
@@ -260,11 +260,11 @@ class VISP_EXPORT vpRobotWireFrameSimulator : protected vpWireFrameSimulator, pu
     /*!
       Set the desired position of the robot's camera relative to the object.
 
-      \param cdMo : The desired pose of the camera.
+      \param cdMo_ : The desired pose of the camera.
     */
-    void setDesiredCameraPosition(const vpHomogeneousMatrix cdMo)
+    void setDesiredCameraPosition(const vpHomogeneousMatrix cdMo_)
     {
-      this->vpWireFrameSimulator::setDesiredCameraPosition(cdMo);
+      this->vpWireFrameSimulator::setDesiredCameraPosition(cdMo_);
     }
 
     /*!
@@ -276,11 +276,11 @@ class VISP_EXPORT vpRobotWireFrameSimulator : protected vpWireFrameSimulator, pu
     /*!
       Set the external camera point of view.
 
-      \param camMf : The pose of the external camera relative to the world reference frame.
+      \param camMf_ : The pose of the external camera relative to the world reference frame.
     */
-    void setExternalCameraPosition(const vpHomogeneousMatrix camMf)
+    void setExternalCameraPosition(const vpHomogeneousMatrix camMf_)
     {
-      this->vpWireFrameSimulator::setExternalCameraPosition(camMf);
+      this->vpWireFrameSimulator::setExternalCameraPosition(camMf_);
     }
     /*!
       Specify the thickness of the graphics drawings.
@@ -321,15 +321,15 @@ class VISP_EXPORT vpRobotWireFrameSimulator : protected vpWireFrameSimulator, pu
     /*!
       Set the pose between the object and the fixed world frame.
       
-      \param fMo : The pose between the object and the fixed world frame.
+      \param fMo_ : The pose between the object and the fixed world frame.
     */
-    void set_fMo(const vpHomogeneousMatrix &fMo) {this->fMo = fMo;}
+    void set_fMo(const vpHomogeneousMatrix &fMo_) {this->fMo = fMo_;}
 
   protected:
     /*!
       Function used to launch the thread which moves the robot.
     */
-    #if defined(WIN32)
+    #if defined(_WIN32)
 	static DWORD WINAPI launcher( LPVOID lpParam ) 
 	{
     ((vpRobotWireFrameSimulator *)lpParam)->updateArticularPosition();
@@ -357,7 +357,7 @@ class VISP_EXPORT vpRobotWireFrameSimulator : protected vpWireFrameSimulator, pu
     void initDisplay() {;}
     virtual void initArms() = 0;
 
-	#if defined(WIN32)
+	#if defined(_WIN32)
     vpColVector get_artCoord() const {
       WaitForSingleObject(mutex_artCoord,INFINITE);
       vpColVector artCoordTmp (6);
diff --git a/src/robot/simulator-robot/vpSimulatorAfma6.cpp b/src/robot/simulator-robot/vpSimulatorAfma6.cpp
index b318cab9..8283073f 100644
--- a/src/robot/simulator-robot/vpSimulatorAfma6.cpp
+++ b/src/robot/simulator-robot/vpSimulatorAfma6.cpp
@@ -3,7 +3,7 @@
  * $Id: vpSimulatorAfma6.cpp 2595 2010-06-02 08:50:59Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -42,7 +42,7 @@
 
 
 #include <visp/vpConfig.h>
-#if defined(WIN32) || defined(VISP_HAVE_PTHREAD)
+#if defined(_WIN32) || defined(VISP_HAVE_PTHREAD)
 #include <visp/vpSimulatorAfma6.h>
 #include <visp/vpTime.h>
 #include <visp/vpImagePoint.h>
@@ -59,14 +59,17 @@ const double vpSimulatorAfma6::defaultPositioningVelocity = 25.0;
 /*!
   Basic constructor
 */
-vpSimulatorAfma6::vpSimulatorAfma6():vpRobotWireFrameSimulator(), vpAfma6()
+vpSimulatorAfma6::vpSimulatorAfma6()
+  : vpRobotWireFrameSimulator(), vpAfma6(),
+    q_prev_getdis(), first_time_getdis(true), positioningVelocity(defaultPositioningVelocity),
+    zeroPos(), reposPos(), toolCustom(false), arm_dir()
 {
   init();
   initDisplay();
   
   tcur = vpTime::measureTimeMs();
 
-  #if defined(WIN32)
+  #if defined(_WIN32)
   mutex_fMi = CreateMutex(NULL,FALSE,NULL);
   mutex_artVel = CreateMutex(NULL,FALSE,NULL);
   mutex_artCoord = CreateMutex(NULL,FALSE,NULL);
@@ -101,17 +104,20 @@ vpSimulatorAfma6::vpSimulatorAfma6():vpRobotWireFrameSimulator(), vpAfma6()
 /*!
   Constructor used to enable or disable the external view of the robot.
 
-  \param display : When true, enables the display of the external view.
+  \param do_display : When true, enables the display of the external view.
 
 */
-vpSimulatorAfma6::vpSimulatorAfma6(bool display):vpRobotWireFrameSimulator(display)
+vpSimulatorAfma6::vpSimulatorAfma6(bool do_display)
+  : vpRobotWireFrameSimulator(do_display),
+    q_prev_getdis(), first_time_getdis(true), positioningVelocity(defaultPositioningVelocity),
+    zeroPos(), reposPos(), toolCustom(false), arm_dir()
 {
   init();
   initDisplay();
     
   tcur = vpTime::measureTimeMs();
   
-    #if defined(WIN32)
+    #if defined(_WIN32)
   mutex_fMi = CreateMutex(NULL,FALSE,NULL);
   mutex_artVel = CreateMutex(NULL,FALSE,NULL);
   mutex_artCoord = CreateMutex(NULL,FALSE,NULL);
@@ -150,7 +156,7 @@ vpSimulatorAfma6::~vpSimulatorAfma6()
 {
   robotStop = true;
   
-  #if defined(WIN32)
+  #if defined(_WIN32)
   WaitForSingleObject(hThread,INFINITE);
   CloseHandle(hThread);
   CloseHandle(mutex_fMi);
@@ -276,16 +282,22 @@ vpSimulatorAfma6::initDisplay()
 
   \param tool : Tool to use. Note that the generic camera is not handled.
 
-  \param projModel : Projection model associated to the camera.
+  \param proj_model : Projection model associated to the camera.
 
   \sa vpCameraParameters, init()
 */
 void
 vpSimulatorAfma6::init (vpAfma6::vpAfma6ToolType tool,
-		       vpCameraParameters::vpCameraParametersProjType projModel)
+           vpCameraParameters::vpCameraParametersProjType proj_model)
 {
-  this->projModel = projModel;
-  
+  this->projModel = proj_model;
+  unsigned int name_length = 30; // the size of this kind of string "/afma6_tool_vacuum.bnd"
+  if (arm_dir.size() > FILENAME_MAX)
+    throw vpException (vpException::dimensionError, "Cannot initialize Afma6 simulator");
+  unsigned int full_length = (unsigned int)arm_dir.size() + name_length;
+  if (full_length > FILENAME_MAX)
+    throw vpException (vpException::dimensionError, "Cannot initialize Afma6 simulator");
+
   // Use here default values of the robot constant parameters.
   switch (tool) {
   case vpAfma6::TOOL_CCMOP: {
@@ -302,11 +314,12 @@ vpSimulatorAfma6::init (vpAfma6::vpAfma6ToolType tool,
       {
         while (get_displayBusy()) vpTime::wait(2);
         free_Bound_scene (&(robotArms[5]));
-        char name_arm[FILENAME_MAX];
+        char *name_arm = new char [full_length];
         strcpy(name_arm, arm_dir.c_str());
         strcat(name_arm,"/afma6_tool_ccmop.bnd");
         set_scene(name_arm, robotArms+5, 1.0);
         set_displayBusy(false);
+        delete [] name_arm;
       }
       break;
     }
@@ -324,11 +337,12 @@ vpSimulatorAfma6::init (vpAfma6::vpAfma6ToolType tool,
       {
         while (get_displayBusy()) vpTime::wait(2);
         free_Bound_scene (&(robotArms[5]));
-        char name_arm[FILENAME_MAX];
+        char *name_arm = new char [full_length];
         strcpy(name_arm, arm_dir.c_str());
         strcat(name_arm,"/afma6_tool_gripper.bnd");
         set_scene(name_arm, robotArms+5, 1.0);
         set_displayBusy(false);
+        delete [] name_arm;
       }
       break;
     }
@@ -346,11 +360,14 @@ vpSimulatorAfma6::init (vpAfma6::vpAfma6ToolType tool,
       {
         while (get_displayBusy()) vpTime::wait(2);
         free_Bound_scene (&(robotArms[5]));
-        char name_arm[FILENAME_MAX];
+
+        char *name_arm = new char [full_length];
+
         strcpy(name_arm, arm_dir.c_str());
         strcat(name_arm,"/afma6_tool_vacuum.bnd");
         set_scene(name_arm, robotArms+5, 1.0);
         set_displayBusy(false);
+        delete [] name_arm;
       }
       break;
     }
@@ -412,6 +429,7 @@ vpSimulatorAfma6::getCameraParameters (vpCameraParameters &cam,
     }
     break;
   }
+  case vpAfma6::TOOL_GENERIC_CAMERA:
   case vpAfma6::TOOL_VACUUM: {
       std::cout << "The generic camera is not handled in vpSimulatorAfma6.cpp" << std::endl;
       break;
@@ -427,30 +445,30 @@ vpSimulatorAfma6::getCameraParameters (vpCameraParameters &cam,
   Get the current intrinsic camera parameters obtained by calibration.
 
   \param cam : In output, camera parameters to fill.
-  \param I : A B&W image send by the current camera in use.
+  \param I_ : A B&W image send by the current camera in use.
 
   \warning The image size must be : 640x480 !
 */
 void
 vpSimulatorAfma6::getCameraParameters (vpCameraParameters &cam,
-			      const vpImage<unsigned char> &I)
+            const vpImage<unsigned char> &I_)
 {
-  getCameraParameters(cam,I.getWidth(),I.getHeight());
+  getCameraParameters(cam,I_.getWidth(),I_.getHeight());
 }
 
 /*!
   Get the current intrinsic camera parameters obtained by calibration.
 
   \param cam : In output, camera parameters to fill.
-  \param I : A B&W image send by the current camera in use.
+  \param I_ : A B&W image send by the current camera in use.
 
   \warning The image size must be : 640x480 !
 */
 void
 vpSimulatorAfma6::getCameraParameters (vpCameraParameters &cam,
-				 const vpImage<vpRGBa> &I)
+         const vpImage<vpRGBa> &I_)
 {
-  getCameraParameters(cam,I.getWidth(),I.getHeight());
+  getCameraParameters(cam,I_.getWidth(),I_.getHeight());
 }
 
 
@@ -722,7 +740,7 @@ vpSimulatorAfma6::compute_fMi()
 //   fMit[7] = fMit[6] * cMe;
   vpAfma6::get_fMc(q,fMit[7]);
   
-  #if defined(WIN32)
+  #if defined(_WIN32)
   WaitForSingleObject(mutex_fMi,INFINITE);
   for (int i = 0; i < 8; i++)
     fMi[i] = fMit[i];
@@ -970,24 +988,24 @@ vpSimulatorAfma6::computeArticularVelocity()
   {
     case vpRobot::CAMERA_FRAME :
     {
-      vpMatrix eJe;
+      vpMatrix eJe_;
       vpVelocityTwistMatrix eVc(_eMc);
-      vpAfma6::get_eJe(articularCoordinates,eJe);
-      eJe = eJe.pseudoInverse();
+      vpAfma6::get_eJe(articularCoordinates,eJe_);
+      eJe_ = eJe_.pseudoInverse();
       if (singularityManagement)
-        singularityTest(articularCoordinates,eJe);
-      articularVelocity = eJe*eVc*velocityframe;
+        singularityTest(articularCoordinates,eJe_);
+      articularVelocity = eJe_*eVc*velocityframe;
       set_artVel (articularVelocity);
       break;
     }
     case vpRobot::REFERENCE_FRAME :
     {
-      vpMatrix fJe;
-      vpAfma6::get_fJe(articularCoordinates,fJe);
-      fJe = fJe.pseudoInverse();
+      vpMatrix fJe_;
+      vpAfma6::get_fJe(articularCoordinates,fJe_);
+      fJe_ = fJe_.pseudoInverse();
       if (singularityManagement)
-        singularityTest(articularCoordinates,fJe);
-      articularVelocity = fJe*velocityframe;
+        singularityTest(articularCoordinates,fJe_);
+      articularVelocity = fJe_*velocityframe;
       set_artVel (articularVelocity);
       break;
     }
@@ -1095,10 +1113,10 @@ vpSimulatorAfma6::getVelocity (const vpRobot::vpControlFrameType frame, vpColVec
   {
     case vpRobot::CAMERA_FRAME : 
     {
-      vpMatrix eJe;
+      vpMatrix eJe_;
       vpVelocityTwistMatrix cVe(_eMc);
-      vpAfma6::get_eJe(articularCoordinates,eJe);
-      vel = cVe*eJe*articularVelocity;
+      vpAfma6::get_eJe(articularCoordinates,eJe_);
+      vel = cVe*eJe_*articularVelocity;
       break ;
     }
     case vpRobot::ARTICULAR_FRAME : 
@@ -1108,9 +1126,9 @@ vpSimulatorAfma6::getVelocity (const vpRobot::vpControlFrameType frame, vpColVec
     }
     case vpRobot::REFERENCE_FRAME : 
     {
-      vpMatrix fJe;
-      vpAfma6::get_fJe(articularCoordinates,fJe);
-      vel = fJe*articularVelocity;
+      vpMatrix fJe_;
+      vpAfma6::get_fJe(articularCoordinates,fJe_);
+      vel = fJe_*articularVelocity;
       break ;
     }
     case vpRobot::MIXT_FRAME : 
@@ -1126,6 +1144,29 @@ vpSimulatorAfma6::getVelocity (const vpRobot::vpControlFrameType frame, vpColVec
   }
 }
 
+/*!
+  Get the robot time stamped velocities.
+
+  \param frame : Frame in wich velocities are mesured.
+
+  \param vel : Measured velocities. Translations are expressed in m/s
+  and rotations in rad/s.
+
+  \param timestamp : Unix time in second since January 1st 1970.
+
+  \warning In camera frame, reference frame and mixt frame, the representation
+  of the rotation is ThetaU. In that cases, \f$velocity = [\dot x, \dot y, \dot
+  z, \dot {\theta U}_x, \dot {\theta U}_y, \dot {\theta U}_z]\f$.
+
+  \sa getVelocity(const vpRobot::vpControlFrameType frame, vpColVector & vel)
+*/
+void
+vpSimulatorAfma6::getVelocity (const vpRobot::vpControlFrameType frame, vpColVector & vel, double &timestamp)
+{
+  timestamp = vpTime::measureTimeSecond();
+  getVelocity(frame, vel);
+}
+
 /*!
   Get the robot velocities.
 
@@ -1171,12 +1212,33 @@ int main()
 vpColVector
 vpSimulatorAfma6::getVelocity (vpRobot::vpControlFrameType frame)
 {
-  vpColVector velocity(6);
-  getVelocity (frame, velocity);
+  vpColVector vel(6);
+  getVelocity (frame, vel);
 
-  return velocity;
+  return vel;
 }
 
+/*!
+  Get the time stamped robot velocities.
+
+  \param frame : Frame in wich velocities are mesured.
+
+  \param timestamp : Unix time in second since January 1st 1970.
+
+  \return Measured velocities. Translations are expressed in m/s
+  and rotations in rad/s.
+
+  \sa getVelocity(vpRobot::vpControlFrameType frame)
+*/
+vpColVector
+vpSimulatorAfma6::getVelocity (vpRobot::vpControlFrameType frame, double &timestamp)
+{
+  timestamp = vpTime::measureTimeSecond();
+  vpColVector vel(6);
+  getVelocity (frame, vel);
+
+  return vel;
+}
 
 void 
 vpSimulatorAfma6::findHighestPositioningSpeed(vpColVector &q)
@@ -1299,10 +1361,10 @@ vpSimulatorAfma6::setPosition(const vpRobot::vpControlFrameType frame,const vpCo
       vpRotationMatrix cRc2(rxyz);
       vpHomogeneousMatrix cMc2(txyz, cRc2);
 
-      vpHomogeneousMatrix fMc;
-      vpAfma6::get_fMc(articularCoordinates, fMc);
+      vpHomogeneousMatrix fMc_;
+      vpAfma6::get_fMc(articularCoordinates, fMc_);
 	
-      vpHomogeneousMatrix fMc2 = fMc * cMc2;
+      vpHomogeneousMatrix fMc2 = fMc_ * cMc2;
 	
       do
       {
@@ -1372,13 +1434,13 @@ vpSimulatorAfma6::setPosition(const vpRobot::vpControlFrameType frame,const vpCo
       }
 
       vpRotationMatrix fRc(rxyz);
-      vpHomogeneousMatrix fMc(txyz, fRc);
+      vpHomogeneousMatrix fMc_(txyz, fRc);
 
       do
       {
         articularCoordinates = get_artCoord();
         qdes = articularCoordinates;
-        nbSol = getInverseKinematics(fMc, qdes, true, verbose_);
+        nbSol = getInverseKinematics(fMc_, qdes, true, verbose_);
         setVelocityCalled = true;
         if (nbSol > 0)
         {
@@ -1606,8 +1668,8 @@ int main()
 }
   \endcode
 
-  \sa setPosition(const vpRobot::vpControlFrameType frame, const
-  vpColVector & r)
+  \sa getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q, double &timestamp)
+  \sa setPosition(const vpRobot::vpControlFrameType frame, const vpColVector & r)
 
 */
 void 
@@ -1631,20 +1693,20 @@ vpSimulatorAfma6::getPosition(const vpRobot::vpControlFrameType frame, vpColVect
       
     case vpRobot::REFERENCE_FRAME:
     {
-      vpHomogeneousMatrix fMc;
-      vpAfma6::get_fMc (get_artCoord(), fMc);
+      vpHomogeneousMatrix fMc_;
+      vpAfma6::get_fMc (get_artCoord(), fMc_);
       
       vpRotationMatrix fRc;
-      fMc.extract(fRc);
+      fMc_.extract(fRc);
       vpRxyzVector rxyz(fRc);
       
       vpTranslationVector txyz;
-      fMc.extract(txyz);
+      fMc_.extract(txyz);
       
       for (unsigned int i=0; i <3; i++)
       {
         q[i] = txyz[i];
-	q[i+3] = rxyz[i];
+        q[i+3] = rxyz[i];
       }
       break ;
     }
@@ -1660,6 +1722,39 @@ vpSimulatorAfma6::getPosition(const vpRobot::vpControlFrameType frame, vpColVect
   }
 }
 
+/*!
+
+  Get the current time stamped position of the robot.
+
+  \param frame : Control frame type in which to get the position, either :
+  - in the camera cartesien frame,
+  - joint (articular) coordinates of each axes
+  - in a reference or fixed cartesien frame attached to the robot base
+  - in a mixt cartesien frame (translation in reference
+  frame, and rotation in camera frame)
+
+  \param q : Measured position of the robot:
+  - in camera cartesien frame, a 6 dimension vector, set to 0.
+
+  - in articular, a 6 dimension vector corresponding to the joint
+  position of each dof in radians.
+
+  - in reference frame, a 6 dimension vector, the first 3 values correspond to
+  the translation tx, ty, tz in meters (like a vpTranslationVector), and the
+  last 3 values to the rx, ry, rz rotation (like a vpRxyzVector). The code
+  below show how to convert this position into a vpHomogenousMatrix:
+
+  \param timestamp : Unix time in second since January 1st 1970.
+
+  \sa getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q)
+ */
+void
+vpSimulatorAfma6::getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q, double &timestamp)
+{
+  timestamp = vpTime::measureTimeSecond();
+  getPosition(frame, q);
+}
+
 
 /*!
   Get the current position of the robot.
@@ -1672,8 +1767,7 @@ vpSimulatorAfma6::getPosition(const vpRobot::vpControlFrameType frame, vpColVect
   \sa getPosition(const vpRobot::vpControlFrameType frame, vpColVector &)
 */
 void 
-vpSimulatorAfma6::getPosition (const vpRobot::vpControlFrameType frame,   
-                            vpPoseVector &position)
+vpSimulatorAfma6::getPosition (const vpRobot::vpControlFrameType frame, vpPoseVector &position)
 {
   vpColVector posRxyz;
   //recupere  position en Rxyz
@@ -1690,6 +1784,24 @@ vpSimulatorAfma6::getPosition (const vpRobot::vpControlFrameType frame,
   }
 }
 
+/*!
+
+  Get the current time stamped position of the robot.
+
+  Similar as getPosition(const vpRobot::vpControlFrameType frame, vpColVector &, double &)
+
+  The difference is here that the position is returned using a ThetaU
+  representation.
+
+ */
+void
+vpSimulatorAfma6::getPosition(const vpRobot::vpControlFrameType frame,
+                                 vpPoseVector &position, double &timestamp)
+{
+  timestamp = vpTime::measureTimeSecond();
+  getPosition(frame, position);
+}
+
 /*!
   This method enables to set the minimum and maximum joint limits for all the six axis of the robot. The three first values have to be given in meter and the others in radian.
   
@@ -1943,7 +2055,6 @@ robot.setPosition(vpRobot::ARTICULAR_FRAME, q); // Move to the joint position
 bool
 vpSimulatorAfma6::readPosFile(const char *filename, vpColVector &q)
 {
-
   FILE * fd ;
   fd = fopen(filename, "r") ;
   if (fd == NULL)
@@ -1958,15 +2069,16 @@ vpSimulatorAfma6::readPosFile(const char *filename, vpColVector &q)
     // Saut des lignes commencant par #
     if (fgets (line, FILENAME_MAX, fd) != NULL) {
       if ( strncmp (line, "#", 1) != 0) {
-	// La ligne n'est pas un commentaire
-	if ( strncmp (line, head, sizeof(head)-1) == 0) {
-	  sortie = true; 	// Position robot trouvee.
-	}
-// 	else
-// 	  return (false); // fin fichier sans position robot.
+        // La ligne n'est pas un commentaire
+        if ( strncmp (line, head, sizeof(head)-1) == 0) {
+          sortie = true; 	// Position robot trouvee.
+        }
+        // 	else
+        // 	  return (false); // fin fichier sans position robot.
       }
     }
     else {
+      fclose(fd) ;
       return (false);		/* fin fichier 	*/
     }
 
@@ -1975,10 +2087,14 @@ vpSimulatorAfma6::readPosFile(const char *filename, vpColVector &q)
 
   // Lecture des positions
   q.resize(njoint);
-  sscanf(line, "%s %lf %lf %lf %lf %lf %lf",
-	 dummy,
-	 &q[0], &q[1], &q[2],
-	 &q[3], &q[4], &q[5]);
+  int ret = sscanf(line, "%s %lf %lf %lf %lf %lf %lf",
+                   dummy,
+                   &q[0], &q[1], &q[2], &q[3], &q[4], &q[5]);
+
+  if (ret != 7) {
+    fclose(fd) ;
+    return false;
+  }
 
   // converts rotations from degrees into radians
   //q.deg2rad();
@@ -2105,15 +2221,15 @@ vpSimulatorAfma6::get_cVe(vpVelocityTwistMatrix &cVe)
   To compute \f$^e{\bf J}_e\f$, we communicate with the low level
   controller to get the joint position of the robot.
 
-  \param eJe : Robot jacobian \f$^e{\bf J}_e\f$ expressed in the
+  \param eJe_ : Robot jacobian \f$^e{\bf J}_e\f$ expressed in the
   end-effector frame.
 */
 void
-vpSimulatorAfma6::get_eJe(vpMatrix &eJe)
+vpSimulatorAfma6::get_eJe(vpMatrix &eJe_)
 {
   try
   {
-    vpAfma6::get_eJe(get_artCoord(), eJe) ;
+    vpAfma6::get_eJe(get_artCoord(), eJe_) ;
   }
   catch(...)
   {
@@ -2129,16 +2245,16 @@ vpSimulatorAfma6::get_eJe(vpMatrix &eJe)
   To compute \f$^f{\bf J}_e\f$, we communicate with the low level
   controller to get the joint position of the robot.
 
-  \param fJe : Robot jacobian \f$^f{\bf J}_e\f$ expressed in the
+  \param fJe_ : Robot jacobian \f$^f{\bf J}_e\f$ expressed in the
   reference frame.
 */
 void
-vpSimulatorAfma6::get_fJe(vpMatrix &fJe)
+vpSimulatorAfma6::get_fJe(vpMatrix &fJe_)
 {
   try
   {
     vpColVector articularCoordinates = get_artCoord(); 
-    vpAfma6::get_fJe(articularCoordinates, fJe) ;
+    vpAfma6::get_fJe(articularCoordinates, fJe_) ;
   }
   catch(...)
   {
@@ -2182,26 +2298,39 @@ void
 vpSimulatorAfma6::initArms()
 {
   // set scene_dir from #define VISP_SCENE_DIR if it exists
-  std::string scene_dir;
+  std::string scene_dir_;
   if (vpIoTools::checkDirectory(VISP_SCENES_DIR) == true) // directory exists
-    scene_dir = VISP_SCENES_DIR;
+    scene_dir_ = VISP_SCENES_DIR;
   else {
     try {
-      scene_dir = vpIoTools::getenv("VISP_SCENES_DIR");
-      std::cout << "The simulator uses data from VISP_SCENES_DIR=" << scene_dir << std::endl;
+      scene_dir_ = vpIoTools::getenv("VISP_SCENES_DIR");
+      std::cout << "The simulator uses data from VISP_SCENES_DIR=" << scene_dir_ << std::endl;
     }
     catch (...) {
       std::cout << "Cannot get VISP_SCENES_DIR environment variable" << std::endl;
     }
   }
 
-  char name_cam[FILENAME_MAX];
+  unsigned int name_length = 30; // the size of this kind of string "/afma6_arm2.bnd"
+  if (scene_dir_.size() > FILENAME_MAX)
+    throw vpException (vpException::dimensionError, "Cannot initialize Afma6 simulator");
+  unsigned int full_length = (unsigned int)scene_dir_.size() + name_length;
+  if (full_length > FILENAME_MAX)
+    throw vpException (vpException::dimensionError, "Cannot initialize Afma6 simulator");
+
+  char *name_cam = new char [full_length];
 
-  strcpy(name_cam, scene_dir.c_str());
+  strcpy(name_cam, scene_dir_.c_str());
   strcat(name_cam,"/camera.bnd");
   set_scene(name_cam,&camera,cameraFactor);
   
-  char name_arm[FILENAME_MAX];
+  if (arm_dir.size() > FILENAME_MAX)
+    throw vpException (vpException::dimensionError, "Cannot initialize Afma6 simulator");
+  full_length = (unsigned int)arm_dir.size() + name_length;
+  if (full_length > FILENAME_MAX)
+    throw vpException (vpException::dimensionError, "Cannot initialize Afma6 simulator");
+
+  char *name_arm = new char [full_length];
   strcpy(name_arm, arm_dir.c_str());
   strcat(name_arm,"/afma6_gate.bnd");
   set_scene(name_arm, robotArms, 1.0);
@@ -2250,14 +2379,17 @@ vpSimulatorAfma6::initArms()
 //   sceneInitialized = true;
 //   displayObject = true;
   displayCamera = true;
+
+  delete [] name_cam;
+  delete [] name_arm;
 }
 
 
 void 
-vpSimulatorAfma6::getExternalImage(vpImage<vpRGBa> &I)
+vpSimulatorAfma6::getExternalImage(vpImage<vpRGBa> &I_)
 {
   bool changed = false;
-  vpHomogeneousMatrix displacement = navigation(I,changed);
+  vpHomogeneousMatrix displacement = navigation(I_,changed);
 
   //if (displacement[2][3] != 0)
   if (std::fabs(displacement[2][3]) > std::numeric_limits<double>::epsilon())
@@ -2274,13 +2406,13 @@ vpSimulatorAfma6::getExternalImage(vpImage<vpRGBa> &I)
   if( (std::fabs(px_ext-1.) > vpMath::maximum(px_ext,1.)*std::numeric_limits<double>::epsilon()) 
       && (std::fabs(py_ext-1) > vpMath::maximum(py_ext,1.)*std::numeric_limits<double>::epsilon()))
   {
-    u = (double)I.getWidth()/(2*px_ext);
-    v = (double)I.getHeight()/(2*py_ext);
+    u = (double)I_.getWidth()/(2*px_ext);
+    v = (double)I_.getHeight()/(2*py_ext);
   }
   else
   {
-    u = (double)I.getWidth()/(vpMath::minimum(I.getWidth(),I.getHeight()));
-    v = (double)I.getHeight()/(vpMath::minimum(I.getWidth(),I.getHeight()));
+    u = (double)I_.getWidth()/(vpMath::minimum(I_.getWidth(),I_.getHeight()));
+    v = (double)I_.getHeight()/(vpMath::minimum(I_.getWidth(),I_.getHeight()));
   }
 
   float w44o[4][4],w44cext[4][4],x,y,z;
@@ -2300,22 +2432,22 @@ vpSimulatorAfma6::getExternalImage(vpImage<vpRGBa> &I)
   get_fMi(fMit);
   
   vp2jlc_matrix(vpHomogeneousMatrix(0,0,0,0,0,0),w44o);
-  display_scene(w44o,robotArms[0],I, curColor);
+  display_scene(w44o,robotArms[0],I_, curColor);
   
   vp2jlc_matrix(fMit[0],w44o);
-  display_scene(w44o,robotArms[1],I, curColor);
+  display_scene(w44o,robotArms[1],I_, curColor);
   
   vp2jlc_matrix(fMit[2],w44o);
-  display_scene(w44o,robotArms[2],I, curColor);
+  display_scene(w44o,robotArms[2],I_, curColor);
   
   vp2jlc_matrix(fMit[3],w44o);
-  display_scene(w44o,robotArms[3],I, curColor);
+  display_scene(w44o,robotArms[3],I_, curColor);
   
   vp2jlc_matrix(fMit[4],w44o);
-  display_scene(w44o,robotArms[4],I, curColor);
+  display_scene(w44o,robotArms[4],I_, curColor);
   
   vp2jlc_matrix(fMit[5],w44o);
-  display_scene(w44o,robotArms[5],I, curColor);
+  display_scene(w44o,robotArms[5],I_, curColor);
 
   if (displayCamera)
   {
@@ -2324,13 +2456,13 @@ vpSimulatorAfma6::getExternalImage(vpImage<vpRGBa> &I)
     cMe = cMe.inverse();
     cMe = fMit[6] * cMe;
     vp2jlc_matrix(cMe,w44o);
-    display_scene(w44o,camera, I, camColor);
+    display_scene(w44o,camera, I_, camColor);
   }
   
   if (displayObject)
   {
     vp2jlc_matrix(fMo,w44o);
-    display_scene(w44o,scene,I, curColor);
+    display_scene(w44o,scene,I_, curColor);
   }
 }
 
@@ -2345,24 +2477,24 @@ vpSimulatorAfma6::getExternalImage(vpImage<vpRGBa> &I)
   \f${^f}{\bf M}_c = {^f}{\bf M}_o \; ({^c}{\bf M}_o)^{-1}\f$, and from the inverse kinematics
   set the joint positions \f${\bf q}\f$ that corresponds to the \f${^f}{\bf M}_c\f$ transformation.
 
-  \param cMo : the desired pose of the camera.
+  \param cMo_ : the desired pose of the camera.
 
   \return false if the robot kinematics is not able to reach the cMo position.
 
 */
 bool
-vpSimulatorAfma6::initialiseCameraRelativeToObject(const vpHomogeneousMatrix &cMo)
+vpSimulatorAfma6::initialiseCameraRelativeToObject(const vpHomogeneousMatrix &cMo_)
 {
   vpColVector stop(6);
   bool status = true;
   stop = 0;
   set_artVel(stop);
   set_velocity(stop);
-  vpHomogeneousMatrix fMc;
-  fMc = fMo * cMo.inverse();
+  vpHomogeneousMatrix fMc_;
+  fMc_ = fMo * cMo_.inverse();
   
   vpColVector articularCoordinates = get_artCoord();
-  int nbSol = getInverseKinematics(fMc, articularCoordinates, true, verbose_);
+  int nbSol = getInverseKinematics(fMc_, articularCoordinates, true, verbose_);
   
   if (nbSol == 0) {
     status = false;
@@ -2389,10 +2521,10 @@ vpSimulatorAfma6::initialiseCameraRelativeToObject(const vpHomogeneousMatrix &cM
   \f${^f}{\bf M}_o = {^f}{\bf M}_c \; {^c}{\bf M}_o\f$ where \f$ {^f}{\bf M}_c = f({\bf q})\f$
   with \f${\bf q}\f$ the robot joint position
 
-  \param cMo : the desired pose of the camera.
+  \param cMo_ : the desired pose of the camera.
 */
 void 
-vpSimulatorAfma6::initialiseObjectRelativeToCamera(const vpHomogeneousMatrix &cMo)
+vpSimulatorAfma6::initialiseObjectRelativeToCamera(const vpHomogeneousMatrix &cMo_)
 {
   vpColVector stop(6);
   stop = 0;
@@ -2400,21 +2532,21 @@ vpSimulatorAfma6::initialiseObjectRelativeToCamera(const vpHomogeneousMatrix &cM
   set_velocity(stop);
   vpHomogeneousMatrix fMit[8];
   get_fMi(fMit);
-  fMo = fMit[7] * cMo;
+  fMo = fMit[7] * cMo_;
 }
 
 /*!
   This method enable to move the robot with respect to the initialized object.
   The robot trajectory is a straight line from the current position to the one corresponding to the desired pose (3D visual servoing).
 
-  \param cdMo : the desired pose of the camera wrt. the object
+  \param cdMo_ : the desired pose of the camera wrt. the object
   \param Iint : pointer to the image where the internal view is displayed
   \param errMax : maximum error to consider the pose is reached
 
   \return True is the pose is reached, False else
 */
 bool
-vpSimulatorAfma6::setPosition(const vpHomogeneousMatrix &cdMo, vpImage<unsigned char> *Iint, const double &errMax)
+vpSimulatorAfma6::setPosition(const vpHomogeneousMatrix &cdMo_, vpImage<unsigned char> *Iint, const double &errMax)
 {
 	// get rid of max velocity
 	double vMax = getMaxTranslationVelocity();
@@ -2430,7 +2562,6 @@ vpSimulatorAfma6::setPosition(const vpHomogeneousMatrix &cdMo, vpImage<unsigned
 	double t;
 
 	vpVelocityTwistMatrix cVe;
-	vpMatrix eJe;
 
 	unsigned int i,iter=0;
 	while((iter++<300) & (err.euclideanNorm()>errMax))
@@ -2446,7 +2577,7 @@ vpSimulatorAfma6::setPosition(const vpHomogeneousMatrix &cdMo, vpImage<unsigned
 		}
 
 		// update pose error
-		cdMc = cdMo*get_cMo().inverse();
+    cdMc = cdMo_*get_cMo().inverse();
 		cdMc.extract(cdRc);
 		cdMc.extract(cdTc);
 		cdTUc.buildFrom(cdRc);
diff --git a/src/robot/simulator-robot/vpSimulatorAfma6.h b/src/robot/simulator-robot/vpSimulatorAfma6.h
index f515bd4d..c2e86813 100644
--- a/src/robot/simulator-robot/vpSimulatorAfma6.h
+++ b/src/robot/simulator-robot/vpSimulatorAfma6.h
@@ -3,7 +3,7 @@
  * $Id: vpSimulatorAfma6.h 2598 2010-06-02 09:20:22Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -52,7 +52,7 @@
 
 #include <string>
 
-#if defined(WIN32) || defined(VISP_HAVE_PTHREAD)
+#if defined(_WIN32) || defined(VISP_HAVE_PTHREAD)
 
 /*!
   \class vpSimulatorAfma6
@@ -209,11 +209,14 @@ public:
     void getDisplacement(const vpRobot::vpControlFrameType frame,
                          vpColVector &displacement);
     void getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q);
-    void getPosition (const vpRobot::vpControlFrameType frame,
-                      vpPoseVector &position);
+    void getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q, double &timestamp);
+    void getPosition(const vpRobot::vpControlFrameType frame, vpPoseVector &position);
+    void getPosition(const vpRobot::vpControlFrameType frame, vpPoseVector &position, double &timestamp);
     double getPositioningVelocity (void){return positioningVelocity;}
     void getVelocity(const vpRobot::vpControlFrameType frame, vpColVector &q);
+    void getVelocity(const vpRobot::vpControlFrameType frame, vpColVector &q, double &timestamp);
     vpColVector getVelocity (const vpRobot::vpControlFrameType frame);
+    vpColVector getVelocity (const vpRobot::vpControlFrameType frame, double &timestamp);
 
     void get_cMe(vpHomogeneousMatrix &cMe);
     void get_cVe(vpVelocityTwistMatrix &cVe);
@@ -240,7 +243,7 @@ public:
                       const double pos5,
                       const double pos6);
     void setPosition(const char *filename);
-    void setPositioningVelocity (const double velocity) {positioningVelocity = velocity;}
+    void setPositioningVelocity (const double vel) {positioningVelocity = vel;}
     bool setPosition(const vpHomogeneousMatrix &cdMo, vpImage<unsigned char> *Iint=NULL, const double &errMax = 0.001);
     vpRobot::vpRobotStateType setRobotState (const vpRobot::vpRobotStateType newState);
     
@@ -255,7 +258,7 @@ protected:
     void findHighestPositioningSpeed(vpColVector &q);
     void getExternalImage(vpImage<vpRGBa> &I);
     inline void get_fMi(vpHomogeneousMatrix *fMit) {
-#if defined(WIN32)
+#if defined(_WIN32)
       WaitForSingleObject(mutex_fMi,INFINITE);
       for (int i = 0; i < 8; i++)
         fMit[i] = fMi[i];
diff --git a/src/robot/simulator-robot/vpSimulatorCamera.cpp b/src/robot/simulator-robot/vpSimulatorCamera.cpp
index af70bb3c..f88eda38 100644
--- a/src/robot/simulator-robot/vpSimulatorCamera.cpp
+++ b/src/robot/simulator-robot/vpSimulatorCamera.cpp
@@ -3,7 +3,7 @@
  * $Id: vpSimulatorCamera.cpp 2456 2010-01-07 10:33:12Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -57,7 +57,7 @@
   world frame and camera frame to identity.
 
 */
-vpSimulatorCamera::vpSimulatorCamera()
+vpSimulatorCamera::vpSimulatorCamera() : wMc_()
 {
   init() ;
 }
@@ -104,7 +104,7 @@ vpSimulatorCamera::~vpSimulatorCamera()
 
 */
 void
-vpSimulatorCamera::get_cVe(vpVelocityTwistMatrix &cVe)
+vpSimulatorCamera::get_cVe(vpVelocityTwistMatrix &cVe) const
 {
   vpVelocityTwistMatrix cVe_;
   cVe = cVe_;
@@ -114,13 +114,13 @@ vpSimulatorCamera::get_cVe(vpVelocityTwistMatrix &cVe)
   Get the robot jacobian expressed in the end-effector frame.
   For that simple robot the Jacobian is the identity.
 
-  \param eJe : A 6 by 6 matrix representing the robot jacobian \f$ {^e}{\bf
+  \param eJe_ : A 6 by 6 matrix representing the robot jacobian \f$ {^e}{\bf
   J}_e\f$ expressed in the end-effector frame. Yhis matrix is equal to identity.
 */
 void
-vpSimulatorCamera::get_eJe(vpMatrix &eJe)
+vpSimulatorCamera::get_eJe(vpMatrix &eJe_)
 {
-  eJe = this->eJe ;
+  eJe_ = this->eJe ;
 }
 
 /*!
diff --git a/src/robot/simulator-robot/vpSimulatorCamera.h b/src/robot/simulator-robot/vpSimulatorCamera.h
index 942cc320..70f22cf6 100644
--- a/src/robot/simulator-robot/vpSimulatorCamera.h
+++ b/src/robot/simulator-robot/vpSimulatorCamera.h
@@ -3,7 +3,7 @@
  * $Id: vpSimulatorCamera.h 2456 2010-01-07 10:33:12Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -117,7 +117,7 @@ public:
   virtual ~vpSimulatorCamera() ;
 
 public:
-  void get_cVe(vpVelocityTwistMatrix &cVe);
+  void get_cVe(vpVelocityTwistMatrix &cVe) const;
   void get_eJe(vpMatrix &eJe);
 
   void getPosition(vpHomogeneousMatrix &wMc) const;
diff --git a/src/robot/simulator-robot/vpSimulatorPioneer.cpp b/src/robot/simulator-robot/vpSimulatorPioneer.cpp
index a3b3e7c2..eb664593 100644
--- a/src/robot/simulator-robot/vpSimulatorPioneer.cpp
+++ b/src/robot/simulator-robot/vpSimulatorPioneer.cpp
@@ -3,7 +3,7 @@
  * $Id: vpSimulatorPioneer.cpp 2456 2010-01-07 10:33:12Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,6 +58,7 @@
 
 */
 vpSimulatorPioneer::vpSimulatorPioneer()
+  : wMc_(), wMe_(), xm_(0), ym_(0), theta_(0)
 {
   init() ;
 }
@@ -98,13 +99,13 @@ vpSimulatorPioneer::~vpSimulatorPioneer()
   Get the robot jacobian expressed in the end-effector frame.
   The jacobian expression is given in vpPioneer class.
 
-  \param eJe : A 6 by 2 matrix representing the robot jacobian \f$ {^e}{\bf
+  \param _eJe : A 6 by 2 matrix representing the robot jacobian \f$ {^e}{\bf
   J}_e\f$ expressed in the end-effector frame.
 */
 void
-vpSimulatorPioneer::get_eJe(vpMatrix &eJe)
+vpSimulatorPioneer::get_eJe(vpMatrix &_eJe)
 {
-  eJe = vpUnicycle::get_eJe();
+  _eJe = vpUnicycle::get_eJe();
 }
 
 
diff --git a/src/robot/simulator-robot/vpSimulatorPioneer.h b/src/robot/simulator-robot/vpSimulatorPioneer.h
index d7854605..1357e2b7 100644
--- a/src/robot/simulator-robot/vpSimulatorPioneer.h
+++ b/src/robot/simulator-robot/vpSimulatorPioneer.h
@@ -3,7 +3,7 @@
  * $Id: vpSimulatorPioneer.h 2456 2010-01-07 10:33:12Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/robot/simulator-robot/vpSimulatorPioneerPan.cpp b/src/robot/simulator-robot/vpSimulatorPioneerPan.cpp
index 791333f5..25c82817 100644
--- a/src/robot/simulator-robot/vpSimulatorPioneerPan.cpp
+++ b/src/robot/simulator-robot/vpSimulatorPioneerPan.cpp
@@ -3,7 +3,7 @@
  * $Id: vpSimulatorPioneerPan.cpp 2456 2010-01-07 10:33:12Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -62,7 +62,7 @@
   setSamplingTime().
 
 */
-vpSimulatorPioneerPan::vpSimulatorPioneerPan()
+vpSimulatorPioneerPan::vpSimulatorPioneerPan() : wMc_(), wMm_(), xm_(0), ym_(0), theta_(0), q_pan_()
 {
   init() ;
 }
@@ -107,13 +107,13 @@ vpSimulatorPioneerPan::~vpSimulatorPioneerPan()
   Get the robot jacobian expressed in the end-effector frame.
   The jacobian expression is given in vpPioneerPan class.
 
-  \param eJe : A 6 by 3 matrix representing the robot jacobian \f$ {^e}{\bf
+  \param _eJe : A 6 by 3 matrix representing the robot jacobian \f$ {^e}{\bf
   J}_e\f$ expressed in the end-effector frame.
 */
 void
-vpSimulatorPioneerPan::get_eJe(vpMatrix &eJe)
+vpSimulatorPioneerPan::get_eJe(vpMatrix &_eJe)
 {
-  eJe = vpUnicycle::get_eJe();
+  _eJe = vpUnicycle::get_eJe();
 }
 
 /*!
diff --git a/src/robot/simulator-robot/vpSimulatorPioneerPan.h b/src/robot/simulator-robot/vpSimulatorPioneerPan.h
index c3facc8d..d01e5d59 100644
--- a/src/robot/simulator-robot/vpSimulatorPioneerPan.h
+++ b/src/robot/simulator-robot/vpSimulatorPioneerPan.h
@@ -3,7 +3,7 @@
  * $Id: vpSimulatorPioneerPan.h 2456 2010-01-07 10:33:12Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/robot/simulator-robot/vpSimulatorViper850.cpp b/src/robot/simulator-robot/vpSimulatorViper850.cpp
index 91c966cf..364cea40 100644
--- a/src/robot/simulator-robot/vpSimulatorViper850.cpp
+++ b/src/robot/simulator-robot/vpSimulatorViper850.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSimulatorViper850.cpp 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpSimulatorViper850.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -50,21 +50,24 @@
 #include <cmath>    // std::fabs
 #include <limits>   // numeric_limits
 #include <string>
-#if defined(WIN32) || defined(VISP_HAVE_PTHREAD)
+#if defined(_WIN32) || defined(VISP_HAVE_PTHREAD)
 
 const double vpSimulatorViper850::defaultPositioningVelocity = 25.0;
 
 /*!
   Basic constructor
 */
-vpSimulatorViper850::vpSimulatorViper850():vpRobotWireFrameSimulator(), vpViper850()
+vpSimulatorViper850::vpSimulatorViper850()
+  : vpRobotWireFrameSimulator(), vpViper850(),
+    q_prev_getdis(), first_time_getdis(true), positioningVelocity(defaultPositioningVelocity),
+    zeroPos(), reposPos(), toolCustom(false), arm_dir()
 {
   init();
   initDisplay();
   
   tcur = vpTime::measureTimeMs();
 
-  #if defined(WIN32)
+  #if defined(_WIN32)
   mutex_fMi = CreateMutex(NULL,FALSE,NULL);
   mutex_artVel = CreateMutex(NULL,FALSE,NULL);
   mutex_artCoord = CreateMutex(NULL,FALSE,NULL);
@@ -99,17 +102,20 @@ vpSimulatorViper850::vpSimulatorViper850():vpRobotWireFrameSimulator(), vpViper8
 /*!
   Constructor used to enable or disable the external view of the robot.
 
-  \param display : When true, enables the display of the external view.
+  \param do_display : When true, enables the display of the external view.
 
 */
-vpSimulatorViper850::vpSimulatorViper850(bool display):vpRobotWireFrameSimulator(display)
+vpSimulatorViper850::vpSimulatorViper850(bool do_display)
+  : vpRobotWireFrameSimulator(do_display),
+    q_prev_getdis(), first_time_getdis(true), positioningVelocity(defaultPositioningVelocity),
+    zeroPos(), reposPos(), toolCustom(false), arm_dir()
 {
   init();
   initDisplay();
     
   tcur = vpTime::measureTimeMs();
   
-    #if defined(WIN32)
+    #if defined(_WIN32)
   mutex_fMi = CreateMutex(NULL,FALSE,NULL);
   mutex_artVel = CreateMutex(NULL,FALSE,NULL);
   mutex_artCoord = CreateMutex(NULL,FALSE,NULL);
@@ -148,7 +154,7 @@ vpSimulatorViper850::~vpSimulatorViper850()
 {
   robotStop = true;
   
-  #if defined(WIN32)
+  #if defined(_WIN32)
   WaitForSingleObject(hThread,INFINITE);
   CloseHandle(hThread);
   CloseHandle(mutex_fMi);
@@ -276,15 +282,15 @@ vpSimulatorViper850::initDisplay()
 
   \param tool : Tool to use.
 
-  \param projModel : Projection model associated to the camera.
+  \param proj_model : Projection model associated to the camera.
 
   \sa vpCameraParameters, init()
 */
 void
 vpSimulatorViper850::init (vpViper850::vpToolType tool,
-		       vpCameraParameters::vpCameraParametersProjType projModel)
+           vpCameraParameters::vpCameraParametersProjType proj_model)
 {
-  this->projModel = projModel;
+  this->projModel = proj_model;
   
   // Use here default values of the robot constant parameters.
   switch (tool) {
@@ -383,30 +389,30 @@ vpSimulatorViper850::getCameraParameters (vpCameraParameters &cam,
   Get the current intrinsic camera parameters obtained by calibration.
 
   \param cam : In output, camera parameters to fill.
-  \param I : A B&W image send by the current camera in use.
+  \param I_ : A B&W image send by the current camera in use.
 
   \warning The image size must be : 640x480 !
 */
 void
 vpSimulatorViper850::getCameraParameters (vpCameraParameters &cam,
-			      const vpImage<unsigned char> &I)
+                                          const vpImage<unsigned char> &I_)
 {
-  getCameraParameters(cam,I.getWidth(),I.getHeight());
+  getCameraParameters(cam,I_.getWidth(),I_.getHeight());
 }
 
 /*!
   Get the current intrinsic camera parameters obtained by calibration.
 
   \param cam : In output, camera parameters to fill.
-  \param I : A B&W image send by the current camera in use.
+  \param I_ : A B&W image send by the current camera in use.
 
   \warning The image size must be : 640x480 !
 */
 void
 vpSimulatorViper850::getCameraParameters (vpCameraParameters &cam,
-				 const vpImage<vpRGBa> &I)
+                                          const vpImage<vpRGBa> &I_)
 {
-  getCameraParameters(cam,I.getWidth(),I.getHeight());
+  getCameraParameters(cam,I_.getWidth(),I_.getHeight());
 }
 
 
@@ -689,7 +695,7 @@ vpSimulatorViper850::compute_fMi()
 //   fMit[7] = fMit[6] * cMe;
   vpViper::get_fMc(q,fMit[7]);
   
-  #if defined(WIN32)
+  #if defined(_WIN32)
   WaitForSingleObject(mutex_fMi,INFINITE);
   for (int i = 0; i < 8; i++)
     fMi[i] = fMit[i];
@@ -937,24 +943,24 @@ vpSimulatorViper850::computeArticularVelocity()
   {
     case vpRobot::CAMERA_FRAME :
     {
-      vpMatrix eJe;
+      vpMatrix eJe_;
       vpVelocityTwistMatrix eVc(eMc);
-      vpViper850::get_eJe(articularCoordinates,eJe);
-      eJe = eJe.pseudoInverse();
+      vpViper850::get_eJe(articularCoordinates,eJe_);
+      eJe_ = eJe_.pseudoInverse();
       if (singularityManagement)
-        singularityTest(articularCoordinates,eJe);
-      articularVelocity = eJe*eVc*velocityframe;
+        singularityTest(articularCoordinates,eJe_);
+      articularVelocity = eJe_*eVc*velocityframe;
       set_artVel (articularVelocity);
       break;
     }
     case vpRobot::REFERENCE_FRAME :
     {
-      vpMatrix fJe;
-      vpViper850::get_fJe(articularCoordinates,fJe);
-      fJe = fJe.pseudoInverse();
+      vpMatrix fJe_;
+      vpViper850::get_fJe(articularCoordinates,fJe_);
+      fJe_ = fJe_.pseudoInverse();
       if (singularityManagement)
-        singularityTest(articularCoordinates,fJe);
-      articularVelocity = fJe*velocityframe;
+        singularityTest(articularCoordinates,fJe_);
+      articularVelocity = fJe_*velocityframe;
       set_artVel (articularVelocity);
       break;
     }
@@ -1062,10 +1068,10 @@ vpSimulatorViper850::getVelocity (const vpRobot::vpControlFrameType frame, vpCol
   {
     case vpRobot::CAMERA_FRAME : 
     {
-      vpMatrix eJe;
+      vpMatrix eJe_;
       vpVelocityTwistMatrix cVe(eMc);
-      vpViper850::get_eJe(articularCoordinates,eJe);
-      vel = cVe*eJe*articularVelocity;
+      vpViper850::get_eJe(articularCoordinates,eJe_);
+      vel = cVe*eJe_*articularVelocity;
       break ;
     }
     case vpRobot::ARTICULAR_FRAME : 
@@ -1075,9 +1081,9 @@ vpSimulatorViper850::getVelocity (const vpRobot::vpControlFrameType frame, vpCol
     }
     case vpRobot::REFERENCE_FRAME : 
     {
-      vpMatrix fJe;
-      vpViper850::get_fJe(articularCoordinates,fJe);
-      vel = fJe*articularVelocity;
+      vpMatrix fJe_;
+      vpViper850::get_fJe(articularCoordinates,fJe_);
+      vel = fJe_*articularVelocity;
       break ;
     }
     case vpRobot::MIXT_FRAME : 
@@ -1093,6 +1099,29 @@ vpSimulatorViper850::getVelocity (const vpRobot::vpControlFrameType frame, vpCol
   }
 }
 
+/*!
+  Get the robot time stamped velocities.
+
+  \param frame : Frame in wich velocities are mesured.
+
+  \param vel : Measured velocities. Translations are expressed in m/s
+  and rotations in rad/s.
+
+  \param timestamp : Unix time in second since January 1st 1970.
+
+  \warning In camera frame, reference frame and mixt frame, the representation
+  of the rotation is ThetaU. In that cases, \f$velocity = [\dot x, \dot y, \dot
+  z, \dot {\theta U}_x, \dot {\theta U}_y, \dot {\theta U}_z]\f$.
+
+  \sa getVelocity(const vpRobot::vpControlFrameType frame, vpColVector & vel)
+*/
+void
+vpSimulatorViper850::getVelocity (const vpRobot::vpControlFrameType frame, vpColVector & vel, double &timestamp)
+{
+  timestamp = vpTime::measureTimeSecond();
+  getVelocity(frame, vel);
+}
+
 /*!
   Get the robot velocities.
 
@@ -1138,12 +1167,33 @@ int main()
 vpColVector
 vpSimulatorViper850::getVelocity (vpRobot::vpControlFrameType frame)
 {
-  vpColVector velocity(6);
-  getVelocity (frame, velocity);
+  vpColVector vel(6);
+  getVelocity (frame, vel);
 
-  return velocity;
+  return vel;
 }
 
+/*!
+  Get the time stamped robot velocities.
+
+  \param frame : Frame in wich velocities are mesured.
+
+  \param timestamp : Unix time in second since January 1st 1970.
+
+  \return Measured velocities. Translations are expressed in m/s
+  and rotations in rad/s.
+
+  \sa getVelocity(vpRobot::vpControlFrameType frame)
+*/
+vpColVector
+vpSimulatorViper850::getVelocity (vpRobot::vpControlFrameType frame, double &timestamp)
+{
+  timestamp = vpTime::measureTimeSecond();
+  vpColVector vel(6);
+  getVelocity (frame, vel);
+
+  return vel;
+}
 
 void 
 vpSimulatorViper850::findHighestPositioningSpeed(vpColVector &q)
@@ -1266,10 +1316,10 @@ vpSimulatorViper850::setPosition(const vpRobot::vpControlFrameType frame,const v
       vpRotationMatrix cRc2(rxyz);
       vpHomogeneousMatrix cMc2(txyz, cRc2);
 
-      vpHomogeneousMatrix fMc;
-      vpViper850::get_fMc(articularCoordinates, fMc);
+      vpHomogeneousMatrix fMc_;
+      vpViper850::get_fMc(articularCoordinates, fMc_);
 	
-      vpHomogeneousMatrix fMc2 = fMc * cMc2;
+      vpHomogeneousMatrix fMc2 = fMc_ * cMc2;
 	
       do
       {
@@ -1339,13 +1389,13 @@ vpSimulatorViper850::setPosition(const vpRobot::vpControlFrameType frame,const v
       }
 
       vpRotationMatrix fRc(rxyz);
-      vpHomogeneousMatrix fMc(txyz, fRc);
+      vpHomogeneousMatrix fMc_(txyz, fRc);
 
       do
       {
         articularCoordinates = get_artCoord();
         qdes = articularCoordinates;
-        nbSol = getInverseKinematics(fMc, qdes, verbose_);
+        nbSol = getInverseKinematics(fMc_, qdes, verbose_);
         if (nbSol > 0)
         {
           error = qdes - articularCoordinates;
@@ -1573,8 +1623,8 @@ int main()
 }
   \endcode
 
-  \sa setPosition(const vpRobot::vpControlFrameType frame, const
-  vpColVector & r)
+  \sa getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q, double &timestamp)
+  \sa setPosition(const vpRobot::vpControlFrameType frame, const vpColVector & r)
 
 */
 void 
@@ -1598,15 +1648,15 @@ vpSimulatorViper850::getPosition(const vpRobot::vpControlFrameType frame, vpColV
       
     case vpRobot::REFERENCE_FRAME:
     {
-      vpHomogeneousMatrix fMc;
-      vpViper::get_fMc (get_artCoord(), fMc);
+      vpHomogeneousMatrix fMc_;
+      vpViper::get_fMc (get_artCoord(), fMc_);
       
       vpRotationMatrix fRc;
-      fMc.extract(fRc);
+      fMc_.extract(fRc);
       vpRxyzVector rxyz(fRc);
       
       vpTranslationVector txyz;
-      fMc.extract(txyz);
+      fMc_.extract(txyz);
       
       for (unsigned int i=0; i <3; i++)
       {
@@ -1627,6 +1677,39 @@ vpSimulatorViper850::getPosition(const vpRobot::vpControlFrameType frame, vpColV
   }
 }
 
+/*!
+
+  Get the current time stamped position of the robot.
+
+  \param frame : Control frame type in which to get the position, either :
+  - in the camera cartesien frame,
+  - joint (articular) coordinates of each axes
+  - in a reference or fixed cartesien frame attached to the robot base
+  - in a mixt cartesien frame (translation in reference
+  frame, and rotation in camera frame)
+
+  \param q : Measured position of the robot:
+  - in camera cartesien frame, a 6 dimension vector, set to 0.
+
+  - in articular, a 6 dimension vector corresponding to the joint
+  position of each dof in radians.
+
+  - in reference frame, a 6 dimension vector, the first 3 values correspond to
+  the translation tx, ty, tz in meters (like a vpTranslationVector), and the
+  last 3 values to the rx, ry, rz rotation (like a vpRxyzVector). The code
+  below show how to convert this position into a vpHomogenousMatrix:
+
+  \param timestamp : Unix time in second since January 1st 1970.
+
+  \sa getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q)
+ */
+void
+vpSimulatorViper850::getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q, double &timestamp)
+{
+  timestamp = vpTime::measureTimeSecond();
+  getPosition(frame, q);
+}
+
 
 /*!
   Get the current position of the robot.
@@ -1640,7 +1723,7 @@ vpSimulatorViper850::getPosition(const vpRobot::vpControlFrameType frame, vpColV
 */
 void 
 vpSimulatorViper850::getPosition (const vpRobot::vpControlFrameType frame,   
-                            vpPoseVector &position)
+                                  vpPoseVector &position)
 {
   vpColVector posRxyz;
   //recupere  position en Rxyz
@@ -1657,6 +1740,24 @@ vpSimulatorViper850::getPosition (const vpRobot::vpControlFrameType frame,
   }
 }
 
+/*!
+
+  Get the current time stamped position of the robot.
+
+  Similar as getPosition(const vpRobot::vpControlFrameType frame, vpColVector &, double &)
+
+  The difference is here that the position is returned using a ThetaU
+  representation.
+
+ */
+void
+vpSimulatorViper850::getPosition(const vpRobot::vpControlFrameType frame,
+                                 vpPoseVector &position, double &timestamp)
+{
+  timestamp = vpTime::measureTimeSecond();
+  getPosition(frame, position);
+}
+
 /*!
   This method enables to set the minimum and maximum joint limits for all the six axis of the robot. All the values have to be given in radian.
   
@@ -1954,7 +2055,6 @@ int main()
 bool
 vpSimulatorViper850::readPosFile(const char *filename, vpColVector &q)
 {
-
   FILE * fd ;
   fd = fopen(filename, "r") ;
   if (fd == NULL)
@@ -1969,27 +2069,30 @@ vpSimulatorViper850::readPosFile(const char *filename, vpColVector &q)
     // Saut des lignes commencant par #
     if (fgets (line, FILENAME_MAX, fd) != NULL) {
       if ( strncmp (line, "#", 1) != 0) {
-	// La ligne n'est pas un commentaire
-	if ( strncmp (line, head, sizeof(head)-1) == 0) {
-	  sortie = true; 	// Position robot trouvee.
-	}
-// 	else
-// 	  return (false); // fin fichier sans position robot.
+        // La ligne n'est pas un commentaire
+        if ( strncmp (line, head, sizeof(head)-1) == 0) {
+          sortie = true; 	// Position robot trouvee.
+        }
+        // 	else
+        // 	  return (false); // fin fichier sans position robot.
       }
     }
     else {
+      fclose(fd) ;
       return (false);		/* fin fichier 	*/
     }
-
   }
   while ( sortie != true );
 
   // Lecture des positions
   q.resize(njoint);
-  sscanf(line, "%s %lf %lf %lf %lf %lf %lf",
-	 dummy,
-	 &q[0], &q[1], &q[2],
-	 &q[3], &q[4], &q[5]);
+  int ret = sscanf(line, "%s %lf %lf %lf %lf %lf %lf",
+                   dummy,
+                   &q[0], &q[1], &q[2], &q[3], &q[4], &q[5]);
+  if (ret != 7) {
+    fclose(fd) ;
+    return false;
+  }
 
   // converts rotations from degrees into radians
   q.deg2rad();
@@ -2110,15 +2213,15 @@ vpSimulatorViper850::get_cVe(vpVelocityTwistMatrix &cVe)
   To compute \f$^e{\bf J}_e\f$, we communicate with the low level
   controller to get the joint position of the robot.
 
-  \param eJe : Robot jacobian \f$^e{\bf J}_e\f$ expressed in the
+  \param eJe_ : Robot jacobian \f$^e{\bf J}_e\f$ expressed in the
   end-effector frame.
 */
 void
-vpSimulatorViper850::get_eJe(vpMatrix &eJe)
+vpSimulatorViper850::get_eJe(vpMatrix &eJe_)
 {
   try
   {
-    vpViper850::get_eJe(get_artCoord(), eJe) ;
+    vpViper850::get_eJe(get_artCoord(), eJe_) ;
   }
   catch(...)
   {
@@ -2134,16 +2237,16 @@ vpSimulatorViper850::get_eJe(vpMatrix &eJe)
   To compute \f$^f{\bf J}_e\f$, we communicate with the low level
   controller to get the joint position of the robot.
 
-  \param fJe : Robot jacobian \f$^f{\bf J}_e\f$ expressed in the
+  \param fJe_ : Robot jacobian \f$^f{\bf J}_e\f$ expressed in the
   reference frame.
 */
 void
-vpSimulatorViper850::get_fJe(vpMatrix &fJe)
+vpSimulatorViper850::get_fJe(vpMatrix &fJe_)
 {
   try
   {
     vpColVector articularCoordinates = get_artCoord();
-    vpViper850::get_fJe(articularCoordinates, fJe) ;
+    vpViper850::get_fJe(articularCoordinates, fJe_) ;
   }
   catch(...)
   {
@@ -2187,26 +2290,40 @@ void
 vpSimulatorViper850::initArms()
 {
   // set scene_dir from #define VISP_SCENE_DIR if it exists
-  std::string scene_dir;
+  std::string scene_dir_;
   if (vpIoTools::checkDirectory(VISP_SCENES_DIR) == true) // directory exists
-    scene_dir = VISP_SCENES_DIR;
+    scene_dir_ = VISP_SCENES_DIR;
   else {
     try {
-      scene_dir = vpIoTools::getenv("VISP_SCENES_DIR");
-      std::cout << "The simulator uses data from VISP_SCENES_DIR=" << scene_dir << std::endl;
+      scene_dir_ = vpIoTools::getenv("VISP_SCENES_DIR");
+      std::cout << "The simulator uses data from VISP_SCENES_DIR=" << scene_dir_ << std::endl;
     }
     catch (...) {
       std::cout << "Cannot get VISP_SCENES_DIR environment variable" << std::endl;
     }
   }
 
-  char name_cam[FILENAME_MAX];
+  unsigned int name_length = 30; // the size of this kind of string "/viper850_arm2.bnd"
+  if (scene_dir_.size() > FILENAME_MAX)
+    throw vpException (vpException::dimensionError, "Cannot initialize Viper850 simulator");
 
-  strcpy(name_cam, scene_dir.c_str());
+  unsigned int full_length = (unsigned int)scene_dir_.size() + name_length;
+  if (full_length > FILENAME_MAX)
+    throw vpException (vpException::dimensionError, "Cannot initialize Viper850 simulator");
+
+  char *name_cam = new char [full_length];
+
+  strcpy(name_cam, scene_dir_.c_str());
   strcat(name_cam,"/camera.bnd");
   set_scene(name_cam,&camera,cameraFactor);
   
-  char name_arm[FILENAME_MAX];
+  if (arm_dir.size() > FILENAME_MAX)
+    throw vpException (vpException::dimensionError, "Cannot initialize Viper850 simulator");
+  full_length = (unsigned int)arm_dir.size() + name_length;
+  if (full_length > FILENAME_MAX)
+    throw vpException (vpException::dimensionError, "Cannot initialize Viper850 simulator");
+
+  char *name_arm = new char [full_length];
   strcpy(name_arm, arm_dir.c_str());
   strcat(name_arm,"/viper850_arm1.bnd");
   set_scene(name_arm, robotArms, 1.0);
@@ -2241,14 +2358,17 @@ vpSimulatorViper850::initArms()
 //   sceneInitialized = true;
 //   displayObject = true;
   displayCamera = true;
+
+  delete [] name_cam;
+  delete [] name_arm;
 }
 
 
 void 
-vpSimulatorViper850::getExternalImage(vpImage<vpRGBa> &I)
+vpSimulatorViper850::getExternalImage(vpImage<vpRGBa> &I_)
 {
   bool changed = false;
-  vpHomogeneousMatrix displacement = navigation(I,changed);
+  vpHomogeneousMatrix displacement = navigation(I_,changed);
 
   //if (displacement[2][3] != 0)
   if (std::fabs(displacement[2][3]) > std::numeric_limits<double>::epsilon())
@@ -2265,13 +2385,13 @@ vpSimulatorViper850::getExternalImage(vpImage<vpRGBa> &I)
   if( (std::fabs(px_ext-1.) > vpMath::maximum(px_ext,1.)*std::numeric_limits<double>::epsilon()) 
       && (std::fabs(py_ext-1) > vpMath::maximum(py_ext,1.)*std::numeric_limits<double>::epsilon()))
   {
-    u = (double)I.getWidth()/(2*px_ext);
-    v = (double)I.getHeight()/(2*py_ext);
+    u = (double)I_.getWidth()/(2*px_ext);
+    v = (double)I_.getHeight()/(2*py_ext);
   }
   else
   {
-    u = (double)I.getWidth()/(vpMath::minimum(I.getWidth(),I.getHeight()));
-    v = (double)I.getHeight()/(vpMath::minimum(I.getWidth(),I.getHeight()));
+    u = (double)I_.getWidth()/(vpMath::minimum(I_.getWidth(),I_.getHeight()));
+    v = (double)I_.getHeight()/(vpMath::minimum(I_.getWidth(),I_.getHeight()));
   }
 
   float w44o[4][4],w44cext[4][4],x,y,z;
@@ -2291,22 +2411,22 @@ vpSimulatorViper850::getExternalImage(vpImage<vpRGBa> &I)
   get_fMi(fMit);
   
   vp2jlc_matrix(vpHomogeneousMatrix(0,0,0,0,0,0),w44o);
-  display_scene(w44o,robotArms[0],I, curColor);
+  display_scene(w44o,robotArms[0],I_, curColor);
   
   vp2jlc_matrix(fMit[0],w44o);
-  display_scene(w44o,robotArms[1],I, curColor);
+  display_scene(w44o,robotArms[1],I_, curColor);
   
   vp2jlc_matrix(fMit[1],w44o);
-  display_scene(w44o,robotArms[2],I, curColor);
+  display_scene(w44o,robotArms[2],I_, curColor);
   
   vp2jlc_matrix(fMit[2],w44o);
-  display_scene(w44o,robotArms[3],I, curColor);
+  display_scene(w44o,robotArms[3],I_, curColor);
   
   vp2jlc_matrix(fMit[3],w44o);
-  display_scene(w44o,robotArms[4],I, curColor);
+  display_scene(w44o,robotArms[4],I_, curColor);
   
   vp2jlc_matrix(fMit[6],w44o);
-  display_scene(w44o,robotArms[5],I, curColor);
+  display_scene(w44o,robotArms[5],I_, curColor);
 
   if (displayCamera)
   {
@@ -2315,13 +2435,13 @@ vpSimulatorViper850::getExternalImage(vpImage<vpRGBa> &I)
     cMe = cMe.inverse();
     cMe = fMit[6] * cMe;
     vp2jlc_matrix(cMe,w44o);
-    display_scene(w44o,camera, I, camColor);
+    display_scene(w44o,camera, I_, camColor);
   }
   
   if (displayObject)
   {
     vp2jlc_matrix(fMo,w44o);
-    display_scene(w44o,scene,I, curColor);
+    display_scene(w44o,scene,I_, curColor);
   }
 }
 
@@ -2336,23 +2456,23 @@ vpSimulatorViper850::getExternalImage(vpImage<vpRGBa> &I)
   \f${^f}{\bf M}_c = {^f}{\bf M}_o \; ({^c}{\bf M}{_o})^{-1}\f$, and from the inverse kinematics
   set the joint positions \f${\bf q}\f$ that corresponds to the \f${^f}{\bf M}_c\f$ transformation.
   
-  \param cMo : the desired pose of the camera.
+  \param cMo_ : the desired pose of the camera.
 
   \return false if the robot kinematics is not able to reach the cMo position.
 */
 bool
-vpSimulatorViper850::initialiseCameraRelativeToObject(const vpHomogeneousMatrix &cMo)
+vpSimulatorViper850::initialiseCameraRelativeToObject(const vpHomogeneousMatrix &cMo_)
 {
   vpColVector stop(6);
   bool status = true;
   stop = 0;
   set_artVel(stop);
   set_velocity(stop);
-  vpHomogeneousMatrix fMc;
-  fMc = fMo * cMo.inverse();
+  vpHomogeneousMatrix fMc_;
+  fMc_ = fMo * cMo_.inverse();
   
   vpColVector articularCoordinates = get_artCoord();
-  unsigned int nbSol = getInverseKinematics(fMc, articularCoordinates, verbose_);
+  unsigned int nbSol = getInverseKinematics(fMc_, articularCoordinates, verbose_);
   
   if (nbSol == 0) {
     status = false;
@@ -2379,10 +2499,10 @@ vpSimulatorViper850::initialiseCameraRelativeToObject(const vpHomogeneousMatrix
   \f${^f}{\bf M}_o = {^f}{\bf M}_c \; {^c}{\bf M}_o\f$ where \f$ {^f}{\bf M}_c = f({\bf q})\f$
   with \f${\bf q}\f$ the robot joint position
   
-  \param cMo : the desired pose of the camera.
+  \param cMo_ : the desired pose of the camera.
 */
 void 
-vpSimulatorViper850::initialiseObjectRelativeToCamera(const vpHomogeneousMatrix &cMo)
+vpSimulatorViper850::initialiseObjectRelativeToCamera(const vpHomogeneousMatrix &cMo_)
 {
   vpColVector stop(6);
   stop = 0;
@@ -2390,7 +2510,7 @@ vpSimulatorViper850::initialiseObjectRelativeToCamera(const vpHomogeneousMatrix
   set_velocity(stop);
   vpHomogeneousMatrix fMit[8];
   get_fMi(fMit);
-  fMo = fMit[7] * cMo;
+  fMo = fMit[7] * cMo_;
 }
 
 #endif
diff --git a/src/robot/simulator-robot/vpSimulatorViper850.h b/src/robot/simulator-robot/vpSimulatorViper850.h
index c20c1a6b..6cccdcac 100644
--- a/src/robot/simulator-robot/vpSimulatorViper850.h
+++ b/src/robot/simulator-robot/vpSimulatorViper850.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSimulatorViper850.h 4252 2013-05-14 13:44:49Z fspindle $
+ * $Id: vpSimulatorViper850.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -52,7 +52,7 @@
 #include <visp/vpRobotWireFrameSimulator.h>
 #include <visp/vpViper850.h>
 #include <string>
-#if defined(WIN32) || defined(VISP_HAVE_PTHREAD)
+#if defined(_WIN32) || defined(VISP_HAVE_PTHREAD)
 
 /*!
   \class vpSimulatorViper850
@@ -236,13 +236,15 @@ class VISP_EXPORT vpSimulatorViper850 : public vpRobotWireFrameSimulator, public
                          vpColVector &displacement);
 
     void getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q);
-    void getPosition (const vpRobot::vpControlFrameType frame,
-                      vpPoseVector &position);
+    void getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q, double &timestamp);
+    void getPosition(const vpRobot::vpControlFrameType frame, vpPoseVector &position);
+    void getPosition(const vpRobot::vpControlFrameType frame, vpPoseVector &position, double &timestamp);
     double getPositioningVelocity (void){return positioningVelocity;}
 
-
     void getVelocity(const vpRobot::vpControlFrameType frame, vpColVector &q);
+    void getVelocity(const vpRobot::vpControlFrameType frame, vpColVector &q, double &timestamp);
     vpColVector getVelocity (const vpRobot::vpControlFrameType frame);
+    vpColVector getVelocity (const vpRobot::vpControlFrameType frame, double &timestamp);
 
     void get_cMe(vpHomogeneousMatrix &cMe);
     void get_cVe(vpVelocityTwistMatrix &cVe);
@@ -269,7 +271,7 @@ class VISP_EXPORT vpSimulatorViper850 : public vpRobotWireFrameSimulator, public
                       const double pos5,
                       const double pos6);
     void setPosition(const char *filename);
-    void setPositioningVelocity (const double velocity) {positioningVelocity = velocity;}
+    void setPositioningVelocity (const double vel) {positioningVelocity = vel;}
     vpRobot::vpRobotStateType setRobotState (const vpRobot::vpRobotStateType newState);
 
     void setVelocity (const vpRobot::vpControlFrameType frame, const vpColVector & velocity);
@@ -283,7 +285,7 @@ protected:
     void getExternalImage(vpImage<vpRGBa> &I);
 
     inline void get_fMi(vpHomogeneousMatrix *fMit) {
-#if defined(WIN32)
+#if defined(_WIN32)
       WaitForSingleObject(mutex_fMi,INFINITE);
       for (int i = 0; i < 8; i++)
         fMit[i] = fMi[i];
diff --git a/src/servo/vpAdaptativeGain.cpp b/src/servo/vpAdaptativeGain.cpp
deleted file mode 100644
index 62918d4e..00000000
--- a/src/servo/vpAdaptativeGain.cpp
+++ /dev/null
@@ -1,360 +0,0 @@
-/****************************************************************************
- *
- * $Id: vpAdaptativeGain.cpp 4317 2013-07-17 09:40:17Z fspindle $
- *
- * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
- * 
- * This software is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * ("GPL") version 2 as published by the Free Software Foundation.
- * See the file LICENSE.txt at the root directory of this source
- * distribution for additional information about the GNU GPL.
- *
- * For using ViSP with software that can not be combined with the GNU
- * GPL, please contact INRIA about acquiring a ViSP Professional 
- * Edition License.
- *
- * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
- * 
- * This software was developed at:
- * INRIA Rennes - Bretagne Atlantique
- * Campus Universitaire de Beaulieu
- * 35042 Rennes Cedex
- * France
- * http://www.irisa.fr/lagadic
- *
- * If you have questions regarding the use of this file, please contact
- * INRIA at visp@inria.fr
- * 
- * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- *
- * Description:
- * Adaptative gain.
- *
- * Authors:
- * Nicolas Mansard
- *
- *****************************************************************************/
-/*!
-  \file vpAdaptativeGain.cpp
-
-  \brief Adaptative gain. The content of this file is deprecated. You
-  should better use vpAdaptiveGain.
-
-*/
-
-#include <visp/vpConfig.h>
-
-#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
-
-/* --- VISP --- */
-#include <visp/vpAdaptativeGain.h>
-#include <visp/vpColVector.h>
-#include <visp/vpDebug.h>
-
-#include <iostream>
-#include <cmath>    // std::fabs
-#include <limits>   // numeric_limits
-
-const double vpAdaptativeGain::DEFAULT_LAMBDA_ZERO = 1.666;
-const double vpAdaptativeGain::DEFAULT_LAMBDA_INFINI = 0.1666;
-const double vpAdaptativeGain::DEFAULT_LAMBDA_PENTE  = 1.666;
-
-/* -------------------------------------------------------------------------- */
-/* --- CONSTRUCTION --------------------------------------------------------- */
-/* -------------------------------------------------------------------------- */
-
-/*!
-  \deprecated This class is deprecated. You should use
-  vpAdaptive class instead.
-  Basic constructor which initializes the parameters with a default value.
-*/
-vpAdaptativeGain::
-vpAdaptativeGain (void)
-  :
-  coeff_a (),
-  coeff_b (),
-  coeff_c ()
-{
-  vpDEBUG_TRACE (10, "# Entree constructeur par default.");
-  this ->initFromVoid ();
-
-  vpDEBUG_TRACE (10, "# Sortie constructeur par default.");
-  return;
-}
-
-/* -------------------------------------------------------------------------- */
-/* --- INIT ----------------------------------------------------------------- */
-/* -------------------------------------------------------------------------- */
-
-/*!
-  Initializes the parameters to have a constant gain.
-  Thus \f$ a = 0 \f$, \f$ b = 1 \f$ and \f$ c = lambda \f$
-  
-  \param lambda : the expected constant gain.
-*/
-void vpAdaptativeGain::
-initFromConstant (const double lambda)
-{
-    vpDEBUG_TRACE (10, "# Entree.");
-
-    this ->coeff_a = 0;
-    this ->coeff_b = 1;
-    this ->coeff_c = lambda;
-
-    vpDEBUG_TRACE (10, "# Sortie.");
-    return;
-}
-
-
-/*!
-  Initializes the parameters with the default value :
-  - \f$ lambda(0) = 1.666 \f$
-  - \f$ lambda(inf) = 0.1666 \f$
-  - \f$ lambda'(0) = 1.666 \f$
-*/
-void vpAdaptativeGain::
-initFromVoid (void)
-{
-  vpDEBUG_TRACE (10, "# Entree.");
-
-  this ->initStandard (vpAdaptativeGain::DEFAULT_LAMBDA_ZERO,
-		       vpAdaptativeGain::DEFAULT_LAMBDA_INFINI,
-		       vpAdaptativeGain::DEFAULT_LAMBDA_PENTE);
-
-  vpDEBUG_TRACE (10, "# Sortie.");
-  return;
-}
-
-
-/*!
-  Computes the parameters thanks to the given \f$ lambda(0)\f$, \f$ lambda(inf)\f$ and \f$ lambda'(0)\f$.
-  
-  \f$ lambda(0)\f$ represents the gain in 0, \f$ lambda(inf)\f$ represents the gain to infinity and \f$ lambda'(0)\f$ represents the slope in 0.
-  
-  \param en_zero : the expected gain in 0.
-  \param en_infini : the expected gain to infinity.
-  \param pente_en_zero : the expected slope in 0.
-*/
-void vpAdaptativeGain::
-initStandard (const double en_zero,
-	      const double en_infini,
-	      const double pente_en_zero)
-{
-  vpDEBUG_TRACE (10, "# Entree.");
-
-  this ->coeff_a = en_zero - en_infini;
-  //if (0 == this ->coeff_a)
-  if (std::fabs(this ->coeff_a) <= std::numeric_limits<double>::epsilon())
-    {
-      this ->coeff_b = 0;
-    }
-  else
-    {
-      this ->coeff_b = pente_en_zero / ( this ->coeff_a);
-    }
-  this ->coeff_c = en_infini;
-
-  vpDEBUG_TRACE (10, "# Sortie :a,b,c= %.3f,%.3f,%.3f.",
-	       this ->coeff_a, this ->coeff_b, this ->coeff_c);
-  return;
-}
-
-
-
-/* -------------------------------------------------------------------------- */
-/* --- MODIFICATOR ---------------------------------------------------------- */
-/* -------------------------------------------------------------------------- */
-
-/*!
-  Sets the parameters in order to obtain a constant gain equal to the gain in 0.
-  
-  \return It returns the value of the computed constant gain.
-*/
-double vpAdaptativeGain::
-setConstant (void)
-{
-  vpDEBUG_TRACE (10, "# Entree.");
-
-  double res = this ->coeff_a + this ->coeff_c;
-
-  this ->coeff_a = 0;
-  this ->coeff_b = 1;
-  this ->coeff_c = res;
-
-  vpDEBUG_TRACE (10, "# Sortie: %.3f.", res);
-  return res;
-}
-
-/* -------------------------------------------------------------------------- */
-/* --- VALEUR --------------------------------------------------------------- */
-/* -------------------------------------------------------------------------- */
-
-/*!
-  Computes the value of the adaptive gain \f$\lambda\f$ corresponding to
-  the norm of the task function. The formula is the following:
-
-  \f[\lambda = a * exp(-b*val_e) + c\f]
-
-  \param val_e : Norm of the task function \f$\mid s - s^*\mid\f$.
-  
-  \return It returns the value of the computed gain.
-*/
-double vpAdaptativeGain::
-value_const (const double val_e) const
-{
-  vpDEBUG_TRACE (10, "# Entree.");
-
-  double res = this ->coeff_a * exp (- this ->coeff_b * val_e)
-    + this ->coeff_c;
-
-  vpDEBUG_TRACE (10, "# Sortie: %.3f.", res);
-  return res;
-}
-
-/*!
-  Gets the value of the gain at infinity (ie the value of \f$ c \f$).
-
-  \return It returns the value of the gain at infinity (ie the value of \f$ c \f$).
- */
-double vpAdaptativeGain::
-limitValue_const (void) const
-{
-  vpDEBUG_TRACE (10, "# Entree.");
-
-  double res = this ->coeff_c;
-
-  vpDEBUG_TRACE (10, "# Sortie: %.3f.", res);
-  return res;
-}
-
-
-
-/*!
-  Computes the value of the adaptive gain \f$\lambda\f$ corresponding to
-  the norm of the task function and stores it as a parameter of the class.
-  The formula used for the gain computation is the following:
-
-  \f[\lambda = a * exp(-b*val_e) + c\f]
-
-  \param val_e : Norm of the task function \f$\mid s - s^*\mid\f$.
-  
-  \return It returns the value of the computed gain.
-*/
-double vpAdaptativeGain::
-value (const double val_e) const
-{
-  vpDEBUG_TRACE (10, "# Entree.");
-
-  this ->lambda = this ->value_const (val_e);
-
-  vpDEBUG_TRACE (10, "# Sortie: %.3f.", this ->lambda);
-  return lambda;
-}
-
-
-/*!
-  Gets the value of the gain at infinity (ie the value of \f$ c \f$)and stores it
-  as a parameter of the class.
-
-  \return It returns the value of the gain at infinity (ie the value of \f$ c \f$).
- */
-double vpAdaptativeGain::
-limitValue (void) const
-{
-  vpDEBUG_TRACE (10, "# Entree.");
-
-  this ->lambda = this ->limitValue_const ();
-
-  vpDEBUG_TRACE (10, "# Sortie: %.3f.", this ->lambda);
-  return lambda;
-}
-
-/* -------------------------------------------------------------------------- */
-/* --- ACCESSORS ------------------------------------------------------------ */
-/* -------------------------------------------------------------------------- */
-
-
-
-// double vpAdaptativeGain::
-// getLastValue (void) const
-// {
-//   return this ->lambda;
-// }
-
-/*!
-  Operator which calls the value(double val_e) method with \e val_e in parameter in order
-  to compute the adaptative gain corresponding to \e val_e.
-     
-  \param val_e : Norm of the task function \f$\mid s - s^*\mid\f$.
-      
-  \return It returns the value of the computed gain.
-*/
-double vpAdaptativeGain::
-operator() (const double val_e) const
-{
-  return this ->value (val_e);
-}
-
-/*!
-  Gets the value of the gain at infinity (ie the value of \f$ c \f$).
-
-  \return It returns the value of the gain at infinity (ie the value of \f$ c \f$).
- */
-double vpAdaptativeGain::
-operator() (void) const
-{
-  return this ->limitValue ();
-}
-
-/*!
-  Operator which calls the value(double val_e) method with the infinity norm of \e e in parameter in order
-  to compute the adaptative gain corresponding to \f$ |e| \f$.
-     
-  \param e : the task function \f$\mid s - s^*\mid\f$.
-      
-  \return It returns the value of the computed gain.
-*/
-double vpAdaptativeGain::
-operator()  (const vpColVector & e) const
-{
-  return this ->value (e .infinityNorm());
-}
-
-
-//   double operator() (double val_e)  const;
-//   double operator()  (const CColVector & e) const;
-
-/* -------------------------------------------------------------------------- */
-/* --- OUTPUT --------------------------------------------------------------- */
-/* -------------------------------------------------------------------------- */
-
-
-
-/*!
-  Prints the adaptative gain  coefficients. It prints the gain in 0, 
-  the gain to infinity and the slope in 0.
-  
-  \param os : The stream where to print the adaptative gain parameters.
-  \param lambda : The adaptative gain containing the parameters to print.
-*/
-std::ostream&
-operator<< (std::ostream &os, const vpAdaptativeGain& lambda)
-{
-  os << "Zero= " << lambda .coeff_a + lambda .coeff_c
-     << "\tInf= " << lambda .coeff_c
-     << "\tDeriv= " << lambda .coeff_a * lambda .coeff_b;
-
-  return os;
-}
-
-#endif
-
-/*
- * Local variables:
- * c-basic-offset: 4
- * End:
- */
diff --git a/src/servo/vpAdaptativeGain.h b/src/servo/vpAdaptativeGain.h
deleted file mode 100644
index 7b638911..00000000
--- a/src/servo/vpAdaptativeGain.h
+++ /dev/null
@@ -1,190 +0,0 @@
-/****************************************************************************
- *
- * $Id: vpAdaptativeGain.h 4317 2013-07-17 09:40:17Z fspindle $
- *
- * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
- * 
- * This software is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * ("GPL") version 2 as published by the Free Software Foundation.
- * See the file LICENSE.txt at the root directory of this source
- * distribution for additional information about the GNU GPL.
- *
- * For using ViSP with software that can not be combined with the GNU
- * GPL, please contact INRIA about acquiring a ViSP Professional 
- * Edition License.
- *
- * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
- * 
- * This software was developed at:
- * INRIA Rennes - Bretagne Atlantique
- * Campus Universitaire de Beaulieu
- * 35042 Rennes Cedex
- * France
- * http://www.irisa.fr/lagadic
- *
- * If you have questions regarding the use of this file, please contact
- * INRIA at visp@inria.fr
- * 
- * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- *
- * Description:
- * Adaptative gain.
- *
- * Authors:
- * Nicolas Mansard
- *
- *****************************************************************************/
-/*!
-  \file vpAdaptativeGain.h
-
-  \brief Adaptative gain. The content of this file is deprecated. You
-  should better use vpAdaptiveGain.
-*/
-
-#ifndef __VP_ADAPTATIVE_GAIN_H
-#define __VP_ADAPTATIVE_GAIN_H
-
-#include <visp/vpConfig.h>
-#include <iostream>
-
-#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
-
-class vpColVector;
-/*!
-  \class vpAdaptativeGain
-  
-  \ingroup VsTask
-  
-  \brief Adaptative gain computation.
-
-  \deprecated This class is deprecated. You should use
-  vpAdaptive class instead.
-
-  The formula used to compute the gain is the following :
-  
-  \f[ lambda (x) = a * exp (-b*x) + c \f]
-  
-  where \f$ a \f$, \f$ b \f$ and \f$ c \f$ are parameters which must be set 
-  and \f$ x \f$ is the vector error of the task.
-  
-  By default, the parameters are set with default values:
-  \f[ a = lambda(0) - lambda(inf) \f]
-  \f[ b = lambda'(0) / a \f]
-  \f[ c = lambda(inf) \f]
-  
-  with \f$ lambda(0) = 1.666 \f$, \f$ lambda(inf) = 0.1666 \f$ and \f$ lambda'(0) = 1.666 \f$.
-  
-  \f$ lambda(0)\f$ represents the gain in 0, \f$ lambda(inf)\f$ represents the gain to infinity and \f$ lambda'(0)\f$ represents the slope in 0.
-  
-*/
-
-class VISP_EXPORT vpAdaptativeGain
-{
-
-public: /* constantes */
-
-    static const double DEFAULT_LAMBDA_ZERO;
-    static const double DEFAULT_LAMBDA_INFINI;
-    static const double DEFAULT_LAMBDA_PENTE;
-
-
-private: /* Attributs*/
-    /* Coefficient de la fonction de calcul de lambda.
-     * lambda (x) = a * exp (-b*x) + c. */
-    double                      coeff_a;
-    double                      coeff_b;
-    double                      coeff_c;
-
-    /* Derniere valeur calculee.  */
-    mutable double              lambda;
-
-
-
-public:  /* Methodes*/
-
-    /* --- CONSTRUCTOR -------------------------------------------------------- */
-
-    vp_deprecated vpAdaptativeGain (void);
-
-    /* --- INIT --------------------------------------------------------------- */
-    void                        initFromConstant (double lambda);
-    void                        initFromVoid (void);
-    void                        initStandard (double en_zero,
-					      double en_infini,
-					      double pente_en_zero);
-
-
-    /* --- MODIFIORS ---------------------------------------------------------- */
-    double                      setConstant (void);
-
-
-    /* --- COMPUTE ------------------------------------------------------------ */
-    /* \brief Calcule la valeur de lambda au point courrant.
-     *
-     * Determine la valeur du lambda adaptatif en fonction de la valeur
-     * de la norme de la fonction de tache e par extrapolation exponentielle.
-     * La fonction est : (en_infini - en_zero) * exp (-pente * ||e|| ) + en_infini.
-     * On a bien :
-     *    - lambda(10^5) = en_infini ;
-     *    - lambda(0) = en_zero ;
-     *    - lambda(x ~ 0) ~ - pente * x + en_zero.
-     * \param val_e: valeur de la norme de l'erreur.
-     * \return: valeur de gain au point courrant.
-     */
-    double                      value_const (double val_e) const;
-
-    /* \brief Calcule la valeur de lambda au point courrant et stockage du
-     * resultat.
-     *
-     * La fonction calcule la valeur de lambda d'apres la valeur de la norme
-     * de l'erreur, comme le fait la fonction valeur_const.
-     * La fonction non constante stocke de plus le resultat dans this ->lambda.
-     * \param val_e: valeur de la norme de l'erreur.
-     * \return: valeur de gain au point courrant.
-     */
-    double                      value (double val_e) const;
-
-    double                      limitValue_const (void) const;
-
-    double                      limitValue (void) const;
-
-    /* --- ACCESSORS ---------------------------------------------------------- */
-
-    /*!
-      Gets the last adaptative gain value which was stored in the class.
-  
-      \return It returns the last adaptative gain value which was stored in the class.
-    */
-    inline double                      getLastValue (void) const {return this ->lambda;}
-   
-    double                      operator() (double val_e) const;
-
-    /* \brief Lance la fonction valeur avec la norme INFINIE du vecteur. */
-    double                      operator()  (const vpColVector & e) const;
-
-    /* \brief Idem function limitValue. */
-    double                      operator() (void) const;
-
-
-    /* --- IOSTREAM ----------------------------------------------------------- */
-
-    friend VISP_EXPORT std::ostream&        operator<< (std::ostream &os,
-					    const vpAdaptativeGain& lambda);
-};
-
-#endif
-
-#endif /*  __VP_ADAPTATIVE_GAIN_H	*/
-
-
-
-
-/*
- * Local variables:
- * c-basic-offset: 4
- * End:
- */
diff --git a/src/servo/vpAdaptiveGain.cpp b/src/servo/vpAdaptiveGain.cpp
index 283fbf38..1e654453 100644
--- a/src/servo/vpAdaptiveGain.cpp
+++ b/src/servo/vpAdaptiveGain.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpAdaptiveGain.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpAdaptiveGain.cpp 4641 2014-02-05 12:42:03Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -52,22 +52,26 @@
 #include <limits>   // numeric_limits
 
 const double vpAdaptiveGain::DEFAULT_LAMBDA_ZERO = 1.666;
-const double vpAdaptiveGain::DEFAULT_LAMBDA_INFINI = 0.1666;
-const double vpAdaptiveGain::DEFAULT_LAMBDA_PENTE  = 1.666;
+const double vpAdaptiveGain::DEFAULT_LAMBDA_INFINITY = 0.1666;
+const double vpAdaptiveGain::DEFAULT_LAMBDA_SLOPE  = 1.666;
 
 /* -------------------------------------------------------------------------- */
 /* --- CONSTRUCTION --------------------------------------------------------- */
 /* -------------------------------------------------------------------------- */
 
 /*!
-  Basic constructor which initializes the parameters with a default value.
+  Basic constructor which initializes all the parameters with their default value:
+  - \f$ \lambda(0) = 1.666 \f$ using vpAdaptiveGain::DEFAULT_LAMBDA_ZERO
+  - \f$ \lambda(\infty) = 0.1666 \f$ using vpAdaptiveGain::DEFAULT_LAMBDA_INFINITY
+  - \f$ {\dot \lambda}(0) = 1.666 \f$ using vpAdaptiveGain::DEFAULT_LAMBDA_SLOPE
+
 */
-vpAdaptiveGain::
-vpAdaptiveGain (void)
+vpAdaptiveGain::vpAdaptiveGain ()
   :
   coeff_a (),
   coeff_b (),
-  coeff_c ()
+  coeff_c (),
+  lambda(1.)
 {
   vpDEBUG_TRACE (10, "# Entree constructeur par default.");
   this ->initFromVoid ();
@@ -76,24 +80,45 @@ vpAdaptiveGain (void)
   return;
 }
 
+/*!
+  Constructor that initializes the gain as constant. In that case \f$\lambda(x) = c\f$.
+
+  \param c : Value of the constant gain.
+*/
+vpAdaptiveGain::vpAdaptiveGain (double c)
+{
+  initFromConstant(c);
+}
+
+/*!
+  Constructor that initializes the gain as adaptive.
+
+  \param gain_at_zero : the expected gain when \f$x=0\f$: \f$\lambda(0)\f$.
+  \param gain_at_infinity : the expected gain when \f$x=\infty\f$: \f$\lambda(\infty)\f$.
+  \param slope_at_zero : the expected slope of \f$\lambda(x)\f$ when \f$x=0\f$: \f${\dot \lambda}(0)\f$.
+
+*/
+vpAdaptiveGain::vpAdaptiveGain (double gain_at_zero, double gain_at_infinity, double slope_at_zero)
+{
+  initStandard(gain_at_zero, gain_at_infinity, slope_at_zero);
+}
+
 /* -------------------------------------------------------------------------- */
 /* --- INIT ----------------------------------------------------------------- */
 /* -------------------------------------------------------------------------- */
 
 /*!
-  Initializes the parameters to have a constant gain.
-  Thus \f$ a = 0 \f$, \f$ b = 1 \f$ and \f$ c = lambda \f$
-  
-  \param lambda : the expected constant gain.
+  Initializes the parameters to have a constant gain. In that case \f$\lambda(x) = c\f$.
+
+  \param c : Value of the constant gain.
 */
-void vpAdaptiveGain::
-initFromConstant (const double lambda)
+void vpAdaptiveGain::initFromConstant (const double c)
 {
     vpDEBUG_TRACE (10, "# Entree.");
 
     this ->coeff_a = 0;
     this ->coeff_b = 1;
-    this ->coeff_c = lambda;
+    this ->coeff_c = c;
 
     vpDEBUG_TRACE (10, "# Sortie.");
     return;
@@ -102,18 +127,17 @@ initFromConstant (const double lambda)
 
 /*!
   Initializes the parameters with the default value :
-  - \f$ lambda(0) = 1.666 \f$
-  - \f$ lambda(inf) = 0.1666 \f$
-  - \f$ lambda'(0) = 1.666 \f$
+  - \f$ \lambda(0) = 1.666 \f$ using vpAdaptiveGain::DEFAULT_LAMBDA_ZERO
+  - \f$ \lambda(\infty) = 0.1666 \f$ using vpAdaptiveGain::DEFAULT_LAMBDA_INFINITY
+  - \f$ {\dot \lambda}(0) = 1.666 \f$ using vpAdaptiveGain::DEFAULT_LAMBDA_SLOPE
 */
-void vpAdaptiveGain::
-initFromVoid (void)
+void vpAdaptiveGain::initFromVoid (void)
 {
   vpDEBUG_TRACE (10, "# Entree.");
 
   this ->initStandard (vpAdaptiveGain::DEFAULT_LAMBDA_ZERO,
-		       vpAdaptiveGain::DEFAULT_LAMBDA_INFINI,
-		       vpAdaptiveGain::DEFAULT_LAMBDA_PENTE);
+                       vpAdaptiveGain::DEFAULT_LAMBDA_INFINITY,
+                       vpAdaptiveGain::DEFAULT_LAMBDA_SLOPE);
 
   vpDEBUG_TRACE (10, "# Sortie.");
   return;
@@ -121,22 +145,19 @@ initFromVoid (void)
 
 
 /*!
-  Computes the parameters thanks to the given \f$ lambda(0)\f$, \f$ lambda(inf)\f$ and \f$ lambda'(0)\f$.
-  
-  \f$ lambda(0)\f$ represents the gain in 0, \f$ lambda(inf)\f$ represents the gain to infinity and \f$ lambda'(0)\f$ represents the slope in 0.
+  Set the parameters \f$\lambda(0), \lambda(\infty), {\dot \lambda}(0)\f$ used to compute \f$\lambda(x)\f$.
   
-  \param en_zero : the expected gain in 0.
-  \param en_infini : the expected gain to infinity.
-  \param pente_en_zero : the expected slope in 0.
+  \param gain_at_zero : the expected gain when \f$x=0\f$: \f$\lambda(0)\f$.
+  \param gain_at_infinity : the expected gain when \f$x=\infty\f$: \f$\lambda(\infty)\f$.
+  \param slope_at_zero : the expected slope of \f$\lambda(x)\f$ when \f$x=0\f$: \f${\dot \lambda}(0)\f$.
 */
-void vpAdaptiveGain::
-initStandard (const double en_zero,
-	      const double en_infini,
-	      const double pente_en_zero)
+void vpAdaptiveGain::initStandard (const double gain_at_zero,
+                                   const double gain_at_infinity,
+                                   const double slope_at_zero)
 {
   vpDEBUG_TRACE (10, "# Entree.");
 
-  this ->coeff_a = en_zero - en_infini;
+  this ->coeff_a = gain_at_zero - gain_at_infinity;
   //if (0 == this ->coeff_a)
   if (std::fabs(this ->coeff_a) <= std::numeric_limits<double>::epsilon())
     {
@@ -144,9 +165,9 @@ initStandard (const double en_zero,
     }
   else
     {
-      this ->coeff_b = pente_en_zero / ( this ->coeff_a);
+      this ->coeff_b = slope_at_zero / ( this ->coeff_a);
     }
-  this ->coeff_c = en_infini;
+  this ->coeff_c = gain_at_infinity;
 
   vpDEBUG_TRACE (10, "# Sortie :a,b,c= %.3f,%.3f,%.3f.",
 	       this ->coeff_a, this ->coeff_b, this ->coeff_c);
@@ -160,12 +181,12 @@ initStandard (const double en_zero,
 /* -------------------------------------------------------------------------- */
 
 /*!
-  Sets the parameters in order to obtain a constant gain equal to the gain in 0.
+  Sets the internal parameters \f$a,b,c\f$ in order to obtain a constant gain equal to
+  the gain in 0 set through the parameter \f$\lambda(0)\f$.
   
-  \return It returns the value of the computed constant gain.
+  \return It returns the value of the constant gain \f$\lambda(0)\f$.
 */
-double vpAdaptiveGain::
-setConstant (void)
+double vpAdaptiveGain::setConstant (void)
 {
   vpDEBUG_TRACE (10, "# Entree.");
 
@@ -184,34 +205,32 @@ setConstant (void)
 /* -------------------------------------------------------------------------- */
 
 /*!
-  Computes the value of the adaptive gain \f$\lambda\f$ corresponding to
-  the norm of the task function. The formula is the following:
+  Computes the value of the adaptive gain \f$\lambda(x)\f$ using:
 
-  \f[\lambda = a * exp(-b*val_e) + c\f]
+  \f[\lambda(x) = a * exp(-b*x) + c\f]
 
-  \param val_e : Norm of the task function \f$\mid s - s^*\mid\f$.
+  \param x : Input value to consider. During a visual servo this value can be the euclidian
+  norm \f$||s - s^*||\f$ or the infinity norm \f$||s - s^*||_{\infty}\f$ of the task function.
   
   \return It returns the value of the computed gain.
 */
-double vpAdaptiveGain::
-value_const (const double val_e) const
+double vpAdaptiveGain::value_const (const double x) const
 {
   vpDEBUG_TRACE (10, "# Entree.");
 
-  double res = this ->coeff_a * exp (- this ->coeff_b * val_e)
-    + this ->coeff_c;
+  double res = this ->coeff_a * exp (- this ->coeff_b * x) + this ->coeff_c;
 
   vpDEBUG_TRACE (10, "# Sortie: %.3f.", res);
   return res;
 }
 
 /*!
-  Gets the value of the gain at infinity (ie the value of \f$ c \f$).
+  Gets the value of the gain at infinity (ie the value of \f$ \lambda(\infty) = c \f$).
+  Similar to limitValue() except that here the value is not stored as a parameter of the class.
 
-  \return It returns the value of the gain at infinity (ie the value of \f$ c \f$).
+  \return It returns the value of the gain at infinity.
  */
-double vpAdaptiveGain::
-limitValue_const (void) const
+double vpAdaptiveGain::limitValue_const (void) const
 {
   vpDEBUG_TRACE (10, "# Entree.");
 
@@ -221,25 +240,23 @@ limitValue_const (void) const
   return res;
 }
 
+/*!
+  Computes the value of the adaptive gain \f$\lambda(x)\f$ using:
 
+  \f[\lambda(x) = a * exp(-b*x) + c\f]
 
-/*!
-  Computes the value of the adaptive gain \f$\lambda\f$ corresponding to
-  the norm of the task function and stores it as a parameter of the class.
-  The formula used for the gain computation is the following:
+  This value is stored as a parameter of the class.
 
-  \f[\lambda = a * exp(-b*val_e) + c\f]
+  \param x : Input value to consider. During a visual servo this value can be the euclidian
+  norm \f$||s - s^*||\f$ or the infinity norm \f$||s - s^*||_{\infty}\f$ of the task function.
 
-  \param val_e : Norm of the task function \f$\mid s - s^*\mid\f$.
-  
   \return It returns the value of the computed gain.
-*/
-double vpAdaptiveGain::
-value (const double val_e) const
+  */
+double vpAdaptiveGain::value (const double x) const
 {
   vpDEBUG_TRACE (10, "# Entree.");
 
-  this ->lambda = this ->value_const (val_e);
+  this ->lambda = this ->value_const (x);
 
   vpDEBUG_TRACE (10, "# Sortie: %.3f.", this ->lambda);
   return lambda;
@@ -247,13 +264,12 @@ value (const double val_e) const
 
 
 /*!
-  Gets the value of the gain at infinity (ie the value of \f$ c \f$)and stores it
+  Gets the value of the gain at infinity (ie the value of \f$\lambda(\infty) = c \f$) and stores it
   as a parameter of the class.
 
-  \return It returns the value of the gain at infinity (ie the value of \f$ c \f$).
+  \return It returns the value of the gain at infinity.
  */
-double vpAdaptiveGain::
-limitValue (void) const
+double vpAdaptiveGain:: limitValue (void) const
 {
   vpDEBUG_TRACE (10, "# Entree.");
 
@@ -276,42 +292,42 @@ limitValue (void) const
 // }
 
 /*!
-  Operator which calls the value(double val_e) method with \e val_e in parameter in order
-  to compute the adaptive gain corresponding to \e val_e.
+  Operator that computes \f$\lambda(x)\f$.
      
-  \param val_e : Norm of the task function \f$\mid s - s^*\mid\f$.
-      
+  \param x : Input value to consider. During a visual servo this value can be the euclidian
+  norm \f$||s - s^*||\f$ or the infinity norm \f$||s - s^*||_{\infty}\f$ of the task function.
+
   \return It returns the value of the computed gain.
+
+  \sa value()
 */
-double vpAdaptiveGain::
-operator() (const double val_e) const
+double vpAdaptiveGain::operator() (const double x) const
 {
-  return this ->value (val_e);
+  return this ->value (x);
 }
 
 /*!
-  Gets the value of the gain at infinity (ie the value of \f$ c \f$).
+  Gets the value of the gain at infinity (ie the value of \f$\lambda(\infty) = c \f$).
 
-  \return It returns the value of the gain at infinity (ie the value of \f$ c \f$).
+  \return It returns the value of the gain at infinity.
+
+  \sa limitValue()
  */
-double vpAdaptiveGain::
-operator() (void) const
+double vpAdaptiveGain::operator() (void) const
 {
   return this ->limitValue ();
 }
 
 /*!
-  Operator which calls the value(double val_e) method with the infinity norm of \e e in parameter in order
-  to compute the adaptive gain corresponding to \f$ |e| \f$.
+  Operator which computes \f$\lambda({||x||}_{\infty})\f$.
      
-  \param e : the task function \f$\mid s - s^*\mid\f$.
+  \param x : Input vector to consider.
       
   \return It returns the value of the computed gain.
 */
-double vpAdaptiveGain::
-operator()  (const vpColVector & e) const
+double vpAdaptiveGain::operator() (const vpColVector & x) const
 {
-  return this ->value (e .infinityNorm());
+  return this ->value (x .infinityNorm());
 }
 
 
@@ -325,14 +341,12 @@ operator()  (const vpColVector & e) const
 
 
 /*!
-  Prints the adaptive gain  coefficients. It prints the gain in 0, 
-  the gain to infinity and the slope in 0.
+  Prints the adaptive gain parameters \f$\lambda(0), \lambda(\infty), {\dot \lambda}(0)\f$.
   
   \param os : The stream where to print the adaptive gain parameters.
   \param lambda : The adaptive gain containing the parameters to print.
 */
-std::ostream&
-operator<< (std::ostream &os, const vpAdaptiveGain& lambda)
+VISP_EXPORT std::ostream& operator<< (std::ostream &os, const vpAdaptiveGain& lambda)
 {
   os << "Zero= " << lambda .coeff_a + lambda .coeff_c
      << "\tInf= " << lambda .coeff_c
@@ -340,11 +354,3 @@ operator<< (std::ostream &os, const vpAdaptiveGain& lambda)
 
   return os;
 }
-
-
-
-/*
- * Local variables:
- * c-basic-offset: 4
- * End:
- */
diff --git a/src/servo/vpAdaptiveGain.h b/src/servo/vpAdaptiveGain.h
index aa28a122..766cc8dc 100644
--- a/src/servo/vpAdaptiveGain.h
+++ b/src/servo/vpAdaptiveGain.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpAdaptiveGain.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpAdaptiveGain.h 4641 2014-02-05 12:42:03Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -59,19 +59,18 @@ class vpColVector;
   
   The formula used to compute the gain is the following :
   
-  \f[ lambda (x) = a * exp (-b*x) + c \f]
+  \f[ \lambda (x) = a * exp (-b*x) + c \f]
   
-  where \f$ a \f$, \f$ b \f$ and \f$ c \f$ are parameters which must be set 
-  and \f$ x \f$ is the vector error of the task.
+  where \f$ a \f$, \f$ b \f$ and \f$ c \f$ are constant parameters and \f$ x \f$ is the entry to consider.
   
-  By default, the parameters are set with default values:
-  \f[ a = lambda(0) - lambda(inf) \f]
-  \f[ b = lambda'(0) / a \f]
-  \f[ c = lambda(inf) \f]
+  The parameters \f$a,b,c\f$ are not set directly. They are computed from three other parameters
+  \f$\lambda(0), \lambda(\infty), {\dot \lambda}(0)\f$ that are more intuitive to tune:
+  \f[ a = \lambda(0) - \lambda(\infty) \f]
+  \f[ b = {\dot \lambda}(0) / a \f]
+  \f[ c = \lambda(\infty) \f]
   
-  with \f$ lambda(0) = 1.666 \f$, \f$ lambda(inf) = 0.1666 \f$ and \f$ lambda'(0) = 1.666 \f$.
-  
-  \f$ lambda(0)\f$ represents the gain in 0, \f$ lambda(inf)\f$ represents the gain to infinity and \f$ lambda'(0)\f$ represents the slope in 0.
+  where \f$ \lambda(0)\f$ represents the gain when \f$x=0\f$, \f$ \lambda(\infty)\f$ represents the gain when \f$x=\infty\f$
+  and \f$ {\dot \lambda}(0)\f$ represents the slope of \f$\lambda(x)\f$ when \f$x=0\f$.
   
 */
 
@@ -81,8 +80,8 @@ class VISP_EXPORT vpAdaptiveGain
 public: /* constantes */
 
     static const double DEFAULT_LAMBDA_ZERO;
-    static const double DEFAULT_LAMBDA_INFINI;
-    static const double DEFAULT_LAMBDA_PENTE;
+    static const double DEFAULT_LAMBDA_INFINITY;
+    static const double DEFAULT_LAMBDA_SLOPE;
 
 
 private: /* Attributs*/
@@ -101,14 +100,19 @@ public:  /* Methodes*/
 
     /* --- CONSTRUCTOR -------------------------------------------------------- */
 
-    vpAdaptiveGain (void);
+    vpAdaptiveGain ();
+    vpAdaptiveGain (double c);
+    vpAdaptiveGain (double gain_at_zero,
+                    double gain_at_infinity,
+                    double slope_at_zero);
+
 
     /* --- INIT --------------------------------------------------------------- */
-    void                        initFromConstant (double lambda);
+    void                        initFromConstant (double c);
     void                        initFromVoid (void);
-    void                        initStandard (double en_zero,
-					      double en_infini,
-					      double pente_en_zero);
+    void                        initStandard (double gain_at_zero,
+                                              double gain_at_infinity,
+                                              double slope_at_zero);
 
 
     /* --- MODIFIORS ---------------------------------------------------------- */
@@ -128,7 +132,7 @@ public:  /* Methodes*/
      * \param val_e: valeur de la norme de l'erreur.
      * \return: valeur de gain au point courrant.
      */
-    double                      value_const (double val_e) const;
+    double                      value_const (double x) const;
 
     /* \brief Calcule la valeur de lambda au point courrant et stockage du
      * resultat.
@@ -139,7 +143,7 @@ public:  /* Methodes*/
      * \param val_e: valeur de la norme de l'erreur.
      * \return: valeur de gain au point courrant.
      */
-    double                      value (double val_e) const;
+    double                      value (double x) const;
 
     double                      limitValue_const (void) const;
 
@@ -152,12 +156,12 @@ public:  /* Methodes*/
   
       \return It returns the last adaptive gain value which was stored in the class.
     */
-    inline double                      getLastValue (void) const {return this ->lambda;}
+    inline double               getLastValue (void) const {return this ->lambda;}
    
-    double                      operator() (double val_e) const;
+    double                      operator() (double x) const;
 
     /* \brief Lance la fonction valeur avec la norme INFINIE du vecteur. */
-    double                      operator()  (const vpColVector & e) const;
+    double                      operator()  (const vpColVector & x) const;
 
     /* \brief Idem function limitValue. */
     double                      operator() (void) const;
@@ -165,17 +169,7 @@ public:  /* Methodes*/
 
     /* --- IOSTREAM ----------------------------------------------------------- */
 
-    friend VISP_EXPORT std::ostream&        operator<< (std::ostream &os,
-					    const vpAdaptiveGain& lambda);
+    friend VISP_EXPORT std::ostream& operator<< (std::ostream &os, const vpAdaptiveGain& lambda);
 };
 
 #endif /*  __VP_ADAPTIVE_GAIN_H	*/
-
-
-
-
-/*
- * Local variables:
- * c-basic-offset: 4
- * End:
- */
diff --git a/src/servo/vpServo.cpp b/src/servo/vpServo.cpp
index 0e378b3a..02127dd5 100644
--- a/src/servo/vpServo.cpp
+++ b/src/servo/vpServo.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpServo.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpServo.cpp 4674 2014-02-17 15:34:41Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,30 +58,46 @@
 
 
 /*!
-  Default constructor.
-
-  By default:
-
-  - the interaction matrix \f$ L \f$ is computed with the desired
-    features \f$ s^*\f$ (\f$ L=L_{s^*}\f$). With
-    setInteractionMatrixType() you can also use the interaction matrix
-    with the current visual features \f$L_s\f$, or the mean \f$(L_s /
-    2 + L_{s^*} / 2)\f$.
-
-  - the control law is build from the pseudo inverse of the
-    interaction matrix \f$ v = - \lambda \; L^+ \; e\f$. With
-    setInteractionMatrixType() can also set the usage of the transpose
-    \f$ v = \lambda \; L^t \; e\f$ .
+  Default constructor that initializes the following settings:
+  - No control law is specified. The user has to call setServo() to specify the control law.
+  - In the control law, the interaction matrix \f${\widehat {\bf L}}_e \f$ is computed with the desired
+    features \f${\bf s}^*\f$. Using setInteractionMatrixType() you can also compute the
+    interaction matrix with the current visual features, or from the mean
+    \f$\left({\widehat {\bf L}}_s + {\widehat {\bf L}}_{s^*}\right)/2\f$.
+  - In the control law the pseudo inverse will be used. The method setInteractionMatrixType()
+    allows to use the transpose instead.
 
 */
 vpServo::vpServo() 
+  : L(), error(), J1(), J1p(), s(), sStar(), e1(), e(), q_dot(), v(), servoType(vpServo::NONE),
+    rankJ1(0), featureList(), desiredFeatureList(), featureSelectionList(), lambda(), signInteractionMatrix(1),
+    interactionMatrixType(DESIRED), inversionType(PSEUDO_INVERSE), cVe(), init_cVe(false),
+    cVf(), init_cVf(false), fVe(), init_fVe(false), eJe(), init_eJe(false), fJe(), init_fJe(false),
+    errorComputed(false), interactionMatrixComputed(false), dim_task(0), taskWasKilled(false),
+    forceInteractionMatrixComputation(false), WpW(), I_WpW(), sv(), mu(4.)
 {
-  init() ;
 }
+/*!
+  Constructor that allows to choose the visual servoing control law.
+  \param servo_type : Visual servoing control law.
 
-vpServo::vpServo(vpServoType _servoType)
+  The other settings are the following:
+  - In the control law, the interaction matrix \f${\widehat {\bf L}}_e \f$ is computed with the desired
+    features \f${\bf s}^*\f$. Using setInteractionMatrixType() you can also compute the
+    interaction matrix with the current visual features, or from the mean
+    \f$\left({\widehat {\bf L}}_s + {\widehat {\bf L}}_{s^*}\right)/2\f$.
+  - In the control law the pseudo inverse will be used. The method setInteractionMatrixType()
+    allows to use the transpose instead.
+
+ */
+vpServo::vpServo(vpServoType servo_type)
+  : L(), error(), J1(), J1p(), s(), sStar(), e1(), e(), q_dot(), v(), servoType(servo_type),
+    rankJ1(0), featureList(), desiredFeatureList(), featureSelectionList(), lambda(), signInteractionMatrix(1),
+    interactionMatrixType(DESIRED), inversionType(PSEUDO_INVERSE), cVe(), init_cVe(false),
+    cVf(), init_cVf(false), fVe(), init_fVe(false), eJe(), init_eJe(false), fJe(), init_fJe(false),
+    errorComputed(false), interactionMatrixComputed(false), dim_task(0), taskWasKilled(false),
+    forceInteractionMatrixComputation(false), WpW(), I_WpW(), sv(), mu(4)
 {
-  setServo(_servoType);
 }
 
 /*!
@@ -108,24 +124,19 @@ vpServo::~vpServo()
 
 
 /*!
-  Initialize the servo.
-
-  By default:
+  Initialize the servo with the following settings:
 
-  - the interaction matrix \f$ L \f$ is computed with the desired
-    features \f$ s^*\f$ (\f$ L=L_{s^*}\f$). With
-    setInteractionMatrixType() you can also use the interaction matrix
-    with the current visual features \f$L_s\f$, or the mean \f$(L_s /
-    2 + L_{s^*} / 2)\f$.
+  - No control law is specified. The user has to call setServo() to specify the control law.
+  - In the control law, the interaction matrix \f${\widehat {\bf L}}_e \f$ is computed with the desired
+    features \f${\bf s}^*\f$. Using setInteractionMatrixType() you can also compute the
+    interaction matrix with the current visual features, or from the mean
+    \f$\left({\widehat {\bf L}}_s + {\widehat {\bf L}}_{s^*}\right)/2\f$.
+  - In the control law the pseudo inverse will be used. The method setInteractionMatrixType()
+    allows to use the transpose instead.
 
-  - the control law is build from the pseudo inverse of the
-    interaction matrix \f$ v = - \lambda \; L^+ \; e\f$. With
-    setInteractionMatrixType() can also set the usage of the transpose
-    \f$ v = \lambda \; L^t \; e\f$ .
 
 */
-void
-    vpServo::init()
+void vpServo::init()
 {
   // type of visual servoing
   servoType = vpServo::NONE ;
@@ -140,9 +151,9 @@ void
 
   dim_task = 0 ;
 
-  featureList.kill() ;
-  desiredFeatureList.kill() ;
-  featureSelectionList.kill();
+  featureList.clear() ;
+  desiredFeatureList.clear() ;
+  featureSelectionList.clear();
 
   signInteractionMatrix = 1 ;
 
@@ -155,6 +166,8 @@ void
   taskWasKilled = false;
 
   forceInteractionMatrixComputation = false;
+
+  rankJ1 = 0;
 }
 
 /*!
@@ -173,56 +186,46 @@ void
   \endcode
 
 */
-void
-    vpServo::kill()
+void vpServo::kill()
 {
   if (taskWasKilled == false) {
     // kill the current and desired feature lists
-    featureList.front() ;
-    desiredFeatureList.front() ;
 
-    while (!featureList.outside()) {
-      vpBasicFeature *s_ptr = NULL;
-
-      // current list
-      s_ptr=  featureList.value() ;
-      if (s_ptr->getDeallocate() == vpBasicFeature::vpServo)
-      {
-        delete s_ptr ;
-        s_ptr = NULL ;
+    // current list
+    for(std::list<vpBasicFeature *>::iterator it = featureList.begin(); it != featureList.end(); ++it) {
+      if ((*it)->getDeallocate() == vpBasicFeature::vpServo) {
+        delete (*it) ;
+        (*it) = NULL ;
       }
-
+    }
       //desired list
-      s_ptr=  desiredFeatureList.value() ;
-      if (s_ptr->getDeallocate() == vpBasicFeature::vpServo)
-      {
-        //	    s_ptr->print() ;
-        delete s_ptr ;
-        s_ptr = NULL ;
+    for(std::list<vpBasicFeature *>::iterator it = desiredFeatureList.begin(); it != desiredFeatureList.end(); ++it) {
+      if ((*it)->getDeallocate() == vpBasicFeature::vpServo) {
+        delete (*it) ;
+        (*it) = NULL ;
       }
-
-      desiredFeatureList.next() ;
-      featureList.next() ;
     }
-    featureList.kill() ;
-    desiredFeatureList.kill() ;
+
+    featureList.clear() ;
+    desiredFeatureList.clear() ;
     taskWasKilled = true;
   }
 }
 
-void
-    vpServo::setServo(vpServoType _servoType)
+/*!
+  Set the visual servoing control law.
+  \param servo_type : Control law that will be considered.
+  See vpServo::vpServoType to see the possible values.
+ */
+void vpServo::setServo(const vpServoType &servo_type)
 {
-
-  servoType = _servoType ;
+  this->servoType = servo_type ;
 
   if ((servoType==EYEINHAND_CAMERA) ||(servoType==EYEINHAND_L_cVe_eJe))
     signInteractionMatrix = 1 ;
   else
     signInteractionMatrix = -1 ;
 
-
-
   // when the control is directly compute in the camera frame
   // we relieve the end-user to initialize cVa and aJe
   if (servoType==EYEINHAND_CAMERA)
@@ -233,7 +236,6 @@ void
     _eJe.eye(6) ;
     set_eJe(_eJe) ;
   };
-
 }
 
 
@@ -241,16 +243,7 @@ void
 
   Prints on \e os stream information about the task:
 
-  \param displayLevel : If vpServo::ALL prints
-  - Type of control law (eye-in-hand, eye-to-hand)
-  - Control frame (camera frame, joint space)
-  - List of current visual features : s
-  - List of desired visual features : s*
-  - Interaction Matrix Ls
-  - Error vector (s-s*)
-  - Gain of the controller
-
-  \param displayLevel : If vpServo::MINIMUM prints only the error vector (s-s*).
+  \param displayLevel : Indicates which are the task informations to print. See vpServo::vpServoPrintType for more details.
 
   \param os : Output stream.
 */
@@ -259,11 +252,8 @@ void
 {
   switch (displayLevel)
   {
-
   case vpServo::ALL:
-
     {
-
       os << "Visual servoing task: " <<std::endl ;
 
       os << "Type of control law " <<std::endl ;
@@ -295,30 +285,21 @@ void
       }
 
       os << "List of visual features : s" <<std::endl ;
-      for (featureList.front(),
-           featureSelectionList.front() ;
-      !featureList.outside() ;
-      featureList.next(),
-      featureSelectionList.next()  )
+      std::list<vpBasicFeature *>::const_iterator it_s;
+      std::list<vpBasicFeature *>::const_iterator it_s_star;
+      std::list<unsigned int>::const_iterator it_select;
+
+      for (it_s = featureList.begin(), it_select = featureSelectionList.begin(); it_s != featureList.end(); ++it_s, ++it_select)
       {
-        vpBasicFeature *s ;
-        s = featureList.value();
         os << "" ;
-        s->print(featureSelectionList.value()) ;
+        (*it_s)->print( (*it_select) ) ;
       }
 
-
       os << "List of desired visual features : s*" <<std::endl ;
-      for (desiredFeatureList.front(),
-           featureSelectionList.front() ;
-      !desiredFeatureList.outside() ;
-      desiredFeatureList.next(),
-      featureSelectionList.next()  )
+      for (it_s_star = desiredFeatureList.begin(), it_select = featureSelectionList.begin(); it_s_star != desiredFeatureList.end(); ++it_s_star, ++it_select)
       {
-        vpBasicFeature *s ;
-        s = desiredFeatureList.value();
         os << "" ;
-        s->print(featureSelectionList.value()) ;
+        (*it_s_star)->print( (*it_select) ) ;
       }
 
       os <<"Interaction Matrix Ls "<<std::endl  ;
@@ -327,7 +308,9 @@ void
         os << L << std::endl;
       }
       else
-      {os << "not yet computed "<<std::endl ;}
+      {
+        os << "not yet computed "<<std::endl ;
+      }
 
       os <<"Error vector (s-s*) "<<std::endl  ;
       if (errorComputed)
@@ -335,7 +318,9 @@ void
         os << error.t() << std::endl;
       }
       else
-      {os << "not yet computed "<<std::endl ;}
+      {
+        os << "not yet computed "<<std::endl ;
+      }
 
       os << "Gain : " << lambda <<std::endl ;
 
@@ -377,33 +362,28 @@ void
   case vpServo::FEATURE_CURRENT:
     {
       os << "List of visual features : s" <<std::endl ;
-      for (featureList.front(),
-           featureSelectionList.front() ;
-      !featureList.outside() ;
-      featureList.next(),
-      featureSelectionList.next()  )
+
+      std::list<vpBasicFeature *>::const_iterator it_s;
+      std::list<unsigned int>::const_iterator it_select;
+
+      for (it_s = featureList.begin(), it_select = featureSelectionList.begin(); it_s != featureList.end(); ++it_s, ++it_select)
       {
-        vpBasicFeature *s ;
-        s = featureList.value();
         os << "" ;
-        s->print(featureSelectionList.value()) ;
+        (*it_s)->print( (*it_select) ) ;
       }
-
       break;
     }
   case vpServo::FEATURE_DESIRED:
     {
       os << "List of desired visual features : s*" <<std::endl ;
-      for (desiredFeatureList.front(),
-           featureSelectionList.front() ;
-      !desiredFeatureList.outside() ;
-      desiredFeatureList.next(),
-      featureSelectionList.next()  )
+
+      std::list<vpBasicFeature *>::const_iterator it_s_star;
+      std::list<unsigned int>::const_iterator it_select;
+
+      for (it_s_star = desiredFeatureList.begin(), it_select = featureSelectionList.begin(); it_s_star != desiredFeatureList.end(); ++it_s_star, ++it_select)
       {
-        vpBasicFeature *s ;
-        s = desiredFeatureList.value();
         os << "" ;
-        s->print(featureSelectionList.value()) ;
+        (*it_s_star)->print( (*it_select) ) ;
       }
       break;
     }
@@ -415,12 +395,12 @@ void
   case vpServo::INTERACTION_MATRIX:
     {
       os <<"Interaction Matrix Ls "<<std::endl  ;
-      if (interactionMatrixComputed)
-      {
+      if (interactionMatrixComputed) {
         os << L << std::endl;
       }
-      else
-      {os << "not yet computed "<<std::endl ;}
+      else {
+        os << "not yet computed "<<std::endl ;
+      }
       break;
     }
 
@@ -429,33 +409,76 @@ void
 
     {
       os <<"Error vector (s-s*) "<<std::endl  ;
-      if (errorComputed)
-      {  os << error.t() << std::endl;  }
-      else
-      {os << "not yet computed "<<std::endl ;}
+      if (errorComputed) {
+        os << error.t() << std::endl;
+      }
+      else {
+        os << "not yet computed "<<std::endl ;
+      }
 
       break;
     }
   }
 }
 
-//! create a new set of 2 features in the task
-void
-    vpServo::addFeature(vpBasicFeature& s, vpBasicFeature &s_star, unsigned int select)
+/*!
+  Add a new set of 2 features \f$\bf s\f$ and \f${\bf s}^*\f$ in the task.
+
+  \param s_cur : Current visual feature denoted \f$\bf s\f$.
+  \param s_star : Desired visual feature denoted \f${\bf s}^*\f$.
+  \param select : Feature selector. By default all the features in \e s and \e s_star are used,
+  but is is possible to specify which one is used in case of multiple features.
+
+  The following sample code explain how to use this method to add a visual feature point \f$(x,y)\f$:
+  \code
+  vpFeaturePoint s, s_star;
+  ...
+  vpServo task;
+  task.addFeature(s, s_star);
+  \endcode
+
+  For example to use only the \f$x\f$ visual feature, the previous code becomes:
+  \code
+  vpFeaturePoint s, s_star;
+  ...
+  vpServo task;
+  task.addFeature(s, s_star, vpFeaturePoint::selectX());
+  \endcode
+
+  */
+void vpServo::addFeature(vpBasicFeature& s_cur, vpBasicFeature &s_star, unsigned int select)
 {
-  featureList += &s ;
-  desiredFeatureList += &s_star ;
-  featureSelectionList+= select ;
+  featureList.push_back( &s_cur );
+  desiredFeatureList.push_back( &s_star );
+  featureSelectionList.push_back( select );
 }
 
 /*!
-  \brief create a new visual  features in the task
-  (the desired feature is then null)
-*/
-void
-    vpServo::addFeature(vpBasicFeature& s, unsigned int select)
+  Add a new features \f$\bf s\f$ in the task. The desired visual feature denoted \f${\bf s}^*\f$ is equal to zero.
+
+  \param s_cur : Current visual feature denoted \f$\bf s\f$.
+  \param select : Feature selector. By default all the features in \e s are used,
+  but is is possible to specify which one is used in case of multiple features.
+
+  The following sample code explain how to use this method to add a \f$\theta {\bf u} =(\theta u_x, \theta u_y, \theta u_z)\f$ feature:
+  \code
+  vpFeatureThetaU s(vpFeatureThetaU::cRcd);
+  ...
+  vpServo task;
+  task.addFeature(s);
+  \endcode
+
+  For example to use only the \f$\theta u_x\f$ feature, the previous code becomes:
+  \code
+  vpFeatureThetaU s(vpFeatureThetaU::cRcd);
+  ...
+  vpServo task;
+  task.addFeature(s, vpFeatureThetaU::selectTUx);
+  \endcode
+  */
+void vpServo::addFeature(vpBasicFeature& s_cur, unsigned int select)
 {
-  featureList += &s ;
+  featureList.push_back( &s_cur );
 
   // in fact we have a problem with s_star that is not defined
   // by the end user.
@@ -472,51 +495,41 @@ void
   // vpServo must deallocate the memory (see ~vpServo and kill() )
 
   vpBasicFeature *s_star ;
-  s_star = s.duplicate()  ;
+  s_star = s_cur.duplicate()  ;
 
   s_star->init() ;
   s_star->setDeallocate(vpBasicFeature::vpServo)  ;
 
-  desiredFeatureList += s_star ;
-  featureSelectionList+= select ;
+  desiredFeatureList.push_back( s_star );
+  featureSelectionList.push_back( select );
 }
 
-//! get the task dimension
-unsigned int
-    vpServo::getDimension()
+//! Return the task dimension.
+unsigned int vpServo::getDimension() const
 {
+  unsigned int dim = 0 ;
+  std::list<vpBasicFeature *>::const_iterator it_s;
+  std::list<unsigned int>::const_iterator it_select;
 
-  featureList.front() ;
-  featureSelectionList.front() ;
-
-  dim_task  =0 ;
-  while (!featureList.outside())
+  for (it_s = featureList.begin(), it_select = featureSelectionList.begin(); it_s != featureList.end(); ++it_s, ++it_select)
   {
-    vpBasicFeature *s_ptr = NULL;
-    s_ptr=  featureList.value() ;
-    unsigned int select = (unsigned int)featureSelectionList.value() ;
-
-    dim_task += (unsigned int)s_ptr->getDimension(select) ;
-
-    featureSelectionList.next() ;
-    featureList.next() ;
+    dim += (*it_s)->getDimension(*it_select) ;
   }
 
-  return dim_task ;
+  return dim;
 }
 
-void
-    vpServo::setInteractionMatrixType(const vpServoIteractionMatrixType &_interactionMatrixType, const vpServoInversionType &_interactionMatrixInversion)
+void vpServo::setInteractionMatrixType(const vpServoIteractionMatrixType &interactionMatrix_type,
+                                       const vpServoInversionType &interactionMatrixInversion)
 {
-  interactionMatrixType = _interactionMatrixType ;
-  inversionType = _interactionMatrixInversion ;
+  this->interactionMatrixType = interactionMatrix_type ;
+  this->inversionType = interactionMatrixInversion ;
 }
 
 
-static void
-    computeInteractionMatrixFromList  (/*const*/ vpList<vpBasicFeature *> & featureList,
-                                                 /*const*/ vpList<unsigned int> & featureSelectionList,
-                                                           vpMatrix & L)
+static void computeInteractionMatrixFromList  (const std::list<vpBasicFeature *> & featureList,
+                                               const std::list<unsigned int> & featureSelectionList,
+                                               vpMatrix & L)
 {
   if (featureList.empty())
   {
@@ -539,7 +552,10 @@ static void
    * initialized to dim 1.*/
   unsigned int rowL = L.getRows();
   const unsigned int colL = 6;
-  if (0 == rowL) { rowL = 1; L .resize(rowL, colL);}
+  if (0 == rowL) {
+    rowL = 1;
+    L .resize(rowL, colL);
+  }
 
   /* vectTmp is used to store the return values of functions get_s() and
    * error(). */
@@ -551,27 +567,29 @@ static void
    * is out of the vector-array range.*/
   unsigned int cursorL = 0;
 
-  for (featureList.front() ,featureSelectionList.front() ;
-  !featureList.outside();
-  featureSelectionList.next(),featureList.next() )
-  {
-    vpBasicFeature * sPTR = featureList.value() ;
-    const unsigned int select = featureSelectionList.value() ;
+  std::list<vpBasicFeature *>::const_iterator it;
+  std::list<unsigned int>::const_iterator it_select;
 
+  for (it = featureList.begin(), it_select = featureSelectionList.begin(); it != featureList.end(); ++it, ++it_select)
+  {
     /* Get s. */
-    matrixTmp = sPTR->interaction(select);
+    matrixTmp = (*it)->interaction( *it_select );
     rowMatrixTmp = matrixTmp .getRows();
     colMatrixTmp = matrixTmp .getCols();
 
     /* Check the matrix L size, and realloc if needed. */
-    while (rowMatrixTmp + cursorL > rowL)
-    { rowL *= 2; L .resize (rowL,colL,false); vpDEBUG_TRACE(15,"Realloc!"); }
+    while (rowMatrixTmp + cursorL > rowL) {
+      rowL *= 2;
+      L.resize (rowL,colL,false);
+      vpDEBUG_TRACE(15,"Realloc!");
+    }
 
     /* Copy the temporarily matrix into L. */
-    for (unsigned int k = 0; k < rowMatrixTmp; ++k, ++cursorL)
-      for (unsigned int j = 0; j <  colMatrixTmp; ++j)
-      { L[cursorL][j] = matrixTmp[k][j]; }
-
+    for (unsigned int k = 0; k < rowMatrixTmp; ++k, ++cursorL) {
+      for (unsigned int j = 0; j <  colMatrixTmp; ++j) {
+        L[cursorL][j] = matrixTmp[k][j];
+      }
+    }
   }
 
   L.resize (cursorL,colL,false);
@@ -582,14 +600,12 @@ static void
 
 /*!
 
-  Compute the interaction matrix related to the set of visual features.
+  Compute and return the interaction matrix related to the set of visual features.
 
-  \return Ls
+  \return The interaction matrix \f${\widehat {\bf L}}_e\f$ used in the control law specified using setServo().
 */
-vpMatrix
-    vpServo::computeInteractionMatrix()
+vpMatrix vpServo::computeInteractionMatrix()
 {
-
   try {
 
     switch (interactionMatrixType)
@@ -671,15 +687,13 @@ vpMatrix
 
 /*! 
 
-  Compute the error \f$(s - s^*)\f$ between the current set of visual
-  features \f$s\f$ and the desired set of visual features \f$s^*\f$.
+  Compute the error \f$\bf e =(s - s^*)\f$ between the current set of visual
+  features \f$\bf s\f$ and the desired set of visual features \f$\bf s^*\f$.
 
-  \return The error \f$(s - s^*)\f$. To access to the computed error
-  you can also use the public vpServo::error class member.
+  \return The error vector \f$\bf e\f$.
 
 */
-vpColVector
-    vpServo::computeError()
+vpColVector vpServo::computeError()
 {
   if (featureList.empty())
   {
@@ -732,19 +746,17 @@ vpColVector
     unsigned int cursorError = 0;
 
     /* For each cell of the list, copy value of s, s_star and error. */
-    for (featureList.front(),
-         desiredFeatureList.front(),
-         featureSelectionList.front() ;
+    std::list<vpBasicFeature *>::const_iterator it_s;
+    std::list<vpBasicFeature *>::const_iterator it_s_star;
+    std::list<unsigned int>::const_iterator it_select;
 
-    !featureList.outside() ;
-
-    featureList.next(),
-    desiredFeatureList.next(),
-    featureSelectionList.next() )
+    for (it_s = featureList.begin(), it_s_star = desiredFeatureList.begin(), it_select = featureSelectionList.begin();
+         it_s != featureList.end();
+         ++it_s, ++it_s_star, ++it_select)
     {
-      current_s  = featureList.value() ;
-      desired_s  = desiredFeatureList.value() ;
-      unsigned int select = featureSelectionList.value() ;
+      current_s  = (*it_s);
+      desired_s  = (*it_s_star);
+      unsigned int select = (*it_select);
 
       /* Get s, and store it in the s vector. */
       vectTmp = current_s->get_s(select);
@@ -753,22 +765,27 @@ vpColVector
       { dimS *= 2; s .resize (dimS,false); vpDEBUG_TRACE(15,"Realloc!"); }
       for (unsigned int k = 0; k <  dimVectTmp; ++k) { s[cursorS++] = vectTmp[k]; }
 
-
       /* Get s_star, and store it in the s vector. */
       vectTmp = desired_s->get_s(select);
       dimVectTmp = vectTmp .getRows();
-      while (dimVectTmp + cursorSStar > dimSStar)
-      { dimSStar *= 2; sStar .resize (dimSStar,false);  }
-      for (unsigned int k = 0; k <  dimVectTmp; ++k)
-      { sStar[cursorSStar++] = vectTmp[k]; }
+      while (dimVectTmp + cursorSStar > dimSStar) {
+        dimSStar *= 2;
+        sStar.resize (dimSStar,false);
+      }
+      for (unsigned int k = 0; k <  dimVectTmp; ++k) {
+        sStar[cursorSStar++] = vectTmp[k];
+      }
 
       /* Get error, and store it in the s vector. */
       vectTmp = current_s->error(*desired_s, select) ;
       dimVectTmp = vectTmp .getRows();
-      while (dimVectTmp + cursorError > dimError)
-      { dimError *= 2; error .resize (dimError,false);  }
-      for (unsigned int k = 0; k <  dimVectTmp; ++k)
-      { error[cursorError++] = vectTmp[k]; }
+      while (dimVectTmp + cursorError > dimError) {
+        dimError *= 2;
+        error.resize (dimError,false);
+      }
+      for (unsigned int k = 0; k <  dimVectTmp; ++k) {
+        error[cursorError++] = vectTmp[k];
+      }
     }
 
     /* If too much memory has been allocated, realloc. */
@@ -792,8 +809,7 @@ vpColVector
   return error ;
 }
 
-bool
-    vpServo::testInitialization()
+bool vpServo::testInitialization()
 {
   switch (servoType)
   {
@@ -827,8 +843,7 @@ bool
 
   return false ;
 }
-bool
-    vpServo::testUpdated()
+bool vpServo::testUpdated()
 {
   switch (servoType)
   {
@@ -863,26 +878,197 @@ bool
   return false ;
 }
 /*!
-  \brief compute the desired control law
 
-  Compute the control law according to the equation:
+  Compute the control law specified using setServo(). See vpServo::vpServoType for more
+  details concerning the control laws that are available. The \ref tutorial-ibvs and \ref tutorial-boost-vs
+  are also useful to illustrate the usage of this function.
+
+  The general form of the control law is the following:
+
   \f[
-  -\lambda {\bf W^+W\widehat J_s^+(s-s^*)}
+  {\bf \dot q}  = \pm \lambda {{\bf \widehat J}_e}^+ {\bf e}
   \f]
-  or
+
+  where :
+  - \f${\bf \dot q}\f$ is the resulting velocity command to apply to the robot.
+  - the sign of the control law depends on the eye in hand or eye to hand configuration.
+  - \f$\bf J\f$ is the Jacobian of the task. It is function of the interaction matrix and of the robot
+  Jacobian.
+  - \f$\bf e = (s-s^*)\f$ is the error to regulate.
+
+  To ensure continuous sequencing the computeControlLaw(double) function can be used. It will ensure that
+  the velocities that are computed are continuous.
+*/
+vpColVector vpServo::computeControlLaw()
+{
+  static int iteration =0;
+
+  try
+  {
+    vpVelocityTwistMatrix cVa ; // Twist transformation matrix
+    vpMatrix aJe ;      // Jacobian
+
+    if (iteration==0)
+    {
+      if (testInitialization() == false) {
+        vpERROR_TRACE("All the matrices are not correctly initialized") ;
+        throw(vpServoException(vpServoException::servoError,
+                               "Cannot compute control law "
+                               "All the matrices are not correctly"
+                               "initialized")) ;
+      }
+    }
+    if (testUpdated() == false) {
+      vpERROR_TRACE("All the matrices are not correctly updated") ;
+    }
+
+    // test if all the required initialization have been done
+    switch (servoType)
+    {
+    case NONE :
+      vpERROR_TRACE("No control law have been yet defined") ;
+      throw(vpServoException(vpServoException::servoError,
+                             "No control law have been yet defined")) ;
+      break ;
+    case EYEINHAND_CAMERA:
+    case EYEINHAND_L_cVe_eJe:
+    case EYETOHAND_L_cVe_eJe:
+
+      cVa = cVe ;
+      aJe = eJe ;
+
+      init_cVe = false ;
+      init_eJe = false ;
+      break ;
+    case  EYETOHAND_L_cVf_fVe_eJe:
+      cVa = cVf*fVe ;
+      aJe = eJe ;
+      init_fVe = false ;
+      init_eJe = false ;
+      break ;
+    case EYETOHAND_L_cVf_fJe    :
+      cVa = cVf ;
+      aJe = fJe ;
+      init_fJe = false ;
+      break ;
+    }
+
+    computeInteractionMatrix() ;
+    computeError() ;
+
+    // compute  task Jacobian
+    J1 = L*cVa*aJe ;
+
+    // handle the eye-in-hand eye-to-hand case
+    J1 *= signInteractionMatrix ;
+
+    // pseudo inverse of the task Jacobian
+    // and rank of the task Jacobian
+    // the image of J1 is also computed to allows the computation
+    // of the projection operator
+    vpMatrix imJ1t, imJ1 ;
+    bool imageComputed = false ;
+
+    if (inversionType==PSEUDO_INVERSE)
+    {
+      rankJ1 = J1.pseudoInverse(J1p, sv, 1e-6, imJ1, imJ1t) ;
+
+      imageComputed = true ;
+    }
+    else
+      J1p = J1.t() ;
+
+    if (rankJ1 == L.getCols())
+    {
+      /* if no degrees of freedom remains (rank J1 = ndof)
+       WpW = I, multiply by WpW is useless
+    */
+      e1 = J1p*error ;// primary task
+
+      WpW.resize(J1.getCols(), J1.getCols()) ;
+      WpW.setIdentity() ;
+    }
+    else
+    {
+      if (imageComputed!=true)
+      {
+        vpMatrix Jtmp ;
+        // image of J1 is computed to allows the computation
+        // of the projection operator
+        rankJ1 = J1.pseudoInverse(Jtmp, sv, 1e-6, imJ1, imJ1t) ;
+        imageComputed = true ;
+      }
+      WpW = imJ1t*imJ1t.t() ;
+
+#ifdef DEBUG
+      std::cout << "rank J1 " << rankJ1 <<std::endl ;
+      std::cout << "imJ1t"<<std::endl  << imJ1t ;
+      std::cout << "imJ1"<<std::endl  << imJ1 ;
+
+      std::cout << "WpW" <<std::endl <<WpW  ;
+      std::cout << "J1" <<std::endl <<J1  ;
+      std::cout << "J1p" <<std::endl <<J1p  ;
+#endif
+      e1 = WpW*J1p*error ;
+    }
+    e = - lambda(e1) * e1 ;
+
+    vpMatrix I ;
+
+    I.resize(J1.getCols(),J1.getCols()) ;
+    I.setIdentity() ;
+
+    I_WpW = (I - WpW) ;
+  }
+  catch(vpMatrixException me)
+  {
+    vpERROR_TRACE("Caught a matrix related error") ;
+    std::cout << me << std::endl ;
+    throw me;
+  }
+  catch(vpException me)
+  {
+    vpERROR_TRACE("Error caught") ;
+    std::cout << me << std::endl ;
+    throw me ;
+  }
+
+  iteration++ ;
+  return e ;
+}
+
+/*!
+  Compute the control law specified using setServo(). See vpServo::vpServoType for more
+  details concerning the control laws that are available. The \ref tutorial-boost-vs is also useful to
+  illustrate the usage of this function.
+
+  To the general form of the control law given in computeControlLaw(), we add here an additional term that comes from
+  the task sequencing approach described in \cite Mansard07e equation (17). This additional term allows to compute
+  continuous velocities by avoiding abrupt changes in the command.
+
+  The form of the control law considered here is the following:
+
   \f[
-  -\lambda {\bf\widehat J_s^+(s-s^*)}
+  {\bf \dot q} = \pm \lambda {{\bf \widehat J}_e}^+ {\bf e} \mp \lambda {{\bf \widehat J}_{e(0)}}^+ {{\bf e}(0)} \exp(-\mu t)
   \f]
-  if the dimension of the task is equal to number of available degrees of freedom (in that case \f${\bf W^+W = I}\f$)
 
-  in this equation Js is function of the interaction matrix and of the robot
-  Jacobian. It is also built according to the chosen configuration eye-in-hand
-  or eye-to-hand (see vpServo::setServo method)
+  where :
+  - \f${\bf \dot q}\f$ is the resulting continuous velocity command to apply to the robot.
+  - the sign of the control law depends on the eye in hand or eye to hand configuration.
+  - \f$\bf J\f$ is the Jacobian of the task. It is function of the interaction matrix and of the robot
+  Jacobian.
+  - \f$\bf e = (s-s^*)\f$ is the error to regulate.
+  - \f$t\f$ is the time given as parameter of this method.
+  - \f$\mu\f$ is a gain that is set by default to 4 and that could be modified using setMu().
+  - \f${\bf \widehat J}_{e(0)}^+ {\bf e}(0)\f$ is the value of \f${\bf \widehat J}_e^+ {\bf e}\f$ when \f$t=0\f$.
+  This value is internally stored either at the first call of this method, or when \e t parameter is set to 0.
+
+  \param t : Time in second. When set to zero, \f${{\bf \widehat J}_{e(0)}}^+ {{\bf e}(0)}\f$ is refreshed internally.
 */
-vpColVector
-    vpServo::computeControlLaw()
+vpColVector vpServo::computeControlLaw(double t)
 {
   static int iteration =0;
+  static vpColVector e1_initial;
 
   try
   {
@@ -891,24 +1077,188 @@ vpColVector
 
     if (iteration==0)
     {
-      if (testInitialization() == true)
-	    {
-	    }
-      else
-	    {
-	      vpERROR_TRACE("All the matrices are not correctly initialized") ;
-	      throw(vpServoException(vpServoException::servoError,
+      if (testInitialization() == false) {
+        vpERROR_TRACE("All the matrices are not correctly initialized") ;
+        throw(vpServoException(vpServoException::servoError,
                                "Cannot compute control law "
                                "All the matrices are not correctly"
                                "initialized")) ;
-	    }
+      }
+    }
+    if (testUpdated() == false) {
+      vpERROR_TRACE("All the matrices are not correctly updated") ;
+    }
+
+    // test if all the required initialization have been done
+    switch (servoType)
+    {
+    case NONE :
+      vpERROR_TRACE("No control law have been yet defined") ;
+      throw(vpServoException(vpServoException::servoError,
+                             "No control law have been yet defined")) ;
+      break ;
+    case EYEINHAND_CAMERA:
+    case EYEINHAND_L_cVe_eJe:
+    case EYETOHAND_L_cVe_eJe:
+
+      cVa = cVe ;
+      aJe = eJe ;
+
+      init_cVe = false ;
+      init_eJe = false ;
+      break ;
+    case  EYETOHAND_L_cVf_fVe_eJe:
+      cVa = cVf*fVe ;
+      aJe = eJe ;
+      init_fVe = false ;
+      init_eJe = false ;
+      break ;
+    case EYETOHAND_L_cVf_fJe    :
+      cVa = cVf ;
+      aJe = fJe ;
+      init_fJe = false ;
+      break ;
+    }
+
+    computeInteractionMatrix() ;
+    computeError() ;
+
+    // compute  task Jacobian
+    J1 = L*cVa*aJe ;
+
+    // handle the eye-in-hand eye-to-hand case
+    J1 *= signInteractionMatrix ;
+
+    // pseudo inverse of the task Jacobian
+    // and rank of the task Jacobian
+    // the image of J1 is also computed to allows the computation
+    // of the projection operator
+    vpMatrix imJ1t, imJ1 ;
+    bool imageComputed = false ;
+
+    if (inversionType==PSEUDO_INVERSE)
+    {
+      rankJ1 = J1.pseudoInverse(J1p, sv, 1e-6, imJ1, imJ1t) ;
+
+      imageComputed = true ;
     }
-    if (testUpdated() == true)
+    else
+      J1p = J1.t() ;
+
+    if (rankJ1 == L.getCols())
     {
-      //  os << " Init OK " << std::endl ;
+      /* if no degrees of freedom remains (rank J1 = ndof)
+       WpW = I, multiply by WpW is useless
+    */
+      e1 = J1p*error ;// primary task
+
+      WpW.resize(J1.getCols(), J1.getCols()) ;
+      WpW.setIdentity() ;
     }
     else
     {
+      if (imageComputed!=true)
+      {
+        vpMatrix Jtmp ;
+        // image of J1 is computed to allows the computation
+        // of the projection operator
+        rankJ1 = J1.pseudoInverse(Jtmp, sv, 1e-6, imJ1, imJ1t) ;
+        imageComputed = true ;
+      }
+      WpW = imJ1t*imJ1t.t() ;
+
+#ifdef DEBUG
+      std::cout << "rank J1 " << rankJ1 <<std::endl ;
+      std::cout << "imJ1t"<<std::endl  << imJ1t ;
+      std::cout << "imJ1"<<std::endl  << imJ1 ;
+
+      std::cout << "WpW" <<std::endl <<WpW  ;
+      std::cout << "J1" <<std::endl <<J1  ;
+      std::cout << "J1p" <<std::endl <<J1p  ;
+#endif
+      e1 = WpW*J1p*error ;
+    }
+
+    // memorize the initial e1 value if the function is called the first time or if the time given as parameter is equal to 0.
+    if (iteration==0 || std::fabs(t) < std::numeric_limits<double>::epsilon()) {
+      e1_initial = e1;
+    }
+
+    e = - lambda(e1) * e1 + lambda(e1) * e1_initial*exp(-mu*t);
+
+    vpMatrix I ;
+
+    I.resize(J1.getCols(), J1.getCols()) ;
+    I.setIdentity() ;
+
+    I_WpW = (I - WpW) ;
+  }
+  catch(vpMatrixException me)
+  {
+    vpERROR_TRACE("Caught a matrix related error") ;
+    std::cout << me << std::endl ;
+    throw me;
+  }
+  catch(vpException me)
+  {
+    vpERROR_TRACE("Error caught") ;
+    std::cout << me << std::endl ;
+    throw me ;
+  }
+
+  iteration++ ;
+  return e ;
+}
+
+/*!
+  Compute the control law specified using setServo(). See vpServo::vpServoType for more
+  details concerning the control laws that are available.
+
+  To the general form of the control law given in computeControlLaw(), we add here an additional term that comes from
+  the task sequencing approach described in \cite Mansard07e equation (17). This additional term allows to compute
+  continuous velocities by avoiding abrupt changes in the command.
+
+  The form of the control law considered here is the following:
+
+  \f[
+  {\bf \dot q} = \pm \lambda {{\bf \widehat J}_e}^+ {\bf e} + \left({\bf \dot e}(0) \mp \lambda {{\bf \widehat J}_{e(0)}}^+ {{\bf e}(0)}\right) \exp(-\mu t)
+  \f]
+
+  where :
+  - \f${\bf \dot q}\f$ is the resulting continuous velocity command to apply to the robot.
+  - the sign of the control law depends on the eye in hand or eye to hand configuration.
+  - \f$\bf J\f$ is the Jacobian of the task. It is function of the interaction matrix and of the robot
+  Jacobian.
+  - \f$\bf e = (s-s^*)\f$ is the error to regulate.
+  - \f$t\f$ is the time given as parameter of this method.
+  - \f$\mu\f$ is a gain that is set by default to 4 and that could be modified using setMu().
+  - \f${\bf \widehat J}_{e(0)}^+ {\bf e}(0)\f$ is the value of \f${\bf \widehat J}_e^+ {\bf e}\f$ when \f$t=0\f$.
+  This value is internally stored either at the first call of this method, or when \e t parameter is set to 0.
+
+  \param t : Time in second. When set to zero, \f${{\bf \widehat J}_{e(0)}}^+ {{\bf e}(0)}\f$ is refreshed internally.
+  \param e_dot_init : Initial value of \f${\bf \dot e}(0)\f$.
+*/
+vpColVector vpServo::computeControlLaw(double t, const vpColVector &e_dot_init)
+{
+  static int iteration =0;
+  static vpColVector e1_initial;
+
+  try
+  {
+    vpVelocityTwistMatrix cVa ; // Twist transformation matrix
+    vpMatrix aJe ;      // Jacobian
+
+    if (iteration==0)
+    {
+      if (testInitialization() == false) {
+        vpERROR_TRACE("All the matrices are not correctly initialized") ;
+        throw(vpServoException(vpServoException::servoError,
+                               "Cannot compute control law "
+                               "All the matrices are not correctly"
+                               "initialized")) ;
+      }
+    }
+    if (testUpdated() == false) {
       vpERROR_TRACE("All the matrices are not correctly updated") ;
     }
 
@@ -971,8 +1321,8 @@ vpColVector
     if (rankJ1 == L.getCols())
     {
       /* if no degrees of freedom remains (rank J1 = ndof)
-	     WpW = I, multiply by WpW is useless
-	  */
+       WpW = I, multiply by WpW is useless
+    */
       e1 = J1p*error ;// primary task
 
       WpW.resize(J1.getCols(), J1.getCols()) ;
@@ -981,13 +1331,13 @@ vpColVector
     else
     {
       if (imageComputed!=true)
-	    {
-	      vpMatrix Jtmp ;
-	      // image of J1 is computed to allows the computation
-	      // of the projection operator
+      {
+        vpMatrix Jtmp ;
+        // image of J1 is computed to allows the computation
+        // of the projection operator
         rankJ1 = J1.pseudoInverse(Jtmp, sv, 1e-6, imJ1, imJ1t) ;
-	      imageComputed = true ;
-	    }
+        imageComputed = true ;
+      }
       WpW = imJ1t*imJ1t.t() ;
 
 #ifdef DEBUG
@@ -1001,11 +1351,17 @@ vpColVector
 #endif
       e1 = WpW*J1p*error ;
     }
-    e = - lambda(e1) * e1 ;
+
+    // memorize the initial e1 value if the function is called the first time or if the time given as parameter is equal to 0.
+    if (iteration==0 || std::fabs(t) < std::numeric_limits<double>::epsilon()) {
+      e1_initial = e1;
+    }
+
+    e = - lambda(e1) * e1 + (e_dot_init + lambda(e1) * e1_initial)*exp(-mu*t);
 
     vpMatrix I ;
 
-    I.resize(J1.getCols(),J1.getCols()) ;
+    I.resize(J1.getCols(), J1.getCols()) ;
     I.setIdentity() ;
 
     I_WpW = (I - WpW) ;
@@ -1029,28 +1385,35 @@ vpColVector
 
 
 /*!
-  Compute the secondary task according to the projection operator.
-  See equation (7) of the IEEE RA magazine, dec 2005 paper.
+  Compute and return the secondary task vector according to the projection operator \f${\bf I-W^+W}\f$. For more details,
+  see equation(7) in the paper \cite Marchand05b.
 
-  \warning computeControlLaw() must be call prior to this function.
+  \param de2dt : Value of \f$\frac{\partial {\bf e_2}}{\partial t}\f$ the derivative of the secondary task \f${\bf e}_2\f$.
 
-  Compute the vector:
-  \f[
-  + ({\bf I-W^+W})\frac{\partial {\bf e_2}}{\partial t}
+  \return The secondary task vector: \f[
+  ({\bf I-W^+W})\frac{\partial {\bf e_2}}{\partial t}
   \f]
-  to be added to the primary task
+
+  Note that the secondary task vector need than to be added to the primary task which can be in the general case written as:
   \f[
-  -\lambda {\bf W^+W\widehat J_s^+(s-s^*)}
+  -\lambda {\bf W^+W {\widehat {\bf J}}_e^+({\bf s-s^*})}
   \f]
-  which is computed using the computeControlLaw() method.
 
-  \warning The projection operator \f$ \bf W^+W \f$ is computed in
-  computeControlLaw() which must be called prior to this function.
+  \warning computeControlLaw() must be call prior to this function since it updates the projection operator \f$ \bf W^+W \f$.
+
+  The following sample code shows how to use this method:
+  \code
+  vpColVector v;     // Velocity applied to the robot
+  vpColVector de2dt;
+  vpServo task;
+  ...
+  v  = task.computeControlLaw(); // Compute the primary task
+  v += task.secondaryTask(de2dt) // Compute and add the secondary task
+  \endcode
 
   \sa computeControlLaw()
 */
-vpColVector
-    vpServo::secondaryTask(vpColVector &de2dt)
+vpColVector vpServo::secondaryTask(const vpColVector &de2dt)
 {
   if (rankJ1 == L.getCols())
   {
@@ -1077,28 +1440,38 @@ vpColVector
 }
 
 /*!
-  Compute the secondary task according to the projection operator.
-  See equation (7) of the IEEE RA magazine, dec 2005 paper.
+  Compute and return the secondary task vector according to the projection operator \f${\bf I-W^+W}\f$. For more details,
+  see equation(7) in the paper \cite Marchand05b.
 
-  \warning computeControlLaw() must be call prior to this function.
+  \param e2 : Value of the secondary task \f${\bf e}_2\f$.
+  \param de2dt : Value of \f$\frac{\partial {\bf e_2}}{\partial t}\f$ the derivative of the secondary task \f${\bf e}_2\f$.
 
-  Compute the vector:
+  \return The secondary task vector:
   \f[
   -\lambda ({\bf I-W^+W}) {\bf e_2} +  ({\bf I-W^+W})\frac{\partial {\bf e_2}}{\partial t}
   \f]
-  to be added to the primary task
+
+  Note that the secondary task vector need than to be added to the primary task which can be in the general case written as:
   \f[
-  -\lambda {\bf W^+W\widehat J_s^+(s-s^*)}
+  -\lambda {\bf W^+W {\widehat {\bf J}}_e^+({\bf s-s^*})}
   \f]
-  which is computed using computeControlLaw() method
 
-  \warning The projection operator \f$ \bf W^+W \f$ is computed in
-  computeControlLaw() which must be called prior to this function.
+  \warning computeControlLaw() must be call prior to this function since it updates the projection operator \f$ \bf W^+W \f$.
+
+  The following sample code shows how to use this method:
+  \code
+  vpColVector v;     // Velocity applied to the robot
+  vpColVector e2;
+  vpColVector de2dt;
+  vpServo task;
+  ...
+  v  = task.computeControlLaw();     // Compute the primary task
+  v += task.secondaryTask(e2, de2dt) // Compute and add the secondary task
+  \endcode
 
   \sa computeControlLaw()
 */
-vpColVector
-    vpServo::secondaryTask(vpColVector &e2, vpColVector &de2dt)
+vpColVector vpServo::secondaryTask(const vpColVector &e2, const vpColVector &de2dt)
 {
   if (rankJ1 == L.getCols())
   {
@@ -1127,9 +1500,91 @@ vpColVector
   }
 }
 
+/*!
+   Return the projection operator \f${\bf I}-{\bf W}^+{\bf W}\f$. This operator is updated
+   after a call of computeControlLaw().
+
+\code
+ vpServo task;
+ ...
+ vpColVector  v = task.computeControlLaw(); // Compute the velocity corresponding to the visual servoing
+ vpMatrix I_WpW = task.getI_WpW();          // Get the projection operator
+\endcode
+   \sa getWpW()
+ */
+vpMatrix vpServo::getI_WpW() const
+{
+  return I_WpW;
+}
 
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
+/*!
+   Return the task jacobian \f$J\f$. The task jacobian is updated after a call of computeControlLaw().
+
+   In the general case, the task jacobian is given by \f${\bf J} = {\widehat {\bf L}} {^c}{\bf V}_a {^a}{\bf J}_e\f$.
+\code
+ vpServo task;
+ ...
+ vpColVector v = task.computeControlLaw(); // Compute the velocity corresponding to the visual servoing
+ vpMatrix    J = task.getTaskJacobian();   // Get the task jacobian used to compute v
+\endcode
+   \sa getTaskJacobianPseudoInverse(), getInteractionMatrix()
  */
+vpMatrix vpServo::getTaskJacobian() const
+{
+  return J1;
+}
+/*!
+   Return the pseudo inverse of the task jacobian \f$J\f$.
+
+   In the general case, the task jacobian is given by \f${\bf J} = {\widehat {\bf L}} {^c}{\bf V}_a {^a}{\bf J}_e\f$.
+
+   The task jacobian and its pseudo inverse are updated after a call of computeControlLaw().
+
+   \return Pseudo inverse \f${J}^{+}\f$ of the task jacobian.
+\code
+ vpServo task;
+ ...
+ vpColVector v = task.computeControlLaw();            // Compute the velocity corresponding to the visual servoing
+ vpMatrix   Jp = task.getTaskJacobianPseudoInverse(); // Get the pseudo inverse of task jacobian used to compute v
+\endcode
+
+ \sa getTaskJacobian()
+ */
+vpMatrix vpServo::getTaskJacobianPseudoInverse() const
+{
+  return J1p;
+}
+/*!
+   Return the rank of the task jacobian. The rank is updated after a call of computeControlLaw().
+
+\code
+ vpServo task;
+ ...
+ vpColVector v = task.computeControlLaw(); // Compute the velocity corresponding to the visual servoing
+ unsigned int rank = task.getTaskRank();   // Get the rank of the task jacobian
+\endcode
+ */
+unsigned int vpServo::getTaskRank() const
+{
+  return rankJ1;
+}
+
+/*!
+   Return the projection operator \f${\bf W}^+{\bf W}\f$. This operator is updated
+   after a call of computeControlLaw().
+
+   When the dimension of the task is equal to the number of degrees of freedom available
+   \f${\bf W^+W = I}\f$.
+
+\code
+ vpServo task;
+ ...
+ vpColVector v = task.computeControlLaw(); // Compute the velocity corresponding to the visual servoing
+ vpMatrix  WpW = task.getWpW();            // Get the projection operator
+\endcode
+   \sa getI_WpW()
+ */
+vpMatrix vpServo::getWpW() const
+{
+  return WpW;
+}
diff --git a/src/servo/vpServo.h b/src/servo/vpServo.h
index 38fb6600..cb8720cd 100644
--- a/src/servo/vpServo.h
+++ b/src/servo/vpServo.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpServo.h 4276 2013-06-25 12:36:48Z fspindle $
+ * $Id: vpServo.h 4674 2014-02-17 15:34:41Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -50,12 +50,12 @@
   \brief  Class required to compute the visual servoing control law
 */
 
+#include <list>
+
 #include <visp/vpMatrix.h>
 #include <visp/vpVelocityTwistMatrix.h>
 #include <visp/vpBasicFeature.h>
 #include <visp/vpServoException.h>
-
-#include <visp/vpList.h>
 #include <visp/vpAdaptiveGain.h>
 
 
@@ -63,7 +63,7 @@
   \class vpServo
 
   \ingroup VsTask
-  \brief Class required to compute the visual servoing control law descbribed
+  Class required to compute the visual servoing control law descbribed
   in \cite Chaumette06a and \cite Chaumette07a.
 
   \warning To avoid potential memory leaks, it is mendatory to call
@@ -72,6 +72,8 @@
   vpServoException::notKilledProperly.
 
   To learn how to use this class, we suggest first to follow the \ref tutorial-ibvs.
+  The \ref tutorial-simu-robot-pioneer and \ref tutorial-boost-vs are also useful
+  for advanced usage of this class.
 
   The example below shows how to build a position-based visual servo
   from 3D visual features \f$s=({^{c^*}}t_c,\theta u)\f$. In that
@@ -159,137 +161,91 @@ public:
   typedef enum
     {
       NONE,
+      /*!< No control law is specified. */
       EYEINHAND_CAMERA,
+      /*!< Eye in hand visual servoing with the following control law
+        \f[{\bf v}_c = -\lambda {\widehat {\bf L}}^{+}_{e} {\bf e}\f]
+        where camera velocities are computed. */
       EYEINHAND_L_cVe_eJe,
+      /*!< Eye in hand visual servoing with the following control law
+        \f[{\dot {\bf q}} = -\lambda \left( {{\widehat {\bf L}}_{e} {^c}{\bf V}_e {^e}{\bf J}_e} \right)^{+} {\bf e}\f]
+        where joint velocities are computed. */
       EYETOHAND_L_cVe_eJe,
+      /*!< Eye to hand visual servoing with the following control law
+        \f[{\dot {\bf q}} = \lambda \left( {{\widehat {\bf L}}_{e} {^c}{\bf V}_e {^e}{\bf J}_e} \right)^{+} {\bf e}\f]
+        where joint velocities are computed. */
       EYETOHAND_L_cVf_fVe_eJe,
+      /*!< Eye to hand visual servoing with the following control law
+        \f[{\dot {\bf q}} = \lambda \left( {{\widehat {\bf L}}_{e} {^c}{\bf V}_f {^f}{\bf V}_e {^e}{\bf J}_e} \right)^{+} {\bf e}\f]
+        where joint velocities are computed. */
       EYETOHAND_L_cVf_fJe
+      /*!< Eye to hand visual servoing with the following control law
+        \f[{\dot {\bf q}} = \lambda \left( {{\widehat {\bf L}}_{e} {^c}{\bf V}_f {^f}{\bf J}_e} \right)^{+} {\bf e}\f]
+        where joint velocities are computed. */
     } vpServoType;
 
   typedef enum
     {
       CURRENT,
+      /*!< In the control law (see vpServo::vpServoType), uses the interaction matrix \f${\widehat {\bf L}}_s \f$computed using the current features \f$\bf s\f$. */
       DESIRED,
+      /*!< In the control law (see vpServo::vpServoType), uses the interaction matrix \f${\widehat {\bf L}}_{s^*} \f$computed using the desired features \f${\bf s}^*\f$. */
       MEAN,
+      /*!< In the control law (see vpServo::vpServoType), uses the interaction matrix \f${\widehat {\bf L}} = \left({\widehat {\bf L}}_s + {\widehat {\bf L}}_{s^*}\right)/2 \f$. */
       USER_DEFINED
+      /*!< In the control law (see vpServo::vpServoType), uses an interaction matrix set by the user. */
     } vpServoIteractionMatrixType;
 
   typedef enum
     {
-      TRANSPOSE,
-      PSEUDO_INVERSE
+      TRANSPOSE,     /*!< In the control law (see vpServo::vpServoType), uses the transpose instead of the pseudo inverse. */
+      PSEUDO_INVERSE /*!< In the control law (see vpServo::vpServoType), uses the pseudo inverse. */
     } vpServoInversionType;
 
   typedef enum
     {
       ALL,                /*!< Print all the task information. */
       CONTROLLER,         /*!< Print the type of controller law. */
-      ERROR_VECTOR,       /*!< Print the error vector \f$(s-s^*)\f$. */
-      FEATURE_CURRENT,    /*!< Print the current features \f$s\f$. */
-      FEATURE_DESIRED,    /*!< Print the desired features \f$s^*\f$. */
+      ERROR_VECTOR,       /*!< Print the error vector \f$\bf e = (s-s^*)\f$. */
+      FEATURE_CURRENT,    /*!< Print the current features \f$\bf s\f$. */
+      FEATURE_DESIRED,    /*!< Print the desired features \f${\bf s}^*\f$. */
       GAIN,               /*!< Print the gain \f$\lambda\f$. */
       INTERACTION_MATRIX, /*!< Print the interaction matrix. */
-      MINIMUM             /*!< Same as vpServoPrintType::ERROR_VECTOR. */
+      MINIMUM             /*!< Same as vpServo::vpServoPrintType::ERROR_VECTOR. */
     } vpServoPrintType;
 
 public:
   // default constructor
   vpServo();
-  //! constructor with Choice of the visual servoing control law
-  vpServo(vpServoType _servoType) ;
-  //! destructor
+  // constructor with Choice of the visual servoing control law
+  vpServo(vpServoType servoType) ;
+  // destructor
   virtual ~vpServo() ;
 
-  /*!
-    Return the velocity twist matrix used to transform a velocity skew vector from end-effector frame into the camera frame.
-  */
-  vpVelocityTwistMatrix get_cVe() const { return cVe; }
-  /*!
-    Return the velocity twist matrix used to transform a velocity skew vector from robot fixed frame (also called world or base frame) into the camera frame.
-  */
-  vpVelocityTwistMatrix get_cVf() const { return cVf; }
-  /*!
-    Return the velocity twist matrix used to transform a velocity skew vector from robot end-effector frame into the fixed frame (also called world or base frame).
-  */
-  vpVelocityTwistMatrix set_fVe() const { return fVe; }
-  /*!
-    Return the robot jacobian expressed in the end-effector frame.
-  */
-  vpMatrix get_eJe() const { return eJe; }
-  /*!
-    Return the robot jacobian expressed in the robot fixed frame (also called world or base frame).
-  */
-  vpMatrix get_fJe() const { return fJe; }
-
-  //! destruction (memory deallocation if required)
-  void kill() ;
-
-  //!  Choice of the visual servoing control law
-  void setServo(vpServoType _servo_type) ;
-
-  void set_cVe(vpVelocityTwistMatrix &_cVe) { cVe = _cVe ; init_cVe = true ; }
-  void set_cVf(vpVelocityTwistMatrix &_cVf) { cVf = _cVf ; init_cVf = true ; }
-  void set_fVe(vpVelocityTwistMatrix &_fVe) { fVe = _fVe ; init_fVe = true ; }
-
-  void set_cVe(vpHomogeneousMatrix &cMe) { cVe.buildFrom(cMe); init_cVe=true ;}
-  void set_cVf(vpHomogeneousMatrix &cMf) { cVf.buildFrom(cMf); init_cVf=true ;}
-  void set_fVe(vpHomogeneousMatrix &fMe) { fVe.buildFrom(fMe); init_fVe=true ;}
-
-  void set_eJe(vpMatrix &_eJe) { eJe = _eJe ; init_eJe = true ; }
-  void set_fJe(vpMatrix &_fJe) { fJe = _fJe ; init_fJe = true ; }
-
-
-  //! Set the type of the interaction matrix (current, mean, desired, user).
-  void setInteractionMatrixType(const vpServoIteractionMatrixType &interactionMatrixType,
-				const vpServoInversionType &interactionMatrixInversion=PSEUDO_INVERSE) ;
-
-  /*! 
-    Set a variable which enable to compute the interaction matrix for each iteration.
-    \param forceInteractionMatrixComputation: If true it forces the interaction matrix computation even if it is already done.
-  */
-  void setForceInteractionMatrixComputation(bool forceInteractionMatrixComputation) {this->forceInteractionMatrixComputation = forceInteractionMatrixComputation;}
-
-  //! set the gain lambda
-  void setLambda(double _lambda) { lambda .initFromConstant (_lambda) ; }
-  void setLambda(const double at_zero,
-		 const double at_infinity,
-		 const double deriv_at_zero)
-  { lambda .initStandard (at_zero, at_infinity, deriv_at_zero) ; }
-  void setLambda(const vpAdaptiveGain& _l){lambda=_l;}
-
-  //! create a new ste of  two visual features
+  // create a new ste of  two visual features
   void addFeature(vpBasicFeature& s, vpBasicFeature& s_star,
-	       const unsigned int select=vpBasicFeature::FEATURE_ALL) ;
-  //! create a new ste of  two visual features
+                  const unsigned int select=vpBasicFeature::FEATURE_ALL) ;
+  // create a new ste of  two visual features
   void addFeature(vpBasicFeature& s,
-	       const unsigned int select=vpBasicFeature::FEATURE_ALL) ;
+                  const unsigned int select=vpBasicFeature::FEATURE_ALL) ;
+
+  // compute the desired control law
+  vpColVector computeControlLaw() ;
+  // compute the desired control law
+  vpColVector computeControlLaw(double t) ;
+  vpColVector computeControlLaw(double t, const vpColVector &e_dot_init);
 
-  //! compute the interaction matrix related to the set of visual features
-  vpMatrix computeInteractionMatrix() ;
   // compute the error between the current set of visual features and
   // the desired set of visual features
   vpColVector computeError() ;
-  //! compute the desired control law
-  vpColVector computeControlLaw() ;
-  //! test if all the initialization are correct if true control law can
-  //! be computed
-  bool testInitialization() ;
-  //! test if all the update are correct if true control law can
-  //! be computed
-  bool testUpdated() ;
-
-
-  //! Add a secondary task.
-  vpColVector secondaryTask(vpColVector &de2dt) ;
-  //! Add a secondary task.
-  vpColVector secondaryTask(vpColVector &e2, vpColVector &de2dt) ;
-
-  //! Return the task dimension.
-  unsigned int getDimension() ;
+  // compute the interaction matrix related to the set of visual features
+  vpMatrix computeInteractionMatrix() ;
 
+  // Return the task dimension.
+  unsigned int getDimension() const ;
   /*!
-   Return the error \f$(s - s^*)\f$ between the current set of visual features
-   \f$s\f$ and the desired set of visual features \f$s^*\f$.
+   Return the error \f$\bf e = (s - s^*)\f$ between the current set of visual features
+   \f$\bf s\f$ and the desired set of visual features \f$\bf s^*\f$.
    The error vector is updated after a call of computeError() or computeControlLaw().
 \code
   vpServo task;
@@ -303,129 +259,203 @@ public:
     return error ;
   }
   /*
-    Return the interaction matrix \f$L\f$ used to compute the task jacobian \f$J_1\f$.
-    The interaction matrix is updated after a call to computeInteractionMatrix() or computeControlLaw().
-
-\code
-  vpServo task;
-  ...
-  vpColVector v = task.computeControlLaw();    // Compute the velocity corresponding to the visual servoing
-  vpMatrix    L = task.getInteractionMatrix(); // Get the interaction matrix used to compute v
-\endcode
-    \sa getTaskJacobian()
-  */
-  inline vpMatrix getInteractionMatrix()
+     Return the interaction matrix \f$L\f$ used to compute the task jacobian \f$J_1\f$.
+     The interaction matrix is updated after a call to computeInteractionMatrix() or computeControlLaw().
+
+ \code
+   vpServo task;
+   ...
+   vpColVector v = task.computeControlLaw();    // Compute the velocity corresponding to the visual servoing
+   vpMatrix    L = task.getInteractionMatrix(); // Get the interaction matrix used to compute v
+ \endcode
+     \sa getTaskJacobian()
+   */
+  inline vpMatrix getInteractionMatrix() const
   {
     return L;
   }
 
+  vpMatrix getI_WpW() const;
   /*!
-    Return the projection operator \f${\bf I}-{\bf W}^+{\bf W}\f$. This operator is updated
-    after a call of computeControlLaw().
-
-\code
-  vpServo task;
-  ...
-  vpColVector  v = task.computeControlLaw(); // Compute the velocity corresponding to the visual servoing
-  vpMatrix I_WpW = task.getI_WpW();          // Get the projection operator
-\endcode
-    \sa getWpW()
-  */
-  inline vpMatrix getI_WpW() const
-  {
-    return I_WpW;
-  }
-  /*!
-    Return the visual servo type.
-  */
+     Return the visual servo type.
+   */
   inline vpServoType getServoType() const
   {
     return servoType;
   }
+
+  vpMatrix getTaskJacobian() const;
+  vpMatrix getTaskJacobianPseudoInverse() const;
+  unsigned int getTaskRank() const;
+
   /*!
-    Return the task jacobian \f$J_1\f$. The task jacobian is updated after a call of computeControlLaw().
+     Get task singular values.
 
-    In the general case, the task jacobian is given by \f$J_1 = L {^c}V_a {^a}J_e\f$.
-\code
-  vpServo task;
-  ...
-  vpColVector v = task.computeControlLaw(); // Compute the velocity corresponding to the visual servoing
-  vpMatrix   J1 = task.getTaskJacobian();   // Get the task jacobian used to compute v
-\endcode
-    \sa getTaskJacobianPseudoInverse(), getInteractionMatrix()
-  */
-  inline vpMatrix getTaskJacobian() const
+     \return Singular values that relies on the task jacobian pseudo inverse.
+     */
+  inline vpColVector getTaskSingularValues() const
   {
-    return J1;
+    return sv;
   }
+
+  vpMatrix getWpW() const;
+
+  /*!
+    Return the velocity twist matrix used to transform a velocity skew vector from end-effector frame into the camera frame.
+  */
+  vpVelocityTwistMatrix get_cVe() const { return cVe; }
+  /*!
+    Return the velocity twist matrix used to transform a velocity skew vector from robot fixed frame (also called world or base frame) into the camera frame.
+  */
+  vpVelocityTwistMatrix get_cVf() const { return cVf; }
+  /*!
+    Return the velocity twist matrix used to transform a velocity skew vector from robot end-effector frame into the fixed frame (also called world or base frame).
+  */
+  vpVelocityTwistMatrix get_fVe() const { return fVe; }
+  /*!
+    Return the robot jacobian expressed in the end-effector frame.
+  */
+  vpMatrix get_eJe() const { return eJe; }
   /*!
-    Return the pseudo inverse of the task jacobian \f$J_1\f$. The task jacobian
-    and its pseudo inverse are updated after a call of computeControlLaw().
+    Return the robot jacobian expressed in the robot fixed frame (also called world or base frame).
+  */
+  vpMatrix get_fJe() const { return fJe; }
 
-    \return Pseudo inverse \f${J_1}^{+}\f$ of the task jacobian.
-\code
-  vpServo task;
-  ...
-  vpColVector v = task.computeControlLaw();            // Compute the velocity corresponding to the visual servoing
-  vpMatrix  J1p = task.getTaskJacobianPseudoInverse(); // Get the pseudo inverse of task jacobian used to compute v
-\endcode
+  // destruction (memory deallocation if required)
+  void kill() ;
+
+  void print(const vpServo::vpServoPrintType display_level=ALL,
+             std::ostream &os = std::cout) ;
+
+  // Add a secondary task.
+  vpColVector secondaryTask(const vpColVector &de2dt) ;
+  // Add a secondary task.
+  vpColVector secondaryTask(const vpColVector &e2, const vpColVector &de2dt) ;
+
+  /*!
+    Set a variable which enables to compute the interaction matrix at each iteration.
+
+    When the interaction matrix is computed from the desired features \f${\bf s}^*\f$ which are in general constant,
+    the interaction matrix \f${\widehat {\bf L}}_{s^*}\f$ is computed just at the first iteration of the servo loop.
+    Sometimes, when the desired features are time dependent \f${{\bf s}(t)}^*\f$ or varying, the interaction matrix
+    need to be computed at each iteration of the servo loop. This method allows to force the computation of
+    \f${\widehat {\bf L}}\f$ in this particular case.
+
+    \param force_computation: If true it forces the interaction matrix computation even if it is already done.
 
-  \sa getTaskJacobian()
   */
-  inline vpMatrix getTaskJacobianPseudoInverse() const
+  void setForceInteractionMatrixComputation(bool force_computation)
   {
-    return J1p;
+    this->forceInteractionMatrixComputation = force_computation;
   }
+
   /*!
-    Return the rank of the task jacobian. The rank is updated after a call of computeControlLaw().
+    Set the interaction matrix type (current, desired, mean or user defined) and how its inverse is computed.
+    \param interactionMatrixType : The interaction matrix type. See vpServo::vpServoIteractionMatrixType for
+    more details.
+    \param interactionMatrixInversion : How is the inverse computed. See vpServo::vpServoInversionType for
+    more details.
+    */
+  void setInteractionMatrixType(const vpServoIteractionMatrixType &interactionMatrixType,
+                                const vpServoInversionType &interactionMatrixInversion=PSEUDO_INVERSE) ;
 
-\code
-  vpServo task;
-  ...
-  vpColVector v = task.computeControlLaw(); // Compute the velocity corresponding to the visual servoing
-  double   rank = task.getTaskRank();       // Get the rank of the task jacobian
-\endcode
-  */
-  inline double getTaskRank() const
+  /*!
+    Set the gain \f$\lambda\f$ used in the control law (see vpServo::vpServoType) as constant.
+
+    The usage of an adaptive gain allows to reduce the convergence time, see setLambda(const vpAdaptiveGain&).
+
+    \param c : Constant gain. Values are in general between 0.1 and 1. Higher is the gain, higher are the velocities
+    that may be applied to the robot.
+   */
+  void setLambda(double c)
   {
-    return rankJ1;
+    lambda .initFromConstant (c) ;
   }
 
   /*!
-    Get task singular values.
+    Set the gain \f$\lambda\f$ used in the control law (see vpServo::vpServoType) as adaptive.
+    Value of \f$\lambda\f$ that is used in computeControlLaw() depend on the infinity norm of the task Jacobian.
 
-    \return Singular values that relies on the task jacobian pseudo inverse.
-    */
-  inline vpColVector getTaskSingularValues()
+    The usage of an adaptive gain rather than a constant gain allows to reduce the convergence time.
+
+    \param gain_at_zero : the expected gain when \f$x=0\f$: \f$\lambda(0)\f$.
+    \param gain_at_infinity : the expected gain when \f$x=\infty\f$: \f$\lambda(\infty)\f$.
+    \param slope_at_zero : the expected slope of \f$\lambda(x)\f$ when \f$x=0\f$: \f${\dot \lambda}(0)\f$.
+
+    For more details on these parameters see vpAdaptiveGain class.
+   */
+  void setLambda(const double gain_at_zero,
+                 const double gain_at_infinity,
+                 const double slope_at_zero)
   {
-    return sv;
+    lambda .initStandard (gain_at_zero, gain_at_infinity, slope_at_zero) ;
   }
+  /*!
+    Set the gain \f$\lambda\f$ used in the control law (see vpServo::vpServoType) as adaptive.
+    Value of \f$\lambda\f$ that is used in computeControlLaw() depend on the infinity norm of the task Jacobian.
 
+    The usage of an adaptive gain rather than a constant gain allows to reduce the convergence time.
+    \sa vpAdaptiveGain
+   */
+  void setLambda(const vpAdaptiveGain& l){lambda=l;}
   /*!
-    Return the projection operator \f${\bf W}^+{\bf W}\f$. This operator is updated
-    after a call of computeControlLaw().
+    Set the value of the parameter \f$\mu\f$ used to ensure the continuity of the velocities
+    computed using computeControlLaw(double).
 
-\code
-  vpServo task;
-  ...
-  vpColVector v = task.computeControlLaw(); // Compute the velocity corresponding to the visual servoing
-  vpMatrix  WpW = task.getWpW();            // Get the projection operator
-\endcode
-    \sa getI_WpW()
+    A recommended value is 4.
   */
-  inline vpMatrix getWpW() const
-  {
-    return WpW;
-  }
+  void setMu(double mu_){this->mu=mu_;}
+  //  Choice of the visual servoing control law
+  void setServo(const vpServoType &servo_type) ;
+
+  /*!
+    Set the velocity twist matrix used to transform a velocity skew vector from end-effector frame into the camera frame.
+   */
+  void set_cVe(const vpVelocityTwistMatrix &cVe_) { this->cVe = cVe_ ; init_cVe = true ; }
+  /*!
+    Set the velocity twist matrix used to transform a velocity skew vector from end-effector frame into the camera frame.
+   */
+  void set_cVe(const vpHomogeneousMatrix &cMe) { cVe.buildFrom(cMe); init_cVe=true ;}
+  /*!
+    Set the velocity twist matrix used to transform a velocity skew vector from robot fixed frame (also called world or base frame) into the camera frame.
+   */
+  void set_cVf(const vpVelocityTwistMatrix &cVf_) { this->cVf = cVf_ ; init_cVf = true ; }
+  /*!
+    Set the velocity twist matrix used to transform a velocity skew vector from robot fixed frame (also called world or base frame) into the camera frame.
+   */
+  void set_cVf(const vpHomogeneousMatrix &cMf) { cVf.buildFrom(cMf); init_cVf=true ;}
+  /*!
+    Set the velocity twist matrix used to transform a velocity skew vector from robot end-effector frame into the fixed frame (also called world or base frame).
+   */
+  void set_fVe(const vpVelocityTwistMatrix &fVe_) { this->fVe = fVe_ ; init_fVe = true ; }
+  /*!
+    Set the velocity twist matrix used to transform a velocity skew vector from robot end-effector frame into the fixed frame (also called world or base frame).
+   */
+  void set_fVe(const vpHomogeneousMatrix &fMe) { fVe.buildFrom(fMe); init_fVe=true ;}
 
+  /*!
+    Set the robot jacobian expressed in the end-effector frame.
+   */
+  void set_eJe(const vpMatrix &eJe_) { this->eJe = eJe_ ; init_eJe = true ; }
+  /*!
+    Set the robot jacobian expressed in the robot fixed frame (also called world or base frame).
+   */
+  void set_fJe(const vpMatrix &fJe_) { this->fJe = fJe_ ; init_fJe = true ; }
 
-  void print(const vpServo::vpServoPrintType display_level=ALL,
-	     std::ostream &os = std::cout) ;
-protected:
-  //! basic initialization
+  /*!
+    Test if all the initialization are correct. If true, the control law can be computed.
+    */
+  bool testInitialization() ;
+  /*!
+    Test if all the update are correct. If true control law can be computed.
+    */
+  bool testUpdated() ;
+
+  protected:
+  //! Basic initialization.
   void init() ;
 
-public:
+  public:
   //! Interaction matrix
   vpMatrix L ;
   //! Error \f$(s - s^*)\f$ between the current set of visual features
@@ -449,7 +479,6 @@ public:
   //! Task \f$e = e_1 + (I-{J_1}^{+} J_1) e_2\f$
   vpColVector e ;
 
-
   //! Articular velocity
   vpColVector q_dot ;
   //! Camera velocity
@@ -461,15 +490,15 @@ public:
   //! Rank of the task Jacobian
   unsigned int rankJ1 ;
 
-  //! List of visual features (produce \f$s\f$)
-  vpList<vpBasicFeature *> featureList ;
-  //! List of desired visual features (produce \f$s^*\f$)
-  vpList<vpBasicFeature *> desiredFeatureList ;
+  //! List of current visual features \f$\bf s\f$.
+  std::list<vpBasicFeature *> featureList ;
+  //! List of desired visual features \f$\bf s^*\f$.
+  std::list<vpBasicFeature *> desiredFeatureList ;
   //! List of selection among visual features
-  //! used for selection of a subset of each visual feature if required
-  vpList<unsigned int> featureSelectionList ;
+  //! used for selection of a subset of each visual feature if required.
+  std::list<unsigned int> featureSelectionList ;
 
-  //! Gain
+  //! Gain used in the control law.
   vpAdaptiveGain lambda ;
 
   //! Sign of the interaction +/- 1 (1 for eye-in-hand, -1 for
@@ -478,21 +507,21 @@ public:
   //! Type of the interaction matrox (current, mean, desired, user)
   vpServoIteractionMatrixType interactionMatrixType ;
   //! Indicates if the transpose or the pseudo inverse of the
-  //!interaction matrix should be used to compute the task
+  //! interaction matrix should be used to compute the task.
   vpServoInversionType inversionType ;
 
-protected:
+  protected:
   /*
     Twist transformation matrix
   */
 
-  //! Twist transformation matrix between Re and Rc
+  //! Twist transformation matrix between Re and Rc.
   vpVelocityTwistMatrix cVe ;
   bool init_cVe ;
-  //! Twist transformation matrix between Rf and Rc
+  //! Twist transformation matrix between Rf and Rc.
   vpVelocityTwistMatrix cVf ;
   bool init_cVf ;
-  //! Twist transformation matrix between Re and Rf
+  //! Twist transformation matrix between Re and Rf.
   vpVelocityTwistMatrix fVe ;
   bool init_fVe ;
 
@@ -511,29 +540,26 @@ protected:
     Task building
   */
 
-  //! true if the error has been computed
+  //! true if the error has been computed.
   bool errorComputed ;
-  //! true if the interaction matrix has been computed
+  //! true if the interaction matrix has been computed.
   bool interactionMatrixComputed ;
-  //! dimension of the task
+  //! Dimension of the task updated during computeControlLaw().
   unsigned int dim_task ;
-  bool taskWasKilled; // flag to indicate if the task was killed
+  //! Flag to indicate if the task was killed
+  bool taskWasKilled;
   //! Force the interaction matrix computation even if it is already done.
   bool forceInteractionMatrixComputation;
 
-  //! projection operators WpW
+  //! Projection operators \f$\bf WpW\f$.
   vpMatrix WpW ;
-  //! projection operators I-WpW
+  //! Projection operators \f$\bf I-WpW\f$.
   vpMatrix I_WpW ;
 
-  vpColVector sv ; // singular values from the pseudo inverse
-} ;
+  //! Singular values from the pseudo inverse.
+  vpColVector sv ;
 
+  double mu;
+} ;
 
 #endif
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/src/servo/vpServoData.cpp b/src/servo/vpServoData.cpp
index 9ec92ef2..183bcc28 100644
--- a/src/servo/vpServoData.cpp
+++ b/src/servo/vpServoData.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpServoData.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpServoData.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/servo/vpServoData.h b/src/servo/vpServoData.h
index e0fd7934..1f5ab8a6 100644
--- a/src/servo/vpServoData.h
+++ b/src/servo/vpServoData.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpServoData.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpServoData.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -81,15 +81,17 @@ private:
 public:
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
-  vpServoData(const vpServoData &) {
-    throw vpException(vpException::functionNotImplementedError,"Not implemented!");
+  vpServoData(const vpServoData &sd)
+    : velocityFile(), errorFile(), errorNormFile(), sFile(),
+      sStarFile(), vNormFile(), cmDeg(false) {
+    *this = sd;
   }      
-  void operator=(const vpServoData &){
+  vpServoData & operator=(const vpServoData &) {
     throw vpException(vpException::functionNotImplementedError,"Not implemented!");
   }
 #endif
 
-  vpServoData() { ; }
+  vpServoData() : velocityFile(), errorFile(), errorNormFile(), sFile(), sStarFile(), vNormFile(), cmDeg(false) { ; }
   virtual ~vpServoData() { ; }
 
   //! velocity output in cm and deg
diff --git a/src/servo/vpServoDisplay.cpp b/src/servo/vpServoDisplay.cpp
index 5178bec3..b0f39606 100644
--- a/src/servo/vpServoDisplay.cpp
+++ b/src/servo/vpServoDisplay.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpServoDisplay.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpServoDisplay.cpp 4645 2014-02-05 17:44:06Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -80,34 +80,27 @@
   \param thickness : Thickness of the feature representation.
 
 */
-void
-vpServoDisplay::display(vpServo &s,
-                        const vpCameraParameters &cam,
-                        vpImage<unsigned char> &I,
-                        vpColor currentColor,
-                        vpColor desiredColor,
-			unsigned int thickness)
+void vpServoDisplay::display(const vpServo &s,
+                             const vpCameraParameters &cam,
+                             const vpImage<unsigned char> &I,
+                             vpColor currentColor,
+                             vpColor desiredColor,
+                             unsigned int thickness)
 {
+  std::list<vpBasicFeature *>::const_iterator it_s;
+  std::list<vpBasicFeature *>::const_iterator it_s_star;
 
-
-
-  for (s.featureList.front(),
-	 s.desiredFeatureList.front() ;
-       !s.featureList.outside() ;
-       s.featureList.next(),
-	 s.desiredFeatureList.next() )
+  for (it_s = s.featureList.begin(), it_s_star = s.desiredFeatureList.begin();
+       it_s != s.featureList.end();
+       ++it_s, ++it_s_star)
   {
-    vpBasicFeature *s_ptr = NULL;
-
     if (desiredColor != vpColor::none) {
       // desired list
-      s_ptr = s.desiredFeatureList.value() ;
-      s_ptr->display(cam, I, desiredColor, thickness ) ;
+      (*it_s_star)->display(cam, I, desiredColor, thickness ) ;
     }
     if (currentColor != vpColor::none) {
       // current list
-      s_ptr =  s.featureList.value() ;
-      s_ptr->display(cam, I, currentColor, thickness ) ;
+      (*it_s)->display(cam, I, currentColor, thickness ) ;
     }
   }
   //  vpDisplay::flush(I) ;
@@ -134,40 +127,28 @@ vpServoDisplay::display(vpServo &s,
 
  */
 void
-vpServoDisplay::display(vpServo &s,
+vpServoDisplay::display(const vpServo &s,
                         const vpCameraParameters &cam,
-                        vpImage<vpRGBa> &I,
+                        const vpImage<vpRGBa> &I,
                         vpColor currentColor,
                         vpColor desiredColor,
-			unsigned int thickness)
+                        unsigned int thickness)
 {
+  std::list<vpBasicFeature *>::const_iterator it_s;
+  std::list<vpBasicFeature *>::const_iterator it_s_star;
 
-
-
-  for (s.featureList.front(),
-	 s.desiredFeatureList.front() ;
-       !s.featureList.outside() ;
-       s.featureList.next(),
-	 s.desiredFeatureList.next() )
+  for (it_s = s.featureList.begin(), it_s_star = s.desiredFeatureList.begin();
+       it_s != s.featureList.end();
+       ++it_s, ++it_s_star)
   {
-    vpBasicFeature *s_ptr = NULL;
-
     if (desiredColor != vpColor::none) {
       // desired list
-      s_ptr = s.desiredFeatureList.value() ;
-      s_ptr->display(cam, I, desiredColor, thickness ) ;
+      (*it_s_star)->display(cam, I, desiredColor, thickness ) ;
     }
     if (currentColor != vpColor::none) {
       // current list
-      s_ptr =  s.featureList.value() ;
-      s_ptr->display(cam, I, currentColor, thickness ) ;
+      (*it_s)->display(cam, I, currentColor, thickness ) ;
     }
   }
   //  vpDisplay::flush(I) ;
 }
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
diff --git a/src/servo/vpServoDisplay.h b/src/servo/vpServoDisplay.h
index eb4cd373..130f8433 100644
--- a/src/servo/vpServoDisplay.h
+++ b/src/servo/vpServoDisplay.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpServoDisplay.h 4062 2013-01-09 10:30:06Z fspindle $
+ * $Id: vpServoDisplay.h 4645 2014-02-05 17:44:06Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -65,15 +65,15 @@
 class VISP_EXPORT vpServoDisplay
 {
 public:
-  static void display(vpServo &s,
+  static void display(const vpServo &s,
                       const vpCameraParameters &cam,
-                      vpImage<unsigned char> &I,
+                      const vpImage<unsigned char> &I,
                       vpColor currentColor = vpColor::green,
                       vpColor desiredColor = vpColor::red,
                       unsigned int thickness=1) ;
-  static void display(vpServo &s,
+  static void display(const vpServo &s,
                       const vpCameraParameters &cam,
-                      vpImage<vpRGBa> &I,
+                      const vpImage<vpRGBa> &I,
                       vpColor currentColor = vpColor::green,
                       vpColor desiredColor = vpColor::red,
                       unsigned int thickness=1) ;
diff --git a/src/servo/vpServoException.h b/src/servo/vpServoException.h
index 164d88c2..f74fc676 100644
--- a/src/servo/vpServoException.h
+++ b/src/servo/vpServoException.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpServoException.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpServoException.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -64,13 +64,13 @@
  */
 class VISP_EXPORT vpServoException : public vpException
 {
-public:
-  /*!
+  public:
+    /*!
 
     \brief Lists the possible error than can be emmited while calling
     vpServo member
    */
-  enum errorServoCodeEnum
+    enum errorServoCodeEnum
     {
       //! Current or desired feature list is empty
       noFeatureError,
@@ -82,25 +82,20 @@ public:
       servoError
     } ;
 
-public:
-  vpServoException (const int code, const char * msg)
-    : vpException(code, msg){ ; }
-  vpServoException (const int code, const std::string & msg)
-    : vpException(code, msg){ ; }
-  vpServoException (const int code)
-    : vpException(code){ ; }
+  public:
+    vpServoException (const int id,  const char* format, ...)
+    {
+      this->code = id;
+      va_list args;
+      va_start(args, format);
+      setMessage(format, args);
+      va_end (args);
+    }
+    vpServoException (const int id, const std::string & msg)
+      : vpException(id, msg){ ; }
+    vpServoException (const int id)
+      : vpException(id){ ; }
 
 };
 
-
-
-
-
-#endif /* #ifndef __vpServoException_ERROR_H */
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+#endif
diff --git a/src/simulator/coin-simulator/vpAR.cpp b/src/simulator/coin-simulator/vpAR.cpp
index 36dd8810..48698e28 100644
--- a/src/simulator/coin-simulator/vpAR.cpp
+++ b/src/simulator/coin-simulator/vpAR.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpAR.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpAR.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/coin-simulator/vpAR.h b/src/simulator/coin-simulator/vpAR.h
index 6233e361..47ca3600 100644
--- a/src/simulator/coin-simulator/vpAR.h
+++ b/src/simulator/coin-simulator/vpAR.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpAR.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpAR.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/coin-simulator/vpProjectionDisplay.cpp b/src/simulator/coin-simulator/vpProjectionDisplay.cpp
index 42035d69..b4fe61b9 100644
--- a/src/simulator/coin-simulator/vpProjectionDisplay.cpp
+++ b/src/simulator/coin-simulator/vpProjectionDisplay.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpProjectionDisplay.cpp 4238 2013-05-06 13:29:30Z fspindle $
+ * $Id: vpProjectionDisplay.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/coin-simulator/vpProjectionDisplay.h b/src/simulator/coin-simulator/vpProjectionDisplay.h
index bbd645d5..6c137692 100644
--- a/src/simulator/coin-simulator/vpProjectionDisplay.h
+++ b/src/simulator/coin-simulator/vpProjectionDisplay.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpProjectionDisplay.h 4238 2013-05-06 13:29:30Z fspindle $
+ * $Id: vpProjectionDisplay.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -96,8 +96,25 @@ public:
   static int internalView() { return 0x01 ; }
   static int externalView() { return 0x02 ; }
 
-  vpProjectionDisplay() { init() ;}
-  vpProjectionDisplay(int select) { init(select) ;}
+  /*! Default constructor. */
+  vpProjectionDisplay()
+    : Icam(), Iext(),
+#if defined (VISP_HAVE_DISPLAY)
+      dIcam(), dIext(),
+#endif
+      listFp(), o(), x(), y(), z(), traj()
+  {
+    init();
+  }
+  vpProjectionDisplay(int select)
+    : Icam(), Iext(),
+#if defined (VISP_HAVE_DISPLAY)
+      dIcam(), dIext(),
+#endif
+      listFp(), o(), x(), y(), z(), traj()
+  {
+    init(select) ;
+  }
 
   void insert( vpForwardProjection &fp) ;
   void display(vpImage<unsigned char> &I,
diff --git a/src/simulator/coin-simulator/vpSimulator.cpp b/src/simulator/coin-simulator/vpSimulator.cpp
index 68671f24..d5b031e8 100644
--- a/src/simulator/coin-simulator/vpSimulator.cpp
+++ b/src/simulator/coin-simulator/vpSimulator.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSimulator.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vpSimulator.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -291,6 +291,24 @@ vpSimulator::init()
   offScreenRenderer = NULL ;
   bufferView = NULL;
   get = 1 ;
+  typeImage = grayImage;
+  mainThread = NULL;
+  scene = NULL;
+  internalRoot = NULL;
+  externalRoot = NULL;
+  internalCamera = NULL;
+  externalCamera = NULL;
+  internalCameraPosition = NULL;
+  extrenalCameraPosition = NULL;
+  internalCameraObject = NULL;
+#if defined(VISP_HAVE_SOWIN)
+  // mainWindow = ?;
+#elif defined(VISP_HAVE_SOQT)
+  mainWindow = NULL;
+#elif defined(VISP_HAVE_SOXT)
+  // mainWindow = ?;
+#endif
+
 }
 void
 vpSimulator::kill()
diff --git a/src/simulator/coin-simulator/vpSimulator.h b/src/simulator/coin-simulator/vpSimulator.h
index bdc9d88c..6f1c4d41 100644
--- a/src/simulator/coin-simulator/vpSimulator.h
+++ b/src/simulator/coin-simulator/vpSimulator.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSimulator.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpSimulator.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/coin-simulator/vpSimulatorException.h b/src/simulator/coin-simulator/vpSimulatorException.h
index 5a97ef49..887b749d 100644
--- a/src/simulator/coin-simulator/vpSimulatorException.h
+++ b/src/simulator/coin-simulator/vpSimulatorException.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSimulatorException.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpSimulatorException.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -73,12 +73,12 @@
  */
 class VISP_EXPORT vpSimulatorException : public vpException
 {
-public:
-  /*!
+  public:
+    /*!
     \brief Lists the possible error than can be emmited while calling
     vpSimulator member
    */
-  enum errorSimulatorCodeEnum
+    enum errorSimulatorCodeEnum
     {
       ioError,
       noFileNameError,
@@ -87,25 +87,20 @@ public:
       badInitializationError
     } ;
 
-public:
-  vpSimulatorException (const int code, const char * msg)
-    : vpException(code, msg){ ; }
-  vpSimulatorException (const int code, const std::string & msg)
-    : vpException(code, msg){ ; }
-  vpSimulatorException (const int code)
-    : vpException(code){ ; }
+  public:
+    vpSimulatorException (const int id,  const char* format, ...)
+    {
+      this->code = id;
+      va_list args;
+      va_start(args, format);
+      setMessage(format, args);
+      va_end (args);
+    }
+    vpSimulatorException (const int id, const std::string & msg)
+      : vpException(id, msg){ ; }
+    vpSimulatorException (const int id)
+      : vpException(id){ ; }
 
 };
 
-
-
-
-
-#endif /* #ifndef __vpSimulatorException_H */
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+#endif
diff --git a/src/simulator/coin-simulator/vpViewer.cpp b/src/simulator/coin-simulator/vpViewer.cpp
index cd5b6d0b..69e66e65 100644
--- a/src/simulator/coin-simulator/vpViewer.cpp
+++ b/src/simulator/coin-simulator/vpViewer.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpViewer.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpViewer.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/coin-simulator/vpViewer.h b/src/simulator/coin-simulator/vpViewer.h
index 97ef3586..c02bc4d1 100644
--- a/src/simulator/coin-simulator/vpViewer.h
+++ b/src/simulator/coin-simulator/vpViewer.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpViewer.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpViewer.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/image-simulator/vpImageSimulator.cpp b/src/simulator/image-simulator/vpImageSimulator.cpp
index 2c60c48e..c9d56e8a 100644
--- a/src/simulator/image-simulator/vpImageSimulator.cpp
+++ b/src/simulator/image-simulator/vpImageSimulator.cpp
@@ -3,7 +3,7 @@
  * $Id: vpPose.h 2453 2010-01-07 10:01:10Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -59,6 +59,12 @@
   By default the class uses colored images.
 */
 vpImageSimulator::vpImageSimulator(const vpColorPlan &col)
+  : cMt(), interp(SIMPLE), normal_obj(), normal_Cam(), normal_Cam_optim(),
+    distance(1.), visible_result(1.), visible(false), X0_2_optim(NULL),
+    euclideanNorm_u(0.), euclideanNorm_v(0.), vbase_u(), vbase_v(),
+    vbase_u_optim(NULL), vbase_v_optim(NULL), Xinter_optim(NULL), T1(), T2(),
+    colorI(col), Ig(), Ic(), rect(), cleanPrevImage(false),
+    setBackgroundTexture(false), bgColor(vpColor::white), focal()
 {
   for(int i=0;i<4;i++)
     X[i].resize(3);
@@ -84,12 +90,6 @@ vpImageSimulator::vpImageSimulator(const vpColorPlan &col)
   vbase_u_optim = new double[3];
   vbase_v_optim = new double[3];
   Xinter_optim = new double[3];
-  
-  colorI = col;
-  interp = SIMPLE;
-  bgColor = vpColor::white;
-  cleanPrevImage = false;
-  setBackgroundTexture = false;
 }
 
 
@@ -97,6 +97,12 @@ vpImageSimulator::vpImageSimulator(const vpColorPlan &col)
   Copy constructor
 */
 vpImageSimulator::vpImageSimulator(const vpImageSimulator &text)
+  : cMt(), interp(SIMPLE), normal_obj(), normal_Cam(), normal_Cam_optim(),
+    distance(1.), visible_result(1.), visible(false), X0_2_optim(NULL),
+    euclideanNorm_u(0.), euclideanNorm_v(0.), vbase_u(), vbase_v(),
+    vbase_u_optim(NULL), vbase_v_optim(NULL), Xinter_optim(NULL), T1(), T2(),
+    colorI(GRAY_SCALED), Ig(), Ic(), rect(), cleanPrevImage(false),
+    setBackgroundTexture(false), bgColor(vpColor::white), focal()
 {
   for(int i=0;i<4;i++)
   {
@@ -1423,12 +1429,12 @@ vpImageSimulator::getImage(vpImage<vpRGBa> &I,
 /*!
   Enable to set the position of the 3D plane relative to the virtual camera.
   
-  \param _cMt : The pose of the plane relative to the virtual camera.
+  \param cMt_ : The pose of the plane relative to the virtual camera.
 */
 void
-vpImageSimulator::setCameraPosition(const vpHomogeneousMatrix &_cMt)
+vpImageSimulator::setCameraPosition(const vpHomogeneousMatrix &cMt_)
 {
-  cMt = _cMt;
+  cMt = cMt_;
   vpRotationMatrix R;
   cMt.extract(R);
 
@@ -1457,8 +1463,9 @@ vpImageSimulator::setCameraPosition(const vpHomogeneousMatrix &_cMt)
 
   if (angle > 0)
     visible=true;
-  else 
+  else {
     visible=false;
+  }
 
   if(visible)
   {
@@ -1500,12 +1507,12 @@ vpImageSimulator::setCameraPosition(const vpHomogeneousMatrix &_cMt)
 }
 
 void
-vpImageSimulator::initPlan(vpColVector* _X)
+vpImageSimulator::initPlan(vpColVector* X_)
 {
   for (unsigned int i = 0; i < 4; i++)
   {
-    X[i]=_X[i];
-    pt[i].setWorldCoordinates(_X[i][0],_X[i][1],_X[i][2]);
+    X[i]=X_[i];
+    pt[i].setWorldCoordinates(X_[i][0],X_[i][1],X_[i][2]);
   }
 
   normal_obj=vpColVector::crossProd(X[1]-X[0],X[3]-X[0]);
@@ -1526,14 +1533,14 @@ vpImageSimulator::initPlan(vpColVector* _X)
   - \f$ X[3] \f$ :Bottom left corner.
   
   \param I : The image which is projected.
-  \param _X : table of the 3D coordinates corresponding to the image corners.
+  \param X_ : table of the 3D coordinates corresponding to the image corners.
 */
 void
-vpImageSimulator::init(const vpImage<unsigned char> &I,vpColVector* _X)
+vpImageSimulator::init(const vpImage<unsigned char> &I,vpColVector* X_)
 {
   Ig = I;
   vpImageConvert::convert(I,Ic);
-  initPlan(_X);
+  initPlan(X_);
 }
 
 /*!
@@ -1547,14 +1554,14 @@ vpImageSimulator::init(const vpImage<unsigned char> &I,vpColVector* _X)
   - \f$ X[3] \f$ :Bottom left corner.
   
   \param I : The image which is projected.
-  \param _X : table of the 3D coordinates corresponding to the image corners.
+  \param X_ : table of the 3D coordinates corresponding to the image corners.
 */
 void
-vpImageSimulator::init(const vpImage<vpRGBa> &I,vpColVector* _X)
+vpImageSimulator::init(const vpImage<vpRGBa> &I,vpColVector* X_)
 {
   Ic = I;
   vpImageConvert::convert(I,Ig);
-  initPlan(_X);
+  initPlan(X_);
 }
 
 /*!
@@ -1568,14 +1575,14 @@ vpImageSimulator::init(const vpImage<vpRGBa> &I,vpColVector* _X)
   - \f$ X[3] \f$ :Bottom left corner.
   
   \param file_image : The adress of an image file.
-  \param _X : table of the 3D coordinates corresponding to the image corners.
+  \param X_ : table of the 3D coordinates corresponding to the image corners.
 */
 void
-vpImageSimulator::init(const char* file_image,vpColVector* _X)
+vpImageSimulator::init(const char* file_image,vpColVector* X_)
 {
   vpImageIo::read(Ig,file_image);
   vpImageIo::read(Ic,file_image);
-  initPlan(_X);
+  initPlan(X_);
 }
 
 /*!
@@ -1589,21 +1596,21 @@ vpImageSimulator::init(const char* file_image,vpColVector* _X)
   - \f$ X[3] \f$ :Bottom left corner.
 
   \param I : The image which is projected.
-  \param _X : Vector of the 3D coordinates in the object frame (oX, oY, oZ)
+  \param X_ : Vector of the 3D coordinates in the object frame (oX, oY, oZ)
   corresponding to the image corners.
 */
 void
-vpImageSimulator::init(const vpImage<unsigned char> &I, const std::vector<vpPoint>& _X)
+vpImageSimulator::init(const vpImage<unsigned char> &I, const std::vector<vpPoint>& X_)
 {
-  if(_X.size() != 4){
+  if(X_.size() != 4){
     throw vpException(vpException::dimensionError, "the vector must contains 4 points to initialise the simulator");
   }
   vpColVector Xvec[4];
   for(unsigned int i=0; i<4; ++i){
     Xvec[i].resize(3);
-    Xvec[i][0] = _X[i].get_oX();
-    Xvec[i][1] = _X[i].get_oY();
-    Xvec[i][2] = _X[i].get_oZ();
+    Xvec[i][0] = X_[i].get_oX();
+    Xvec[i][1] = X_[i].get_oY();
+    Xvec[i][2] = X_[i].get_oZ();
   }
 
   Ig = I;
@@ -1613,7 +1620,7 @@ vpImageSimulator::init(const vpImage<unsigned char> &I, const std::vector<vpPoin
 /*!
   Initialise the image thanks to an image \f$ I \f$ and a table of vector containing the 3D coordinates of the image's corners.
 
-  \throw vpException::dimensionError if the _X vector is not of size 4.
+  \throw vpException::dimensionError if the X_ vector is not of size 4.
 
   - \f$ X[0] \f$ :Top left corner.
   - \f$ X[1] \f$ :Top right corner.
@@ -1621,21 +1628,21 @@ vpImageSimulator::init(const vpImage<unsigned char> &I, const std::vector<vpPoin
   - \f$ X[3] \f$ :Bottom left corner.
 
   \param I : The image which is projected.
-  \param _X : Vector of the 3D coordinates in the object frame (oX, oY, oZ)
+  \param X_ : Vector of the 3D coordinates in the object frame (oX, oY, oZ)
   corresponding to the image corners.
 */
 void
-vpImageSimulator::init(const vpImage<vpRGBa> &I, const std::vector<vpPoint>& _X)
+vpImageSimulator::init(const vpImage<vpRGBa> &I, const std::vector<vpPoint>& X_)
 {
-  if(_X.size() != 4){
+  if(X_.size() != 4){
     throw vpException(vpException::dimensionError, "the vector must contains 4 points to initialise the simulator");
   }
   vpColVector Xvec[4];
   for(unsigned int i=0; i<4; ++i){
     Xvec[i].resize(3);
-    Xvec[i][0] = _X[i].get_oX();
-    Xvec[i][1] = _X[i].get_oY();
-    Xvec[i][2] = _X[i].get_oZ();
+    Xvec[i][0] = X_[i].get_oX();
+    Xvec[i][1] = X_[i].get_oY();
+    Xvec[i][2] = X_[i].get_oZ();
   }
 
   Ic = I;
@@ -1645,7 +1652,7 @@ vpImageSimulator::init(const vpImage<vpRGBa> &I, const std::vector<vpPoint>& _X)
 /*!
   Initialise the image thanks to an image whose adress is given by \f$ file_image \f$ and a table of vector containing the 3D coordinates of the image's corners.
 
-  \throw vpException::dimensionError if the _X vector is not of size 4.
+  \throw vpException::dimensionError if the X_ vector is not of size 4.
 
   - \f$ X[0] \f$ :Top left corner.
   - \f$ X[1] \f$ :Top right corner.
@@ -1653,21 +1660,21 @@ vpImageSimulator::init(const vpImage<vpRGBa> &I, const std::vector<vpPoint>& _X)
   - \f$ X[3] \f$ :Bottom left corner.
 
   \param file_image : The adress of an image file.
-  \param _X : Vector of the 3D coordinates in the object frame (oX, oY, oZ)
+  \param X_ : Vector of the 3D coordinates in the object frame (oX, oY, oZ)
   corresponding to the image corners.
 */
 void
-vpImageSimulator::init(const char* file_image, const std::vector<vpPoint>& _X)
+vpImageSimulator::init(const char* file_image, const std::vector<vpPoint>& X_)
 {
-  if(_X.size() != 4){
+  if(X_.size() != 4){
     throw vpException(vpException::dimensionError, "the vector must contains 4 points to initialise the simulator");
   }
   vpColVector Xvec[4];
   for(unsigned int i=0; i<4; ++i){
     Xvec[i].resize(3);
-    Xvec[i][0] = _X[i].get_oX();
-    Xvec[i][1] = _X[i].get_oY();
-    Xvec[i][2] = _X[i].get_oZ();
+    Xvec[i][0] = X_[i].get_oX();
+    Xvec[i][1] = X_[i].get_oY();
+    Xvec[i][2] = X_[i].get_oZ();
   }
 
   vpImageIo::read(Ig,file_image);
@@ -1951,3 +1958,18 @@ vpImageSimulator::getRoi(const unsigned int &Iwidth,
   rectangle.setLeft(left);
   rectangle.setRight(right);
 }
+
+std::vector<vpColVector>
+vpImageSimulator::get3DcornersTextureRectangle()
+{
+  std::vector<vpColVector> X_;
+  for (int i=0; i<4; i++)
+    X_.push_back(X[i]);
+  return X_;
+}
+
+VISP_EXPORT std::ostream& operator<< (std::ostream &os, const vpImageSimulator& /*ip*/)
+{
+  os << "";
+  return os;
+}
diff --git a/src/simulator/image-simulator/vpImageSimulator.h b/src/simulator/image-simulator/vpImageSimulator.h
index d9357ef4..01f99ea5 100644
--- a/src/simulator/image-simulator/vpImageSimulator.h
+++ b/src/simulator/image-simulator/vpImageSimulator.h
@@ -3,7 +3,7 @@
  * $Id: vpPose.h 2453 2010-01-07 10:01:10Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -210,17 +210,17 @@ class VISP_EXPORT vpImageSimulator
 
     
     //creation du plan a partir de ses coordonnees 3D ds repere objet et de son image texture
-    void init(const vpImage<unsigned char> &I,vpColVector* _X);
-    void init(const vpImage<vpRGBa> &I,vpColVector* _X);
-    void init(const char* file_image,vpColVector* _X);
-    void init(const vpImage<unsigned char> &I, const std::vector<vpPoint>& _X);
-    void init(const vpImage<vpRGBa> &I, const std::vector<vpPoint>& _X);
-    void init(const char* file_image, const std::vector<vpPoint>& _X);
+    void init(const vpImage<unsigned char> &I,vpColVector* X);
+    void init(const vpImage<vpRGBa> &I,vpColVector* X);
+    void init(const char* file_image,vpColVector* X);
+    void init(const vpImage<unsigned char> &I, const std::vector<vpPoint>& X);
+    void init(const vpImage<vpRGBa> &I, const std::vector<vpPoint>& X);
+    void init(const char* file_image, const std::vector<vpPoint>& X);
 
     //projection du plan par cMo => creation des deux triangles definissant projection du plan sur plan image (coord en metre)
-    void setCameraPosition(const vpHomogeneousMatrix &_cMt);
+    void setCameraPosition(const vpHomogeneousMatrix &cMt);
     
-    void setInterpolationType (const vpInterpolationType interp) {this->interp = interp;}
+    void setInterpolationType (const vpInterpolationType interplt) {this->interp = interplt;}
     
     void getImage(vpImage<unsigned char> &I, const vpCameraParameters &cam);
     void getImage(vpImage<vpRGBa> &I, const vpCameraParameters &cam);
@@ -242,6 +242,10 @@ class VISP_EXPORT vpImageSimulator
                          std::list <vpImageSimulator> &list,
                          const vpCameraParameters &cam);
 
+    std::vector<vpColVector> get3DcornersTextureRectangle();
+
+    friend VISP_EXPORT std::ostream& operator<< (std::ostream &os, const vpImageSimulator& /*ip*/);
+
     /*!
       As it can be time consuming to reset all the image to a default baground value, this function enable to reset only the pixel which changed the previous time.
       
@@ -278,7 +282,7 @@ class VISP_EXPORT vpImageSimulator
 #endif
     
   private:
-    void initPlan(vpColVector* _X);
+    void initPlan(vpColVector* X);
     
     //result = plan est visible.
     //ie: un plan est oriente dans si normal_plan.focal < 0 => plan est visible sinon invisible.
@@ -307,12 +311,6 @@ class VISP_EXPORT vpImageSimulator
 		const vpCameraParameters &cam, vpPoint* pt, vpRect &rect);
 };
 
-VISP_EXPORT inline std::ostream& operator<< (std::ostream &os, const vpImageSimulator& /*ip*/)
-{
-  os << "";
-  return os;
-}
-
 
 #endif
 
diff --git a/src/simulator/ogre-simulator/vpAROgre.cpp b/src/simulator/ogre-simulator/vpAROgre.cpp
index bcedcc32..79a2fc9c 100644
--- a/src/simulator/ogre-simulator/vpAROgre.cpp
+++ b/src/simulator/ogre-simulator/vpAROgre.cpp
@@ -1,10 +1,10 @@
 /****************************************************************************
  *
- * $Id: vpAROgre.cpp 4251 2013-05-14 12:19:56Z fspindle $
+ * $Id: vpAROgre.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
- * 
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * ("GPL") version 2 as published by the Free Software Foundation.
@@ -12,11 +12,11 @@
  * distribution for additional information about the GNU GPL.
  *
  * For using ViSP with software that can not be combined with the GNU
- * GPL, please contact INRIA about acquiring a ViSP Professional 
+ * GPL, please contact INRIA about acquiring a ViSP Professional
  * Edition License.
  *
  * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
- * 
+ *
  * This software was developed at:
  * INRIA Rennes - Bretagne Atlantique
  * Campus Universitaire de Beaulieu
@@ -26,7 +26,7 @@
  *
  * If you have questions regarding the use of this file, please contact
  * INRIA at visp@inria.fr
- * 
+ *
  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
@@ -72,8 +72,8 @@
   telling Ogre where to look for renderer plugins.
 
 */
-vpAROgre::vpAROgre(const vpCameraParameters &cam, 
-		   unsigned int width, unsigned int height, 
+vpAROgre::vpAROgre(const vpCameraParameters &cam,
+		   unsigned int width, unsigned int height,
 		   const char *resourcePath, const char *pluginsPath)
   : mRoot(0), mCamera(0), mSceneMgr(0), mWindow(0)
 #ifdef VISP_HAVE_OIS
@@ -96,12 +96,16 @@ vpAROgre::vpAROgre(const vpCameraParameters &cam,
   windowHidden = false;
   mshowConfigDialog = true;
   mOptionnalResourceLocation.clear();
-  
+
   name = "ViSP - Augmented Reality";
+
+  mBackground = NULL;
+  mBackgroundHeight = 0;
+  mBackgroundWidth = 0;
 }
 
 /*!
-  Initialisation of Ogre with a grey level background. 
+  Initialisation of Ogre with a grey level background.
 
   Load the plugins that are specified in the plugins.cfg or
   plugins_d.cfg files. These files are located in
@@ -109,27 +113,27 @@ vpAROgre::vpAROgre(const vpCameraParameters &cam,
   Note that plugins.cfg file is always considered under Unix
   platforms. The file plugins_d.cfg is only considered under Windows
   when the build type is Debug.
-  
+
   Load also the resources that are defined in the resources.cfg
   file. This file is located in VISP_HAVE_OGRE_RESOURCES_PATH folder
   that is defined in vpConfig.h.
-  
-  Create also the grey level background used to display the image. 
+
+  Create also the grey level background used to display the image.
 
   \param I : Image that is displayed in the background.
 
   \param bufferedKeys : If true, use of buffered input for the keyboard (see
   Ogre documentation). Note that this parameter is only useful if OIS is used.
-  
-  \param hidden : If true, the created window will be hidden. 
+
+  \param hidden : If true, the created window will be hidden.
   Note that this functionnality requires Ogre3D 1.8.1 at least.
- 
+
   \exception vpException::ioError : If the required plugins.cfg /
   plugins_d.cfg or resources.cfg files are not accessible.
 
 */
 void vpAROgre::init(vpImage<unsigned char> &I,
-		    bool 
+		    bool
 #ifdef VISP_HAVE_OIS
 		    bufferedKeys
 #endif
@@ -138,21 +142,21 @@ void vpAROgre::init(vpImage<unsigned char> &I,
 {
   mBackgroundWidth = I.getWidth();
   mBackgroundHeight = I.getHeight();
-  
+
   init(
 #ifdef VISP_HAVE_OIS
        bufferedKeys,
 #else
       false,
 #endif
-      hidden 
+      hidden
        );
   // Create the background image which will come from the grabber
   createBackground(I);
 }
 
 /*!
-  Initialisation of Ogre with a color background. 
+  Initialisation of Ogre with a color background.
 
   Load the plugins that are specified in the plugins.cfg or
   plugins_d.cfg files. These files are located in
@@ -160,27 +164,27 @@ void vpAROgre::init(vpImage<unsigned char> &I,
   Note that plugins.cfg file is always considered under Unix
   platforms. The file plugins_d.cfg is only considered under Windows
   when the build type is Debug.
-  
+
   Load also the resources that are defined in the resources.cfg
   file. This file is located in VISP_HAVE_OGRE_RESOURCES_PATH folder
   that is defined in vpConfig.h.
-  
-  Create also a color background used to display the image. 
+
+  Create also a color background used to display the image.
 
   \param I : Image that is displayed in the background.
 
   \param bufferedKeys : If true, use of buffered input for the keyboard (see
   Ogre documentation). Note that this parameter is only useful if OIS is used.
-  
-  \param hidden : If true, the created window will be hidden. 
+
+  \param hidden : If true, the created window will be hidden.
   Note that this functionnality requires Ogre3D 1.8.1 at least.
- 
+
   \exception vpException::ioError : If the required plugins.cfg /
   plugins_d.cfg or resources.cfg files are not accessible.
 
 */
 void vpAROgre::init(vpImage<vpRGBa> &I,
-		    bool 
+		    bool
 #ifdef VISP_HAVE_OIS
 		    bufferedKeys
 #endif
@@ -189,7 +193,7 @@ void vpAROgre::init(vpImage<vpRGBa> &I,
 {
   mBackgroundWidth = I.getWidth();
   mBackgroundHeight = I.getHeight();
-  
+
   init(
 #ifdef VISP_HAVE_OIS
        bufferedKeys,
@@ -203,7 +207,7 @@ void vpAROgre::init(vpImage<vpRGBa> &I,
 }
 
 /*!
-  Initialisation of Ogre. 
+  Initialisation of Ogre.
 
   Load the plugins that are specified in the plugins.cfg or
   plugins_d.cfg files. These files are located in
@@ -211,22 +215,22 @@ void vpAROgre::init(vpImage<vpRGBa> &I,
   Note that plugins.cfg file is always considered under Unix
   platforms. The file plugins_d.cfg is only considered under Windows
   when the build type is Debug.
-  
+
   Load also the resources that are defined in the resources.cfg
   file. This file is located in VISP_HAVE_OGRE_RESOURCES_PATH folder
   that is defined in vpConfig.h.
-  
+
   \param bufferedKeys : If true, use of buffered input for the keyboard (see
   Ogre documentation). Note that this parameter is only useful if OIS is used.
-  
-  \param hidden : If true, the created window will be hidden. 
+
+  \param hidden : If true, the created window will be hidden.
   Note that this functionnality requires Ogre3D 1.8.1 at least.
- 
+
   \exception vpException::ioError : If the required plugins.cfg /
   plugins_d.cfg or resources.cfg files are not accessible.
 
 */
-void vpAROgre::init(bool 
+void vpAROgre::init(bool
 #ifdef VISP_HAVE_OIS
 		    bufferedKeys
 #endif
@@ -234,20 +238,20 @@ void vpAROgre::init(bool
 		    )
 {
   // Create the root
-#if defined(NDEBUG) || !defined(WIN32)
+#if defined(NDEBUG) || !defined(_WIN32)
   std::string pluginFile = mPluginsPath+"/plugins.cfg";
 #else
   std::string pluginFile = mPluginsPath+"/plugins_d.cfg";
 #endif
   if(!vpIoTools::checkFilename(pluginFile)){
-    std::string errorMsg = "Error: the requested plugins file \"" 
+    std::string errorMsg = "Error: the requested plugins file \""
       + pluginFile + "\" doesn't exist.";
     std::cout << errorMsg << std::endl;
 
     throw (vpException(vpException::ioError, errorMsg));
   }
   std::cout << "######################### Load plugin file: " << pluginFile << std::endl;
-  
+
   if(Ogre::Root::getSingletonPtr() == NULL)
     mRoot = new Ogre::Root(pluginFile, "ogre.cfg", "Ogre.log");
   else
@@ -266,7 +270,7 @@ void vpAROgre::init(bool
   Ogre::ConfigFile cf;
   std::string resourceFile = mResourcePath+"/resources.cfg";
   if(!vpIoTools::checkFilename(resourceFile)){
-    std::string errorMsg = "Error: the requested resource file \"" 
+    std::string errorMsg = "Error: the requested resource file \""
       + resourceFile + "\" doesn't exist.";
     std::cout << errorMsg << std::endl;
 
@@ -297,7 +301,7 @@ void vpAROgre::init(bool
   for(std::list<std::string>::const_iterator iter = mOptionnalResourceLocation.begin(); iter != mOptionnalResourceLocation.end(); ++iter){
     Ogre::ResourceGroupManager::getSingleton().addResourceLocation(*iter, "FileSystem", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
   }
-    
+
   // Create the window
   bool canInit = true;
   if(mshowConfigDialog){
@@ -309,30 +313,30 @@ void vpAROgre::init(bool
     if(!mRoot->restoreConfig())
       canInit = false;
   }
-      
+
   if(!mRoot->isInitialised()){
     if(!canInit){ //We set the default renderer system
       const Ogre::RenderSystemList& lRenderSystemList = mRoot->getAvailableRenderers();
       if( lRenderSystemList.size() == 0 )
-        throw "ConfigDialog aborted"; // Exit the application on cancel 
-        
+        throw "ConfigDialog aborted"; // Exit the application on cancel
+
       Ogre::RenderSystem *lRenderSystem = lRenderSystemList.at(0);
       std::cout << "Using " << lRenderSystem->getName() << " as renderer." << std::endl;
       mRoot->setRenderSystem(lRenderSystem);
     }
-  
-    mRoot->initialise(false); 
+
+    mRoot->initialise(false);
   }
-  
-  bool fullscreen = false;  
+
+  bool fullscreen = false;
   Ogre::NameValuePairList misc;
   Ogre::ConfigOptionMap config = mRoot->getRenderSystem()->getConfigOptions();
   Ogre::ConfigOptionMap::const_iterator it = config.begin();
-  
+
   while( it != config.end() ){
     Ogre::String leftconf = (*it).first;
     Ogre::String rightconf = (*it).second.currentValue;
-    
+
     if(leftconf == "Video Mode"){
       if(canInit)
         sscanf(rightconf.c_str(), "%d %*s %d", &mWindowWidth, &mWindowHeight);
@@ -350,19 +354,19 @@ void vpAROgre::init(bool
     }
     else
       misc[leftconf] = rightconf;
-    
+
     it++;
   }
-  
+
   // With Ogre version >= 1.8.1 we hide the window
-  if( hidden && ((OGRE_VERSION_MAJOR << 16 | OGRE_VERSION_MINOR << 8 | OGRE_VERSION_PATCH) >= (1 << 16 | 8 << 8 | 1)) ){
+  if( hidden ){
+#if ( OGRE_VERSION >= (1 << 16 | 8 << 8 | 1) )
     misc["hidden"] = "true";
     windowHidden = true;
-    mWindow = mRoot->createRenderWindow(name, mWindowWidth, mWindowHeight, fullscreen, &misc);  
+#endif
   }
-  else
-    mWindow = mRoot->createRenderWindow(name, mWindowWidth, mWindowHeight, fullscreen, &misc);
-      
+  mWindow = mRoot->createRenderWindow(name, mWindowWidth, mWindowHeight, fullscreen, &misc);
+
   // Initialise resources
   Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
   //-----------------------------------------------------
@@ -374,12 +378,12 @@ void vpAROgre::init(bool
   //		ST_EXTERIOR_REAL_FAR = paging landscape
   //		ST_INTERIOR = Quake3 BSP
   //-----------------------------------------------------
-  
+
   mSceneMgr = mRoot->createSceneManager(Ogre::ST_GENERIC);
-  
+
   // Create the camera
   createCamera();
-  
+
   // Create a viewport
   Ogre::Viewport* viewPort = mWindow->addViewport(mCamera);
 //   Ogre::Viewport* viewPort = mCamera->getViewport();
@@ -408,7 +412,7 @@ void vpAROgre::init(bool
   windowHndStr << windowHnd;
   pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
   // Let the user use the keyboard elsewhere
-#if defined (UNIX)
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   pl.insert(std::make_pair(std::string("x11_keyboard_grab"), std::string("false")));
 #endif
 
@@ -420,12 +424,12 @@ void vpAROgre::init(bool
   if ( !bufferedKeys ) mKeyboard->setEventCallback ( this);
 #endif
 
-  // Initialise a render to texture to be able to retrieve a screenshot  
+  // Initialise a render to texture to be able to retrieve a screenshot
   Ogre::TexturePtr Texture = Ogre::TextureManager::getSingleton().createManual("rtf", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,Ogre::TEX_TYPE_2D,
                                                                                mWindow->getWidth(),mWindow->getHeight(), 0, Ogre::PF_R8G8B8A8, Ogre::TU_RENDERTARGET);
-  
-  
-  
+
+
+
 //   Ogre::TexturePtr Texture = Ogre::TextureManager::getSingleton().createManual("rtf", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,Ogre::TEX_TYPE_2D,
 //                                                                                640,480, 0, Ogre::PF_R8G8B8A8, Ogre::TU_RENDERTARGET);
   Ogre::RenderTexture* RTarget = Texture->getBuffer()->getRenderTarget();
@@ -507,7 +511,7 @@ bool vpAROgre::frameEnded(const Ogre::FrameEvent& evt)
   else return result;
 }
 
-/*!  
+/*!
 
   Function telling what to do before each frame. This method is called
   before every frame rendered by Ogre.
@@ -558,7 +562,7 @@ void vpAROgre::windowClosed(Ogre::RenderWindow* rw)
   \param I : Grey level image to show in background.
   \param cMw : Camera pose as an homogeneous matrix.
 */
-bool vpAROgre::renderOneFrame(const vpImage<unsigned char> &I, 
+bool vpAROgre::renderOneFrame(const vpImage<unsigned char> &I,
            const vpHomogeneousMatrix &cMw)
 {
   // Update the background to match the situation
@@ -576,7 +580,7 @@ bool vpAROgre::renderOneFrame(const vpImage<unsigned char> &I,
   \param I : RGBa image to show in background.
   \param cMw : Camera pose as an homogeneous matrix.
 */
-bool vpAROgre::renderOneFrame(const vpImage<vpRGBa> &I, 
+bool vpAROgre::renderOneFrame(const vpImage<vpRGBa> &I,
            const vpHomogeneousMatrix &cMw)
 {
   // Update the background to match the situation
@@ -594,7 +598,7 @@ bool vpAROgre::renderOneFrame(const vpImage<vpRGBa> &I,
   \param I : Grey level image to show in background.
   \param cMw : Camera pose as an homogeneous matrix.
 */
-void vpAROgre::display(const vpImage<unsigned char> &I, 
+void vpAROgre::display(const vpImage<unsigned char> &I,
            const vpHomogeneousMatrix &cMw)
 {
   // Display on Ogre Window
@@ -635,7 +639,7 @@ bool vpAROgre::continueRendering(void)
   Set the camera intrinsic parameters
 */
 void vpAROgre::setCameraParameters(const vpCameraParameters &cameraP )
-{	
+{
   mcam = cameraP;
 }
 
@@ -657,7 +661,7 @@ void vpAROgre::load(const std::string &name, const std::string &model)
   \param wTo : New position of the node (translation between object frame and
     world frame).
 */
-void vpAROgre::setPosition(const std::string &name, 
+void vpAROgre::setPosition(const std::string &name,
          const vpTranslationVector &wTo)
 {
   // Reset the position
@@ -686,7 +690,7 @@ void vpAROgre::setRotation(const std::string &name, const vpRotationMatrix &wRo)
   // Get the node in its original position
   mSceneMgr->getSceneNode(name)->resetOrientation();
   // Apply the new rotation
-  Ogre::Matrix3 rotationOgre 
+  Ogre::Matrix3 rotationOgre
     = Ogre::Matrix3( (Ogre::Real)wRo[0][0], (Ogre::Real)wRo[0][1], (Ogre::Real)wRo[0][2],
          (Ogre::Real)wRo[1][0], (Ogre::Real)wRo[1][1], (Ogre::Real)wRo[1][2],
          (Ogre::Real)wRo[2][0], (Ogre::Real)wRo[2][1], (Ogre::Real)wRo[2][2]);
@@ -699,18 +703,18 @@ void vpAROgre::setRotation(const std::string &name, const vpRotationMatrix &wRo)
   \param name : Name of the SceneNode to rotate.
   \param wRo : The rotation matrix representing the rotation to apply.
 */
-void vpAROgre::addRotation(const std::string &name, 
+void vpAROgre::addRotation(const std::string &name,
          const vpRotationMatrix &wRo)
 {
-  // Apply the new rotation 
-  Ogre::Matrix3 rotationOgre 
+  // Apply the new rotation
+  Ogre::Matrix3 rotationOgre
     = Ogre::Matrix3( (Ogre::Real)wRo[0][0], (Ogre::Real)wRo[0][1], (Ogre::Real)wRo[0][2],
          (Ogre::Real)wRo[1][0], (Ogre::Real)wRo[1][1], (Ogre::Real)wRo[1][2],
          (Ogre::Real)wRo[2][0], (Ogre::Real)wRo[2][1], (Ogre::Real)wRo[2][2]);
   Ogre::Quaternion q(rotationOgre);
   mSceneMgr->getSceneNode(name)->rotate(q);
-	 
-  
+
+
 }
 
 /*!
@@ -721,7 +725,7 @@ void vpAROgre::addRotation(const std::string &name,
   translation to apply.
 
 */
-void vpAROgre::setPosition(const std::string &name, 
+void vpAROgre::setPosition(const std::string &name,
          const vpHomogeneousMatrix &wMo)
 {
   // Extract the position and orientation data
@@ -808,14 +812,22 @@ void vpAROgre::createBackground(vpImage<unsigned char> & /* I */)
 
   // Pointer to the dynamic texture
   Ogre::TexturePtr dynTexPtr = Ogre::TextureManager::getSingleton().getByName("BackgroundTexture");
-
-  // Get the pixel buffer
+//#if ( OGRE_VERSION >= (1 << 16 | 9 << 8 | 0) )
+//    .dynamicCast<Ogre::Texture>();// Get the pixel buffer
+//#else
+//      ;
+//#endif
   mPixelBuffer = dynTexPtr->getBuffer();
 
   // Material to apply the texture to the background
-  Ogre::MaterialPtr Backgroundmaterial 
+  Ogre::MaterialPtr Backgroundmaterial
     = Ogre::MaterialManager::getSingleton().create("BackgroundMaterial",
-						   Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+               Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+//#if ( OGRE_VERSION >= (1 << 16 | 9 << 8 | 0) )
+//      .dynamicCast<Ogre::Material>();
+//#else
+//      ;
+//#endif
   Ogre::Technique *Backgroundtechnique = Backgroundmaterial->createTechnique();
   Backgroundtechnique->createPass();
   Backgroundmaterial->getTechnique(0)->getPass(0)->setLightingEnabled(false);
@@ -873,15 +885,26 @@ void vpAROgre::createBackground(vpImage<vpRGBa> & /* I */)
 
 
   // Pointer to the dynamic texture
-  Ogre::TexturePtr dynTexPtr = Ogre::TextureManager::getSingleton().getByName("BackgroundTexture");
+  Ogre::TexturePtr dynTexPtr =
+    Ogre::TextureManager::getSingleton().getByName("BackgroundTexture");
+//#if ( OGRE_VERSION >= (1 << 16 | 9 << 8 | 0) )
+//      .dynamicCast<Ogre::Texture>();// Get the pixel buffer
+//#else
+//      ;
+//#endif
 
   // Get the pixel buffer
   mPixelBuffer = dynTexPtr->getBuffer();
 
   // Material to apply the texture to the background
-  Ogre::MaterialPtr Backgroundmaterial 
+  Ogre::MaterialPtr Backgroundmaterial
     = Ogre::MaterialManager::getSingleton().create("BackgroundMaterial",
-						   Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+               Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+//#if ( OGRE_VERSION >= (1 << 16 | 9 << 8 | 0) )
+//      .dynamicCast<Ogre::Material>();
+//#else
+//      ;
+//#endif
   Ogre::Technique *Backgroundtechnique = Backgroundmaterial->createTechnique();
   Backgroundtechnique->createPass();
   Backgroundmaterial->getTechnique(0)->getPass(0)->setLightingEnabled(false);
@@ -930,8 +953,8 @@ void vpAROgre::updateCameraProjection(void)
   py = (Ogre::Real)mcam.get_py();
   u0 = (Ogre::Real)mcam.get_u0();
   v0 = (Ogre::Real)mcam.get_v0();
-  Ogre::Matrix4 Projection 
-    = Ogre::Matrix4( (Ogre::Real)(2.0*px/mBackgroundWidth), 0,  (Ogre::Real)(2.0*(u0/mBackgroundWidth)-1.0), 0, 
+  Ogre::Matrix4 Projection
+    = Ogre::Matrix4( (Ogre::Real)(2.0*px/mBackgroundWidth), 0,  (Ogre::Real)(2.0*(u0/mBackgroundWidth)-1.0), 0,
 		     0, (Ogre::Real)(2.0*py/mBackgroundHeight), (Ogre::Real)(2.0*(v0/mBackgroundHeight)-1.0),0,
 		     0, 0, (Ogre::Real)(-1.0*f_p_n/f_m_n), (Ogre::Real)(-2.0*f*n/f_m_n),
 		     0, 0, -1.0, 0);
@@ -944,7 +967,7 @@ void vpAROgre::updateCameraProjection(void)
 void vpAROgre::updateBackgroundTexture(const vpImage<unsigned char> &I)
 {
   // Inspired from Ogre wiki : http://www.ogre3d.org/tikiwiki/Creating+dynamic+textures
-  // Lock the pixel buffer and get a pixel box. HBL_DISCARD is to use for best 
+  // Lock the pixel buffer and get a pixel box. HBL_DISCARD is to use for best
   // performance than HBL_NORMAL
   mPixelBuffer->lock(Ogre::HardwareBuffer::HBL_DISCARD); // Lock the buffer
   const Ogre::PixelBox& pixelBox = mPixelBuffer->getCurrentLock();
@@ -963,7 +986,7 @@ void vpAROgre::updateBackgroundTexture(const vpImage<unsigned char> &I)
 void vpAROgre::updateBackgroundTexture(const vpImage<vpRGBa> &I)
 {
   // Inspired from Ogre wiki : http://www.ogre3d.org/tikiwiki/Creating+dynamic+textures
-  // Lock the pixel buffer and get a pixel box. HBL_DISCARD is to use for best 
+  // Lock the pixel buffer and get a pixel box. HBL_DISCARD is to use for best
   // performance than HBL_NORMAL
   mPixelBuffer->lock(Ogre::HardwareBuffer::HBL_DISCARD); // Lock the buffer
   const Ogre::PixelBox& pixelBox = mPixelBuffer->getCurrentLock();
@@ -977,18 +1000,18 @@ void vpAROgre::updateBackgroundTexture(const vpImage<vpRGBa> &I)
 //      *pDest++=I[i][mBackgroundWidth-j].B; // Blue component
 //      *pDest++=I[i][mBackgroundWidth-j].G; // Green component
 //      *pDest++=I[i][mBackgroundWidth-j].R; // Red component
-      
+
       *pDest++=I[i][j].B; // Blue component
       *pDest++=I[i][j].G; // Green component
       *pDest++=I[i][j].R; // Red component
-      
+
       *pDest++ = 255;     // Alpha component
     }
   }
 #else // if texture in RGBa format which is the format of the input image
   memcpy(pDest, I.bitmap, mBackgroundHeight*mBackgroundWidth*sizeof(vpRGBa));
 #endif
-  
+
   // Unlock the pixel buffer
   mPixelBuffer->unlock();
 }
@@ -999,7 +1022,7 @@ void vpAROgre::updateBackgroundTexture(const vpImage<vpRGBa> &I)
 void vpAROgre::updateCameraParameters (const vpHomogeneousMatrix &cMw)
 {
   // The matrix is given to Ogre with some changes to fit with the world projection
-  Ogre::Matrix4 ModelView 
+  Ogre::Matrix4 ModelView
 //    = Ogre::Matrix4( (Ogre::Real)-cMo[0][0],  (Ogre::Real)-cMo[0][1],  (Ogre::Real)-cMo[0][2],  (Ogre::Real)-cMo[0][3],
     = Ogre::Matrix4( (Ogre::Real)cMw[0][0],  (Ogre::Real)cMw[0][1],  (Ogre::Real)cMw[0][2],  (Ogre::Real)cMw[0][3],
          (Ogre::Real)-cMw[1][0], (Ogre::Real)-cMw[1][1], (Ogre::Real)-cMw[1][2], (Ogre::Real)-cMw[1][3],
@@ -1018,6 +1041,11 @@ void vpAROgre::getRenderingOutput(vpImage<vpRGBa> &I, const vpHomogeneousMatrix
 {
     updateCameraParameters(cMo);
     Ogre::TexturePtr dynTexPtr = Ogre::TextureManager::getSingleton().getByName("rtf");
+//#if ( OGRE_VERSION >= (1 << 16 | 9 << 8 | 0) )
+//        .dynamicCast<Ogre::Texture>();
+//#else
+//        ;
+//#endif
     Ogre::RenderTexture* RTarget = dynTexPtr->getBuffer()->getRenderTarget();
     mWindow->update();
     RTarget->update();
@@ -1032,7 +1060,7 @@ void vpAROgre::getRenderingOutput(vpImage<vpRGBa> &I, const vpHomogeneousMatrix
 #if 1 // if texture in BGRa format
     for(unsigned int i=0; i<I.getHeight(); i++){
       for(unsigned int j=0; j<I.getWidth(); j++){
-	// Color Image	
+	// Color Image
 	I[i][j].B = *pDest++; // Blue component
 	I[i][j].G = *pDest++; // Green component
 	I[i][j].R = *pDest++; // Red component
diff --git a/src/simulator/ogre-simulator/vpAROgre.h b/src/simulator/ogre-simulator/vpAROgre.h
index 1c1c5f07..42dd1839 100644
--- a/src/simulator/ogre-simulator/vpAROgre.h
+++ b/src/simulator/ogre-simulator/vpAROgre.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpAROgre.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpAROgre.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpArit.c b/src/simulator/wireframe-simulator/core/vpArit.c
index f804f4b9..62f7f5fb 100755
--- a/src/simulator/wireframe-simulator/core/vpArit.c
+++ b/src/simulator/wireframe-simulator/core/vpArit.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpArit.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpArit.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpArit.h b/src/simulator/wireframe-simulator/core/vpArit.h
index b0790fe3..6424b1cd 100755
--- a/src/simulator/wireframe-simulator/core/vpArit.h
+++ b/src/simulator/wireframe-simulator/core/vpArit.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpArit.h 4310 2013-07-08 08:48:34Z fspindle $
+ * $Id: vpArit.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpAritio.c b/src/simulator/wireframe-simulator/core/vpAritio.c
index efd96a95..80d93514 100755
--- a/src/simulator/wireframe-simulator/core/vpAritio.c
+++ b/src/simulator/wireframe-simulator/core/vpAritio.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpAritio.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpAritio.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpBound.c b/src/simulator/wireframe-simulator/core/vpBound.c
index 11904bd3..2eb39809 100755
--- a/src/simulator/wireframe-simulator/core/vpBound.c
+++ b/src/simulator/wireframe-simulator/core/vpBound.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpBound.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpBound.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpBound.h b/src/simulator/wireframe-simulator/core/vpBound.h
index ae03f652..d05b2a9b 100755
--- a/src/simulator/wireframe-simulator/core/vpBound.h
+++ b/src/simulator/wireframe-simulator/core/vpBound.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpBound.h 4332 2013-07-22 14:23:46Z fspindle $
+ * $Id: vpBound.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpBoundio.c b/src/simulator/wireframe-simulator/core/vpBoundio.c
index 0f191a98..c27cc594 100755
--- a/src/simulator/wireframe-simulator/core/vpBoundio.c
+++ b/src/simulator/wireframe-simulator/core/vpBoundio.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpBoundio.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpBoundio.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpCgiconstants.h b/src/simulator/wireframe-simulator/core/vpCgiconstants.h
index f01ad4ee..c4b9727e 100755
--- a/src/simulator/wireframe-simulator/core/vpCgiconstants.h
+++ b/src/simulator/wireframe-simulator/core/vpCgiconstants.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpCgiconstants.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpCgiconstants.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpCgidefs.h b/src/simulator/wireframe-simulator/core/vpCgidefs.h
index b01bdc20..7ed5c3b6 100755
--- a/src/simulator/wireframe-simulator/core/vpCgidefs.h
+++ b/src/simulator/wireframe-simulator/core/vpCgidefs.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpCgidefs.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpCgidefs.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpClipping.c b/src/simulator/wireframe-simulator/core/vpClipping.c
index ea7c833e..b36a3c33 100755
--- a/src/simulator/wireframe-simulator/core/vpClipping.c
+++ b/src/simulator/wireframe-simulator/core/vpClipping.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpClipping.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpClipping.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpDisplay.c b/src/simulator/wireframe-simulator/core/vpDisplay.c
index a1458c70..ca80982f 100755
--- a/src/simulator/wireframe-simulator/core/vpDisplay.c
+++ b/src/simulator/wireframe-simulator/core/vpDisplay.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDisplay.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpDisplay.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpImstack.h b/src/simulator/wireframe-simulator/core/vpImstack.h
index 99eda925..1fa1061f 100755
--- a/src/simulator/wireframe-simulator/core/vpImstack.h
+++ b/src/simulator/wireframe-simulator/core/vpImstack.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpImstack.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpImstack.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpKeyword.c b/src/simulator/wireframe-simulator/core/vpKeyword.c
index 72cdb7f2..8337e575 100755
--- a/src/simulator/wireframe-simulator/core/vpKeyword.c
+++ b/src/simulator/wireframe-simulator/core/vpKeyword.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpKeyword.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpKeyword.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpKeyword.h b/src/simulator/wireframe-simulator/core/vpKeyword.h
index 0cfd08ff..f75bf11d 100644
--- a/src/simulator/wireframe-simulator/core/vpKeyword.h
+++ b/src/simulator/wireframe-simulator/core/vpKeyword.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpKeyword.h 4332 2013-07-22 14:23:46Z fspindle $
+ * $Id: vpKeyword.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpLex.c b/src/simulator/wireframe-simulator/core/vpLex.c
index 366dfc3a..630570c8 100755
--- a/src/simulator/wireframe-simulator/core/vpLex.c
+++ b/src/simulator/wireframe-simulator/core/vpLex.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpLex.c 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpLex.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -239,9 +239,9 @@ void close_lex (void)
 
 
 #define	ECHO	printf ("%c", *(mysptr))
-#define	CURC	(*mysptr)	/* caractere courant	*/
-#define	NEXTC	(*(mysptr+1))	/* caractere suivant	*/
-#define	PREVC	(*(mysptr-1))	/* caractere precedent	*/
+#define	CURC	(*((signed char *)mysptr))	/* caractere courant	*/
+#define	NEXTC	(*((signed char *)mysptr+1))	/* caractere suivant	*/
+#define	PREVC	(*((signed char *)mysptr-1))	/* caractere precedent	*/
 
 
 /*
@@ -341,6 +341,7 @@ printf("mytext %s, myfloat %f\n",mytext,myfloat);
 */
 				return (T_FLOAT);
 			}
+      break;
 		case 'E'	:	/* lecture exposant	*/
 		case 'e'	:
 			mysptr++;
@@ -437,179 +438,180 @@ string :
 int lexecho (FILE *f, int token)
 {
 lex_loop :
-	for (; chtbl[(int)CURC] == SPCT; mysptr++)	/* saute les espaces	*/
-		fwrite (mysptr, 1, 1, f);
-
-	switch (chtbl[(int)CURC]) {
-
-	case NULT	:
-		mytext = mysptr;	/* sauvegarde le jeton	*/
-		mysptr++;
-		if (token != *mytext)
-			fwrite (mytext, 1, 1, f);
-		return (*mytext);
-		break;
-	case EOBT	:
-		next_source ();
-		goto lex_loop;
-		break;
-	case EOFT	:
-		mytext = mysptr;	/* sauvegarde le jeton	*/
-		return (T_EOF);
-		break;
-	case EOLT	:
-		fwrite (mysptr, 1, 1, f);
-		if (mysptr == lastline) next_source ();
-		else	mysptr++;
-		mylineno++;
-		myline = mysptr;
-		goto lex_loop;
-		break;
-	case CMTT	:
-		fwrite (mysptr, 1, 1, f);
-		mytext = mysptr;	/* sauvegarde le jeton	*/
-		mysptr++;
-		if (CURC != '*')
-			return (*mytext);
-		fwrite (mysptr, 1, 1, f);
-		mysptr++;
+  for (; chtbl[(int)CURC] == SPCT; mysptr++)	/* saute les espaces	*/
+    fwrite (mysptr, 1, 1, f);
+
+  switch (chtbl[(int)CURC]) {
+
+  case NULT	:
+    mytext = mysptr;	/* sauvegarde le jeton	*/
+    mysptr++;
+    if (token != *mytext)
+      fwrite (mytext, 1, 1, f);
+    return (*mytext);
+    break;
+  case EOBT	:
+    next_source ();
+    goto lex_loop;
+    break;
+  case EOFT	:
+    mytext = mysptr;	/* sauvegarde le jeton	*/
+    return (T_EOF);
+    break;
+  case EOLT	:
+    fwrite (mysptr, 1, 1, f);
+    if (mysptr == lastline) next_source ();
+    else	mysptr++;
+    mylineno++;
+    myline = mysptr;
+    goto lex_loop;
+    break;
+  case CMTT	:
+    fwrite (mysptr, 1, 1, f);
+    mytext = mysptr;	/* sauvegarde le jeton	*/
+    mysptr++;
+    if (CURC != '*')
+      return (*mytext);
+    fwrite (mysptr, 1, 1, f);
+    mysptr++;
 comment :
-		for (; iscmtt((int)CURC); mysptr++)
-			fwrite (mysptr, 1, 1, f);
-		switch (chtbl[(int)CURC]) {
-		case EOBT	:
-			next_source ();
-			goto comment;
-			break;
-		case EOFT	:
-			lexerr ("start", lex_errtbl[E_CMT_EOF], NULL);
-			return (T_EOF);
-			break;
-		case EOLT	:
-			fwrite (mysptr, 1, 1, f);
-			if (mysptr == lastline) next_source ();
-			else	mysptr++;
-			mylineno++;
-			myline = mysptr;
-			goto comment;
-			break;
-		case CMTT	:
-			fwrite (mysptr, 1, 1, f);
-			if (PREVC == '*') {	/* veritable fin	*/
-				mysptr++;
-				goto lex_loop;
-			}
-			mysptr++;		/* pseudo fin 		*/
-			goto comment;
-			break;
-		}
-		break;
-	case IDNT	:
-		mytext = mysptr;	/* sauvegarde le jeton	*/
-		mysptr++;
-		for (; isidnt((int)CURC); mysptr++);
-		mylength = (int)(mysptr - mytext);
-		if (token != get_symbol (mytext, mylength))
-			fwrite (mytext, mylength, 1, f);
-		return (get_symbol (mytext, mylength));
-		break;
-	case INTT	:
-		mytext = mysptr;	/* sauvegarde le jeton	*/
+    for (; iscmtt((int)CURC); mysptr++)
+      fwrite (mysptr, 1, 1, f);
+    switch (chtbl[(int)CURC]) {
+    case EOBT	:
+      next_source ();
+      goto comment;
+      break;
+    case EOFT	:
+      lexerr ("start", lex_errtbl[E_CMT_EOF], NULL);
+      return (T_EOF);
+      break;
+    case EOLT	:
+      fwrite (mysptr, 1, 1, f);
+      if (mysptr == lastline) next_source ();
+      else	mysptr++;
+      mylineno++;
+      myline = mysptr;
+      goto comment;
+      break;
+    case CMTT	:
+      fwrite (mysptr, 1, 1, f);
+      if (PREVC == '*') {	/* veritable fin	*/
+        mysptr++;
+        goto lex_loop;
+      }
+      mysptr++;		/* pseudo fin 		*/
+      goto comment;
+      break;
+    }
+    break;
+  case IDNT	:
+    mytext = mysptr;	/* sauvegarde le jeton	*/
+    mysptr++;
+    for (; isidnt((int)CURC); mysptr++);
+    mylength = (int)(mysptr - mytext);
+    if (token != get_symbol (mytext, mylength))
+      fwrite (mytext, mylength, 1, f);
+    return (get_symbol (mytext, mylength));
+    break;
+  case INTT	:
+    mytext = mysptr;	/* sauvegarde le jeton	*/
 int_part	:
-		mysptr++;
-		for (; isintt((int)CURC); mysptr++);
-		switch (CURC) {
-		case '.'	:	/* lecture fraction	*/
+    mysptr++;
+    for (; isintt((int)CURC); mysptr++);
+    switch (CURC) {
+    case '.'	:	/* lecture fraction	*/
 float_part :
-			mysptr++;
-			for (; isintt((int)CURC); mysptr++);
-			if (CURC != 'E' && CURC != 'e') {
-				if (token != T_FLOAT)
-					fwrite (mytext, mysptr - mytext, 1, f);
-				return (T_FLOAT);
-			}
-		case 'E'	:	/* lecture exposant	*/
-		case 'e'	:
-			mysptr++;
-			if (isintt((int)CURC)) mysptr++;
-			else if (issgnt((int)CURC) && isintt((int)NEXTC)) mysptr +=2;
-			else {
-				mysptr--;
-				if (token != T_FLOAT)
-					fwrite (mytext, mysptr - mytext, 1, f);
-				return (T_FLOAT);
-			}
-			for (; isintt((int)CURC); mysptr++);
-			if (token != T_FLOAT)
-				fwrite (mytext, mysptr - mytext, 1, f);
-			return (T_FLOAT);
-			break;
-		default		:
-			if (token != T_INT)
-				fwrite (mytext, mysptr - mytext, 1, f);
-			return (T_INT);
-			break;
-		}
-		break;
-	case FPTT	:
-		mytext = mysptr;	/* sauvegarde le jeton	*/
-		mysptr++;
-		if (! isintt((int)CURC)) { 	/* pas de fraction	*/
-			if (token != *mytext)
-				fwrite (mytext, 1, 1, f);
-			return (*mytext);
-		}
-		goto float_part;
-		break;
-	case SGNT	:
-		mytext = mysptr;	/* sauvegarde le jeton	*/
-		mysptr++;
-		if (isintt((int)CURC)) goto int_part;
-		if (isfptt((int)CURC) && isintt((int)NEXTC)) goto float_part;
-		if (token != *mytext)
-			fwrite (mytext, 1, 1, f);
-		return (*mytext);
-		break;
-	case STGT	:
-		fwrite (mysptr, 1, 1, f);
-		mytext = mysptr;	/* sauvegarde le jeton	*/
-		mysptr++;
+      mysptr++;
+      for (; isintt((int)CURC); mysptr++);
+      if (CURC != 'E' && CURC != 'e') {
+        if (token != T_FLOAT)
+          fwrite (mytext, mysptr - mytext, 1, f);
+        return (T_FLOAT);
+      }
+      break;
+    case 'E'	:	/* lecture exposant	*/
+    case 'e'	:
+      mysptr++;
+      if (isintt((int)CURC)) mysptr++;
+      else if (issgnt((int)CURC) && isintt((int)NEXTC)) mysptr +=2;
+      else {
+        mysptr--;
+        if (token != T_FLOAT)
+          fwrite (mytext, mysptr - mytext, 1, f);
+        return (T_FLOAT);
+      }
+      for (; isintt((int)CURC); mysptr++);
+      if (token != T_FLOAT)
+        fwrite (mytext, mysptr - mytext, 1, f);
+      return (T_FLOAT);
+      break;
+    default		:
+      if (token != T_INT)
+        fwrite (mytext, mysptr - mytext, 1, f);
+      return (T_INT);
+      break;
+    }
+    break;
+  case FPTT	:
+    mytext = mysptr;	/* sauvegarde le jeton	*/
+    mysptr++;
+    if (! isintt((int)CURC)) { 	/* pas de fraction	*/
+      if (token != *mytext)
+        fwrite (mytext, 1, 1, f);
+      return (*mytext);
+    }
+    goto float_part;
+    break;
+  case SGNT	:
+    mytext = mysptr;	/* sauvegarde le jeton	*/
+    mysptr++;
+    if (isintt((int)CURC)) goto int_part;
+    if (isfptt((int)CURC) && isintt((int)NEXTC)) goto float_part;
+    if (token != *mytext)
+      fwrite (mytext, 1, 1, f);
+    return (*mytext);
+    break;
+  case STGT	:
+    fwrite (mysptr, 1, 1, f);
+    mytext = mysptr;	/* sauvegarde le jeton	*/
+    mysptr++;
 string :
-		for (; isstgt((int)CURC); mysptr++)
-			fwrite (mysptr, 1, 1, f);
-		switch (chtbl[(int)CURC]) {
-		case EOBT	:
-			next_source ();
-			goto comment;
-			break;
-		case EOFT	:
-			lexerr ("start", lex_errtbl[E_STG_EOF], NULL);
-			return (T_EOF);
-			break;
-		case EOLT	:
-			lexerr ("start", lex_errtbl[E_STG_EOL], NULL);
-			return ('\n');
-			break;
-		case STGT	:
-			fwrite (mysptr, 1, 1, f);
-			if (PREVC != '\\') {	/* veritable fin	*/
-				mytext++;
-				mylength = (int)(mysptr - mytext);
-				mysptr++;
-				return (T_STRING);
-			}
-			mysptr++;		/* pseudo fin 		*/
-			goto string;
-			break;
-		}
-		break;
-	default		:
-		fwrite (mysptr, 1, 1, f);
-		mysptr++;
-		goto lex_loop;
-		break;
-	}
-	return (T_EOF);
+    for (; isstgt((int)CURC); mysptr++)
+      fwrite (mysptr, 1, 1, f);
+    switch (chtbl[(int)CURC]) {
+    case EOBT	:
+      next_source ();
+      goto comment;
+      break;
+    case EOFT	:
+      lexerr ("start", lex_errtbl[E_STG_EOF], NULL);
+      return (T_EOF);
+      break;
+    case EOLT	:
+      lexerr ("start", lex_errtbl[E_STG_EOL], NULL);
+      return ('\n');
+      break;
+    case STGT	:
+      fwrite (mysptr, 1, 1, f);
+      if (PREVC != '\\') {	/* veritable fin	*/
+        mytext++;
+        mylength = (int)(mysptr - mytext);
+        mysptr++;
+        return (T_STRING);
+      }
+      mysptr++;		/* pseudo fin 		*/
+      goto string;
+      break;
+    }
+    break;
+  default		:
+    fwrite (mysptr, 1, 1, f);
+    mysptr++;
+    goto lex_loop;
+    break;
+  }
+  return (T_EOF);
 }
 
 
@@ -689,11 +691,7 @@ static	void	next_source (void)
 	while ((*--bot = *--top) != EOL);
 	myline = mysptr = bot + 1;
 
-	//if ((size = read (fds, buf, BUFSIZE)) < 0) {
-	if ((size = fread (buf,sizeof (char), BUFSIZE,fds)) < 0) {
-		perror (source);
-		exit (1);
-	}
+  size = fread (buf,sizeof (char), BUFSIZE,fds);
 	if (size == 0) {
 		topbuf  = buf + 1;
 		*buf    = EOF;
diff --git a/src/simulator/wireframe-simulator/core/vpLex.h b/src/simulator/wireframe-simulator/core/vpLex.h
index f213fa4e..495ed730 100644
--- a/src/simulator/wireframe-simulator/core/vpLex.h
+++ b/src/simulator/wireframe-simulator/core/vpLex.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpLex.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpLex.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpMy.h b/src/simulator/wireframe-simulator/core/vpMy.h
index 941382cb..ac303f78 100755
--- a/src/simulator/wireframe-simulator/core/vpMy.h
+++ b/src/simulator/wireframe-simulator/core/vpMy.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMy.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMy.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpMyio.c b/src/simulator/wireframe-simulator/core/vpMyio.c
index da4008c3..986dcf40 100755
--- a/src/simulator/wireframe-simulator/core/vpMyio.c
+++ b/src/simulator/wireframe-simulator/core/vpMyio.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMyio.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMyio.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -107,7 +107,14 @@ void fscanf_string (char **str)
 		lexerr ("start", "string expected", NULL);
 	if (*str == NULL)
 		*str = (char *) malloc ((mylength + 1) * sizeof (char));
-	else	*str = (char *) realloc (*str, (mylength + 1) * sizeof (char));
+  else
+    *str = (char *) realloc (*str, (mylength + 1) * sizeof (char));
+
+  if (*str == NULL) {
+    printf("Unable to read the string: bad memory allocation");
+    return;
+  }
+
 	strncpy (*str, mytext, mylength);
 }
 
diff --git a/src/simulator/wireframe-simulator/core/vpParser.c b/src/simulator/wireframe-simulator/core/vpParser.c
index 8682dad8..6f0f28d5 100755
--- a/src/simulator/wireframe-simulator/core/vpParser.c
+++ b/src/simulator/wireframe-simulator/core/vpParser.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpParser.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpParser.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpProjection.c b/src/simulator/wireframe-simulator/core/vpProjection.c
index f6c7f262..364971d8 100755
--- a/src/simulator/wireframe-simulator/core/vpProjection.c
+++ b/src/simulator/wireframe-simulator/core/vpProjection.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpProjection.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpProjection.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpRfstack.c b/src/simulator/wireframe-simulator/core/vpRfstack.c
index d8b4ed52..77f4da58 100755
--- a/src/simulator/wireframe-simulator/core/vpRfstack.c
+++ b/src/simulator/wireframe-simulator/core/vpRfstack.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRfstack.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRfstack.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -69,7 +69,8 @@ static	int	*sp		 = stack;		/* sommet 	*/
 void
 fprintf_rfstack (FILE *fp)
 {
-	int	flg = 0;	/* nul si element unique	*/
+  int	flg;
+  flg = 0;	/* nul si element unique	*/
 
 	if (*sp == IS_INSIDE) {
 		fprintf (fp, "(null)\n");
@@ -77,28 +78,34 @@ fprintf_rfstack (FILE *fp)
 	}
 	fprintf (fp, "(");
 	if (*sp & IS_ABOVE) {
-		if (flg++) fprintf (fp, " ");
+    if (flg) fprintf (fp, " ");
+    flg ++;
 		fprintf (fp, "above");
 	}
 	if (*sp & IS_BELOW) {
-		if (flg++) fprintf (fp, " ");
-		fprintf (fp, "below");
+    if (flg) fprintf (fp, " ");
+    flg ++;
+    fprintf (fp, "below");
 	}
 	if (*sp & IS_RIGHT) {
-		if (flg++) fprintf (fp, " ");
-		fprintf (fp, "right");
+    if (flg) fprintf (fp, " ");
+    flg ++;
+    fprintf (fp, "right");
 	}
 	if (*sp & IS_LEFT) {
-		if (flg++) fprintf (fp, " ");
-	 	fprintf (fp, "left");
+    if (flg) fprintf (fp, " ");
+    flg ++;
+    fprintf (fp, "left");
 	}
 	if (*sp & IS_BACK) {
-		if (flg++) fprintf (fp, " ");
-		fprintf (fp, "back");
+    if (flg) fprintf (fp, " ");
+    flg ++;
+    fprintf (fp, "back");
 	}
 	if (*sp & IS_FRONT) {
-		if (flg++) fprintf (fp, " ");
-		fprintf (fp, "front");
+    if (flg) fprintf (fp, " ");
+    flg ++;
+    fprintf (fp, "front");
 	}
 	fprintf (fp, ")\n");
 }
diff --git a/src/simulator/wireframe-simulator/core/vpRfstack.h b/src/simulator/wireframe-simulator/core/vpRfstack.h
index a8ad1b2f..80d6610b 100755
--- a/src/simulator/wireframe-simulator/core/vpRfstack.h
+++ b/src/simulator/wireframe-simulator/core/vpRfstack.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRfstack.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRfstack.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpSkipio.c b/src/simulator/wireframe-simulator/core/vpSkipio.c
index c1996594..81934ecc 100755
--- a/src/simulator/wireframe-simulator/core/vpSkipio.c
+++ b/src/simulator/wireframe-simulator/core/vpSkipio.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSkipio.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpSkipio.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpSkipio.h b/src/simulator/wireframe-simulator/core/vpSkipio.h
index eaffbc2f..42171ab3 100644
--- a/src/simulator/wireframe-simulator/core/vpSkipio.h
+++ b/src/simulator/wireframe-simulator/core/vpSkipio.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSkipio.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpSkipio.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpTmstack.c b/src/simulator/wireframe-simulator/core/vpTmstack.c
index 1ed738a9..ffe7660d 100755
--- a/src/simulator/wireframe-simulator/core/vpTmstack.c
+++ b/src/simulator/wireframe-simulator/core/vpTmstack.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpTmstack.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpTmstack.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpTmstack.h b/src/simulator/wireframe-simulator/core/vpTmstack.h
index ae334451..af03b729 100755
--- a/src/simulator/wireframe-simulator/core/vpTmstack.h
+++ b/src/simulator/wireframe-simulator/core/vpTmstack.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpTmstack.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpTmstack.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpToken.c b/src/simulator/wireframe-simulator/core/vpToken.c
index ed815aec..b52f5805 100755
--- a/src/simulator/wireframe-simulator/core/vpToken.c
+++ b/src/simulator/wireframe-simulator/core/vpToken.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpToken.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpToken.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpToken.h b/src/simulator/wireframe-simulator/core/vpToken.h
index b0188bfc..b185f28f 100755
--- a/src/simulator/wireframe-simulator/core/vpToken.h
+++ b/src/simulator/wireframe-simulator/core/vpToken.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpToken.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpToken.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpView.h b/src/simulator/wireframe-simulator/core/vpView.h
index b9b0555b..8f95d20e 100755
--- a/src/simulator/wireframe-simulator/core/vpView.h
+++ b/src/simulator/wireframe-simulator/core/vpView.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpView.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpView.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpViewio.c b/src/simulator/wireframe-simulator/core/vpViewio.c
index 1f0313ce..6b011645 100755
--- a/src/simulator/wireframe-simulator/core/vpViewio.c
+++ b/src/simulator/wireframe-simulator/core/vpViewio.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpViewio.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpViewio.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpVwstack.c b/src/simulator/wireframe-simulator/core/vpVwstack.c
index 7a9b3db7..9db5e9e4 100644
--- a/src/simulator/wireframe-simulator/core/vpVwstack.c
+++ b/src/simulator/wireframe-simulator/core/vpVwstack.c
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpVwstack.c 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpVwstack.c 4574 2014-01-09 08:48:51Z fspindle $
  *
 * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/core/vpVwstack.h b/src/simulator/wireframe-simulator/core/vpVwstack.h
index ec7d7600..83f2f74d 100755
--- a/src/simulator/wireframe-simulator/core/vpVwstack.h
+++ b/src/simulator/wireframe-simulator/core/vpVwstack.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpVwstack.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpVwstack.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/scene/CMakeWireframeScenesList.cmake b/src/simulator/wireframe-simulator/scene/CMakeWireframeScenesList.cmake
index 9e540178..5b605fa3 100644
--- a/src/simulator/wireframe-simulator/scene/CMakeWireframeScenesList.cmake
+++ b/src/simulator/wireframe-simulator/scene/CMakeWireframeScenesList.cmake
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeWireframeScenesList.cmake 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeWireframeScenesList.cmake 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/src/simulator/wireframe-simulator/vpWireFrameSimulator.cpp b/src/simulator/wireframe-simulator/vpWireFrameSimulator.cpp
index ad755829..5ecb517d 100644
--- a/src/simulator/wireframe-simulator/vpWireFrameSimulator.cpp
+++ b/src/simulator/wireframe-simulator/vpWireFrameSimulator.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpWireFrameSimulator.cpp 4227 2013-04-19 07:55:22Z fspindle $
+ * $Id: vpWireFrameSimulator.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -57,11 +57,6 @@
 #include <visp/vpPoint.h>
 #include <visp/vpIoTools.h>
 
-#if defined(WIN32)
-#define bcopy(b1,b2,len) (memmove((b2), (b1), (len)), (void) 0) 
-#endif
-
-
 //Inventor includes
 #if defined(VISP_HAVE_COIN)
 #include <Inventor/nodes/SoSeparator.h>
@@ -88,6 +83,9 @@ typedef enum
   UNKNOWN_MODEL
 } Model_3D;
 
+Model_3D getExtension(const char* file);
+void set_scene_wrl (const char* str, Bound_scene *sc, float factor);
+
 /*
   Get the extension of the file and return it
 */
@@ -127,11 +125,9 @@ void set_scene (const char* str, Bound_scene *sc, float factor)
   //if ((fd = fopen (str, 0)) == -1)
   if ((fd = fopen (str, "r")) == NULL)
   {
-    char strerr[80];
-    strcpy (strerr,"The file ");
-    strcat (strerr,str);
-    strcat (strerr," can not be opened");
-    throw(vpException(vpSimulatorException::ioError,strerr)) ;
+    std::string error = "The file " + std::string(str) + " can not be opened";
+
+    throw(vpException(vpSimulatorException::ioError, error.c_str())) ;
   }
   open_keyword (keyword_tbl);
   open_lex ();
@@ -205,7 +201,10 @@ void set_scene_wrl (const char* str, Bound_scene *sc, float factor)
   else
   {
     sceneGraphVRML2	= SoDB::readAllVRML(&in);
-    if (sceneGraphVRML2 == NULL) { /*return -1;*/ }
+    if (sceneGraphVRML2 == NULL) {
+      /*return -1;*/
+      throw(vpException(vpException::notInitialized, "Cannot read VRML file"));
+    }
     sceneGraphVRML2->ref();
   }
   
@@ -463,7 +462,8 @@ vpWireFrameSimulator::display_scene(Matrix mat, Bound_scene &sc, const vpImage<u
   Byte b  = (Byte) *get_rfstack ();
   Matrix m;
 
-  bcopy ((char *) mat, (char *) m, sizeof (Matrix));
+  //bcopy ((char *) mat, (char *) m, sizeof (Matrix));
+  memmove((char *) m, (char *) mat, sizeof (Matrix));
   View_to_Matrix (get_vwstack (), *(get_tmstack ()));
   postmult_matrix (m, *(get_tmstack ()));
   bp   = sc.bound.ptr;
@@ -510,6 +510,15 @@ vpWireFrameSimulator::display_scene(Matrix mat, Bound_scene &sc, const vpImage<u
   variable that the user has to set.
 */
 vpWireFrameSimulator::vpWireFrameSimulator()
+  : scene(), desiredScene(), camera(), objectImage(), fMo(), fMc(), camMf(),
+    refMo(), cMo(), cdMo(), object(PLATE), desiredObject(D_STANDARD),
+    camColor(vpColor::green), camTrajColor(vpColor::green), curColor(vpColor::blue),
+    desColor(vpColor::red), sceneInitialized(false), displayCameraTrajectory(true),
+    cameraTrajectory(), poseList(), fMoList(), nbrPtLimit(1000), old_iPr(), old_iPz(),
+    old_iPt(), blockedr(false), blockedz(false), blockedt(false), blocked(false),
+    camMf2(), f2Mf(), px_int(1), py_int(1), px_ext(1), py_ext(1), displayObject(false),
+    displayDesiredObject(false), displayCamera(false), displayImageSimulator(false),
+    cameraFactor(1.), camTrajType(CT_LINE), extCamChanged(false), rotz(), thickness_(1), scene_dir()
 {
   // set scene_dir from #define VISP_SCENE_DIR if it exists
   if (vpIoTools::checkDirectory(VISP_SCENES_DIR) == true) // directory exists
@@ -527,51 +536,23 @@ vpWireFrameSimulator::vpWireFrameSimulator()
   open_display();
   open_clipping();
 
-  camColor = vpColor::green;
-  camTrajColor = vpColor::green;
-  curColor = vpColor::blue;
-  desColor = vpColor::red;
-
-  sceneInitialized = false;
-
-  displayCameraTrajectory = true;
-  cameraTrajectory.clear();
-  poseList.clear();
-  fMoList.clear();
-
-  fMo.setIdentity();
-
   old_iPr = vpImagePoint(-1,-1);
   old_iPz = vpImagePoint(-1,-1);
   old_iPt = vpImagePoint(-1,-1);
-  blockedr = false;
-  blockedz = false;
-  blockedt = false;
-  blocked = false;
-
-  nbrPtLimit = 1000;
-  
-  px_int = 1;
-  py_int = 1;
-  px_ext = 1;
-  py_ext = 1;
-  
-  displayObject = false;
-  displayDesiredObject = false;
-  displayCamera = false;
-  
-  cameraFactor = 1.0;
-  
-  camTrajType = CT_LINE;
-  
-  extCamChanged = false;
-  
+   
   rotz.buildFrom(0,0,0,0,0,vpMath::rad(180));
   
-  displayImageSimulator = false;
-  objectImage.clear();
+  scene.name = NULL;
+  scene.bound.ptr = NULL;
+  scene.bound.nbr = 0;
 
-  thickness_ = 1;
+  desiredScene.name = NULL;
+  desiredScene.bound.ptr = NULL;
+  desiredScene.bound.nbr = 0;
+
+  camera.name = NULL;
+  camera.bound.ptr = NULL;
+  camera.bound.nbr = 0;
 }
 
 
@@ -606,18 +587,24 @@ vpWireFrameSimulator::~vpWireFrameSimulator()
   It exists several default scenes you can use. Use the vpSceneObject and the vpSceneDesiredObject attributes to use them in this method. The corresponding files are stored in the "data" folder which is in the ViSP build directory.
 
   \param obj : Type of scene used to display the object at the current position.
-  \param desiredObject : Type of scene used to display the object at the desired pose (in the internal view).
+  \param desired_object : Type of scene used to display the object at the desired pose (in the internal view).
 */
 void
-vpWireFrameSimulator::initScene(const vpSceneObject &obj, const vpSceneDesiredObject &desiredObject)
+vpWireFrameSimulator::initScene(const vpSceneObject &obj, const vpSceneDesiredObject &desired_object)
 {
   char name_cam[FILENAME_MAX];
   char name[FILENAME_MAX];
 
   object = obj;
-  this->desiredObject = desiredObject;
+  this->desiredObject = desired_object;
+
+  const char *scene_dir_ = scene_dir.c_str();
+  if (strlen(scene_dir_) >= FILENAME_MAX) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the camera name"));
+  }
 
-  strcpy(name_cam, scene_dir.c_str());
+  strcpy(name_cam, scene_dir_);
   if (desiredObject != D_TOOL) 
   {
     strcat(name_cam,"/camera.bnd");
@@ -629,7 +616,7 @@ vpWireFrameSimulator::initScene(const vpSceneObject &obj, const vpSceneDesiredOb
     set_scene(name_cam,&(this->camera),1.0);
   }
 
-  strcpy(name, scene_dir.c_str());
+  strcpy(name, scene_dir_);
   switch (obj)
   {
     case THREE_PTS : {strcat(name,"/3pts.bnd"); break; }
@@ -652,19 +639,25 @@ vpWireFrameSimulator::initScene(const vpSceneObject &obj, const vpSceneDesiredOb
   }
   set_scene(name,&(this->scene),1.0);
 
+  scene_dir_ = scene_dir.c_str();
+  if (strlen(scene_dir_) >= FILENAME_MAX) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the desired object name"));
+  }
+
   switch (desiredObject)
   {
     case D_STANDARD : { break; }
     case D_CIRCLE : { 
-      strcpy(name, scene_dir.c_str());
+      strcpy(name, scene_dir_);
       strcat(name, "/circle_sq2.bnd");
       break; }
     case D_TOOL : { 
-      strcpy(name, scene_dir.c_str());
+      strcpy(name, scene_dir_);
       strcat(name, "/tool.bnd");
       break; }
   }
-  set_scene(name,&(this->desiredScene),1.0);
+  set_scene(name, &(this->desiredScene), 1.0);
 
   if (obj == PIPE) load_rfstack(IS_INSIDE);
   else add_rfstack(IS_BACK);
@@ -694,13 +687,13 @@ vpWireFrameSimulator::initScene(const vpSceneObject &obj, const vpSceneDesiredOb
   It is also possible to add a list of vpImageSimulator instances. They will be automatically projected into the image. The position of the four corners have to be given in the object frame.
 
   \param obj : Type of scene used to display the object at the current position.
-  \param desiredObject : Type of scene used to display the object at the desired pose (in the internal view).
+  \param desired_object : Type of scene used to display the object at the desired pose (in the internal view).
   \param imObj : A list of vpImageSimulator instances.
 */
 void
-vpWireFrameSimulator::initScene(vpSceneObject obj, vpSceneDesiredObject desiredObject, vpList<vpImageSimulator> &imObj)
+vpWireFrameSimulator::initScene(vpSceneObject obj, vpSceneDesiredObject desired_object, vpList<vpImageSimulator> &imObj)
 {
-  initScene(obj, desiredObject);
+  initScene(obj, desired_object);
   objectImage.clear();
   for(imObj.front(); !imObj.outside(); imObj.next()){
     objectImage.push_back(imObj.value());
@@ -718,13 +711,13 @@ vpWireFrameSimulator::initScene(vpSceneObject obj, vpSceneDesiredObject desiredO
   It is also possible to add a list of vpImageSimulator instances. They will be automatically projected into the image. The position of the four corners have to be given in the object frame.
 
   \param obj : Type of scene used to display the object at the current position.
-  \param desiredObject : Type of scene used to display the object at the desired pose (in the internal view).
+  \param desired_object : Type of scene used to display the object at the desired pose (in the internal view).
   \param imObj : A list of vpImageSimulator instances.
 */
 void
-vpWireFrameSimulator::initScene(const vpSceneObject &obj, const vpSceneDesiredObject &desiredObject, const std::list<vpImageSimulator> &imObj)
+vpWireFrameSimulator::initScene(const vpSceneObject &obj, const vpSceneDesiredObject &desired_object, const std::list<vpImageSimulator> &imObj)
 {
-  initScene(obj, desiredObject);
+  initScene(obj, desired_object);
   objectImage = imObj;
   displayImageSimulator = true;
 }
@@ -737,10 +730,10 @@ vpWireFrameSimulator::initScene(const vpSceneObject &obj, const vpSceneDesiredOb
   Here you can use the scene you want. You have to set the path to a .bnd or a .wrl file which is a 3D model file.
 
   \param obj : Path to the scene file you want to use.
-  \param desiredObject : Path to the scene file you want to use.
+  \param desired_object : Path to the scene file you want to use.
 */
 void
-vpWireFrameSimulator::initScene(const char* obj, const char* desiredObject)
+vpWireFrameSimulator::initScene(const char* obj, const char* desired_object)
 {
   char name_cam[FILENAME_MAX];
   char name[FILENAME_MAX];
@@ -748,10 +741,21 @@ vpWireFrameSimulator::initScene(const char* obj, const char* desiredObject)
   object = THREE_PTS;
   this->desiredObject = D_STANDARD;
   
-  strcpy(name_cam, scene_dir.c_str());
+  const char *scene_dir_ = scene_dir.c_str();
+  if (strlen(scene_dir_) >= FILENAME_MAX) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the camera name"));
+  }
+
+  strcpy(name_cam, scene_dir_);
   strcat(name_cam,"/camera.bnd");
   set_scene(name_cam,&camera,cameraFactor);
 
+  if (strlen(obj) >= FILENAME_MAX) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the name"));
+  }
+
   strcpy(name,obj);
   Model_3D model;
   model = getExtension(obj);
@@ -764,8 +768,13 @@ vpWireFrameSimulator::initScene(const char* obj, const char* desiredObject)
     vpERROR_TRACE("Unknown file extension for the 3D model");
   }
 
-  strcpy(name,desiredObject);  
-  model = getExtension(desiredObject);
+  if (strlen(desired_object) >= FILENAME_MAX) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the camera name"));
+  }
+
+  strcpy(name,desired_object);
+  model = getExtension(desired_object);
   if (model == BND_MODEL)
     set_scene(name,&(this->desiredScene),1.0);
   else if (model == WRL_MODEL)
@@ -800,13 +809,13 @@ vpWireFrameSimulator::initScene(const char* obj, const char* desiredObject)
   It is also possible to add a list of vpImageSimulator instances. They will be automatically projected into the image. The position of the four corners have to be given in the object frame.
 
   \param obj : Path to the scene file you want to use.
-  \param desiredObject : Path to the scene file you want to use.
+  \param desired_object : Path to the scene file you want to use.
   \param imObj : A list of vpImageSimulator instances.
 */
 void
-vpWireFrameSimulator::initScene(const char* obj, const char* desiredObject, vpList<vpImageSimulator> &imObj)
+vpWireFrameSimulator::initScene(const char* obj, const char* desired_object, vpList<vpImageSimulator> &imObj)
 {
-  initScene(obj, desiredObject);
+  initScene(obj, desired_object);
   objectImage.clear();
   for(imObj.front(); !imObj.outside(); imObj.next()){
     objectImage.push_back(imObj.value());
@@ -824,13 +833,13 @@ vpWireFrameSimulator::initScene(const char* obj, const char* desiredObject, vpLi
   It is also possible to add a list of vpImageSimulator instances. They will be automatically projected into the image. The position of the four corners have to be given in the object frame.
 
   \param obj : Path to the scene file you want to use.
-  \param desiredObject : Path to the scene file you want to use.
+  \param desired_object : Path to the scene file you want to use.
   \param imObj : A list of vpImageSimulator instances.
 */
 void
-vpWireFrameSimulator::initScene(const char* obj, const char* desiredObject, const std::list<vpImageSimulator> &imObj)
+vpWireFrameSimulator::initScene(const char* obj, const char* desired_object, const std::list<vpImageSimulator> &imObj)
 {
-  initScene(obj, desiredObject);
+  initScene(obj, desired_object);
   objectImage = imObj;
   displayImageSimulator = true;
 }
@@ -851,11 +860,17 @@ vpWireFrameSimulator::initScene(const vpSceneObject &obj)
 
   object = obj;
 
-  strcpy(name_cam, scene_dir.c_str());
+  const char *scene_dir_ = scene_dir.c_str();
+  if (strlen(scene_dir_) >= FILENAME_MAX) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the camera name"));
+  }
+
+  strcpy(name_cam, scene_dir_);
   strcat(name_cam,"/camera.bnd");
   set_scene(name_cam,&camera,cameraFactor);
 
-  strcpy(name, scene_dir.c_str());
+  strcpy(name, scene_dir_);
   switch (obj)
   {
     case THREE_PTS : {strcat(name,"/3pts.bnd"); break; }
@@ -955,10 +970,21 @@ vpWireFrameSimulator::initScene(const char* obj)
 
   object = THREE_PTS;
   
-  strcpy(name_cam, scene_dir.c_str());
+  const char *scene_dir_ = scene_dir.c_str();
+  if (strlen(scene_dir_) >= FILENAME_MAX) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the camera name"));
+  }
+
+  strcpy(name_cam, scene_dir_);
   strcat(name_cam,"/camera.bnd");
   set_scene(name_cam,&camera,cameraFactor);
 
+  if (strlen(obj) >= FILENAME_MAX) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the name"));
+  }
+
   strcpy(name,obj);
   Model_3D model;
   model = getExtension(obj);
@@ -1252,16 +1278,16 @@ vpWireFrameSimulator::getExternalImage(vpImage<vpRGBa> &I)
   Get an external view. The point of view is set thanks to the pose between the camera camMf and the fixed world frame.
 
   \param I : The image where the external view is displayed.
-  \param camMf : The pose between the point of view and the fixed world frame.
+  \param cam_Mf : The pose between the point of view and the fixed world frame.
   
   \warning : The objects are displayed thanks to overlays. The image I is not modified.
 */
 void
-vpWireFrameSimulator::getExternalImage(vpImage<vpRGBa> &I, const vpHomogeneousMatrix &camMf)
+vpWireFrameSimulator::getExternalImage(vpImage<vpRGBa> &I, const vpHomogeneousMatrix &cam_Mf)
 {
   float w44o[4][4],w44cext[4][4],w44c[4][4],x,y,z;
   
-  vpHomogeneousMatrix camMft = rotz * camMf;
+  vpHomogeneousMatrix camMft = rotz * cam_Mf;
 
   double u;
   double v;
@@ -1298,7 +1324,7 @@ vpWireFrameSimulator::getExternalImage(vpImage<vpRGBa> &I, const vpHomogeneousMa
 
     for(std::list<vpImageSimulator>::iterator it=objectImage.begin(); it!=objectImage.end(); ++it){
       vpImageSimulator* imSim = &(*it);
-      imSim->setCameraPosition(rotz*camMf*fMo);
+      imSim->setCameraPosition(rotz*cam_Mf*fMo);
       imSim->getImage(I,getInternalCameraParameters(I));
     }
 
@@ -1535,16 +1561,16 @@ vpWireFrameSimulator::getExternalImage(vpImage<unsigned char> &I)
   Get an external view. The point of view is set thanks to the pose between the camera camMf and the fixed world frame.
 
   \param I : The image where the external view is displayed.
-  \param camMf : The pose between the point of view and the fixed world frame.
+  \param cam_Mf : The pose between the point of view and the fixed world frame.
   
   \warning : The objects are displayed thanks to overlays. The image I is not modified.
 */
 void
-vpWireFrameSimulator::getExternalImage(vpImage<unsigned char> &I, const vpHomogeneousMatrix &camMf)
+vpWireFrameSimulator::getExternalImage(vpImage<unsigned char> &I, const vpHomogeneousMatrix &cam_Mf)
 {
   float w44o[4][4],w44cext[4][4],w44c[4][4],x,y,z;
 
-  vpHomogeneousMatrix camMft = rotz * camMf;
+  vpHomogeneousMatrix camMft = rotz * cam_Mf;
   
   double u;
   double v;
@@ -1580,7 +1606,7 @@ vpWireFrameSimulator::getExternalImage(vpImage<unsigned char> &I, const vpHomoge
     I = 255;
     for(std::list<vpImageSimulator>::iterator it=objectImage.begin(); it!=objectImage.end(); ++it){
       vpImageSimulator* imSim = &(*it);
-      imSim->setCameraPosition(rotz*camMf*fMo);
+      imSim->setCameraPosition(rotz*cam_Mf*fMo);
       imSim->getImage(I,getInternalCameraParameters(I));
     }
     if (I.display != NULL)
@@ -1954,12 +1980,13 @@ vpWireFrameSimulator::navigation(const vpImage<unsigned char> &I, bool &changed)
   Project the center of the internal camera into the external camera view.
 */
 vpImagePoint
-vpWireFrameSimulator::projectCameraTrajectory (const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &cMo, const vpHomogeneousMatrix &fMo)
+vpWireFrameSimulator::projectCameraTrajectory (const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &cMo_,
+                                               const vpHomogeneousMatrix &fMo_)
 {
   vpPoint point;
   point.setWorldCoordinates(0,0,0);
 
-  point.track(rotz*(camMf*fMo*cMo.inverse())) ;
+  point.track(rotz*(camMf*fMo_*cMo_.inverse())) ;
 
   vpImagePoint iP;
 
@@ -1972,12 +1999,14 @@ vpWireFrameSimulator::projectCameraTrajectory (const vpImage<vpRGBa> &I, const v
   Project the center of the internal camera into the external camera view.
 */
 vpImagePoint
-vpWireFrameSimulator::projectCameraTrajectory (const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo, const vpHomogeneousMatrix &fMo)
+vpWireFrameSimulator::projectCameraTrajectory (const vpImage<unsigned char> &I,
+                                               const vpHomogeneousMatrix &cMo_,
+                                               const vpHomogeneousMatrix &fMo_)
 {
   vpPoint point;
   point.setWorldCoordinates(0,0,0);
 
-  point.track(rotz*(camMf*fMo*cMo.inverse())) ;
+  point.track(rotz*(camMf*fMo_*cMo_.inverse())) ;
 
   vpImagePoint iP;
 
@@ -1990,12 +2019,13 @@ vpWireFrameSimulator::projectCameraTrajectory (const vpImage<unsigned char> &I,
   Project the center of the internal camera into the external camera view.
 */
 vpImagePoint
-vpWireFrameSimulator::projectCameraTrajectory (const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &cMo, const vpHomogeneousMatrix &fMo, const vpHomogeneousMatrix &cMf)
+vpWireFrameSimulator::projectCameraTrajectory (const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &cMo_,
+                                               const vpHomogeneousMatrix &fMo_, const vpHomogeneousMatrix &cMf)
 {
   vpPoint point;
   point.setWorldCoordinates(0,0,0);
 
-  point.track(rotz*(cMf*fMo*cMo.inverse())) ;
+  point.track(rotz*(cMf*fMo_*cMo_.inverse())) ;
 
   vpImagePoint iP;
 
@@ -2008,12 +2038,13 @@ vpWireFrameSimulator::projectCameraTrajectory (const vpImage<vpRGBa> &I, const v
   Project the center of the internal camera into the external camera view.
 */
 vpImagePoint
-vpWireFrameSimulator::projectCameraTrajectory (const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo, const vpHomogeneousMatrix &fMo, const vpHomogeneousMatrix &cMf)
+vpWireFrameSimulator::projectCameraTrajectory (const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo_,
+                                               const vpHomogeneousMatrix &fMo_, const vpHomogeneousMatrix &cMf)
 {
   vpPoint point;
   point.setWorldCoordinates(0,0,0);
 
-  point.track(rotz*(cMf*fMo*cMo.inverse())) ;
+  point.track(rotz*(cMf*fMo_*cMo_.inverse())) ;
 
   vpImagePoint iP;
 
diff --git a/src/simulator/wireframe-simulator/vpWireFrameSimulator.h b/src/simulator/wireframe-simulator/vpWireFrameSimulator.h
index 6a8de158..8f0b06bd 100644
--- a/src/simulator/wireframe-simulator/vpWireFrameSimulator.h
+++ b/src/simulator/wireframe-simulator/vpWireFrameSimulator.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpWireFrameSimulator.h 4334 2013-07-22 19:13:05Z fspindle $
+ * $Id: vpWireFrameSimulator.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -447,16 +447,16 @@ public:
   /*!
       Set the position of the camera relative to the object.
       
-      \param cMo : The pose of the camera.
+      \param cMo_ : The pose of the camera.
     */
-  void setCameraPositionRelObj(const vpHomogeneousMatrix &cMo) {this->cMo = rotz * cMo; fMc = fMo*this->cMo.inverse();}
+  void setCameraPositionRelObj(const vpHomogeneousMatrix &cMo_) {this->cMo = rotz * cMo_; fMc = fMo*this->cMo.inverse();}
 
   /*!
       Set the position of the the world reference frame relative to the camera.
       
-      \param fMc : The pose of the camera.
+      \param fMc_ : The pose of the camera.
     */
-  void setCameraPositionRelWorld(const vpHomogeneousMatrix &fMc) {this->fMc = fMc*rotz; cMo = this->fMc.inverse()*fMo;}
+  void setCameraPositionRelWorld(const vpHomogeneousMatrix &fMc_) {this->fMc = fMc_*rotz; cMo = this->fMc.inverse()*fMo;}
 
   /*!
       Set the parameter which enables to choose the size of the main camera in the external camera views. By default this parameter is set to 1.
@@ -475,9 +475,9 @@ public:
   /*!
       Set the way to display the history of the main camera trajectory in the main external view. The choice is given between displaying lines and points.
 
-      \param camTrajType : The chosen way to display the camera trajectory.
+      \param camTraj_type : The chosen way to display the camera trajectory.
     */
-  inline void setCameraTrajectoryDisplayType (const vpCameraTrajectoryDisplayType &camTrajType) {this->camTrajType = camTrajType;}
+  inline void setCameraTrajectoryDisplayType (const vpCameraTrajectoryDisplayType &camTraj_type) {this->camTrajType = camTraj_type;}
 
   /*!
       Set the color used to display the object at the current position.
@@ -488,9 +488,9 @@ public:
   /*!
       Set the desired position of the camera relative to the object.
       
-      \param cdMo : The desired pose of the camera.
+      \param cdMo_ : The desired pose of the camera.
     */
-  void setDesiredCameraPosition(const vpHomogeneousMatrix &cdMo) {this->cdMo = rotz * cdMo;}
+  void setDesiredCameraPosition(const vpHomogeneousMatrix &cdMo_) {this->cdMo = rotz * cdMo_;}
   /*!
       Set the color used to display the object at the desired position.
 
@@ -502,9 +502,9 @@ public:
 
       By default the trajectory is displayed.
 
-      \param displayCameraTrajectory : Set to true to display the camera trajectory.
+      \param do_display : Set to true to display the camera trajectory.
     */
-  void setDisplayCameraTrajectory (const bool &displayCameraTrajectory) {this->displayCameraTrajectory = displayCameraTrajectory;}
+  void setDisplayCameraTrajectory (const bool &do_display) {this->displayCameraTrajectory = do_display;}
 
   /*!
       Set the internal camera parameters.
@@ -518,11 +518,11 @@ public:
   /*!
       Set the external camera point of view.
       
-      \param camMf : The pose of the external camera relative to the world reference frame.
+      \param cam_Mf : The pose of the external camera relative to the world reference frame.
     */
-  void setExternalCameraPosition(const vpHomogeneousMatrix &camMf)
+  void setExternalCameraPosition(const vpHomogeneousMatrix &cam_Mf)
   {
-    this->camMf = rotz * camMf;
+    this->camMf = rotz * cam_Mf;
     vpTranslationVector T;
     this->camMf.extract (T);
     this->camMf2.buildFrom(0,0,T[2],0,0,0);
@@ -558,9 +558,9 @@ public:
   /*!
       Set the pose between the object and the fixed world frame.
       
-      \param fMo : The pose between the object and the fixed world frame.
+      \param fMo_ : The pose between the object and the fixed world frame.
     */
-  void set_fMo(const vpHomogeneousMatrix &fMo) {this->fMo = fMo;/*this->cMo = fMc.inverse()*fMo;*/}
+  void set_fMo(const vpHomogeneousMatrix &fMo_) {this->fMo = fMo_;/*this->cMo = fMc.inverse()*fMo;*/}
 
 protected:
   void display_scene(Matrix mat, Bound_scene &sc, const vpImage<vpRGBa> &I, const vpColor &color);
diff --git a/src/tools/geometry/vpPlane.cpp b/src/tools/geometry/vpPlane.cpp
index e44ffb68..84f6a296 100644
--- a/src/tools/geometry/vpPlane.cpp
+++ b/src/tools/geometry/vpPlane.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPlane.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPlane.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -68,13 +68,7 @@ vpPlane::operator =(const vpPlane& p)
 /*!
   Basic constructor that set the plane parameters A, B, C, D to zero.
 */
-vpPlane::vpPlane()
-{
-  setA(0) ;
-  setB(0) ;
-  setC(0) ;
-  setD(0) ;
-}
+vpPlane::vpPlane() : A(0), B(0), C(0), D(0) {}
 
 /*!
   Plane constructor from A, B, C, D parameters.
@@ -83,21 +77,17 @@ vpPlane::vpPlane()
   (x,y,z) are the coordinates of a point and \f$[A,B,C]^T\f$ is the normal
   vector of the plane.
 
-  \param A, B, C, D : Parameters of the plane.
+  \param a, b, c, d : Parameters of the plane.
 
 */
-vpPlane::vpPlane(const double A,const double B,const double C, const double D)
-{
-  setA(A) ;
-  setB(B) ;
-  setC(C) ;
-  setD(D) ;
-}
+vpPlane::vpPlane(const double a,const double b,const double c, const double d)
+  : A(a), B(b), C(c), D(d) {}
 
 /*!
   Copy constructor.
 */
 vpPlane::vpPlane(const vpPlane& P)
+  : A(0), B(0), C(0), D(0)
 {
   setA(P.getA()) ;
   setB(P.getB()) ;
@@ -120,6 +110,7 @@ vpPlane::vpPlane(const vpPlane& P)
 
 */
 vpPlane::vpPlane(const vpPoint& P, const vpColVector &n)
+  : A(0), B(0), C(0), D(0)
 {
   //Equation of the plane is given by:
   A = n[0];
@@ -211,6 +202,7 @@ vpPlane::init(const vpPoint &P, const vpPoint &Q, const vpPoint &R)
   \sa init(const vpPoint &, const vpPoint &, const vpPoint &)
 */
 vpPlane::vpPlane(const vpPoint &P, const vpPoint &Q, const vpPoint &R)
+  : A(0), B(0), C(0), D(0)
 {
   init(P,Q,R) ;
 }
@@ -359,3 +351,14 @@ void vpPlane::changeFrame(const vpHomogeneousMatrix &cMo)
   D = Do - (cMo[0][3]*A + cMo[1][3]*B  + cMo[2][3]*C);
 }
 
+/*!
+
+  Print the plane parameters as a stream like "(A,B,C,D) " where
+  A,B,C and D correspond to the parameters of the plane.
+
+*/
+VISP_EXPORT std::ostream& operator<< (std::ostream& os, vpPlane& p)
+{
+  return (os  << "("<<p.getA() << ","<<p.getB()
+    << ","<<p.getC()<< ","<<p.getD() <<") ") ;
+} ;
diff --git a/src/tools/geometry/vpPlane.h b/src/tools/geometry/vpPlane.h
index e41eebe9..3a6907fb 100644
--- a/src/tools/geometry/vpPlane.h
+++ b/src/tools/geometry/vpPlane.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPlane.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPlane.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -54,7 +54,7 @@
   \brief This class defines the container for a plane geometrical structure.
 
   A plane is given by the equation \f$Ax + By + Cz + D = 0\f$ where
-  (x,y,z) are the coordinates of a point and \f$[A,B,C]^T\f$ is normal
+  (x,y,z) are the coordinates of a point and where \f$[A,B,C]^T\f$ is a normal
   vector of the plane.
 
 */
@@ -75,7 +75,6 @@ class VISP_EXPORT vpPlane
 #endif
   double A,B,C,D ;
 
-
 public:
   vpPlane() ;
   vpPlane(const vpPlane& P) ;
@@ -88,21 +87,21 @@ public:
 
   // SET the parameter
   /*! Set plane parameter A. */
-  inline void setA(const double A) {   this->A = A ; }
+  inline void setA(const double a) {   this->A = a ; }
   /*! Set plane parameter B. */
-  inline void setB(const double B) {   this->B = B ; }
+  inline void setB(const double b) {   this->B = b ; }
   /*! Set plane parameter C. */
-  inline void setC(const double C) {   this->C = C ; }
+  inline void setC(const double c) {   this->C = c ; }
   /*! Set plane parameter D. */
-  inline void setD(const double D) {   this->D = D ; }
+  inline void setD(const double d) {   this->D = d ; }
   /*! Set plane parameters A, B, C, D. */
-  inline void setABCD(const double A, const double B, 
-		      const double C, const double D) 
+  inline void setABCD(const double a, const double b,
+                      const double c, const double d)
   {
-    this->A = A;
-    this->B = B;
-    this->C = C;
-    this->D = D; 
+    this->A = a;
+    this->B = b;
+    this->C = c;
+    this->D = d;
   }
 
   vpPlane& operator =(const vpPlane& f) ;
@@ -155,19 +154,7 @@ public:
   vpColVector getNormal() const;
   void getNormal(vpColVector &n) const;
 
-
-  /*!
-
-    Print the plane parameters as a stream like "(A,B,C,D) " where
-    A,B,C and D correspond to the parameters of the plane.
-
-  */
-  friend VISP_EXPORT std::ostream& operator<< (std::ostream& os, vpPlane& p)
-  {
-    return (os  << "("<<p.getA() << ","<<p.getB()
-	    << ","<<p.getC()<< ","<<p.getD() <<") ") ;
-  } ;
-
+  friend VISP_EXPORT std::ostream& operator<< (std::ostream& os, vpPlane& p);
 
   // Operation with  Plane
   void projectionPointOnPlan(const vpPoint& P, vpPoint& Pproj) const ;
diff --git a/src/tools/geometry/vpPolygon.cpp b/src/tools/geometry/vpPolygon.cpp
index 71bc4615..4cef509f 100644
--- a/src/tools/geometry/vpPolygon.cpp
+++ b/src/tools/geometry/vpPolygon.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPolygon.cpp 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpPolygon.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -57,8 +57,8 @@
   \f$ (0,0) \f$, \f$ (1,0) \f$ and \f$ (0,1) \f$.
 */
 vpPolygon::vpPolygon()
+  : _corners(), _center(), _area(0.), _goodPoly(true), _bbox()
 {
-  _goodPoly = true;
   std::vector<vpImagePoint> corners;
   corners.push_back(vpImagePoint(0,0));
   corners.push_back(vpImagePoint(1,0));
@@ -74,6 +74,7 @@ vpPolygon::vpPolygon()
   \param corners : The Points defining the corners.
 */
 vpPolygon::vpPolygon(const std::vector<vpImagePoint>& corners)
+  : _corners(), _center(), _area(0.), _goodPoly(true), _bbox()
 {
   if(corners.size() < 3){
     _goodPoly = false;
@@ -87,11 +88,13 @@ vpPolygon::vpPolygon(const std::vector<vpImagePoint>& corners)
   \param poly : The polygon used for the initialisation.
 */
 vpPolygon::vpPolygon(const vpPolygon &poly)
+  : _corners(), _center(), _area(0.), _goodPoly(true), _bbox()
 {
   _corners = poly._corners;
   _center = poly._center;
   _area = poly._area;
   _goodPoly = poly._goodPoly;
+  _bbox = poly._bbox;
 }
 
 /*!
@@ -165,8 +168,8 @@ vpPolygon::initClick(const vpImage<unsigned char>& I)
   std::vector<vpImagePoint> cornersClick;
 
   while(button == vpMouseButton::button1){
-    vpDisplay::getClick(I, ip, button, true);
-    if(button == vpMouseButton::button1){
+    bool ret = vpDisplay::getClick(I, ip, button, true);
+    if(ret && button == vpMouseButton::button1){
       vpDisplay::displayCross(I, ip, 5, vpColor::red);
       cornersClick.push_back(ip);
       vpDisplay::flush(I);
diff --git a/src/tools/geometry/vpPolygon.h b/src/tools/geometry/vpPolygon.h
index ffa4dc49..13cf6447 100644
--- a/src/tools/geometry/vpPolygon.h
+++ b/src/tools/geometry/vpPolygon.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPolygon.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPolygon.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tools/geometry/vpRect.cpp b/src/tools/geometry/vpRect.cpp
index 1fce4050..1b51f46a 100755
--- a/src/tools/geometry/vpRect.cpp
+++ b/src/tools/geometry/vpRect.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRect.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRect.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -56,13 +56,7 @@
 
 */
 
-vpRect::vpRect()
-{
-  this->left = 0;
-  this->top = 0;
-  this->width = 0;
-  this->height = 0;
-};
+vpRect::vpRect() : left(0), top(0), width(0), height(0) {};
 
 /*!
  
@@ -70,12 +64,9 @@ vpRect::vpRect()
   and \e height.
 
 */
-vpRect::vpRect(double left, double top, double width, double height)
+vpRect::vpRect(double l, double t, double w, double h)
+  : left(l), top(t), width(w), height(h)
 {
-  this->left = left;
-  this->top = top;
-  this->width = width;
-  this->height = height;
 };
 
 /*!
@@ -84,12 +75,9 @@ vpRect::vpRect(double left, double top, double width, double height)
   and \e width and \e height the rectangle size.
 
 */
-vpRect::vpRect(const vpImagePoint &topLeft, double width, double height)
+vpRect::vpRect(const vpImagePoint &topLeft, double w, double h)
+  : left(topLeft.get_u()), top(topLeft.get_v()), width(w), height(h)
 {
-  this->left = topLeft.get_u();
-  this->top = topLeft.get_v();
-  this->width = width;
-  this->height = height;
 };
 
 /*!
@@ -99,6 +87,7 @@ vpRect::vpRect(const vpImagePoint &topLeft, double width, double height)
 
 */
 vpRect::vpRect(const vpImagePoint &topLeft, const vpImagePoint &bottomRight)
+  : left(topLeft.get_u()), top(topLeft.get_v()), width(0), height(0)
 {
   this->left = topLeft.get_u();
   this->top = topLeft.get_v();
@@ -113,11 +102,9 @@ vpRect::vpRect(const vpImagePoint &topLeft, const vpImagePoint &bottomRight)
 
 */
 vpRect::vpRect(const vpRect& r)
+  : left(0), top(0), width(0), height(0)
 {
-  this->left   = r.left;
-  this->top    = r.top;
-  this->width  = r.width;
-  this->height = r.height;
+  *this = r;
 };
 
 /*!
@@ -132,3 +119,66 @@ vpRect &vpRect::operator=(const vpRect& r)
   this->height = r.height;
   return *this;
 };
+
+/*!
+
+  Create a rectangle as the bounding box of a vector of image points.
+  \param ip : Vector of image points. At least 1 points is mandatory,
+  otherwise an exception is thrown.
+*/
+vpRect::vpRect(const std::vector<vpImagePoint> &ip)
+  : left(0), top(0), width(0), height(0)
+{
+  set(ip);
+}
+
+/*!
+
+  Set the rectangle as the bounding box of a vector of image points.
+  \param ip : Vector of image points. At least 1 points is mandatory,
+  otherwise an exception is thrown.
+*/
+void vpRect::set(const std::vector<vpImagePoint> &ip)
+{
+  if (ip.size() < 1)
+    throw (vpException(vpException::dimensionError,
+                       "At least 1 point is requested to build a rectangle"));
+  double minu, maxu;
+  double minv, maxv;
+  minu = maxu = ip[0].get_u();
+  minv = maxv = ip[0].get_v();
+
+  for(size_t i=1; i<ip.size(); i++) {
+    double u  = ip[i].get_u();
+    double v  = ip[i].get_v();
+    if ( u < minu ) minu = u;
+    else if (u > maxu) maxu = u;
+    if ( v < minv ) minv = v;
+    else if (v > maxv) maxv = v;
+  }
+
+  setLeft  (minu);
+  setTop   (minv);
+  setRight (maxu);
+  setBottom(maxv);
+};
+
+/*!
+
+  Check if an image point belongs to a rectangle.
+
+  \param ip : the image point.
+  \param rect : the rectangle.
+
+  \return Returns true if the point belongs to the rectangle.
+
+*/
+VISP_EXPORT bool inRectangle( const vpImagePoint &ip, const vpRect &rect ) {
+  return ( ip.get_i() <= rect.getBottom() && ip.get_i() >= rect.getTop() && ip.get_j() <= rect.getRight() && ip.get_j() >= rect.getLeft());
+}
+
+VISP_EXPORT std::ostream& operator<< (std::ostream &os, const vpRect& r)
+ {
+  os << r.getLeft() << ", " << r.getTop() << ", " << r.getWidth() << ", " << r.getHeight();
+  return os;
+}
diff --git a/src/tools/geometry/vpRect.h b/src/tools/geometry/vpRect.h
index dc88eb1e..542986fb 100755
--- a/src/tools/geometry/vpRect.h
+++ b/src/tools/geometry/vpRect.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpRect.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpRect.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -77,8 +77,11 @@
 
 */
 
+#include <vector>
+#include <visp/vpException.h>
 #include <visp/vpImagePoint.h>
 
+
 class VISP_EXPORT vpRect
 {
 public:
@@ -88,6 +91,8 @@ public:
   vpRect(const vpImagePoint &topLeft, double width, double height);
   vpRect(const vpImagePoint &topLeft, const vpImagePoint &bottomRight);
   vpRect(const vpRect& r);
+  vpRect(const std::vector<vpImagePoint> &ip);
+
   
   vpRect &operator=(const vpRect& r);
 
@@ -187,6 +192,10 @@ public:
   */
   inline double getWidth() const { return this->width;  };
 
+  friend VISP_EXPORT bool inRectangle( const vpImagePoint &ip, const vpRect &rect );
+  friend VISP_EXPORT std::ostream& operator<< (std::ostream &os, const vpRect& r);
+  void set(const std::vector<vpImagePoint> &ip);
+
   /*!
 
     Sets the bottom edge position of the rectangle to pos. May change
@@ -230,12 +239,15 @@ public:
     Sets the coordinates of the rectangle's top left corner to
     (left, top), and its size to (width, height).
 
+    \param l,t : (left, top) corner position.
+    \param w,h : (width, height) rectangle size.
+
   */
-  inline void setRect(double left, double top, double width, double height) {
-     this->left   = left; 
-     this->top    = top; 
-     this->width  = width;
-     this->height = height;
+  inline void setRect(double l, double t, double w, double h) {
+     this->left   = l;
+     this->top    = t;
+     this->width  = w;
+     this->height = h;
   };
   /*!
 
@@ -297,20 +309,4 @@ private:
   double height; // Rectangle height
 };
 
-
-/*!
-
-  Check if an image point belongs to a rectangle.
-  
-  \param ip : the image point.
-  \param rect : the rectangle.
-  
-  \return Returns true if the point belongs to the rectangle.
-
-*/
-VISP_EXPORT inline bool inRectangle( const vpImagePoint &ip, const vpRect &rect ) {
-  return ( ip.get_i() <= rect.getBottom() && ip.get_i() >= rect.getTop() && ip.get_j() <= rect.getRight() && ip.get_j() >= rect.getLeft());
-}
-
-
 #endif
diff --git a/src/tools/geometry/vpTriangle.cpp b/src/tools/geometry/vpTriangle.cpp
index 848eb59a..89103714 100644
--- a/src/tools/geometry/vpTriangle.cpp
+++ b/src/tools/geometry/vpTriangle.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpTriangle.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpTriangle.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -49,8 +49,9 @@
   By default, the three 2D points coordinates which define the triangle are \f$ (0,0) \f$, \f$ (1,0) \f$ and \f$ (0,1) \f$.
 */
 vpTriangle::vpTriangle()
+  : goodTriange(true), S1(), uvinv00(0), uvinv01(0), uvinv10(0), uvinv11(0),
+    ptempo0(0), ptempo1(0), area(0), apex1(), apex2(), apex3()
 {
-  goodTriange = true;
   init (vpImagePoint(0,0),vpImagePoint(1,0),vpImagePoint(0,1));
 }
 
@@ -62,9 +63,9 @@ vpTriangle::vpTriangle()
   \param iP3 : The first apex of the triangle.
 */
 vpTriangle::vpTriangle(const vpImagePoint &iP1, const vpImagePoint &iP2, const vpImagePoint &iP3)
+  : goodTriange(true), S1(), uvinv00(0), uvinv01(0), uvinv10(0), uvinv11(0),
+    ptempo0(0), ptempo1(0), area(0), apex1(), apex2(), apex3()
 {
-  goodTriange = true;
-  
   init(iP1,iP2,iP3);
 }
 
@@ -74,16 +75,10 @@ vpTriangle::vpTriangle(const vpImagePoint &iP1, const vpImagePoint &iP2, const v
   \param tri : The triangle used for the initialisation.
 */
 vpTriangle::vpTriangle(const vpTriangle &tri)
+  : goodTriange(true), S1(), uvinv00(0), uvinv01(0), uvinv10(0), uvinv11(0),
+    ptempo0(0), ptempo1(0), area(0), apex1(), apex2(), apex3()
 {
-  goodTriange = tri.goodTriange;
-  S1 = tri.S1;
-  uvinv00 = tri.uvinv00;
-  uvinv01 = tri.uvinv01;
-  uvinv10 = tri.uvinv10;
-  uvinv11 = tri.uvinv11;
-  ptempo0 = tri.ptempo0;
-  ptempo1 = tri.ptempo1;
-  area = tri.area;
+  *this = tri;
 }
 
 /*!
@@ -128,6 +123,7 @@ vpTriangle::buildFrom(const vpImagePoint &iP1, const vpImagePoint &iP2, const vp
 void
 vpTriangle::init(const vpImagePoint &iP1, const vpImagePoint &iP2, const vpImagePoint &iP3)
 {
+  ptempo0 = ptempo1 = 0.;
   apex1 = iP1;
   apex2 = iP2;
   apex3 = iP3;
diff --git a/src/tools/geometry/vpTriangle.h b/src/tools/geometry/vpTriangle.h
index e7cd0a0d..98f1aa9d 100644
--- a/src/tools/geometry/vpTriangle.h
+++ b/src/tools/geometry/vpTriangle.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpTriangle.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpTriangle.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tools/histogram/vpHistogram.cpp b/src/tools/histogram/vpHistogram.cpp
index 544c779e..b45b37ac 100644
--- a/src/tools/histogram/vpHistogram.cpp
+++ b/src/tools/histogram/vpHistogram.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHistogram.cpp 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpHistogram.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -51,6 +51,8 @@
 #include <visp/vpHistogram.h>
 #include <stdlib.h>
 
+bool compare_vpHistogramPeak (vpHistogramPeak first, vpHistogramPeak second);
+
 // comparison,
 bool compare_vpHistogramPeak (vpHistogramPeak first, vpHistogramPeak second)
 {
@@ -63,20 +65,16 @@ bool compare_vpHistogramPeak (vpHistogramPeak first, vpHistogramPeak second)
 /*!
   Defaut constructor for a gray level histogram.
 */
-vpHistogram::vpHistogram()
+vpHistogram::vpHistogram() : histogram(NULL), size(256)
 {
-  histogram = NULL;
-  size = 256;
   init();
 }
 
 /*!
   Copy constructor of a gray level histogram.
 */
-vpHistogram::vpHistogram(const vpHistogram &h)
+vpHistogram::vpHistogram(const vpHistogram &h)  : histogram(NULL), size(256)
 {
-  //  vpTRACE("copy");
-  histogram = NULL;
   init(h.size);
   memcpy(histogram, h.histogram, size * sizeof(unsigned));
 }
@@ -89,9 +87,8 @@ vpHistogram::vpHistogram(const vpHistogram &h)
   \sa calculate()
 */
 vpHistogram::vpHistogram(const vpImage<unsigned char> &I)
+ : histogram(NULL), size(256)
 {
-  histogram = NULL;
-  size = 256;
   init();
 
   calculate(I);
@@ -138,14 +135,14 @@ vpHistogram::operator=(const vpHistogram &h)
   - Initialise all the values to zero.
 */
 void
-vpHistogram::init(unsigned size)
+vpHistogram::init(unsigned size_)
 {
   if (histogram != NULL) {
     delete [] histogram;
     histogram = NULL;
   }
 
-  this->size = size;
+  this->size = size_;
   histogram = new unsigned [size];
 
   memset(histogram, 0, size * sizeof(unsigned));
diff --git a/src/tools/histogram/vpHistogram.h b/src/tools/histogram/vpHistogram.h
index 68076c3f..db90687a 100644
--- a/src/tools/histogram/vpHistogram.h
+++ b/src/tools/histogram/vpHistogram.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHistogram.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpHistogram.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tools/histogram/vpHistogramPeak.cpp b/src/tools/histogram/vpHistogramPeak.cpp
index 6ff74175..e7d22268 100644
--- a/src/tools/histogram/vpHistogramPeak.cpp
+++ b/src/tools/histogram/vpHistogramPeak.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHistogramPeak.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpHistogramPeak.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -52,27 +52,21 @@
 /*!
   Defaut constructor for a gray level histogram peak.
 */
-vpHistogramPeak::vpHistogramPeak()
-{
-  level = 0;
-  value = 0;
-}
+vpHistogramPeak::vpHistogramPeak() : level(0), value(0) {}
 
 /*!
   Defaut constructor for a gray level histogram peak.
 */
-vpHistogramPeak::vpHistogramPeak(unsigned char level, unsigned value)
-{
-  setLevel(level);
-  setValue(value);
-}
+vpHistogramPeak::vpHistogramPeak(unsigned char lvl, unsigned val)
+  : level(lvl), value(val) {}
+
 /*!
   Copy constructor of a gray level histogram peak.
 */
 vpHistogramPeak::vpHistogramPeak(const vpHistogramPeak &p)
+  : level(0), value(0)
 {
-  setLevel(p.level);
-  setValue(p.value);
+  *this = p;
 }
 
 /*!
@@ -110,7 +104,7 @@ vpHistogramPeak::operator==(const vpHistogramPeak &p) const
 /*!
   \brief std::cout a peak
 */
-std::ostream &operator <<(std::ostream &s,const vpHistogramPeak &p)
+VISP_EXPORT std::ostream &operator <<(std::ostream &s,const vpHistogramPeak &p)
 {
   
   s << (int)p.getLevel() << " " << p.getValue();
diff --git a/src/tools/histogram/vpHistogramPeak.h b/src/tools/histogram/vpHistogramPeak.h
index 3ba1371f..3b1e0ea3 100644
--- a/src/tools/histogram/vpHistogramPeak.h
+++ b/src/tools/histogram/vpHistogramPeak.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHistogramPeak.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpHistogramPeak.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -74,6 +74,9 @@ public :
   vpHistogramPeak(unsigned char level, unsigned value);
   vpHistogramPeak(const vpHistogramPeak & p);
 
+  /*! Destructor that does nothing. */
+  virtual ~vpHistogramPeak() {}
+
   vpHistogramPeak & operator=(const vpHistogramPeak &p);
   bool operator==(const vpHistogramPeak &p) const;
 
@@ -82,43 +85,43 @@ public :
     Set the peak gray \e level. To set the number of pixels having this
     gray level use setValue().
 
-    \param level : Location of the peak or gray \e level.
+    \param lvl : Location of the peak or gray \e level.
 
     \sa setValue(), set()
 
   */
-  inline void setLevel(unsigned char level)
+  inline void setLevel(unsigned char lvl)
     {
-      this->level = level;
+      this->level = lvl;
     };
   /*!
 
     Set the peak number of pixels having a same gray level. To set the
     gray level of this peak use setLevel().
 
-    \param value    : Number of pixels having the same location or gray level.
+    \param val    : Number of pixels having the same location or gray level.
 
     \sa setLevel(), set()
 
   */
-  inline void setValue(unsigned value) 
+  inline void setValue(unsigned val)
     {
-      this->value = value; 
+      this->value = val;
     };
   /*!
 
     Set the peak gray \e level and number of pixels at this gray level.
 
-    \param level : Location of the peak or gray level.
-    \param value : Number of pixels having the same location or gray level.
+    \param lvl : Location of the peak or gray level.
+    \param val : Number of pixels having the same location or gray level.
 
     \sa setLevel(), setValue()
 
   */
-  inline void set(unsigned char level, unsigned value)
+  inline void set(unsigned char lvl, unsigned val)
     {
-      this->level = level;
-      this->value = value; 
+      this->level = lvl;
+      this->value = val;
     };
       
   /*!
@@ -153,8 +156,7 @@ public :
   //---------------------------------
   // Printing
   //---------------------------------
-  friend VISP_EXPORT std::ostream &operator << (std::ostream &s,
-						const vpHistogramPeak &p);
+  friend VISP_EXPORT std::ostream &operator << (std::ostream &s,	const vpHistogramPeak &p);
 
 
 protected :
diff --git a/src/tools/histogram/vpHistogramValey.cpp b/src/tools/histogram/vpHistogramValey.cpp
index bbf55627..cfffac76 100644
--- a/src/tools/histogram/vpHistogramValey.cpp
+++ b/src/tools/histogram/vpHistogramValey.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHistogramValey.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpHistogramValey.cpp 4620 2014-01-27 21:28:32Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -83,7 +83,7 @@ vpHistogramValey::operator==(const vpHistogramValey &v) const
 /*!
   \brief std::cout a valey
 */
-std::ostream &operator <<(std::ostream &s,const vpHistogramValey &v)
+VISP_EXPORT std::ostream &operator <<(std::ostream &s,const vpHistogramValey &v)
 {
   
   s << (int)v.getLevel() << " " << v.getValue();
diff --git a/src/tools/histogram/vpHistogramValey.h b/src/tools/histogram/vpHistogramValey.h
index 5c83b21a..2c950d12 100644
--- a/src/tools/histogram/vpHistogramValey.h
+++ b/src/tools/histogram/vpHistogramValey.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpHistogramValey.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpHistogramValey.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -71,12 +71,15 @@ class VISP_EXPORT vpHistogramValey : vpHistogramPeak
   vpHistogramValey() :
     vpHistogramPeak() {};
     
-  vpHistogramValey(unsigned char level, unsigned value) : 
-    vpHistogramPeak(level, value) {};
+  vpHistogramValey(unsigned char lvl, unsigned val) :
+    vpHistogramPeak(lvl, val) {};
 
   vpHistogramValey(const vpHistogramValey & v) : 
     vpHistogramPeak(v) {};
 
+  /*! Destructor that does nothing. */
+  virtual ~vpHistogramValey() {}
+
   vpHistogramValey & operator=(const vpHistogramValey &v);
   bool operator==(const vpHistogramValey &v) const;
 
@@ -85,43 +88,43 @@ class VISP_EXPORT vpHistogramValey : vpHistogramPeak
     Set the valey gray \e level. To set the number of pixels having this
     gray level use setValue().
 
-    \param level : Location of the valey or gray level.
+    \param lvl : Location of the valey or gray level.
 
     \sa setValue(), set()
 
   */
-  inline void setLevel(unsigned char level)
+  inline void setLevel(unsigned char lvl)
     {
-      this->level = level;
+      this->level = lvl;
     };
   /*!
 
     Set the valey number of pixels having a same gray level. To set the
     gray level of this valey use setLevel().
 
-    \param value    : Number of pixels having the same location or gray level.
+    \param val : Number of pixels having the same location or gray level.
 
     \sa setPosition(), set()
 
   */
-  inline void setValue(unsigned value) 
+  inline void setValue(unsigned val)
     {
-      this->value = value; 
+      this->value = val;
     };
   /*!
 
     Set the valey gray \e level and number of pixels at this location.
 
-    \param level : Location of the valey or gray level.
-    \param value : Number of pixels having the same location or gray level.
+    \param lvl : Location of the valey or gray level.
+    \param val : Number of pixels having the same location or gray level.
 
     \sa setLevel(), setValue()
 
   */
-  inline void set(unsigned char level, unsigned value)
+  inline void set(unsigned char lvl, unsigned val)
     {
-      this->level = level;
-      this->value = value; 
+      this->level = lvl;
+      this->value = val;
     };
       
   /*!
@@ -143,7 +146,7 @@ class VISP_EXPORT vpHistogramValey : vpHistogramPeak
     Get the valey number of pixels having a same gray level. The
     corresponding gray level is available through getLevel().
 
-    \return    : Number of pixels having the same location or gray level.
+    \return  Number of pixels having the same location or gray level.
 
     \sa getLevel()
 
@@ -156,8 +159,7 @@ class VISP_EXPORT vpHistogramValey : vpHistogramPeak
   //---------------------------------
   // Printing
   //---------------------------------
-  friend VISP_EXPORT std::ostream &operator << (std::ostream &s,
-						const vpHistogramValey &v);
+  friend VISP_EXPORT std::ostream &operator << (std::ostream &s, const vpHistogramValey &v);
 };
 
 /*
diff --git a/src/tools/io/vpIoException.h b/src/tools/io/vpIoException.h
index a2aa32f0..2c03ed78 100644
--- a/src/tools/io/vpIoException.h
+++ b/src/tools/io/vpIoException.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpIoException.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpIoException.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -71,12 +71,12 @@
  */
 class VISP_EXPORT vpIoException : public vpException
 {
-public:
-  /*!
+  public:
+    /*!
     \brief Lists the possible error than can be emmited while calling
     vpIo member.
    */
-  enum error
+    enum error
     {
       invalidDirectoryName, /*! Directory name is invalid. */
       cantCreateDirectory,  /*! Unable to create a directory. */
@@ -84,25 +84,20 @@ public:
       cantGetenv            /*! Cannot get environment variable value. */
     } ;
 
-public:
-  vpIoException (const int code, const char * msg)
-    : vpException(code, msg){ ; }
-  vpIoException (const int code, const std::string & msg)
-    : vpException(code, msg){ ; }
-  vpIoException (const int code)
-    : vpException(code){ ; }
+  public:
+    vpIoException (const int id,  const char* format, ...)
+    {
+      this->code = id;
+      va_list args;
+      va_start(args, format);
+      setMessage(format, args);
+      va_end (args);
+    }
+    vpIoException (const int id, const std::string & msg)
+      : vpException(id, msg){ ; }
+    vpIoException (const int id)
+      : vpException(id){ ; }
 
 };
 
-
-
-
-
-#endif /* #ifndef __vpIoException_H */
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+#endif
diff --git a/src/tools/io/vpIoTools.cpp b/src/tools/io/vpIoTools.cpp
index d3b154d4..8f1f4ebb 100644
--- a/src/tools/io/vpIoTools.cpp
+++ b/src/tools/io/vpIoTools.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpIoTools.cpp 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpIoTools.cpp 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -55,13 +55,13 @@
 #include <fcntl.h>
 #include <limits>
 #include <cmath>
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
 #  include <unistd.h>
-#elif defined WIN32
+#elif defined(_WIN32)
 #  include <windows.h>
 #  include <direct.h>
 #endif
-#ifndef WIN32
+#if !defined(_WIN32)
 #  include <wordexp.h>
 #endif
 
@@ -92,8 +92,8 @@ std::vector<std::string> vpIoTools::configValues = std::vector<std::string>();
 void
 vpIoTools::getUserName(std::string &username)
 {
-  // With MinGW, UNIX and WIN32 are defined 
-#if defined UNIX
+  // With MinGW, UNIX and _WIN32 are defined
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   // Get the user name.
   char *_username = NULL;
   _username = ::getenv("LOGNAME");
@@ -103,7 +103,7 @@ vpIoTools::getUserName(std::string &username)
 			"Cannot get the username")) ;
   }
   username = _username;
-#elif defined WIN32
+#elif defined(_WIN32)
   unsigned int info_buffer_size = 1024;
   TCHAR  *infoBuf = new TCHAR [info_buffer_size];
   DWORD  bufCharCount = (DWORD) info_buffer_size;
@@ -140,7 +140,7 @@ std::string
 vpIoTools::getUserName()
 {
   std::string username;
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   // Get the user name.
   char *_username = NULL;
   _username = ::getenv("LOGNAME");
@@ -150,7 +150,7 @@ vpIoTools::getUserName()
 			"Cannot get the username")) ;
   }
   username = _username;
-#elif defined WIN32
+#elif defined(_WIN32)
   unsigned int info_buffer_size = 1024;
   TCHAR  *infoBuf = new TCHAR [info_buffer_size];
   DWORD  bufCharCount = (DWORD) info_buffer_size;
@@ -206,13 +206,13 @@ int main()
 */
 std::string
 vpIoTools::getenv(const char *
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
                   env
 #endif
                   )
 {
   std::string value;
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   // Get the environment variable value.
   char *_value = NULL;
   _value = ::getenv(env);
@@ -224,7 +224,7 @@ vpIoTools::getenv(const char *
   value = _value;
 
   return value;
-#elif defined WIN32
+#elif defined(_WIN32)
 
   vpERROR_TRACE( "Not implemented!" );
   throw(vpIoException(vpException::notImplementedError,
@@ -334,9 +334,9 @@ vpIoTools::getVersion(const std::string &version, unsigned int &major, unsigned
 bool
 vpIoTools::checkDirectory(const char *dirname )
 {
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   struct stat stbuf;
-#elif defined WIN32
+#elif defined(_WIN32)
   struct _stat stbuf;
 #endif
 
@@ -346,9 +346,9 @@ vpIoTools::checkDirectory(const char *dirname )
 
   std::string _dirname = path(dirname);
 
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   if ( stat( _dirname.c_str(), &stbuf ) != 0 )
-#elif defined WIN32
+#elif defined(_WIN32)
   if ( _stat( _dirname.c_str(), &stbuf ) != 0 )
 #endif
   {
@@ -357,9 +357,9 @@ vpIoTools::checkDirectory(const char *dirname )
   if ( (stbuf.st_mode & S_IFDIR) == 0 ) {
     return false;
   }
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   if ( (stbuf.st_mode & S_IWUSR) == 0 )
-#elif defined WIN32
+#elif defined(_WIN32)
   if ( (stbuf.st_mode & S_IWRITE) == 0 )
 #endif
   {
@@ -403,9 +403,9 @@ vpIoTools::checkDirectory(const std::string &dirname )
 void
 vpIoTools::makeDirectory(const  char *dirname )
 {
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   struct stat stbuf;
-#elif defined WIN32
+#elif defined(_WIN32)
   struct _stat stbuf;
 #endif
 
@@ -417,15 +417,15 @@ vpIoTools::makeDirectory(const  char *dirname )
 
   std::string _dirname = path(dirname);
 
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   if ( stat( _dirname.c_str(), &stbuf ) != 0 )
-#elif defined WIN32
+#elif defined(_WIN32)
   if ( _stat( _dirname.c_str(), &stbuf ) != 0 )
 #endif
   {
-#if ( defined(UNIX) && !defined(WIN32) )
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
     if ( mkdir( _dirname.c_str(), (mode_t)0755 ) != 0 )
-#elif defined WIN32
+#elif defined(_WIN32)
     if ( _mkdir( _dirname.c_str()) != 0 )
 #endif
     {
@@ -484,9 +484,9 @@ vpIoTools::makeDirectory(const std::string &dirname )
 bool
 vpIoTools::checkFilename(const char *filename)
 {
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   struct stat stbuf;
-#elif defined WIN32
+#elif defined(_WIN32)
   struct _stat stbuf;
 #endif
 
@@ -495,9 +495,9 @@ vpIoTools::checkFilename(const char *filename)
   }
 
   std::string _filename = path(filename);
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   if ( stat( _filename.c_str(), &stbuf ) != 0 )
-#elif defined WIN32
+#elif defined(_WIN32)
   if ( _stat( _filename.c_str(), &stbuf ) != 0 )
 #endif
   {
@@ -506,9 +506,9 @@ vpIoTools::checkFilename(const char *filename)
   if ( (stbuf.st_mode & S_IFREG) == 0 ) {
     return false;
   }
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   if ( (stbuf.st_mode & S_IRUSR) == 0 )
-#elif defined WIN32
+#elif defined(_WIN32)
   if ( (stbuf.st_mode & S_IREAD) == 0 )
 #endif
   {
@@ -555,9 +555,9 @@ vpIoTools::copy(const char *src, const char *dst)
   // Check if we have to consider a file or a directory
   if ( vpIoTools::checkFilename(src) ) {
     //std::cout << "copy file: " << src << " in " << dst << std::endl;
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
     sprintf(cmd, "cp -p %s %s", src, dst);
-#elif WIN32
+#elif defined(_WIN32)
 	std::string src_ = vpIoTools::path(src);
 	std::string dst_ = vpIoTools::path(dst);
     sprintf(cmd, "copy %s %s", src_.c_str(), dst_.c_str());
@@ -568,9 +568,9 @@ vpIoTools::copy(const char *src, const char *dst)
   }
   else if ( vpIoTools::checkDirectory(src) ) {
     //std::cout << "copy directory: " << src << " in " << dst << std::endl;
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
     sprintf(cmd, "cp -p -r %s %s", src, dst);
-#elif WIN32
+#elif defined(_WIN32)
 	std::string src_ = vpIoTools::path(src);
 	std::string dst_ = vpIoTools::path(dst);
     sprintf(cmd, "copy %s %s", src_.c_str(), dst_.c_str());
@@ -627,9 +627,9 @@ vpIoTools::remove(const char *file_or_dir)
   else if ( vpIoTools::checkDirectory(file_or_dir) ) {
     //std::cout << "remove directory: " << file_or_dir << std::endl;
     char cmd[FILENAME_MAX];
-#ifdef UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
     sprintf(cmd, "rm -rf %s", file_or_dir);
-#elif WIN32
+#elif defined(_WIN32)
 	std::string file_or_dir_ = vpIoTools::path(file_or_dir);
     sprintf(cmd, "rmdir /S /Q %s", file_or_dir_.c_str());
 #endif
@@ -716,7 +716,7 @@ vpIoTools::path(const char *pathname)
 {
   std::string path(pathname);
 
-#ifdef WIN32
+#if defined(_WIN32)
   for(unsigned int i=0 ; i<path.length() ; i++)
     if( path[i] == '/')	path[i] = '\\';
 #else
diff --git a/src/tools/io/vpIoTools.h b/src/tools/io/vpIoTools.h
index 1a3142f3..51c7e9c3 100644
--- a/src/tools/io/vpIoTools.h
+++ b/src/tools/io/vpIoTools.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpIoTools.h 4275 2013-06-25 12:35:42Z fspindle $
+ * $Id: vpIoTools.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tools/io/vpKeyboard.cpp b/src/tools/io/vpKeyboard.cpp
index da4fdc0c..b18696ec 100644
--- a/src/tools/io/vpKeyboard.cpp
+++ b/src/tools/io/vpKeyboard.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpKeyboard.cpp 4267 2013-06-14 18:07:13Z fspindle $
+ * $Id: vpKeyboard.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -41,7 +41,7 @@
 
 
 
-#if ( defined(UNIX) && !defined(WIN32) )
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
 #  include <stdio.h>
 #  include <visp/vpKeyboard.h>
 
@@ -54,7 +54,7 @@
 /*!
   Activates the raw mode to read keys in an non blocking way.
 */
-vpKeyboard::vpKeyboard()
+vpKeyboard::vpKeyboard() : initial_settings(), new_settings()
 {
   init();
 }
diff --git a/src/tools/io/vpKeyboard.h b/src/tools/io/vpKeyboard.h
index 844d86f6..c1097ca4 100644
--- a/src/tools/io/vpKeyboard.h
+++ b/src/tools/io/vpKeyboard.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpKeyboard.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpKeyboard.h 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -50,7 +50,7 @@
 
 #include <visp/vpConfig.h>
 
-#if ( defined(UNIX) && !defined(WIN32) )
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
 
 #  include <iostream>
 #  include <termios.h>
diff --git a/src/tools/io/vpParallelPort.cpp b/src/tools/io/vpParallelPort.cpp
index ea1736b0..7b8be9fd 100644
--- a/src/tools/io/vpParallelPort.cpp
+++ b/src/tools/io/vpParallelPort.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpParallelPort.cpp 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpParallelPort.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tools/io/vpParallelPort.h b/src/tools/io/vpParallelPort.h
index 9dd87688..d778e40d 100644
--- a/src/tools/io/vpParallelPort.h
+++ b/src/tools/io/vpParallelPort.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpParallelPort.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpParallelPort.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tools/io/vpParallelPortException.h b/src/tools/io/vpParallelPortException.h
index ef971f0f..b1867e75 100644
--- a/src/tools/io/vpParallelPortException.h
+++ b/src/tools/io/vpParallelPortException.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpParallelPortException.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpParallelPortException.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -78,36 +78,31 @@
  */
 class VISP_EXPORT vpParallelPortException : public vpException
 {
-public:
-  /*!
+  public:
+    /*!
     \brief Lists the possible errors than can be emmited while calling
     vpParallelPort member
    */
-  enum error
+    enum error
     {
       opening, /*!< Cannot access to the parallel port device. */
       closing  /*!< Cannot close the parallel port device. */
     } ;
 
-public:
-  vpParallelPortException (const int code, const char * msg)
-    : vpException(code, msg){ ; }
-  vpParallelPortException (const int code, const std::string & msg)
-    : vpException(code, msg){ ; }
-  vpParallelPortException (const int code)
-    : vpException(code){ ; }
+  public:
+    vpParallelPortException (const int code,  const char* format, ...)
+    {
+      this->code = code;
+      va_list args;
+      va_start(args, format);
+      setMessage(format, args);
+      va_end (args);
+    }
+    vpParallelPortException (const int code, const std::string & msg)
+      : vpException(code, msg){ ; }
+    vpParallelPortException (const int code)
+      : vpException(code){ ; }
 
 };
 
-
-
-
-
-#endif /* #ifndef __vpParallelPortException_H */
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+#endif
diff --git a/src/tools/io/vpParseArgv.h b/src/tools/io/vpParseArgv.h
index 8b9e3e43..c466daaf 100644
--- a/src/tools/io/vpParseArgv.h
+++ b/src/tools/io/vpParseArgv.h
@@ -1,6 +1,6 @@
 /****************************************************************************
  *
- * $Id: vpParseArgv.h 2780 2010-09-08 08:37:15Z fspindle $
+ * $Id: vpParseArgv.h 4473 2013-09-27 16:50:44Z fspindle $
  *
  * Declarations for Tk-related things that are visible
  * outside of the Tk module itself.
@@ -35,6 +35,7 @@
 
 
 #include <visp/vpConfig.h>
+#include <visp/vpException.h>
 
 /*!
   \class vpParseArgv
diff --git a/src/tools/mutex/vpMutex.h b/src/tools/mutex/vpMutex.h
index 2dbb15ea..812d2a39 100644
--- a/src/tools/mutex/vpMutex.h
+++ b/src/tools/mutex/vpMutex.h
@@ -1,10 +1,10 @@
 /****************************************************************************
  *
- * $Id: vpMutex.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMutex.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tools/plot/vpPlot.cpp b/src/tools/plot/vpPlot.cpp
index e458136c..d65d4a59 100644
--- a/src/tools/plot/vpPlot.cpp
+++ b/src/tools/plot/vpPlot.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPlot.cpp 4151 2013-03-11 06:52:18Z fspindle $
+ * $Id: vpPlot.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -64,13 +64,9 @@
   Needs then a call to init().
 
 */
-vpPlot::vpPlot()
+vpPlot::vpPlot() : I(), display(NULL), graphNbr(1), graphList(NULL), margei(30), margej(40),
+  factori(1.f), factorj(1.)
 {
-  graphList = NULL;
-  display = NULL;
-    
-  margei = 30;
-  margej = 40;
 }
 /*!
   This constructor creates a new window where the curves
@@ -82,23 +78,19 @@ vpPlot::vpPlot()
   default font is set to "-adobe-times-medium-i-normal--10-100-75-75-p-52-iso8859-*". 
   Note that you can chose an other one using "xfontsel".
 
-  \param graphNbr : The number of graph in the window.
+  \param graph_nbr : The number of graph in the window.
   \param height : Height of the window.
   \param width : Width of the window.
   \param x,y : The window is set at position x,y (column index, row index).
   \param title : Window title. 
 */
-vpPlot::vpPlot(const unsigned int graphNbr, 
+vpPlot::vpPlot(const unsigned int graph_nbr,
 	       const unsigned int height, const unsigned int width, 
 	       const int x, const int y, const char *title)
-{
-  graphList = NULL;
-  display = NULL;
-      
-  margei = 30;
-  margej = 40;
-  
-  init(graphNbr, height, width, x, y, title);
+  : I(), display(NULL), graphNbr(1), graphList(NULL), margei(30), margej(40),
+    factori(1.f), factorj(1.)
+{  
+  init(graph_nbr, height, width, x, y, title);
 }
 
 /*!
@@ -107,13 +99,13 @@ vpPlot::vpPlot(const unsigned int graphNbr,
 
   \warning You can modify the default window size, but this is not advised.
 
-  \param graphNbr : The number of graph in the window.
+  \param graph_nbr : The number of graph in the window.
   \param height : Height of the window.
   \param width : Width of the window.
   \param x,y : The window is set at position x,y (column index, row index).
   \param title : Window title. 
 */
-void vpPlot::init(const unsigned int graphNbr, 
+void vpPlot::init(const unsigned int graph_nbr,
 		  const unsigned int height, const unsigned int width, 
 		  const int x, const int y, const char *title)
 {
@@ -138,7 +130,7 @@ void vpPlot::init(const unsigned int graphNbr,
   factori = height/700.0f;
   factorj = width/700.0f;
     
-  initNbGraph(graphNbr);
+  initNbGraph(graph_nbr);
 }
 
 /*!
@@ -203,7 +195,6 @@ vpPlot::initNbGraph (unsigned int nbGraph)
     strcpy(graphList[i].unitx, "");
     strcpy(graphList[i].unity, "");
     strcpy(graphList[i].unitz, "");
-    graphList[i].textdispayed=false;
   }
 }
 
@@ -357,12 +348,11 @@ void vpPlot::plot(const unsigned int graphNum, const double x, const vpColVector
 }
 
 /*!
-  This method unable to move the point of view if you have a 3D graphic.
+  This method allows to change the point of view with the mouse if you have a 3D graphic.
 */
 void
 vpPlot::navigate()
 {
-  vpImagePoint trash;
   vpMouseButton::vpMouseButtonType b = vpMouseButton::button1;
   
   bool blocked = false;
@@ -376,15 +366,15 @@ vpPlot::navigate()
       vpDisplay::getPointerPosition(I,iP);
       for (unsigned int i = 0; i < graphNbr ; i++)
       {
-	if (iP.inRectangle((graphList+i)->graphZone))
-	{
-	  iblocked = i;
-	  break;
-	}
+        if (iP.inRectangle((graphList+i)->graphZone))
+        {
+          iblocked = i;
+          break;
+        }
       }
       if ((graphList+iblocked)->move(I))
       {
-	(graphList+iblocked)->replot3D(I);
+        (graphList+iblocked)->replot3D(I);
       }
       
       blocked = (graphList+iblocked)->blocked;
@@ -393,7 +383,7 @@ vpPlot::navigate()
     {
       if ((graphList+iblocked)->move(I))
       {
-	(graphList+iblocked)->replot3D(I);
+        (graphList+iblocked)->replot3D(I);
       }
       blocked = (graphList+iblocked)->blocked;
     }
diff --git a/src/tools/plot/vpPlot.h b/src/tools/plot/vpPlot.h
index 32668e3e..f16bfc11 100644
--- a/src/tools/plot/vpPlot.h
+++ b/src/tools/plot/vpPlot.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPlot.h 4233 2013-05-02 13:46:42Z fspindle $
+ * $Id: vpPlot.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tools/plot/vpPlotCurve.cpp b/src/tools/plot/vpPlotCurve.cpp
index 0106ef9a..245fb407 100644
--- a/src/tools/plot/vpPlotCurve.cpp
+++ b/src/tools/plot/vpPlotCurve.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPlotCurve.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPlotCurve.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -50,14 +50,10 @@
 #include <visp/vpDisplayD3D.h>
 
 #if defined(VISP_HAVE_DISPLAY)
-vpPlotCurve::vpPlotCurve()
+vpPlotCurve::vpPlotCurve() :
+  color(vpColor::red), curveStyle(point), thickness(1), nbPoint(0), lastPoint(),
+  pointListx(), pointListy(), pointListz(), xmin(0), xmax(0), ymin(0), ymax(0)
 {
-  color = vpColor::red;
-  pointListx.clear();
-  pointListy.clear();
-  pointListz.clear();
-  nbPoint = 0;
-  thickness = 1 ;
 }
 
 vpPlotCurve::~vpPlotCurve()
diff --git a/src/tools/plot/vpPlotCurve.h b/src/tools/plot/vpPlotCurve.h
index 8fe6b8ac..32f6eace 100644
--- a/src/tools/plot/vpPlotCurve.h
+++ b/src/tools/plot/vpPlotCurve.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPlotCurve.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPlotCurve.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tools/plot/vpPlotGraph.cpp b/src/tools/plot/vpPlotGraph.cpp
index 30a8bab8..cbe0d662 100644
--- a/src/tools/plot/vpPlotGraph.cpp
+++ b/src/tools/plot/vpPlotGraph.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPlotGraph.cpp 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpPlotGraph.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -61,41 +61,23 @@
 
 #if defined(VISP_HAVE_DISPLAY)
 
+int laFonctionSansNom (const double delta);
+void getGrid3DPoint(const double pente, vpImagePoint &iPunit, vpImagePoint &ip1, vpImagePoint &ip2, vpImagePoint &ip3);
+
+
 vpPlotGraph::vpPlotGraph()
+  : xorg(0.), yorg(0.), zoomx(1.), zoomy(1.), xmax(10), ymax(10), xmin(0), ymin(-10),
+    xdelt(1), ydelt(1), gridx(true), gridy(true), gridColor(), curveNbr(1), curveList(NULL),
+    scaleInitialized(false), firstPoint(true), nbDivisionx(10), nbDivisiony(10), topLeft(),
+    width(0), height(0), graphZone(), dTopLeft(), dWidth(0), dHeight(0), dGraphZone(),
+    dTopLeft3D(), dGraphZone3D(), cam(), cMo(), cMf(), w_xval(0), w_xsize(0), w_yval(0), w_ysize(0),
+    w_zval(0), w_zsize(0), ptXorg(0), ptYorg(0), ptZorg(0), zoomx_3D(1.), zoomy_3D(1.), zoomz_3D(1.),
+    nbDivisionz(10), zorg(1.), zoomz(1.), zmax(10), zmin(-10), zdelt(1), old_iPr(), old_iPz(),
+    blockedr(false), blockedz(false), blocked(false), epsi(5), epsj(6),
+    dispUnit(false), dispTitle(false), dispLegend(false), gridThickness(1)
 {
-  curveList = NULL;
-  
   gridColor.setColor(200,200,200);
   
-  nbDivisionx = 10;
-  nbDivisiony = 10;
-  nbDivisionz = 10;
-  
-  xmax = 10;
-  xmin = 0;
-  ymax = 10;
-  ymin = -10;
-  zmax = 10;
-  zmin = -10;
-  xdelt = 1;
-  ydelt = 1;
-  zdelt = 1;
-  gridx = true;
-  gridy = true;
-  scaleInitialized = false;
-  firstPoint = true;
-  
-  dispUnit = false;
-  dispTitle = false;
-  dispLegend = false;
-
-  blockedr = false;
-  blockedz = false;
-  blocked = false;
-  
-  epsi = 5;
-  epsj = 6;
-  
   old_iPr = vpImagePoint(-1,-1);
   old_iPz = vpImagePoint(-1,-1);
 
@@ -130,11 +112,11 @@ vpPlotGraph::initGraph (unsigned int nbCurve)
 }
 
 void
-vpPlotGraph::initSize (vpImagePoint topLeft, unsigned int width, unsigned int height, unsigned int margei, unsigned int margej)
+vpPlotGraph::initSize (vpImagePoint top_left, unsigned int w, unsigned int h, unsigned int margei, unsigned int margej)
 {
-  this->topLeft = topLeft;
-  this->width = width;
-  this->height = height;
+  this->topLeft = top_left;
+  this->width = w;
+  this->height = h;
   graphZone.setTopLeft(topLeft);
   graphZone.setWidth(width);
   graphZone.setHeight(height);
@@ -237,36 +219,61 @@ vpPlotGraph::setCurveColor(const unsigned int curveNum, const vpColor color)
 }
 
 void
-vpPlotGraph::setTitle (const char *title)
+vpPlotGraph::setTitle (const char *title_)
 {
-  strcpy(this->title, title);
+  if (strlen(title_) >= 256) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the title"));
+  }
+
+  strcpy(this->title, title_);
   dispTitle = true;
 }
 
 void
-vpPlotGraph::setUnitX (const char *unitx)
+vpPlotGraph::setUnitX (const char *unit_x)
 {
-  strcpy(this->unitx, unitx);
+  if (strlen(unit_x) >= 256) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the unit along x axis"));
+  }
+
+  strcpy(this->unitx, unit_x);
   dispUnit = true;
 }
 
 void
-vpPlotGraph::setUnitY (const char *unity)
+vpPlotGraph::setUnitY (const char *unit_y)
 {
-  strcpy(this->unity, unity);
+  if (strlen(unit_y) >= 256) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the unit along y axis"));
+  }
+
+  strcpy(this->unity, unit_y);
   dispUnit = true;
 }
 
 void
-vpPlotGraph::setUnitZ (const char *unitz)
+vpPlotGraph::setUnitZ (const char *unit_z)
 {
-  strcpy(this->unitz, unitz);
+  if (strlen(unit_z) >= 256) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the unit along z axis"));
+  }
+
+  strcpy(this->unitz, unit_z);
   dispUnit = true;
 }
 
 void
 vpPlotGraph::setLegend (const unsigned int curveNum, const char *legend)
 {
+  if (strlen(legend) >= 256) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the legend"));
+  }
+
   strcpy((curveList+curveNum)->legend,legend);
   dispLegend = true;
 }
@@ -480,12 +487,13 @@ vpPlotGraph::rescaley(unsigned int side, double extremity)
 }
 
 void
-vpPlotGraph::initScale(vpImage<unsigned char> &I, const double xmin, const double xmax, const int nbDivx, const double ymin, const double ymax, const int nbDivy, const bool gx, const bool gy)
+vpPlotGraph::initScale(vpImage<unsigned char> &I, const double x_min, const double x_max, const int nbDivx,
+                       const double y_min, const double y_max, const int nbDivy, const bool gx, const bool gy)
 {
-  this->xmin = xmin;
-  this->xmax = xmax;
-  this->ymin = ymin;
-  this->ymax = ymax;
+  this->xmin = x_min;
+  this->xmax = x_max;
+  this->ymin = y_min;
+  this->ymax = y_max;
   this->gridx = gx;
   this->gridy = gy;
   this->nbDivisionx = nbDivx;
@@ -499,14 +507,16 @@ vpPlotGraph::initScale(vpImage<unsigned char> &I, const double xmin, const doubl
 
 
 void
-vpPlotGraph::initScale(vpImage<unsigned char> &I, const double xmin, const double xmax, const int nbDivx, const double ymin, const double ymax, const int nbDivy, const double zmin, const double zmax, const int nbDivz, const bool gx, const bool gy)
+vpPlotGraph::initScale(vpImage<unsigned char> &I, const double x_min, const double x_max, const int nbDivx,
+                       const double y_min, const double y_max, const int nbDivy,
+                       const double z_min, const double z_max, const int nbDivz, const bool gx, const bool gy)
 {
-  this->xmin = xmin;
-  this->xmax = xmax;
-  this->ymin = ymin;
-  this->ymax = ymax;
-  this->zmin = zmin;
-  this->zmax = zmax;
+  this->xmin = x_min;
+  this->xmax = x_max;
+  this->ymin = y_min;
+  this->ymax = y_max;
+  this->zmin = z_min;
+  this->zmax = z_max;
   this->gridx = gx;
   this->gridy = gy;
   this->nbDivisionx = nbDivx;
@@ -881,7 +891,7 @@ vpPlotGraph::check3Dpoint(vpImagePoint &iP)
     if (iP.get_j() <dTopLeft3D.get_j())
       iP.set_j(dTopLeft3D.get_j());
     else if (iP.get_j() > dTopLeft3D.get_j()+dWidth)
-      iP.set_i(dTopLeft3D.get_j()+dWidth-1);
+      iP.set_j(dTopLeft3D.get_j()+dWidth-1);
     return false;
   }
   return true;
@@ -1089,7 +1099,7 @@ vpPlotGraph::displayGrid3D (vpImage<unsigned char> &I)
     vpDisplay::displayArrow(I,iP[0],iP[1], vpColor::black, gridThickness);
     if (dispUnit)
     {
-      vpImagePoint iPunit(iP[1].get_i(),iP[1].get_j()-10*epsj);
+      iPunit.set_ij(iP[1].get_i(),iP[1].get_j()-10*epsj);
       check3Dpoint (iPunit);
       vpDisplay::displayCharString(I,iPunit,unitx, vpColor::black);
     }
@@ -1099,7 +1109,7 @@ vpPlotGraph::displayGrid3D (vpImage<unsigned char> &I)
     vpDisplay::displayArrow(I,iP[3],iP[2], vpColor::black, gridThickness);
     if (dispUnit)
     {
-      vpImagePoint iPunit(iP[2].get_i(),iP[2].get_j()-10*epsj);
+      iPunit.set_ij(iP[2].get_i(),iP[2].get_j()-10*epsj);
       check3Dpoint (iPunit);
       vpDisplay::displayCharString(I,iPunit,unity, vpColor::black);
     }
@@ -1109,7 +1119,7 @@ vpPlotGraph::displayGrid3D (vpImage<unsigned char> &I)
     vpDisplay::displayArrow(I,iP[4],iP[5], vpColor::black, gridThickness);
     if (dispUnit)
     {
-      vpImagePoint iPunit(iP[5].get_i(),iP[5].get_j()-10*epsj);
+      iPunit.set_ij(iP[5].get_i(),iP[5].get_j()-10*epsj);
       check3Dpoint (iPunit);
       vpDisplay::displayCharString(I,iPunit,unitz, vpColor::black);
     }
@@ -1209,14 +1219,14 @@ vpPlotGraph::plot (vpImage<unsigned char> &I, const unsigned int curveNb, const
 #if( defined VISP_HAVE_X11 || defined VISP_HAVE_GDI )
   double top;
   double left;
-  double width;
-  double height;
+  double width_;
+  double height_;
   
-  if (iP.get_i() <= (curveList+curveNb)->lastPoint.get_i()) {top = iP.get_i()-5; height = (curveList+curveNb)->lastPoint.get_i() - top+10;}
-  else {top = (curveList+curveNb)->lastPoint.get_i()-5; height = iP.get_i() - top+10;}
-  if (iP.get_j() <= (curveList+curveNb)->lastPoint.get_j()) {left = iP.get_j()-5; width = (curveList+curveNb)->lastPoint.get_j() - left+10;}
-  else {left = (curveList+curveNb)->lastPoint.get_j()-5; width = iP.get_j() - left+10;}
-  vpDisplay::flushROI(I,vpRect(left,top,width,height));
+  if (iP.get_i() <= (curveList+curveNb)->lastPoint.get_i()) {top = iP.get_i()-5; height_ = (curveList+curveNb)->lastPoint.get_i() - top+10;}
+  else {top = (curveList+curveNb)->lastPoint.get_i()-5; height_ = iP.get_i() - top+10;}
+  if (iP.get_j() <= (curveList+curveNb)->lastPoint.get_j()) {left = iP.get_j()-5; width_ = (curveList+curveNb)->lastPoint.get_j() - left+10;}
+  else {left = (curveList+curveNb)->lastPoint.get_j()-5; width_ = iP.get_j() - left+10;}
+  vpDisplay::flushROI(I,vpRect(left,top,width_,height_));
 #endif
   
   (curveList+curveNb)->lastPoint = iP;
@@ -1368,13 +1378,13 @@ vpPlotGraph::navigation(const vpImage<unsigned char> &I, bool &changed)
 
   if (old_iPr != vpImagePoint(-1,-1) && blockedr)
   {
-    double width = vpMath::minimum(I.getWidth(),I.getHeight());
+    double width_ = vpMath::minimum(I.getWidth(),I.getHeight());
     
     double diffi = iP.get_i() - old_iPr.get_i();
     double diffj = iP.get_j() - old_iPr.get_j();
     
-    anglei = diffi*360/width;
-    anglej = diffj*360/width;
+    anglei = diffi*360/width_;
+    anglej = diffj*360/width_;
     mov.buildFrom(0,0,0,vpMath::rad(anglei),vpMath::rad(-anglej),0);
     changed = true;
   }
diff --git a/src/tools/plot/vpPlotGraph.h b/src/tools/plot/vpPlotGraph.h
index 88fb8084..0e8af1e8 100644
--- a/src/tools/plot/vpPlotGraph.h
+++ b/src/tools/plot/vpPlotGraph.h
@@ -1,10 +1,10 @@
 
 /****************************************************************************
  *
- * $Id: vpPlotGraph.h 4151 2013-03-11 06:52:18Z fspindle $
+ * $Id: vpPlotGraph.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -79,7 +79,6 @@ class vpPlotGraph
     char unity[256];
     unsigned int curveNbr;
     vpPlotCurve* curveList;
-    bool textdispayed;
     bool scaleInitialized;
     bool firstPoint;
     
diff --git a/src/tools/time/vpTime.cpp b/src/tools/time/vpTime.cpp
index 8c2dcb12..e1d5adc8 100644
--- a/src/tools/time/vpTime.cpp
+++ b/src/tools/time/vpTime.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpTime.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpTime.cpp 4622 2014-01-28 17:40:36Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -56,10 +56,10 @@
 
 // Unix depend version
 
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
 #  include <sys/time.h>
 #  include <unistd.h>
-#elif defined WIN32
+#elif defined(_WIN32)
 #  include <windows.h>
 #  include <winbase.h>
 #endif
@@ -78,14 +78,14 @@ double vpTime::minTimeForUsleepCall = 4; /*! This time is in
 
 
 /*!
-  Return the time in milliseconds.
+  Return the time in milliseconds since January 1st 1970.
 
   \sa measureTimeMicros(), measureTimeSecond()
 */
 double
 vpTime::measureTimeMs()
 {
-#if defined(WIN32)
+#if defined(_WIN32)
   LARGE_INTEGER time, frequency;
   QueryPerformanceFrequency(&frequency);
   if(frequency.QuadPart == 0){
@@ -95,7 +95,7 @@ vpTime::measureTimeMs()
   QueryPerformanceCounter(&time);
   return (double)(1000.0*time.QuadPart/frequency.QuadPart);
   }
-#elif defined UNIX
+#elif !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
   struct timeval tp;
   gettimeofday(&tp,0);
   return(1000.0*tp.tv_sec + tp.tv_usec/1000.0);
@@ -104,14 +104,14 @@ vpTime::measureTimeMs()
 
 
 /*!
-  Return the time in microseconds.
+  Return the time in microseconds since January 1st 1970.
 
   \sa measureTimeMs(), measureTimeSecond()
 */
 double
 vpTime::measureTimeMicros()
 {
-#if defined(WIN32)
+#if defined(_WIN32)
   LARGE_INTEGER time, frequency;
   QueryPerformanceFrequency(&frequency);
   if(frequency.QuadPart == 0){
@@ -156,11 +156,11 @@ vpTime::wait(double t0, double t)
   if ( timeToWait <= 0. ) // no need to wait
     return(1);
   else {
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
     if (timeToWait > vpTime::minTimeForUsleepCall) {
       usleep((unsigned long )((timeToWait-vpTime::minTimeForUsleepCall)*1000));
     }
-#elif defined WIN32
+#elif defined(_WIN32)
     if (timeToWait > vpTime::minTimeForUsleepCall) {
       Sleep((DWORD)(timeToWait-vpTime::minTimeForUsleepCall));
     }
@@ -196,11 +196,11 @@ void vpTime::wait(double t)
   if ( timeToWait <= 0. ) // no need to wait
     return;
   else {
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
 	if (timeToWait > vpTime::minTimeForUsleepCall) {
       usleep((unsigned long )((timeToWait-vpTime::minTimeForUsleepCall)*1000));
     }
-#elif defined WIN32
+#elif defined(_WIN32)
     if (timeToWait > vpTime::minTimeForUsleepCall) {
       Sleep((DWORD)(timeToWait-vpTime::minTimeForUsleepCall));
     }
@@ -218,7 +218,7 @@ void vpTime::wait(double t)
 
 /*!
 
-  Return the measured time in seconds.
+  Return the measured time in seconds since January 1st 1970.
 
   \sa measureTimeMs()
 */
@@ -235,9 +235,9 @@ double  vpTime::measureTimeSecond()
 */
 void vpTime::sleepMs(double t)
 {
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
    usleep((unsigned long )(t*1000));
-#elif defined WIN32
+#elif defined(_WIN32)
    Sleep((DWORD)(t));
 #endif
 }
diff --git a/src/tools/time/vpTime.h b/src/tools/time/vpTime.h
index 84607449..b21b2f19 100644
--- a/src/tools/time/vpTime.h
+++ b/src/tools/time/vpTime.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpTime.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpTime.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -51,6 +51,7 @@
 */
 
 #include <visp/vpConfig.h>
+#include <visp/vpException.h>
 
 /*!
   \class vpTime
diff --git a/src/tools/trace/vpDebug.h b/src/tools/trace/vpDebug.h
index 03e061be..4f3970ca 100644
--- a/src/tools/trace/vpDebug.h
+++ b/src/tools/trace/vpDebug.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDebug.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpDebug.h 4604 2014-01-21 14:15:23Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -57,7 +57,7 @@
 #include <iostream>
 
 
-#ifdef WIN32
+#if defined(_WIN32)
 #  ifndef __FUNCTION__
 #    define __FUNCTION__ " "
 #  endif
@@ -82,21 +82,23 @@
 
   This class is used to define the following macros:
 
-  - Macros for tracing: vpTRACE() and vpERROR_TRACE() work like printf
-    with carreer return at the end of the string.  vpCERROR() et
-    vpCTRACE() work like the C++ output streams std::cout and
+  - Macros for tracing: vpTRACE(), vpERROR_TRACE(), vpIN_FCT() and
+    vpOUT_FCT() work like printf
+    with carreer return at the end of the string, while vpCTRACE() and
+    vpCERROR() work like the C++ output streams std::cout and
     std::cerr.
 
-  - Macros for debuging: vpDEBUG_TRACE(niv) and vpDERROR_TRACE(niv)
-    work like printf, but print only if the tracing level \e niv is
-    greater than the debug level VP_DEBUG_MODE macro. vpCDEBUG(niv)
-    work like the C++ output stream std::cout. vpDEBUG_ENABLE(niv) is
-    equal to 1 if the debug level niv is greater than the debug mode
+  - Macros for debuging: vpDEBUG_TRACE(level) and vpDERROR_TRACE(level)
+    work like printf, but print only if the tracing level \e level is
+    greater than the debug level VP_DEBUG_MODE macro. vpCDEBUG(level)
+    work like the C++ output stream std::cout. vpDEBUG_ENABLE(level) is
+    equal to 1 if the debug level level is greater than the debug mode
     VP_DEBUG_MODE, 0 else.
 
   The example below shows how to use these macros.
 
   \code
+#define VP_TRACE        // Activate the trace mode
 #define VP_DEBUG        // Activate the debug mode
 #define VP_DEBUG_MODE 2 // Activate debug level 1 and 2
 
@@ -123,7 +125,7 @@ int main()
   vpDERROR_TRACE(2, "C-like error trace level 2"); // stderr
 
   // C++-like debug printings
-  vpCTRACE << "C++-like debug trace" << std::endl; // stdout
+  vpCTRACE << "C++-like trace" << std::endl; // stdout
   vpCERROR << "C++-like error trace" << std::endl; // stderr
 
   // Printing if VP_DEBUG defined and VP_DEBUG_MODE value >= 2
@@ -136,7 +138,7 @@ int main()
 */
 class vpTraceOutput
 {
-private:
+  private:
     const char* currentFile; //Name of the file to use in the displays
     const char* currentFunc; //Name of the function to use in the displays
     int currentLine;		 //Line to use in the displays
@@ -146,7 +148,7 @@ private:
     //string to display before anything else
     const char* header;
 
-public:
+  public:
     /*!
       Constructor.
       \param file Should be the name of the file where this constructor was called.
@@ -157,37 +159,37 @@ public:
       \note Call the constructor with something like vpTraceOutput(__FILE__,__LINE__, __FUNCTION__).
     */
     vpTraceOutput(const char* file, int line, const char* func, bool error=false, const char * s=NULL) :
-        currentFile(file),
-	currentFunc(func),
-	currentLine(line),
-	err(error),
-	header(s)
+      currentFile(file),
+      currentFunc(func),
+      currentLine(line),
+      err(error),
+      header(s)
     {}
 
     /*!
       Displays a string if the debug level is inferior to VP_DEBUG_MODE.
-      \param niv Level of this message.
+      \param level Level of this message.
       \param format Formating string.
     */
-    void operator()(int niv, const char* format, ...)
+    void operator()(int level, const char* format, ...)
     {
-	//if the niv level is inferior to VP_DEBUG_MODE
-	if(VP_DEBUG_MODE >= niv)
-	{
-	    //gets the variable list of arguments
-	    va_list args;
-	    va_start(args, format);
-	    
-	    if (err)
-		std::cerr << "(N" << niv << ") " ;
-	    else
-		std::cout << "(N" << niv << ") " ;
-
-	    //calls display with it
-	    display(format, args);
-
-	    va_end(args);
-	}
+      //if the level is inferior to VP_DEBUG_MODE
+      if(VP_DEBUG_MODE >= level)
+      {
+        //gets the variable list of arguments
+        va_list args;
+        va_start(args, format);
+
+        if (err)
+          std::cerr << "(L" << level << ") " ;
+        else
+          std::cout << "(L" << level << ") " ;
+
+        //calls display with it
+        display(format, args);
+
+        va_end(args);
+      }
     }
 
     /*!
@@ -196,18 +198,18 @@ public:
     */
     void operator()(const char* format, ...)
     {
-	//gets the variable list of arguments
-	va_list args;
-	va_start(args, format);
+      //gets the variable list of arguments
+      va_list args;
+      va_start(args, format);
 
 #ifdef VP_DEBUG
-	std::cout<<"(N0) ";
+      std::cout<<"(L0) ";
 #endif
 
-	//calls display with it
-	display(format, args);
+      //calls display with it
+      display(format, args);
 
-	va_end(args);
+      va_end(args);
     }
 
     /*!
@@ -221,31 +223,31 @@ public:
     */
     void display(const char* format, va_list args)
     {
-	//if we want to write to std::cerr/stderr
-	if(err)
-	{
-	    //first writes the header if there is one
-	    if(header != NULL) std::cerr<<header;
-	    //then writes the recorded namefile, function and line
-	    std::cerr << "!!\t" << currentFile << ": " <<currentFunc << "(#" << currentLine << ") :" ;
-	    //and finally writes the message passed to () operator.
-	    vfprintf (stderr, format, args);
-	    fprintf (stderr, "\n");
-	    //flushes the buffer
-	    fflush (stderr);
-	}
-	else
-	{
-	    //first writes the header if there is one
-	    if(header != NULL) std::cout<<header;
-	    //then writes the recorded namefile, function and line
-	    std::cout <<currentFile << ": " << currentFunc << "(#" << currentLine << ") :" ;
-	    //and finally writes the message passed to () operator.
-	    vprintf (format, args);
-	    printf ("\n");
-	    //flushes the buffer
-	    fflush (stdout);
-	}
+      //if we want to write to std::cerr/stderr
+      if(err)
+      {
+        //first writes the header if there is one
+        if(header != NULL) std::cerr<<header;
+        //then writes the recorded namefile, function and line
+        std::cerr << "!!\t" << currentFile << ": " <<currentFunc << "(#" << currentLine << ") : " ;
+        //and finally writes the message passed to () operator.
+        vfprintf (stderr, format, args);
+        fprintf (stderr, "\n");
+        //flushes the buffer
+        fflush (stderr);
+      }
+      else
+      {
+        //first writes the header if there is one
+        if(header != NULL) std::cout<<header;
+        //then writes the recorded namefile, function and line
+        std::cout <<currentFile << ": " << currentFunc << "(#" << currentLine << ") : " ;
+        //and finally writes the message passed to () operator.
+        vprintf (format, args);
+        printf ("\n");
+        //flushes the buffer
+        fflush (stdout);
+      }
     }
 
 };
@@ -255,11 +257,14 @@ public:
 /* --- vpTRACE IN/OUT FONCTION --------------------------------------------- */
 /* ------------------------------------------------------------------------- */
 
+#ifdef VP_TRACE        // Activate the trace mode
+
 /*!
   \ingroup Debug
   Works like vpTRACE() and should be used at the beginning of a function.
 
   \code
+#define VP_TRACE // To activate the trace mode
 #include <visp/vpDebug.h>
 
 int main()
@@ -280,6 +285,7 @@ int main()
   Works like vpTRACE() and should be used at the end of a function.
 
   \code
+#define VP_TRACE // To activate the trace mode
 #include <visp/vpDebug.h>
 
 int main()
@@ -294,27 +300,35 @@ int main()
 */
 #define vpOUT_FCT (vpTraceOutput(__FILE__,__LINE__, __FUNCTION__, false, "end "))
 
+#else // #ifdef VP_TRACE
+
+inline void vpIN_FCT (const char * /* a */, ...){}
+inline void vpOUT_FCT (const char * /* a */, ...){}
 
+#endif // #ifdef VP_TRACE
 
 /* -------------------------------------------------------------------------- */
 /* --- vpTRACE -------------------------------------------------------------- */
 /* -------------------------------------------------------------------------- */
 
+#ifdef VP_TRACE
+
 /*!
   \ingroup Debug
   Used to display trace messages on the standard stream (C++).
   Use like this : vpCTRACE<<"my message"<<std::endl;
 
   \code
-#define VP_DEBUG        // Activate the debug mode
-#define VP_DEBUG_MODE 2 // Activate debug level 1 and 2
+#define VP_TRACE        // To activate trace mode
+#define VP_DEBUG        // To activate the debug mode
+#define VP_DEBUG_MODE 2 // To activate debug level 1 and 2
 
 #include <visp/vpDebug.h>
 
 int main()
 {
   // C++-like debug printings
-  vpCTRACE << "C++-like debug trace" << std::endl; // stdout
+  vpCTRACE << "C++-like trace" << std::endl; // stdout
   vpCERROR << "C++-like error trace" << std::endl; // stderr
 
   // Printing if VP_DEBUG defined and VP_DEBUG_MODE value >= 2
@@ -324,7 +338,7 @@ int main()
 
   \sa vpTRACE(), vpCERROR(), vpCDEBUG()
 */
-#define vpCTRACE std::cout << __FILE__ << ": " << __FUNCTION__ << "(#" << __LINE__ << ") :"
+#define vpCTRACE std::cout << "(L0) " << __FILE__ << ": " << __FUNCTION__ << "(#" << __LINE__ << ") : "
 
 
 /*!
@@ -333,15 +347,16 @@ int main()
   Use like this : vpCERROR<<"my message"<<std::endl;
 
   \code
-#define VP_DEBUG        // Activate the debug mode
-#define VP_DEBUG_MODE 2 // Activate debug level 1 and 2
+#define VP_TRACE        // To activate trace mode
+#define VP_DEBUG        // To activate the debug mode
+#define VP_DEBUG_MODE 2 // To activate debug level 1 and 2
 
 #include <visp/vpDebug.h>
 
 int main()
 {
   // C++-like debug printings
-  vpCTRACE << "C++-like debug trace" << std::endl; // stdout
+  vpCTRACE << "C++-like trace" << std::endl; // stdout
   vpCERROR << "C++-like error trace" << std::endl; // stderr
 
   // Printing if VP_DEBUG defined and VP_DEBUG_MODE value >= 2
@@ -351,7 +366,7 @@ int main()
 
   \sa vpCTRACE(), vpCDEBUG()
 */
-#define vpCERROR std::cerr << "!!\t" << __FILE__ << ": " << __FUNCTION__ << "(#" << __LINE__ << ") :"
+#define vpCERROR std::cerr << "(L0) " << "!!\t" << __FILE__ << ": " << __FUNCTION__ << "(#" << __LINE__ << ") : "
 
 /*!
   \ingroup Debug
@@ -362,6 +377,7 @@ int main()
   with any "printf" string.
 
   \code
+#define VP_TRACE // To activate trace mode
 #define VP_DEBUG_MODE 2 // Activate debug level 1 and 2
 
 #include <visp/vpDebug.h>
@@ -387,6 +403,7 @@ int main()
   with any "printf" string.
 
   \code
+#define VP_TRACE // To activate trace mode
 #include <visp/vpDebug.h>
 
 int main()
@@ -400,6 +417,17 @@ int main()
 */
 #define vpTRACE (vpTraceOutput( __FILE__,__LINE__, __FUNCTION__, false))
 
+#else // #ifdef VP_TRACE
+
+#define vpCTRACE if(false) std::cout // Warning C4127
+#define vpCERROR if(false) std::cerr // Warning C4127
+
+inline void vpERROR_TRACE (const char * /* a */, ...){}
+inline void vpERROR_TRACE (int /* level */, const char * /* a */, ...){}
+inline void vpTRACE (const char * /* a */, ...){}
+inline void vpTRACE (int /* level */, const char * /* a */, ...){}
+
+#endif // #ifdef VP_TRACE
 
 /* ------------------------------------------------------------------------- */
 /* --- VP_DEBUG ------------------------------------------------------------ */
@@ -410,7 +438,7 @@ int main()
 /*!
   \ingroup Debug
   vpDERROR_TRACE works like printf, but prints only if the
-  tracing level niv is greater than the debug level VP_DEBUG_MODE.
+  tracing level is smaller than the debug level VP_DEBUG_MODE.
 
   \code
 #define VP_DEBUG        // Activate the debug mode
@@ -433,7 +461,7 @@ int main()
 /*!
   \ingroup Debug
   vpDEBUG_TRACE works like printf, but prints only if the
-  tracing level niv is greater than the debug level VP_DEBUG_MODE.
+  tracing level level is greater than the debug level VP_DEBUG_MODE.
 
   \code
 #define VP_DEBUG        // Activate the debug mode
@@ -455,7 +483,7 @@ int main()
 
 /*!
   \ingroup Debug
-  vpCDEBUG(niv) work like the C++ output stream std::cout.
+  vpCDEBUG(level) work like the C++ output stream std::cout.
   \code
 #define VP_DEBUG        // Activate the debug mode
 #define VP_DEBUG_MODE 2 // Activate debug level 1 and 2
@@ -465,7 +493,7 @@ int main()
 int main()
 {
   // C++-like debug printings
-  vpCTRACE << "C++-like debug trace" << std::endl; // stdout
+  vpCTRACE << "C++-like trace" << std::endl; // stdout
   vpCERROR << "C++-like error trace" << std::endl; // stderr
 
   // Printing if VP_DEBUG defined and VP_DEBUG_MODE value >= 2
@@ -475,13 +503,13 @@ int main()
 
   \sa vpCTRACE(), vpCERROR()
 */
-#define vpCDEBUG(niv) if (VP_DEBUG_MODE < niv) ; else \
-		std::cout << "(N" << niv << ") "<<  __FILE__ << ": " << __FUNCTION__ << "(#" << __LINE__ << ") :"
+#define vpCDEBUG(level) if (VP_DEBUG_MODE < level) ; else \
+    std::cout << "(L" << level << ") "<<  __FILE__ << ": " << __FUNCTION__ << "(#" << __LINE__ << ") : "
 
 /*!
   \ingroup Debug
 
-  vpDEBUG_ENABLE(niv) is equal to 1 if the debug level \e niv is greater than
+  vpDEBUG_ENABLE(level) is equal to 1 if the debug level \e level is greater than
   the debug mode VP_DEBUG_MODE, 0 else.
 
   \code
@@ -499,17 +527,19 @@ int main()
 }  
   \endcode
 */
-#define vpDEBUG_ENABLE(niv) (VP_DEBUG_MODE >= niv)
+#define vpDEBUG_ENABLE(level) (VP_DEBUG_MODE >= level)
 
-#else
+#else // #ifdef VP_DEBUG
 
-inline void vpDERROR_TRACE(int /* niv */, const char * /* a */, ...){}
-inline void vpDEBUG_TRACE(int /* niv */, const char * /* a */, ...){}
+inline void vpDERROR_TRACE(const char * /* a */, ...){}
+inline void vpDEBUG_TRACE(const char * /* a */, ...){}
+inline void vpDERROR_TRACE(int /* level */, const char * /* a */, ...){}
+inline void vpDEBUG_TRACE(int /* level */, const char * /* a */, ...){}
 
-#define vpCDEBUG(niv) if(false) std::cout // Warning C4127
-#define vpDEBUG_ENABLE(niv) (false)       // Warning C4127
+#define vpCDEBUG(level) if(false) std::cout // Warning C4127
+#define vpDEBUG_ENABLE(level) (false)       // Warning C4127
 
-#endif
+#endif // #ifdef VP_DEBUG
 
 /* -------------------------------------------------------------------------- */
 /* --- DEFENSIF ------------------------------------------------------------- */
@@ -522,9 +552,3 @@ inline void vpDEBUG_TRACE(int /* niv */, const char * /* a */, ...){}
 
 
 #endif /* #ifdef __DEBUG_HH */
-
-/*
- * Local variables:
- * c-basic-offset: 4
- * End:
- */
diff --git a/src/tools/xml/vpXmlParser.cpp b/src/tools/xml/vpXmlParser.cpp
index 086d9af1..28a59ec7 100755
--- a/src/tools/xml/vpXmlParser.cpp
+++ b/src/tools/xml/vpXmlParser.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpXmlParser.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpXmlParser.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,9 +58,8 @@
   
   Initialise the main tag with default value.
 */
-vpXmlParser::vpXmlParser()
+vpXmlParser::vpXmlParser() : nodeMap(), main_tag("config")
 {
-  main_tag = "config";
 }
 
 /*!
@@ -88,6 +87,7 @@ vpXmlParser::~vpXmlParser()
   \param _twin : The parser to copy.
 */
 vpXmlParser::vpXmlParser(const vpXmlParser& _twin)
+ : nodeMap(), main_tag("config")
 {
   main_tag = _twin.main_tag;
   nodeMap = _twin.nodeMap;
@@ -387,7 +387,9 @@ vpXmlParser::save(const std::string& filename, const bool append)
   else{
   	if(!append){
       xmlFreeDoc(doc);
-  		remove(filename.c_str());
+      if (remove(filename.c_str()) != 0)
+        throw vpException(vpException::ioError, "Cannot remove existing xml file");
+
   		doc = xmlNewDoc ((xmlChar*)"1.0");
   		root_node = xmlNewNode(NULL, (xmlChar*)main_tag.c_str());
   		xmlDocSetRootElement(doc, root_node);
diff --git a/src/tools/xml/vpXmlParser.h b/src/tools/xml/vpXmlParser.h
index 97c0b6ec..76d6bff3 100755
--- a/src/tools/xml/vpXmlParser.h
+++ b/src/tools/xml/vpXmlParser.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpXmlParser.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpXmlParser.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/dots/vpDot.cpp b/src/tracking/dots/vpDot.cpp
index b6813920..1955089a 100644
--- a/src/tracking/dots/vpDot.cpp
+++ b/src/tracking/dots/vpDot.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDot.cpp 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpDot.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -55,6 +55,10 @@
 #include <visp/vpTrackingException.h>
 #include <vector>
 
+#ifdef VISP_USE_MSVC
+#  pragma comment(linker, "/STACK:256000000") // Increase max recursion depth
+#endif
+
 /*
   \class vpDot
   \brief Track a white dot
@@ -95,9 +99,13 @@ void vpDot::init()
   nbMaxPoint = 0;
 }
 
-vpDot::vpDot() : vpTracker()
+vpDot::vpDot()
+  : m00(0.), m01(0.), m10(0.), m11(0.), m20(0.), m02(0.),
+    mu11(0.), mu20(0.), mu02(0.), ip_connexities_list(), ip_edges_list(), connexityType(CONNEXITY_4),
+    cog(), u_min(0), u_max(0), v_min(0), v_max(0), graphics(false), thickness(1), maxDotSizePercentage(0.25),
+    gray_level_out(0), mean_gray_level(0), gray_level_min(128), gray_level_max(255), grayLevelPrecision(0.85),
+    gamma(1.5), compute_moment(false), nbMaxPoint(0)
 {
-  init() ;
 }
 
 /*!
@@ -105,17 +113,26 @@ vpDot::vpDot() : vpTracker()
 
   \param ip : An image point with sub-pixel coordinates.
  */
-vpDot::vpDot(const vpImagePoint &ip) : vpTracker()
+vpDot::vpDot(const vpImagePoint &ip)
+  : m00(0.), m01(0.), m10(0.), m11(0.), m20(0.), m02(0.),
+    mu11(0.), mu20(0.), mu02(0.), ip_connexities_list(), ip_edges_list(), connexityType(CONNEXITY_4),
+    cog(), u_min(0), u_max(0), v_min(0), v_max(0), graphics(false), thickness(1), maxDotSizePercentage(0.25),
+    gray_level_out(0), mean_gray_level(0), gray_level_min(128), gray_level_max(255), grayLevelPrecision(0.85),
+    gamma(1.5), compute_moment(false), nbMaxPoint(0)
 {
-  init() ;
-
   cog = ip;
 }
 
 /*!
   \brief Copy constructor.
  */
-vpDot::vpDot(const vpDot& d)  : vpTracker()
+vpDot::vpDot(const vpDot& d)
+  : vpTracker(d),
+    m00(0.), m01(0.), m10(0.), m11(0.), m20(0.), m02(0.),
+    mu11(0.), mu20(0.), mu02(0.), ip_connexities_list(), ip_edges_list(), connexityType(CONNEXITY_4),
+    cog(), u_min(0), u_max(0), v_min(0), v_max(0), graphics(false), thickness(1), maxDotSizePercentage(0.25),
+    gray_level_out(0), mean_gray_level(0), gray_level_min(128), gray_level_max(255), grayLevelPrecision(0.85),
+    gamma(1.5), compute_moment(false), nbMaxPoint(0)
 {
   *this = d ;
 }
@@ -125,7 +142,6 @@ vpDot::vpDot(const vpDot& d)  : vpTracker()
  */
 vpDot::~vpDot()
 {
-
   ip_connexities_list.clear() ;
 }
 
@@ -743,10 +759,10 @@ vpDot::initTracking(const vpImage<unsigned char>& I, const vpImagePoint &ip)
   \param ip : Location of the starting point from which the dot will
   be tracked in the image.
 
-  \param gray_level_min : Minimum gray level threshold used to segment the dot;
+  \param level_min : Minimum gray level threshold used to segment the dot;
   value comprised between 0 and 255.
 
-  \param gray_level_max : Maximum gray level threshold used to segment the
+  \param level_max : Maximum gray level threshold used to segment the
   dot; value comprised between 0 and 255. \e gray_level_max should be
   greater than \e gray_level_min.
 
@@ -754,13 +770,13 @@ vpDot::initTracking(const vpImage<unsigned char>& I, const vpImagePoint &ip)
 */
 void
 vpDot::initTracking(const vpImage<unsigned char>& I, const vpImagePoint &ip,
-		    unsigned int gray_level_min, unsigned int gray_level_max)
+                    unsigned int level_min, unsigned int level_max)
 {
 
   cog = ip ;
 
-  this->gray_level_min = gray_level_min;
-  this->gray_level_max = gray_level_max;
+  this->gray_level_min = level_min;
+  this->gray_level_max = level_max;
 
   try {
     track( I );
@@ -832,14 +848,14 @@ vpDot::track(const vpImage<unsigned char> &I)
 
   \param I : Image to process.
 
-  \param cog [out] : Sub pixel coordinate of the tracked dot.
+  \param ip [out] : Sub pixel coordinate of the tracked dot center of gravity.
 */
 void
-vpDot::track(const vpImage<unsigned char> &I, vpImagePoint &cog)
+vpDot::track(const vpImage<unsigned char> &I, vpImagePoint &ip)
 {
   track( I ) ;
 
-  cog = this->cog;
+  ip = this->cog;
 }
 
 /*!
@@ -847,12 +863,11 @@ vpDot::track(const vpImage<unsigned char> &I, vpImagePoint &cog)
 
   \param I : Image.
   \param color : The color used for the display.
-  \param thickness : Thickness of the displayed cross located at the dot cog.
+  \param thick : Thickness of the displayed cross located at the dot cog.
 */
-void vpDot::display(const vpImage<unsigned char>& I, vpColor color,
-                     unsigned int thickness)
+void vpDot::display(const vpImage<unsigned char>& I, vpColor color, unsigned int thick) const
 {
-  vpDisplay::displayCross(I, cog, 3*thickness+8, color, thickness);
+  vpDisplay::displayCross(I, cog, 3*thickness+8, color, thick);
   std::list<vpImagePoint>::const_iterator it;
 
   for (it = ip_edges_list.begin(); it != ip_edges_list.end(); ++it)
@@ -865,7 +880,7 @@ void vpDot::display(const vpImage<unsigned char>& I, vpColor color,
 
   Set the precision of the gray level of the dot.
 
-  \param grayLevelPrecision : It is a double precision float which value is 
+  \param precision : It is a double precision float which value is
   in ]0,1]:
   - 1 means full precision, whereas values close to 0 show a very bad accuracy.
   - Values lower or equal to 0 are brought back to an epsion>0
@@ -878,7 +893,7 @@ void vpDot::display(const vpImage<unsigned char>& I, vpColor color,
 
   \sa setWidth(), setHeight(), setGrayLevelMin(), setGrayLevelMax()
 */
-void vpDot::setGrayLevelPrecision( const double & grayLevelPrecision )
+void vpDot::setGrayLevelPrecision( const double & precision )
 {
   double epsilon = 0.05;
   if( grayLevelPrecision<epsilon )
@@ -891,7 +906,7 @@ void vpDot::setGrayLevelPrecision( const double & grayLevelPrecision )
   }
   else
   {
-    this->grayLevelPrecision = grayLevelPrecision;
+    this->grayLevelPrecision = precision;
   }
 }
 
@@ -949,5 +964,13 @@ void vpDot::display(const vpImage<vpRGBa>& I,const vpImagePoint &cog,
   }
 }
 
+/*!
+  Writes the dot center of gravity coordinates in the frame (i,j) (For more details
+  about the orientation of the frame see the vpImagePoint documentation) to the stream \e os,
+  and returns a reference to the stream.
+*/
+VISP_EXPORT std::ostream& operator<< (std::ostream& os, vpDot& d) {
+  return (os << "(" << d.getCog() << ")" ) ;
+} ;
 
 
diff --git a/src/tracking/dots/vpDot.h b/src/tracking/dots/vpDot.h
index bd4debb0..96d08644 100644
--- a/src/tracking/dots/vpDot.h
+++ b/src/tracking/dots/vpDot.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpDot.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpDot.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -54,10 +54,6 @@
 #include <visp/vpRect.h>
 #include <visp/vpImagePoint.h>
 
-#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
-#  include <visp/vpList.h>
-#endif
-
 #include <math.h>
 #include <fstream>
 #include <list>
@@ -200,7 +196,7 @@ public :
   virtual ~vpDot() ;
 
   void display(const vpImage<unsigned char>& I, vpColor color = vpColor::red,
-               unsigned int thickness=1);
+               unsigned int thickness=1) const;
 
   /*!
 
@@ -209,7 +205,7 @@ public :
     \sa getWidth(), getHeight()
 
   */
-  inline vpRect getBBox() {
+  inline vpRect getBBox() const {
     vpRect bbox;
 
     bbox.setRect(this->u_min,
@@ -233,7 +229,7 @@ public :
 
       \warning Doesn't return the image points inside the dot anymore. To get those points see getConnexities().
   */
-  inline std::list<vpImagePoint> getEdges() {
+  inline std::list<vpImagePoint> getEdges() const {
     return this->ip_edges_list;
   };
 
@@ -245,11 +241,11 @@ public :
     This list is updated after a call to track().
 
   */
-  inline std::list<vpImagePoint> getConnexities() {
+  inline std::list<vpImagePoint> getConnexities() const {
     return this->ip_connexities_list;
   };
 
-  inline double getGamma() {return this->gamma;};
+  inline double getGamma() const {return this->gamma;};
   /*!
 
     Return the precision of the gray level of the dot. It is a double
@@ -258,13 +254,13 @@ public :
 
   */
   double getGrayLevelPrecision() const {return grayLevelPrecision;}
-  double getMaxDotSize(){
+  double getMaxDotSize() const {
     return this->maxDotSizePercentage;
   }
   /*!
     Return the mean gray level value of the dot.
   */
-  double getMeanGrayLevel() {
+  double getMeanGrayLevel() const {
     return (this->mean_gray_level);
   };
 
@@ -298,22 +294,15 @@ public :
   vpDot& operator =(const vpDot& d) ;
   bool operator ==(const vpDot& d);
   bool operator !=(const vpDot& d);
-  /*!
-    Writes the dot center of gravity coordinates in the frame (i,j) (For more details
-    about the orientation of the frame see the vpImagePoint documentation) to the stream \e os,
-    and returns a reference to the stream.
-  */
-  friend VISP_EXPORT std::ostream& operator<< (std::ostream& os, vpDot& d) {
-    return (os << "(" << d.getCog() << ")" ) ;
-  } ;
+  friend VISP_EXPORT std::ostream& operator<< (std::ostream& os, vpDot& d);
 
   void print(std::ostream& os) { os << *this << std::endl ; }
 
   /*!
-    Initialize the dot coordinates with \e cog.
+    Initialize the dot coordinates with \e ip.
   */
-  inline void setCog(const vpImagePoint &cog) {
-    this->cog = cog;
+  inline void setCog(const vpImagePoint &ip) {
+    this->cog = ip;
   }
 
   /*!
@@ -335,13 +324,13 @@ public :
   /*!
     Set the type of connexity: 4 or 8.
   */
-  void setConnexity(vpConnexityType connexityType) {this->connexityType = connexityType; };
+  void setConnexity(vpConnexityType type) {this->connexityType = type; };
   void setMaxDotSize(double percentage) ;
-  void setGrayLevelMin( const unsigned int &gray_level_min ) {
-    this->gray_level_min = gray_level_min;
+  void setGrayLevelMin( const unsigned int &level_min ) {
+    this->gray_level_min = level_min;
   };
-  void setGrayLevelMax( const unsigned int &gray_level_max ) {
-    this->gray_level_max = gray_level_max;
+  void setGrayLevelMax( const unsigned int &level_max ) {
+    this->gray_level_max = level_max;
   };
   void setGrayLevelPrecision( const double & grayLevelPrecision );
 
@@ -364,7 +353,7 @@ public :
 
     \sa setGraphics()
     */
-  void setGraphicsThickness(unsigned int thickness) {this->thickness = thickness;};
+  void setGraphicsThickness(unsigned int t) {this->thickness = t;};
 
   void track(const vpImage<unsigned char> & I) ;
   void track(const vpImage<unsigned char> & I, vpImagePoint &ip) ;
@@ -423,45 +412,6 @@ public:
   static void display(const vpImage<vpRGBa>& I,const vpImagePoint &cog,
                       const std::list<vpImagePoint> &edges_list, vpColor color = vpColor::red,
                       unsigned int thickness=1);
-
-#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
-  /*!
-    @name Deprecated functions
-  */
-  /*!
-
-    \deprecated This method is deprecated since the naming is not representative regarding to its functionality. \n
-    Previously it returned all the points inside the dot. To get the equivalent, use getConnexities(). \n \n
-    If you rather want to get the points on the dot border use getEdges(). 
-
-    \param edges_list : The list of all the images points on the dot
-    border. This list is update after a call to track().
-
-  */
-  vp_deprecated void getEdges(std::list<vpImagePoint> &edges_list) {
-    edges_list = this->ip_edges_list;
-  };
-  
-  /*!
-
-    \deprecated This method is deprecated. You should use
-    getEdges(std::list<vpImagePoint> &) instead.\n \n
-    Return the list of all the image points on the dot
-    border.
-
-    \param connexities_list : The list of all the images points on the dot
-    border. This list is update after a call to track().
-
-  */
-  vp_deprecated void getConnexities(vpList<vpImagePoint> &connexities_list) {
-    // convert a vpList in a std::list
-    connexities_list.kill();
-    std::list<vpImagePoint>::const_iterator it;
-    for (it = ip_connexities_list.begin(); it != ip_connexities_list.end(); ++it) {
-      connexities_list += *it;
-    }
-  };
-#endif
 } ;
 
 #endif
diff --git a/src/tracking/dots/vpDot2.cpp b/src/tracking/dots/vpDot2.cpp
index a2bf66a6..ece7b130 100644
--- a/src/tracking/dots/vpDot2.cpp
+++ b/src/tracking/dots/vpDot2.cpp
@@ -3,7 +3,7 @@
  * $Id: vpDot2.cpp 2135 2009-04-29 13:51:31Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -89,7 +89,8 @@ void vpDot2::init()
   ellipsoidShapePrecision = 0.65;
   maxSizeSearchDistancePrecision = 0.65;
   setEllipsoidBadPointsPercentage();
-  m00 = m11 = m02 = m20 = m10 = m01 = 0 ;
+  m00 = m11 = m02 = m20 = m10 = m01 = 0.;
+  mu11 = mu02 = mu20 = 0.;
 
   bbox_u_min = bbox_u_max = bbox_v_min = bbox_v_max = 0;
 
@@ -104,9 +105,15 @@ void vpDot2::init()
 /*!
   Default constructor. Just do basic default initialization.
 */
-vpDot2::vpDot2() : vpTracker()
+vpDot2::vpDot2()
+  : m00(0.), m10(0.), m01(0.), m11(0.), m20(0.), m02(0.),
+    mu11(0.), mu20(0.), mu02(0.), cog(), width(0), height(0), surface(0),
+    gray_level_min(128), gray_level_max(255), mean_gray_level(0), grayLevelPrecision(0.8), gamma(1.5),
+    sizePrecision(0.65), ellipsoidShapePrecision(0.65), maxSizeSearchDistancePrecision(0.65),
+    allowedBadPointsPercentage_(0.), area(), direction_list(), ip_edges_list(), compute_moment(false),
+    graphics(false), thickness(1), bbox_u_min(0), bbox_u_max(0), bbox_v_min(0), bbox_v_max(0),
+    firstBorder_u(0), firstBorder_v()
 {
-  init();
 }
 
 /*!
@@ -117,17 +124,30 @@ vpDot2::vpDot2() : vpTracker()
   \param ip : An image point with sub-pixel coordinates.
 
 */
-vpDot2::vpDot2(const vpImagePoint &ip) : vpTracker()
+vpDot2::vpDot2(const vpImagePoint &ip)
+  : m00(0.), m10(0.), m01(0.), m11(0.), m20(0.), m02(0.),
+    mu11(0.), mu20(0.), mu02(0.), cog(), width(0), height(0), surface(0),
+    gray_level_min(128), gray_level_max(255), mean_gray_level(0), grayLevelPrecision(0.8), gamma(1.5),
+    sizePrecision(0.65), ellipsoidShapePrecision(0.65), maxSizeSearchDistancePrecision(0.65),
+    allowedBadPointsPercentage_(0.), area(), direction_list(), ip_edges_list(), compute_moment(false),
+    graphics(false), thickness(1), bbox_u_min(0), bbox_u_max(0), bbox_v_min(0), bbox_v_max(0),
+    firstBorder_u(0), firstBorder_v()
 {
-  init() ;
-
   cog = ip;
 }
 
 /*!
   Copy constructor.
 */
-vpDot2::vpDot2(const vpDot2& twinDot ) : vpTracker()
+vpDot2::vpDot2(const vpDot2& twinDot )
+  : vpTracker(twinDot),
+    m00(0.), m10(0.), m01(0.), m11(0.), m20(0.), m02(0.),
+    mu11(0.), mu20(0.), mu02(0.), cog(), width(0), height(0), surface(0),
+    gray_level_min(128), gray_level_max(255), mean_gray_level(0), grayLevelPrecision(0.8), gamma(1.5),
+    sizePrecision(0.65), ellipsoidShapePrecision(0.65), maxSizeSearchDistancePrecision(0.65),
+    allowedBadPointsPercentage_(0.), area(), direction_list(), ip_edges_list(), compute_moment(false),
+    graphics(false), thickness(1), bbox_u_min(0), bbox_u_max(0), bbox_v_min(0), bbox_v_max(0),
+    firstBorder_u(0), firstBorder_v()
 {
   *this = twinDot;
 }
@@ -135,7 +155,7 @@ vpDot2::vpDot2(const vpDot2& twinDot ) : vpTracker()
 /*!
   = operator.
 */
-void vpDot2::operator=(const vpDot2& twinDot )
+vpDot2& vpDot2::operator=(const vpDot2& twinDot )
 {
   cog = twinDot.cog;
 
@@ -178,6 +198,8 @@ void vpDot2::operator=(const vpDot2& twinDot )
   mu11 = twinDot.mu11;
   mu20 = twinDot.mu20;
   mu02 = twinDot.mu02;
+
+  return (*this);
 }
 
 /*!
@@ -196,12 +218,11 @@ vpDot2::~vpDot2(){}
 
   \param I : Image.
   \param color : The color used for the display.
-  \param thickness : Thickness of the displayed cross located at the dot cog.
+  \param t : Thickness of the displayed cross located at the dot cog.
 */
-void vpDot2::display(const vpImage<unsigned char>& I, vpColor color,
-                     unsigned int thickness)
+void vpDot2::display(const vpImage<unsigned char>& I, vpColor color, unsigned int t) const
 {
-  vpDisplay::displayCross(I, cog, 3*thickness+8, color, thickness);
+  vpDisplay::displayCross(I, cog, 3*t+8, color, t);
   std::list<vpImagePoint>::const_iterator it;
 
   for (it = ip_edges_list.begin(); it != ip_edges_list.end(); ++it)
@@ -353,10 +374,10 @@ void vpDot2::initTracking(const vpImage<unsigned char>& I,
   \param ip : Location of the starting point from which the dot will
   be tracked in the image.
 
-  \param gray_level_min : Minimum gray level threshold used to segment the dot;
+  \param gray_lvl_min : Minimum gray level threshold used to segment the dot;
   value comprised between 0 and 255.
 
-  \param gray_level_max : Maximum gray level threshold used to segment the
+  \param gray_lvl_max : Maximum gray level threshold used to segment the
   dot; value comprised between 0 and 255. \e gray_level_max should be
   greater than \e gray_level_min.
 
@@ -379,14 +400,14 @@ void vpDot2::initTracking(const vpImage<unsigned char>& I,
 */
 void vpDot2::initTracking(const vpImage<unsigned char>& I,
                           const vpImagePoint &ip,
-                          unsigned int gray_level_min,
-                          unsigned int gray_level_max,
+                          unsigned int gray_lvl_min,
+                          unsigned int gray_lvl_max,
                           unsigned int size)
 {
   cog = ip ;
 
-  this->gray_level_min = gray_level_min;
-  this->gray_level_max = gray_level_max;
+  this->gray_level_min = gray_lvl_min;
+  this->gray_level_max = gray_lvl_max;
 
   setWidth(size);
   setHeight(size);
@@ -598,7 +619,7 @@ void vpDot2::track(const vpImage<unsigned char> &I)
 
   \param I : Image to process.
 
-  \param cog [out] : Sub pixel coordinate of the tracked dot.
+  \param ip [out] : Sub pixel coordinate of the tracked dot center of gravity.
 
   The behavior of this method is similar to the following code:
   \code
@@ -610,11 +631,11 @@ void vpDot2::track(const vpImage<unsigned char> &I)
   \sa track()
 */
 void
-vpDot2::track(const vpImage<unsigned char> &I, vpImagePoint &cog)
+vpDot2::track(const vpImage<unsigned char> &I, vpImagePoint &ip)
 {
   track(I);
 
-  cog = this->cog;
+  ip = this->cog;
 }
 
 ///// GET METHODS /////////////////////////////////////////////////////////////
@@ -639,20 +660,6 @@ double vpDot2::getHeight() const
   return height;
 }
 
-/*!
-  Return the area of the dot.
-
-  \warning This function is deprecated since it is mis named. Surface means here area.
-  You should rather use getArea().
-
-  The area of the dot is also given by \f$|m00|\f$.
-
-  \sa getArea()
-*/
-double vpDot2::getSurface() const
-{
-  return fabs(surface);
-}
 /*!
   Return the area of the dot.
 
@@ -724,13 +731,13 @@ double vpDot2::getDistance( const vpDot2& distantDot ) const
   Set the width of the dot. This is meant to be used to search a dot in an
   area.
 
-  \param width : Width of a dot to search in a region of interest.
+  \param w : Width of a dot to search in a region of interest.
 
   \sa setHeight(), setArea(), setSizePrecision()
 */
-void vpDot2::setWidth( const double & width )
+void vpDot2::setWidth( const double & w )
 {
-  this->width = width;
+  this->width = w;
 }
 
 /*!
@@ -738,50 +745,35 @@ void vpDot2::setWidth( const double & width )
   Set the height of the dot. This is meant to be used to search a dot in an
   area.
 
-  \param height : Height of a dot to search in a region of interest.
+  \param h : Height of a dot to search in a region of interest.
 
   \sa setWidth(), setArea(), setSizePrecision()
 
 */
-void vpDot2::setHeight( const double & height )
+void vpDot2::setHeight( const double & h )
 {
-  this->height = height;
+  this->height = h;
 }
 
-/*!
-
-  Set the surface of the dot. This is meant to be used to search a dot in a region of interest.
-
-  \warning This function is deprecated since it is mis named. You should rather use setArea()
-
-  \param surface : Here surface means area. Area of a dot to search in a region of interest.
-
-  \sa setWidth(), setHeight(), setArea(), setSizePrecision()
-
-*/
-void vpDot2::setSurface( const double & surface )
-{
-  this->surface = surface;
-}
 /*!
 
   Set the area of the dot. This is meant to be used to search a dot in a region of interest.
 
-  \param area : Area of a dot to search in a region of interest.
+  \param a : Area of a dot to search in a region of interest.
 
   \sa setWidth(), setHeight(), setSizePrecision()
 
 */
-void vpDot2::setArea( const double & area )
+void vpDot2::setArea( const double & a )
 {
-  this->surface = area;
+  this->surface = a;
 }
 
 /*!
 
   Set the precision of the gray level of the dot.
 
-  \param grayLevelPrecision : It is a double precision float which value is in ]0,1]:
+  \param precision : It is a double precision float which value is in ]0,1]:
   - 1 means full precision, whereas values close to 0 show a very bad accuracy.
   - Values lower or equal to 0 are brought back to an epsilon>0
   - Values higher than  1 are brought back to 1
@@ -793,7 +785,7 @@ void vpDot2::setArea( const double & area )
 
   \sa setGrayLevelMin(), setGrayLevelMax()
 */
-void vpDot2::setGrayLevelPrecision( const double & grayLevelPrecision )
+void vpDot2::setGrayLevelPrecision( const double & precision )
 {
   double epsilon = 0.05;
   if( grayLevelPrecision<epsilon )
@@ -806,14 +798,14 @@ void vpDot2::setGrayLevelPrecision( const double & grayLevelPrecision )
   }
   else
   {
-    this->grayLevelPrecision = grayLevelPrecision;
+    this->grayLevelPrecision = precision;
   }
 }
 /*!
 
   Set the precision of the size of the dot. Used to test the validity of the dot
 
-  \param sizePrecision : It is a double precision float which value is in [0,1]:
+  \param precision : It is a double precision float which value is in [0,1]:
   - this is the limit ratio between the tested parameter and the measured one.
     minSize = sizePrecision*originalSize ; maxSize = originalSize/sizePrecision ;
   - 1 means full precision, whereas values close to 0 show a very bad accuracy.
@@ -823,7 +815,7 @@ void vpDot2::setGrayLevelPrecision( const double & grayLevelPrecision )
 
   \sa setWidth(), setHeight(), setArea()
 */
-void vpDot2::setSizePrecision( const double & sizePrecision )
+void vpDot2::setSizePrecision( const double & precision )
 {
   if( sizePrecision<0 )
   {
@@ -835,13 +827,13 @@ void vpDot2::setSizePrecision( const double & sizePrecision )
   }
   else
   {
-    this->sizePrecision = sizePrecision;
+    this->sizePrecision = precision;
   }
 }
 
 /*!
   Indicates if the dot should have an ellipsoid shape to be valid.
-  \param ellipsoidShapePrecision : It is a double precision float which value is in [0,1]:
+  \param precision : It is a double precision float which value is in [0,1]:
 
   - 1 means full precision, whereas values close to 0 show a very bad accuracy.
   - Values lower or equal to 0 are brought back to 0.
@@ -868,7 +860,7 @@ void vpDot2::setSizePrecision( const double & sizePrecision )
 
   \sa getEllipsoidShapePrecision()
 */
-void vpDot2::setEllipsoidShapePrecision(const double & ellipsoidShapePrecision) {
+void vpDot2::setEllipsoidShapePrecision(const double & precision) {
 
   if( ellipsoidShapePrecision<0 )
   {
@@ -880,7 +872,7 @@ void vpDot2::setEllipsoidShapePrecision(const double & ellipsoidShapePrecision)
   }
   else
   {
-    this->ellipsoidShapePrecision = ellipsoidShapePrecision;
+    this->ellipsoidShapePrecision = precision;
   }
 }
 
@@ -889,7 +881,7 @@ void vpDot2::setEllipsoidShapePrecision(const double & ellipsoidShapePrecision)
   Set the precision of the search maximum distance to get the starting point on a dot border. A too low value
   mean a large search area.
 
-  \param maxSizeSearchDistancePrecision : It is a double precision float which value is in [0.05,1]:
+  \param precision : It is a double precision float which value is in [0.05,1]:
   - this is the limit ratio between the tested parameter and the measured one.
      distance < getWidth()/(getSizePrecision()+epsilon);
   - 1 means full precision, whereas values close to 0 show a very bad accuracy.
@@ -897,7 +889,7 @@ void vpDot2::setEllipsoidShapePrecision(const double & ellipsoidShapePrecision)
   - Values higher than 1 are brought back to 1.
 
 */
-void vpDot2::setMaxSizeSearchDistancePrecision( const double & maxSizeSearchDistancePrecision )
+void vpDot2::setMaxSizeSearchDistancePrecision( const double & precision )
 {
   double epsilon = 0.05;
   if( maxSizeSearchDistancePrecision<epsilon )
@@ -910,7 +902,7 @@ void vpDot2::setMaxSizeSearchDistancePrecision( const double & maxSizeSearchDist
   }
   else
   {
-    this->maxSizeSearchDistancePrecision = maxSizeSearchDistancePrecision;
+    this->maxSizeSearchDistancePrecision = precision;
   }
 }
 
@@ -975,572 +967,6 @@ void
 
 ///// CLASS FUNCTIONALITY ////////////////////////////////////////////////////
 
-#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
-/*!
-
-  \deprecated This method is deprecated. You should use
-  searchDotsInArea(vpImage<unsigned char>&,  std::list<vpDot2> &) instead.\n \n
-  Look for a list of dot matching this dot parameters within the entire
-  image.
-
-  \warning Allocates memory for the list of dots returned by this method.
-  Desallocation has to be done by yourself.
-
-  \param I : Image.
-
-  Before calling this method, dot characteristics to found have to be set like:
-
-  \code
-  vpDot2 d;
-
-  // Set dot characteristics for the auto detection
-  d.setWidth(15.0);
-  d.setHeight(12.0);
-  d.setArea(124);
-  d.setGrayLevelMin(164);
-  d.setGrayLevelMax(255);
-  d.setAccuracy(0.65);
-  \endcode
-
-  To search dots in the whole image:
-  \code
-  vpList<vpDot2> * list_d;
-  list_d = d.searchDotsInArea(I, 0, 0, I.getWidth(), I.getHeight()) ;
-  \endcode
-
-  The number of dots found in the area is given by:
-  \code
-  std::cout << list_d->nbElement();
-  \endcode
-
-  To parse all the dots:
-  \code
-  list_d->front();
-  while (! list_d->outside()) {
-    vpDot2 tmp_d;
-    tmp_d = list_d->value() ; // A matching dot found in the image
-    list_d->next() ;
-  }
-  \endcode
-
-  To free memory associated to the list of dots:
-  \code
-  list_d->kill();
-  delete list_d;
-  \endcode
-
-*/
-vpList<vpDot2>* vpDot2::searchDotsInArea(const vpImage<unsigned char>& I)
-{
-  vpList<vpDot2>* niceDotsVector = new vpList<vpDot2>();
-
-  // To avoid a warning due to the usage of the following deprecated function
-  // we duplicate the code
-  {
-    // niceDotsVector = searchDotsInArea( I, 0, 0, I.getWidth(), I.getHeight());
-  }
-  {
-    // Fit the input area in the image; we keep only the common part between this
-    // area and the image.
-    int area_u = 0;
-    int area_v = 0;
-    unsigned int area_w = I.getWidth();
-    unsigned int area_h = I.getHeight();
-    setArea(I, area_u, area_v, area_w, area_h);
-
-    // compute the size of the search grid
-    unsigned int gridWidth;
-    unsigned int gridHeight;
-    getGridSize( gridWidth, gridHeight );
-
-    if (graphics) {
-      // Display the area were the dot is search
-      vpDisplay::displayRectangle(I, area, vpColor::blue, false, thickness);
-      //vpDisplay::flush(I);
-    }
-
-    // start the search loop; for all points of the search grid,
-    // test if the pixel belongs to a valid dot.
-    // if it is so eventually add it to the vector of valid dots.
- //   vpList<vpDot2>* niceDotsVector = new vpList<vpDot2>();
-    vpList<vpDot2>* badDotsVector  = new vpList<vpDot2>();
-
-    vpDot2* dotToTest = NULL;
-    vpDot2 tmpDot;
-
-    unsigned int area_u_min = (unsigned int) area.getLeft();
-    unsigned int area_u_max = (unsigned int) area.getRight();
-    unsigned int area_v_min = (unsigned int) area.getTop();
-    unsigned int area_v_max = (unsigned int) area.getBottom();
-
-    unsigned int u, v;
-    vpImagePoint cogTmpDot;
-
-    for( v=area_v_min ; v<area_v_max ; v=v+gridHeight )
-    {
-      for( u=area_u_min ; u<area_u_max ; u=u+gridWidth )
-      {
-        // if the pixel we're in doesn't have the right color (outside the
-        // graylevel interval), no need to check futher, just get to the
-        // next grid intersection.
-        if( !hasGoodLevel(I, u, v) ) continue;
-
-        // Test if an other germ is inside the bounding box of a dot previously
-        // detected
-        bool good_germ = true;
-        niceDotsVector->front();
-        while( !niceDotsVector->outside() && good_germ == true) {
-          tmpDot = niceDotsVector->value();
-
-          cogTmpDot = tmpDot.getCog();
-          double u0 = cogTmpDot.get_u();
-          double v0 = cogTmpDot.get_v();
-          double half_w = tmpDot.getWidth()  / 2.;
-          double half_h = tmpDot.getHeight() / 2.;
-
-          if ( u >= (u0-half_w) && u <= (u0+half_w) &&
-               v >= (v0-half_h) && v <= (v0+half_h) ) {
-            // Germ is in a previously detected dot
-            good_germ = false;
-          }
-          niceDotsVector->next();
-        }
-
-        if (! good_germ)
-          continue;
-
-        // Compute the right border position for this possible germ
-        unsigned int border_u;
-        unsigned int border_v;
-        if(findFirstBorder(I, u, v, border_u, border_v) == false){
-          // germ is not good.
-          // Jump all the pixels between v,u and v, dotToTest->getFirstBorder_u()
-          u = border_u;
-          v = border_v;
-          continue;
-        }
-
-        badDotsVector->front();
-  #define vpBAD_DOT_VALUE (badDotsVector->value())
-        vpImagePoint cogBadDot;
-
-        std::list<vpImagePoint>::const_iterator it_edges;
-        while( !badDotsVector->outside() && good_germ == true)
-        {
-          if( (double)u >= vpBAD_DOT_VALUE.bbox_u_min
-              && (double)u <= vpBAD_DOT_VALUE.bbox_u_max &&
-              (double)v >= vpBAD_DOT_VALUE.bbox_v_min
-              && (double)v <= vpBAD_DOT_VALUE.bbox_v_max)
-          {
-
-            it_edges = ip_edges_list.begin();
-            while (it_edges != ip_edges_list.end() && good_germ == true)
-            {
-              // Test if the germ belong to a previously detected dot:
-              // - from the germ go right to the border and compare this
-              //   position to the list of pixels of previously detected dots
-              cogBadDot = *it_edges;
-              //if( border_u == cogBadDot.get_u() && v == cogBadDot.get_v()) {
-              if( (std::fabs(border_u - cogBadDot.get_u()) <= vpMath::maximum(std::fabs((double)border_u), std::fabs(cogBadDot.get_u()))*std::numeric_limits<double>::epsilon() )
-                &&
-                    (std::fabs(v - cogBadDot.get_v()) <= vpMath::maximum(std::fabs((double)v), std::fabs(cogBadDot.get_v()))*std::numeric_limits<double>::epsilon() ))
-                {
-                good_germ = false;
-              }
-              ++ it_edges;
-            }
-          }
-          badDotsVector->next();
-        }
-  #undef vpBAD_DOT_VALUE
-
-        if (! good_germ) {
-          // Jump all the pixels between v,u and v, dotToTest->getFirstBorder_u()
-          u = border_u;
-          v = border_v;
-          continue;
-        }
-
-        vpTRACE(4, "Try germ (%d, %d)", u, v);
-
-        vpImagePoint germ;
-        germ.set_u( u );
-        germ.set_v( v );
-
-        // otherwise estimate the width, height and surface of the dot we
-        // created, and test it.
-        if( dotToTest != NULL ) delete dotToTest;
-        dotToTest = getInstance();
-        dotToTest->setCog( germ );
-        dotToTest->setGrayLevelMin ( getGrayLevelMin() );
-        dotToTest->setGrayLevelMax ( getGrayLevelMax() );
-        dotToTest->setGrayLevelPrecision( getGrayLevelPrecision() );
-        dotToTest->setSizePrecision( getSizePrecision() );
-        dotToTest->setGraphics( graphics );
-        dotToTest->setGraphicsThickness( thickness );
-        dotToTest->setComputeMoments( true );
-        dotToTest->setArea( area );
-        dotToTest->setEllipsoidShapePrecision( ellipsoidShapePrecision );
-
-        // first compute the parameters of the dot.
-        // if for some reasons this caused an error tracking
-        // (dot partially out of the image...), check the next intersection
-        if( dotToTest->computeParameters( I ) == false ) {
-          // Jump all the pixels between v,u and v, dotToTest->getFirstBorder_u()
-          u = border_u;
-          v = border_v;
-          continue;
-        }
-        // if the dot to test is valid,
-        if( dotToTest->isValid( I, *this ) )
-        {
-          vpImagePoint cogDotToTest = dotToTest->getCog();
-          // Compute the distance to the center. The center used here is not the
-          // area center available by area.getCenter(area_center_u,
-          // area_center_v) but the center of the input area which may be
-          // partially outside the image.
-
-          double area_center_u = area_u + area_w/2.0 - 0.5;
-          double area_center_v = area_v + area_h/2.0 - 0.5;
-
-          double thisDiff_u = cogDotToTest.get_u() - area_center_u;
-          double thisDiff_v = cogDotToTest.get_v() - area_center_v;
-          double thisDist = sqrt( thisDiff_u*thisDiff_u + thisDiff_v*thisDiff_v);
-
-          bool stopLoop = false;
-          niceDotsVector->front();
-
-          while( !niceDotsVector->outside() &&  stopLoop == false )
-          {
-            vpDot2 tmpDot = niceDotsVector->value();
-
-            //double epsilon = 0.001; // detecte +sieurs points
-            double epsilon = 3.0;
-            // if the center of the dot is the same than the current
-            // don't add it, test the next point of the grid
-            cogTmpDot = tmpDot.getCog();
-
-            if( fabs( cogTmpDot.get_u() - cogDotToTest.get_u() ) < epsilon &&
-                fabs( cogTmpDot.get_v() - cogDotToTest.get_v() ) < epsilon )
-            {
-              stopLoop = true;
-              // Jump all the pixels between v,u and v, tmpDot->getFirstBorder_u()
-              u = border_u;
-              v = border_v;
-              continue;
-            }
-
-            double otherDiff_u = cogTmpDot.get_u() - area_center_u;
-            double otherDiff_v = cogTmpDot.get_v() - area_center_v;
-            double otherDist = sqrt( otherDiff_u*otherDiff_u +
-                                     otherDiff_v*otherDiff_v );
-
-
-            // if the distance of the curent vector element to the center
-            // is greater than the distance of this dot to the center,
-            // then add this dot before the current vector element.
-            if( otherDist > thisDist )
-            {
-              niceDotsVector->addLeft( *dotToTest );
-              niceDotsVector->next();
-              stopLoop = true;
-              // Jump all the pixels between v,u and v, tmpDot->getFirstBorder_u()
-              u = border_u;
-              v = border_v;
-              continue;
-            }
-            niceDotsVector->next();
-          }
-          vpTRACE(4, "End while (%d, %d)", u, v);
-
-          // if we reached the end of the vector without finding the dot
-          // or inserting it, insert it now.
-          if( niceDotsVector->outside() && stopLoop == false )
-          {
-            niceDotsVector->end();
-            niceDotsVector->addRight( *dotToTest );
-          }
-        }
-        else {
-          // Store bad dots
-          badDotsVector->front();
-          badDotsVector->addRight( *dotToTest );
-        }
-      }
-    }
-    if( dotToTest != NULL ) delete dotToTest;
-
-    delete badDotsVector;
-
-    //return niceDotsVector;
-  }
-
-
-  return niceDotsVector;
-
-}
-
-/*!
-
-  \deprecated This method is deprecated. You should use
-  searchDotsInArea(vpImage<unsigned char>&, int, int, unsigned int, unsigned int, std::list<vpDot2> &) instead.\n \n
-  Look for a list of dot matching this dot parameters within a rectangle
-  search area in the image. The rectangle upper-left coordinates are given by
-  (\e area_u, \e area_v). The size of the rectangle is given by \e area_w and
-  \e area_h.
-
-  \param I : Image to process.
-  \param area_u : Coordinate (column) of the upper-left area corner.
-  \param area_v : Coordinate (row) of the upper-left area corner.
-
-  \param area_w : Width or the area in which a dot is searched.
-  \param area_h : Height or the area in which a dot is searched.
-
-  \warning Allocates memory for the list of vpDot2 returned by this method.
-  Desallocation has to be done by yourself, see searchDotsInArea()
-
-  \sa searchDotsInArea(vpImage<unsigned char>& I)
-*/
-vpList<vpDot2>*
-vpDot2::searchDotsInArea(const vpImage<unsigned char>& I,
-                          int area_u,
-                          int area_v,
-                          unsigned int area_w,
-                          unsigned int area_h)
-
-{
-  // Fit the input area in the image; we keep only the common part between this
-  // area and the image.
-  setArea(I, area_u, area_v, area_w, area_h);
-
-  // compute the size of the search grid
-  unsigned int gridWidth;
-  unsigned int gridHeight;
-  getGridSize( gridWidth, gridHeight );
-
-  if (graphics) {
-    // Display the area were the dot is search
-    vpDisplay::displayRectangle(I, area, vpColor::blue, false, thickness);
-    //vpDisplay::flush(I);
-  }
-
-  // start the search loop; for all points of the search grid,
-  // test if the pixel belongs to a valid dot.
-  // if it is so eventually add it to the vector of valid dots.
-  vpList<vpDot2>* niceDotsVector = new vpList<vpDot2>();
-  vpList<vpDot2>* badDotsVector  = new vpList<vpDot2>();
-
-  vpDot2* dotToTest = NULL;
-  vpDot2 tmpDot;
-
-  unsigned int area_u_min = (unsigned int) area.getLeft();
-  unsigned int area_u_max = (unsigned int) area.getRight();
-  unsigned int area_v_min = (unsigned int) area.getTop();
-  unsigned int area_v_max = (unsigned int) area.getBottom();
-
-  unsigned int u, v;
-  vpImagePoint cogTmpDot;
-
-  for( v=area_v_min ; v<area_v_max ; v=v+gridHeight )
-  {
-    for( u=area_u_min ; u<area_u_max ; u=u+gridWidth )
-    {
-      // if the pixel we're in doesn't have the right color (outside the
-      // graylevel interval), no need to check futher, just get to the
-      // next grid intersection.
-      if( !hasGoodLevel(I, u, v) ) continue;
-
-      // Test if an other germ is inside the bounding box of a dot previoulsy
-      // detected
-      bool good_germ = true;
-      niceDotsVector->front();
-      while( !niceDotsVector->outside() && good_germ == true) {
-        tmpDot = niceDotsVector->value();
-
-        cogTmpDot = tmpDot.getCog();
-        double u0 = cogTmpDot.get_u();
-        double v0 = cogTmpDot.get_v();
-        double half_w = tmpDot.getWidth()  / 2.;
-        double half_h = tmpDot.getHeight() / 2.;
-
-        if ( u >= (u0-half_w) && u <= (u0+half_w) &&
-             v >= (v0-half_h) && v <= (v0+half_h) ) {
-          // Germ is in a previously detected dot
-          good_germ = false;
-        }
-        niceDotsVector->next();
-      }
-
-      if (! good_germ)
-        continue;
-
-      // Compute the right border position for this possible germ
-      unsigned int border_u;
-      unsigned int border_v;
-      if(findFirstBorder(I, u, v, border_u, border_v) == false){
-        // germ is not good.
-        // Jump all the pixels between v,u and v, dotToTest->getFirstBorder_u()
-        u = border_u;
-        v = border_v;
-        continue;
-      }
-
-      badDotsVector->front();
-#define vpBAD_DOT_VALUE (badDotsVector->value())
-      vpImagePoint cogBadDot;
-
-      std::list<vpImagePoint>::const_iterator it_edges;
-      while( !badDotsVector->outside() && good_germ == true)
-      {
-        if( (double)u >= vpBAD_DOT_VALUE.bbox_u_min
-            && (double)u <= vpBAD_DOT_VALUE.bbox_u_max &&
-            (double)v >= vpBAD_DOT_VALUE.bbox_v_min
-            && (double)v <= vpBAD_DOT_VALUE.bbox_v_max)
-        {
-
-          it_edges = ip_edges_list.begin();
-          while (it_edges != ip_edges_list.end() && good_germ == true)
-          {
-            // Test if the germ belong to a previously detected dot:
-            // - from the germ go right to the border and compare this
-            //   position to the list of pixels of previously detected dots
-            cogBadDot = *it_edges;
-            //if( border_u == cogBadDot.get_u() && v == cogBadDot.get_v()) {
-            if( (std::fabs(border_u - cogBadDot.get_u()) <= vpMath::maximum(std::fabs((double)border_u), std::fabs(cogBadDot.get_u()))*std::numeric_limits<double>::epsilon() )
-              &&
-                  (std::fabs(v - cogBadDot.get_v()) <= vpMath::maximum(std::fabs((double)v), std::fabs(cogBadDot.get_v()))*std::numeric_limits<double>::epsilon() ))
-              {
-              good_germ = false;
-            }
-            ++ it_edges;
-          }
-        }
-        badDotsVector->next();
-      }
-#undef vpBAD_DOT_VALUE
-
-      if (! good_germ) {
-        // Jump all the pixels between v,u and v, dotToTest->getFirstBorder_u()
-        u = border_u;
-        v = border_v;
-        continue;
-      }
-
-      vpTRACE(4, "Try germ (%d, %d)", u, v);
-
-      vpImagePoint germ;
-      germ.set_u( u );
-      germ.set_v( v );
-      
-      // otherwise estimate the width, height and surface of the dot we
-      // created, and test it.
-      if( dotToTest != NULL ) delete dotToTest;
-      dotToTest = getInstance();
-      dotToTest->setCog( germ );
-      dotToTest->setGrayLevelMin ( getGrayLevelMin() );
-      dotToTest->setGrayLevelMax ( getGrayLevelMax() );
-      dotToTest->setGrayLevelPrecision( getGrayLevelPrecision() );
-      dotToTest->setSizePrecision( getSizePrecision() );
-      dotToTest->setGraphics( graphics );
-      dotToTest->setGraphicsThickness( thickness );
-      dotToTest->setComputeMoments( true );
-      dotToTest->setArea( area );
-      dotToTest->setEllipsoidShapePrecision( ellipsoidShapePrecision );
-
-      // first compute the parameters of the dot.
-      // if for some reasons this caused an error tracking
-      // (dot partially out of the image...), check the next intersection
-      if( dotToTest->computeParameters( I ) == false ) {
-        // Jump all the pixels between v,u and v, dotToTest->getFirstBorder_u()
-        u = border_u;
-        v = border_v;
-        continue;
-      }
-      // if the dot to test is valid,
-      if( dotToTest->isValid( I, *this ) )
-      {
-        vpImagePoint cogDotToTest = dotToTest->getCog();
-        // Compute the distance to the center. The center used here is not the
-        // area center available by area.getCenter(area_center_u,
-        // area_center_v) but the center of the input area which may be
-        // partially outside the image.
-
-        double area_center_u = area_u + area_w/2.0 - 0.5;
-        double area_center_v = area_v + area_h/2.0 - 0.5;
-
-        double thisDiff_u = cogDotToTest.get_u() - area_center_u;
-        double thisDiff_v = cogDotToTest.get_v() - area_center_v;
-        double thisDist = sqrt( thisDiff_u*thisDiff_u + thisDiff_v*thisDiff_v);
-
-        bool stopLoop = false;
-        niceDotsVector->front();
-
-        while( !niceDotsVector->outside() &&  stopLoop == false )
-        {
-          vpDot2 tmpDot = niceDotsVector->value();
-
-          //double epsilon = 0.001; // detecte +sieurs points
-          double epsilon = 3.0;
-          // if the center of the dot is the same than the current
-          // don't add it, test the next point of the grid
-          cogTmpDot = tmpDot.getCog();
-
-          if( fabs( cogTmpDot.get_u() - cogDotToTest.get_u() ) < epsilon &&
-              fabs( cogTmpDot.get_v() - cogDotToTest.get_v() ) < epsilon )
-          {
-            stopLoop = true;
-            // Jump all the pixels between v,u and v, tmpDot->getFirstBorder_u()
-            u = border_u;
-            v = border_v;
-            continue;
-          }
-
-          double otherDiff_u = cogTmpDot.get_u() - area_center_u;
-          double otherDiff_v = cogTmpDot.get_v() - area_center_v;
-          double otherDist = sqrt( otherDiff_u*otherDiff_u +
-                                   otherDiff_v*otherDiff_v );
-
-
-          // if the distance of the curent vector element to the center
-          // is greater than the distance of this dot to the center,
-          // then add this dot before the current vector element.
-          if( otherDist > thisDist )
-          {
-            niceDotsVector->addLeft( *dotToTest );
-            niceDotsVector->next();
-            stopLoop = true;
-            // Jump all the pixels between v,u and v, tmpDot->getFirstBorder_u()
-            u = border_u;
-            v = border_v;
-            continue;
-          }
-          niceDotsVector->next();
-        }
-        vpTRACE(4, "End while (%d, %d)", u, v);
-
-        // if we reached the end of the vector without finding the dot
-        // or inserting it, insert it now.
-        if( niceDotsVector->outside() && stopLoop == false )
-        {
-          niceDotsVector->end();
-          niceDotsVector->addRight( *dotToTest );
-        }
-      }
-      else {
-        // Store bad dots
-        badDotsVector->front();
-        badDotsVector->addRight( *dotToTest );
-      }
-    }
-  }
-  if( dotToTest != NULL ) delete dotToTest;
-
-  delete badDotsVector;
-
-  return niceDotsVector;
-}
-#endif // VISP_BUILD_DEPRECATED_FUNCTIONS
-
 /*!
 
   Look for a list of dot matching this dot parameters within the entire
@@ -1795,7 +1221,7 @@ void vpDot2::searchDotsInArea(const vpImage<unsigned char>& I,
 
         while( itnice != niceDots.end() &&  stopLoop == false )
         {
-          vpDot2 tmpDot = *itnice;
+          tmpDot = *itnice;
 
           //double epsilon = 0.001; // detecte +sieurs points
           double epsilon = 3.0;
@@ -1874,8 +1300,8 @@ void vpDot2::searchDotsInArea(const vpImage<unsigned char>& I,
 */
 bool vpDot2::isValid(const vpImage<unsigned char>& I, const vpDot2& wantedDot )
 {
-  double sizePrecision = wantedDot.getSizePrecision();
-  double ellipsoidShapePrecision = wantedDot.getEllipsoidShapePrecision();
+  double size_precision = wantedDot.getSizePrecision();
+  double ellipsoidShape_precision = wantedDot.getEllipsoidShapePrecision();
   double epsilon = 0.001;
 
   //
@@ -1890,20 +1316,20 @@ bool vpDot2::isValid(const vpImage<unsigned char>& I, const vpDot2& wantedDot )
         (std::fabs(wantedDot.getHeight())  > std::numeric_limits<double>::epsilon())
     &&
         (std::fabs(wantedDot.getArea()) > std::numeric_limits<double>::epsilon()) )
-    // if (sizePrecision!=0){
-    if (std::fabs(sizePrecision) > std::numeric_limits<double>::epsilon()){
+    // if (size_precision!=0){
+    if (std::fabs(size_precision) > std::numeric_limits<double>::epsilon()){
 #ifdef DEBUG
          std::cout << "test size precision......................\n";
          std::cout << "wanted dot: " << "w=" << wantedDot.getWidth()
               << " h=" << wantedDot.getHeight()
               << " s=" << wantedDot.getArea()
-              << " precision=" << sizePrecision
+              << " precision=" << size_precision
               << " epsilon=" << epsilon << std::endl;
          std::cout << "dot found: " << "w=" << getWidth()
               << " h=" << getHeight()
               << " s=" << getArea() << std::endl;
 #endif
-    if( ( wantedDot.getWidth()*sizePrecision-epsilon < getWidth() ) == false )
+    if( ( wantedDot.getWidth()*size_precision-epsilon < getWidth() ) == false )
     {
       vpDEBUG_TRACE(3, "Bad width > for dot (%g, %g)",
                     cog.get_u(), cog.get_v());
@@ -1913,62 +1339,62 @@ bool vpDot2::isValid(const vpImage<unsigned char>& I, const vpDot2& wantedDot )
       return false;
     }
 
-    if( ( getWidth() < wantedDot.getWidth()/(sizePrecision+epsilon ) )== false )
+    if( ( getWidth() < wantedDot.getWidth()/(size_precision+epsilon ) )== false )
     {
       vpDEBUG_TRACE(3, "Bad width > for dot (%g, %g)",
                     cog.get_u(), cog.get_v());
 #ifdef DEBUG
       printf("Bad width %g > %g for dot (%g, %g)\n",
-             getWidth(), wantedDot.getWidth()/(sizePrecision+epsilon),
+             getWidth(), wantedDot.getWidth()/(size_precision+epsilon),
                                                cog.get_u(), cog.get_v());
 #endif
       return false;
     }
 
-    if( ( wantedDot.getHeight()*sizePrecision-epsilon < getHeight() ) == false )
+    if( ( wantedDot.getHeight()*size_precision-epsilon < getHeight() ) == false )
     {
       vpDEBUG_TRACE(3, "Bad height > for dot (%g, %g)",
                     cog.get_u(), cog.get_v());
 #ifdef DEBUG
       printf("Bad height %g > %g for dot (%g, %g)\n",
-             wantedDot.getHeight()*sizePrecision-epsilon, getHeight(),
+             wantedDot.getHeight()*size_precision-epsilon, getHeight(),
              cog.get_u(), cog.get_v());
 #endif
       return false;
     }
 
-    if( ( getHeight() < wantedDot.getHeight()/(sizePrecision+epsilon )) == false )
+    if( ( getHeight() < wantedDot.getHeight()/(size_precision+epsilon )) == false )
     {
       vpDEBUG_TRACE(3, "Bad height > for dot (%g, %g)",
                     cog.get_u(), cog.get_v());
 #ifdef DEBUG
       printf("Bad height %g > %g for dot (%g, %g)\n",
-             getHeight(), wantedDot.getHeight()/(sizePrecision+epsilon),
+             getHeight(), wantedDot.getHeight()/(size_precision+epsilon),
                                                  cog.get_u(), cog.get_v());
 #endif
       return false;
     }
 
-    if( ( wantedDot.getArea()*(sizePrecision*sizePrecision)-epsilon < getArea() ) == false )
+    if( ( wantedDot.getArea()*(size_precision*size_precision)-epsilon < getArea() ) == false )
     {
       vpDEBUG_TRACE(3, "Bad surface > for dot (%g, %g)",
                     cog.get_u(), cog.get_v());
 #ifdef DEBUG
       printf("Bad surface %g > %g for dot (%g, %g)\n",
-             wantedDot.getArea()*(sizePrecision*sizePrecision)-epsilon,
+             wantedDot.getArea()*(size_precision*size_precision)-epsilon,
              getArea(),
              cog.get_u(), cog.get_v());
 #endif
       return false;
     }
 
-    if( ( getArea() < wantedDot.getArea()/(sizePrecision*sizePrecision+epsilon )) == false )
+    if( ( getArea() < wantedDot.getArea()/(size_precision*size_precision+epsilon )) == false )
     {
       vpDEBUG_TRACE(3, "Bad surface > for dot (%g, %g)",
                     cog.get_u(), cog.get_v());
 #ifdef DEBUG
       printf("Bad surface %g < %g for dot (%g, %g)\n",
-             getArea(), wantedDot.getArea()/(sizePrecision*sizePrecision+epsilon),
+             getArea(), wantedDot.getArea()/(size_precision*size_precision+epsilon),
                                                    cog.get_u(), cog.get_v());
 #endif
       return false;
@@ -1984,11 +1410,11 @@ bool vpDot2::isValid(const vpImage<unsigned char>& I, const vpDot2& wantedDot )
   int nb_max_bad_points = (int)(nb_point_to_test*allowedBadPointsPercentage_);
   double step_angle = 2*M_PI / nb_point_to_test;
 
-  //  if (ellipsoidShapePrecision != 0 && compute_moment) {
-  if (std::fabs(ellipsoidShapePrecision) > std::numeric_limits<double>::epsilon() && compute_moment) {
+  //  if (ellipsoidShape_precision != 0 && compute_moment) {
+  if (std::fabs(ellipsoidShape_precision) > std::numeric_limits<double>::epsilon() && compute_moment) {
     //       std::cout << "test shape precision......................\n";
     // See F. Chaumette. Image moments: a general and useful set of features
-    // for visual servoing. IEEE Trans. on Robotics, 20(4):713-723, Ao�t 2004.
+    // for visual servoing. IEEE Trans. on Robotics, 20(4):713-723, August 2004.
 
     // mu11 = m11 - m00 * xg * yg = m11 - m00 * m10/m00 * m01/m00
     //      = m11 - m10 * m01 / m00
@@ -2015,7 +1441,7 @@ bool vpDot2::isValid(const vpImage<unsigned char>& I, const vpDot2& wantedDot )
     a1 -= 1.0;
     a2 -= 1.0;
 
-    double innerCoef =  ellipsoidShapePrecision ;
+    double innerCoef =  ellipsoidShape_precision ;
     unsigned int u, v;
     double cog_u = this->cog.get_u();
     double cog_v = this->cog.get_v();
@@ -2060,7 +1486,7 @@ bool vpDot2::isValid(const vpImage<unsigned char>& I, const vpDot2& wantedDot )
     a1 += 2.0;
     a2 += 2.0;
 
-    double outCoef =  2-ellipsoidShapePrecision;           //1.6;
+    double outCoef =  2-ellipsoidShape_precision;           //1.6;
     nb_bad_points = 0;
     for( double theta=0. ; theta<2*M_PI ; theta+= step_angle ) {
       u = (unsigned int) (cog_u + outCoef*(a1*cos(alpha)*cos(theta)-a2*sin(alpha)*sin(theta)));
@@ -2188,12 +1614,8 @@ vpDot2* vpDot2::getInstance()
   return new vpDot2();
 }
 
-
-#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
 /*!
 
-  \deprecated This method is deprecated. You should use
-  getFreemanChain(std::list<unsigned int> &) instead.\n \n
   Returns the list of Freeman chain code used to turn around the dot
   counterclockwise.
 
@@ -2207,32 +1629,7 @@ vpDot2* vpDot2::getInstance()
   - 6 : down
   - 7 : down right
 */
-void vpDot2::getFreemanChain(vpList<unsigned int> &freeman_chain)
-{
-  std::list<unsigned int>::const_iterator it;
-  freeman_chain.kill();
-  for (it = direction_list.begin(); it != direction_list.end(); ++it) {
-    freeman_chain += *it;
-  }
-}
-#endif
-
-/*!
-
-  Returns the list of Freeman chain code used to turn around the dot
-  counterclockwise.
-
-  \return List of Freeman chain list [0, ..., 7]
-  - 0 : right
-  - 1 : top right
-  - 2 : top
-  - 3 : top left
-  - 4 : left
-  - 5 : down left
-  - 6 : down
-  - 7 : down right
-*/
-void vpDot2::getFreemanChain(std::list<unsigned int> &freeman_chain)
+void vpDot2::getFreemanChain(std::list<unsigned int> &freeman_chain) const
 {
   freeman_chain = direction_list;
 }
@@ -2583,59 +1980,59 @@ bool
       element = (element + 2) % 8;      // turn right
     }
     else {
-      unsigned int _u = u;
-      unsigned int _v = v;
-      updateFreemanPosition( _u, _v, (element + 1) %8 );
+      unsigned int _u1 = u;
+      unsigned int _v1 = v;
+      updateFreemanPosition( _u1, _v1, (element + 1) %8 );
 
-      if ( hasGoodLevel( I, _u, _v )) {
+      if ( hasGoodLevel( I, _u1, _v1 )) {
         element = (element + 1) % 8;      // turn diag right
       }
       else {
-        unsigned int _u = u;
-        unsigned int _v = v;
-        updateFreemanPosition( _u, _v, element ); // same direction
+        unsigned int _u2 = u;
+        unsigned int _v2 = v;
+        updateFreemanPosition( _u2, _v2, element ); // same direction
 
-        if ( hasGoodLevel( I, _u, _v )) {
+        if ( hasGoodLevel( I, _u2, _v2 )) {
           //element = element;      // keep same dir
         }
         else {
-          unsigned int _u = u;
-          unsigned int _v = v;
-          updateFreemanPosition( _u, _v, (element + 7) %8 ); // diag left
+          unsigned int _u3 = u;
+          unsigned int _v3 = v;
+          updateFreemanPosition( _u3, _v3, (element + 7) %8 ); // diag left
 
-          if ( hasGoodLevel( I, _u, _v )) {
+          if ( hasGoodLevel( I, _u3, _v3 )) {
             element = (element + 7) %8;      // turn diag left
           }
           else {
-            unsigned int _u = u;
-            unsigned int _v = v;
-            updateFreemanPosition( _u, _v, (element + 6) %8 ); // left
+            unsigned int _u4 = u;
+            unsigned int _v4 = v;
+            updateFreemanPosition( _u4, _v4, (element + 6) %8 ); // left
 
-            if ( hasGoodLevel( I, _u, _v )) {
+            if ( hasGoodLevel( I, _u4, _v4 )) {
               element = (element + 6) %8 ;      // turn left
             }
             else {
-              unsigned int _u = u;
-              unsigned int _v = v;
-              updateFreemanPosition( _u, _v, (element + 5) %8 ); // left
+              unsigned int _u5 = u;
+              unsigned int _v5 = v;
+              updateFreemanPosition( _u5, _v5, (element + 5) %8 ); // left
 
-              if ( hasGoodLevel( I, _u, _v )) {
+              if ( hasGoodLevel( I, _u5, _v5 )) {
                 element = (element + 5) %8 ;      // turn diag down
               }
               else {
-                unsigned int _u = u;
-                unsigned int _v = v;
-                updateFreemanPosition( _u, _v, (element + 4) %8 ); // left
+                unsigned int _u6 = u;
+                unsigned int _v6 = v;
+                updateFreemanPosition( _u6, _v6, (element + 4) %8 ); // left
 
-                if ( hasGoodLevel( I, _u, _v )) {
+                if ( hasGoodLevel( I, _u6, _v6 )) {
                   element = (element + 4) %8 ;      // turn down
                 }
                 else {
-                  unsigned int _u = u;
-                  unsigned int _v = v;
-                  updateFreemanPosition( _u, _v, (element + 3) %8 ); // diag
+                  unsigned int _u7 = u;
+                  unsigned int _v7 = v;
+                  updateFreemanPosition( _u7, _v7, (element + 3) %8 ); // diag
 
-                  if ( hasGoodLevel( I, _u, _v )) {
+                  if ( hasGoodLevel( I, _u7, _v7 )) {
                     element = (element + 3) %8 ;      // turn diag right down
                   }
                   else {
@@ -2879,16 +2276,15 @@ bool vpDot2::isInImage(const vpImage<unsigned char> &I) const
   \return true if the image point \e ip is in the image and false
   otherwise.
 */
-bool vpDot2::isInImage(const vpImage<unsigned char> &I,
-                        const vpImagePoint &ip) const
+bool vpDot2::isInImage(const vpImage<unsigned char> &I, const vpImagePoint &ip) const
 {
-  unsigned int height = I.getHeight();
-  unsigned int width = I.getWidth();
+  unsigned int h = I.getHeight();
+  unsigned int w = I.getWidth();
   double u = ip.get_u();
   double v = ip.get_v();
 
-  if( u < 0 || u >= width ) return false;
-  if( v < 0 || v >= height ) return false;
+  if( u < 0 || u >= w ) return false;
+  if( v < 0 || v >= h ) return false;
   return true;
 }
 
@@ -3224,3 +2620,45 @@ void vpDot2::display(const vpImage<vpRGBa>& I,const vpImagePoint &cog,
     vpDisplay::displayPoint(I, *it, color);
   }
 }
+
+/*!
+  Writes the dot center of gravity coordinates in the frame (i,j) (For more details
+  about the orientation of the frame see the vpImagePoint documentation) to the stream \e os,
+  and returns a reference to the stream.
+*/
+VISP_EXPORT std::ostream& operator<< (std::ostream& os, vpDot2& d) {
+  return (os << "(" << d.getCog() << ")" ) ;
+} ;
+
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+/*!
+  \deprecated Return the area of the dot.
+
+  This function is deprecated since it is mis named. Surface means here area.
+  You should rather use getArea().
+
+  The area of the dot is also given by \f$|m00|\f$.
+
+  \sa getArea()
+*/
+double vpDot2::getSurface() const
+{
+  return fabs(surface);
+}
+
+/*!
+
+  \deprecated Set the surface of the dot. This is meant to be used to search a dot in a region of interest.
+
+  This function is deprecated since it is mis named. You should rather use setArea()
+
+  \param s : Here surface means area. Area of a dot to search in a region of interest.
+
+  \sa setWidth(), setHeight(), setArea(), setSizePrecision()
+
+*/
+void vpDot2::setSurface( const double & s )
+{
+  this->surface = s;
+}
+#endif
diff --git a/src/tracking/dots/vpDot2.h b/src/tracking/dots/vpDot2.h
index 6e68be89..4989a78a 100644
--- a/src/tracking/dots/vpDot2.h
+++ b/src/tracking/dots/vpDot2.h
@@ -3,7 +3,7 @@
   * $Id: vpDot2.h 2135 2009-04-29 13:51:31Z fspindle $
   *
   * This file is part of the ViSP software.
-  * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+  * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
   * 
   * This software is free software; you can redistribute it and/or
   * modify it under the terms of the GNU General Public License
@@ -53,10 +53,6 @@
 #include <visp/vpColor.h>
 #include <visp/vpImagePoint.h>
 
-#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
-#  include <visp/vpList.h>
-#endif
-
 #include <vector>
 #include <list>
 
@@ -139,7 +135,7 @@ public:
   static vpMatrix defineDots(vpDot2 dot[], const unsigned int &n, const std::string &dotFile, vpImage<unsigned char> &I, vpColor col = vpColor::blue, bool trackDot = true);
 
   void display(const vpImage<unsigned char>& I, vpColor color = vpColor::red,
-               unsigned int thickness=1);
+               unsigned int thickness=1) const;
 
   double getArea() const;
   /*!
@@ -149,7 +145,7 @@ public:
     \sa getWidth(), getHeight()
 
   */
-  inline vpRect getBBox() {
+  inline vpRect getBBox() const {
     vpRect bbox;
 
     bbox.setRect(this->bbox_u_min,
@@ -178,24 +174,36 @@ public:
     border. This list is update after a call to track().
 
   */
-  void getEdges(std::list<vpImagePoint> &edges_list) {
+  void getEdges(std::list<vpImagePoint> &edges_list) const {
     edges_list = this->ip_edges_list;
   };
+  /*!
+
+    Return the list of all the image points on the dot
+    border.
+
+    \return The list of all the images points on the dot
+    border. This list is update after a call to track().
+
+  */
+  std::list<vpImagePoint> getEdges() const {
+    return(this->ip_edges_list);
+  };
   /*!
     Get the percentage of sampled points that are considered non conform
     in terms of the gray level on the inner and the ouside ellipses.
 
     \sa setEllipsoidBadPointsPercentage()
     */
-  double getEllipsoidBadPointsPercentage()
+  double getEllipsoidBadPointsPercentage() const
   {
     return allowedBadPointsPercentage_;
   }
 
   double getEllipsoidShapePrecision() const;
-  void getFreemanChain(std::list<unsigned int> &freeman_chain) ;
+  void getFreemanChain(std::list<unsigned int> &freeman_chain) const;
 
-  inline double getGamma() {return this->gamma;};
+  inline double getGamma() const {return this->gamma;};
   /*!
     Return the color level of pixels inside the dot.
 
@@ -219,29 +227,21 @@ public:
   /*!
   \return The mean gray level value of the dot.
   */
-  double getMeanGrayLevel() {
+  double getMeanGrayLevel() const {
     return (this->mean_gray_level);
   };
   double getSizePrecision() const;
-  double getSurface() const;
   double getWidth() const;
 
   void initTracking(const vpImage<unsigned char>& I, unsigned int size = 0);
   void initTracking(const vpImage<unsigned char>& I, const vpImagePoint &ip,
-        unsigned int size = 0);
+                    unsigned int size = 0);
   void initTracking(const vpImage<unsigned char>& I, const vpImagePoint &ip,
-        unsigned int gray_level_min, unsigned int gray_level_max,
-        unsigned int size = 0 );
+                    unsigned int gray_lvl_min, unsigned int gray_lvl_max,
+                    unsigned int size = 0 );
 
-  void operator=(const vpDot2& twinDot );
-  /*!
-    Writes the dot center of gravity coordinates in the frame (i,j) (For more details
-    about the orientation of the frame see the vpImagePoint documentation) to the stream \e os,
-    and returns a reference to the stream.
-  */
-  friend VISP_EXPORT std::ostream& operator<< (std::ostream& os, vpDot2& d) {
-    return (os << "(" << d.getCog() << ")" ) ;
-  } ;
+  vpDot2& operator=(const vpDot2& twinDot );
+  friend VISP_EXPORT std::ostream& operator<< (std::ostream& os, vpDot2& d);
 
   void print(std::ostream& os) { os << *this << std::endl ; }
   void searchDotsInArea(const vpImage<unsigned char>& I,
@@ -252,10 +252,10 @@ public:
 
   void setArea( const double & area );
   /*!
-    Initialize the dot coordinates with \e cog. 
+    Initialize the dot coordinates with \e ip.
   */
-  inline void setCog(const vpImagePoint &cog) {
-    this->cog = cog; 
+  inline void setCog(const vpImagePoint &ip) {
+    this->cog = ip;
   }
   /*!
 
@@ -315,7 +315,7 @@ public:
 
     \sa setGraphics()
     */
-  void setGraphicsThickness(unsigned int thickness) {this->thickness = thickness;};
+  void setGraphicsThickness(unsigned int t) {this->thickness = t;};
   /*!
 
   Set the color level of the dot to search a dot in a region of interest. This level will be
@@ -354,7 +354,6 @@ public:
   void setHeight( const double & height );
   void setMaxSizeSearchDistancePrecision(const double & maxSizeSearchDistancePrecision);
   void setSizePrecision( const double & sizePrecision );
-  void setSurface( const double & surface );
   void setWidth( const double & width );
 
   void track(const vpImage<unsigned char> &I);
@@ -363,6 +362,14 @@ public:
   static void trackAndDisplay(vpDot2 dot[], const unsigned int &n, vpImage<unsigned char> &I,
                               std::vector<vpImagePoint> &cogs, vpImagePoint* cogStar = NULL);
 
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+  /*!
+    @name Deprecated functions
+  */
+  vp_deprecated double getSurface() const;
+  vp_deprecated void setSurface( const double & surface );
+#endif
+
 public:
   double m00; /*!< Considering the general distribution moments for \f$ N \f$
 		points defined by the relation \f$ m_{ij} = \sum_{h=0}^{N}
@@ -429,37 +436,6 @@ public:
 		\sa setComputeMoments()
 	      */
 
-#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
-  /*!
-    @name Deprecated functions
-  */
-  /*!
-
-    \deprecated This method is deprecated. You should use
-    getEdges(std::list<vpImagePoint> &) instead.\n \n
-    Return the list of all the image points on the dot
-    border.
-
-    \param edges_list : The list of all the images points on the dot
-    border. This list is update after a call to track().
-
-  */
-  vp_deprecated void getEdges(vpList<vpImagePoint> &edges_list) {
-    // convert a vpList in a std::list
-    edges_list.kill();
-    std::list<vpImagePoint>::const_iterator it;
-    for (it = ip_edges_list.begin(); it != ip_edges_list.end(); ++it) {
-      edges_list += *it;
-    }
-  };
-  vp_deprecated void getFreemanChain(vpList<unsigned int> &freeman_chain) ;
-  vp_deprecated vpList<vpDot2>* searchDotsInArea(const vpImage<unsigned char>& I,
-            int area_u, int area_v,
-            unsigned int area_w, unsigned int area_h );
-
-  /* vp_deprecated */ vpList<vpDot2>* searchDotsInArea(const vpImage<unsigned char>& I );
-#endif
-
 private:
   virtual bool isValid(const vpImage<unsigned char>& I, const vpDot2& wantedDot);
 
diff --git a/src/tracking/feature-builder/vpFeatureBuilder.h b/src/tracking/feature-builder/vpFeatureBuilder.h
index 03644839..004bc7b0 100644
--- a/src/tracking/feature-builder/vpFeatureBuilder.h
+++ b/src/tracking/feature-builder/vpFeatureBuilder.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureBuilder.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureBuilder.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/feature-builder/vpFeatureBuilderEllipse.cpp b/src/tracking/feature-builder/vpFeatureBuilderEllipse.cpp
index 5618cfd8..e85ad42d 100644
--- a/src/tracking/feature-builder/vpFeatureBuilderEllipse.cpp
+++ b/src/tracking/feature-builder/vpFeatureBuilderEllipse.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureBuilderEllipse.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureBuilderEllipse.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/feature-builder/vpFeatureBuilderLine.cpp b/src/tracking/feature-builder/vpFeatureBuilderLine.cpp
index dd33f748..5093da24 100644
--- a/src/tracking/feature-builder/vpFeatureBuilderLine.cpp
+++ b/src/tracking/feature-builder/vpFeatureBuilderLine.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureBuilderLine.cpp 4062 2013-01-09 10:30:06Z fspindle $
+ * $Id: vpFeatureBuilderLine.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -184,13 +184,13 @@ void vpFeatureBuilder::create(vpFeatureLine &s,
 
   The code below shows how to initialize a vpFeatureLine visual
   feature. First, we initialize the \f$(\rho,\theta)\f$, and lastly we
-  set the parameters of on equation plan which is generally the result
+  set the parameters of the plane which is generally the result
   of a pose estimation.
 
   \code
   vpImage<unsigned char> I; // Image container
   vpCameraParameters cam;   // Default intrinsic camera parameters
-  vpMeLine line;               // Dot tracker
+  vpMeLine line;            // Moving-edges line tracker
 
   vpFeatureLine s;    // Point feature
   ...
@@ -247,8 +247,8 @@ vpFeatureBuilder::create(vpFeatureLine &s,
     //  vpTRACE("pixel %f %f",rhop, thetap) ;
     vpPixelMeterConversion::convertLine(cam,rhop,thetap, rho,theta) ;
 
-    while (theta > M_PI)  { thetap -= 2*M_PI ; }
-    while (theta < -M_PI) { thetap += 2*M_PI ; }
+    while (theta > M_PI)  { theta -= 2*M_PI ; }
+    while (theta < -M_PI) { theta += 2*M_PI ; }
     //   vpTRACE("meter %f %f",rho, theta) ;
     /*
 
diff --git a/src/tracking/feature-builder/vpFeatureBuilderPoint.cpp b/src/tracking/feature-builder/vpFeatureBuilderPoint.cpp
index 4cb2be3e..815376dc 100644
--- a/src/tracking/feature-builder/vpFeatureBuilderPoint.cpp
+++ b/src/tracking/feature-builder/vpFeatureBuilderPoint.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureBuilderPoint.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureBuilderPoint.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/feature-builder/vpFeatureBuilderPoint3D.cpp b/src/tracking/feature-builder/vpFeatureBuilderPoint3D.cpp
index 43444555..2367d433 100644
--- a/src/tracking/feature-builder/vpFeatureBuilderPoint3D.cpp
+++ b/src/tracking/feature-builder/vpFeatureBuilderPoint3D.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureBuilderPoint3D.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureBuilderPoint3D.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/feature-builder/vpFeatureBuilderPointPolar.cpp b/src/tracking/feature-builder/vpFeatureBuilderPointPolar.cpp
index 03bc5828..fddd3893 100644
--- a/src/tracking/feature-builder/vpFeatureBuilderPointPolar.cpp
+++ b/src/tracking/feature-builder/vpFeatureBuilderPointPolar.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureBuilderPointPolar.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureBuilderPointPolar.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/feature-builder/vpFeatureBuilderSegment.cpp b/src/tracking/feature-builder/vpFeatureBuilderSegment.cpp
index 22eeb277..7901bf71 100644
--- a/src/tracking/feature-builder/vpFeatureBuilderSegment.cpp
+++ b/src/tracking/feature-builder/vpFeatureBuilderSegment.cpp
@@ -3,7 +3,7 @@
  * $Id: vpFeatureBuilderLine.cpp 3530 2012-01-03 10:52:12Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/feature-builder/vpFeatureBuilderVanishingPoint.cpp b/src/tracking/feature-builder/vpFeatureBuilderVanishingPoint.cpp
index 135cbbf8..d3d8dbb0 100644
--- a/src/tracking/feature-builder/vpFeatureBuilderVanishingPoint.cpp
+++ b/src/tracking/feature-builder/vpFeatureBuilderVanishingPoint.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureBuilderVanishingPoint.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureBuilderVanishingPoint.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -116,8 +116,9 @@ vpFeatureBuilder::create(vpFeatureVanishingPoint &s, const vpFeatureLine &L1, co
   if(fabs(theta_r-theta_l)<min || fabs(fabs(theta_r-theta_l)-M_PI)<min \
      || fabs(fabs(theta_r-theta_l)-2*M_PI)<min)
   {
-    vpCERROR<<"there is no vanishing point : the lines are parallel in the image plane"<<std::endl;
-    throw(" ");
+    vpCERROR<<"There is no vanishing point : the lines are parallel in the image plane"<<std::endl;
+    throw(vpFeatureException(vpFeatureException::badInitializationError,
+           "There is no vanishing point : the lines are parallel in the image plane")) ;
   }
 
   y = (rho_r *c_l - rho_l * c_r) / (-s_l * c_r + s_r * c_l );
diff --git a/src/tracking/forward-projection/vpCircle.cpp b/src/tracking/forward-projection/vpCircle.cpp
index b6bebc60..f0b5fe80 100644
--- a/src/tracking/forward-projection/vpCircle.cpp
+++ b/src/tracking/forward-projection/vpCircle.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpCircle.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpCircle.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,14 +58,14 @@ vpCircle::init()
   Set the world coordinates of the circle from the intersection of a plane and a sphere.  
   We mean here the coordinates of the circle in the object frame
  
-  \param oP : oP[0], oP[1], oP[2] correspond to A, B, C from the plane equation Ax + By + Cz = 0.
+  \param oP_ : oP[0], oP[1], oP[2] correspond to A, B, C from the plane equation Ax + By + Cz = 0.
               oP[3], oP[4], oP[5] correspond to X, Y, Z the coordinates of the center of the sphere.
               oP[6] corresponds to the radius of the sphere.
 */
 void
-vpCircle::setWorldCoordinates(const vpColVector& oP)
+vpCircle::setWorldCoordinates(const vpColVector& oP_)
 {
-  this->oP = oP ;
+  this->oP = oP_ ;
 }
 
 /*! 
@@ -106,16 +106,16 @@ vpCircle::vpCircle()
 /*! 
   Construct the circle from the intersection of a plane and a sphere.  
  
-  \param oP : oP[0], oP[1], oP[2] correspond to A, B, C from the plane equation Ax + By + Cz = 0.
+  \param oP_ : oP[0], oP[1], oP[2] correspond to A, B, C from the plane equation Ax + By + Cz = 0.
               oP[3], oP[4], oP[5] correspond to X, Y, Z the coordinates of the center of the sphere.
               oP[6] corresponds to the radius of the sphere.
               
   \sa setWorldCoordinates()
 */
-vpCircle::vpCircle(const vpColVector& oP)
+vpCircle::vpCircle(const vpColVector& oP_)
 {
   init() ;
-  setWorldCoordinates(oP) ;
+  setWorldCoordinates(oP_) ;
 }
 
 /*! 
@@ -157,23 +157,21 @@ vpCircle::projection()
   projection(cP,p) ;
 }
 
-//! perspective projection of the circle
+//! Perspective projection of the circle.
 void
-vpCircle::projection(const vpColVector &cP, vpColVector &p)
+vpCircle::projection(const vpColVector &cP_, vpColVector &p_)
 {
-
   vpColVector K(6) ;
-
   {
-    double A = cP[0] ;
-    double B = cP[1] ;
-    double C = cP[2] ;
+    double A = cP_[0] ;
+    double B = cP_[1] ;
+    double C = cP_[2] ;
 
-    double X0 = cP[3] ;
-    double Y0 = cP[4] ;
-    double Z0 = cP[5] ;
+    double X0 = cP_[3] ;
+    double Y0 = cP_[4] ;
+    double Z0 = cP_[5] ;
 
-    double r =  cP[6];
+    double r =  cP_[6];
 
     // projection
     double s = X0*X0 + Y0*Y0 + Z0*Z0 - r*r ;
@@ -196,10 +194,8 @@ vpCircle::projection(const vpColVector &cP, vpColVector &p)
     vpERROR_TRACE("division par 0") ;
     throw(vpException(vpException::divideByZeroError,
 		      "division par 0")) ;
-
   }
 
-
   double xc = (K[1]*K[3]-K[2]*K[4])/det;
   double yc = (K[0]*K[4]-K[2]*K[3])/det;
 
@@ -243,16 +239,16 @@ vpCircle::projection(const vpColVector &cP, vpColVector &p)
   double m11 = (vpMath::sqr(A)  - vpMath::sqr(B)) *E / det ;
   double m02 = (vpMath::sqr(B) + vpMath::sqr(A*E))   / det ;
 
-  p[0] = xc ;
-  p[1] = yc ;
-  p[2] = m20 ;
-  p[3] = m11 ;
-  p[4] = m02 ;
+  p_[0] = xc ;
+  p_[1] = yc ;
+  p_[2] = m20 ;
+  p_[3] = m11 ;
+  p_[4] = m02 ;
 }
 
 //! perspective projection of the circle
 void
-vpCircle::changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP)
+vpCircle::changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP_)
 {
 
   double A,B,C ;
@@ -266,15 +262,15 @@ vpCircle::changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP)
   Z0 = cMo[2][3] + cMo[2][0]*oP[3] + cMo[2][1]*oP[4] + cMo[2][2]*oP[5];
   double R = oP[6] ;
 
-  cP[0] = A ;
-  cP[1] = B ;
-  cP[2] = C ;
+  cP_[0] = A ;
+  cP_[1] = B ;
+  cP_[2] = C ;
 
-  cP[3] = X0 ;
-  cP[4] = Y0 ;
-  cP[5] = Z0 ;
+  cP_[3] = X0 ;
+  cP_[4] = Y0 ;
+  cP_[5] = Z0 ;
 
-  cP[6] = R ;
+  cP_[6] = R ;
 
   // vpTRACE("_cP :") ; std::cout << _cP.t() ;
 
diff --git a/src/tracking/forward-projection/vpCircle.h b/src/tracking/forward-projection/vpCircle.h
index 523bd664..3dbba40a 100644
--- a/src/tracking/forward-projection/vpCircle.h
+++ b/src/tracking/forward-projection/vpCircle.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpCircle.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpCircle.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/forward-projection/vpCylinder.cpp b/src/tracking/forward-projection/vpCylinder.cpp
index 057b9ddf..6fe38e52 100644
--- a/src/tracking/forward-projection/vpCylinder.cpp
+++ b/src/tracking/forward-projection/vpCylinder.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpCylinder.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpCylinder.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,7 +58,7 @@ vpCylinder::init()
   Set the cylinder parameters \f$^{o}{\bf P} = ({^o}A,{^o}B,{^o}C,{^o}X_0,{^o}Y_0,{^o}Z_0,R)\f$
   expressed in the world frame.
 
-  \param oP : Vector of parameters \f$^{o}{\bf P}\f$.
+  \param o_P : Vector of parameters \f$^{o}{\bf P}\f$.
 
   \code
   vpCylinder cylinder;
@@ -74,9 +74,9 @@ vpCylinder::init()
   \endcode
 */
 void
-vpCylinder::setWorldCoordinates(const vpColVector& oP)
+vpCylinder::setWorldCoordinates(const vpColVector& o_P)
 {
-  this->oP = oP ;
+  this->oP = o_P ;
 }
 
 /*!
@@ -115,7 +115,7 @@ vpCylinder::vpCylinder()
   Create and initialize a cylinder with parameters \f$^{o}{\bf P} = ({^o}A,{^o}B,{^o}C,{^o}X_0,{^o}Y_0,{^o}Z_0,R)\f$
   expressed in the world frame.
 
-  \param oP : Vector of parameters \f$^{o}{\bf P}\f$.
+  \param o_P : Vector of parameters \f$^{o}{\bf P}\f$.
 
   \code
   vpCylinder cylinder;
@@ -131,10 +131,10 @@ vpCylinder::vpCylinder()
   \endcode
   \sa setWorldCoordinates(const vpColVector&)
 */
-vpCylinder::vpCylinder(const vpColVector& oP)
+vpCylinder::vpCylinder(const vpColVector& o_P)
 {
   init() ;
-  setWorldCoordinates(oP) ;
+  setWorldCoordinates(o_P) ;
 }
 
 /*!
@@ -198,8 +198,8 @@ vpCylinder::projection()
   From the parameters of the cylinder in the camera frame \f$c{\bf P}\f$, compute the perspective
   projection of the cylinder in the image plane.
 
-  \param cP [in] : Cylinder parameters in the camera frame.
-  \param p [out] : Parameters of the cylinder in the image plane obtained by perspective projection.
+  \param cP_ [in] : Cylinder parameters in the camera frame.
+  \param p_ [out] : Parameters of the cylinder in the image plane obtained by perspective projection.
 
   \exception vpException::fatalError : The camera is inside the cylinder.
 
@@ -220,7 +220,7 @@ vpCylinder::projection()
   \sa projection()
   */
 void
-vpCylinder::projection(const vpColVector &cP, vpColVector &p)
+vpCylinder::projection(const vpColVector &cP_, vpColVector &p_)
 {
   //calcul de la scene 2-D
 
@@ -228,13 +228,13 @@ vpCylinder::projection(const vpColVector &cP, vpColVector &p)
   double A,B,C, X0, Y0, Z0, R ;
   double s, a, b, c, zero;
 
-  A = cP[0] ;
-  B = cP[1] ;
-  C = cP[2] ;
-  X0 = cP[3] ;
-  Y0 = cP[4] ;
-  Z0 = cP[5] ;
-  R= cP[6] ;
+  A = cP_[0] ;
+  B = cP_[1] ;
+  C = cP_[2] ;
+  X0 = cP_[3] ;
+  Y0 = cP_[4] ;
+  Z0 = cP_[5] ;
+  R= cP_[6] ;
   zero = A*X0 + B*Y0 + C*Z0;  // should be zero for a good reprensetation of the cylinder
 
   s = X0*X0 + Y0*Y0 + Z0*Z0 - R*R - zero*zero;
@@ -255,8 +255,8 @@ vpCylinder::projection(const vpColVector &cP, vpColVector &p)
   co = R*a*s-x0;
   si = R*b*s-y0;
   e = sqrt(co*co + si*si);
-  p[0] = -(R*c*s-z0)/e ;  // rho1
-  p[1] = atan2(si,co) ; // theta 1
+  p_[0] = -(R*c*s-z0)/e ;  // rho1
+  p_[1] = atan2(si,co) ; // theta 1
 
   //  while (p[1] > M_PI/2)  { p[1] -= M_PI ; p[0] *= -1 ; }
   //  while (p[1] < -M_PI/2) { p[1] += M_PI ; p[0] *= -1 ; }
@@ -265,8 +265,8 @@ vpCylinder::projection(const vpColVector &cP, vpColVector &p)
   co = R*a*s+x0;
   si = R*b*s+y0;
   e = sqrt(co*co + si*si);
-  p[2]  =  -( R*c*s+z0 )/e ; //rho2
-  p[3]  =  atan2( si,co ) ;  //theta2
+  p_[2]  =  -( R*c*s+z0 )/e ; //rho2
+  p_[3]  =  atan2( si,co ) ;  //theta2
 
 
   //  while (p[3] > M_PI/2)  { p[3] -= M_PI ; p[2] *= -1 ; }
@@ -294,12 +294,12 @@ vpCylinder::changeFrame(const vpHomogeneousMatrix &cMo)
   the cylinder parameters \f$^{c}{\bf P}\f$ expressed in the camera frame.
 
   \param cMo : Camera to world frame transformation.
-  \param cP [out] : Parameters \f$^{c}{\bf P}\f$ expressed in the camera frame.
+  \param cP_ [out] : Parameters \f$^{c}{\bf P}\f$ expressed in the camera frame.
 
   \sa changeFrame(const vpHomogeneousMatrix &)
 */
 void
-vpCylinder::changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP)
+vpCylinder::changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP_)
 {
   double X1, Y1, Z1;
   double X2, Y2, Z2;
@@ -322,9 +322,9 @@ vpCylinder::changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP)
   c = Z1 / s;
 
   // set axis coordinates  in camera frame
-  cP[0] = a ;
-  cP[1] = b ;
-  cP[2] = c ;
+  cP_[0] = a ;
+  cP_[1] = b ;
+  cP_[2] = c ;
 
   X2 = cMo[0][3] + cMo[0][0]*oX0 + cMo[0][1]*oY0 + cMo[0][2]*oZ0;
   Y2 = cMo[1][3] + cMo[1][0]*oX0 + cMo[1][1]*oY0 + cMo[1][2]*oZ0;
@@ -332,9 +332,9 @@ vpCylinder::changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP)
 
   // adding the constraint X0 is the nearest point to the origin (A^T . X0 = 0)
   // using the projection operator (I - AA^T) orthogonal to A
-  cP[3] =  (1-a*a)*X2 - a*b*Y2 - a*c*Z2;
-  cP[4] = -a*b*X2 + (1-b*b)*Y2 - b*c*Z2;
-  cP[5] = -a*c*X2 - b*c*Y2 + (1-c*c)*Z2;
+  cP_[3] =  (1-a*a)*X2 - a*b*Y2 - a*c*Z2;
+  cP_[4] = -a*b*X2 + (1-b*b)*Y2 - b*c*Z2;
+  cP_[5] = -a*c*X2 - b*c*Y2 + (1-c*c)*Z2;
 
   /*  old version for the same onstraint
   if ( fabs(a) > 0.25 )
@@ -385,7 +385,7 @@ vpCylinder::changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP)
   }
   */
   //radius
-  cP[6] = oP[6] ;
+  cP_[6] = oP[6] ;
 
 }
 
diff --git a/src/tracking/forward-projection/vpCylinder.h b/src/tracking/forward-projection/vpCylinder.h
index 384f33c3..e8f0ebbf 100644
--- a/src/tracking/forward-projection/vpCylinder.h
+++ b/src/tracking/forward-projection/vpCylinder.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpCylinder.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpCylinder.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/forward-projection/vpForwardProjection.cpp b/src/tracking/forward-projection/vpForwardProjection.cpp
index b2767042..d1c30f35 100644
--- a/src/tracking/forward-projection/vpForwardProjection.cpp
+++ b/src/tracking/forward-projection/vpForwardProjection.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpForwardProjection.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpForwardProjection.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/forward-projection/vpForwardProjection.h b/src/tracking/forward-projection/vpForwardProjection.h
index e030c059..6b4a8ea3 100644
--- a/src/tracking/forward-projection/vpForwardProjection.h
+++ b/src/tracking/forward-projection/vpForwardProjection.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpForwardProjection.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpForwardProjection.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -225,6 +225,8 @@ public:
 private:
   vpForwardProjectionDeallocatorType deallocate ;
 public:
+  vpForwardProjection() : oP(), deallocate(user) {}
+
   void setDeallocate(vpForwardProjectionDeallocatorType d) { deallocate = d ; }
   vpForwardProjectionDeallocatorType getDeallocate() { return deallocate ; }
 } ;
diff --git a/src/tracking/forward-projection/vpLine.cpp b/src/tracking/forward-projection/vpLine.cpp
index f4e08258..1b103840 100644
--- a/src/tracking/forward-projection/vpLine.cpp
+++ b/src/tracking/forward-projection/vpLine.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpLine.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpLine.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -124,19 +124,19 @@ vpLine::setWorldCoordinates(const double &A1, const double &B1,
   \f[ A2 X + B2 Y + C2 Z +D2 = 0 \f]
   Here \f$ (X, Y, Z) \f$ are the 3D coordinates in the object frame.
 
-  \param oP : The column vector which contains the eight parameters
+  \param oP_ : The column vector which contains the eight parameters
   needed to define the equations of the two planes in the object
   frame. \f[ oP = \left[\begin{array}{c}A1 \\ B1 \\ C1 \\ D1 \\ A2 \\
   B2 \\ C2 \\ D2 \end{array}\right] \f]
 
 */
 void
-vpLine::setWorldCoordinates(const vpColVector &oP)
+vpLine::setWorldCoordinates(const vpColVector &oP_)
 {
-  if (oP.getRows() != 8)
+  if (oP_.getRows() != 8)
     throw vpException(vpException::dimensionError, "Size of oP is not equal to 8 as it should be");
 
-  this->oP = oP ;
+  this->oP = oP_ ;
 }
 
 
@@ -226,18 +226,18 @@ vpLine::projection()
   image plane parameters \f$p=(\rho , \theta)\f$ are updated in
   output.
 
-  \param cP : The vector containing the line features relative to the
+  \param cP_ : The vector containing the line features relative to the
   camera frame. \f[ cP = \left[\begin{array}{c}A1 \\ B1 \\ C1 \\ D1
   \\ A2 \\ B2 \\ C2 \\ D2 \end{array}\right] \f]
   
-  \param p : The vector which contains the 2D line features expressed
+  \param p_ : The vector which contains the 2D line features expressed
   in the image plane. \f[ p = \left[\begin{array}{c} \rho \\ \theta
   \end{array}\right] \f]
 
   \exception vpException::fatalError : Degenerate case, the image of the straight line is a point.
 */
 void
-vpLine::projection(const vpColVector &cP, vpColVector &p)
+vpLine::projection(const vpColVector &cP_, vpColVector &p_)
 {
  //projection
 
@@ -246,15 +246,15 @@ vpLine::projection(const vpColVector &cP, vpColVector &p)
 
   double A1, A2, B1, B2, C1, C2, D1, D2;
 
-  A1=cP[0] ;
-  B1=cP[1] ;
-  C1=cP[2] ;
-  D1=cP[3] ;
+  A1=cP_[0] ;
+  B1=cP_[1] ;
+  C1=cP_[2] ;
+  D1=cP_[3] ;
 
-  A2=cP[4] ;
-  B2=cP[5] ;
-  C2=cP[6] ;
-  D2=cP[7] ;
+  A2=cP_[4] ;
+  B2=cP_[5] ;
+  C2=cP_[6] ;
+  D2=cP_[7] ;
 
   double a, b, c, s;
   a = A2*D1 - A1*D2;
@@ -274,8 +274,8 @@ vpLine::projection(const vpColVector &cP, vpColVector &p)
   if (p.getRows() != 2)
     p.resize(2);
 
-  p[0] = rho ;
-  p[1] = theta ;
+  p_[0] = rho ;
+  p_[1] = theta ;
 }
 
 
@@ -336,7 +336,7 @@ vpLine::changeFrame(const vpHomogeneousMatrix &cMo)
   \param cMo : The homogeneous matrix relative to the pose
   between the desired frame and the object frame.
 
-  \param cP : The vector which will contain the parameters of the two
+  \param cP_ : The vector which will contain the parameters of the two
   planes in the camera frame. \f[ cP =
   \left[\begin{array}{c}A1 \\ B1 \\ C1 \\ D1 \\ A2 \\ B2 \\ C2 \\ D2
   \end{array}\right] \f]
@@ -363,7 +363,7 @@ vpLine::changeFrame(const vpHomogeneousMatrix &cMo)
 */
 
 void
-vpLine::changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP)
+vpLine::changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP_)
 {
 
   double a1, a2, b1, b2, c1, c2, d1, d2;
@@ -424,10 +424,10 @@ vpLine::changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP)
 
   // Constraint A1^2 + B1^2 + C1^2 = 1
   d1 = 1.0/sqrt(a1*a1 + b1*b1 + c1*c1);
-  cP[0] = A1 = a1*d1 ;
-  cP[1] = B1 = b1*d1 ;
-  cP[2] = C1 = c1*d1 ;
-  cP[3] = D1 = 0 ;
+  cP_[0] = A1 = a1*d1 ;
+  cP_[1] = B1 = b1*d1 ;
+  cP_[2] = C1 = c1*d1 ;
+  cP_[3] = D1 = 0 ;
 
   // Constraint A1 A2 + B1 B2 + C1 C2 = 0 (P2 orthogonal to P1)
   // N2_new = (N1 x N2) x N1_new
@@ -458,10 +458,10 @@ vpLine::changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP)
   //  vpERROR_TRACE("A1 B1 C1 D1 %f %f %f %f  ", A1, B1, C1, D1) ;
   //  vpERROR_TRACE("A2 B2 C2 D2 %f %f %f %f  ", A2, B2, C2, D2) ;
 
-  cP[4] =  A2;
-  cP[5] =  B2;
-  cP[6] =  C2;
-  cP[7] =  D2;
+  cP_[4] =  A2;
+  cP_[5] =  B2;
+  cP_[6] =  C2;
+  cP_[7] =  D2;
 
   // in case of verification
   /* 
diff --git a/src/tracking/forward-projection/vpLine.h b/src/tracking/forward-projection/vpLine.h
index 3c81a28b..780a1a02 100644
--- a/src/tracking/forward-projection/vpLine.h
+++ b/src/tracking/forward-projection/vpLine.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpLine.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpLine.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/forward-projection/vpPoint.cpp b/src/tracking/forward-projection/vpPoint.cpp
index 800a9364..5c7e2dc4 100644
--- a/src/tracking/forward-projection/vpPoint.cpp
+++ b/src/tracking/forward-projection/vpPoint.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPoint.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpPoint.cpp 4620 2014-01-27 21:28:32Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -286,7 +286,7 @@ vpPoint::display(const vpImage<vpRGBa> &I,
   vpFeatureDisplay::displayPoint(_p[0],_p[1], cam, I, color, thickness) ;
 }
 
-std::ostream& operator<<(std::ostream& os, vpPoint& /* vpp */)
+VISP_EXPORT std::ostream& operator<<(std::ostream& os, vpPoint& /* vpp */)
 {
   return( os<<"vpPoint" );
 }
diff --git a/src/tracking/forward-projection/vpPoint.h b/src/tracking/forward-projection/vpPoint.h
index 064d3fc6..ebe0a836 100644
--- a/src/tracking/forward-projection/vpPoint.h
+++ b/src/tracking/forward-projection/vpPoint.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpPoint.h 4089 2013-02-04 08:17:31Z fspindle $
+ * $Id: vpPoint.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/forward-projection/vpSphere.cpp b/src/tracking/forward-projection/vpSphere.cpp
index 4d08a871..4e380e44 100644
--- a/src/tracking/forward-projection/vpSphere.cpp
+++ b/src/tracking/forward-projection/vpSphere.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSphere.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpSphere.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -55,9 +55,9 @@ vpSphere::init()
 }
 
 void
-vpSphere::setWorldCoordinates(const vpColVector& oP)
+vpSphere::setWorldCoordinates(const vpColVector& oP_)
 {
-  this->oP = oP ;
+  this->oP = oP_ ;
 }
 
 void
@@ -78,10 +78,10 @@ vpSphere::vpSphere()
 }
 
 
-vpSphere::vpSphere(const vpColVector& oP)
+vpSphere::vpSphere(const vpColVector& oP_)
 {
   init() ;
-  setWorldCoordinates(oP) ;
+  setWorldCoordinates(oP_) ;
 }
 
 vpSphere::vpSphere(const double X0, const double Y0,
@@ -103,9 +103,9 @@ vpSphere::projection()
   projection(cP,p) ;
 }
 
-//! perspective projection of the circle
+//! Perspective projection of the circle.
 void
-vpSphere::projection(const vpColVector &cP, vpColVector &p)
+vpSphere::projection(const vpColVector &cP_, vpColVector &p_)
 {
   double x0, y0, z0;  //variables intermediaires
 //   double k0, k1, k2, k3, k4;  //variables intermediaires
@@ -113,12 +113,11 @@ vpSphere::projection(const vpColVector &cP, vpColVector &p)
 
   //calcul des parametres M20, M11, M02 de l'ellipse
   double s, a, b, r, e;  //variables intermediaires
-  r =  cP[3];
-
-  x0 = cP[0] ;
-  y0 = cP[1] ;
-  z0 = cP[2] ;
+  r =  cP_[3];
 
+  x0 = cP_[0] ;
+  y0 = cP_[1] ;
+  z0 = cP_[2] ;
 
   s = r*r - y0*y0 -z0*z0;
 
@@ -133,8 +132,8 @@ vpSphere::projection(const vpColVector &cP, vpColVector &p)
     vpERROR_TRACE("sphere derriere le plan image\n");
   }
 
-  p[0] =  x0*z0/s ;  //x
-  p[1] =  y0*z0/s ;  //y
+  p_[0] =  x0*z0/s ;  //x
+  p_[1] =  y0*z0/s ;  //y
 
   if (fabs(x0)  > 1e-6)
   {
@@ -167,14 +166,13 @@ vpSphere::projection(const vpColVector &cP, vpColVector &p)
     B = r*sqrt(y0*y0+z0*z0-r*r)/s;
   }
 
-  p[2] = ( A*A + B*B * E*E) / (1.0 + E*E);  // mu20
-  p[3] = ( A*A - B*B) * E / (1.0 + E*E);    // mu11
-  p[4] = ( B*B + A*A * E*E) / (1.0 + E*E);  // mu02
+  p_[2] = ( A*A + B*B * E*E) / (1.0 + E*E);  // mu20
+  p_[3] = ( A*A - B*B) * E / (1.0 + E*E);    // mu11
+  p_[4] = ( B*B + A*A * E*E) / (1.0 + E*E);  // mu02
 
   // vpERROR_TRACE(" %f",r) ;
 
   //  std::cout << p.t() ;
-
 }
 //! perspective projection of the circle
 void
@@ -183,25 +181,21 @@ vpSphere::changeFrame(const vpHomogeneousMatrix &cMo)
   changeFrame(cMo,cP) ;
 }
 
-//! perspective projection of the circle
+//! Perspective projection of the circle.
 void
-vpSphere::changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP)
+vpSphere::changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP_)
 {
-
   double x0, y0, z0;  //variables intermediaires
 
-
   x0 = cMo[0][0]*oP[0] + cMo[0][1]*oP[1]  + cMo[0][2]*oP[2] + cMo[0][3];
   y0 = cMo[1][0]*oP[0] + cMo[1][1]*oP[1]  + cMo[1][2]*oP[2] + cMo[1][3];
   z0 = cMo[2][0]*oP[0] + cMo[2][1]*oP[1]  + cMo[2][2]*oP[2] + cMo[2][3];
 
-  cP[3] = oP[3];
-
-  cP[0] = x0 ;
-  cP[1] = y0 ;
-  cP[2] = z0 ;
-
+  cP_[3] = oP[3];
 
+  cP_[0] = x0 ;
+  cP_[1] = y0 ;
+  cP_[2] = z0 ;
 }
 
 //! for memory issue (used by the vpServo class only)
diff --git a/src/tracking/forward-projection/vpSphere.h b/src/tracking/forward-projection/vpSphere.h
index 7eb51a8a..dfef7c95 100644
--- a/src/tracking/forward-projection/vpSphere.h
+++ b/src/tracking/forward-projection/vpSphere.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpSphere.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpSphere.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/general-tracking-issues/vpTracker.cpp b/src/tracking/general-tracking-issues/vpTracker.cpp
index 3e90e103..4e375711 100644
--- a/src/tracking/general-tracking-issues/vpTracker.cpp
+++ b/src/tracking/general-tracking-issues/vpTracker.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpTracker.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpTracker.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,12 +58,9 @@ vpTracker::init()
 
 
 
-vpTracker::vpTracker()
-{
-  init() ;
-}
+vpTracker::vpTracker() : p(), cP(), cPAvailable(false) {}
 
-vpTracker::vpTracker(const vpTracker &tracker)
+vpTracker::vpTracker(const vpTracker &tracker) : p(), cP(), cPAvailable(false)
 {
   *this = tracker;
 }
diff --git a/src/tracking/general-tracking-issues/vpTracker.h b/src/tracking/general-tracking-issues/vpTracker.h
index 147136ee..3acc3b76 100644
--- a/src/tracking/general-tracking-issues/vpTracker.h
+++ b/src/tracking/general-tracking-issues/vpTracker.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpTracker.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpTracker.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/general-tracking-issues/vpTrackingException.h b/src/tracking/general-tracking-issues/vpTrackingException.h
index fab9ca3a..4528593a 100644
--- a/src/tracking/general-tracking-issues/vpTrackingException.h
+++ b/src/tracking/general-tracking-issues/vpTrackingException.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpTrackingException.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpTrackingException.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -68,12 +68,12 @@
  */
 class VISP_EXPORT vpTrackingException : public vpException
 {
-public:
-  /*!
+  public:
+    /*!
     \brief Lists the possible error than can be emmited while calling
     vpTracking member
    */
-  enum errorTrackingCodeEnum
+    enum errorTrackingCodeEnum
     {
       featureLostError,
 
@@ -83,25 +83,20 @@ public:
       fatalError
     } ;
 
-public:
-  vpTrackingException (const int code, const char * msg)
-    : vpException(code, msg){ ; }
-  vpTrackingException (const int code, const std::string & msg)
-    : vpException(code, msg){ ; }
-  vpTrackingException (const int code)
-    : vpException(code){ ; }
+  public:
+    vpTrackingException (const int id,  const char* format, ...)
+    {
+      this->code = id;
+      va_list args;
+      va_start(args, format);
+      setMessage(format, args);
+      va_end (args);
+    }
+    vpTrackingException (const int id, const std::string & msg)
+      : vpException(id, msg){ ; }
+    vpTrackingException (const int id)
+      : vpException(id){ ; }
 
 };
 
-
-
-
-
-#endif /* #ifndef __vpTrackingException_H */
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+#endif
diff --git a/src/tracking/klt/vpKltOpencv.cpp b/src/tracking/klt/vpKltOpencv.cpp
index c1e8e339..db5ac8e6 100644
--- a/src/tracking/klt/vpKltOpencv.cpp
+++ b/src/tracking/klt/vpKltOpencv.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpKltOpencv.cpp 4198 2013-04-05 12:13:23Z fspindle $
+ * $Id: vpKltOpencv.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -63,12 +63,12 @@ void vpKltOpencv::clean()
   if (pyramid) cvReleaseImage(&pyramid);
   if (prev_pyramid) cvReleaseImage(&prev_pyramid);
   
-  image = 0;
-  prev_image = 0;
-  pyramid = 0;
-  prev_pyramid = 0;
+  image = NULL;
+  prev_image = NULL;
+  pyramid = NULL;
+  prev_pyramid = NULL;
   
-  swap_temp = 0;
+  swap_temp = NULL;
   countFeatures = 0;
   countPrevFeatures = 0;
   flags = 0;
@@ -85,12 +85,12 @@ void vpKltOpencv::cleanAll()
   if (lostDuringTrack) cvFree(&lostDuringTrack);
   if (featuresid) cvFree(&featuresid);
   if (prev_featuresid) cvFree(&prev_featuresid);
-  features = 0;
-  prev_features = 0;
-  status = 0;
+  features = NULL;
+  prev_features = NULL;
+  status = NULL;
   lostDuringTrack = 0;
-  featuresid = 0;
-  prev_featuresid = 0;
+  featuresid = NULL;
+  prev_featuresid = NULL;
 }
 
 void vpKltOpencv::reset()
@@ -99,54 +99,45 @@ void vpKltOpencv::reset()
 
 }
 
+/*!
+  Default constructor.
+ */
 vpKltOpencv::vpKltOpencv()
+  : initialized(0), maxFeatures(50), globalcountFeatures(0), win_size(10), quality(0.01),
+    min_distance(10), harris_free_parameter(0.04), block_size(3), use_harris(1),
+    pyramid_level(3), _tid(-1), image(NULL), prev_image(NULL), pyramid(NULL),
+    prev_pyramid(NULL), swap_temp(NULL), countFeatures(0), countPrevFeatures(0),
+    features(NULL), prev_features(NULL), featuresid(NULL), prev_featuresid(NULL),
+    flags(0), initial_guess(false), lostDuringTrack(0), status(0), OnInitialize(0),
+    OnFeatureLost(0), OnNewFeature(0), OnMeasureFeature(0), IsFeatureValid(0)
 {
-  //Valeurs par d�faut pour le KLT
-  initialized = 0;
-  maxFeatures = 50;
-  countFeatures = 0;
-  countPrevFeatures = 0;
-  globalcountFeatures = 0;
-  win_size = 10;
-  quality = 0.01;
-  min_distance = 10;
-  block_size = 3;
-  use_harris = 1;
-  pyramid_level = 3;
-  harris_free_parameter = 0.04;
-
-  //Zeroing pointers
-  image = 0;
-  prev_image = 0;
-  pyramid = 0;
-  prev_pyramid = 0;
-  swap_temp = 0;
-  features = 0;
-  prev_features = 0;
-  flags = 0;
-  status = 0;
-  lostDuringTrack = 0;
-  featuresid = 0;
-  prev_featuresid = 0;
-  OnInitialize = 0;
-  OnFeatureLost = 0;
-  OnNewFeature = 0;
-  OnMeasureFeature = 0;
-  IsFeatureValid = 0;
-  initial_guess = false;
-
   features = (CvPoint2D32f*)cvAlloc((unsigned int)maxFeatures*sizeof(features[0]));
   prev_features = (CvPoint2D32f*)cvAlloc((unsigned int)maxFeatures*sizeof(prev_features[0]));
   status = (char*)cvAlloc((size_t)maxFeatures);
   lostDuringTrack = (bool*)cvAlloc((size_t)maxFeatures);
   featuresid = (long*)cvAlloc((unsigned int)maxFeatures*sizeof(long));
   prev_featuresid = (long*)cvAlloc((unsigned int)maxFeatures*sizeof(long));
-
-
-  _tid = -1;
 }
 
+/*!
+  Copy constructor.
+ */
 vpKltOpencv::vpKltOpencv(const vpKltOpencv& copy)
+  : initialized(0), maxFeatures(50), globalcountFeatures(0), win_size(10), quality(0.01),
+    min_distance(10), harris_free_parameter(0.04), block_size(3), use_harris(1),
+    pyramid_level(3), _tid(-1), image(NULL), prev_image(NULL), pyramid(NULL),
+    prev_pyramid(NULL), swap_temp(NULL), countFeatures(0), countPrevFeatures(0),
+    features(NULL), prev_features(NULL), featuresid(NULL), prev_featuresid(NULL),
+    flags(0), initial_guess(false), lostDuringTrack(0), status(0), OnInitialize(0),
+    OnFeatureLost(0), OnNewFeature(0), OnMeasureFeature(0), IsFeatureValid(0)
+{
+  *this = copy;
+}
+
+/*!
+  Copy operator.
+ */
+vpKltOpencv & vpKltOpencv::operator=(const vpKltOpencv& copy)
 {
   //Shallow copy of primitives
   initialized = copy.initialized;
@@ -170,18 +161,12 @@ vpKltOpencv::vpKltOpencv(const vpKltOpencv& copy)
   OnMeasureFeature = copy.OnMeasureFeature;
   IsFeatureValid = copy.IsFeatureValid;
 
+  initial_guess = copy.initial_guess;
+  lostDuringTrack = copy.lostDuringTrack;
+
   if (!initialized) {
-    image = 0;
-    prev_image = 0;
-    pyramid = 0;
-    prev_pyramid = 0;
-    features = 0;
-    prev_features = 0;
     status = 0;
     lostDuringTrack = 0;
-    featuresid = 0;
-    prev_featuresid = 0;
-    swap_temp = 0;
     countFeatures = 0;
     countPrevFeatures = 0;
     flags = 0;
@@ -189,72 +174,74 @@ vpKltOpencv::vpKltOpencv(const vpKltOpencv& copy)
     globalcountFeatures = 0;
   }
 
-  	if (copy.image)
-  	{
-           image =  cvCreateImage(cvGetSize(copy.image), 8, 1);
-	   //		/*IplImage **/cvCopyImage(copy.image,image);
-	   cvCopy(copy.image, image, 0);
-  	}
-
-  	if (copy.prev_image)
-  	{
-          prev_image = cvCreateImage(cvGetSize(copy.prev_image), IPL_DEPTH_8U, 1);
-	  //	/*IplImage **/ cvCopyImage(copy.prev_image,prev_image);
-	  cvCopy(copy.prev_image, prev_image, 0);
-  	}
-
-  	if (copy.pyramid)
-  	{
-          pyramid = cvCreateImage(cvGetSize(copy.pyramid), IPL_DEPTH_8U, 1);
-	  // /*IplImage **/cvCopyImage(copy.pyramid,pyramid);
-	  cvCopy(copy.pyramid, pyramid, 0);
-  	}
-
-  	if (copy.prev_pyramid)
-  	{
-          prev_pyramid = cvCreateImage(cvGetSize(copy.prev_pyramid), IPL_DEPTH_8U, 1);
-	  //	/*IplImage **/cvCopyImage(copy.prev_pyramid,prev_pyramid);
-	  cvCopy(copy.prev_pyramid, prev_pyramid, 0);
-  	}
+  if (copy.image)
+  {
+    image =  cvCreateImage(cvGetSize(copy.image), 8, 1);
+    //		/*IplImage **/cvCopyImage(copy.image,image);
+    cvCopy(copy.image, image, 0);
+  }
+
+  if (copy.prev_image)
+  {
+    prev_image = cvCreateImage(cvGetSize(copy.prev_image), IPL_DEPTH_8U, 1);
+    //	/*IplImage **/ cvCopyImage(copy.prev_image,prev_image);
+    cvCopy(copy.prev_image, prev_image, 0);
+  }
+
+  if (copy.pyramid)
+  {
+    pyramid = cvCreateImage(cvGetSize(copy.pyramid), IPL_DEPTH_8U, 1);
+    // /*IplImage **/cvCopyImage(copy.pyramid,pyramid);
+    cvCopy(copy.pyramid, pyramid, 0);
+  }
+
+  if (copy.prev_pyramid)
+  {
+    prev_pyramid = cvCreateImage(cvGetSize(copy.prev_pyramid), IPL_DEPTH_8U, 1);
+    //	/*IplImage **/cvCopyImage(copy.prev_pyramid,prev_pyramid);
+    cvCopy(copy.prev_pyramid, prev_pyramid, 0);
+  }
 
   //Deep copy of arrays
   if (copy.features) {
-      /*CvPoint2D32f **/features =
-	(CvPoint2D32f*)cvAlloc((unsigned int)copy.maxFeatures*sizeof(CvPoint2D32f));
-      for (int i = 0; i < copy.maxFeatures; i++)
-	features[i] = copy.features[i];
-    }
+    /*CvPoint2D32f **/features =
+        (CvPoint2D32f*)cvAlloc((unsigned int)copy.maxFeatures*sizeof(CvPoint2D32f));
+    for (int i = 0; i < copy.maxFeatures; i++)
+      features[i] = copy.features[i];
+  }
 
   if (copy.prev_features) {
-      /*CvPoint2D32f **/prev_features =
-	(CvPoint2D32f*)cvAlloc((unsigned int)copy.maxFeatures*sizeof(CvPoint2D32f));
-      for (int i = 0; i < copy.maxFeatures; i++)
-	prev_features[i] = copy.prev_features[i];
-    }
+    /*CvPoint2D32f **/prev_features =
+        (CvPoint2D32f*)cvAlloc((unsigned int)copy.maxFeatures*sizeof(CvPoint2D32f));
+    for (int i = 0; i < copy.maxFeatures; i++)
+      prev_features[i] = copy.prev_features[i];
+  }
 
   if (copy.featuresid) {
-      /*long **/featuresid = (long*)cvAlloc((unsigned int)copy.maxFeatures*sizeof(long));
-      for (int i = 0; i < copy.maxFeatures; i++)
-	featuresid[i] = copy.featuresid[i];
-    }
+    /*long **/featuresid = (long*)cvAlloc((unsigned int)copy.maxFeatures*sizeof(long));
+    for (int i = 0; i < copy.maxFeatures; i++)
+      featuresid[i] = copy.featuresid[i];
+  }
 
   if (copy.prev_featuresid) {
-      /*long **/prev_featuresid = (long*)cvAlloc((unsigned int)copy.maxFeatures*sizeof(long));
-      for (int i = 0; i < copy.maxFeatures; i++)
-	prev_featuresid[i] = copy.prev_featuresid[i];
-    }
+    /*long **/prev_featuresid = (long*)cvAlloc((unsigned int)copy.maxFeatures*sizeof(long));
+    for (int i = 0; i < copy.maxFeatures; i++)
+      prev_featuresid[i] = copy.prev_featuresid[i];
+  }
 
   if (copy.status) {
-      /*char **/status = (char*)cvAlloc((unsigned int)copy.maxFeatures*sizeof(char));
-      for (int i = 0; i < copy.maxFeatures; i++)
-	status[i] = copy.status[i];
-    }
+    /*char **/status = (char*)cvAlloc((unsigned int)copy.maxFeatures*sizeof(char));
+    for (int i = 0; i < copy.maxFeatures; i++)
+      status[i] = copy.status[i];
+  }
 
   if (copy.lostDuringTrack) {
     /*bool **/lostDuringTrack = (bool*)cvAlloc((unsigned int)copy.maxFeatures*sizeof(bool));
     for (int i = 0; i < copy.maxFeatures; i++)
       lostDuringTrack[i] = copy.lostDuringTrack[i];
   }
+
+  return *this;
 }
 
 vpKltOpencv::~vpKltOpencv()
diff --git a/src/tracking/klt/vpKltOpencv.h b/src/tracking/klt/vpKltOpencv.h
index b6e0cd80..ba7eb363 100644
--- a/src/tracking/klt/vpKltOpencv.h
+++ b/src/tracking/klt/vpKltOpencv.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpKltOpencv.h 4231 2013-04-29 16:26:28Z fspindle $
+ * $Id: vpKltOpencv.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -202,6 +202,7 @@ class VISP_EXPORT vpKltOpencv
   //Detect corners in the image. Initialize the tracker
   void initTracking(const IplImage *I, const IplImage *mask = NULL);
 
+  vpKltOpencv & operator=(const vpKltOpencv& copy);
   //Track !
   void track(const IplImage *I);
 
diff --git a/src/tracking/mbt/edge/vpMbEdgeTracker.cpp b/src/tracking/mbt/edge/vpMbEdgeTracker.cpp
index 8e474fb6..ab7c736a 100644
--- a/src/tracking/mbt/edge/vpMbEdgeTracker.cpp
+++ b/src/tracking/mbt/edge/vpMbEdgeTracker.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbEdgeTracker.cpp 4337 2013-07-23 13:57:53Z ayol $
+ * $Id: vpMbEdgeTracker.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -46,8 +46,6 @@
   \brief Make the complete tracking of an object by using its CAD model.
 */
 
-
-
 #include <visp/vpDebug.h>
 #include <visp/vpPose.h>
 #include <visp/vpExponentialMap.h>
@@ -71,36 +69,23 @@
 #include <sstream>
 #include <float.h>
 
+bool samePoint(const vpPoint &P1, const vpPoint &P2, double threshold);
+
 /*!
   Basic constructor
 */
 vpMbEdgeTracker::vpMbEdgeTracker()
+  : compute_interaction(1), lambda(1), me(), lines(1), cylinders(1), nline(0), ncylinder(0),
+    index_polygon(0), faces(), nbvisiblepolygone(0), percentageGdPt(0.4), scales(1),
+    Ipyramid(0), scaleLevel(0), useOgre(false),
+    angleAppears( vpMath::rad(89) ), angleDisappears( vpMath::rad(89) ),
+    distNearClip(0.001), distFarClip(100), clippingFlag(vpMbtPolygon::NO_CLIPPING)
 {
-  index_polygon =0;
-  compute_interaction=1;
-  nline = 0;
-  ncylinder = 0;
-  lambda = 1;
-  nbvisiblepolygone = 0;
-  percentageGdPt = 0.4;
-  computeCovariance = false;
-
-  lines.resize(1);
-  cylinders.resize(1);
-  scales.resize(1);
   scales[0] = true;
-  lines[0].clear();
-  cylinders[0].clear();
-  Ipyramid.resize(0);
   
 #ifdef VISP_HAVE_OGRE
   faces.getOgreContext()->setWindowName("MBT Edge");
 #endif
-  useOgre = false;
-  
-  angleAppears = vpMath::rad(95);
-  angleDisappears = vpMath::rad(95);
-  clippingFlag = vpMbtPolygon::NO_CLIPPING;
 }
 
 /*!
@@ -139,12 +124,12 @@ vpMbEdgeTracker::~vpMbEdgeTracker()
 /*! 
   Set the moving edge parameters.
   
-  \param me : an instance of vpMe containing all the desired parameters
+  \param p_me : an instance of vpMe containing all the desired parameters
 */
 void
-vpMbEdgeTracker::setMovingEdge(const vpMe &me)
+vpMbEdgeTracker::setMovingEdge(const vpMe &p_me)
 {
-  this->me = me;
+  this->me = p_me;
 
   for (unsigned int i = 0; i < scales.size(); i += 1){
     if(scales[i]){
@@ -268,8 +253,8 @@ vpMbEdgeTracker::computeVVS(const vpImage<unsigned char>& _I)
       double fac = 1;
       if (iter == 0)
       {
-        for(std::list<int>::const_iterator it = l->Lindex_polygon.begin(); it!=l->Lindex_polygon.end(); ++it){
-          int index = *it;
+        for(std::list<int>::const_iterator itindex = l->Lindex_polygon.begin(); itindex!=l->Lindex_polygon.end(); ++itindex){
+          int index = *itindex;
           if (l->hiddenface->isAppearing((unsigned int)index))
           {
             fac = 0.2;
@@ -740,8 +725,8 @@ vpMbEdgeTracker::testTracking()
     if (l->isVisible() && l->meline != NULL)
     {
       nbExpectedPoint += (int)l->meline->expecteddensity;
-      for(std::list<vpMeSite>::const_iterator it=l->meline->getMeList().begin(); it!=l->meline->getMeList().end(); ++it){
-        vpMeSite pix = *it;
+      for(std::list<vpMeSite>::const_iterator itme=l->meline->getMeList().begin(); itme!=l->meline->getMeList().end(); ++itme){
+        vpMeSite pix = *itme;
         if (pix.getState() == vpMeSite::NO_SUPPRESSION) nbGoodPoint++;
         else nbBadPoint++;
       }
@@ -755,14 +740,14 @@ vpMbEdgeTracker::testTracking()
     if (cy->meline1 !=NULL && cy->meline2 != NULL)
     {
       nbExpectedPoint += (int)cy->meline1->expecteddensity;
-      for(std::list<vpMeSite>::const_iterator it=cy->meline1->getMeList().begin(); it!=cy->meline1->getMeList().end(); ++it){
-        vpMeSite pix = *it;
+      for(std::list<vpMeSite>::const_iterator itme1=cy->meline1->getMeList().begin(); itme1!=cy->meline1->getMeList().end(); ++itme1){
+        vpMeSite pix = *itme1;
         if (pix.getState() == vpMeSite::NO_SUPPRESSION) nbGoodPoint++;
         else nbBadPoint++;
       }
       nbExpectedPoint += (int)cy->meline2->expecteddensity;
-      for(std::list<vpMeSite>::const_iterator it=cy->meline2->getMeList().begin(); it!=cy->meline2->getMeList().end(); ++it){
-        vpMeSite pix = *it;
+      for(std::list<vpMeSite>::const_iterator itme2=cy->meline2->getMeList().begin(); itme2!=cy->meline2->getMeList().end(); ++itme2){
+        vpMeSite pix = *itme2;
         if (pix.getState() == vpMeSite::NO_SUPPRESSION) nbGoodPoint++;
         else nbBadPoint++;
       }
@@ -1018,8 +1003,6 @@ vpMbEdgeTracker::loadConfigFile(const std::string& configFile)
     <fov_clipping>1</fov_clipping>
   </face>
   <camera>
-    <width>640</width>
-    <height>480</height>
     <u0>320</u0>
     <v0>240</v0>
     <px>686.24</px>
@@ -1037,10 +1020,10 @@ vpMbEdgeTracker::loadConfigFile(const char* configFile)
   vpMbtXmlParser xmlp;
   
   xmlp.setCameraParameters(cam);
-  xmlp.setMovingEdge(me);
   xmlp.setAngleAppear(vpMath::deg(angleAppears));
   xmlp.setAngleDisappear(vpMath::deg(angleDisappears));
-  
+  xmlp.setMovingEdge(me);
+
   try{
     std::cout << " *********** Parsing XML for Mb Edge Tracker ************ " << std::endl;
     xmlp.parse(configFile);
@@ -1067,7 +1050,8 @@ vpMbEdgeTracker::loadConfigFile(const char* configFile)
     setFarClippingDistance(xmlp.getFarClippingDistance());
   
   if(xmlp.getFovClipping())
-    clippingFlag = clippingFlag | vpMbtPolygon::FOV_CLIPPING;
+    setClipping(clippingFlag | vpMbtPolygon::FOV_CLIPPING);
+
 #else
   vpTRACE("You need the libXML2 to read the config file %s", configFile);
 #endif
@@ -1078,16 +1062,16 @@ vpMbEdgeTracker::loadConfigFile(const char* configFile)
   Display the 3D model from a given position of the camera.
 
   \param I : The image.
-  \param cMo : Pose used to project the 3D model into the image.
-  \param cam : The camera parameters.
+  \param cMo_ : Pose used to project the 3D model into the image.
+  \param camera : The camera parameters.
   \param col : The desired color.
   \param thickness : The thickness of the lines.
   \param displayFullModel : If true, the full model is displayed (even the non visible surfaces).
 */
 void
-vpMbEdgeTracker::display(const vpImage<unsigned char>& I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
-											const vpColor& col,
-											const unsigned int thickness, const bool displayFullModel)
+vpMbEdgeTracker::display(const vpImage<unsigned char>& I, const vpHomogeneousMatrix &cMo_,
+                         const vpCameraParameters &camera, const vpColor& col,
+                         const unsigned int thickness, const bool displayFullModel)
 {
   vpMbtDistanceLine *l ;
   
@@ -1095,11 +1079,11 @@ vpMbEdgeTracker::display(const vpImage<unsigned char>& I, const vpHomogeneousMat
     if(scales[i]){
       for(std::list<vpMbtDistanceLine*>::const_iterator it=lines[scaleLevel].begin(); it!=lines[scaleLevel].end(); ++it){
         l = *it;
-        l->display(I,cMo, cam, col, thickness, displayFullModel);
+        l->display(I,cMo_, camera, col, thickness, displayFullModel);
       }
 
       for(std::list<vpMbtDistanceCylinder*>::const_iterator it=cylinders[scaleLevel].begin(); it!=cylinders[scaleLevel].end(); ++it){
-        (*it)->display(I, cMo, cam, col, thickness);
+        (*it)->display(I, cMo_, camera, col, thickness);
       }
 
       break ; //displaying model on one scale only
@@ -1108,7 +1092,7 @@ vpMbEdgeTracker::display(const vpImage<unsigned char>& I, const vpHomogeneousMat
   
 #ifdef VISP_HAVE_OGRE
   if(useOgre)
-    faces.displayOgre(cMo);
+    faces.displayOgre(cMo_);
 #endif
 }
 
@@ -1116,16 +1100,16 @@ vpMbEdgeTracker::display(const vpImage<unsigned char>& I, const vpHomogeneousMat
   Display the 3D model from a given position of the camera.
 
   \param I : The image.
-  \param cMo : Pose used to project the 3D model into the image.
-  \param cam : The camera parameters.
+  \param cMo_ : Pose used to project the 3D model into the image.
+  \param camera : The camera parameters.
   \param col : The desired color.
   \param thickness : The thickness of the lines.
   \param displayFullModel : If true, the full model is displayed (even the non visible surfaces).
 */
 void
-vpMbEdgeTracker::display(const vpImage<vpRGBa>& I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
-											const vpColor& col,
-											const unsigned int thickness, const bool displayFullModel)
+vpMbEdgeTracker::display(const vpImage<vpRGBa>& I, const vpHomogeneousMatrix &cMo_,
+                         const vpCameraParameters &camera, const vpColor& col,
+                         const unsigned int thickness, const bool displayFullModel)
 {
   vpMbtDistanceLine *l ;
   
@@ -1133,11 +1117,11 @@ vpMbEdgeTracker::display(const vpImage<vpRGBa>& I, const vpHomogeneousMatrix &cM
     if(scales[i]){
       for(std::list<vpMbtDistanceLine*>::const_iterator it=lines[scaleLevel].begin(); it!=lines[scaleLevel].end(); ++it){
         l = *it;
-        l->display(I, cMo, cam, col, thickness, displayFullModel) ;
+        l->display(I, cMo_, camera, col, thickness, displayFullModel) ;
       }
 
       for(std::list<vpMbtDistanceCylinder*>::const_iterator it=cylinders[scaleLevel].begin(); it!=cylinders[scaleLevel].end(); ++it){
-        (*it)->display(I, cMo, cam, col, thickness) ;
+        (*it)->display(I, cMo_, camera, col, thickness) ;
       }
 
       break ; //displaying model on one scale only
@@ -1146,7 +1130,7 @@ vpMbEdgeTracker::display(const vpImage<vpRGBa>& I, const vpHomogeneousMatrix &cM
   
 #ifdef VISP_HAVE_OGRE
   if(useOgre)
-    faces.displayOgre(cMo);
+    faces.displayOgre(cMo_);
 #endif
 }
 
@@ -1168,8 +1152,8 @@ vpMbEdgeTracker::initMovingEdge(const vpImage<unsigned char> &I, const vpHomogen
     l = *it;
     bool isvisible = false ;
 
-    for(std::list<int>::const_iterator it=l->Lindex_polygon.begin(); it!=l->Lindex_polygon.end(); ++it){
-      int index = *it;
+    for(std::list<int>::const_iterator itindex=l->Lindex_polygon.begin(); itindex!=l->Lindex_polygon.end(); ++itindex){
+      int index = *itindex;
       if (index ==-1) isvisible =true ;
       else
       {
@@ -1545,13 +1529,15 @@ vpMbEdgeTracker::visibleFace(const vpImage<unsigned char> & _I,
   unsigned int n ;
   bool changed = false;
 
-  if(!useOgre)
-    n = faces.setVisible(_I, cam, _cMo, vpMath::rad(89), vpMath::rad(89), changed) ;
+  if(!useOgre) {
+    //n = faces.setVisible(_I, cam, _cMo, vpMath::rad(89), vpMath::rad(89), changed) ;
+    n = faces.setVisible(_I, cam, _cMo,  angleAppears, angleDisappears, changed) ;
+  }
   else{
 #ifdef VISP_HAVE_OGRE   
     n = faces.setVisibleOgre(_I, cam, _cMo, angleAppears, angleDisappears, changed);
 #else
-    n = faces.setVisible(_I, cam, _cMo, vpMath::rad(89), vpMath::rad(89), changed) ;
+    n = faces.setVisible(_I, cam, _cMo,  angleAppears, angleDisappears, changed) ;
 #endif
   } 
   
@@ -1625,18 +1611,18 @@ vpMbEdgeTracker::initFaceFromCorners(const std::vector<vpPoint>& _corners, const
   Add a cylinder to track from tow points on the axis (defining the length of
   the cylinder) and its radius.
 
-  \param _p1 : First point on the axis.
-  \param _p2 : Second point on the axis.
-  \param _radius : Radius of the cylinder.
-  \param _indexCylinder : Index of the cylinder.
+  \param p1 : First point on the axis.
+  \param p2 : Second point on the axis.
+  \param radius : Radius of the cylinder.
+  \param indexCylinder : Index of the cylinder.
 */
 void
-vpMbEdgeTracker::initCylinder(const vpPoint& _p1, const vpPoint _p2, const double _radius, const unsigned int _indexCylinder)
+vpMbEdgeTracker::initCylinder(const vpPoint& p1, const vpPoint &p2, const double radius, const unsigned int indexCylinder)
 {
-  if(_indexCylinder != 0){
-    ncylinder = _indexCylinder;
+  if(indexCylinder != 0){
+    ncylinder = indexCylinder;
   }
-  addCylinder(_p1, _p2, _radius);
+  addCylinder(p1, p2, radius);
 }
 
 /*!
@@ -1679,10 +1665,10 @@ vpMbEdgeTracker::resetTracker()
   nbvisiblepolygone = 0;
   percentageGdPt = 0.4;
   
-  angleAppears = vpMath::rad(95);
-  angleDisappears = vpMath::rad(95);
+  angleAppears = vpMath::rad(89);
+  angleDisappears = vpMath::rad(89);
   clippingFlag = vpMbtPolygon::NO_CLIPPING;
-  
+
   // reinitialization of the scales.
   this->setScales(scales);
 }
@@ -1694,14 +1680,45 @@ vpMbEdgeTracker::resetTracker()
   
   \param I : The image containing the object to initialize.
   \param cad_name : Path to the file containing the 3D model description.
-  \param cMo : The new vpHomogeneousMatrix between the camera and the new model
+  \param cMo_ : The new vpHomogeneousMatrix between the camera and the new model
 */
 void
-vpMbEdgeTracker::reInitModel(const vpImage<unsigned char>& I, const char* cad_name, const vpHomogeneousMatrix& cMo)
+vpMbEdgeTracker::reInitModel(const vpImage<unsigned char>& I, const char* cad_name,
+                             const vpHomogeneousMatrix& cMo_)
 {
-  resetTracker();
+  this->cMo.setIdentity();
+  vpMbtDistanceLine *l;
+  vpMbtDistanceCylinder *cy;
+
+  for (unsigned int i = 0; i < scales.size(); i += 1){
+    if(scales[i]){
+      for(std::list<vpMbtDistanceLine*>::const_iterator it=lines[i].begin(); it!=lines[i].end(); ++it){
+        l = *it;
+        if (l!=NULL) delete l ;
+        l = NULL ;
+      }
+
+      for(std::list<vpMbtDistanceCylinder*>::const_iterator it=cylinders[i].begin(); it!=cylinders[i].end(); ++it){
+        cy = *it;
+        if (cy!=NULL) delete cy;
+        cy = NULL;
+      }
+      lines[i].clear();
+      cylinders[i].clear();
+    }
+  }
+
+  faces.reset();
+
+  index_polygon =0;
+  //compute_interaction=1;
+  nline = 0;
+  ncylinder = 0;
+  //lambda = 1;
+  nbvisiblepolygone = 0;
+
   loadModel(cad_name);
-  initFromPose(I, cMo);
+  initFromPose(I, cMo_);
 }
 
 /*!
@@ -1727,8 +1744,8 @@ vpMbEdgeTracker::getNbPoints(const unsigned int level) const
     l = *it;
     if (l->isVisible() && l->meline != NULL)
     {
-      for(std::list<vpMeSite>::const_iterator it=l->meline->getMeList().begin(); it!=l->meline->getMeList().end(); ++it){
-        if (it->getState() == vpMeSite::NO_SUPPRESSION) nbGoodPoints++;
+      for(std::list<vpMeSite>::const_iterator itme=l->meline->getMeList().begin(); itme!=l->meline->getMeList().end(); ++itme){
+        if (itme->getState() == vpMeSite::NO_SUPPRESSION) nbGoodPoints++;
       }
     }
   }
@@ -1738,11 +1755,11 @@ vpMbEdgeTracker::getNbPoints(const unsigned int level) const
     cy = *it;
     if (cy->meline1 != NULL || cy->meline2 != NULL)
     {
-      for(std::list<vpMeSite>::const_iterator it=cy->meline1->getMeList().begin(); it!=cy->meline1->getMeList().end(); ++it){
-        if (it->getState() == vpMeSite::NO_SUPPRESSION) nbGoodPoints++;
+      for(std::list<vpMeSite>::const_iterator itme1=cy->meline1->getMeList().begin(); itme1!=cy->meline1->getMeList().end(); ++itme1){
+        if (itme1->getState() == vpMeSite::NO_SUPPRESSION) nbGoodPoints++;
       }
-      for(std::list<vpMeSite>::const_iterator it=cy->meline2->getMeList().begin(); it!=cy->meline2->getMeList().end(); ++it){
-        if (it->getState() == vpMeSite::NO_SUPPRESSION) nbGoodPoints++;
+      for(std::list<vpMeSite>::const_iterator itme2=cy->meline2->getMeList().begin(); itme2!=cy->meline2->getMeList().end(); ++itme2){
+        if (itme2->getState() == vpMeSite::NO_SUPPRESSION) nbGoodPoints++;
       }
     }
   }
@@ -1799,18 +1816,18 @@ vpMbEdgeTracker::getNbPolygon() const
   
   \warning At least one level must be activated. 
   
-  \param scales : The vector describing the levels to use.
+  \param scale : The vector describing the levels to use.
 */
 void 
-vpMbEdgeTracker::setScales(const std::vector<bool>& scales)
+vpMbEdgeTracker::setScales(const std::vector<bool>& scale)
 {
   unsigned int nbActivatedLevels = 0;
-  for (unsigned int i = 0; i < scales.size(); i += 1){
-    if(scales[i]){
+  for (unsigned int i = 0; i < scale.size(); i += 1){
+    if(scale[i]){
       nbActivatedLevels++;
     }
   }
-  if((scales.size() < 1) || (nbActivatedLevels == 0)){
+  if((scale.size() < 1) || (nbActivatedLevels == 0)){
     vpERROR_TRACE(" !! WARNING : must use at least one level for the tracking. Use the global one");
     this->scales.resize(0);
     this->scales.push_back(true);
@@ -1820,9 +1837,9 @@ vpMbEdgeTracker::setScales(const std::vector<bool>& scales)
     cylinders[0].clear();
   }
   else{
-    this->scales = scales;
-    lines.resize(scales.size());
-    cylinders.resize(scales.size());
+    this->scales = scale;
+    lines.resize(scale.size());
+    cylinders.resize(scale.size());
     for (unsigned int i = 0; i < lines.size(); i += 1){
       lines[i].clear();
       cylinders[i].clear();
diff --git a/src/tracking/mbt/edge/vpMbEdgeTracker.h b/src/tracking/mbt/edge/vpMbEdgeTracker.h
index ca5c29da..6935b6df 100644
--- a/src/tracking/mbt/edge/vpMbEdgeTracker.h
+++ b/src/tracking/mbt/edge/vpMbEdgeTracker.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbEdgeTracker.h 4338 2013-07-23 14:29:30Z fspindle $
+ * $Id: vpMbEdgeTracker.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -380,7 +380,7 @@ public:
     
     \return an instance of the moving edge parameters used by the tracker.
   */
-  inline void getMovingEdge(vpMe &me ) const { me = this->me;}
+  inline void getMovingEdge(vpMe &p_me ) const { p_me = this->me;}
   
   /*!
     Get the near distance for clipping.
@@ -439,10 +439,10 @@ public:
   /*!
     Set the camera parameters.
 
-    \param cam : the new camera parameters
+    \param camera : the new camera parameters
   */
-  virtual void setCameraParameters(const vpCameraParameters& cam) {
-    this->cam = cam;
+  virtual void setCameraParameters(const vpCameraParameters& camera) {
+    this->cam = camera;
 
     for (unsigned int i = 0; i < scales.size(); i += 1){
       if(scales[i]){
@@ -487,9 +487,9 @@ public:
   /*!
     Set the value of the gain used to compute the control law.
     
-    \param lambda : the desired value for the gain.
+    \param gain : the desired value for the gain.
   */
-  virtual inline void setLambda(const double lambda) {this->lambda = lambda;}
+  virtual inline void setLambda(const double gain) {this->lambda = gain;}
   
   void setMovingEdge(const vpMe &me);
   
@@ -511,7 +511,7 @@ protected:
   void computeVVS(const vpImage<unsigned char>& _I);
   void downScale(const unsigned int _scale);
   void init(const vpImage<unsigned char>& I);
-  virtual void initCylinder(const vpPoint& _p1, const vpPoint _p2, const double _radius, const unsigned int _indexCylinder=0);
+  virtual void initCylinder(const vpPoint& p1, const vpPoint &p2, const double radius, const unsigned int indexCylinder=0);
   virtual void initFaceFromCorners(const std::vector<vpPoint>& _corners, const unsigned int _indexFace = -1);
   void initMovingEdge(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &_cMo) ;
   void initPyramid(const vpImage<unsigned char>& _I, std::vector<const vpImage<unsigned char>* >& _pyramid);
diff --git a/src/tracking/mbt/edge/vpMbtDistanceCylinder.cpp b/src/tracking/mbt/edge/vpMbtDistanceCylinder.cpp
index d7d08dcb..ec401b7e 100755
--- a/src/tracking/mbt/edge/vpMbtDistanceCylinder.cpp
+++ b/src/tracking/mbt/edge/vpMbtDistanceCylinder.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbtDistanceCylinder.cpp 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpMbtDistanceCylinder.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -64,22 +64,12 @@
   Basic constructor
 */
 vpMbtDistanceCylinder::vpMbtDistanceCylinder()
+  : name(), index(0), cam(), me(NULL), alpha(0), wmean1(1), wmean2(1),
+    featureline1(), featureline2(), meline1(NULL), meline2(NULL),
+    cercle1(NULL), cercle2(NULL), radius(0), p1(NULL), p2(NULL), L(),
+    error(), nbFeature(0), nbFeaturel1(0), nbFeaturel2(0), Reinit(false),
+    c(NULL)
 {
-  name = "";
-  p1 = NULL ;
-  p2 = NULL ;
-  c = NULL ;
-  meline1 = NULL ;
-  meline2 = NULL ;
-  wmean1 = 1 ;
-  wmean2 = 1 ;
-  nbFeaturel1 =0 ;
-  nbFeaturel2 =0 ;
-  nbFeature =0 ;
-  Reinit = false;
-
-  cercle1 = NULL;
-  cercle2 = NULL;
 }
 
 /*!
@@ -497,12 +487,13 @@ vpMbtDistanceCylinder::reinitMovingEdge(const vpImage<unsigned char> &I, const v
 
   \param I : The image.
   \param cMo : Pose used to project the 3D model into the image.
-  \param cam : The camera parameters.
+  \param camera : The camera parameters.
   \param col : The desired color.
   \param thickness : The thickness of the lines.
 */
 void
-vpMbtDistanceCylinder::display(const vpImage<unsigned char>&I, const vpHomogeneousMatrix &cMo, const vpCameraParameters&cam, const vpColor col, const unsigned int thickness)
+vpMbtDistanceCylinder::display(const vpImage<unsigned char>&I, const vpHomogeneousMatrix &cMo,
+                               const vpCameraParameters&camera, const vpColor col, const unsigned int thickness)
 {
 	// Perspective projection
 	p1->changeFrame(cMo);
@@ -527,8 +518,8 @@ vpMbtDistanceCylinder::display(const vpImage<unsigned char>&I, const vpHomogeneo
   double rho2,theta2;
 
   // Meters to pixels conversion
-  vpMeterPixelConversion::convertLine(cam,c->getRho1(),c->getTheta1(),rho1,theta1);
-  vpMeterPixelConversion::convertLine(cam,c->getRho2(),c->getTheta2(),rho2,theta2);
+  vpMeterPixelConversion::convertLine(camera,c->getRho1(),c->getTheta1(),rho1,theta1);
+  vpMeterPixelConversion::convertLine(camera,c->getRho2(),c->getTheta2(),rho2,theta2);
 
 	// Determine intersections between circles and limbos
 	double i11,i12,i21,i22,j11,j12,j21,j22;
@@ -556,12 +547,13 @@ vpMbtDistanceCylinder::display(const vpImage<unsigned char>&I, const vpHomogeneo
 
   \param I : The image.
   \param cMo : Pose used to project the 3D model into the image.
-  \param cam : The camera parameters.
+  \param camera : The camera parameters.
   \param col : The desired color.
   \param thickness : The thickness of the lines.
 */
 void
-vpMbtDistanceCylinder::display(const vpImage<vpRGBa>&I, const vpHomogeneousMatrix &cMo, const vpCameraParameters&cam, const vpColor col, const unsigned int thickness)
+vpMbtDistanceCylinder::display(const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &cMo,
+                               const vpCameraParameters &camera, const vpColor col, const unsigned int thickness)
 {
 	// Perspective projection
 	p1->changeFrame(cMo);
@@ -586,8 +578,8 @@ vpMbtDistanceCylinder::display(const vpImage<vpRGBa>&I, const vpHomogeneousMatri
   double rho2,theta2;
 
   // Meters to pixels conversion
-  vpMeterPixelConversion::convertLine(cam,c->getRho1(),c->getTheta1(),rho1,theta1);
-  vpMeterPixelConversion::convertLine(cam,c->getRho2(),c->getTheta2(),rho2,theta2);
+  vpMeterPixelConversion::convertLine(camera,c->getRho1(),c->getTheta1(),rho1,theta1);
+  vpMeterPixelConversion::convertLine(camera,c->getRho2(),c->getTheta2(),rho2,theta2);
 
 	// Determine intersections between circles and limbos
 	double i11,i12,i21,i22,j11,j12,j21,j22;
diff --git a/src/tracking/mbt/edge/vpMbtDistanceCylinder.h b/src/tracking/mbt/edge/vpMbtDistanceCylinder.h
index fe942319..ec448b7e 100755
--- a/src/tracking/mbt/edge/vpMbtDistanceCylinder.h
+++ b/src/tracking/mbt/edge/vpMbtDistanceCylinder.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbtDistanceCylinder.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMbtDistanceCylinder.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -126,9 +126,9 @@ class VISP_EXPORT vpMbtDistanceCylinder
     /*!
      Get the camera paramters.
    
-     \param cam : The vpCameraParameters used to store the camera parameters.
+     \param camera : The vpCameraParameters used to store the camera parameters.
     */
-    inline void getCameraParameters(vpCameraParameters& cam) {cam = this->cam;}
+    inline void getCameraParameters(vpCameraParameters& camera) {camera = this->cam;}
     
     /*!
       Get the index of the cylinder.
@@ -168,9 +168,9 @@ class VISP_EXPORT vpMbtDistanceCylinder
     
     /*!
      Set the camera paramters.
-     \param cam : The camera parameters.
+     \param camera : The camera parameters.
     */
-    inline void setCameraParameters(const vpCameraParameters& cam) {this->cam = cam;}
+    inline void setCameraParameters(const vpCameraParameters& camera) {this->cam = camera;}
     
     /*!
       Set the index of the cylinder.
@@ -198,18 +198,17 @@ class VISP_EXPORT vpMbtDistanceCylinder
     /*!
       Set the name of the cylinder.
       
-      \param name : The name of the cylinder.
+      \param cyl_name : The name of the cylinder.
     */
-    inline void setName(const std::string& name) {this->name = name;}
+    inline void setName(const std::string& cyl_name) {this->name = cyl_name;}
     
     /*!
       Set the name of the cylinder.
       
-      \param name : The name of the cylinder
+      \param cyl_name : The name of the cylinder
     */
-    inline void setName(const char* name) {this->name = name;}
+    inline void setName(const char* cyl_name) {this->name = std::string(cyl_name);}
 
-    
     void trackMovingEdge(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo);
     
     void updateMovingEdge(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo);
diff --git a/src/tracking/mbt/edge/vpMbtDistanceLine.cpp b/src/tracking/mbt/edge/vpMbtDistanceLine.cpp
index afa9fc6b..876b32bc 100644
--- a/src/tracking/mbt/edge/vpMbtDistanceLine.cpp
+++ b/src/tracking/mbt/edge/vpMbtDistanceLine.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbtDistanceLine.cpp 4311 2013-07-16 15:02:57Z ayol $
+ * $Id: vpMbtDistanceLine.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -53,21 +53,18 @@
 #include <visp/vpFeatureBuilder.h>
 #include <stdlib.h>
 
+void buildPlane(vpPoint &P, vpPoint &Q, vpPoint &R, vpPlane &plane);
+void buildLine(vpPoint &P1, vpPoint &P2, vpPoint &P3, vpPoint &P4, vpLine &L);
+
 /*!
   Basic constructor
 */
 vpMbtDistanceLine::vpMbtDistanceLine()
+  : name(), index(0), cam(), me(NULL), alpha(0), wmean(1),
+    featureline(), poly(), meline(NULL), line(NULL), p1(NULL), p2(NULL), L(),
+    error(), nbFeature(0), Reinit(false), hiddenface(NULL), Lindex_polygon(),
+    isvisible(false)
 {
-  name = "";
-  p1 = NULL ;
-  p2 = NULL ;
-  line = NULL ;
-  meline = NULL ;
-  hiddenface = NULL ;
-  wmean = 1 ;
-  nbFeature =0 ;
-  Reinit = false;
-  isvisible = false;
 }
 
 /*!
@@ -430,20 +427,21 @@ vpMbtDistanceLine::reinitMovingEdge(const vpImage<unsigned char> &I, const vpHom
 
   \param I : The image.
   \param cMo : Pose used to project the 3D model into the image.
-  \param cam : The camera parameters.
+  \param camera : The camera parameters.
   \param col : The desired color.
   \param thickness : The thickness of the line.
   \param displayFullModel : If true, the line is displayed even if it is not visible.
 */
 void
-vpMbtDistanceLine::display(const vpImage<unsigned char>&I, const vpHomogeneousMatrix &cMo, const vpCameraParameters&cam, const vpColor col, const unsigned int thickness, const bool displayFullModel)
+vpMbtDistanceLine::display(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo,
+                           const vpCameraParameters &camera, const vpColor col, const unsigned int thickness, const bool displayFullModel)
 {
   p1->changeFrame(cMo);
   p2->changeFrame(cMo);
 
   if(isvisible || displayFullModel){
     vpImagePoint ip1, ip2;
-    vpCameraParameters c = cam;
+    vpCameraParameters c = camera;
     if(poly.getClipping() > 3) // Contains at least one FOV constraint
       c.computeFov(I.getWidth(), I.getHeight());
     
@@ -470,20 +468,22 @@ vpMbtDistanceLine::display(const vpImage<unsigned char>&I, const vpHomogeneousMa
 
   \param I : The image.
   \param cMo : Pose used to project the 3D model into the image.
-  \param cam : The camera parameters.
+  \param camera : The camera parameters.
   \param col : The desired color.
   \param thickness : The thickness of the line.
   \param displayFullModel : If true, the line is displayed even if it is not visible.
 */
 void
-vpMbtDistanceLine::display(const vpImage<vpRGBa>&I, const vpHomogeneousMatrix &cMo, const vpCameraParameters&cam, const vpColor col, const unsigned int thickness, const bool displayFullModel)
+vpMbtDistanceLine::display(const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &cMo,
+                           const vpCameraParameters &camera, const vpColor col,
+                           const unsigned int thickness, const bool displayFullModel)
 {
   p1->changeFrame(cMo);
   p2->changeFrame(cMo);
 
   if(isvisible || displayFullModel){
     vpImagePoint ip1, ip2;
-    vpCameraParameters c = cam;
+    vpCameraParameters c = camera;
     if(poly.getClipping() > 3) // Contains at least one FOV constraint
       c.computeFov(I.getWidth(), I.getHeight());
     
@@ -566,7 +566,7 @@ vpMbtDistanceLine::computeInteractionMatrixError(const vpHomogeneousMatrix &cMo)
     double xc = cam.get_u0() ;
     double yc = cam.get_v0() ;
 
-    double alpha ;
+    double alpha_ ;
     vpMatrix H ;
     H = featureline.interaction() ;
 
@@ -580,14 +580,14 @@ vpMbtDistanceLine::computeInteractionMatrixError(const vpHomogeneousMatrix &cMo)
       x = (x-xc)*mx ;
       y = (y-yc)*my ;
 
-      alpha = x*si - y*co;
+      alpha_ = x*si - y*co;
 
       double *Lrho = H[0] ;
       double *Ltheta = H[1] ;
       // Calculate interaction matrix for a distance
       for (unsigned int k=0 ; k < 6 ; k++)
       {
-        L[j][k] = (Lrho[k] + alpha*Ltheta[k]);
+        L[j][k] = (Lrho[k] + alpha_*Ltheta[k]);
       }
       error[j] = rho - ( x*co + y*si) ;
       j++;
diff --git a/src/tracking/mbt/edge/vpMbtDistanceLine.h b/src/tracking/mbt/edge/vpMbtDistanceLine.h
index 925504b1..ad0d2af1 100644
--- a/src/tracking/mbt/edge/vpMbtDistanceLine.h
+++ b/src/tracking/mbt/edge/vpMbtDistanceLine.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbtDistanceLine.h 4337 2013-07-23 13:57:53Z ayol $
+ * $Id: vpMbtDistanceLine.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -119,9 +119,9 @@ class VISP_EXPORT vpMbtDistanceLine
     /*!
      Get the camera paramters.
    
-     \param cam : The vpCameraParameters used to store the camera parameters.
+     \param camera : The vpCameraParameters used to store the camera parameters.
     */
-    inline void getCameraParameters(vpCameraParameters& cam) const {cam = this->cam;}
+    inline void getCameraParameters(vpCameraParameters& camera) const {camera = this->cam;}
     
     /*!
       Get the index of the line.
@@ -167,9 +167,9 @@ class VISP_EXPORT vpMbtDistanceLine
     
     /*!
      Set the camera paramters.
-     \param cam : The camera parameters.
+     \param camera : The camera parameters.
     */
-    inline void setCameraParameters(const vpCameraParameters& cam) {this->cam = cam;}
+    inline void setCameraParameters(const vpCameraParameters& camera) {this->cam = camera;}
     
     /*!
       Set the index of the line.
@@ -181,25 +181,25 @@ class VISP_EXPORT vpMbtDistanceLine
     /*!
      Set the mean weight of the line.
    
-     \param wmean : The mean weight of the line.
+     \param w_mean : The mean weight of the line.
     */
-    inline void setMeanWeight(const double wmean) {this->wmean = wmean;}
+    inline void setMeanWeight(const double w_mean) {this->wmean = w_mean;}
     
     void setMovingEdge(vpMe *Me);
     
     /*!
       Set the name of the line.
       
-      \param name : The name of the line.
+      \param line_name : The name of the line.
     */
-    inline void setName(const std::string name) {this->name = name;}
+    inline void setName(const std::string line_name) {this->name = line_name;}
     
     /*!
       Set the name of the line.
       
-      \param name : The name of the line.
+      \param line_name : The name of the line.
     */
-    inline void setName(const char* name) {this->name = name;}
+    inline void setName(const char* line_name) {this->name = std::string(line_name);}
 
     /*!
       Set a boolean parameter to indicates if the line is visible in the image or not.
@@ -213,7 +213,7 @@ class VISP_EXPORT vpMbtDistanceLine
     void updateMovingEdge(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo);
 
   private:
-    void belongToPolygon(int index) { Lindex_polygon.push_back(index); }
+    void belongToPolygon(int index_) { Lindex_polygon.push_back(index_); }
     void project(const vpHomogeneousMatrix &cMo);
     void setFace( vpMbHiddenFaces<vpMbtPolygon> *_hiddenface) { hiddenface = _hiddenface ; }
     
diff --git a/src/tracking/mbt/edge/vpMbtMeLine.cpp b/src/tracking/mbt/edge/vpMbtMeLine.cpp
index 9754263a..7c2cea16 100644
--- a/src/tracking/mbt/edge/vpMbtMeLine.cpp
+++ b/src/tracking/mbt/edge/vpMbtMeLine.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbtMeLine.cpp 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpMbtMeLine.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -66,10 +66,11 @@ normalizeAngle(double &delta)
 /*!
   Basic constructor that calls the constructor of the class vpMeTracker.
 */
-vpMbtMeLine::vpMbtMeLine():vpMeTracker()
+vpMbtMeLine::vpMbtMeLine()
+  : rho(0.), theta(0.), theta_1(M_PI/2), delta(0.), delta_1(0), sign(1),
+    a(0.), b(0.), c(0.), imin(0), imax(0), jmin(0), jmax(0),
+    expecteddensity(0.)
 {
-  sign = 1;
-  theta_1 = M_PI/2;
 }
 
 /*!
@@ -89,11 +90,12 @@ vpMbtMeLine::~vpMbtMeLine()
   \param I : Image in which the line appears.
   \param ip1 : Coordinates of the first point.
   \param ip2 : Coordinates of the second point.
-  \param rho : The \f$\rho\f$ parameter
-  \param theta : The \f$\theta\f$ parameter
+  \param rho_ : The \f$\rho\f$ parameter
+  \param theta_ : The \f$\theta\f$ parameter
 */
 void
-vpMbtMeLine::initTracking(const vpImage<unsigned char> &I, const vpImagePoint &ip1, const vpImagePoint &ip2, double rho, double theta)
+vpMbtMeLine::initTracking(const vpImage<unsigned char> &I, const vpImagePoint &ip1, const vpImagePoint &ip2,
+                          double rho_, double theta_)
 {
   vpCDEBUG(1) <<" begin vpMeLine::initTracking()"<<std::endl ;
 
@@ -106,8 +108,8 @@ vpMbtMeLine::initTracking(const vpImage<unsigned char> &I, const vpImagePoint &i
     PExt[1].ifloat = (float)ip2.get_i() ;
     PExt[1].jfloat = (float)ip2.get_j() ;
      
-    this->rho = rho;
-    this->theta = theta;
+    this->rho = rho_;
+    this->theta = theta_;
       
     a = cos(theta);
     b = sin(theta);
@@ -287,7 +289,7 @@ vpMbtMeLine::seekExtremities(const vpImage<unsigned char> &I)
 
   // number of samples along line_p
   n_sample = length_p/(double)me->getSampleStep();
-  double sample = (double)me->getSampleStep();
+  double sample_step = (double)me->getSampleStep();
 
   vpMeSite P ;
   P.init((int) PExt[0].ifloat, (int)PExt[0].jfloat, delta_1, 0, sign) ;
@@ -298,8 +300,8 @@ vpMbtMeLine::seekExtremities(const vpImage<unsigned char> &I)
 
   for (int i=0 ; i < 3 ; i++)
   {
-    P.ifloat = P.ifloat + di*sample ; P.i = (int)P.ifloat ;
-    P.jfloat = P.jfloat + dj*sample ; P.j = (int)P.jfloat ;
+    P.ifloat = P.ifloat + di*sample_step ; P.i = (int)P.ifloat ;
+    P.jfloat = P.jfloat + dj*sample_step ; P.j = (int)P.jfloat ;
 
 
     if ((P.i < imin) ||(P.i > imax) || (P.j < jmin) || (P.j > jmax) ) 
@@ -325,8 +327,8 @@ vpMbtMeLine::seekExtremities(const vpImage<unsigned char> &I)
   P.setDisplay(selectDisplay) ;
   for (int i=0 ; i < 3 ; i++)
   {
-    P.ifloat = P.ifloat - di*sample ; P.i = (int)P.ifloat ;
-    P.jfloat = P.jfloat - dj*sample ; P.j = (int)P.jfloat ;
+    P.ifloat = P.ifloat - di*sample_step ; P.i = (int)P.ifloat ;
+    P.jfloat = P.jfloat - dj*sample_step ; P.j = (int)P.jfloat ;
 
 
     if ((P.i < imin) ||(P.i > imax) || (P.j < jmin) || (P.j > jmax) ) 
@@ -371,9 +373,9 @@ vpMbtMeLine::reSample(const vpImage<unsigned char> &I)
   double d = sqrt(vpMath::sqr(PExt[0].ifloat-PExt[1].ifloat)+vpMath::sqr(PExt[0].jfloat-PExt[1].jfloat)) ;
 
   unsigned int n = numberOfSignal() ;
-  double expecteddensity = d / (double)me->getSampleStep();
+  double expected_density = d / (double)me->getSampleStep();
 
-  if ((double)n<0.5*expecteddensity && n > 0)
+  if ((double)n<0.5*expected_density && n > 0)
   {
     double delta_new = delta;
     delta = delta_1;
@@ -427,7 +429,7 @@ vpMbtMeLine::reSample(const vpImage<unsigned char> &I, vpImagePoint ip1, vpImage
 void
 vpMbtMeLine::updateDelta()
 {
-  vpMeSite p ;
+  vpMeSite p_me ;
 
   double diff = 0;
 
@@ -447,10 +449,10 @@ vpMbtMeLine::updateDelta()
   normalizeAngle(delta);
 
   for(std::list<vpMeSite>::iterator it=list.begin(); it!=list.end(); ++it){
-    p = *it;
-    p.alpha = delta ;
-    p.mask_sign = sign;
-    *it = p;
+    p_me = *it;
+    p_me.alpha = delta ;
+    p_me.mask_sign = sign;
+    *it = p_me;
   }
   delta_1 = delta;
 }
@@ -483,14 +485,14 @@ vpMbtMeLine::track(const vpImage<unsigned char> &I)
   Update the moving edges parameters after the virtual visual servoing.
   
   \param  I : The image.
-  \param  rho : The \f$\rho\f$ parameter used in the line's polar equation.
-  \param  theta : The \f$\theta\f$ parameter used in the line's polar equation.
+  \param  rho_ : The \f$\rho\f$ parameter used in the line's polar equation.
+  \param  theta_ : The \f$\theta\f$ parameter used in the line's polar equation.
 */
 void
-vpMbtMeLine::updateParameters(const vpImage<unsigned char> &I, double rho, double theta)
+vpMbtMeLine::updateParameters(const vpImage<unsigned char> &I, double rho_, double theta_)
 {
-  this->rho = rho;
-  this->theta = theta;
+  this->rho = rho_;
+  this->theta = theta_;
   a = cos(theta);
   b = sin(theta);
   c = -rho;
@@ -514,14 +516,15 @@ vpMbtMeLine::updateParameters(const vpImage<unsigned char> &I, double rho, doubl
   \param I : The image.
   \param ip1 : The first extremity of the line.
   \param ip2 : The second extremity of the line.
-  \param rho : The \f$\rho\f$ parameter used in the line's polar equation.
-  \param theta : The \f$\theta\f$ parameter used in the line's polar equation.
+  \param rho_ : The \f$\rho\f$ parameter used in the line's polar equation.
+  \param theta_ : The \f$\theta\f$ parameter used in the line's polar equation.
 */
 void
-vpMbtMeLine::updateParameters(const vpImage<unsigned char> &I, vpImagePoint ip1, vpImagePoint ip2, double rho, double theta)
+vpMbtMeLine::updateParameters(const vpImage<unsigned char> &I, vpImagePoint ip1, vpImagePoint ip2,
+                              double rho_, double theta_)
 {
-  this->rho = rho;
-  this->theta = theta;
+  this->rho = rho_;
+  this->theta = theta_;
   a = cos(theta);
   b = sin(theta);
   c = -rho;
@@ -545,58 +548,58 @@ vpMbtMeLine::updateParameters(const vpImage<unsigned char> &I, vpImagePoint ip1,
 void
 vpMbtMeLine::setExtremities()
 {
-  double imin = +1e6 ;
-  double jmin = +1e6;
-  double imax = -1 ;
-  double jmax = -1 ;
+  double i_min = +1e6 ;
+  double j_min = +1e6;
+  double i_max = -1 ;
+  double j_max = -1 ;
 
   // Loop through list of sites to track
   for(std::list<vpMeSite>::const_iterator it=list.begin(); it!=list.end(); ++it){
     vpMeSite s = *it;//current reference pixel
-    if (s.ifloat < imin)
+    if (s.ifloat < i_min)
     {
-      imin = s.ifloat ;
-      jmin = s.jfloat ;
+      i_min = s.ifloat ;
+      j_min = s.jfloat ;
     }
 
-    if (s.ifloat > imax)
+    if (s.ifloat > i_max)
     {
-      imax = s.ifloat ;
-      jmax = s.jfloat ;
+      i_max = s.ifloat ;
+      j_max = s.jfloat ;
     }
   }
 
   if ( ! list.empty() )
   {
-    PExt[0].ifloat = imin ;
-    PExt[0].jfloat = jmin ;
-    PExt[1].ifloat = imax ;
-    PExt[1].jfloat = jmax ;
+    PExt[0].ifloat = i_min ;
+    PExt[0].jfloat = j_min ;
+    PExt[1].ifloat = i_max ;
+    PExt[1].jfloat = j_max ;
   }
 
-  if (fabs(imin-imax) < 25)
+  if (fabs(i_min-i_max) < 25)
   {
     for(std::list<vpMeSite>::const_iterator it=list.begin(); it!=list.end(); ++it){
       vpMeSite s = *it;//current reference pixel
-      if (s.jfloat < jmin)
+      if (s.jfloat < j_min)
       {
-        imin = s.ifloat ;
-        jmin = s.jfloat ;
+        i_min = s.ifloat ;
+        j_min = s.jfloat ;
       }
 
-      if (s.jfloat > jmax)
+      if (s.jfloat > j_max)
       {
-        imax = s.ifloat ;
-        jmax = s.jfloat ;
+        i_max = s.ifloat ;
+        j_max = s.jfloat ;
       }
     }
 
     if (! list.empty())
     {
-      PExt[0].ifloat = imin ;
-      PExt[0].jfloat = jmin ;
-      PExt[1].ifloat = imax ;
-      PExt[1].jfloat = jmax ;
+      PExt[0].ifloat = i_min ;
+      PExt[0].jfloat = j_min ;
+      PExt[1].ifloat = i_max ;
+      PExt[1].jfloat = j_max ;
     }
     bubbleSortJ();
   }
@@ -661,7 +664,7 @@ vpMbtMeLine::bubbleSortJ()
 
 
 void
-vpMbtMeLine::findSignal(const vpImage<unsigned char>& I, const vpMe *me, double *conv)
+vpMbtMeLine::findSignal(const vpImage<unsigned char>& I, const vpMe *p_me, double *conv)
 {
   vpImagePoint itest(PExt[0].ifloat+(PExt[1].ifloat-PExt[0].ifloat)/2, PExt[0].jfloat+(PExt[1].jfloat-PExt[0].jfloat)/2);
   
@@ -670,7 +673,7 @@ vpMbtMeLine::findSignal(const vpImage<unsigned char>& I, const vpMe *me, double
   
   vpMeSite  *list_query_pixels;
 //  double  convolution = 0;
-  unsigned int range  = me->getRange();
+  unsigned int range  = p_me->getRange();
   
   list_query_pixels = pix.getQueryList(I, (int)range);
   
@@ -680,7 +683,7 @@ vpMbtMeLine::findSignal(const vpImage<unsigned char>& I, const vpMe *me, double
 
   for(unsigned int n = 0 ; n < 2 * range + 1 ; n++)
   {
-    conv[n] = list_query_pixels[n].convolution(I, me);
+    conv[n] = list_query_pixels[n].convolution(I, p_me);
   }
   delete [] list_query_pixels;
 }
diff --git a/src/tracking/mbt/edge/vpMbtMeLine.h b/src/tracking/mbt/edge/vpMbtMeLine.h
index a3ebfcb0..8cdaaa00 100644
--- a/src/tracking/mbt/edge/vpMbtMeLine.h
+++ b/src/tracking/mbt/edge/vpMbtMeLine.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbtMeLine.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMbtMeLine.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/mbt/edge/vpMbtPolygon.cpp b/src/tracking/mbt/edge/vpMbtPolygon.cpp
index d605fa8c..c5c87c83 100644
--- a/src/tracking/mbt/edge/vpMbtPolygon.cpp
+++ b/src/tracking/mbt/edge/vpMbtPolygon.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbtPolygon.cpp 4319 2013-07-17 10:04:09Z ayol $
+ * $Id: vpMbtPolygon.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -56,17 +56,37 @@
   Basic constructor.
 */
 vpMbtPolygon::vpMbtPolygon()
+  : index(-1), nbpt(0), nbCornersInsidePrev(0), isvisible(false), isappearing(false),
+    p(NULL), roiPointsClip(), clippingFlag(vpMbtPolygon::NO_CLIPPING),
+    distNearClip(0.001), distFarClip(100.)
 {
-  nbpt = 0 ;
-  p = NULL ;
-  isappearing = false;
-  isvisible = false;
-  nbCornersInsidePrev = 0;
-  
-  distNearClip = 0.001;
-  distFarClip = 100.0;
-  
-  clippingFlag = vpMbtPolygon::NO_CLIPPING;
+}
+
+vpMbtPolygon::vpMbtPolygon(const vpMbtPolygon& mbtp)
+  : index(-1), nbpt(0), nbCornersInsidePrev(0), isvisible(false), isappearing(false),
+    p(NULL), roiPointsClip(), clippingFlag(vpMbtPolygon::NO_CLIPPING),
+    distNearClip(0.001), distFarClip(100.)
+{
+  *this = mbtp;
+}
+
+vpMbtPolygon& vpMbtPolygon::operator=(const vpMbtPolygon& mbtp)
+{
+  index = mbtp.index;
+  nbpt = mbtp.nbpt;
+  nbCornersInsidePrev = mbtp.nbCornersInsidePrev;
+  isvisible = mbtp.isvisible;
+  isappearing = mbtp.isappearing;
+  roiPointsClip = mbtp.roiPointsClip;
+  clippingFlag = mbtp.clippingFlag;
+  distNearClip = mbtp.distFarClip;
+
+  if (p) delete [] p;
+  p = new vpPoint [nbpt];
+  for(unsigned int i = 0; i < nbpt; i++)
+    p[i] = mbtp.p[i];
+
+  return (*this);
 }
 
 /*!
diff --git a/src/tracking/mbt/edge/vpMbtPolygon.h b/src/tracking/mbt/edge/vpMbtPolygon.h
index 1109ac6e..75283e9c 100644
--- a/src/tracking/mbt/edge/vpMbtPolygon.h
+++ b/src/tracking/mbt/edge/vpMbtPolygon.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbtPolygon.h 4331 2013-07-22 12:37:11Z ayol $
+ * $Id: vpMbtPolygon.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -81,7 +81,7 @@ public:
     } vpMbtPolygonClippingType;
   
 public:
-  //! Index of the polygon. Cannot be unsigned int because deafult value is -1.
+  //! Index of the polygon. Cannot be unsigned int because default value is -1.
   int index;
   //! Number of points used to define the polygon.
   unsigned int nbpt;
@@ -115,7 +115,8 @@ private:
                                            const vpCameraParameters &cam, const std::vector<vpColVector> &fovNormals);
     
 public: 
-                           vpMbtPolygon() ;
+            vpMbtPolygon() ;
+            vpMbtPolygon(const vpMbtPolygon& mbtp) ;
             virtual       ~vpMbtPolygon() ;
                                     
             void          addPoint(const unsigned int n, const vpPoint &P) ;               
@@ -187,7 +188,9 @@ public:
   inline    bool          isAppearing() const {return isappearing;}
   virtual   bool          isVisible(const vpHomogeneousMatrix &cMo, const double alpha, const bool &modulo = false) ;
             bool          isVisible() const {return isvisible;}
-            
+
+            vpMbtPolygon& operator=(const vpMbtPolygon& mbtp) ;
+
   /*!
     Specify which clipping to use.
     
diff --git a/src/tracking/mbt/edge/vpMbtXmlParser.cpp b/src/tracking/mbt/edge/vpMbtXmlParser.cpp
index ace2eff5..8dd9cf24 100644
--- a/src/tracking/mbt/edge/vpMbtXmlParser.cpp
+++ b/src/tracking/mbt/edge/vpMbtXmlParser.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbtXmlParser.cpp 4320 2013-07-17 15:37:27Z ayol $
+ * $Id: vpMbtXmlParser.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -32,12 +32,13 @@
  *
  *
  * Description:
- * Make the complete tracking of an object by using its CAD model
+ * Load XML parameters of the Model based tracker (using edges).
  *
  * Authors:
  * Nicolas Melchior
  * Romain Tallonneau
  * Eric Marchand
+ * Aurelien Yol
  *
  *****************************************************************************/
 #include <visp/vpConfig.h>
@@ -57,11 +58,8 @@
   Default constructor. 
   
 */
-vpMbtXmlParser::vpMbtXmlParser()
+vpMbtXmlParser::vpMbtXmlParser() : m_ecm()
 {
-  hasNearClipping = false;
-  hasFarClipping = false;
-  fovClipping = false;
   init();
 }
 
@@ -78,9 +76,8 @@ vpMbtXmlParser::~vpMbtXmlParser()
 void 
 vpMbtXmlParser::init()
 {
-  setMainTag("conf");
+  vpMbXmlParser::init();
 
-  nodeMap["conf"] = conf;
   nodeMap["ecm"] = ecm;
   nodeMap["mask"] = mask;
   nodeMap["size"] = size;
@@ -94,20 +91,6 @@ vpMbtXmlParser::init()
   nodeMap["sample"] = sample;
   nodeMap["step"] = step;
   nodeMap["nb_sample"] = nb_sample;
-  nodeMap["face"] = face;
-  nodeMap["angle_appear"] = angle_appear;
-  nodeMap["angle_disappear"] = angle_disappear;
-  nodeMap["near_clipping"] = near_clipping;
-  nodeMap["far_clipping"] = far_clipping;
-  nodeMap["fov_clipping"] = fov_clipping;
-  nodeMap["camera"] = camera;
-  nodeMap["height"] = height;
-  nodeMap["width"] = width;
-  nodeMap["u0"] = u0;
-  nodeMap["v0"] = v0;
-  nodeMap["px"] = px;
-  nodeMap["py"] = py;
-  
 }
 
 /*!
@@ -144,24 +127,16 @@ vpMbtXmlParser::writeMainClass(xmlNodePtr /*node*/)
 void
 vpMbtXmlParser::readMainClass(xmlDocPtr doc, xmlNodePtr node)
 {
-	bool ecm_node = false;
-  bool sample_node = false;
   bool camera_node = false;
   bool face_node = false;
+  bool ecm_node = false;
+  bool sample_node = false;
   
   for(xmlNodePtr dataNode = node->xmlChildrenNode; dataNode != NULL;  dataNode = dataNode->next)  {
     if(dataNode->type == XML_ELEMENT_NODE){
       std::map<std::string, int>::iterator iter_data= this->nodeMap.find((char*)dataNode->name);
       if(iter_data != nodeMap.end()){
         switch (iter_data->second){
-        case ecm:{
-          this->read_ecm (doc, dataNode);
-          ecm_node = true;
-          }break;
-        case sample:{
-          this->read_sample (doc, dataNode);
-          sample_node = true;
-          }break;
         case camera:{
           this->read_camera (doc, dataNode);
           camera_node = true;
@@ -170,6 +145,14 @@ vpMbtXmlParser::readMainClass(xmlDocPtr doc, xmlNodePtr node)
           this->read_face(doc, dataNode);
           face_node = true;
           }break;
+        case ecm:{
+          this->read_ecm (doc, dataNode);
+          ecm_node = true;
+          }break;
+        case sample:{
+          this->read_sample (doc, dataNode);
+          sample_node = true;
+          }break;
         default:{
 //          vpTRACE("unknown tag in read_sample : %d, %s", iter_data->second, (iter_data->first).c_str());
           }break;
@@ -178,17 +161,31 @@ vpMbtXmlParser::readMainClass(xmlDocPtr doc, xmlNodePtr node)
     }
   }
   
-  if(!ecm_node)
-    std::cout << "WARNING: ECM Node not specified, default values used" << std::endl;
-  
-  if(!sample_node)
-    std::cout << "WARNING: SAMPLE Node not specified, default values used" << std::endl;
-  
-  if(!camera_node)
-    std::cout << "WARNING: CAMERA Node not specified, default values used" << std::endl;
+  if(!camera_node) {
+    std::cout << "camera : u0 : "<< this->cam.get_u0() << " (default)" <<std::endl;
+    std::cout << "camera : v0 : "<< this->cam.get_v0() << " (default)" <<std::endl;
+    std::cout << "camera : px : "<< this->cam.get_px() << " (default)" <<std::endl;
+    std::cout << "camera : py : "<< this->cam.get_py() << " (default)" <<std::endl;
+  }
+
+  if(!face_node) {
+    std::cout << "face : Angle Appear : "<< angleAppear <<" (default)" <<std::endl;
+    std::cout << "face : Angle Disappear : "<< angleDisappear <<" (default)" <<std::endl;
+  }
+
+  if(!ecm_node) {
+    std::cout << "ecm : mask : size : "<< this->m_ecm.getMaskSize() << " (default)" <<std::endl;
+    std::cout << "ecm : mask : nb_mask : "<< this->m_ecm.getMaskNumber() << " (default)" <<std::endl;
+    std::cout <<"ecm : range : tracking : "<< this->m_ecm.getRange()<< " (default)" <<std::endl;
+    std::cout <<"ecm : contrast : threshold : " << this->m_ecm.getThreshold()<<" (default)" <<std::endl;
+    std::cout <<"ecm : contrast : mu1 : " << this->m_ecm.getMu1()<<" (default)" <<std::endl;
+    std::cout <<"ecm : contrast : mu2 : " << this->m_ecm.getMu2()<<" (default)" <<std::endl;
+  }
   
-  if(!face_node)
-    std::cout << "WARNING: FACE Node not specified, default values used" << std::endl;
+  if(!sample_node) {
+    std::cout <<"sample : sample_step : "<< this->m_ecm.getSampleStep()<< " (default)" << std::endl;
+    std::cout <<"sample : n_total_sample : "<< this->m_ecm.getNbTotalSample()<< " (default)"<<std::endl;
+  }
 }
 
 
@@ -232,14 +229,20 @@ vpMbtXmlParser::read_ecm (xmlDocPtr doc, xmlNodePtr node)
     }
   }
   
-  if(!mask_node)
-    std::cout << "WARNING: In ECM Node, MASK Node not specified, default values used" << std::endl;
+  if(!mask_node) {
+    std::cout << "ecm : mask : size : "<< this->m_ecm.getMaskSize() << " (default)" <<std::endl;
+    std::cout << "ecm : mask : nb_mask : "<< this->m_ecm.getMaskNumber() << " (default)" <<std::endl;
+  }
   
-  if(!range_node)
-    std::cout << "WARNING: In ECM Node, RANGE Node not specified, default values used" << std::endl;
+  if(!range_node) {
+    std::cout <<"ecm : range : tracking : "<< this->m_ecm.getRange()<< " (default)" <<std::endl;
+  }
   
-  if(!contrast_node)
-    std::cout << "WARNING: In ECM Node, CONTRAST Node not specified, default values used" << std::endl;
+  if(!contrast_node) {
+    std::cout <<"ecm : contrast : threshold " << this->m_ecm.getThreshold()<<" (default)" <<std::endl;
+    std::cout <<"ecm : contrast : mu1 " << this->m_ecm.getMu1()<<" (default)" <<std::endl;
+    std::cout <<"ecm : contrast : mu2 " << this->m_ecm.getMu2()<<" (default)" <<std::endl;
+  }
 }
 
 /*!
@@ -285,188 +288,14 @@ vpMbtXmlParser::read_sample (xmlDocPtr doc, xmlNodePtr node)
   this->m_ecm.setNbTotalSample(d_nb_sample);
 
   if(!step_node)
-    std::cout << "WARNING: In SAMPLE Node, STEP Node not specified, default value used : " << this->m_ecm.getSampleStep() << std::endl;
+    std::cout <<"sample : sample_step : "<< this->m_ecm.getSampleStep()<< " (default)" << std::endl;
   else
-    std::cout <<"sample : sample_step "<< this->m_ecm.getSampleStep()<<std::endl;
+    std::cout <<"sample : sample_step : "<< this->m_ecm.getSampleStep()<<std::endl;
   
   if(!nb_sample_node)
-    std::cout << "WARNING: In SAMPLE Node, NB_SAMPLE Node not specified, default value used : " << this->m_ecm.getNbTotalSample() << std::endl;
-  else
-    std::cout <<"sample : n_total_sample "<< this->m_ecm.getNbTotalSample()<<std::endl;
-}
-
-/*!
-  Read camera information.
-  
-  \throw vpException::fatalError if there was an unexpected number of data. 
-  
-  \param doc : Pointer to the document.
-  \param node : Pointer to the node of the camera information.
-*/
-void 
-vpMbtXmlParser::read_camera (xmlDocPtr doc, xmlNodePtr node)
-{
-  bool height_node = false;
-  bool width_node = false;
-  bool u0_node = false;
-  bool v0_node = false;
-  bool px_node = false;
-  bool py_node = false;
-  
-    // current data values.
-// 	int d_height=0 ;
-// 	int d_width= 0 ;
-	double d_u0 = this->cam.get_u0();
-	double d_v0 = this->cam.get_v0();
-	double d_px = this->cam.get_px();
-	double d_py = this->cam.get_py();
-	
-  for(xmlNodePtr dataNode = node->xmlChildrenNode; dataNode != NULL;  dataNode = dataNode->next)  {
-    if(dataNode->type == XML_ELEMENT_NODE){
-      std::map<std::string, int>::iterator iter_data= this->nodeMap.find((char*)dataNode->name);
-      if(iter_data != nodeMap.end()){
-        switch (iter_data->second){
-        case height:{
-          /* d_height = */ xmlReadIntChild(doc, dataNode);
-          height_node = true;
-          }break;
-        case width:{
-          /* d_width = */ xmlReadIntChild(doc, dataNode);
-          width_node = true;
-          }break;
-        case u0:{
-          d_u0 = xmlReadDoubleChild(doc, dataNode);
-          u0_node = true;
-          }break;
-        case v0:{
-          d_v0 = xmlReadDoubleChild(doc, dataNode);
-          v0_node = true;
-          }break;
-        case px:{
-          d_px = xmlReadDoubleChild(doc, dataNode);
-          px_node = true;
-          }break;
-        case py:{
-          d_py = xmlReadDoubleChild(doc, dataNode);
-          py_node = true;
-          }break;
-        default:{
-//          vpTRACE("unknown tag in read_camera : %d, %s", iter_data->second, (iter_data->first).c_str());
-          }break;
-        }
-      }
-    }
-  }
-  
-  this->cam.initPersProjWithoutDistortion(d_px, d_py, d_u0, d_v0) ;
-
-  if(!height_node)
-    std::cout << "WARNING: In CAMERA Node, HEIGHT Node not specified, default value used" << std::endl;
-  
-  if(!width_node)
-    std::cout << "WARNING: In CAMERA Node, WIDTH Node not specified, default value used" << std::endl;
-  
-  if(!u0_node)
-    std::cout << "WARNING: In CAMERA Node, u0 Node not specified, default value used : " << this->cam.get_u0() << std::endl;
-  else
-    std::cout << "camera : u0 "<< this->cam.get_u0() <<std::endl;
-  
-  if(!v0_node)
-    std::cout << "WARNING: In CAMERA Node, v0 Node not specified, default value used : " << this->cam.get_v0() << std::endl;
-  else
-    std::cout << "camera : v0 "<< this->cam.get_v0() <<std::endl;
-  
-  if(!px_node)
-    std::cout << "WARNING: In CAMERA Node, px Node not specified, default value used : " << this->cam.get_px() << std::endl;
-  else
-    std::cout << "camera : px "<< this->cam.get_px() <<std::endl;
-  
-  if(!py_node)
-    std::cout << "WARNING: In CAMERA Node, py Node not specified, default value used : " << this->cam.get_py() << std::endl;
-  else
-    std::cout << "camera : py "<< this->cam.get_py() <<std::endl;
-}
-
-/*!
-  Read face information.
-  
-  \throw vpException::fatalError if there was an unexpected number of data. 
-  
-  \param doc : Pointer to the document.
-  \param node : Pointer to the node of the camera information.
-*/
-void 
-vpMbtXmlParser::read_face(xmlDocPtr doc, xmlNodePtr node)
-{
-  bool angle_appear_node = false;
-  bool angle_disappear_node = false;
-  bool near_clipping_node = false;
-  bool far_clipping_node = false;
-  bool fov_clipping_node = false;
-  
-  for(xmlNodePtr dataNode = node->xmlChildrenNode; dataNode != NULL;  dataNode = dataNode->next)  {
-    if(dataNode->type == XML_ELEMENT_NODE){
-      std::map<std::string, int>::iterator iter_data= this->nodeMap.find((char*)dataNode->name);
-      if(iter_data != nodeMap.end()){
-        switch (iter_data->second){
-        case angle_appear:{
-          angleAppear = xmlReadDoubleChild(doc, dataNode);
-          angle_appear_node = true;
-          }break;
-        case angle_disappear:{
-          angleDisappear = xmlReadDoubleChild(doc, dataNode);
-          angle_disappear_node = true;
-          }break;
-        case near_clipping:{
-          nearClipping = xmlReadDoubleChild(doc, dataNode);
-          near_clipping_node = true;
-          hasNearClipping = true;
-          }break;
-        case far_clipping:{
-          farClipping = xmlReadDoubleChild(doc, dataNode);
-          far_clipping_node = true;
-          hasFarClipping = true;
-          }break;
-        case fov_clipping:{
-          fovClipping = (bool)xmlReadIntChild(doc, dataNode);
-          fov_clipping_node = true;
-          }break;
-        default:{
-//          vpTRACE("unknown tag in read_camera : %d, %s", iter_data->second, (iter_data->first).c_str());
-          }break;
-        }
-      }
-    }
-  }
-  
-  if(!angle_appear_node)
-    std::cout << "WARNING: In FACE Node, ANGLE_APPEAR Node not specified, default value used : " << angleAppear << std::endl;
-  else
-    std::cout << "face : Angle Appear "<< angleAppear <<std::endl;
-  
-  if(!angle_disappear_node)
-    std::cout << "WARNING: In FACE Node, ANGLE_DESAPPEAR Node not specified, default value used : " << angleDisappear << std::endl;
+    std::cout <<"sample : n_total_sample : "<< this->m_ecm.getNbTotalSample()<< " (default)"<<std::endl;
   else
-    std::cout << "face : Angle Disappear : "<< angleDisappear <<std::endl;
-  
-  if(!near_clipping_node)
-    std::cout << "WARNING: In FACE Node, NEAR_CLIPPING Node not specified, no near clipping used" << std::endl;
-  else
-    std::cout << "face : Near Clipping : "<< nearClipping <<std::endl;
-  
-  if(!far_clipping_node)
-    std::cout << "WARNING: In FACE Node, FAR_CLIPPING Node not specified, no far clipping used" << std::endl;
-  else
-    std::cout << "face : Far Clipping : "<< farClipping <<std::endl;
-  
-  if(!fov_clipping_node)
-    std::cout << "WARNING: In FACE Node, FOV_CLIPPING Node not specified, no fov clipping used" << std::endl;
-  else{
-    if(fovClipping)
-      std::cout << "face : Fov Clipping : True" <<std::endl;
-    else
-      std::cout << "face : Fov Clipping : False" <<std::endl;
-  }
+    std::cout <<"sample : n_total_sample : "<< this->m_ecm.getNbTotalSample()<<std::endl;
 }
 
 /*!
@@ -512,14 +341,14 @@ vpMbtXmlParser::read_mask (xmlDocPtr doc, xmlNodePtr node)
   this->m_ecm.setMaskNumber(d_nb_mask);
   
   if(!size_node)
-    std::cout << "WARNING: In MASK Node, SIZE Node not specified, default value used : " << this->m_ecm.getMaskSize() << std::endl;
-  else
-    std::cout << "ecm : mask : size "<< this->m_ecm.getMaskSize() <<std::endl;
+    std::cout << "ecm : mask : size : "<< this->m_ecm.getMaskSize() << " (default)" <<std::endl;
+   else
+    std::cout << "ecm : mask : size : "<< this->m_ecm.getMaskSize() <<std::endl;
   
   if(!nb_mask_node)
-    std::cout << "WARNING: In MASK Node, NB_MASK Node not specified, default value used : " << this->m_ecm.getMaskNumber() << std::endl;
+    std::cout << "ecm : mask : nb_mask : "<< this->m_ecm.getMaskNumber() << " (default)" <<std::endl;
   else
-    std::cout << "ecm : mask : nb_mask "<< this->m_ecm.getMaskNumber() <<std::endl; 
+    std::cout << "ecm : mask : nb_mask : "<< this->m_ecm.getMaskNumber() <<std::endl;
 }
 
 /*!
@@ -558,9 +387,9 @@ vpMbtXmlParser::read_range (xmlDocPtr doc, xmlNodePtr node)
   this->m_ecm.setRange(m_range_tracking);
   
   if(!tracking_node)
-    std::cout << "WARNING: In RANGE Node, TRACKING Node not specified, default value used : " << this->m_ecm.getRange() << std::endl;
+    std::cout <<"ecm : range : tracking : "<< this->m_ecm.getRange()<< " (default)" <<std::endl;
   else
-    std::cout <<"ecm : range : tracking "<< this->m_ecm.getRange()<<std::endl;  
+    std::cout <<"ecm : range : tracking : "<< this->m_ecm.getRange()<<std::endl;
 }
 
 
@@ -614,17 +443,17 @@ vpMbtXmlParser::read_contrast (xmlDocPtr doc, xmlNodePtr node)
   this->m_ecm.setThreshold(d_edge_threshold);
   
   if(!edge_threshold_node)
-    std::cout << "WARNING: In CONTRAST Node, EDGE_THRESHOLD Node not specified, default value used : " << this->m_ecm.getThreshold() << std::endl;
+    std::cout <<"ecm : contrast : threshold " << this->m_ecm.getThreshold()<<" (default)" <<std::endl;
   else
     std::cout <<"ecm : contrast : threshold " << this->m_ecm.getThreshold()<<std::endl;
   
   if(!mu1_node)
-    std::cout << "WARNING: In CONTRAST Node, mu1 Node not specified, default value used : " << this->m_ecm.getMu1() << std::endl;
+    std::cout <<"ecm : contrast : mu1 " << this->m_ecm.getMu1()<<" (default)" <<std::endl;
   else
     std::cout <<"ecm : contrast : mu1 " << this->m_ecm.getMu1()<<std::endl;
   
   if(!mu2_node)
-    std::cout << "WARNING: In CONTRAST Node, mu2 Node not specified, default value used : " << this->m_ecm.getMu2() << std::endl;
+    std::cout <<"ecm : contrast : mu2 " << this->m_ecm.getMu2()<<" (default)" <<std::endl;
   else
     std::cout <<"ecm : contrast : mu2 " << this->m_ecm.getMu2()<<std::endl;
 }
diff --git a/src/tracking/mbt/edge/vpMbtXmlParser.h b/src/tracking/mbt/edge/vpMbtXmlParser.h
index 9431ad01..ed870fec 100644
--- a/src/tracking/mbt/edge/vpMbtXmlParser.h
+++ b/src/tracking/mbt/edge/vpMbtXmlParser.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbtXmlParser.h 4320 2013-07-17 15:37:27Z ayol $
+ * $Id: vpMbtXmlParser.h 4582 2014-01-14 14:02:46Z ayol $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -32,12 +32,13 @@
  *
  *
  * Description:
- * Make the complete tracking of an object by using its CAD model
+ * Load XML parameters of the Model based tracker (using edges).
  *
  * Authors:
  * Nicolas Melchior
  * Romain Tallonneau
  * Eric Marchand
+ * Aurelien Yol
  *
  *****************************************************************************/
 
@@ -55,11 +56,8 @@
 
 #include <libxml/xmlmemory.h>      /* Fonctions de la lib XML.                */
 
-#include <visp/vpXmlParser.h>
+#include <visp/vpMbXmlParser.h>
 #include <visp/vpMe.h>
-#include <visp/vpCameraParameters.h>
-
-
 
 /*!
   \class vpMbtXmlParser
@@ -69,31 +67,14 @@
   Data parser for the model based tracker.
 
  */
-class VISP_EXPORT vpMbtXmlParser: public vpXmlParser
+class VISP_EXPORT vpMbtXmlParser: virtual public vpMbXmlParser
 {
 protected:
   //! Moving edges parameters.
   vpMe m_ecm;
-  //! Camera parameters.
-  vpCameraParameters cam;
-  //! Angle to determine if a face appeared
-  double angleAppear;
-  //! Angle to determine if a face disappeared
-  double angleDisappear;
-  //! Is near clipping distance specified?
-  bool hasNearClipping;
-  //! Near clipping distance
-  double nearClipping;
-  //! Is far clipping distance specified?
-  bool hasFarClipping;
-  //! Near clipping distance
-  double farClipping;
-  //! Fov Clipping
-  bool fovClipping;
-    
+
   typedef enum{
-    conf,
-    ecm,
+    ecm = vpMbXmlParser::last,
     mask,
     size,
     nb_mask,
@@ -106,20 +87,8 @@ protected:
     sample,
     step,
     nb_sample,
-    face,
-    angle_appear,
-    angle_disappear,
-    near_clipping,
-    far_clipping,
-    fov_clipping,
-    camera,
-    height,
-    width,
-    u0,
-    v0,
-    px,
-    py
-  } dataToParse;
+    last
+  } dataToParseMb;
 
 
 public:
@@ -127,101 +96,19 @@ public:
 	vpMbtXmlParser();
 	virtual ~vpMbtXmlParser();
 
-  /*!
-    Get the angle to determine if a face appeared.
-
-    \return angleAppear
-  */
-  inline double getAngleAppear() const {return angleAppear;}
-  
-  /*!
-    Get the angle to determine if a face disappeared.
-
-    \return angleDisappear
-  */
-  inline double getAngleDisappear() const {return angleDisappear;}
-  
-  void getCameraParameters(vpCameraParameters& _cam) const { _cam = this->cam;}
-  
-  /*!
-    Get the far clipping distance.
-
-    \return farClipping
-  */
-  inline double getFarClippingDistance() const {return farClipping;}
-  
-  /*!
-    Use FOV clipping
-
-    \return True if yes, False otherwise.
-  */
-  inline bool getFovClipping() const {return fovClipping;}
-  
   void getMe(vpMe& _ecm) const { _ecm = this->m_ecm;}
   
-  /*!
-    Get the near clipping distance.
 
-    \return nearClipping
-  */
-  inline double getNearClippingDistance() const {return nearClipping;}
-  
-  /*!
-    Has Far clipping been specified?
+  void parse(const char * filename);
 
-    \return True if yes, False otherwise.
-  */
-  inline bool hasFarClippingDistance() const {return hasFarClipping;}
-  
-  /*!
-    Has Near clipping been specified?
-
-    \return True if yes, False otherwise.
-  */
-  inline bool hasNearClippingDistance() const {return hasNearClipping;}
-  
-	void parse(const char * filename);
-
-  void readMainClass(xmlDocPtr doc, xmlNodePtr node);
-	void read_ecm (xmlDocPtr doc, xmlNodePtr node);
-	void read_sample (xmlDocPtr doc, xmlNodePtr node);
-	void read_camera (xmlDocPtr doc, xmlNodePtr node);
-	void read_mask (xmlDocPtr doc, xmlNodePtr node);
-	void read_range (xmlDocPtr doc, xmlNodePtr node);
-	void read_contrast (xmlDocPtr doc, xmlNodePtr node);
-  void read_face(xmlDocPtr doc, xmlNodePtr node);
-  
-  /*!
-    Set the angle to determine if a face appeared.
-
-    \param aappear : New angleAppear
-  */
-  inline void setAngleAppear(const double &aappear) {angleAppear = aappear;}
-  
-  /*!
-    Set the angle to determine if a face disappeared.
-
-    \param adisappear : New angleDisappear
-  */
-  inline void setAngleDisappear(const double &adisappear) {angleDisappear = adisappear;}
-  
-  void setCameraParameters(const vpCameraParameters &_cam){ cam = _cam; }
-  
-  /*!
-    Set the far clipping distance.
-
-    \param fclip : New farClipping
-  */
-  inline void setFarClippingDistance(const double &fclip) {farClipping = fclip;}
+  virtual void readMainClass(xmlDocPtr doc, xmlNodePtr node);
+  void read_ecm (xmlDocPtr doc, xmlNodePtr node);
+  void read_sample (xmlDocPtr doc, xmlNodePtr node);
+  void read_mask (xmlDocPtr doc, xmlNodePtr node);
+  void read_range (xmlDocPtr doc, xmlNodePtr node);
+  void read_contrast (xmlDocPtr doc, xmlNodePtr node);
   
   void setMovingEdge(const vpMe &_ecm){ m_ecm = _ecm; }
-  
-  /*!
-    Set the near clipping distance.
-
-    \param nclip : New nearClipping
-  */
-  inline void setNearClippingDistance(const double &nclip) {nearClipping = nclip;}
 	
   void writeMainClass(xmlNodePtr node);
 	
diff --git a/src/tracking/mbt/hybrid/vpMbEdgeKltTracker.cpp b/src/tracking/mbt/hybrid/vpMbEdgeKltTracker.cpp
index 11bb67f7..6c9c2842 100644
--- a/src/tracking/mbt/hybrid/vpMbEdgeKltTracker.cpp
+++ b/src/tracking/mbt/hybrid/vpMbEdgeKltTracker.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbEdgeKltTracker.cpp 4327 2013-07-19 14:08:01Z fspindle $
+ * $Id: vpMbEdgeKltTracker.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -44,14 +44,10 @@
 #ifdef VISP_HAVE_OPENCV
 
 vpMbEdgeKltTracker::vpMbEdgeKltTracker()
+  : compute_interaction(true), lambda(0.8), thresholdKLT(2.), thresholdMBT(2.), maxIter(200)
 {
-  compute_interaction = true;
   computeCovariance = false;
   
-  lambda = 0.8;
-  thresholdKLT = 2.0;
-  thresholdMBT = 2.0;
-  maxIter = 200;
   vpMbKltTracker::setMaxIter(30);
   
 #ifdef VISP_HAVE_OGRE
@@ -278,8 +274,64 @@ void
 vpMbEdgeKltTracker::loadConfigFile(const char* configFile)
 {
 #ifdef VISP_HAVE_XML2
-  vpMbEdgeTracker::loadConfigFile(configFile);
-  vpMbKltTracker::loadConfigFile(configFile);
+  vpMbtEdgeKltXmlParser xmlp;
+
+  xmlp.setCameraParameters(cam);
+  xmlp.setAngleAppear(vpMath::deg(vpMbKltTracker::angleAppears));
+  xmlp.setAngleDisappear(vpMath::deg(vpMbKltTracker::angleDisappears));
+
+  xmlp.setMovingEdge(me);
+
+  xmlp.setMaxFeatures(10000);
+  xmlp.setWindowSize(5);
+  xmlp.setQuality(0.01);
+  xmlp.setMinDistance(5);
+  xmlp.setHarrisParam(0.01);
+  xmlp.setBlockSize(3);
+  xmlp.setPyramidLevels(3);
+  xmlp.setMaskBorder(maskBorder);
+
+  try{
+    std::cout << " *********** Parsing XML for Mb Edge Tracker ************ " << std::endl;
+    xmlp.parse(configFile);
+  }
+  catch(...){
+    vpERROR_TRACE("Can't open XML file \"%s\"\n ", configFile);
+    throw vpException(vpException::ioError, "problem to parse configuration file.");
+  }
+
+  vpCameraParameters camera;
+  xmlp.getCameraParameters(camera);
+  setCameraParameters(camera);
+
+  vpMbEdgeTracker::angleAppears = vpMath::rad(xmlp.getAngleAppear());
+  vpMbEdgeTracker::angleDisappears = vpMath::rad(xmlp.getAngleDisappear());
+  vpMbKltTracker::angleAppears = vpMath::rad(xmlp.getAngleAppear());
+  vpMbKltTracker::angleDisappears = vpMath::rad(xmlp.getAngleDisappear());
+
+  if(xmlp.hasNearClippingDistance())
+    setNearClippingDistance(xmlp.getNearClippingDistance());
+
+  if(xmlp.hasFarClippingDistance())
+    setFarClippingDistance(xmlp.getFarClippingDistance());
+
+  if(xmlp.getFovClipping()){
+    vpMbEdgeTracker::setClipping(vpMbEdgeTracker::clippingFlag | vpMbtPolygon::FOV_CLIPPING);
+    vpMbKltTracker::setClipping(vpMbKltTracker::clippingFlag | vpMbtPolygon::FOV_CLIPPING);
+  }
+
+  vpMe meParser;
+  xmlp.getMe(meParser);
+  vpMbEdgeTracker::setMovingEdge(meParser);
+
+  tracker.setMaxFeatures((int)xmlp.getMaxFeatures());
+  tracker.setWindowSize((int)xmlp.getWindowSize());
+  tracker.setQuality(xmlp.getQuality());
+  tracker.setMinDistance(xmlp.getMinDistance());
+  tracker.setHarrisFreeParameter(xmlp.getHarrisParam());
+  tracker.setBlockSize((int)xmlp.getBlockSize());
+  tracker.setPyramidLevels((int)xmlp.getPyramidLevels());
+  maskBorder = xmlp.getMaskBorder();
 #else
   vpTRACE("You need the libXML2 to read the config file %s", configFile);
 #endif
@@ -731,8 +783,8 @@ vpMbEdgeKltTracker::trackFirstLoop(const vpImage<unsigned char>& I, vpColVector
     l->computeInteractionMatrixError(cMo);
     
     double fac = 1;
-    for(std::list<int>::const_iterator it = l->Lindex_polygon.begin(); it!=l->Lindex_polygon.end(); ++it){
-      int index = *it;
+    for(std::list<int>::const_iterator itindex = l->Lindex_polygon.begin(); itindex!=l->Lindex_polygon.end(); ++itindex){
+      int index = *itindex;
       if (l->hiddenface->isAppearing((unsigned int)index)) {
         fac = 0.2;
         break;
@@ -790,7 +842,7 @@ vpMbEdgeKltTracker::trackFirstLoop(const vpImage<unsigned char>& I, vpColVector
 
 void 
 vpMbEdgeKltTracker::trackSecondLoop(const vpImage<unsigned char>& I,  vpMatrix &L, vpColVector &error,
-                                    vpHomogeneousMatrix& cMo, const unsigned int lvl)
+                                    vpHomogeneousMatrix& cMo_, const unsigned int lvl)
 {
   vpMbtDistanceLine* l;
   vpMbtDistanceCylinder *cy ;
@@ -798,7 +850,7 @@ vpMbEdgeKltTracker::trackSecondLoop(const vpImage<unsigned char>& I,  vpMatrix &
   unsigned int n = 0 ;
   for(std::list<vpMbtDistanceLine*>::const_iterator it=lines[lvl].begin(); it!=lines[lvl].end(); ++it){
     l = *it;
-    l->computeInteractionMatrixError(cMo) ;
+    l->computeInteractionMatrixError(cMo_) ;
     for (unsigned int i=0 ; i < l->nbFeature ; i++){
       for (unsigned int j=0; j < 6 ; j++){
         L[n+i][j] = l->L[i][j];
@@ -810,7 +862,7 @@ vpMbEdgeKltTracker::trackSecondLoop(const vpImage<unsigned char>& I,  vpMatrix &
   
   for(std::list<vpMbtDistanceCylinder*>::const_iterator it=cylinders[lvl].begin(); it!=cylinders[lvl].end(); ++it){
     cy = *it;
-    cy->computeInteractionMatrixError(cMo, I) ;
+    cy->computeInteractionMatrixError(cMo_, I) ;
     for(unsigned int i=0 ; i < cy->nbFeature ; i++){
       for(unsigned int j=0; j < 6 ; j++){
         L[n+i][j] = cy->L[i][j];
@@ -825,12 +877,12 @@ vpMbEdgeKltTracker::trackSecondLoop(const vpImage<unsigned char>& I,  vpMatrix &
 /*!
   Set the camera parameters
 
-  \param cam : the new camera parameters
+  \param camera : the new camera parameters
 */
 void
-vpMbEdgeKltTracker::setCameraParameters(const vpCameraParameters& cam)
+vpMbEdgeKltTracker::setCameraParameters(const vpCameraParameters& camera)
 {
-  this->cam = cam;
+  this->cam = camera;
   
   vpMbEdgeTracker::setCameraParameters(cam);
   vpMbKltTracker::setCameraParameters(cam);
@@ -853,30 +905,30 @@ vpMbEdgeKltTracker::initFaceFromCorners(const std::vector<vpPoint>& corners, con
   Add a cylinder to track from tow points on the axis (defining the length of
   the cylinder) and its radius.
 
-  \param _p1 : First point on the axis.
-  \param _p2 : Second point on the axis.
-  \param _radius : Radius of the cylinder.
-  \param _indexCylinder : Index of the cylinder.
+  \param p1 : First point on the axis.
+  \param p2 : Second point on the axis.
+  \param radius : Radius of the cylinder.
+  \param indexCylinder : Index of the cylinder.
 */
 void    
-vpMbEdgeKltTracker::initCylinder(const vpPoint& _p1, const vpPoint _p2, const double _radius, const unsigned int _indexCylinder)
+vpMbEdgeKltTracker::initCylinder(const vpPoint& p1, const vpPoint &p2, const double radius, const unsigned int indexCylinder)
 {
-  vpMbEdgeTracker::initCylinder(_p1, _p2, _radius, _indexCylinder);
+  vpMbEdgeTracker::initCylinder(p1, p2, radius, indexCylinder);
 }
 
 /*!
   Display the 3D model at a given position using the given camera parameters
 
   \param I : The image.
-  \param cMo : Pose used to project the 3D model into the image.
-  \param cam : The camera parameters.
+  \param cMo_ : Pose used to project the 3D model into the image.
+  \param camera : The camera parameters.
   \param col : The desired color.
   \param thickness : The thickness of the lines.
   \param displayFullModel : boolean to say if all the model has to be displayed.
 */
 void
-vpMbEdgeKltTracker::display(const vpImage<unsigned char>& I, const vpHomogeneousMatrix &cMo, const vpCameraParameters & cam,
-                            const vpColor& col , const unsigned int thickness, const bool displayFullModel)
+vpMbEdgeKltTracker::display(const vpImage<unsigned char>& I, const vpHomogeneousMatrix &cMo_, const vpCameraParameters &camera,
+                            const vpColor& col, const unsigned int thickness, const bool displayFullModel)
 {  
   vpMbtDistanceLine *l ;
   
@@ -884,11 +936,11 @@ vpMbEdgeKltTracker::display(const vpImage<unsigned char>& I, const vpHomogeneous
     if(scales[i]){
       for(std::list<vpMbtDistanceLine*>::const_iterator it=lines[scaleLevel].begin(); it!=lines[scaleLevel].end(); ++it){
         l = *it;
-        l->display(I,cMo, cam, col, thickness, displayFullModel);
+        l->display(I,cMo_, camera, col, thickness, displayFullModel);
       }
 
       for(std::list<vpMbtDistanceCylinder*>::const_iterator it=cylinders[scaleLevel].begin(); it!=cylinders[scaleLevel].end(); ++it){
-        (*it)->display(I, cMo, cam, col, thickness);
+        (*it)->display(I, cMo_, camera, col, thickness);
       }
 
       break ; //displaying model on one scale only
@@ -903,7 +955,7 @@ vpMbEdgeKltTracker::display(const vpImage<unsigned char>& I, const vpHomogeneous
   
 #ifdef VISP_HAVE_OGRE
   if(vpMbKltTracker::useOgre)
-    vpMbKltTracker::faces.displayOgre(cMo);
+    vpMbKltTracker::faces.displayOgre(cMo_);
 #endif
 }
 
@@ -911,14 +963,14 @@ vpMbEdgeKltTracker::display(const vpImage<unsigned char>& I, const vpHomogeneous
   Display the 3D model at a given position using the given camera parameters
 
   \param I : The color image.
-  \param cMo : Pose used to project the 3D model into the image.
-  \param cam : The camera parameters.
+  \param cMo_ : Pose used to project the 3D model into the image.
+  \param camera : The camera parameters.
   \param col : The desired color.
   \param thickness : The thickness of the lines.
   \param displayFullModel : boolean to say if all the model has to be displayed.
 */
 void
-vpMbEdgeKltTracker::display(const vpImage<vpRGBa>& I, const vpHomogeneousMatrix &cMo, const vpCameraParameters & cam,
+vpMbEdgeKltTracker::display(const vpImage<vpRGBa>& I, const vpHomogeneousMatrix &cMo_, const vpCameraParameters &camera,
                             const vpColor& col , const unsigned int thickness, const bool displayFullModel)
 { 
   vpMbtDistanceLine *l ;
@@ -927,11 +979,11 @@ vpMbEdgeKltTracker::display(const vpImage<vpRGBa>& I, const vpHomogeneousMatrix
     if(scales[i]){
       for(std::list<vpMbtDistanceLine*>::const_iterator it=lines[scaleLevel].begin(); it!=lines[scaleLevel].end(); ++it){
         l = *it;
-        l->display(I,cMo, cam, col, thickness, displayFullModel);
+        l->display(I,cMo_, camera, col, thickness, displayFullModel);
       }
 
       for(std::list<vpMbtDistanceCylinder*>::const_iterator it=cylinders[scaleLevel].begin(); it!=cylinders[scaleLevel].end(); ++it){
-        (*it)->display(I, cMo, cam, col, thickness);
+        (*it)->display(I, cMo_, camera, col, thickness);
       }
 
       break ; //displaying model on one scale only
@@ -946,7 +998,7 @@ vpMbEdgeKltTracker::display(const vpImage<vpRGBa>& I, const vpHomogeneousMatrix
   
 #ifdef VISP_HAVE_OGRE
   if(vpMbKltTracker::useOgre)
-    vpMbKltTracker::faces.displayOgre(cMo);
+    vpMbKltTracker::faces.displayOgre(cMo_);
 #endif
 }
 
diff --git a/src/tracking/mbt/hybrid/vpMbEdgeKltTracker.h b/src/tracking/mbt/hybrid/vpMbEdgeKltTracker.h
index fe6830fc..8f1c2704 100644
--- a/src/tracking/mbt/hybrid/vpMbEdgeKltTracker.h
+++ b/src/tracking/mbt/hybrid/vpMbEdgeKltTracker.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbEdgeKltTracker.h 4338 2013-07-23 14:29:30Z fspindle $
+ * $Id: vpMbEdgeKltTracker.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -55,11 +55,11 @@
 #include <visp/vpSubMatrix.h>
 #include <visp/vpSubColVector.h>
 #include <visp/vpExponentialMap.h>
-#include <visp/vpMbtXmlParser.h>
 #include <visp/vpMbTracker.h>
 #include <visp/vpKltOpencv.h>
 #include <visp/vpMbEdgeTracker.h>
 #include <visp/vpPoseVector.h>
+#include <visp/vpMbtEdgeKltXmlParser.h>
 #include <visp/vpMbKltTracker.h>
 
 /*!
@@ -308,7 +308,7 @@ public:
 
             \param a : new angle in radian.
           */
-  virtual inline  void setAngleAppear(const double &a) { vpMbKltTracker::setAngleAppear(a); }
+  virtual inline  void setAngleAppear(const double &a) { vpMbKltTracker::setAngleAppear(a); vpMbEdgeTracker::setAngleAppear(a);}
   
           /*!
             Set the angle used to test polygons disappearance.
@@ -319,7 +319,7 @@ public:
 
             \param a : new angle in radian.
           */
-  virtual inline  void setAngleDisappear(const double &a) { vpMbKltTracker::setAngleDisappear(a); }
+  virtual inline  void setAngleDisappear(const double &a) { vpMbKltTracker::setAngleDisappear(a); vpMbEdgeTracker::setAngleDisappear(a);}
 
   virtual void    setCameraParameters(const vpCameraParameters& cam);
   
@@ -342,9 +342,9 @@ public:
           /*!
             Set the value of the gain used to compute the control law.
 
-            \param lambda : the desired value for the gain.
+            \param gain : the desired value for the gain.
           */
-  virtual inline  void setLambda(const double lambda) {this->lambda = lambda; vpMbEdgeTracker::setLambda(lambda); vpMbKltTracker::setLambda(lambda);}
+  virtual inline  void setLambda(const double gain) {this->lambda = gain; vpMbEdgeTracker::setLambda(lambda); vpMbKltTracker::setLambda(lambda);}
 
           /*!
             Set the maximum iteration of the virtual visual servoing stage.
@@ -379,7 +379,7 @@ protected:
                              vpColVector &w_klt, const unsigned int lvl=0);
 
   virtual void    init(const vpImage<unsigned char>& I);
-  virtual void    initCylinder(const vpPoint& , const vpPoint , const double , const unsigned int );
+  virtual void    initCylinder(const vpPoint& , const vpPoint &, const double , const unsigned int );
   virtual void    initFaceFromCorners(const std::vector<vpPoint>& corners, const unsigned int indexFace = -1);
   unsigned int    initMbtTracking(const unsigned int level=0);
 
diff --git a/src/tracking/mbt/hybrid/vpMbtEdgeKltXmlParser.cpp b/src/tracking/mbt/hybrid/vpMbtEdgeKltXmlParser.cpp
new file mode 100644
index 00000000..a61e627c
--- /dev/null
+++ b/src/tracking/mbt/hybrid/vpMbtEdgeKltXmlParser.cpp
@@ -0,0 +1,198 @@
+/****************************************************************************
+ *
+ * $Id: vpMbtEdgeKltXmlParser.cpp 4577 2014-01-10 16:19:41Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ * 
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional 
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ * 
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ * 
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ *
+ * Description:
+ * Load XML parameters of the Model based tracker (using edges and point features).
+ *
+ * Authors:
+ * Aurelien Yol
+ *
+ *****************************************************************************/
+#include <visp/vpConfig.h>
+
+
+#ifdef VISP_HAVE_XML2
+
+#include <iostream>
+#include <map>
+
+#include <libxml/xmlmemory.h>      /* Fonctions de la lib XML.                */
+
+#include <visp/vpMbtEdgeKltXmlParser.h>
+
+
+/*!
+  Default constructor. 
+  
+*/
+vpMbtEdgeKltXmlParser::vpMbtEdgeKltXmlParser()
+{
+  init();
+}
+
+/*!
+  Default destructor.
+*/
+vpMbtEdgeKltXmlParser::~vpMbtEdgeKltXmlParser()
+{
+}
+
+/*!
+  Initialise internal variables (including the map).
+*/
+void 
+vpMbtEdgeKltXmlParser::init()
+{
+  vpMbtXmlParser::init();
+  vpMbtKltXmlParser::init();
+
+  nodeMap["camera"] = vpMbtEdgeKltXmlParser::camera;
+  nodeMap["face"] = vpMbtEdgeKltXmlParser::face;
+  nodeMap["klt"] = vpMbtEdgeKltXmlParser::klt;
+  nodeMap["ecm"] = vpMbtEdgeKltXmlParser::ecm;
+  nodeMap["sample"] = vpMbtEdgeKltXmlParser::sample;
+}
+
+/*!
+  Parse the file in parameters.
+  This method is deprecated, use parse() instead.
+  
+  \param filename : File to parse.
+*/
+void
+vpMbtEdgeKltXmlParser::parse(const char * filename)
+{
+  std::string file = filename;
+  vpXmlParser::parse(file);
+}
+
+/*!
+  Write info to file.
+  
+  \warning Useless, so not yet implemented => Throw exception.
+*/
+void 
+vpMbtEdgeKltXmlParser::writeMainClass(xmlNodePtr /*node*/)
+{
+  throw vpException(vpException::notImplementedError, "Not yet implemented." );
+}
+
+/*!
+  Read the parameters of the class from the file given by its document pointer 
+  and by its root node. 
+  
+  \param doc : Document to parse.
+  \param node : Root node. 
+*/
+void
+vpMbtEdgeKltXmlParser::readMainClass(xmlDocPtr doc, xmlNodePtr node)
+{
+  bool camera_node = false;
+  bool face_node = false;
+  bool ecm_node = false;
+  bool sample_node = false;
+  bool klt_node = false;
+  
+  for(xmlNodePtr dataNode = node->xmlChildrenNode; dataNode != NULL;  dataNode = dataNode->next)  {
+    if(dataNode->type == XML_ELEMENT_NODE){
+      std::map<std::string, int>::iterator iter_data= this->nodeMap.find((char*)dataNode->name);
+      if(iter_data != nodeMap.end()){
+        switch (iter_data->second){
+        case vpMbtEdgeKltXmlParser::camera:{
+          this->read_camera (doc, dataNode);
+          camera_node = true;
+          }break;
+        case vpMbtEdgeKltXmlParser::face:{
+          this->read_face(doc, dataNode);
+          face_node = true;
+          }break;
+        case vpMbtEdgeKltXmlParser::klt:{
+          this->read_klt(doc, dataNode);
+          klt_node = true;
+          }break;
+        case vpMbtEdgeKltXmlParser::ecm:{
+          this->read_ecm (doc, dataNode);
+          ecm_node = true;
+          }break;
+        case vpMbtEdgeKltXmlParser::sample:{
+          this->read_sample (doc, dataNode);
+          sample_node = true;
+          }break;
+        default:{
+//          vpTRACE("unknown tag in read_sample : %d, %s", iter_data->second, (iter_data->first).c_str());
+          }break;
+        }
+      }
+    }
+  }
+  
+  if(!camera_node) {
+    std::cout << "camera : u0 : "<< this->cam.get_u0() << " (default)" <<std::endl;
+    std::cout << "camera : v0 : "<< this->cam.get_v0() << " (default)" <<std::endl;
+    std::cout << "camera : px : "<< this->cam.get_px() << " (default)" <<std::endl;
+    std::cout << "camera : py : "<< this->cam.get_py() << " (default)" <<std::endl;
+  }
+  
+  if(!face_node) {
+    std::cout << "face : Angle Appear : "<< angleAppear <<" (default)" <<std::endl;
+    std::cout << "face : Angle Disappear : "<< angleDisappear <<" (default)" <<std::endl;
+  }
+
+  if(!klt_node) {
+    std::cout << "klt : Mask Border : "<< maskBorder <<" (default)" <<std::endl;
+    std::cout << "klt : Max Features : "<< maxFeatures <<" (default)" <<std::endl;
+    std::cout << "klt : Windows Size : "<< winSize <<" (default)" <<std::endl;
+    std::cout << "klt : Quality : "<< qualityValue <<" (default)" <<std::endl;
+    std::cout << "klt : Min Distance : "<< minDist <<" (default)" <<std::endl;
+    std::cout << "klt : Harris Parameter : "<< harrisParam <<" (default)" <<std::endl;
+    std::cout << "klt : Block Size : "<< blockSize <<" (default)" <<std::endl;
+    std::cout << "klt : Pyramid Levels : "<< pyramidLevels <<" (default)" <<std::endl;
+  }
+
+  if(!ecm_node) {
+    std::cout << "ecm : mask : size : "<< this->m_ecm.getMaskSize() << " (default)" <<std::endl;
+    std::cout << "ecm : mask : nb_mask : "<< this->m_ecm.getMaskNumber() << " (default)" <<std::endl;
+    std::cout <<"ecm : range : tracking : "<< this->m_ecm.getRange()<< " (default)" <<std::endl;
+    std::cout <<"ecm : contrast : threshold : " << this->m_ecm.getThreshold()<<" (default)" <<std::endl;
+    std::cout <<"ecm : contrast : mu1 : " << this->m_ecm.getMu1()<<" (default)" <<std::endl;
+    std::cout <<"ecm : contrast : mu2 : " << this->m_ecm.getMu2()<<" (default)" <<std::endl;
+  }
+
+  if(!sample_node) {
+    std::cout <<"sample : sample_step : "<< this->m_ecm.getSampleStep()<< " (default)" << std::endl;
+    std::cout <<"sample : n_total_sample : "<< this->m_ecm.getNbTotalSample()<< " (default)"<<std::endl;
+  }
+}
+
+#endif
+
diff --git a/src/tracking/mbt/hybrid/vpMbtEdgeKltXmlParser.h b/src/tracking/mbt/hybrid/vpMbtEdgeKltXmlParser.h
new file mode 100644
index 00000000..06208beb
--- /dev/null
+++ b/src/tracking/mbt/hybrid/vpMbtEdgeKltXmlParser.h
@@ -0,0 +1,98 @@
+/****************************************************************************
+ *
+ * $Id: vpMbtEdgeKltXmlParser.h 4574 2014-01-09 08:48:51Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ * 
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional 
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ * 
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ * 
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ *
+ * Description:
+ * Load XML parameters of the Model based tracker (using edges and point features).
+ *
+ * Authors:
+ * Aurelien Yol
+ *
+ *****************************************************************************/
+
+/*!
+ * \file vpMbtEdgeKltXmlParser.h
+ * \brief Parse an Xml file to extract configuration parameters of a mbtConfig object.
+*/
+
+#ifndef vpMbtEdgeKltXmlParser_HH
+#define vpMbtEdgeKltXmlParser_HH
+
+#include <visp/vpConfig.h>
+
+#ifdef VISP_HAVE_XML2
+
+#include <libxml/xmlmemory.h>      /* Fonctions de la lib XML.                */
+
+#include <visp/vpMbtXmlParser.h>
+#include <visp/vpMbtKltXmlParser.h>
+
+/*!
+  \class vpMbtEdgeKltXmlParser
+  \brief Parse an Xml file to extract configuration parameters of a mbtConfig object.
+  \ingroup ModelBasedTracking
+
+  Data parser for the model based tracker.
+
+ */
+class VISP_EXPORT vpMbtEdgeKltXmlParser: public vpMbtXmlParser, public vpMbtKltXmlParser
+{
+protected:
+  typedef enum{
+    camera,
+    face,
+    klt,
+    ecm,
+    sample
+  } dataToParseMbtEdgeKlt;
+public:
+
+    vpMbtEdgeKltXmlParser();
+    virtual ~vpMbtEdgeKltXmlParser();
+
+  void parse(const char * filename);
+
+  virtual void readMainClass(xmlDocPtr doc, xmlNodePtr node);
+
+  void writeMainClass(xmlNodePtr node);
+	
+protected:
+  void init();
+
+};
+
+#endif
+
+#endif /* NMBTEDGEKLTXMLPARSER_H_ */
+
+
+
diff --git a/src/tracking/mbt/klt/vpMbKltTracker.cpp b/src/tracking/mbt/klt/vpMbKltTracker.cpp
index 0dd96ef5..542405c1 100644
--- a/src/tracking/mbt/klt/vpMbKltTracker.cpp
+++ b/src/tracking/mbt/klt/vpMbKltTracker.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbKltTracker.cpp 4337 2013-07-23 13:57:53Z ayol $
+ * $Id: vpMbKltTracker.cpp 4661 2014-02-10 19:34:58Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -44,14 +44,11 @@
 #ifdef VISP_HAVE_OPENCV
 
 vpMbKltTracker::vpMbKltTracker()
-{
-  
-  cur = NULL;
-  compute_interaction = true;
-  firstInitialisation = true;
-  computeCovariance = false;
-  firstTrack = false;
-  
+  : cur(NULL), c0Mo(), angleAppears(0), angleDisappears(0), compute_interaction(true),
+    firstInitialisation(true), maskBorder(5), lambda(0.8), maxIter(200), threshold_outlier(0.5),
+    percentGood(0.6), useOgre(false), ctTc0(), tracker(), faces(), firstTrack(false),
+    distNearClip(0.01), distFarClip(100), clippingFlag(vpMbtPolygon::NO_CLIPPING)
+{  
   tracker.setTrackerId(1);
   tracker.setUseHarris(1);
   
@@ -65,21 +62,10 @@ vpMbKltTracker::vpMbKltTracker()
   
   angleAppears = vpMath::rad(65);
   angleDisappears = vpMath::rad(75);
-  
-  clippingFlag = vpMbtPolygon::NO_CLIPPING;
-  
-  maskBorder = 5;
-  threshold_outlier = 0.5;
-  percentGood = 0.6;
-  
-  lambda = 0.8;
-  maxIter = 200;
-
+    
 #ifdef VISP_HAVE_OGRE
   faces.getOgreContext()->setWindowName("MBT KLT");
 #endif
-  
-  useOgre = false;
 }
 
 /*!
@@ -134,9 +120,10 @@ vpMbKltTracker::reinit(const vpImage<unsigned char>& I)
   IplImage* mask = cvCreateImage(cvSize((int)I.getWidth(), (int)I.getHeight()), IPL_DEPTH_8U, 1);
   cvZero(mask);
   
+  unsigned char val = 255/* - i*15*/;
   for (unsigned int i = 0; i < faces.size(); i += 1){
     if(faces[i]->isVisible())
-      faces[i]->updateMask(mask, 255/* - i*15*/, maskBorder);
+      faces[i]->updateMask(mask, val, maskBorder);
   }
   
   tracker.initTracking(cur, mask);
@@ -260,15 +247,15 @@ vpMbKltTracker::setKltOpencv(const vpKltOpencv& t){
 /*!
   Set the camera parameters.
 
-  \param cam : the new camera parameters.
+  \param camera : the new camera parameters.
 */
 void
-vpMbKltTracker::setCameraParameters(const vpCameraParameters& cam)
+vpMbKltTracker::setCameraParameters(const vpCameraParameters& camera)
 {
   for (unsigned int i = 0; i < faces.size(); i += 1){
-    faces[i]->setCameraParameters(cam);
+    faces[i]->setCameraParameters(camera);
   }
-  this->cam = cam;
+  this->cam = camera;
 }
    
 /*!
@@ -344,7 +331,7 @@ vpMbKltTracker::setPose(const vpImage<unsigned char> &I, const vpHomogeneousMatr
           double invDc = 1.0 / plan.getD();
           
           //Create the homography
-          vpHomography cdHc;
+          vpMatrix cdHc;
           vpGEMM(cdtc, Nc, -invDc, cdRc, 1.0, cdHc, VP_GEMM_B_T);
           cdHc /= cdHc[2][2];
           
@@ -764,7 +751,6 @@ vpMbKltTracker::loadConfigFile(const char* configFile)
   
   try{
     std::cout << " *********** Parsing XML for MBT KLT Tracker ************ " << std::endl;
-    
     xmlp.parse(configFile);
   }
   catch(...){
@@ -794,7 +780,8 @@ vpMbKltTracker::loadConfigFile(const char* configFile)
     setFarClippingDistance(xmlp.getFarClippingDistance());
   
   if(xmlp.getFovClipping())
-    clippingFlag = clippingFlag | vpMbtPolygon::FOV_CLIPPING;
+    setClipping(clippingFlag = clippingFlag | vpMbtPolygon::FOV_CLIPPING);
+
 #else
   vpTRACE("You need the libXML2 to read the config file %s", configFile);
 #endif
@@ -804,17 +791,17 @@ vpMbKltTracker::loadConfigFile(const char* configFile)
   Display the 3D model at a given position using the given camera parameters
 
   \param I : The image.
-  \param cMo : Pose used to project the 3D model into the image.
-  \param cam : The camera parameters.
+  \param cMo_ : Pose used to project the 3D model into the image.
+  \param camera : The camera parameters.
   \param col : The desired color.
   \param thickness : The thickness of the lines.
   \param displayFullModel : Boolean to say if all the model has to be displayed.
 */
 void
-vpMbKltTracker::display(const vpImage<unsigned char>& I, const vpHomogeneousMatrix &cMo, const vpCameraParameters & cam,
-                        const vpColor& col , const unsigned int thickness, const bool displayFullModel)
+vpMbKltTracker::display(const vpImage<unsigned char>& I, const vpHomogeneousMatrix &cMo_, const vpCameraParameters & camera,
+                        const vpColor& col, const unsigned int thickness, const bool displayFullModel)
 {
-  vpCameraParameters c = cam;
+  vpCameraParameters c = camera;
   
   if(clippingFlag > 3) // Contains at least one FOV constraint
     c.computeFov(I.getWidth(), I.getHeight());
@@ -822,7 +809,7 @@ vpMbKltTracker::display(const vpImage<unsigned char>& I, const vpHomogeneousMatr
   for (unsigned int i = 0; i < faces.size(); i += 1){
     if(displayFullModel || faces[i]->isVisible())
     {
-      faces[i]->changeFrame(cMo);
+      faces[i]->changeFrame(cMo_);
       faces[i]->computeRoiClipped(c);
       std::vector<std::pair<vpImagePoint,unsigned int> > roi;
       faces[i]->getRoiClipped(c, roi);
@@ -850,7 +837,7 @@ vpMbKltTracker::display(const vpImage<unsigned char>& I, const vpHomogeneousMatr
 
 #ifdef VISP_HAVE_OGRE
   if(useOgre)
-    faces.displayOgre(cMo);
+    faces.displayOgre(cMo_);
 #endif
 }
 
@@ -858,17 +845,17 @@ vpMbKltTracker::display(const vpImage<unsigned char>& I, const vpHomogeneousMatr
   Display the 3D model at a given position using the given camera parameters
 
   \param I : The color image.
-  \param cMo : Pose used to project the 3D model into the image.
-  \param cam : The camera parameters.
+  \param cMo_ : Pose used to project the 3D model into the image.
+  \param camera : The camera parameters.
   \param col : The desired color.
   \param thickness : The thickness of the lines.
   \param displayFullModel : Boolean to say if all the model has to be displayed.
 */
 void
-vpMbKltTracker::display(const vpImage<vpRGBa>& I, const vpHomogeneousMatrix &cMo, const vpCameraParameters & cam,
+vpMbKltTracker::display(const vpImage<vpRGBa>& I, const vpHomogeneousMatrix &cMo_, const vpCameraParameters & camera,
                         const vpColor& col , const unsigned int thickness, const bool displayFullModel)
 {
-  vpCameraParameters c = cam;
+  vpCameraParameters c = camera;
   
   if(clippingFlag > 3) // Contains at least one FOV constraint
     c.computeFov(I.getWidth(), I.getHeight());
@@ -876,7 +863,7 @@ vpMbKltTracker::display(const vpImage<vpRGBa>& I, const vpHomogeneousMatrix &cMo
   for (unsigned int i = 0; i < faces.size(); i += 1){
     if(displayFullModel || faces[i]->isVisible())
     {
-      faces[i]->changeFrame(cMo);
+      faces[i]->changeFrame(cMo_);
       faces[i]->computeRoiClipped(c);      
       std::vector<std::pair<vpImagePoint,unsigned int> > roi;
       faces[i]->getRoiClipped(c, roi);
@@ -904,7 +891,7 @@ vpMbKltTracker::display(const vpImage<vpRGBa>& I, const vpHomogeneousMatrix &cMo
 
 #ifdef VISP_HAVE_OGRE
   if(useOgre)
-    faces.displayOgre(cMo);
+    faces.displayOgre(cMo_);
 #endif
 }
 
diff --git a/src/tracking/mbt/klt/vpMbKltTracker.h b/src/tracking/mbt/klt/vpMbKltTracker.h
index 80060b8b..b51a97ff 100644
--- a/src/tracking/mbt/klt/vpMbKltTracker.h
+++ b/src/tracking/mbt/klt/vpMbKltTracker.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbKltTracker.h 4338 2013-07-23 14:29:30Z fspindle $
+ * $Id: vpMbKltTracker.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -405,9 +405,9 @@ public:
           /*!
             Set the value of the gain used to compute the control law.
             
-            \param lambda : the desired value for the gain.
+            \param gain : the desired value for the gain.
           */
-  virtual inline  void    setLambda(const double lambda) {this->lambda = lambda;}
+  virtual inline  void    setLambda(const double gain) {this->lambda = gain;}
   
           /*!
             Set the erosion of the mask used on the Model faces.
@@ -443,7 +443,7 @@ protected:
           void            computeVVS(const unsigned int &nbInfos, vpColVector &w);
           
   virtual void            initFaceFromCorners(const std::vector<vpPoint>& corners, const unsigned int indexFace = -1);
-  virtual void            initCylinder(const vpPoint& , const vpPoint , const double , const unsigned int ){};
+  virtual void            initCylinder(const vpPoint&, const vpPoint &, const double, const unsigned int ){};
   
           void            preTracking(const vpImage<unsigned char>& I, unsigned int &nbInfos, unsigned int &nbFaceUsed);
           bool            postTracking(const vpImage<unsigned char>& I, vpColVector &w);
diff --git a/src/tracking/mbt/klt/vpMbtKltPolygon.cpp b/src/tracking/mbt/klt/vpMbtKltPolygon.cpp
index 9d02cabe..6e88f161 100644
--- a/src/tracking/mbt/klt/vpMbtKltPolygon.cpp
+++ b/src/tracking/mbt/klt/vpMbtKltPolygon.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbtKltPolygon.cpp 4318 2013-07-17 09:47:51Z fspindle $
+ * $Id: vpMbtKltPolygon.cpp 4661 2014-02-10 19:34:58Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -49,12 +49,9 @@
 
 */
 vpMbtKltPolygon::vpMbtKltPolygon()
+  : H(), N(), N_cur(), invd0(1.), cRc0_0n(), initPoints(), curPoints(), curPointsInd(),
+    nbPointsCur(0), nbPointsInit(0), minNbPoint(4), enoughPoints(false), dt(1.), d0(1.), cam()
 {
-  minNbPoint = 4;
-  enoughPoints = false;
-  
-  nbPointsInit = 0;
-  nbPointsCur = 0;
   initPoints = std::map<int, vpImagePoint>();
   curPoints = std::map<int, vpImagePoint>();
   curPointsInd = std::map<int, int>();
@@ -157,7 +154,7 @@ vpMbtKltPolygon::computeNbDetectedCurrent(const vpKltOpencv& _tracker)
 void
 vpMbtKltPolygon::computeInteractionMatrixAndResidu(vpColVector& _R, vpMatrix& _J)
 {
-  unsigned int index = 0;
+  unsigned int index_ = 0;
   
   std::map<int, vpImagePoint>::const_iterator iter = curPoints.begin();
   for( ; iter != curPoints.end(); iter++){
@@ -176,23 +173,23 @@ vpMbtKltPolygon::computeInteractionMatrixAndResidu(vpColVector& _R, vpMatrix& _J
 
     double invZ = compute_1_over_Z(x_cur, y_cur);
       
-    _J[2*index][0] = - invZ;
-    _J[2*index][1] = 0;
-    _J[2*index][2] = x_cur * invZ;
-    _J[2*index][3] = x_cur * y_cur;
-    _J[2*index][4] = -(1+x_cur*x_cur);
-    _J[2*index][5] = y_cur;
+    _J[2*index_][0] = - invZ;
+    _J[2*index_][1] = 0;
+    _J[2*index_][2] = x_cur * invZ;
+    _J[2*index_][3] = x_cur * y_cur;
+    _J[2*index_][4] = -(1+x_cur*x_cur);
+    _J[2*index_][5] = y_cur;
     
-    _J[2*index+1][0] = 0;
-    _J[2*index+1][1] = - invZ;
-    _J[2*index+1][2] = y_cur * invZ;
-    _J[2*index+1][3] = (1+y_cur*y_cur);
-    _J[2*index+1][4] = - y_cur * x_cur;
-    _J[2*index+1][5] = - x_cur;
-
-    _R[2*index] =  (x0_transform - x_cur);
-    _R[2*index+1] = (y0_transform - y_cur);
-    index++;
+    _J[2*index_+1][0] = 0;
+    _J[2*index_+1][1] = - invZ;
+    _J[2*index_+1][2] = y_cur * invZ;
+    _J[2*index_+1][3] = (1+y_cur*y_cur);
+    _J[2*index_+1][4] = - y_cur * x_cur;
+    _J[2*index_+1][5] = - x_cur;
+
+    _R[2*index_] =  (x0_transform - x_cur);
+    _R[2*index_+1] = (y0_transform - y_cur);
+    index_++;
   }
 }
 
@@ -251,12 +248,13 @@ vpMbtKltPolygon::computeHomography(const vpHomogeneousMatrix& _cTc0, vpHomograph
 
   _cTc0.extract(cRc0);
   _cTc0.extract(ctransc0);
-  
+  vpMatrix cHc0(_cHc0);
+
 //   vpGEMM(cRc0, 1.0, invd0, cRc0, -1.0, _cHc0, VP_GEMM_A_T);
-  vpGEMM(ctransc0, N, -invd0, cRc0, 1.0, _cHc0, VP_GEMM_B_T);
-  _cHc0 /= _cHc0[2][2];
+  vpGEMM(ctransc0, N, -invd0, cRc0, 1.0, cHc0, VP_GEMM_B_T);
+  cHc0 /= cHc0[2][2];
   
-  H = _cHc0;
+  H = cHc0;
   
 //   vpQuaternionVector NQuat(N[0], N[1], N[2], 0.0);
 //   vpQuaternionVector RotQuat(cRc0);
@@ -315,7 +313,7 @@ vpMbtKltPolygon::isTrackedFeature(const int _id)
   \param _shiftBorder : Optionnal shift for the border in pixel (sort of built-in erosion) to avoid to consider pixels near the limits of the face.
 */
 void
-vpMbtKltPolygon::updateMask(IplImage* _mask, unsigned int _nb, unsigned int _shiftBorder)
+vpMbtKltPolygon::updateMask(IplImage* _mask, unsigned char _nb, unsigned int _shiftBorder)
 {
   int width = _mask->width;
   int i_min, i_max, j_min, j_max;
@@ -340,7 +338,7 @@ vpMbtKltPolygon::updateMask(IplImage* _mask, unsigned int _nb, unsigned int _shi
   }
   
   double shiftBorder_d = (double) _shiftBorder;
-  char* ptrData = _mask->imageData + i_min*width+j_min;
+  unsigned char* ptrData = (unsigned char*)_mask->imageData + i_min*width+j_min;
   for(int i=i_min; i< i_max; i++){
     double i_d = (double) i;
     for(int j=j_min; j< j_max; j++){
@@ -477,7 +475,8 @@ bool vpMbtKltPolygon::intersect(const vpImagePoint& p1, const vpImagePoint& p2,
 
   double den = dx * ey - dy * ex;
   double t = 0, u = 0;
-  if(den != 0){
+  //if(den != 0){
+  if(std::fabs(den) > std::fabs(den)*std::numeric_limits<double>::epsilon()){
     t = -( ey * ( p1.get_j() - j_test ) + ex * ( -p1.get_i() + i_test ) ) / den;
     u = -( dx * ( -p1.get_i() + i_test ) + dy * ( p1.get_j() - j_test ) ) / den;
   }
diff --git a/src/tracking/mbt/klt/vpMbtKltPolygon.h b/src/tracking/mbt/klt/vpMbtKltPolygon.h
index 7c1c868a..ba8fe2a6 100644
--- a/src/tracking/mbt/klt/vpMbtKltPolygon.h
+++ b/src/tracking/mbt/klt/vpMbtKltPolygon.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbtKltPolygon.h 4339 2013-07-23 15:24:42Z ayol $
+ * $Id: vpMbtKltPolygon.h 4661 2014-02-10 19:34:58Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -157,7 +157,7 @@ public:
   */
   virtual inline void setCameraParameters(const vpCameraParameters& _cam){ cam = _cam; } 
   
-  void                updateMask(IplImage* _mask, unsigned int _nb = 255, unsigned int _shiftBorder = 0);
+  void                updateMask(IplImage* _mask, unsigned char _nb = 255, unsigned int _shiftBorder = 0);
   
 //###################
 // Static Functions
diff --git a/src/tracking/mbt/klt/vpMbtKltXmlParser.cpp b/src/tracking/mbt/klt/vpMbtKltXmlParser.cpp
index 554ddd64..5b81b53c 100644
--- a/src/tracking/mbt/klt/vpMbtKltXmlParser.cpp
+++ b/src/tracking/mbt/klt/vpMbtKltXmlParser.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbtKltXmlParser.cpp 4320 2013-07-17 15:37:27Z ayol $
+ * $Id: vpMbtKltXmlParser.cpp 4582 2014-01-14 14:02:46Z ayol $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -32,7 +32,7 @@
  *
  *
  * Description:
- * Read MBT KLT Tracker information in an XML file
+ * Load XML parameters of the Model based tracker (using point features).
  *
  * Authors:
  * Aurelien Yol
@@ -56,9 +56,8 @@
 */
 vpMbtKltXmlParser::vpMbtKltXmlParser()
 {
-  hasNearClipping = false;
-  hasFarClipping = false;
-  fovClipping = false;
+  maskBorder = maxFeatures = winSize = blockSize = pyramidLevels = 0;
+  qualityValue = minDist = harrisParam = 0.;
   init();
 }
 
@@ -75,9 +74,8 @@ vpMbtKltXmlParser::~vpMbtKltXmlParser()
 void 
 vpMbtKltXmlParser::init()
 {
-  setMainTag("conf");
+  vpMbXmlParser::init();
 
-  nodeMap["conf"] = conf;
   nodeMap["klt"] = klt;
   nodeMap["mask_border"] = mask_border;
   nodeMap["max_features"] = max_features;
@@ -87,19 +85,6 @@ vpMbtKltXmlParser::init()
   nodeMap["harris"] = harris;
   nodeMap["size_block"] = size_block;
   nodeMap["pyramid_lvl"] = pyramid_lvl;
-  nodeMap["face"] = face;
-  nodeMap["angle_appear"] = angle_appear;
-  nodeMap["angle_disappear"] = angle_disappear;
-  nodeMap["near_clipping"] = near_clipping;
-  nodeMap["far_clipping"] = far_clipping;
-  nodeMap["fov_clipping"] = fov_clipping;
-  nodeMap["camera"] = camera;
-  nodeMap["height"] = height;
-  nodeMap["width"] = width;
-  nodeMap["u0"] = u0;
-  nodeMap["v0"] = v0;
-  nodeMap["px"] = px;
-  nodeMap["py"] = py;
 }
 
 /*!
@@ -136,27 +121,27 @@ vpMbtKltXmlParser::writeMainClass(xmlNodePtr /*node*/)
 void
 vpMbtKltXmlParser::readMainClass(xmlDocPtr doc, xmlNodePtr node)
 {
-  bool klt_node = false;
   bool camera_node = false;
   bool face_node = false;
+  bool klt_node = false;
   
   for(xmlNodePtr dataNode = node->xmlChildrenNode; dataNode != NULL;  dataNode = dataNode->next)  {
     if(dataNode->type == XML_ELEMENT_NODE){
       std::map<std::string, int>::iterator iter_data= this->nodeMap.find((char*)dataNode->name);
       if(iter_data != nodeMap.end()){
         switch (iter_data->second){
-        case klt:{
-          this->read_klt(doc, dataNode);
-          klt_node = true;
-          }break;
         case camera:{
-          this->read_camera(doc, dataNode);
+          this->read_camera (doc, dataNode);
           camera_node = true;
           }break;
         case face:{
           this->read_face(doc, dataNode);
           face_node = true;
           }break;
+        case klt:{
+          this->read_klt(doc, dataNode);
+          klt_node = true;
+          }break;
         default:{
 //          vpTRACE("unknown tag in read_sample : %d, %s", iter_data->second, (iter_data->first).c_str());
           }break;
@@ -165,95 +150,27 @@ vpMbtKltXmlParser::readMainClass(xmlDocPtr doc, xmlNodePtr node)
     }
   }
 
-  if(!klt_node)
-    std::cout << "WARNING: KLT Node not specified, default values used" << std::endl;
-  
-  if(!camera_node)
-    std::cout << "WARNING: CAMERA Node not specified, default values used" << std::endl;
-  
-  if(!face_node)
-    std::cout << "WARNING: FACE Node not specified, default values used" << std::endl;
-}
+  if(!camera_node) {
+    std::cout << "camera : u0 : "<< this->cam.get_u0() << " (default)" <<std::endl;
+    std::cout << "camera : v0 : "<< this->cam.get_v0() << " (default)" <<std::endl;
+    std::cout << "camera : px : "<< this->cam.get_px() << " (default)" <<std::endl;
+    std::cout << "camera : py : "<< this->cam.get_py() << " (default)" <<std::endl;
+  }
 
-/*!
-  Read face information.
-  
-  \throw vpException::fatalError if there was an unexpected number of data. 
-  
-  \param doc : Pointer to the document.
-  \param node : Pointer to the node of the camera information.
-*/
-void 
-vpMbtKltXmlParser::read_face(xmlDocPtr doc, xmlNodePtr node)
-{
-  bool angle_appear_node = false;
-  bool angle_disappear_node = false;
-  bool near_clipping_node = false;
-  bool far_clipping_node = false;
-  bool fov_clipping_node = false;
-  
-  for(xmlNodePtr dataNode = node->xmlChildrenNode; dataNode != NULL;  dataNode = dataNode->next)  {
-    if(dataNode->type == XML_ELEMENT_NODE){
-      std::map<std::string, int>::iterator iter_data= this->nodeMap.find((char*)dataNode->name);
-      if(iter_data != nodeMap.end()){
-        switch (iter_data->second){
-        case angle_appear:{
-          angleAppear = xmlReadDoubleChild(doc, dataNode);
-          angle_appear_node = true;
-          }break;
-        case angle_disappear:{
-          angleDisappear = xmlReadDoubleChild(doc, dataNode);
-          angle_disappear_node = true;
-          }break;
-        case near_clipping:{
-          nearClipping = xmlReadDoubleChild(doc, dataNode);
-          near_clipping_node = true;
-          hasNearClipping = true;
-          }break;
-        case far_clipping:{
-          farClipping = xmlReadDoubleChild(doc, dataNode);
-          far_clipping_node = true;
-          hasFarClipping = true;
-          }break;
-        case fov_clipping:{
-          fovClipping = (bool)xmlReadIntChild(doc, dataNode);
-          fov_clipping_node = true;
-          }break;
-        default:{
-//          vpTRACE("unknown tag in read_camera : %d, %s", iter_data->second, (iter_data->first).c_str());
-          }break;
-        }
-      }
-    }
+  if(!face_node) {
+    std::cout << "face : Angle Appear : "<< angleAppear <<" (default)" <<std::endl;
+    std::cout << "face : Angle Disappear : "<< angleDisappear <<" (default)" <<std::endl;
   }
-  
-  if(!angle_appear_node)
-    std::cout << "WARNING: In FACE Node, ANGLE_APPEAR Node not specified, default value used : " << angleAppear << std::endl;
-  else
-    std::cout << "face : Angle Appear "<< angleAppear <<std::endl;
-  
-  if(!angle_disappear_node)
-    std::cout << "WARNING: In FACE Node, ANGLE_DESAPPEAR Node not specified, default value used : " << angleDisappear << std::endl;
-  else
-    std::cout << "face : Angle Disappear : "<< angleDisappear <<std::endl;
-  
-  if(!near_clipping_node)
-    std::cout << "WARNING: In FACE Node, NEAR_CLIPPING Node not specified, no near clipping used" << std::endl;
-  else
-    std::cout << "face : Near Clipping : "<< nearClipping <<std::endl;
-  
-  if(!far_clipping_node)
-    std::cout << "WARNING: In FACE Node, FAR_CLIPPING Node not specified, no far clipping used" << std::endl;
-  else
-    std::cout << "face : Far Clipping : "<< farClipping <<std::endl;
-  
-  if(!fov_clipping_node)
-    std::cout << "WARNING: In FACE Node, FOV_CLIPPING Node not specified, no fov clipping used" << std::endl;
-  else{
-    if(fovClipping)
-      std::cout << "face : Fov Clipping : True" <<std::endl;
-    else
-      std::cout << "face : Fov Clipping : False" <<std::endl;
+
+  if(!klt_node) {
+    std::cout << "klt : Mask Border : "<< maskBorder <<" (default)" <<std::endl;
+    std::cout << "klt : Max Features : "<< maxFeatures <<" (default)" <<std::endl;
+    std::cout << "klt : Windows Size : "<< winSize <<" (default)" <<std::endl;
+    std::cout << "klt : Quality : "<< qualityValue <<" (default)" <<std::endl;
+    std::cout << "klt : Min Distance : "<< minDist <<" (default)" <<std::endl;
+    std::cout << "klt : Harris Parameter : "<< harrisParam <<" (default)" <<std::endl;
+    std::cout << "klt : Block Size : "<< blockSize <<" (default)" <<std::endl;
+    std::cout << "klt : Pyramid Levels : "<< pyramidLevels <<" (default)" <<std::endl;
   }
 }
 
@@ -268,7 +185,7 @@ vpMbtKltXmlParser::read_face(xmlDocPtr doc, xmlNodePtr node)
 void 
 vpMbtKltXmlParser::read_klt(xmlDocPtr doc, xmlNodePtr node)
 {
-	bool mask_border_node = false;
+  bool mask_border_node = false;
   bool max_features_node = false;
   bool window_size_node = false;
   bool quality_node = false;
@@ -323,138 +240,45 @@ vpMbtKltXmlParser::read_klt(xmlDocPtr doc, xmlNodePtr node)
   }
   
   if(!mask_border_node)
-    std::cout << "WARNING: In KLT Node, MASK_BORDER Node not specified, default value used : " << maskBorder << std::endl;
+    std::cout << "klt : Mask Border : "<< maskBorder <<" (default)" <<std::endl;
   else
     std::cout << "klt : Mask Border : "<< maskBorder <<std::endl;
   
   if(!max_features_node)
-    std::cout << "WARNING: In KLT Node, MAX_FEATURES Node not specified, default value used : " << maxFeatures << std::endl;
+    std::cout << "klt : Max Features : "<< maxFeatures <<" (default)" <<std::endl;
   else
     std::cout << "klt : Max Features : "<< maxFeatures <<std::endl;
   
   if(!window_size_node)
-    std::cout << "WARNING: In KLT Node, WINDOW_SIZE Node not specified, default value used : " << winSize << std::endl;
+    std::cout << "klt : Windows Size : "<< winSize <<" (default)" <<std::endl;
   else
     std::cout << "klt : Windows Size : "<< winSize <<std::endl;
   
   if(!quality_node)
-    std::cout << "WARNING: In KLT Node, QUALITY Node not specified, default value used : " << qualityValue << std::endl;
+    std::cout << "klt : Quality : "<< qualityValue <<" (default)" <<std::endl;
   else
     std::cout << "klt : Quality : "<< qualityValue <<std::endl;
   
   if(!min_distance_node)
-    std::cout << "WARNING: In KLT Node, MIN_DISTANCE Node not specified, default value used : " << minDist << std::endl;
+    std::cout << "klt : Min Distance : "<< minDist <<" (default)" <<std::endl;
   else
     std::cout << "klt : Min Distance : "<< minDist <<std::endl;
   
   if(!harris_node)
-    std::cout << "WARNING: In KLT Node, HARRIS Node not specified, default value used : " << harrisParam << std::endl;
+    std::cout << "klt : Harris Parameter : "<< harrisParam <<" (default)" <<std::endl;
   else
     std::cout << "klt : Harris Parameter : "<< harrisParam <<std::endl;
   
   if(!size_block_node)
-    std::cout << "WARNING: In KLT Node, SIZE_BLOCK Node not specified, default value used : " << blockSize << std::endl;
+    std::cout << "klt : Block Size : "<< blockSize <<" (default)" <<std::endl;
   else
     std::cout << "klt : Block Size : "<< blockSize <<std::endl;
   
   if(!pyramid_lvl_node)
-    std::cout << "WARNING: In KLT Node, PYRAMID_LVL Node not specified, default value used : " << pyramidLevels << std::endl;
+    std::cout << "klt : Pyramid Levels : "<< pyramidLevels <<" (default)" <<std::endl;
   else
     std::cout << "klt : Pyramid Levels : "<< pyramidLevels <<std::endl;
 }
 
-/*!
-  Read camera information.
-  
-  \throw vpException::fatalError if there was an unexpected number of data. 
-  
-  \param doc : Pointer to the document.
-  \param node : Pointer to the node of the camera information.
-*/
-void 
-vpMbtKltXmlParser::read_camera (xmlDocPtr doc, xmlNodePtr node)
-{
-  bool height_node = false;
-  bool width_node = false;
-  bool u0_node = false;
-  bool v0_node = false;
-  bool px_node = false;
-  bool py_node = false;
-  
-    // current data values.
-//  int d_height=0 ;
-//  int d_width= 0 ;
-  double d_u0 = this->cam.get_u0();
-  double d_v0 = this->cam.get_v0();
-  double d_px = this->cam.get_px();
-  double d_py = this->cam.get_py();
-  
-  for(xmlNodePtr dataNode = node->xmlChildrenNode; dataNode != NULL;  dataNode = dataNode->next)  {
-    if(dataNode->type == XML_ELEMENT_NODE){
-      std::map<std::string, int>::iterator iter_data= this->nodeMap.find((char*)dataNode->name);
-      if(iter_data != nodeMap.end()){
-        switch (iter_data->second){
-        case height:{
-          /* d_height = */ xmlReadIntChild(doc, dataNode);
-          height_node = true;
-          }break;
-        case width:{
-          /* d_width = */ xmlReadIntChild(doc, dataNode);
-          width_node = true;
-          }break;
-        case u0:{
-          d_u0 = xmlReadDoubleChild(doc, dataNode);
-          u0_node = true;
-          }break;
-        case v0:{
-          d_v0 = xmlReadDoubleChild(doc, dataNode);
-          v0_node = true;
-          }break;
-        case px:{
-          d_px = xmlReadDoubleChild(doc, dataNode);
-          px_node = true;
-          }break;
-        case py:{
-          d_py = xmlReadDoubleChild(doc, dataNode);
-          py_node = true;
-          }break;
-        default:{
-//          vpTRACE("unknown tag in read_camera : %d, %s", iter_data->second, (iter_data->first).c_str());
-          }break;
-        }
-      }
-    }
-  }
-  
-  this->cam.initPersProjWithoutDistortion(d_px, d_py, d_u0, d_v0) ;
-
-  if(!height_node)
-    std::cout << "WARNING: In CAMERA Node, HEIGHT Node not specified, default value used" << std::endl;
-  
-  if(!width_node)
-    std::cout << "WARNING: In CAMERA Node, WIDTH Node not specified, default value used" << std::endl;
-  
-  if(!u0_node)
-    std::cout << "WARNING: In CAMERA Node, u0 Node not specified, default value used : " << this->cam.get_u0() << std::endl;
-  else
-    std::cout << "camera : u0 "<< this->cam.get_u0() <<std::endl;
-  
-  if(!v0_node)
-    std::cout << "WARNING: In CAMERA Node, v0 Node not specified, default value used : " << this->cam.get_v0() << std::endl;
-  else
-    std::cout << "camera : v0 "<< this->cam.get_v0() <<std::endl;
-  
-  if(!px_node)
-    std::cout << "WARNING: In CAMERA Node, px Node not specified, default value used : " << this->cam.get_px() << std::endl;
-  else
-    std::cout << "camera : px "<< this->cam.get_px() <<std::endl;
-  
-  if(!py_node)
-    std::cout << "WARNING: In CAMERA Node, py Node not specified, default value used : " << this->cam.get_py() << std::endl;
-  else
-    std::cout << "camera : py "<< this->cam.get_py() <<std::endl;
-}
-
-
 #endif
 
diff --git a/src/tracking/mbt/klt/vpMbtKltXmlParser.h b/src/tracking/mbt/klt/vpMbtKltXmlParser.h
index ee260f2f..0de55c7e 100644
--- a/src/tracking/mbt/klt/vpMbtKltXmlParser.h
+++ b/src/tracking/mbt/klt/vpMbtKltXmlParser.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbtKltXmlParser.h 4320 2013-07-17 15:37:27Z ayol $
+ * $Id: vpMbtKltXmlParser.h 4582 2014-01-14 14:02:46Z ayol $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -32,7 +32,7 @@
  *
  *
  * Description:
- * Read MBT KLT Tracker information in an XML file
+ * Load XML parameters of the Model based tracker (using point features).
  *
  * Authors:
  * Aurelien Yol
@@ -52,8 +52,7 @@
 
 #include <libxml/xmlmemory.h>      /* Fonctions de la lib XML. */
 
-#include <visp/vpXmlParser.h>
-#include <visp/vpCameraParameters.h>
+#include <visp/vpMbXmlParser.h>
 
 /*!
   \class vpMbtKltXmlParser
@@ -63,7 +62,7 @@
   Data parser for the KLT model based tracker.
 
 */
-class VISP_EXPORT vpMbtKltXmlParser: public vpXmlParser
+class VISP_EXPORT vpMbtKltXmlParser: virtual public vpMbXmlParser
 {
 protected:
   //! Border of the mask used on Klt points
@@ -82,26 +81,9 @@ protected:
   unsigned int blockSize;
   //! Number of pyramid levels
   unsigned int pyramidLevels;
-  //! Angle to determine if a face appeared
-  double angleAppear;
-  //! Angle to determine if a face disappeared
-  double angleDisappear;
-  //! Is near clipping distance specified?
-  bool hasNearClipping;
-  //! Near clipping distance
-  double nearClipping;
-  //! Is far clipping distance specified?
-  bool hasFarClipping;
-  //! Near clipping distance
-  double farClipping;
-  //! Fov Clipping
-  bool fovClipping;
-  //! Camera parameters.
-  vpCameraParameters cam;
     
   typedef enum{
-    conf,
-    klt,
+    klt = vpMbXmlParser::last,
     mask_border,
     max_features,
     window_size,
@@ -110,20 +92,8 @@ protected:
     harris,
     size_block,
     pyramid_lvl,
-    face,
-    angle_appear,
-    angle_disappear,
-    near_clipping,
-    far_clipping,
-    fov_clipping,
-    camera,
-    height,
-    width,
-    u0,
-    v0,
-    px,
-    py
-  } dataToParse;
+    last
+  } dataToParseMbKlt;
 
 
 public:
@@ -131,20 +101,6 @@ public:
 	vpMbtKltXmlParser();
 	virtual ~vpMbtKltXmlParser();
 
-  /*!
-    Get the angle to determine if a face appeared.
-
-    \return angleAppear
-  */
-  inline double getAngleAppear() const {return angleAppear;}
-  
-  /*!
-    Get the angle to determine if a face disappeared.
-
-    \return angleDisappear
-  */
-  inline double getAngleDisappear() const {return angleDisappear;}
-  
   /*!
     Get the size of a block.
 
@@ -152,27 +108,6 @@ public:
   */
   inline unsigned int getBlockSize() const {return blockSize;}
   
-  /*!
-    Get the camera parameters.
-
-    \return cam
-  */
-  void getCameraParameters(vpCameraParameters& _cam) const { _cam = cam;}
-  
-  /*!
-    Get the far clipping distance.
-
-    \return farClipping
-  */
-  inline double getFarClippingDistance() const {return farClipping;}
-  
-  /*!
-    Use FOV clipping
-
-    \return True if yes, False otherwise.
-  */
-  inline bool getFovClipping() const {return fovClipping;}
-  
   /*!
     Get the Harris free parameter.
 
@@ -201,13 +136,6 @@ public:
   */
   inline double getMinDistance() const {return minDist;}
   
-  /*!
-    Get the near clipping distance.
-
-    \return nearClipping
-  */
-  inline double getNearClippingDistance() const {return nearClipping;}
-  
   /*!
     Get the number of pyramid levels
 
@@ -229,40 +157,10 @@ public:
   */
   inline unsigned int getWindowSize() const {return winSize;}
   
-  /*!
-    Has Far clipping been specified?
-
-    \return True if yes, False otherwise.
-  */
-  inline bool hasFarClippingDistance() const {return hasFarClipping;}
-  
-  /*!
-    Has Near clipping been specified?
-
-    \return True if yes, False otherwise.
-  */
-  inline bool hasNearClippingDistance() const {return hasNearClipping;}
-  
   void parse(const char * filename);
   
-  void readMainClass(xmlDocPtr doc, xmlNodePtr node);
-  void read_camera (xmlDocPtr doc, xmlNodePtr node);
+  virtual void readMainClass(xmlDocPtr doc, xmlNodePtr node);
   void read_klt(xmlDocPtr doc, xmlNodePtr node);
-  void read_face(xmlDocPtr doc, xmlNodePtr node);
-  
-  /*!
-    Set the angle to determine if a face appeared.
-
-    \param aappear : New angleAppear
-  */
-  inline void setAngleAppear(const double &aappear) {angleAppear = aappear;}
-  
-  /*!
-    Set the angle to determine if a face disappeared.
-
-    \param adisappear : New angleDisappear
-  */
-  inline void setAngleDisappear(const double &adisappear) {angleDisappear = adisappear;}
   
   /*!
     Set the size of a block.
@@ -271,20 +169,6 @@ public:
   */
   inline void setBlockSize(const unsigned int &bs) {blockSize = bs;}
   
-  /*!
-    Set the camera parameters.
-
-    \param _cam : New cam
-  */
-  void setCameraParameters(const vpCameraParameters& _cam) {cam = _cam;}
-  
-  /*!
-    Set the far clipping distance.
-
-    \param fclip : New farClipping
-  */
-  inline void setFarClippingDistance(const double &fclip) {farClipping = fclip;}
-  
   /*!
     Set the Harris free parameter.
 
@@ -312,14 +196,7 @@ public:
     \param mD : New minDist
   */
   inline void setMinDistance(const double &mD) {minDist = mD;}
-  
-  /*!
-    Set the near clipping distance.
 
-    \param nclip : New nearClipping
-  */
-  inline void setNearClippingDistance(const double &nclip) {nearClipping = nclip;}
-  
   /*!
     Set the number of pyramid levels
 
diff --git a/src/tracking/mbt/vpMbHiddenFaces.h b/src/tracking/mbt/vpMbHiddenFaces.h
index 60b4e913..0fecbd12 100644
--- a/src/tracking/mbt/vpMbHiddenFaces.h
+++ b/src/tracking/mbt/vpMbHiddenFaces.h
@@ -3,7 +3,7 @@
  * $Id: vpMbTracker.h 4004 2012-11-23 17:34:44Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -54,6 +54,7 @@
 #endif
 
 #include <vector>
+#include <limits>
 
 /*!
   \class vpMbHiddenFaces
@@ -79,11 +80,11 @@ class vpMbHiddenFaces
   std::vector< Ogre::ManualObject* > lOgrePolygons;
 #endif
   
-  unsigned int  setVisiblePrivate(const vpHomogeneousMatrix &_cMo, const double &angleAppears, const double &angleDisappears, 
+  unsigned int  setVisiblePrivate(const vpHomogeneousMatrix &cMo, const double &angleAppears, const double &angleDisappears,
                            bool &changed, 
                            bool useOgre = false, bool testRoi = false,
-                           const vpImage<unsigned char> &_I = vpImage<unsigned char>(),
-                           const vpCameraParameters &_cam = vpCameraParameters()
+                           const vpImage<unsigned char> &I = vpImage<unsigned char>(),
+                           const vpCameraParameters &cam = vpCameraParameters()
                           ) ;
 
   
@@ -94,7 +95,7 @@ class vpMbHiddenFaces
     void          addPolygon(PolygonType *p)  ;
 
 #ifdef VISP_HAVE_OGRE
-    void          displayOgre(const vpHomogeneousMatrix &_cMo);
+    void          displayOgre(const vpHomogeneousMatrix &cMo);
 #endif   
  
     /*!
@@ -105,7 +106,7 @@ class vpMbHiddenFaces
     std::vector<PolygonType*>& getPolygon() {return Lpol;}
 
 #ifdef VISP_HAVE_OGRE
-  void            initOgre(vpCameraParameters _cam = vpCameraParameters());
+  void            initOgre(const vpCameraParameters &cam = vpCameraParameters());
 #endif
     
     /*!
@@ -169,13 +170,13 @@ class vpMbHiddenFaces
     void          setBackgroundSizeOgre(const unsigned int &h, const unsigned int &w) { ogreBackground.resize(h,w); }
 #endif
     
-    unsigned int  setVisible(const vpImage<unsigned char>& _I, const vpCameraParameters &_cam, const vpHomogeneousMatrix &_cMo, const double &angle, bool &changed) ;
-    unsigned int  setVisible(const vpImage<unsigned char>& _I, const vpCameraParameters &_cam, const vpHomogeneousMatrix &_cMo, const double &angleAppears, const double &angleDisappears, bool &changed) ;
-    unsigned int  setVisible(const vpHomogeneousMatrix &_cMo, const double &angleAppears, const double &angleDisappears, bool &changed) ;
+    unsigned int  setVisible(const vpImage<unsigned char>& I, const vpCameraParameters &cam, const vpHomogeneousMatrix &cMo, const double &angle, bool &changed) ;
+    unsigned int  setVisible(const vpImage<unsigned char>& I, const vpCameraParameters &cam, const vpHomogeneousMatrix &cMo, const double &angleAppears, const double &angleDisappears, bool &changed) ;
+    unsigned int  setVisible(const vpHomogeneousMatrix &cMo, const double &angleAppears, const double &angleDisappears, bool &changed) ;
  
 #ifdef VISP_HAVE_OGRE
-    unsigned int  setVisibleOgre(const vpImage<unsigned char>& _I, const vpCameraParameters &_cam, const vpHomogeneousMatrix &_cMo, const double &angleAppears, const double &angleDisappears, bool &changed) ;
-    unsigned int  setVisibleOgre(const vpHomogeneousMatrix &_cMo, const double &angleAppears, const double &angleDisappears, bool &changed) ;
+    unsigned int  setVisibleOgre(const vpImage<unsigned char>& I, const vpCameraParameters &cam, const vpHomogeneousMatrix &cMo, const double &angleAppears, const double &angleDisappears, bool &changed) ;
+    unsigned int  setVisibleOgre(const vpHomogeneousMatrix &cMo, const double &angleAppears, const double &angleDisappears, bool &changed) ;
 #endif
   /*!
    Get the number of polygons.
@@ -207,7 +208,7 @@ class vpMbHiddenFaces
     \param d : New value.
   */
   vp_deprecated void setDepthTest(const bool &d){depthTest = d;} 
-  unsigned int setVisible(const vpHomogeneousMatrix &_cMo) ;
+  unsigned int setVisible(const vpHomogeneousMatrix &cMo) ;
 #endif
 } ;
 
@@ -215,7 +216,12 @@ class vpMbHiddenFaces
   Basic constructor.
 */
 template<class PolygonType>
-vpMbHiddenFaces<PolygonType>::vpMbHiddenFaces(): nbVisiblePolygon(0)
+vpMbHiddenFaces<PolygonType>::vpMbHiddenFaces()
+  : Lpol(), nbVisiblePolygon(0)
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+  , depthTest(false)
+#endif
+
 {
 #ifdef VISP_HAVE_OGRE
   ogreInitialised = false;
@@ -223,9 +229,6 @@ vpMbHiddenFaces<PolygonType>::vpMbHiddenFaces(): nbVisiblePolygon(0)
   ogre->setShowConfigDialog(false);
   ogreBackground = vpImage<unsigned char>(480, 640);
 #endif
-#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
-  depthTest = false;
-#endif
 }
 
 
@@ -286,23 +289,23 @@ vpMbHiddenFaces<PolygonType>::reset()
 /*!
   Compute the number of visible polygons.
   
-  \param _cMo : The pose of the camera
+  \param cMo : The pose of the camera
   \param angleAppears : Angle used to test the appearance of a face
   \param angleDisappears : Angle used to test the disappearance of a face
   \param changed : True if a face appeared, disappeared or too many points have been lost. False otherwise
   \param useOgre : True if a Ogre is used to test the visibility, False otherwise
   \param testRoi : True if a face have to be entirely in the image False otherwise
-  \param _I : Image used to test if a face is entirely projected in the image.
-  \param _cam : Camera parameters.
+  \param I : Image used to test if a face is entirely projected in the image.
+  \param cam : Camera parameters.
   
   \return Return the number of visible polygons
 */
 template<class PolygonType>
 unsigned int
-vpMbHiddenFaces<PolygonType>::setVisiblePrivate(const vpHomogeneousMatrix &_cMo, const double &angleAppears, const double &angleDisappears, 
+vpMbHiddenFaces<PolygonType>::setVisiblePrivate(const vpHomogeneousMatrix &cMo, const double &angleAppears, const double &angleDisappears,
                                                bool &changed, bool useOgre, bool testRoi, 
-                                               const vpImage<unsigned char> &_I,
-                                               const vpCameraParameters &_cam
+                                               const vpImage<unsigned char> &I,
+                                               const vpCameraParameters &cam
                                               )
 {  
   nbVisiblePolygon = 0;
@@ -312,15 +315,15 @@ vpMbHiddenFaces<PolygonType>::setVisiblePrivate(const vpHomogeneousMatrix &_cMo,
   
   if(useOgre){
 #ifdef VISP_HAVE_OGRE
-    _cMo.inverse().extract(cameraPos);
-    ogre->renderOneFrame(ogreBackground, _cMo);
+    cMo.inverse().extract(cameraPos);
+    ogre->renderOneFrame(ogreBackground, cMo);
 #else
     vpTRACE("ViSP doesn't have Ogre3D, simple visibility test used");
 #endif
   }
   
   for (unsigned int i = 0; i < Lpol.size(); i += 1){ 
-    Lpol[i]->changeFrame(_cMo);
+    Lpol[i]->changeFrame(cMo);
     Lpol[i]->isappearing = false;
     
     if(Lpol[i]->isVisible())
@@ -330,19 +333,19 @@ vpMbHiddenFaces<PolygonType>::setVisiblePrivate(const vpHomogeneousMatrix &_cMo,
       
       if(testRoi){
        nbCornerInsidePrev = Lpol[i]->getNbCornerInsidePrevImage();
-       if(Lpol[i]->getNbCornerInsideImage(_I, _cam) == 0)
+       if(Lpol[i]->getNbCornerInsideImage(I, cam) == 0)
           testDisappear = true;
       }
       
       if(!testDisappear){
         if(useOgre)
 #ifdef VISP_HAVE_OGRE
-          testDisappear = ((!Lpol[i]->isVisible(_cMo, angleDisappears, true)) || !isVisibleOgre(cameraPos,i));
+          testDisappear = ((!Lpol[i]->isVisible(cMo, angleDisappears, true)) || !isVisibleOgre(cameraPos,i));
 #else
-          testDisappear = (!Lpol[i]->isVisible(_cMo, angleDisappears));
+          testDisappear = (!Lpol[i]->isVisible(cMo, angleDisappears));
 #endif
         else
-          testDisappear = (!Lpol[i]->isVisible(_cMo, angleDisappears));
+          testDisappear = (!Lpol[i]->isVisible(cMo, angleDisappears));
       }
   
       // test if the face is still visible
@@ -363,18 +366,18 @@ vpMbHiddenFaces<PolygonType>::setVisiblePrivate(const vpHomogeneousMatrix &_cMo,
     {
       bool testAppear = true;
       
-      if(testRoi && Lpol[i]->getNbCornerInsideImage(_I, _cam) == 0)
+      if(testRoi && Lpol[i]->getNbCornerInsideImage(I, cam) == 0)
        testAppear = false;
       
       if(testAppear){
         if(useOgre)
 #ifdef VISP_HAVE_OGRE
-          testAppear = ((Lpol[i]->isVisible(_cMo, angleAppears, true)) && isVisibleOgre(cameraPos,i));
+          testAppear = ((Lpol[i]->isVisible(cMo, angleAppears, true)) && isVisibleOgre(cameraPos,i));
 #else
-          testAppear = (Lpol[i]->isVisible(_cMo, angleAppears));
+          testAppear = (Lpol[i]->isVisible(cMo, angleAppears));
 #endif
         else
-          testAppear = (Lpol[i]->isVisible(_cMo, angleAppears));
+          testAppear = (Lpol[i]->isVisible(cMo, angleAppears));
       } 
       
       if(testAppear){   
@@ -395,9 +398,9 @@ vpMbHiddenFaces<PolygonType>::setVisiblePrivate(const vpHomogeneousMatrix &_cMo,
 /*!
   Compute the number of visible polygons.
   
-  \param _I : Image used to check if the region of interest is inside the image.
-  \param _cam : Camera parameters.
-  \param _cMo : The pose of the camera.
+  \param I : Image used to check if the region of interest is inside the image.
+  \param cam : Camera parameters.
+  \param cMo : The pose of the camera.
   \param angle : Angle used to test the appearance and disappearance of a face.
   \param changed : True if a face appeared, disappeared or too many points have been lost. False otherwise
   
@@ -405,17 +408,17 @@ vpMbHiddenFaces<PolygonType>::setVisiblePrivate(const vpHomogeneousMatrix &_cMo,
 */
 template<class PolygonType>
 unsigned int
-vpMbHiddenFaces<PolygonType>::setVisible(const vpImage<unsigned char>& _I, const vpCameraParameters &_cam, const vpHomogeneousMatrix &_cMo, const double &angle, bool &changed)
+vpMbHiddenFaces<PolygonType>::setVisible(const vpImage<unsigned char>& I, const vpCameraParameters &cam, const vpHomogeneousMatrix &cMo, const double &angle, bool &changed)
 {
-  return setVisible(_I, _cam, _cMo, angle, angle, changed);
+  return setVisible(I, cam, cMo, angle, angle, changed);
 }
 
 /*!
   Compute the number of visible polygons.
   
-  \param _I : Image used to check if the region of interest is inside the image.
-  \param _cam : Camera parameters.
-  \param _cMo : The pose of the camera
+  \param I : Image used to check if the region of interest is inside the image.
+  \param cam : Camera parameters.
+  \param cMo : The pose of the camera
   \param changed : True if a face appeared, disappeared or too many points have been lost. False otherwise
   \param angleAppears : Angle used to test the appearance of a face
   \param angleDisappears : Angle used to test the disappearance of a face
@@ -424,15 +427,15 @@ vpMbHiddenFaces<PolygonType>::setVisible(const vpImage<unsigned char>& _I, const
 */
 template<class PolygonType>
 unsigned int
-vpMbHiddenFaces<PolygonType>::setVisible(const vpImage<unsigned char>& _I, const vpCameraParameters &_cam, const vpHomogeneousMatrix &_cMo, const double &angleAppears, const double &angleDisappears, bool &changed)
+vpMbHiddenFaces<PolygonType>::setVisible(const vpImage<unsigned char>& I, const vpCameraParameters &cam, const vpHomogeneousMatrix &cMo, const double &angleAppears, const double &angleDisappears, bool &changed)
 {
-  return setVisiblePrivate(_cMo,angleAppears,angleDisappears,changed,false,true,_I,_cam);
+  return setVisiblePrivate(cMo,angleAppears,angleDisappears,changed,false,true,I,cam);
 }
 
 /*!
   Compute the number of visible polygons.
   
-  \param _cMo : The pose of the camera
+  \param cMo : The pose of the camera
   \param angleAppears : Angle used to test the appearance of a face
   \param angleDisappears : Angle used to test the disappearance of a face
   \param changed : True if a face appeared, disappeared or too many points have been lost. False otherwise
@@ -441,23 +444,23 @@ vpMbHiddenFaces<PolygonType>::setVisible(const vpImage<unsigned char>& _I, const
 */
 template<class PolygonType>
 unsigned int
-vpMbHiddenFaces<PolygonType>::setVisible(const vpHomogeneousMatrix &_cMo, const double &angleAppears, const double &angleDisappears, bool &changed)
+vpMbHiddenFaces<PolygonType>::setVisible(const vpHomogeneousMatrix &cMo, const double &angleAppears, const double &angleDisappears, bool &changed)
 {
-  return setVisiblePrivate(_cMo,angleAppears,angleDisappears,changed,false);
+  return setVisiblePrivate(cMo,angleAppears,angleDisappears,changed,false);
 }
 
 #ifdef VISP_HAVE_OGRE
 /*!
   Initialise the ogre context for face visibility tests.
   
-  \param _cam : Camera parameters.
+  \param cam : Camera parameters.
 */
 template<class PolygonType>
 void 
-vpMbHiddenFaces<PolygonType>::initOgre(vpCameraParameters _cam)
+vpMbHiddenFaces<PolygonType>::initOgre(const vpCameraParameters &cam)
 {
   ogreInitialised = true;
-  ogre->setCameraParameters(_cam);
+  ogre->setCameraParameters(cam);
   ogre->init(ogreBackground, false, true);
   
   for(unsigned int n = 0 ; n < Lpol.size(); n++){
@@ -482,11 +485,11 @@ vpMbHiddenFaces<PolygonType>::initOgre(vpCameraParameters _cam)
 /*!
   Update the display in Ogre Window.
   
-  \param _cMo : Pose used to display.
+  \param cMo : Pose used to display.
 */
 template<class PolygonType>
 void
-vpMbHiddenFaces<PolygonType>::displayOgre(const vpHomogeneousMatrix &_cMo)
+vpMbHiddenFaces<PolygonType>::displayOgre(const vpHomogeneousMatrix &cMo)
 {
   if(ogreInitialised && !ogre->isWindowHidden()){
     for(unsigned int i = 0 ; i < Lpol.size() ; i++){
@@ -496,16 +499,16 @@ vpMbHiddenFaces<PolygonType>::displayOgre(const vpHomogeneousMatrix &_cMo)
       else
         lOgrePolygons[i]->setVisible(false);
     }
-    ogre->display(ogreBackground, _cMo);
+    ogre->display(ogreBackground, cMo);
   }
 }
 
 /*!
   Compute the number of visible polygons through Ogre3D.
   
-  \param _I : Image used to check if the region of interest is inside the image.
-  \param _cam : Camera parameters.
-  \param _cMo : The pose of the camera
+  \param I : Image used to check if the region of interest is inside the image.
+  \param cam : Camera parameters.
+  \param cMo : The pose of the camera
   \param changed : True if a face appeared, disappeared or too many points have been lost. False otherwise
   \param angleAppears : Angle used to test the appearance of a face
   \param angleDisappears : Angle used to test the disappearance of a face
@@ -514,15 +517,15 @@ vpMbHiddenFaces<PolygonType>::displayOgre(const vpHomogeneousMatrix &_cMo)
 */
 template<class PolygonType>
 unsigned int
-vpMbHiddenFaces<PolygonType>::setVisibleOgre(const vpImage<unsigned char>& _I, const vpCameraParameters &_cam, const vpHomogeneousMatrix &_cMo, const double &angleAppears, const double &angleDisappears, bool &changed)
+vpMbHiddenFaces<PolygonType>::setVisibleOgre(const vpImage<unsigned char>& I, const vpCameraParameters &cam, const vpHomogeneousMatrix &cMo, const double &angleAppears, const double &angleDisappears, bool &changed)
 {
-  return setVisiblePrivate(_cMo,angleAppears,angleDisappears,changed,true,true,_I,_cam);
+  return setVisiblePrivate(cMo,angleAppears,angleDisappears,changed,true,true,I,cam);
 }
 
 /*!
   Compute the number of visible polygons through Ogre3D.
   
-  \param _cMo : The pose of the camera
+  \param cMo : The pose of the camera
   \param angleAppears : Angle used to test the appearance of a face
   \param angleDisappears : Angle used to test the disappearance of a face
   \param changed : True if a face appeared, disappeared or too many points have been lost. False otherwise
@@ -531,9 +534,9 @@ vpMbHiddenFaces<PolygonType>::setVisibleOgre(const vpImage<unsigned char>& _I, c
 */
 template<class PolygonType>
 unsigned int
-vpMbHiddenFaces<PolygonType>::setVisibleOgre(const vpHomogeneousMatrix &_cMo, const double &angleAppears, const double &angleDisappears, bool &changed)
+vpMbHiddenFaces<PolygonType>::setVisibleOgre(const vpHomogeneousMatrix &cMo, const double &angleAppears, const double &angleDisappears, bool &changed)
 {
-  return setVisiblePrivate(_cMo,angleAppears,angleDisappears,changed,true);
+  return setVisiblePrivate(cMo,angleAppears,angleDisappears,changed,true);
 }
 
 /*!
@@ -594,7 +597,8 @@ vpMbHiddenFaces<PolygonType>::isVisibleOgre(const vpTranslationVector &cameraPos
         it++;
         while(!visible && it != result.end()){
           distance = it->distance;
-          if(distance == distancePrev){
+          //if(distance == distancePrev){
+          if(std::fabs(distance - distancePrev) < distance * std::numeric_limits<double>::epsilon()){
             if(it->movable->getName() == Ogre::StringConverter::toString(index)){
               visible = true;
               break;
@@ -630,18 +634,18 @@ vpMbHiddenFaces<PolygonType>::isVisibleOgre(const vpTranslationVector &cameraPos
   
   Compute the number of visible polygons.
   
-  \param _cMo : The pose of the camera
+  \param cMo : The pose of the camera
   
   \return Return the number of visible polygons
 */
 template<class PolygonType>
 unsigned int
-vpMbHiddenFaces<PolygonType>::setVisible(const vpHomogeneousMatrix &_cMo)
+vpMbHiddenFaces<PolygonType>::setVisible(const vpHomogeneousMatrix &cMo)
 {
   nbVisiblePolygon = 0 ;
   
   for(unsigned int i = 0 ; i < Lpol.size() ; i++){
-    if (Lpol[i]->isVisible(_cMo, depthTest)){
+    if (Lpol[i]->isVisible(cMo, depthTest)){
       nbVisiblePolygon++;
     }
   }
diff --git a/src/tracking/mbt/vpMbTracker.cpp b/src/tracking/mbt/vpMbTracker.cpp
index 44ce1855..1752beae 100755
--- a/src/tracking/mbt/vpMbTracker.cpp
+++ b/src/tracking/mbt/vpMbTracker.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbTracker.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: vpMbTracker.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -93,10 +93,9 @@
 
 */
 vpMbTracker::vpMbTracker()
+  : cam(), cMo(), modelFileName(), modelInitialised(false),
+    poseSavingFilename(), computeCovariance(false), covarianceMatrix(), displayFeatures(false)
 {
-  modelInitialised = false;
-  computeCovariance = false;
-  displayFeatures = false;
 }
 
 /*!
@@ -251,6 +250,11 @@ vpMbTracker::initClick(const vpImage<unsigned char>& I, const std::string& initF
     unsigned int n ;
     finit >> n ;
     std::cout << "number of points  " << n << std::endl ;
+    if (n > 100000) {
+      throw vpException(vpException::badValue,
+        "Exceed the max number of points.");
+    }
+
     vpPoint *P = new vpPoint [n]  ;
     for (unsigned int i=0 ; i < n ; i++){
       finit >> X ;
@@ -305,7 +309,7 @@ vpMbTracker::initClick(const vpImage<unsigned char>& I, const std::string& initF
 
       vpDisplay::flush(I) ;
 
-      vpMouseButton::vpMouseButtonType button = vpMouseButton::button1;
+      button = vpMouseButton::button1;
       while (!vpDisplay::getClick(I, ip, button)) ;
 
 
@@ -486,6 +490,12 @@ void vpMbTracker::initFromPoints( const vpImage<unsigned char>& I, const std::st
 	double X, Y, Z;
 	finit >> size ;
   std::cout << "number of points  " << size << std::endl ;
+
+  if (size > 100000) {
+    throw vpException(vpException::badValue,
+      "Exceed the max number of points.");
+  }
+
 	vpPoint *P = new vpPoint [size]; 
 	vpPose pose ;
 	
@@ -629,11 +639,11 @@ void vpMbTracker::initFromPose(const vpImage<unsigned char>& I, const std::strin
   Initialise the tracking thanks to the pose.
   
   \param I : Input image
-  \param cMo : Pose matrix.
+  \param cMo_ : Pose matrix.
 */
-void vpMbTracker::initFromPose(const vpImage<unsigned char>& I, const vpHomogeneousMatrix &cMo)
+void vpMbTracker::initFromPose(const vpImage<unsigned char>& I, const vpHomogeneousMatrix &cMo_)
 {
-  this->cMo = cMo;
+  this->cMo = cMo_;
   init(I);
 }
 
@@ -839,7 +849,13 @@ vpMbTracker::loadCAOModel(const std::string& modelFile)
     char c;
     // Extraction of the version (remove empty line and commented ones (comment
     // line begin with the #)).
-    while( (fileId.get(c)!=NULL)&&(c == '#')) fileId.ignore(256,'\n');
+    //while ((fileId.get(c) != NULL) && (c == '#')) fileId.ignore(256, '\n');
+    fileId.get(c);
+    while (!fileId.fail() && (c == '#'))
+    {
+      fileId.ignore(256, '\n');
+      fileId.get(c);
+    }
     fileId.unget();
 
     int caoVersion;
@@ -848,22 +864,42 @@ vpMbTracker::loadCAOModel(const std::string& modelFile)
       fileId >> caoVersion;
     }
     else{
-      std::cout <<"in vpMbEdgeTracker::loadCAOModel -> Bad parameter header file : use V0, V1, ...";
+      std::cout <<"in vpMbTracker::loadCAOModel() -> Bad parameter header file : use V0, V1, ...";
       throw vpException(vpException::badValue,
-        "in vpMbEdgeTracker::loadCAOModel -> Bad parameter header file : use V0, V1, ...");
+                        "in vpMbTracker::loadCAOModel() -> Bad parameter header file : use V0, V1, ...");
     }
 
-    while( (fileId.get(c)!=NULL)&&(c!='\n')) ;
-    while( (fileId.get(c)!=NULL)&&(c == '#')) fileId.ignore(256,'\n') ;
+    //while( (fileId.get(c)!=NULL)&&(c!='\n')) ;
+    fileId.get(c);
+    while (!fileId.fail() && (c != '\n'))
+    {
+      fileId.get(c);
+    }
+
+    //while ((fileId.get(c) != NULL) && (c == '#')) fileId.ignore(256, '\n');
+    fileId.get(c);
+    while (!fileId.fail() && (c == '#'))
+    {
+      fileId.ignore(256, '\n');
+      fileId.get(c);
+    }
     fileId.unget();
 
     //Read the points
     unsigned int caoNbrPoint;
     fileId >> caoNbrPoint;
     std::cout << "> " << caoNbrPoint << " points" << std::endl;
-    vpPoint *caoPoints = NULL;
-    if (caoNbrPoint > 0)
-      caoPoints = new vpPoint[caoNbrPoint];
+    if (caoNbrPoint > 100000) {
+      throw vpException(vpException::badValue,
+                        "Exceed the max number of points in the CAO model.");
+    }
+
+    if (caoNbrPoint == 0) {
+      throw vpException(vpException::badValue,
+                        "in vpMbTracker::loadCAOModel() -> no points are defined");
+
+    }
+    vpPoint *caoPoints = new vpPoint[caoNbrPoint];
 
     double x ; // 3D coordinates
     double y ;
@@ -872,7 +908,6 @@ vpMbTracker::loadCAOModel(const std::string& modelFile)
     int i ;    // image coordinate (used for matching)
     int j ;
 
-
     for(unsigned int k=0; k < caoNbrPoint; k++){
       fileId >> x ;
       fileId >> y ;
@@ -888,8 +923,20 @@ vpMbTracker::loadCAOModel(const std::string& modelFile)
       caoPoints[k].setWorldCoordinates(x, y, z) ;
     }
 
-    while( (fileId.get(c)!=NULL)&&(c!='\n')) ;
-    while( (fileId.get(c)!=NULL)&&(c == '#')) fileId.ignore(256,'\n');
+    //while( (fileId.get(c)!=NULL)&&(c!='\n')) ;
+    fileId.get(c);
+    while (!fileId.fail() && (c != '\n'))
+    {
+      fileId.get(c);
+    }
+
+    //while ((fileId.get(c) != NULL) && (c == '#')) fileId.ignore(256, '\n');
+    fileId.get(c);
+    while (!fileId.fail() && (c == '#'))
+    {
+      fileId.ignore(256, '\n');
+      fileId.get(c);
+    }
     fileId.unget();
 
     //Read the lines
@@ -897,6 +944,13 @@ vpMbTracker::loadCAOModel(const std::string& modelFile)
     fileId >> caoNbrLine;
     unsigned int *caoLinePoints = NULL;
     std::cout << "> " << caoNbrLine << " lines" << std::endl;
+
+    if (caoNbrLine > 100000) {
+      delete [] caoPoints;
+      throw vpException(vpException::badValue,
+                        "Exceed the max number of lines in the CAO model.");
+    }
+
     if (caoNbrLine > 0)
       caoLinePoints = new unsigned int[2*caoNbrLine];
 
@@ -924,23 +978,48 @@ vpMbTracker::loadCAOModel(const std::string& modelFile)
       }
     }
 
-    while( (fileId.get(c)!=NULL)&&(c!='\n')) ;
-    while( (fileId.get(c)!=NULL)&&(c == '#')) fileId.ignore(256,'\n');
-    fileId.unget();
+    //while( (fileId.get(c)!=NULL)&&(c!='\n')) ;
+    fileId.get(c);
+    while (!fileId.fail() && (c != '\n'))
+    {
+      fileId.get(c);
+    }
 
+    //while ((fileId.get(c) != NULL) && (c == '#')) fileId.ignore(256, '\n');
+    fileId.get(c);
+    while (!fileId.fail() && (c == '#'))
+    {
+      fileId.ignore(256, '\n');
+      fileId.get(c);
+    }
+    fileId.unget();
 
-      /* Load polygon from the lines extracted earlier
+    /* Load polygon from the lines extracted earlier
           (the first point of the line is used)*/
     unsigned int caoNbrPolygonLine;
     fileId >> caoNbrPolygonLine;
     std::cout << "> " << caoNbrPolygonLine << " polygon line" << std::endl;
+    if (caoNbrPolygonLine > 100000) {
+      delete [] caoPoints;
+      delete [] caoLinePoints;
+      throw vpException(vpException::badValue, "Exceed the max number of polygon lines.");
+    }
+
     unsigned int index;
     for(unsigned int k = 0;k < caoNbrPolygonLine; k++){
       unsigned int nbLinePol;
       fileId >> nbLinePol;
       std::vector<vpPoint> corners;
-      for(unsigned int i = 0; i < nbLinePol; i++){
+      if (nbLinePol > 100000) {
+        throw vpException(vpException::badValue, "Exceed the max number of lines.");
+      }
+
+      for(unsigned int n = 0; n < nbLinePol; n++){
         fileId >> index;
+        if (2*index > 2*caoNbrLine-1) {
+          throw vpException(vpException::badValue, "Exceed the max number of lines.");
+        }
+
         corners.push_back(caoPoints[caoLinePoints[2*index]]);
       }
       if(k != caoNbrPolygonLine-1){// the rest of the line is removed (not the last one due to the need to remove possible comments).
@@ -949,20 +1028,44 @@ vpMbTracker::loadCAOModel(const std::string& modelFile)
       initFaceFromCorners(corners, k);
     }
 
-    while( (fileId.get(c)!=NULL)&&(c!='\n')) ;
-    while( (fileId.get(c)!=NULL)&&(c == '#')) fileId.ignore(256,'\n');
+    //while( (fileId.get(c)!=NULL)&&(c!='\n')) ;
+    fileId.get(c);
+    while (!fileId.fail() && (c != '\n'))
+    {
+      fileId.get(c);
+    }
+
+    //while ((fileId.get(c) != NULL) && (c == '#')) fileId.ignore(256, '\n');
+    fileId.get(c);
+    while (!fileId.fail() && (c == '#'))
+    {
+      fileId.ignore(256, '\n');
+      fileId.get(c);
+    }
     fileId.unget();
 
-      /* Extract the polygon using the point coordinates (top of the file) */
+    /* Extract the polygon using the point coordinates (top of the file) */
     unsigned int caoNbrPolygonPoint;
     fileId >> caoNbrPolygonPoint;
     std::cout << "> " << caoNbrPolygonPoint << " polygon point" << std::endl;
+
+    if (caoNbrPolygonPoint > 100000) {
+      throw vpException(vpException::badValue, "Exceed the max number of polygon point.");
+    }
+
     for(unsigned int k = 0;k < caoNbrPolygonPoint; k++){
-      int nbPointPol;
+      unsigned int nbPointPol;
       fileId >> nbPointPol;
+      if (nbPointPol > 100000) {
+        throw vpException(vpException::badValue, "Exceed the max number of points.");
+      }
+
       std::vector<vpPoint> corners;
-      for(int i = 0; i < nbPointPol; i++){
+      for(unsigned int n = 0; n < nbPointPol; n++){
         fileId >> index;
+        if (index > caoNbrPoint-1) {
+          throw vpException(vpException::badValue, "Exceed the max number of points.");
+        }
         corners.push_back(caoPoints[index]);
       }
       if(k != caoNbrPolygonPoint-1){// the rest of the line is removed (not the last one due to the need to remove possible comments).
@@ -973,9 +1076,20 @@ vpMbTracker::loadCAOModel(const std::string& modelFile)
 
     unsigned int caoNbCylinder;
     try{
-      while( (fileId.get(c)!=NULL)&&(c!='\n')) ;
-      while( (fileId.get(c)!=NULL)&&(c == '#')) fileId.ignore(256,'\n');
-      fileId.unget();
+      //while( (fileId.get(c)!=NULL)&&(c!='\n')) ;
+      fileId.get(c);
+      while (!fileId.fail() && (c != '\n'))
+      {
+        fileId.get(c);
+      }
+
+      //while ((fileId.get(c) != NULL) && (c == '#')) fileId.ignore(256, '\n');
+      fileId.get(c);
+      while (!fileId.fail() && (c == '#'))
+      {
+        fileId.ignore(256, '\n');
+        fileId.get(c);
+      }      fileId.unget();
 
       if(fileId.eof()){// check if not at the end of the file (for old style files)
         delete[] caoPoints;
@@ -988,6 +1102,10 @@ vpMbTracker::loadCAOModel(const std::string& modelFile)
 
       fileId >> caoNbCylinder;
       std::cout << "> " << caoNbCylinder << " cylinder" << std::endl;
+      if (caoNbCylinder > 100000) {
+        throw vpException(vpException::badValue, "Exceed the max number of cylinders.");
+      }
+
       for(unsigned int k=0; k<caoNbCylinder; ++k){
         double radius;
         unsigned int indexP1, indexP2;
@@ -1011,9 +1129,6 @@ vpMbTracker::loadCAOModel(const std::string& modelFile)
 
 }
 
-
-
-
 #ifdef VISP_HAVE_COIN
 /*!
   Extract a VRML object Group. 
diff --git a/src/tracking/mbt/vpMbTracker.h b/src/tracking/mbt/vpMbTracker.h
index e25d4b90..4e8e49a6 100755
--- a/src/tracking/mbt/vpMbTracker.h
+++ b/src/tracking/mbt/vpMbTracker.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMbTracker.h 4317 2013-07-17 09:40:17Z fspindle $
+ * $Id: vpMbTracker.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -60,7 +60,7 @@
 
 #ifdef VISP_HAVE_COIN
 //Work around to avoid type redefinition int8_t with Coin
-// #if defined(WIN32) && defined(VISP_HAVE_OGRE) && (_MSC_VER >= 1600) // Visual Studio 2010
+// #if defined(_WIN32) && defined(VISP_HAVE_OGRE) && (_MSC_VER >= 1600) // Visual Studio 2010
 //   #define HAVE_INT8_T 1
 // #endif
 
@@ -153,9 +153,9 @@ public:
   /*!
     Get the camera parameters.
 
-    \param cam : copy of the camera parameters used by the tracker.
+    \param camera : copy of the camera parameters used by the tracker.
   */
-  virtual void getCameraParameters(vpCameraParameters& cam) const { cam = this->cam;}
+  virtual void getCameraParameters(vpCameraParameters& camera) const { camera = this->cam;}
   
   /*!
     Get the covariance matrix.
@@ -172,9 +172,9 @@ public:
     cMo is the matrix which can be used to express 
     coordinates from the object frame to camera frame.
 
-    \param cMo : the pose
+    \param cMo_ : the pose
   */
-  inline void getPose(vpHomogeneousMatrix& cMo) const {cMo = this->cMo;}
+  inline void getPose(vpHomogeneousMatrix& cMo_) const {cMo_ = this->cMo;}
   
   /*!
     Get the current pose between the object and the camera.
@@ -228,9 +228,9 @@ public:
   /*!
     Set the camera parameters.
 
-    \param cam : the new camera parameters
+    \param camera : the new camera parameters
   */
-  virtual void setCameraParameters(const vpCameraParameters& cam) {this->cam = cam;}
+  virtual void setCameraParameters(const vpCameraParameters& camera) {this->cam = camera;}
   
   /*!
     Set if the covaraince matrix has to be computed.
@@ -305,7 +305,7 @@ protected:
     \param radius : Radius of the cylinder.
     \param indexCylinder : Index of the cylinder.
   */
-  virtual void initCylinder(const vpPoint& p1, const vpPoint p2, const double radius, const unsigned int indexCylinder=0)=0;
+  virtual void initCylinder(const vpPoint& p1, const vpPoint &p2, const double radius, const unsigned int indexCylinder=0)=0;
 
   /*!
     Add a face to track from its corners (in the object frame). This method is
diff --git a/src/tracking/mbt/vpMbXmlParser.cpp b/src/tracking/mbt/vpMbXmlParser.cpp
new file mode 100644
index 00000000..84b450b9
--- /dev/null
+++ b/src/tracking/mbt/vpMbXmlParser.cpp
@@ -0,0 +1,323 @@
+/****************************************************************************
+ *
+ * $Id: vpMbXmlParser.cpp 4577 2014-01-10 16:19:41Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ * 
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional 
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ * 
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ * 
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ *
+ * Description:
+ * Load XML Parameter for Model Based Tracker.
+ *
+ * Authors:
+ * Aurelien Yol
+ *
+ *****************************************************************************/
+#include <visp/vpConfig.h>
+
+
+#ifdef VISP_HAVE_XML2
+
+#include <iostream>
+#include <map>
+
+#include <libxml/xmlmemory.h>      /* Fonctions de la lib XML.                */
+
+#include <visp/vpMbXmlParser.h>
+
+
+/*!
+  Default constructor. 
+  
+*/
+vpMbXmlParser::vpMbXmlParser()
+  : cam(), angleAppear(70), angleDisappear(80),
+    hasNearClipping(false), nearClipping(false),
+    hasFarClipping(false), farClipping(false), fovClipping(false)
+
+{
+  init();
+}
+
+/*!
+  Default destructor.
+*/
+vpMbXmlParser::~vpMbXmlParser()
+{
+}
+
+/*!
+  Initialise internal variables (including the map).
+*/
+void 
+vpMbXmlParser::init()
+{
+  setMainTag("conf");
+
+  nodeMap["conf"] = conf;
+  nodeMap["face"] = face;
+  nodeMap["angle_appear"] = angle_appear;
+  nodeMap["angle_disappear"] = angle_disappear;
+  nodeMap["near_clipping"] = near_clipping;
+  nodeMap["far_clipping"] = far_clipping;
+  nodeMap["fov_clipping"] = fov_clipping;
+  nodeMap["camera"] = camera;
+  nodeMap["height"] = height;
+  nodeMap["width"] = width;
+  nodeMap["u0"] = u0;
+  nodeMap["v0"] = v0;
+  nodeMap["px"] = px;
+  nodeMap["py"] = py;
+}
+
+/*!
+  Parse the file in parameters.
+  This method is deprecated, use parse() instead.
+  
+  \param filename : File to parse.
+*/
+void
+vpMbXmlParser::parse(const char * filename)
+{
+  std::string file = filename;
+  vpXmlParser::parse(file);
+}
+
+/*!
+  Write info to file.
+  
+  \warning Useless, so not yet implemented => Throw exception.
+*/
+void 
+vpMbXmlParser::writeMainClass(xmlNodePtr /*node*/)
+{
+  throw vpException(vpException::notImplementedError, "Not yet implemented." );
+}
+
+/*!
+  Read the parameters of the class from the file given by its document pointer 
+  and by its root node. 
+  
+  \param doc : Document to parse.
+  \param node : Root node. 
+*/
+void
+vpMbXmlParser::readMainClass(xmlDocPtr doc, xmlNodePtr node)
+{
+  bool camera_node = false;
+  bool face_node = false;
+  
+  for(xmlNodePtr dataNode = node->xmlChildrenNode; dataNode != NULL;  dataNode = dataNode->next)  {
+    if(dataNode->type == XML_ELEMENT_NODE){
+      std::map<std::string, int>::iterator iter_data= this->nodeMap.find((char*)dataNode->name);
+      if(iter_data != nodeMap.end()){
+        switch (iter_data->second){
+        case camera:{
+          this->read_camera (doc, dataNode);
+          camera_node = true;
+          }break;
+        case face:{
+          this->read_face(doc, dataNode);
+          face_node = true;
+          }break;
+        default:{
+//          vpTRACE("unknown tag in read_sample : %d, %s", iter_data->second, (iter_data->first).c_str());
+          }break;
+        }
+      }
+    }
+  }
+  
+  if(!camera_node) {
+    std::cout << "camera : u0 : "<< this->cam.get_u0() << " (default)" <<std::endl;
+    std::cout << "camera : v0 : "<< this->cam.get_v0() << " (default)" <<std::endl;
+    std::cout << "camera : px : "<< this->cam.get_px() << " (default)" <<std::endl;
+    std::cout << "camera : py : "<< this->cam.get_py() << " (default)" <<std::endl;
+  }
+  
+  if(!face_node) {
+    std::cout << "face : Angle Appear : "<< angleAppear <<" (default)" <<std::endl;
+    std::cout << "face : Angle Disappear : "<< angleDisappear <<" (default)" <<std::endl;
+  }
+}
+
+/*!
+  Read camera information.
+  
+  \throw vpException::fatalError if there was an unexpected number of data. 
+  
+  \param doc : Pointer to the document.
+  \param node : Pointer to the node of the camera information.
+*/
+void 
+vpMbXmlParser::read_camera (xmlDocPtr doc, xmlNodePtr node)
+{
+  bool u0_node = false;
+  bool v0_node = false;
+  bool px_node = false;
+  bool py_node = false;
+  
+    // current data values.
+	double d_u0 = this->cam.get_u0();
+	double d_v0 = this->cam.get_v0();
+	double d_px = this->cam.get_px();
+	double d_py = this->cam.get_py();
+	
+  for(xmlNodePtr dataNode = node->xmlChildrenNode; dataNode != NULL;  dataNode = dataNode->next)  {
+    if(dataNode->type == XML_ELEMENT_NODE){
+      std::map<std::string, int>::iterator iter_data= this->nodeMap.find((char*)dataNode->name);
+      if(iter_data != nodeMap.end()){
+        switch (iter_data->second){
+        case u0:{
+          d_u0 = xmlReadDoubleChild(doc, dataNode);
+          u0_node = true;
+          }break;
+        case v0:{
+          d_v0 = xmlReadDoubleChild(doc, dataNode);
+          v0_node = true;
+          }break;
+        case px:{
+          d_px = xmlReadDoubleChild(doc, dataNode);
+          px_node = true;
+          }break;
+        case py:{
+          d_py = xmlReadDoubleChild(doc, dataNode);
+          py_node = true;
+          }break;
+        default:{
+//          vpTRACE("unknown tag in read_camera : %d, %s", iter_data->second, (iter_data->first).c_str());
+          }break;
+        }
+      }
+    }
+  }
+  
+  this->cam.initPersProjWithoutDistortion(d_px, d_py, d_u0, d_v0) ;
+  
+  if(!u0_node)
+    std::cout << "camera : u0 : "<< this->cam.get_u0() << " (default)" <<std::endl;
+  else
+    std::cout << "camera : u0 : "<< this->cam.get_u0() <<std::endl;
+  
+  if(!v0_node)
+    std::cout << "camera : v0 : "<< this->cam.get_v0() << " (default)" <<std::endl;
+  else
+    std::cout << "camera : v0 : "<< this->cam.get_v0() <<std::endl;
+  
+  if(!px_node)
+    std::cout << "camera : px : "<< this->cam.get_px() << " (default)" <<std::endl;
+  else
+    std::cout << "camera : px : "<< this->cam.get_px() <<std::endl;
+
+  if(!py_node)
+    std::cout << "camera : py : "<< this->cam.get_py() << " (default)" <<std::endl;
+  else
+    std::cout << "camera : py : "<< this->cam.get_py() <<std::endl;
+}
+
+/*!
+  Read face information.
+  
+  \throw vpException::fatalError if there was an unexpected number of data. 
+  
+  \param doc : Pointer to the document.
+  \param node : Pointer to the node of the camera information.
+*/
+void 
+vpMbXmlParser::read_face(xmlDocPtr doc, xmlNodePtr node)
+{
+  bool angle_appear_node = false;
+  bool angle_disappear_node = false;
+  bool near_clipping_node = false;
+  bool far_clipping_node = false;
+  bool fov_clipping_node = false;
+  
+  for(xmlNodePtr dataNode = node->xmlChildrenNode; dataNode != NULL;  dataNode = dataNode->next)  {
+    if(dataNode->type == XML_ELEMENT_NODE){
+      std::map<std::string, int>::iterator iter_data= this->nodeMap.find((char*)dataNode->name);
+      if(iter_data != nodeMap.end()){
+        switch (iter_data->second){
+        case angle_appear:{
+          angleAppear = xmlReadDoubleChild(doc, dataNode);
+          angle_appear_node = true;
+          }break;
+        case angle_disappear:{
+          angleDisappear = xmlReadDoubleChild(doc, dataNode);
+          angle_disappear_node = true;
+          }break;
+        case near_clipping:{
+          nearClipping = xmlReadDoubleChild(doc, dataNode);
+          near_clipping_node = true;
+          hasNearClipping = true;
+          }break;
+        case far_clipping:{
+          farClipping = xmlReadDoubleChild(doc, dataNode);
+          far_clipping_node = true;
+          hasFarClipping = true;
+          }break;
+        case fov_clipping:{
+          if (xmlReadIntChild(doc, dataNode))
+            fovClipping = true;
+          else
+            fovClipping = false;
+          fov_clipping_node = true;
+          }break;
+        default:{
+//          vpTRACE("unknown tag in read_camera : %d, %s", iter_data->second, (iter_data->first).c_str());
+          }break;
+        }
+      }
+    }
+  }
+  
+  if(!angle_appear_node)
+    std::cout << "face : Angle Appear : "<< angleAppear << " (default)" <<std::endl;
+  else
+    std::cout << "face : Angle Appear : "<< angleAppear <<std::endl;
+  
+  if(!angle_disappear_node)
+    std::cout << "face : Angle Disappear : "<< angleDisappear << " (default)" <<std::endl;
+  else
+    std::cout << "face : Angle Disappear : "<< angleDisappear <<std::endl;
+  
+  if(near_clipping_node)
+    std::cout << "face : Near Clipping : "<< nearClipping <<std::endl;
+  
+  if(far_clipping_node)
+    std::cout << "face : Far Clipping : "<< farClipping <<std::endl;
+  
+  if(fov_clipping_node) {
+    if(fovClipping)
+      std::cout << "face : Fov Clipping : True" <<std::endl;
+    else
+      std::cout << "face : Fov Clipping : False" <<std::endl;
+  }
+}
+
+#endif
+
diff --git a/src/tracking/mbt/vpMbXmlParser.h b/src/tracking/mbt/vpMbXmlParser.h
new file mode 100644
index 00000000..198d70b2
--- /dev/null
+++ b/src/tracking/mbt/vpMbXmlParser.h
@@ -0,0 +1,210 @@
+/****************************************************************************
+ *
+ * $Id: vpMbXmlParser.h 4574 2014-01-09 08:48:51Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ * 
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional 
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ * 
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ * 
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ *
+ * Description:
+ * Load XML Parameter for Model Based Tracker.
+ *
+ * Authors:
+ * Aurelien Yol
+ *
+ *****************************************************************************/
+
+/*!
+ * \file vpMbXmlParser.h
+ * \brief Parse an Xml file to extract configuration parameters of a mbtConfig object.
+*/
+
+#ifndef vpMbXmlParser_HH
+#define vpMbXmlParser_HH
+
+#include <visp/vpConfig.h>
+
+#ifdef VISP_HAVE_XML2
+
+#include <libxml/xmlmemory.h>      /* Fonctions de la lib XML.                */
+
+#include <visp/vpXmlParser.h>
+#include <visp/vpCameraParameters.h>
+
+/*!
+  \class vpMbXmlParser
+  \brief Parse an Xml file to extract configuration parameters of a mbtConfig object.
+  \ingroup ModelBasedTracking
+
+  Data parser for the model based tracker.
+
+ */
+class VISP_EXPORT vpMbXmlParser: public vpXmlParser
+{
+protected:
+  //! Camera parameters.
+  vpCameraParameters cam;
+  //! Angle to determine if a face appeared
+  double angleAppear;
+  //! Angle to determine if a face disappeared
+  double angleDisappear;
+  //! Is near clipping distance specified?
+  bool hasNearClipping;
+  //! Near clipping distance
+  double nearClipping;
+  //! Is far clipping distance specified?
+  bool hasFarClipping;
+  //! Near clipping distance
+  double farClipping;
+  //! Fov Clipping
+  bool fovClipping;
+    
+  typedef enum{
+    conf,
+    face,
+    angle_appear,
+    angle_disappear,
+    near_clipping,
+    far_clipping,
+    fov_clipping,
+    camera,
+    height,
+    width,
+    u0,
+    v0,
+    px,
+    py,
+    last
+  } dataToParseMb;
+
+
+public:
+
+    vpMbXmlParser();
+    virtual ~vpMbXmlParser();
+
+  /*!
+    Get the angle to determine if a face appeared.
+
+    \return angleAppear
+  */
+  inline double getAngleAppear() const {return angleAppear;}
+  
+  /*!
+    Get the angle to determine if a face disappeared.
+
+    \return angleDisappear
+  */
+  inline double getAngleDisappear() const {return angleDisappear;}
+  
+  void getCameraParameters(vpCameraParameters& _cam) const { _cam = this->cam;}
+  
+  /*!
+    Get the far clipping distance.
+
+    \return farClipping
+  */
+  inline double getFarClippingDistance() const {return farClipping;}
+  
+  /*!
+    Use FOV clipping
+
+    \return True if yes, False otherwise.
+  */
+  inline bool getFovClipping() const {return fovClipping;}
+  
+  /*!
+    Get the near clipping distance.
+
+    \return nearClipping
+  */
+  inline double getNearClippingDistance() const {return nearClipping;}
+  
+  /*!
+    Has Far clipping been specified?
+
+    \return True if yes, False otherwise.
+  */
+  inline bool hasFarClippingDistance() const {return hasFarClipping;}
+  
+  /*!
+    Has Near clipping been specified?
+
+    \return True if yes, False otherwise.
+  */
+  inline bool hasNearClippingDistance() const {return hasNearClipping;}
+  
+	void parse(const char * filename);
+
+  virtual void readMainClass(xmlDocPtr doc, xmlNodePtr node);
+  void read_camera (xmlDocPtr doc, xmlNodePtr node);
+  void read_face(xmlDocPtr doc, xmlNodePtr node);
+  
+  /*!
+    Set the angle to determine if a face appeared.
+
+    \param aappear : New angleAppear
+  */
+  inline void setAngleAppear(const double &aappear) {angleAppear = aappear;}
+  
+  /*!
+    Set the angle to determine if a face disappeared.
+
+    \param adisappear : New angleDisappear
+  */
+  inline void setAngleDisappear(const double &adisappear) {angleDisappear = adisappear;}
+  
+  void setCameraParameters(const vpCameraParameters &_cam){ cam = _cam; }
+  
+  /*!
+    Set the far clipping distance.
+
+    \param fclip : New farClipping
+  */
+  inline void setFarClippingDistance(const double &fclip) {farClipping = fclip;}
+
+  /*!
+    Set the near clipping distance.
+
+    \param nclip : New nearClipping
+  */
+  inline void setNearClippingDistance(const double &nclip) {nearClipping = nclip;}
+	
+  void writeMainClass(xmlNodePtr node);
+	
+protected:
+  void init();
+
+};
+
+#endif
+
+#endif /* NMBXMLPARSER_H_ */
+
+
+
diff --git a/src/tracking/moments/vpMoment.cpp b/src/tracking/moments/vpMoment.cpp
index e1c7a0ad..e681b382 100644
--- a/src/tracking/moments/vpMoment.cpp
+++ b/src/tracking/moments/vpMoment.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMoment.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMoment.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -52,8 +52,7 @@
 /*!
   Default constructor
 */
-vpMoment::vpMoment(): object(NULL),moments(NULL) {
-}
+vpMoment::vpMoment(): object(NULL), moments(NULL), values() {}
 
 
 /*!
@@ -99,23 +98,27 @@ int main()
 
   \endcode
 
-  \param moments : database of moment primitives.
+  \param data_base : database of moment primitives.
 */
-void vpMoment::linkTo(vpMomentDatabase& moments){
-    std::strcpy(_name,name());
-    this->moments=&moments;
+void vpMoment::linkTo(vpMomentDatabase& data_base){
+  if (strlen( name() ) >= 255) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the moment name"));
+  }
 
+  std::strcpy(_name,name());
+  this->moments=&data_base;
 
-    moments.add(*this,_name);
+  data_base.add(*this,_name);
 }
 
 
 /*!
   Updates the moment with the current object. This does not compute any values.
-  \param object : object descriptor of the current camera vision.
+  \param moment_object : object descriptor of the current camera vision.
 */
-void vpMoment::update(vpMomentObject& object){
-    this->object=&object;
+void vpMoment::update(vpMomentObject& moment_object){
+    this->object=&moment_object;
 }
 
 /*!
@@ -123,7 +126,7 @@ void vpMoment::update(vpMomentObject& object){
   \param os : a std::stream.
   \param m : a moment instance.
 */
-std::ostream & operator<<(std::ostream & os, const vpMoment& m){
+VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMoment& m){
   for(std::vector<double>::const_iterator i = m.values.begin();i!=m.values.end();i++)
     os << *i << ",";
 
diff --git a/src/tracking/moments/vpMoment.h b/src/tracking/moments/vpMoment.h
index 02ec5b9a..470c9cc5 100644
--- a/src/tracking/moments/vpMoment.h
+++ b/src/tracking/moments/vpMoment.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMoment.h 4219 2013-04-17 10:00:56Z mbakthav $
+ * $Id: vpMoment.h 4583 2014-01-14 17:06:37Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -87,19 +87,23 @@ class vpMomentObject;
   Some moments can be computed only if they are linked to a a database containing their dependencies.
   Linking to a database is done using the vpMoment::linkTo(...) method.
 
-  There are no constraints about format of the array returned by vpMoment::get: any implementation is fine.
+  There are no constraints about format of the array returned by vpMoment::get(); any implementation is fine.
 
   Each moment must have a string name by implementing the char* vpMoment::name() method which allows to identify the moment in the database.
   Each moment must also implement a compute method describing how to obtain its values from the object.
 
-  \attention Order of moment computation DOES matter: when you compute (vpMoment::compute call) a moment, all moment dependencies must be computed.
-  Moments pre-implementes dans ViSP:
+  \attention Order of moment computation DOES matter: when you compute a moment using vpMoment::compute(),
+  all moment dependencies must be computed.
+  We recall that implemented moments are:
   - vpMomentAlpha
+  - vpMomentArea
+  - vpMomentAreaNormalized
   - vpMomentBasic
   - vpMomentCentered
   - vpMomentCInvariant
-  - vpMomentSInvariant
-  - vpMomentAreaNormalized
+  - vpMomentGravityCenter
+  - vpMomentGravityCenterNormalized
+
 */
 class VISP_EXPORT vpMoment{
  private:
@@ -116,17 +120,17 @@ class VISP_EXPORT vpMoment{
 
 
  public:
-        inline vpMomentObject& getObject() const { return *object;}
+        inline const vpMomentObject& getObject() const { return *object;}
         vpMoment();
         /*!
         Returns all values computed by the moment.
         \return vector of values
         */
-        std::vector<double>& get(){ return values;}
+        const std::vector<double>& get() const { return values;}
         void linkTo(vpMomentDatabase& moments);
         void update(vpMomentObject& object);
         virtual void compute()=0;
-        virtual const char* name() = 0;
+        virtual const char* name() const = 0;
         friend VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMoment& m);
 
         /*!
diff --git a/src/tracking/moments/vpMomentAlpha.cpp b/src/tracking/moments/vpMomentAlpha.cpp
index 0a1b9ca2..e6370ffe 100644
--- a/src/tracking/moments/vpMomentAlpha.cpp
+++ b/src/tracking/moments/vpMomentAlpha.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentAlpha.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentAlpha.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -48,8 +48,8 @@
   Empty constructor. Initializes alpha moment as a reference alpha. A default-constructed alpha moment may be used as a reference for other alphas.
   A reference alpha is class harbouring an alpha value computed for a \f$[-\pi/2..\pi/2]\f$ portion of the circle. Not setting a reference alpha will prevent you
   from doing more than 180deg rotation with moments.
-*/
-vpMomentAlpha::vpMomentAlpha() : vpMoment(),isRef(true), symmetric(false){
+ */
+vpMomentAlpha::vpMomentAlpha() : isRef(true), symmetric(false), ref(), alphaRef(0.) {
     values.resize(1);
 }
 
@@ -57,102 +57,99 @@ vpMomentAlpha::vpMomentAlpha() : vpMoment(),isRef(true), symmetric(false){
   Common constructor. Initializes alpha moment as a non-reference alpha. A default-constructed alpha moment must be used as a reference for other this alpha.
   A reference alpha is class harbouring an alpha value computed for a \f$[0..\pi]\f$ portion of the circle. Not having a reference alpha will prevent you
   from doing more than 180deg rotation with moments.
-  
-  \param ref : vector of 3rd order centered moments corresponding to the reference alpha in the following order: \f$\mu_{03},\mu_{12},\mu_{21},\mu_{30}\f$.
-  \param alphaRef : value of the reference alpha.
+  \param ref_ : vector of 3rd order centered moments corresponding to the reference alpha in the following order: \f$\mu_{03},\mu_{12},\mu_{21},\mu_{30}\f$.
+  \param alpha_ref : value of the reference alpha.
 */
-vpMomentAlpha::vpMomentAlpha(std::vector<double>& ref,double alphaRef) : vpMoment(),isRef(false),symmetric(false),ref(ref),alphaRef(alphaRef){
-	for (std::vector<double>::iterator it = ref.begin(); it!=ref.end(); it++)
-		if (*it<=1e-4)
-			symmetric = true;
-
-    values.resize(1);
+vpMomentAlpha::vpMomentAlpha(std::vector<double>& ref_, double alpha_ref)
+  : vpMoment(),isRef(false),symmetric(false),ref(ref_),alphaRef(alpha_ref)
+{
+  for (std::vector<double>::iterator it = ref_.begin(); it!=ref_.end(); it++)
+    if (*it<=1e-4)
+      symmetric = true;
+
+  values.resize(1);
 }
 
 /*!
 	Compute the value of the alpha-moment.
   Depends on vpMomentCentered.
-*/
+ */
 void vpMomentAlpha::compute(){
 	//symmetric = symmetric | this->getObject().isSymmetric();
-  bool found_moment_centered;
-
-  vpMomentCentered& momentCentered = (static_cast<vpMomentCentered&> (getMoments().get("vpMomentCentered",
-                                                                                       found_moment_centered)));
-
-  if (!found_moment_centered)
-    throw vpException(vpException::notInitialized, "vpMomentCentered not found");
-
-  double alpha = 0.5 * atan2(2.0 * momentCentered.get(1, 1), (momentCentered.get(2, 0) - momentCentered.get(0, 2)));
-
-  unsigned int order = 4;
-  std::vector<double> rotMu(4);
-  std::vector<double> realMu(4);
-
-  if (isRef)
-  {
-    alphaRef = alpha;
-  }
-  else
-  {
-    if (!symmetric)
-    {
-      double r11 = cos(alpha - alphaRef);
-      double r12 = sin(alpha - alphaRef);
-      double r21 = -sin(alpha - alphaRef);
-      double r22 = cos(alpha - alphaRef);
-      unsigned int idx = 0;
-      for (register unsigned int c = 0; c < (order) * (order); c++)
-      {
-        unsigned int i = c % order;
-        unsigned int j = c / order;
-
-        if (i + j == 3)
-        {
-          double r11_k = 1.;
-          for (register unsigned int k = 0; k <= i; k++)
-          {
-            double r12_i_k = pow(r12, (int)(i - k));
-            double comb_i_k = static_cast<double> (vpMath::comb(i, k));
-            for (register unsigned int l = 0; l <= j; l++)
-            {
-              rotMu[idx] += static_cast<double> (comb_i_k * vpMath::comb(j, l) * r11_k * pow(r21, (int)l) * r12_i_k
-                  * pow(r22, (int)(j - l)) * momentCentered.get(k + l, (unsigned int)(int)(i + j - k - l)));
-            }
-            r11_k *= r11;
-          }
-          realMu[idx] = momentCentered.get(i, j);
-          idx++;
-        }
-      }
-
-      double sum = 0.;
-      bool signChange = true;
-      for (register unsigned int i = 0; i < 4; i++)
-      {
-        if (std::abs(rotMu[i]) > 1e10 * std::numeric_limits<double>::epsilon() && std::abs(ref[i]) > 1e10
-            * std::numeric_limits<double>::epsilon() && rotMu[i] * ref[i] > 0)
-          signChange = false;
-        sum += std::abs(rotMu[i] * ref[i]);
-      }
-
-      if (sum < 1e4 * std::numeric_limits<double>::epsilon())
-        signChange = false;
-      if (signChange)
-        alpha = alpha + M_PI;
-    }
-  }
-  values[0] = alpha; 
+	bool found_moment_centered;
+
+	const vpMomentCentered& momentCentered = (static_cast<const vpMomentCentered&> (getMoments().get("vpMomentCentered",
+			found_moment_centered)));
+
+	if (!found_moment_centered)
+		throw vpException(vpException::notInitialized, "vpMomentCentered not found");
+
+	double alpha = 0.5 * atan2(2.0 * momentCentered.get(1, 1), (momentCentered.get(2, 0) - momentCentered.get(0, 2)));
+
+	unsigned int order = 4;
+	std::vector<double> rotMu(4);
+	std::vector<double> realMu(4);
+
+	if (isRef)
+	{
+		alphaRef = alpha;
+	}
+	else
+	{
+		if (!symmetric)
+		{
+			double r11 = cos(alpha - alphaRef);
+			double r12 = sin(alpha - alphaRef);
+			double r21 = -sin(alpha - alphaRef);
+			double r22 = cos(alpha - alphaRef);
+			unsigned int idx = 0;
+			for (register unsigned int c = 0; c < (order) * (order); c++)
+			{
+				unsigned int i = c % order;
+				unsigned int j = c / order;
+
+				if (i + j == 3)
+				{
+					double r11_k = 1.;
+					for (register unsigned int k = 0; k <= i; k++)
+					{
+						double r12_i_k = pow(r12, (int)(i - k));
+						double comb_i_k = static_cast<double> (vpMath::comb(i, k));
+						for (register unsigned int l = 0; l <= j; l++)
+						{
+							rotMu[idx] += static_cast<double> (comb_i_k * vpMath::comb(j, l) * r11_k * pow(r21, (int)l) * r12_i_k
+									* pow(r22, (int)(j - l)) * momentCentered.get(k + l, (unsigned int)(int)(i + j - k - l)));
+						}
+						r11_k *= r11;
+					}
+					realMu[idx] = momentCentered.get(i, j);
+					idx++;
+				}
+			}
+
+			double sum = 0.;
+			bool signChange = true;
+			for (register unsigned int i = 0; i < 4; i++)
+			{
+				if (std::abs(rotMu[i]) > 1e10 * std::numeric_limits<double>::epsilon() && std::abs(ref[i]) > 1e10
+						* std::numeric_limits<double>::epsilon() && rotMu[i] * ref[i] > 0)
+					signChange = false;
+				sum += std::abs(rotMu[i] * ref[i]);
+			}
+
+			if (sum < 1e4 * std::numeric_limits<double>::epsilon())
+				signChange = false;
+			if (signChange)
+				alpha = alpha + M_PI;
+		}
+	}
+	values[0] = alpha;
 }
 
 /*!
         Prints the value of the orientation.
-*/
-std::ostream & operator<<(std::ostream & os, const vpMomentAlpha& c){
-    os << c.values[0] ;
-    return os;    
+ */
+VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentAlpha& c){
+	os << c.values[0] ;
+	return os;
 }
-
-
-
-
diff --git a/src/tracking/moments/vpMomentAlpha.h b/src/tracking/moments/vpMomentAlpha.h
index eed0d6aa..821c8e6c 100644
--- a/src/tracking/moments/vpMomentAlpha.h
+++ b/src/tracking/moments/vpMomentAlpha.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentAlpha.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentAlpha.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -210,11 +210,27 @@ class VISP_EXPORT vpMomentAlpha : public vpMoment {
         /*!
           Retrieve the orientation of the object as a single double value.
           */
-        double get(){ return values[0]; }
+        double get() const { return values[0]; }
         /*!
           Moment name.
           */
-	const char* name(){return "vpMomentAlpha";}
+        const char* name() const {return "vpMomentAlpha";}
+
+        inline bool is_ref() const
+        {
+          if (isRef)
+            return true;
+          else
+            return false;
+        }
+
+        inline bool is_symmetric() const
+        {
+          if (symmetric)
+            return true;
+          else
+            return false;
+        }
 
   friend VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentAlpha& v);
 	
diff --git a/src/tracking/moments/vpMomentArea.cpp b/src/tracking/moments/vpMomentArea.cpp
index 5e23f604..679aca15 100644
--- a/src/tracking/moments/vpMomentArea.cpp
+++ b/src/tracking/moments/vpMomentArea.cpp
@@ -3,7 +3,7 @@
  * $Id: vpMomentArea.cpp 3530 2012-01-03 10:52:12Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -55,7 +55,7 @@ void vpMomentArea::compute(){
 		/*   getMoments() returns a reference to a vpMomentDatabase. It is a protected member of and is inherited from vpMoment
 		 *  .get() is a member function of vpMomentDatabase that returns a specific moment which is linked to it
 		 */
-		vpMomentCentered& momentCentered = static_cast<vpMomentCentered&>(getMoments().get("vpMomentCentered",found_moment_centered));
+		const vpMomentCentered& momentCentered = static_cast<const vpMomentCentered&>(getMoments().get("vpMomentCentered",found_moment_centered));
 		if(!found_moment_centered) throw vpException(vpException::notInitialized,"vpMomentCentered not found");
 		values[0] = momentCentered.get(2,0) + momentCentered.get(0,2);
     }
@@ -74,7 +74,7 @@ vpMomentArea::vpMomentArea() : vpMoment(){
 /*!
   Outputs the moment's values to a stream.
 */
-std::ostream & operator<<(std::ostream & os, const vpMomentArea& m){
+VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentArea& m){
     os << "Area a:" << m.values[0];
     return os;    
 }
diff --git a/src/tracking/moments/vpMomentArea.h b/src/tracking/moments/vpMomentArea.h
index f70783fe..b14ebd3e 100644
--- a/src/tracking/moments/vpMomentArea.h
+++ b/src/tracking/moments/vpMomentArea.h
@@ -3,7 +3,7 @@
  * $Id: vpMomentArea.h 3530 2012-01-03 10:52:12Z mbakthav $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -61,7 +61,7 @@ class VISP_EXPORT vpMomentArea : public vpMoment {
         /*!
         Moment name.
         */
-        const char* name(){return "vpMomentArea";}
+        const char* name() const {return "vpMomentArea";}
         friend VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentArea& m);
 };
 
diff --git a/src/tracking/moments/vpMomentAreaNormalized.cpp b/src/tracking/moments/vpMomentAreaNormalized.cpp
index 12b81133..2c141de0 100644
--- a/src/tracking/moments/vpMomentAreaNormalized.cpp
+++ b/src/tracking/moments/vpMomentAreaNormalized.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentAreaNormalized.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentAreaNormalized.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -54,7 +54,7 @@ void vpMomentAreaNormalized::compute(){
     
     /* getMoments() returns a reference to a vpMomentDatabase. (a protected member inherited from vpMoment)
       .get() 		is a member function of vpMomentDatabase that returns a specific moment which is linked to it*/
-    vpMomentCentered& momentCentered = static_cast<vpMomentCentered&>(getMoments().get("vpMomentCentered",found_moment_centered));
+    const vpMomentCentered& momentCentered = static_cast<const vpMomentCentered&>(getMoments().get("vpMomentCentered",found_moment_centered));
 
     if(!found_moment_centered) throw vpException(vpException::notInitialized,"vpMomentCentered not found");
 
@@ -71,17 +71,19 @@ void vpMomentAreaNormalized::compute(){
 
 /*!
   Default constructor.
-  \param desiredSurface : desired area \e a* when the visual servoing converges.
-  \param desiredDepth : desired depth \e Z* when the visual servoing converges.
+  \param desired_surface : desired area \e a* when the visual servoing converges.
+  \param desired_depth : desired depth \e Z* when the visual servoing converges.
 */
-vpMomentAreaNormalized::vpMomentAreaNormalized(double desiredSurface, double desiredDepth) : vpMoment(),desiredSurface(desiredSurface),desiredDepth(desiredDepth){
+vpMomentAreaNormalized::vpMomentAreaNormalized(double desired_surface, double desired_depth)
+  : vpMoment(),desiredSurface(desired_surface),desiredDepth(desired_depth)
+{
     values.resize(1);
 }
 
 /*!
   Outputs the moment's values to a stream.
 */
-std::ostream & operator<<(std::ostream & os, const vpMomentAreaNormalized& m){
+VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentAreaNormalized& m){
     os << "An:" << m.values[0] ;
 
     return os;    
diff --git a/src/tracking/moments/vpMomentAreaNormalized.h b/src/tracking/moments/vpMomentAreaNormalized.h
index f6ac39f9..b61a5104 100644
--- a/src/tracking/moments/vpMomentAreaNormalized.h
+++ b/src/tracking/moments/vpMomentAreaNormalized.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentAreaNormalized.h 4276 2013-06-25 12:36:48Z fspindle $
+ * $Id: vpMomentAreaNormalized.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -139,16 +139,16 @@ class VISP_EXPORT vpMomentAreaNormalized : public vpMoment {
         /*!
         Retrieves the desired depth \e Z* as specified in the constructor.
         */
-        double getDesiredDepth(){ return desiredDepth; }
+        double getDesiredDepth() const { return desiredDepth; }
         /*!
         Retrieves the desired surface \e a* as specified in the constructor.
         */
-        double getDesiredSurface(){ return desiredSurface; }
+        double getDesiredSurface() const { return desiredSurface; }
 
         /*!
         Moment name.
         */
-        const char* name(){return "vpMomentAreaNormalized";}
+        const char* name() const {return "vpMomentAreaNormalized";}
         friend VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentAreaNormalized& v);
 };
 
diff --git a/src/tracking/moments/vpMomentBasic.cpp b/src/tracking/moments/vpMomentBasic.cpp
index 37db4a46..50b1d371 100644
--- a/src/tracking/moments/vpMomentBasic.cpp
+++ b/src/tracking/moments/vpMomentBasic.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentBasic.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentBasic.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -54,7 +54,7 @@ vpMomentBasic::vpMomentBasic() : vpMoment(){
 
   Same behaviour as vpMomentObject.
 */
-std::vector<double>& vpMomentBasic::get(){
+const std::vector<double>& vpMomentBasic::get() const{
     return getObject().get();
 }
 
@@ -66,7 +66,7 @@ std::vector<double>& vpMomentBasic::get(){
 
   Same behaviour as vpMomentObject.
 */
-double vpMomentBasic::get(unsigned int i,unsigned int j){
+double vpMomentBasic::get(unsigned int i,unsigned int j) const{
     return getObject().get(i,j);
 }
 
diff --git a/src/tracking/moments/vpMomentBasic.h b/src/tracking/moments/vpMomentBasic.h
index 26fd96c9..d16290d8 100644
--- a/src/tracking/moments/vpMomentBasic.h
+++ b/src/tracking/moments/vpMomentBasic.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentBasic.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentBasic.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -76,12 +76,12 @@ class VISP_EXPORT vpMomentBasic : public vpMoment {
         vpMomentBasic();	
 
         void compute();
-        std::vector<double>& get();
-        double get(unsigned int i,unsigned int j);
+        const std::vector<double>& get() const;
+        double get (unsigned int i,unsigned int j) const;
         /*!
           Moment name.
           */
-        const char* name(){ return "vpMomentBasic";}
+        const char* name() const { return "vpMomentBasic";}
 
 };
 std::ostream & operator<<(std::ostream & os, vpMomentBasic& v);
diff --git a/src/tracking/moments/vpMomentCInvariant.cpp b/src/tracking/moments/vpMomentCInvariant.cpp
index 4bda5b74..3513467c 100644
--- a/src/tracking/moments/vpMomentCInvariant.cpp
+++ b/src/tracking/moments/vpMomentCInvariant.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentCInvariant.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentCInvariant.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -45,9 +45,12 @@
 
 /*!
   Default constructor.
+  (option to use a different calculation mode for sx and sy)
 */
-vpMomentCInvariant::vpMomentCInvariant() : vpMoment(),I(16),II(4),c(4),s(4){
-    values.resize(14);
+vpMomentCInvariant::vpMomentCInvariant(bool flg_sxsynormalization)
+  : I(16),II(4),c(4),s(4), K(0.0), cn(4),sn(4), In1(0.0), flg_sxsynormalization_(flg_sxsynormalization)
+{
+  values.resize(14);
 }
 
 /*!
@@ -55,9 +58,11 @@ vpMomentCInvariant::vpMomentCInvariant() : vpMoment(),I(16),II(4),c(4),s(4){
   \param momentCentered : centered moments
   \param I : invariant output values
 */
-void vpMomentCInvariant::computeI(vpMomentCentered& momentCentered, std::vector<double>& I){
+void vpMomentCInvariant::computeI(const vpMomentCentered& momentCentered, std::vector<double>& I_val){
+
     double mu30 = momentCentered.get(3,0);
     double mu30_2 = mu30*mu30;
+    double mu30_3 = mu30_2*mu30;
 
     double mu03 = momentCentered.get(0,3);
     double mu03_2 = mu03*mu03;
@@ -80,7 +85,6 @@ void vpMomentCInvariant::computeI(vpMomentCentered& momentCentered, std::vector<
     double mu12 = momentCentered.get(1,2);
     double mu11 = momentCentered.get(1,1);
 
-
     double mu11_2 = mu11*mu11;
     double mu12_2 = mu12*mu12;
     double mu21_2 = mu21*mu21;
@@ -94,8 +98,7 @@ void vpMomentCInvariant::computeI(vpMomentCentered& momentCentered, std::vector<
     double mu12_4 = mu12_3*mu12;
     double mu21_4 = mu21_2*mu21_2;
 
-
-    double kappa = mu30_2+mu03_2-3*mu21_2+6*mu21*mu03;
+    //double kappa = mu30_2+mu03_2-3*mu21_2+6*mu21*mu03;        //Used in I8 calculation but simplified with MAPLE and found it to be wrong
     double zeta = mu20-mu02;
     double zeta_2 = zeta * zeta;
     double omicron = (mu03_2+3*mu03*mu21+mu30*(mu30+3*mu12));
@@ -113,23 +116,23 @@ void vpMomentCInvariant::computeI(vpMomentCentered& momentCentered, std::vector<
     double delta_2 = delta*delta;
     double phi_2 = phi*phi;
 
-    I[1]=-mu20*mu02+mu11_2;
-    I[2]=zeta_2+4*mu11_2;
-    I[3]=(mu30-3*mu12)*(mu30-3*mu12)+(mu03-3*mu21)*(mu03-3*mu21);
-    I[4]=(mu30+mu12)*(mu30+mu12)+(mu21+mu03)*(mu21+mu03);
-    I[5]=-mu30_2*mu03_2+(-4*mu12_3+6*mu21*mu12*mu03)*mu30-4*mu21_3*mu03+3*mu21_2*mu12_2;
-    I[6]=3*mu12_4+2*mu30*mu12_3+(3*mu30_2-6*mu03*mu21)*mu12_2-6*mu30*mu21*(mu21+mu03)*mu12+2*mu30_2*mu03_2+2*mu21_3*mu03+3*mu21_2*mu03_2+3*mu21_4;
-
-    I[7]=(3*mu21+2*mu03)*mu12_3+3*mu30*(mu03+2*mu21)*mu12_2-3*mu21*(mu30+mu03+mu21)*(-mu30+mu03+mu21)*mu12+mu30*(-mu30_2*mu03-2*mu21_3-3*mu03*mu21_2+mu03_3);
-    I[8]=3*mu21_4-3*mu21_3*mu03+(3*mu03_2+kappa-6*mu12_2)*mu21_2-mu03*(-15*mu12_2+kappa)*mu21-(-3*mu12_2*mu30+(2*kappa-3*mu03_2)*mu12+kappa*mu30)*mu12;
-    I[9]=omicron*omicron;
-
-    I[10]=mu40*mu04-4*mu31*mu13+3*mu22_2;
-    I[11]=3*mu13_2+2*mu31*mu13+(-3*mu40-3*mu04)*mu22-2*mu40*mu04+3*mu31_2;
-    I[12]=3*mu04_2+(2*mu40+12*mu22)*mu04+3*mu40_2+12*mu40*mu22+16*mu31*mu13;
-    I[13]=omega_2+nu_2;
-    I[14]=ro_2+gamma_2;
-    I[15]=delta_2+phi_2;
+    I_val[1]=-mu20*mu02+mu11_2;
+    I_val[2]=zeta_2+4*mu11_2;
+    I_val[3]=(mu30-3*mu12)*(mu30-3*mu12)+(mu03-3*mu21)*(mu03-3*mu21);
+    I_val[4]=(mu30+mu12)*(mu30+mu12)+(mu21+mu03)*(mu21+mu03);
+    I_val[5]=-mu30_2*mu03_2+(-4*mu12_3+6*mu21*mu12*mu03)*mu30-4*mu21_3*mu03+3*mu21_2*mu12_2;
+    I_val[6]=3*mu12_4+2*mu30*mu12_3+(3*mu30_2-6*mu03*mu21)*mu12_2-6*mu30*mu21*(mu21+mu03)*mu12+2*mu30_2*mu03_2+2*mu21_3*mu03+3*mu21_2*mu03_2+3*mu21_4;
+    I_val[7]=(3*mu21+2*mu03)*mu12_3+3*mu30*(mu03+2*mu21)*mu12_2-3*mu21*(mu30+mu03+mu21)*(-mu30+mu03+mu21)*mu12+mu30*(-mu30_2*mu03-2*mu21_3-3*mu03*mu21_2+mu03_3);
+    //I_val[8]=3*mu21_4-3*mu21_3*mu03+(3*mu03_2+kappa-6*mu12_2)*mu21_2-mu03*(-15*mu12_2+kappa)*mu21-(-3*mu12_2*mu30+(2*kappa-3*mu03_2)*mu12+kappa*mu30)*mu12;
+    I_val[8] = 3*mu03*mu21_3-2*mu03_2*mu21_2+mu21_2*mu30_2+3*mu12_2*mu03*mu21-mu03*mu21*mu30_2-mu03_3*mu21+3*mu12_3*mu30-2*mu12_2*mu30_2+mu12_2*mu03_2-mu12*mu30_3-mu12*mu30*mu03_2+3*mu12*mu30*mu21_2-6*mu12*mu30*mu03*mu21;
+    I_val[9]=omicron*omicron;
+
+    I_val[10]=mu40*mu04-4*mu31*mu13+3*mu22_2;
+    I_val[11]=3*mu13_2+2*mu31*mu13+(-3*mu40-3*mu04)*mu22-2*mu40*mu04+3*mu31_2;
+    I_val[12]=3*mu04_2+(2*mu40+12*mu22)*mu04+3*mu40_2+12*mu40*mu22+16*mu31*mu13;
+    I_val[13]=omega_2+nu_2;
+    I_val[14]=ro_2+gamma_2;
+    I_val[15]=delta_2+phi_2;
 
     double a;
     if(getObject().getType()==vpMomentObject::DISCRETE)
@@ -148,10 +151,31 @@ void vpMomentCInvariant::computeI(vpMomentCentered& momentCentered, std::vector<
     II[2]=c[2]*c[2]+s[2]*s[2];
     II[3]=momentCentered.get(2,0)+momentCentered.get(0,2);
 
-    K=(II[1]*(II[3]*sqrt(II[3])))/sqrt(a);
+    K=(II[1]*(II[3]*sqrt(std::abs(II[3]))))/sqrt(std::abs(a));
 
+    /*
+     * Intermediate quantities required for calculation of normalized version of Sx and Sy
+     * The pij doubles below are the respective centered moment values mu_ij scaled by mu20 + mu02
+     */
+    double p20 = momentCentered.get(2,0)/II[3];                         // II[3] is the normalization factor for the 2nd order moments
+    double p11 = momentCentered.get(1,1)/II[3];
+    double p02 = momentCentered.get(0,2)/II[3];
 
+    double d = sqrt(std::abs(a))/(II[3]*sqrt(std::abs(II[3])));         // d is the normalization factor for 3rd order moments
+    double p30 = momentCentered.get(3,0)*d;
+    double p21 = momentCentered.get(2,1)*d;
+    double p12 = momentCentered.get(1,2)*d;
+    double p03 = momentCentered.get(0,3)*d;
 
+    cn[1] = p20 - p02;
+    sn[1] = 2.0*p11;
+    sn[2] = p30 - 3.0*p12;
+    cn[2] = p03 - 3.0*p21;
+
+    cn[3] = cn[1]*cn[1]-sn[1]*sn[1];
+    sn[3] = 2.0*sn[1]*cn[1];
+
+    In1 = cn[1]*cn[1]+sn[1]*sn[1];
 }
 
 /*!
@@ -162,7 +186,7 @@ void vpMomentCInvariant::computeI(vpMomentCentered& momentCentered, std::vector<
 void vpMomentCInvariant::compute(){
     if(getObject().getOrder()<5) throw vpException(vpException::notInitialized,"Order is not high enough for vpMomentCInvariant. Specify at least order 5.");
     bool found_moment_centered;
-    vpMomentCentered& momentCentered = (static_cast<vpMomentCentered&>(getMoments().get("vpMomentCentered",found_moment_centered)));
+    const vpMomentCentered& momentCentered = (static_cast<const vpMomentCentered&>(getMoments().get("vpMomentCentered",found_moment_centered)));
 
     if(!found_moment_centered) throw vpException(vpException::notInitialized,"vpMomentCentered not found");
 
@@ -195,11 +219,30 @@ void vpMomentCInvariant::compute(){
 
     values[9] = I[14]/I[15];
 
-    values[10] = (c[2]*c[3]+s[2]*s[3])/K;
-    values[11] = (s[2]*c[3]-c[2]*s[3])/K;
+    if (flg_sxsynormalization_)
+        calcSxSyNormalized(values[10], values[11]);
+    else
+        calcSxSy(values[10], values[11]);
+
+    values[12] = II[1]/(II3_2);         // Px
+    values[13] = a*II[2]/(II3_3);       // Py
+}
 
-    values[12] = II[1]/(II3_2);
-    values[13] = a*II[2]/(II3_3);
+/*!
+   Sx and Sy as it was inside compute()
+ */
+void vpMomentCInvariant::calcSxSy(double& sx, double& sy) const{
+  sx = (c[2]*c[3]+s[2]*s[3])/K;
+  sy = (s[2]*c[3]-c[2]*s[3])/K;
+}
+
+/*!
+ * Sx and Sy from normalized 2nd and 3rd order moments
+ * Numerically better (than in the usual Sx,Sy when K appears in the denominator)
+ */
+void vpMomentCInvariant::calcSxSyNormalized(double& sx, double& sy) const{
+  sx =  (cn[2]*cn[3] + sn[2]*sn[3]) / In1;
+  sy =  (sn[2]*cn[3] - cn[2]*sn[3]) / In1;
 }
 
 /*!
@@ -213,14 +256,10 @@ void vpMomentCInvariant::printI(unsigned int index){
 /*!
   Outputs the moment's values to a stream.
 */
-std::ostream & operator<<(std::ostream & os, const vpMomentCInvariant& c){
+VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentCInvariant& c){
     for(unsigned int i = 0;i<c.values.size();i++){
       os << c.values[i] << "," << std::endl;
     }
 
     return os;
 }
-
-
-
-
diff --git a/src/tracking/moments/vpMomentCInvariant.h b/src/tracking/moments/vpMomentCInvariant.h
index 41898c5b..7aef7624 100644
--- a/src/tracking/moments/vpMomentCInvariant.h
+++ b/src/tracking/moments/vpMomentCInvariant.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentCInvariant.h 4276 2013-06-25 12:36:48Z fspindle $
+ * $Id: vpMomentCInvariant.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -56,10 +56,10 @@ class vpMomentBasic;
 
   \ingroup TrackingMoments
 
-  \brief This class defines several 2D (translation+rotation+scale) invariants for both symmetric and non-symmetric objects.
+  This class defines several 2D (translation+rotation+scale) invariants for both symmetric and non-symmetric objects.
   These moment-based invariants are described in the following papers \cite Chaumette04a, \cite Tahri05z.
 
-  The descriptions for the invariants \f$C_1\f$ to \f$C_{10}\f$ can be found in [1] and for invariants \f$P_x\f$,\f$P_y\f$,\f$S_x\f$,\f$S_y\f$ in [2].
+  The descriptions for the invariants \f$C_1\f$ to \f$C_{10}\f$ can be found in \cite Chaumette04a and for invariants \f$P_x\f$,\f$P_y\f$,\f$S_x\f$,\f$S_y\f$ in \cite Tahri05z.
 
   These invariants are classicaly used in visual servoing to control the out-of-plane rotations.
   The C-type or P-type invariants are used for non-symmetric objects whereas the S-type invariants are used for symmetric objects.
@@ -103,7 +103,7 @@ int main()
   db.updateAll(obj); // Update AND compute all moments
 
   //get C-invariant
-  vpMomentCInvariant& C = static_cast<vpMomentCInvariant&>(db.get("vpMomentCInvariant",success));
+  const vpMomentCInvariant& C = static_cast<const vpMomentCInvariant&>(db.get("vpMomentCInvariant",success));
   if(success)
       std::cout << C.get(1) << std:: endl; // print C2 invariant
   else
@@ -121,89 +121,97 @@ class VISP_EXPORT vpMomentCInvariant : public vpMoment {
    std::vector<double> II;
    std::vector<double> c;
    std::vector<double> s;
-        double K;
+   double K;
+   void computeI(const vpMomentCentered& momentCentered, std::vector<double>& I);
+
+   /* To calculate Sx and Sy from normalized moments */
+   void calcSxSy(double& sx, double& sy) const;
+   void calcSxSyNormalized(double& sx, double& sy) const;
+   std::vector<double> cn;  // same as s above but calculated from normalized moments
+   std::vector<double> sn;  // same as c above but calculated from normalized moments
+   double In1;              // same as I1 in Sx,Sy formulae but calculated from normalized moments
+   bool flg_sxsynormalization_;
 
-        void computeI(vpMomentCentered& momentCentered, std::vector<double>& I);
  public:	
 	
-        vpMomentCInvariant();
+        vpMomentCInvariant(bool flg_sxsynormalization = false);
 
         /*!
           Shorcut for getting the value of \f$C_1\f$.
           */
-        double C1(){ return values[0]; }
+        double C1() const { return values[0]; }
         /*!
           Shorcut for getting the value of \f$C_2\f$.
           */
-        double C2(){ return values[1]; }
+        double C2() const { return values[1]; }
         /*!
           Shorcut for getting the value of \f$C_3\f$.
           */
-        double C3(){ return values[2]; }
+        double C3() const { return values[2]; }
         /*!
           Shorcut for getting the value of \f$C_4\f$.
           */
-        double C4(){ return values[3]; }
+        double C4() const { return values[3]; }
         /*!
           Shorcut for getting the value of \f$C_5\f$.
           */
-        double C5(){ return values[4]; }
+        double C5() const { return values[4]; }
         /*!
           Shorcut for getting the value of \f$C_6\f$.
           */
-        double C6(){ return values[5]; }
+        double C6() const { return values[5]; }
         /*!
           Shorcut for getting the value of \f$C_7\f$.
           */
-        double C7(){ return values[6]; }
+        double C7() const { return values[6]; }
         /*!
           Shorcut for getting the value of \f$C_8\f$.
           */
-        double C8(){ return values[7]; }
+        double C8() const { return values[7]; }
         /*!
           Shorcut for getting the value of \f$C_9\f$.
           */
-        double C9(){ return values[8]; }
+        double C9() const { return values[8]; }
         /*!
           Shorcut for getting the value of \f$C_{10}\f$.
           */
-        double C10(){ return values[9]; }
+        double C10() const { return values[9]; }
 
-	void compute();
+        void compute();
 
         /*!
           Gets the desired invariant.
           \param i given index. For invariants from C1 to C10 the corresponding index is from 0 to 9. For \f$S_x\f$,\f$S_y\f$ the indexes are 10,11 and for \f$P_x\f$,\f$P_y\f$ they are 12,13.
           */
-        double get(unsigned int i){ return values[i]; }
+        double get(unsigned int i) const { return values[i]; }
 
         /*!
           Access to partial invariant c (see [2]).
           */
-        double getC(unsigned int i){return c[i];}
+        double getC(unsigned int i) const {return c[i];}
         /*!
           Access to partial invariants. The index convention is the same as in [1].
           */
-        double getI(unsigned int index){return I[index];}
+        double getI(unsigned int index) const {return I[index];}
 
         /*!
           Access to partial invariant I (see [2]).
           */
-        double getII(unsigned int i){return II[i];}
+        double getII(unsigned int i) const {return II[i];}
         /*!
           Access to partial invariant K (see [2]).
           */
-        double getK(){return K;}
+        double getK() const {return K;}
 
         /*!
           Access to partial invariant S (see [2]).
           */
-        double getS(unsigned int i){return s[i];}
+        double getS(unsigned int i) const {return s[i];}
 
         /*!
           Moment name.
           */
-        const char* name(){return "vpMomentCInvariant";}
+        const char* name() const {return "vpMomentCInvariant";}
 
         /*!
           Print partial invariant.
@@ -222,13 +230,40 @@ class VISP_EXPORT vpMomentCInvariant : public vpMoment {
         /*!
           Shorcut for getting the value of \f$S_x\f$.
           */
-        double Sx(){ return values[10]; }
+        double Sx() const { return values[10]; }
         /*!
           Shorcut for getting the value of \f$S_y\f$.
           */
-        double Sy(){ return values[11]; }
+        double Sy() const { return values[11]; }
+
+        /*!
+         * Getters for I
+         * (calculated from normalized 2nd and 3ord order moments)
+         */
+        double getIn1() const {return In1;}
+
+        /*!
+         * Getter for c
+         * (calculated from normalized 2nd and 3ord order moments)
+         */
+        double getCN(unsigned int i) const {return cn[i];}
+
+        /*!
+         * Getter for s
+         * (calculated from normalized 2nd and 3ord order moments)
+         */
+        double getSN(unsigned int i) const {return sn[i];}
+
+        /*!
+         * To know if Sx and Sy were calculated from normalized moments or not
+         */
+        bool isSxSyfromNormalizedMoments() const {return flg_sxsynormalization_;};
+
+        /*!
+         *  To get all the invariant values as a whole.
+         */
+        inline const std::vector<double>& getMomentVector() const { return values; }
 
         friend VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentCInvariant& v);
 };
-
 #endif
diff --git a/src/tracking/moments/vpMomentCentered.cpp b/src/tracking/moments/vpMomentCentered.cpp
index 6ba7b52d..94c8fd09 100644
--- a/src/tracking/moments/vpMomentCentered.cpp
+++ b/src/tracking/moments/vpMomentCentered.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentCentered.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentCentered.cpp 4620 2014-01-27 21:28:32Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -45,6 +45,19 @@
 #include <exception>
 #include <cassert>
 
+/*!
+  To set the values of centred moments. Required when normalizing the moment values.
+  @param i : first index of the 2D moment.
+  @param j : second index of the 2D moment.
+  @param value : value of the moment.
+*/
+void vpMomentCentered::set(unsigned int i, unsigned int j, double value){
+    vpMomentObject mobj = getObject();
+    assert(i+j<=mobj.getOrder());
+    if(i+j>mobj.getOrder()) throw vpException(vpException::badValue,"You cannot set that value.");
+    values[j*(mobj.getOrder()+1)+i] = value;
+}
+
 /*!
   Computes centered moments of all available orders. 
   Depends on vpMomentGravityCenter.
@@ -53,8 +66,9 @@ void vpMomentCentered::compute(){
     bool found_moment_gravity;    
     values.resize((getObject().getOrder()+1)*(getObject().getOrder()+1));
 
-    vpMomentGravityCenter& momentGravity = static_cast<vpMomentGravityCenter&>(getMoments().get("vpMomentGravityCenter",found_moment_gravity));
+    const vpMomentGravityCenter& momentGravity = static_cast<const vpMomentGravityCenter&>(getMoments().get("vpMomentGravityCenter",found_moment_gravity));
     if(!found_moment_gravity) throw vpException(vpException::notInitialized,"vpMomentGravityCenter not found");
+
     unsigned int order = getObject().getOrder()+1;
     for(register unsigned int j=0;j<(order);j++){
         for(register unsigned int i=0;i<order-j;i++){
@@ -87,11 +101,12 @@ vpMomentCentered::vpMomentCentered() : vpMoment(){
   \param j : second index of the centered moment.
   \return \f$\mu_{ij}\f$ moment.
 */
-double vpMomentCentered::get(unsigned int i,unsigned int j){
-    assert(i+j<=getObject().getOrder());
-    if(i+j>getObject().getOrder()) throw vpException(vpException::badValue,"The requested value has not been computed, you should specify a higher order.");
+double vpMomentCentered::get(unsigned int i,unsigned int j) const {
+    unsigned int order = getObject().getOrder();
+    assert(i+j<=order);
+    if(i+j>order) throw vpException(vpException::badValue,"The requested value has not been computed, you should specify a higher order.");
 
-    return values[j*(getObject().getOrder()+1)+i];
+    return values[j*(order+1)+i];
 }
 
 /*!
@@ -109,7 +124,7 @@ u30 x    x  x
   \endcode
 
 */
-std::ostream & operator<<(std::ostream & os, vpMomentCentered& m){
+VISP_EXPORT std::ostream & operator<<(std::ostream & os, vpMomentCentered& m){
     for(unsigned int i = 0;i<m.values.size();i++){
         if(i%(m.getObject().getOrder()+1)==0)
           os << std::endl;
diff --git a/src/tracking/moments/vpMomentCentered.h b/src/tracking/moments/vpMomentCentered.h
index bed1e1af..c0815848 100644
--- a/src/tracking/moments/vpMomentCentered.h
+++ b/src/tracking/moments/vpMomentCentered.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentCentered.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentCentered.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -81,16 +81,21 @@ public:
 
   vpMomentCentered();
 
-	void compute();
-  double get(unsigned int i,unsigned int j);
+  void compute();
+  double get(unsigned int i,unsigned int j) const;
 
-  inline std::vector<double>& get();
+  inline const std::vector<double>& get() const;
   /*!
      Moment name.
   */
-  inline const char* name(){return "vpMomentCentered";}
+  inline const char* name() const {return "vpMomentCentered";}
 
   friend VISP_EXPORT std::ostream & operator<<(std::ostream & os, vpMomentCentered& v);
+
+protected:
+
+  void set(unsigned int i, unsigned int j, double value);
+
 };
 
 /*!
@@ -120,7 +125,7 @@ mu12 = mc.get()[2*(obj.getOrder()+1)+1]; // i=1 and j=2
 mu12 = mc.get(1,2); // the same
   \endcode
 */
-inline std::vector<double>& vpMomentCentered::get()
+inline const std::vector<double>& vpMomentCentered::get() const
 {
   return vpMoment::get();
 }
diff --git a/src/tracking/moments/vpMomentCommon.cpp b/src/tracking/moments/vpMomentCommon.cpp
index 11f507a5..9c67fcdf 100644
--- a/src/tracking/moments/vpMomentCommon.cpp
+++ b/src/tracking/moments/vpMomentCommon.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentCommon.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentCommon.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -44,13 +44,14 @@
 
 /*!
   Default constructor. Initializes the common database with the following moments: 
-  basic, gravity,centered,centered+normalized,normalized gravity,normalized surface, scale-plane-rotation-translation invariant,alpha, symmetric invariant.
-  \param dstSurface : destination surface. You may use vpMomentCommon::getSurface.
-  \param ref : reference 3rd order moments (see vpMomentAlpha). You may use  vpMomentCommon::getMu3.
-  \param refAlpha : reference alpha (see vpMomentAlpha). You may use vpMomentCommon::getAlpha.
+  basic, gravity,centered,centered+normalized,normalized gravity,normalized surface, scale-plane-rotation-translation invariant, alpha, symmetric invariant.
+  \param dstSurface : destination surface. You may use vpMomentCommon::getSurface().
+  \param ref : reference 3rd order moments (see vpMomentAlpha). You may use  vpMomentCommon::getMu3().
+  \param refAlpha : reference alpha (see vpMomentAlpha). You may use vpMomentCommon::getAlpha().
   \param dstZ : destination depth.
+  \param flg_sxsyfromnormalized : flag to enable calculation of sx,sy from normalized moments.
 */
-vpMomentCommon::vpMomentCommon(double dstSurface,std::vector<double> ref,double refAlpha,double dstZ):
+vpMomentCommon::vpMomentCommon(double dstSurface,std::vector<double> ref,double refAlpha,double dstZ, bool flg_sxsyfromnormalized):
     momentBasic(),
     momentGravity(),
     momentCentered(),
@@ -60,12 +61,14 @@ vpMomentCommon::vpMomentCommon(double dstSurface,std::vector<double> ref,double
     momentAlpha(ref,refAlpha),
 	momentArea()
 {
+    momentCInvariant = new vpMomentCInvariant(flg_sxsyfromnormalized);
+
     momentBasic.linkTo(*this);
     momentGravity.linkTo(*this);
     momentCentered.linkTo(*this);
     momentGravityNormalized.linkTo(*this);
     momentSurfaceNormalized.linkTo(*this);
-    momentCInvariant.linkTo(*this);
+    momentCInvariant->linkTo(*this);
     momentAlpha.linkTo(*this);
     momentArea.linkTo(*this);
 }
@@ -130,7 +133,7 @@ void vpMomentCommon::updateAll(vpMomentObject& object){
         momentGravity.compute();
         momentCentered.compute();
         momentAlpha.compute();
-        momentCInvariant.compute();        
+        momentCInvariant->compute();
 
         momentSurfaceNormalized.compute();
         momentGravityNormalized.compute();
@@ -140,14 +143,13 @@ void vpMomentCommon::updateAll(vpMomentObject& object){
         std::cout << "exception:" << ex <<std::endl;
 
     }
-
 }
 
 /*!
 Gets the surface of an object
 \param object : moment object
 */
-double vpMomentCommon::getSurface(vpMomentObject& object){
+double vpMomentCommon::getSurface(vpMomentObject& object) {
     vpMomentDatabase moments;
 
     vpMomentGravityCenter momentGravity;momentGravity.linkTo(moments);
@@ -165,14 +167,13 @@ double vpMomentCommon::getSurface(vpMomentObject& object){
         a = object.get(0,0);
 
     return a;
-
 }
 
 /*!
 Gets a reference alpha of an object.
 \param object : Moment object.
 */
-double vpMomentCommon::getAlpha(vpMomentObject& object){
+double vpMomentCommon::getAlpha(vpMomentObject& object) {
     vpMomentDatabase moments;
 
     vpMomentGravityCenter momentGravity;momentGravity.linkTo(moments);
@@ -191,7 +192,7 @@ double vpMomentCommon::getAlpha(vpMomentObject& object){
 Gets the reference 3rd order moments of an object.
 \param object : Moment object.
 */
-std::vector<double> vpMomentCommon::getMu3(vpMomentObject& object){
+std::vector<double> vpMomentCommon::getMu3(vpMomentObject& object) {
     vpMomentDatabase moments;
 
     vpMomentGravityCenter momentGravity;momentGravity.linkTo(moments);
@@ -204,13 +205,18 @@ std::vector<double> vpMomentCommon::getMu3(vpMomentObject& object){
 
     std::vector<double> mu(4);
     unsigned int idx=0;
-    for (unsigned int i=0; i<4; i++) {
-      for (unsigned int j=0; j<4; j++) {
+    for (unsigned int j=0; j<4; j++) {
+      for (unsigned int i=0; i<4; i++) {
         if (i+j==3){
-          mu[idx] = momentCentered.get(j,i);
+          mu[idx] = momentCentered.get(i,j);
           idx++;
         }
       }
     }
     return mu;
 }
+
+vpMomentCommon::~vpMomentCommon(){
+   if (momentCInvariant)
+     delete momentCInvariant;
+}
diff --git a/src/tracking/moments/vpMomentCommon.h b/src/tracking/moments/vpMomentCommon.h
index 5cce98c0..beb17c3b 100644
--- a/src/tracking/moments/vpMomentCommon.h
+++ b/src/tracking/moments/vpMomentCommon.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentCommon.h 4276 2013-06-25 12:36:48Z fspindle $
+ * $Id: vpMomentCommon.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -70,14 +70,15 @@ class vpMomentObject;
     - vpMomentBasic
     - vpMomentGravityCenter
     - vpMomentCentered
-    - vpMomentCenteredNormalized
+    - vpMomentGravityCenterNormalized
     - vpMomentAreaNormalized
     - vpMomentCInvariant
     - vpMomentAlpha
+    - vpMomentArea
 
     There is no need to do the linkTo operations manually nor is it necessary to care about the order of moment computation.
 
-    This class carries an vpMomentCommon::updateAll method capable of updating AND computing moments from an object (see 4-step process in vpMoment).
+    This class carries an vpMomentCommon::updateAll() method capable of updating AND computing moments from an object (see 4-step process in vpMoment).
     The moments computed by this class are classical moments used in moment-based visual servoing.
     For more information see \cite Tahri05z.
 
@@ -88,7 +89,8 @@ class vpMomentObject;
     - the surface of the destination object in the end of the visual servoing process.
     - the reference alpha: angular position of the object used to obtain the Mu3 set.
 
-    Shortcuts for each of these prerequisites are provided by this class except depth (methods vpMomentCommon::getMu3, vpMomentCommon::getSurface,vpMomentCommon::getAlpha).
+    Shortcuts for each of these prerequisites are provided by this class except depth (methods
+    vpMomentCommon::getMu3(), vpMomentCommon::getSurface(), vpMomentCommon::getAlpha()).
 
     \attention Make sure your object is at least of order 5 when using this pre-filled database.
 
@@ -100,18 +102,17 @@ private:
     vpMomentCentered momentCentered;
     vpMomentGravityCenterNormalized momentGravityNormalized;
     vpMomentAreaNormalized momentSurfaceNormalized;
-    vpMomentCInvariant momentCInvariant;
+    vpMomentCInvariant* momentCInvariant;
     vpMomentAlpha momentAlpha;
     vpMomentArea momentArea;
 public:
-    vpMomentCommon(double dstSurface,std::vector<double> ref,double refAlpha,double dstZ=1.0);
+    vpMomentCommon(double dstSurface,std::vector<double> ref,double refAlpha,double dstZ=1.0, bool flg_sxsyfromnormalized=false);
 
-    static double getAlpha(vpMomentObject& objec);
+    static double getAlpha(vpMomentObject& object);
     static std::vector<double> getMu3(vpMomentObject& object);
     static double getSurface(vpMomentObject& object);
 
     void updateAll(vpMomentObject& object);
+    ~vpMomentCommon();
 };
-
-
 #endif // VPCOMMONMOMENTS_H
diff --git a/src/tracking/moments/vpMomentDatabase.cpp b/src/tracking/moments/vpMomentDatabase.cpp
index ee96c18e..f0c6f157 100644
--- a/src/tracking/moments/vpMomentDatabase.cpp
+++ b/src/tracking/moments/vpMomentDatabase.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentDatabase.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentDatabase.cpp 4620 2014-01-27 21:28:32Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -62,7 +62,7 @@ void vpMomentDatabase::add(vpMoment& moment,const char* name){
   \param found : true if the moment's type exists in the database, false otherwise.
   \return Moment corresponding to \e type.
 */
-vpMoment& vpMomentDatabase::get(const char* type, bool& found){
+const vpMoment& vpMomentDatabase::get(const char* type, bool& found) const {
   std::map<const char*,vpMoment*,vpMomentDatabase::cmp_str>::const_iterator it = moments.find(type);
     
     found = (it!=moments.end());
@@ -86,7 +86,7 @@ void vpMomentDatabase::updateAll(vpMomentObject& object){
 /*!
 	Outputs all the moments values in the database to a stream.
 */
-std::ostream & operator<<(std::ostream & os, const vpMomentDatabase& m){
+VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentDatabase& m){
   std::map<const char*,vpMoment*,vpMomentDatabase::cmp_str>::const_iterator itr;
     os << "{";
     
diff --git a/src/tracking/moments/vpMomentDatabase.h b/src/tracking/moments/vpMomentDatabase.h
index efbd2938..733574c7 100644
--- a/src/tracking/moments/vpMomentDatabase.h
+++ b/src/tracking/moments/vpMomentDatabase.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentDatabase.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentDatabase.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -136,9 +136,10 @@ class VISP_EXPORT vpMomentDatabase{
         std::map<const char*,vpMoment*,cmp_str> moments;
         void add(vpMoment& moment, const char* name);
  public:
+        vpMomentDatabase() : moments() {}
         virtual ~vpMomentDatabase() {}
 
-        vpMoment& get(const char* type, bool& found);
+        const vpMoment& get(const char* type, bool& found) const;
         /*!
           Get the first element in the database.
           May be useful in case an unnamed object is present but is the only element in the database.
diff --git a/src/tracking/moments/vpMomentGravityCenter.cpp b/src/tracking/moments/vpMomentGravityCenter.cpp
index d782bbae..5e0d00f3 100644
--- a/src/tracking/moments/vpMomentGravityCenter.cpp
+++ b/src/tracking/moments/vpMomentGravityCenter.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentGravityCenter.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentGravityCenter.cpp 4620 2014-01-27 21:28:32Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -60,14 +60,14 @@ vpMomentGravityCenter::vpMomentGravityCenter() : vpMoment(){
   Returns a vector of the two gravity center coordinates.
   \return Coordinates in the following moment: \f$(x_g,y_g)\f$.
 */
-std::vector<double>& vpMomentGravityCenter::get(){
+const std::vector<double>& vpMomentGravityCenter::get() const{
     return values;
 }
 
 /*!
   Outputs the moment's values to a stream.
 */
-std::ostream & operator<<(std::ostream & os, const vpMomentGravityCenter& m){
+VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentGravityCenter& m){
     os << "Xg=" << m.values[0] << ", Yg=" << m.values[1];
     
     return os;    
diff --git a/src/tracking/moments/vpMomentGravityCenter.h b/src/tracking/moments/vpMomentGravityCenter.h
index cf65cb72..3e391f7e 100644
--- a/src/tracking/moments/vpMomentGravityCenter.h
+++ b/src/tracking/moments/vpMomentGravityCenter.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentGravityCenter.h 4220 2013-04-17 10:03:36Z mbakthav $
+ * $Id: vpMomentGravityCenter.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -115,7 +115,7 @@ class VISP_EXPORT vpMomentGravityCenter : public vpMoment {
 
         vpMomentGravityCenter();        
 	void compute();
-        std::vector<double>& get();
+        const std::vector<double>& get() const;
         /*!
           Shortcut function to retrieve \f$x_g\f$.
           \return The first gravity center coordinate.
@@ -129,7 +129,7 @@ class VISP_EXPORT vpMomentGravityCenter : public vpMoment {
         /*!
           The class's string name.
           */
-	const char* name(){return "vpMomentGravityCenter";}
+  const char* name() const {return "vpMomentGravityCenter";}
   friend VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentGravityCenter& v);
 };
 
diff --git a/src/tracking/moments/vpMomentGravityCenterNormalized.cpp b/src/tracking/moments/vpMomentGravityCenterNormalized.cpp
index d668b126..c18ff89e 100644
--- a/src/tracking/moments/vpMomentGravityCenterNormalized.cpp
+++ b/src/tracking/moments/vpMomentGravityCenterNormalized.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentGravityCenterNormalized.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentGravityCenterNormalized.cpp 4620 2014-01-27 21:28:32Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -52,8 +52,8 @@ void vpMomentGravityCenterNormalized::compute(){
     bool found_moment_gravity;    
     bool found_moment_surface_normalized;    
     
-    vpMomentAreaNormalized& momentSurfaceNormalized = static_cast<vpMomentAreaNormalized&>(getMoments().get("vpMomentAreaNormalized",found_moment_surface_normalized));
-    vpMomentGravityCenter& momentGravity = static_cast<vpMomentGravityCenter&>(getMoments().get("vpMomentGravityCenter",found_moment_gravity));
+    const vpMomentAreaNormalized& momentSurfaceNormalized = static_cast<const vpMomentAreaNormalized&>(getMoments().get("vpMomentAreaNormalized",found_moment_surface_normalized));
+    const vpMomentGravityCenter& momentGravity = static_cast<const vpMomentGravityCenter&>(getMoments().get("vpMomentGravityCenter",found_moment_gravity));
 
     if(!found_moment_surface_normalized) throw vpException(vpException::notInitialized,"vpMomentAreaNormalized not found");
     if(!found_moment_gravity) throw vpException(vpException::notInitialized,"vpMomentGravityCenter not found");
@@ -74,7 +74,7 @@ vpMomentGravityCenterNormalized::vpMomentGravityCenterNormalized() : vpMomentGra
 /*!
   Outputs the moment's values to a stream.
 */
-std::ostream & operator<<(std::ostream & os, const vpMomentGravityCenterNormalized& m){
+VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentGravityCenterNormalized& m){
     os << "Xn:" << m.values[0] << ",Yn=" << m.values[1];
     
     return os;    
diff --git a/src/tracking/moments/vpMomentGravityCenterNormalized.h b/src/tracking/moments/vpMomentGravityCenterNormalized.h
index 96488c21..64b89239 100644
--- a/src/tracking/moments/vpMomentGravityCenterNormalized.h
+++ b/src/tracking/moments/vpMomentGravityCenterNormalized.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentGravityCenterNormalized.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentGravityCenterNormalized.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -68,7 +68,7 @@ class VISP_EXPORT vpMomentGravityCenterNormalized : public vpMomentGravityCenter
         /*!
           Moment name.
           */
-        const char* name(){return "vpMomentGravityCenterNormalized";}
+        const char* name() const {return "vpMomentGravityCenterNormalized";}
         friend VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentGravityCenterNormalized& v);
 };
 
diff --git a/src/tracking/moments/vpMomentObject.cpp b/src/tracking/moments/vpMomentObject.cpp
index 7b3d20f4..c92a6ebd 100644
--- a/src/tracking/moments/vpMomentObject.cpp
+++ b/src/tracking/moments/vpMomentObject.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentObject.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentObject.cpp 4653 2014-02-07 15:38:09Z mbakthav $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -44,8 +44,11 @@
 #include <visp/vpCameraParameters.h>
 #include <visp/vpPixelMeterConversion.h>
 #include <visp/vpConfig.h>
+#include <stdexcept>
+
 #include <cmath>
 #include <limits>
+
 #ifdef VISP_HAVE_OPENMP
 #include <omp.h>
 #endif
@@ -134,6 +137,32 @@ void vpMomentObject::cacheValues(std::vector<double>& cache,double x, double y){
     }
 }
 
+/*!
+ * Manikandan.B
+ * Need to cache intensity along with the coordinates for photometric moments
+ */
+void vpMomentObject::cacheValues(std::vector<double>& cache,double x, double y, double IntensityNormalized) {
+
+	cache[0]=IntensityNormalized;
+
+	double invIntensityNormalized = 0.;
+	if (std::fabs(IntensityNormalized)>=std::numeric_limits<double>::epsilon())
+		 invIntensityNormalized = 1.0/IntensityNormalized;
+
+    for(register unsigned int i=1;i<order;i++)
+        cache[i]=cache[i-1]*x;
+
+    for(register unsigned int j=order;j<order*order;j+=order)
+        cache[j]=cache[j-order]*y;
+
+    for(register unsigned int j=1;j<order;j++){
+        for(register unsigned int i=1;i<order-j;i++){
+            cache[j*order+i] = cache[j*order]*cache[i]*invIntensityNormalized;
+        }
+    }
+}
+
+
 /*!
   Computes basic moments from a vector of points.
   There are two cases:
@@ -262,10 +291,10 @@ int main()
 */
 
 void vpMomentObject::fromImage(const vpImage<unsigned char>& image, unsigned char threshold, const vpCameraParameters& cam){
-#ifdef VISP_HAVE_OPENMP    
+#ifdef VISP_HAVE_OPENMP
   #pragma omp parallel shared(threshold)
-  {        
-    std::vector<double> curvals(order*order); 
+  {
+    std::vector<double> curvals(order*order);
     curvals.assign(order*order,0.);
     unsigned int i_, j_;
 
@@ -281,36 +310,35 @@ void vpMomentObject::fromImage(const vpImage<unsigned char>& image, unsigned cha
 
           double xval=1.;
           double yval=1.;
-          for(register unsigned int k=0;k<order;k++){            
+          for(register unsigned int k=0;k<order;k++){
             xval=1.;
             for(register unsigned int l=0;l<order-k;l++){
               curvals[(k*order+l)]+=(xval*yval);
               xval*=x;
             }
             yval*=y;
-          }          
+          }
         }
       }
-    }    
-    
+    }
+
     #pragma omp master //only set this variable in master thread
-    {      
-      values.assign(order*order, 0.);      
+    {
+      values.assign(order*order, 0.);
     }
 
     #pragma omp barrier
-    
-    for(register unsigned int k=0;k<order;k++){    
+
+    for(register unsigned int k=0;k<order;k++){
       for(register unsigned int l=0;l<order-k;l++){
         #pragma omp atomic
         values[k*order+l]+= curvals[k*order+l];
       }
     }
-    
-  }    
-  
+
+  }
 #else
-  std::vector<double> cache(order*order,0.);
+    std::vector<double> cache(order*order,0.);
     values.assign(order*order,0);
     for(register unsigned int i=0;i<image.getCols();i++){
         for(register unsigned int j=0;j<image.getRows();j++){
@@ -328,9 +356,128 @@ void vpMomentObject::fromImage(const vpImage<unsigned char>& image, unsigned cha
         }
     }
 #endif
+
+    //Normalisation equivalent to sampling interval/pixel size delX x delY
+    double norm_factor = 1./(cam.get_px()*cam.get_py());
+    for (std::vector<double>::iterator it = values.begin(); it!=values.end(); it++) {
+        *it = (*it) * norm_factor;
+    }
+}
+
+/*!
+ * Manikandan. B
+ * Photometric moments v2
+ * Intended to be used by 'vpMomentObject's of type DENSE_FULL_OBJECT
+ * @param image                   : Grayscale image
+ * @param cam                     : Camera parameters (to change to )
+ * @param bg_type                 : White/Black background surrounding the image
+ * @param normalize_with_pix_size : This flag if SET, the moments, after calculation are normalized w.r.t  pixel size
+ *                                  available from camera parameters
+ */
+void vpMomentObject::fromImage(const vpImage<unsigned char>& image, const vpCameraParameters& cam,
+    vpCameraImgBckGrndType bg_type, bool normalize_with_pix_size)
+{
+  std::vector<double> cache(order*order,0.);
+  values.assign(order*order,0);
+
+  // (x,y) - Pixel co-ordinates in metres
+  double x=0;
+  double y=0;
+  //for indexing into cache[] and values[]
+  unsigned int idx = 0;
+  unsigned int kidx = 0;
+
+  double intensity = 0;
+  double intensity_white = 0;
+
+  //double Imax = static_cast<double>(image.getMaxValue());
+  double Imax = 255.;                                                     // To check the effect of gray level change. ISR Coimbra
+
+  double iscale = 1.0;
+  if (flg_normalize_intensity)                                            // This makes the image a probability density function
+    iscale = 1.0/Imax;
+
+  if (bg_type == vpMomentObject::WHITE) {
+      /////////// WHITE BACKGROUND ///////////
+      for(register unsigned int j=0;j<image.getRows();j++){
+          for(register unsigned int i=0;i<image.getCols();i++){
+              x = 0;
+              y = 0;
+              intensity = (double)(image[j][i])*iscale;
+              intensity_white = 1. - intensity;
+
+              vpPixelMeterConversion::convertPoint(cam,i,j,x,y);
+              cacheValues(cache,x,y, intensity_white);			// Modify 'cache' which has x^p*y^q to x^p*y^q*(1 - I(x,y))
+
+              // Copy to "values"
+              for(register unsigned int k=0;k<order;k++){
+                  kidx = k*order;
+                  for(register unsigned int l=0;l<order-k;l++){
+                      idx = kidx+l;
+                      values[idx]+= cache[idx];
+                  }
+              }
+          }
+      }
+  }
+  else {
+      /////////// BLACK BACKGROUND	///////////
+      for(register unsigned int j=0;j<image.getRows();j++){
+          for(register unsigned int i=0;i<image.getCols();i++){
+              x = 0;
+              y = 0;
+              intensity = (double)(image[j][i])*iscale;
+              vpPixelMeterConversion::convertPoint(cam,i,j,x,y);
+
+              // Cache values for fast moment calculation
+              cacheValues(cache,x,y, intensity);					// Modify 'cache' which has x^p*y^q to x^p*y^q*I(x,y)
+
+              // Copy to moments array 'values'
+              for(register unsigned int k=0;k<order;k++){
+                  kidx = k*order;
+                  for(register unsigned int l=0;l<order-k;l++){
+                      idx = kidx+l;
+                      values[idx]+= cache[idx];
+                  }
+              }
+
+          }
+      }
+  }
+
+  if (normalize_with_pix_size){
+      // Normalisation equivalent to sampling interval/pixel size delX x delY
+      double norm_factor = 1./(cam.get_px()*cam.get_py());
+      for (std::vector<double>::iterator it = values.begin(); it!=values.end(); it++) {
+          *it = (*it) * norm_factor;
+      }
+  }
 }
 
+/*!
+  Does exactly the work of the default constructor as it existed in the very
+  first version of vpMomentObject
+ */
+void
+vpMomentObject::init(unsigned int orderinp) {
+	order = orderinp + 1;
+	type = vpMomentObject::DENSE_FULL_OBJECT;
+	flg_normalize_intensity = true;                 // By default, the intensity values are normalized
+	values.resize((order+1)*(order+1));
+	values.assign((order+1)*(order+1),0);
+}
 
+/*!
+  Helper to copy constructor
+ */
+void
+vpMomentObject::init(const vpMomentObject& objin){
+	order = objin.getOrder()+1;
+	type = objin.getType();
+	flg_normalize_intensity = objin.flg_normalize_intensity;
+	values.resize(objin.values.size());
+	values = objin.values;
+}
 
 /*!
   Default constructor.
@@ -338,14 +485,28 @@ void vpMomentObject::fromImage(const vpImage<unsigned char>& image, unsigned cha
   The parameter specified is the highest desired included order.
   All orders up to this values will be computed. In other words, a vpMomentObject will compute all \f$ m_{ij} \f$ moments with \f$ i+j \in [0..order] \f$.
 
-  \param order : Maximum reached order (i+j) to be used. All
+  \param max_order : Maximum reached order (i+j) to be used. All
   considered i+j will be of order smaller or equal than this
   parameter. For example if this parameter is 5, all moment values of
   order 0 to 5 included will be computed.
+
+  Mani : outsourced the constructor work to void init (unsigned int orderinp);
 */
-vpMomentObject::vpMomentObject(unsigned int order) : order(order+1),type(DENSE_FULL_OBJECT){
-    values.resize((order+1)*(order+1)*12);
-    values.assign((order+1)*(order+1)*12,0);
+vpMomentObject::vpMomentObject(unsigned int max_order)
+  : flg_normalize_intensity(true), order(max_order+1), type(vpMomentObject::DENSE_FULL_OBJECT),
+    values()
+{
+    init(max_order);
+}
+
+/*!
+  Copy constructor
+ */
+vpMomentObject::vpMomentObject(const vpMomentObject& srcobj)
+  : flg_normalize_intensity(true), order(order+1), type(vpMomentObject::DENSE_FULL_OBJECT),
+    values()
+{
+    init(srcobj);
 }
 
 /*!
@@ -367,7 +528,7 @@ double m12;
 m12 = mij[2*(obj.getOrder()+1)+1]; // i=1 and j=2
   \endcode
 */
-std::vector<double>& vpMomentObject::get() {
+const std::vector<double>& vpMomentObject::get() const {
     return values;
 
 }
@@ -385,6 +546,18 @@ double vpMomentObject::get(unsigned int i, unsigned int j) const {
     return values[j*order+i];
 }
 
+/*!
+  Sets the basic moment value \f$m_{ij}\f$ corresponding to i,j indexes
+  \param i : First moment index, with \f$i+j \leq order\f$.
+  \param j : Second moment index, with \f$i+j \leq order\f$.
+  \param value_ij : Moment value.
+*/
+void vpMomentObject::set(unsigned int i, unsigned int j, const double& value_ij){
+    assert(i+j<=getOrder());
+    if(i+j>=order) throw vpException(vpException::badValue,"The requested value cannot be set, you should specify a higher order for the moment object.");
+    values[j*order+i] = value_ij;
+}
+
 /*!
   Outputs the basic moment's values \f$m_{ij}\f$ to a stream presented as a matrix.    
   The first line corresponds to \f$m_{0[0:order]}\f$, the second one to \f$m_{1[0:order]}\f$
@@ -400,7 +573,7 @@ double vpMomentObject::get(unsigned int i, unsigned int j) const {
   \endcode
 
 */
-std::ostream & operator<<(std::ostream & os, const vpMomentObject& m){
+VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentObject& m){
     for(unsigned int i = 0;i<m.values.size();i++){
 
         if(i%(m.order)==0)
diff --git a/src/tracking/moments/vpMomentObject.h b/src/tracking/moments/vpMomentObject.h
index cd6d348e..14eedb5d 100644
--- a/src/tracking/moments/vpMomentObject.h
+++ b/src/tracking/moments/vpMomentObject.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMomentObject.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMomentObject.h 4650 2014-02-07 15:30:36Z mbakthav $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -48,7 +48,8 @@
 #include <visp/vpImage.h>
 #include <visp/vpMoment.h>
 #include <visp/vpPoint.h>
-
+#include <visp/vpMath.h>
+#include <cstdlib>
 #include <utility>
 
 class vpCameraParameters;
@@ -212,6 +213,7 @@ Centered moments (mu03, mu12, mu21, mu30): 0.003375 0.0045625 -0.00228125 -0.000
 */
 class VISP_EXPORT vpMomentObject{
 public:
+
   /*!
     Type of object that will be considered.
   */
@@ -220,32 +222,57 @@ public:
     DENSE_POLYGON = 1, /*!< A set of points (stored in clockwise order) describing a polygon. It will be treated as dense. */
     DISCRETE = 2, /*!< A cloud of points. Treated as discrete. */
   } vpObjectType;
+
+  /*!
+     Type of camera image background.
+   */
+   typedef enum{
+       BLACK = 0, /*! Black background */
+       WHITE = 1, /*! No functionality as of now */
+    } vpCameraImgBckGrndType;
+
+  bool flg_normalize_intensity;                 // To scale the intensity of each individual pixel in the image by the maximum intensity value present in it
+
+  // Constructor helpers
+  void init(unsigned int orderinp);
+  void init(const vpMomentObject& objin);
+  // Constructors
   vpMomentObject(unsigned int order);
-  void fromImage(const vpImage<unsigned char>& image,unsigned char threshold, const vpCameraParameters& cam);
+  vpMomentObject(const vpMomentObject& srcobj);
+
+  void fromImage(const vpImage<unsigned char>& image,unsigned char threshold, const vpCameraParameters& cam); // Binary version
+  void fromImage(const vpImage<unsigned char>& image, const vpCameraParameters& cam, vpCameraImgBckGrndType bg_type, bool normalize_with_pix_size = true); // Photometric version
+
   void fromVector(std::vector<vpPoint>& points);
-  std::vector<double>& get();
+  const std::vector<double>& get() const;
   double get(unsigned int i,unsigned int j) const;
+
   /*!
     \return The type of object that is considered.
   */
   vpObjectType getType() const {return type;}
+
   /*!
     \return The maximal order. The basic moments \f$m_{ij}\f$ that will be computed
     are for  \f$i+j \in [0:\mbox{order}]\f$.
   */
   unsigned int getOrder() const {return order-1;}
+
   /*!
     Specifies the type of the input data.
-    \param type : An input type.
+    \param input_type : An input type.
   */
-  void setType(vpObjectType type){this->type=type;}
+  void setType(vpObjectType input_type){this->type=input_type;}
   friend VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpMomentObject& v);
 
-private:
+protected:
   unsigned int order;
   vpObjectType type;
   std::vector<double> values;
+  void set(unsigned int i, unsigned int j, const double& value_ij);
   void cacheValues(std::vector<double>& cache,double x, double y);
+private:
+  void cacheValues(std::vector<double>& cache,double x, double y, double IntensityNormalized);
   double calc_mom_polygon(unsigned int p, unsigned int q, const std::vector<vpPoint>& points);
 
 };
diff --git a/src/tracking/moving-edges/vpMe.cpp b/src/tracking/moving-edges/vpMe.cpp
index 4b187885..5c86afde 100644
--- a/src/tracking/moving-edges/vpMe.cpp
+++ b/src/tracking/moving-edges/vpMe.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMe.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMe.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -411,34 +411,28 @@ vpMe::print( )
 }
 
 vpMe::vpMe()
+  : threshold(1500), mu1(0.5), mu2(0.5), min_samplestep(4), anglestep(1), mask_sign(0),
+    range(4), sample_step(10), ntotal_sample(0), points_to_track(500), mask_size(5),
+    n_mask(180), strip(2), mask(NULL)
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+  , aberration(2), init_aberration(5.)
+#endif
 {
-  mask = NULL ;
-  threshold = 1500 ;
-  mu1 = 0.5 ;
-  mu2 = 0.5 ;
-  sample_step = 10 ;
-  range = 4 ;
-  mask_size = 5 ;
-  n_mask = 180 ;
-  mask_sign = 0 ;
-  ntotal_sample = 0; // not sure that it is used
-  points_to_track = 500; // not sure that it is used
+  //ntotal_sample = 0; // not sure that it is used
+  //points_to_track = 500; // not sure that it is used
   anglestep = (180 / n_mask) ;
-  strip = 2 ;
-  min_samplestep = 4 ;
-  
-  #ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
-  aberration = 2.0 ;
-  init_aberration = 5.0 ;
-  #endif
-  
+    
   initMask() ;
 }
 
 vpMe::vpMe(const vpMe &me)
+  : threshold(1500), mu1(0.5), mu2(0.5), min_samplestep(4), anglestep(1), mask_sign(0),
+    range(4), sample_step(10), ntotal_sample(0), points_to_track(500), mask_size(5),
+    n_mask(180), strip(2), mask(NULL)
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+  , aberration(2), init_aberration(5.)
+#endif
 {
-  mask = NULL ;
-  
   *this = me;
 }
 
diff --git a/src/tracking/moving-edges/vpMe.h b/src/tracking/moving-edges/vpMe.h
index c94d3170..d51f7f41 100644
--- a/src/tracking/moving-edges/vpMe.h
+++ b/src/tracking/moving-edges/vpMe.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMe.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMe.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -166,9 +166,9 @@ public:
   /*!
     Set the minimum image contrast allowed to detect a contour.
     
-    \param mu1 : new mu1.
+    \param mu_1 : new mu1.
   */
-  void setMu1(const double &mu1) { this->mu1 = mu1  ; }
+  void setMu1(const double &mu_1) { this->mu1 = mu_1  ; }
   
   /*!
     Get the minimum image contrast allowed to detect a contour.
@@ -180,9 +180,9 @@ public:
   /*!
     Set the maximum image contrast allowed to detect a contour.
     
-    \param mu2 : new mu2.
+    \param mu_2 : new mu2.
   */
-  void setMu2(const double &mu2) { this->mu2 = mu2  ; }
+  void setMu2(const double &mu_2) { this->mu2 = mu_2  ; }
   
   /*!
     Get the maximum image contrast allowed to detect a contour.
diff --git a/src/tracking/moving-edges/vpMeEllipse.cpp b/src/tracking/moving-edges/vpMeEllipse.cpp
index 38ea8432..0496655a 100644
--- a/src/tracking/moving-edges/vpMeEllipse.cpp
+++ b/src/tracking/moving-edges/vpMeEllipse.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMeEllipse.cpp 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpMeEllipse.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -51,6 +51,8 @@
 
 #include <cmath>    // std::fabs
 #include <limits>   // numeric_limits
+
+void computeTheta(double &theta, vpColVector &K, vpImagePoint iP);
 /*!
   Computes the \f$ \theta \f$ angle which represents the angle between the tangente to the curve and the i axis.
 
@@ -78,36 +80,34 @@ computeTheta(double &theta, vpColVector &K, vpImagePoint iP)
 /*!
   Basic constructor that calls the constructor of the class vpMeTracker.
 */
-vpMeEllipse::vpMeEllipse():vpMeTracker()
+vpMeEllipse::vpMeEllipse()
+  : K(), iPc(), a(0.), b(0.), e(0.), iP1(), iP2(), alpha1(0), alpha2(2*M_PI),
+    ce(0.), se(0.), angle(), m00(0.), mu11(0.), mu20(0.), mu02(0.),
+    m10(0.), m01(0.), m11(0.), m02(0.), m20(0.), thresholdWeight(0.2), circle(false)
 {
   vpCDEBUG(1) << "begin vpMeEllipse::vpMeEllipse() " <<  std::endl ;
 
   // redimensionnement du vecteur de parametre
   // i^2 + K0 j^2 + 2 K1 i j + 2 K2 i + 2 K3 j + K4
 
-  circle = false ;
   K.resize(5) ;
 
-  alpha1 = 0 ;
-  alpha2 = 2*M_PI ;
-
   //j1 = j2 = i1 = i2 = 0 ;
   iP1.set_i(0);
   iP1.set_j(0);
   iP2.set_i(0);
   iP2.set_j(0);
   
-  m00 = m01 = m10 = m11 = m20 = m02 = mu11 = mu20 = mu02 = 0;
-
-  thresholdWeight = 0.2;
-
   vpCDEBUG(1) << "end vpMeEllipse::vpMeEllipse() " << std::endl ;
 }
 
 /*!
   Copy constructor.
 */
-vpMeEllipse::vpMeEllipse(const vpMeEllipse &meellipse):vpMeTracker(meellipse)
+vpMeEllipse::vpMeEllipse(const vpMeEllipse &meellipse)
+  : vpMeTracker(meellipse), K(), iPc(), a(0.), b(0.), e(0.), iP1(), iP2(), alpha1(0), alpha2(2*M_PI),
+    ce(0.), se(0.), angle(), m00(0.), mu11(0.), mu20(0.), mu02(0.),
+    m10(0.), m01(0.), m11(0.), m02(0.), m20(0.), thresholdWeight(0.2), circle(false)
 {
   K = meellipse.K;
   iPc = meellipse.iPc;
@@ -134,6 +134,8 @@ vpMeEllipse::vpMeEllipse(const vpMeEllipse &meellipse):vpMeTracker(meellipse)
   m02 = meellipse.m02;
   m20 = meellipse.m20;  
   thresholdWeight = meellipse.thresholdWeight;
+
+  circle = meellipse.circle;
 }
 
 /*!
@@ -416,16 +418,16 @@ vpMeEllipse::computeAngle(vpImagePoint pt1, vpImagePoint pt2)
 void
 vpMeEllipse::updateTheta()
 {
-  vpMeSite p;
+  vpMeSite p_me;
   double theta;
   for(std::list<vpMeSite>::iterator it=list.begin(); it!=list.end(); ++it){
-    p = *it;
+    p_me = *it;
     vpImagePoint iP;
-    iP.set_i(p.ifloat);
-    iP.set_j(p.jfloat);
+    iP.set_i(p_me.ifloat);
+    iP.set_j(p_me.jfloat);
     computeTheta(theta, K, iP) ;
-    p.alpha = theta ;
-    *it = p;
+    p_me.alpha = theta ;
+    *it = p_me;
   }
 }
 
@@ -629,10 +631,10 @@ vpMeEllipse::leastSquare()
   // A = (j^2 2ij 2i 2j 1)   x = (K0 K1 K2 K3 K4)^T  b = (-i^2 )
   unsigned int i ;
 
-  vpMeSite p ;
+  vpMeSite p_me ;
 
   unsigned int iter =0 ;
-  vpColVector b(numberOfSignal()) ;
+  vpColVector b_(numberOfSignal()) ;
   vpRobust r(numberOfSignal()) ;
   r.setThreshold(2);
   r.setIteration(0) ;
@@ -658,17 +660,16 @@ vpMeEllipse::leastSquare()
 
     unsigned int k =0 ;
     for(std::list<vpMeSite>::const_iterator it=list.begin(); it!=list.end(); ++it){
-      p = *it;
-      if (p.getState() == vpMeSite::NO_SUPPRESSION)
+      p_me = *it;
+      if (p_me.getState() == vpMeSite::NO_SUPPRESSION)
       {
-
-        A[k][0] = vpMath::sqr(p.jfloat) ;
-        A[k][1] = 2 * p.ifloat * p.jfloat ;
-        A[k][2] = 2 * p.ifloat ;
-        A[k][3] = 2 * p.jfloat ;
+        A[k][0] = vpMath::sqr(p_me.jfloat) ;
+        A[k][1] = 2 * p_me.ifloat * p_me.jfloat ;
+        A[k][2] = 2 * p_me.ifloat ;
+        A[k][3] = 2 * p_me.jfloat ;
         A[k][4] = 1 ;
 
-        b[k] = - vpMath::sqr(p.ifloat) ;
+        b_[k] = - vpMath::sqr(p_me.ifloat) ;
         k++ ;
       }
     }
@@ -678,10 +679,10 @@ vpMeEllipse::leastSquare()
       DA = D*A ;
       vpMatrix DAp ;
 
-      x = DA.pseudoInverse(1e-26) *D*b ;
+      x = DA.pseudoInverse(1e-26) *D*b_ ;
 
       vpColVector residu(nos_1);
-      residu = b - A*x;
+      residu = b_ - A*x;
       r.setIteration(iter) ;
       r.MEstimator(vpRobust::TUKEY,residu,w) ;
 
@@ -696,14 +697,14 @@ vpMeEllipse::leastSquare()
 
     k =0 ;
     for(std::list<vpMeSite>::iterator it=list.begin(); it!=list.end(); ++it){
-      p = *it;
-      if (p.getState() == vpMeSite::NO_SUPPRESSION)
+      p_me = *it;
+      if (p_me.getState() == vpMeSite::NO_SUPPRESSION)
       {
         if (w[k] < thresholdWeight)
         {
-          p.setState(vpMeSite::M_ESTIMATOR);
+          p_me.setState(vpMeSite::M_ESTIMATOR);
           
-          *it = p;
+          *it = p_me;
         }
         k++ ;
       }
@@ -719,15 +720,14 @@ vpMeEllipse::leastSquare()
 
     unsigned int k =0 ;
     for(std::list<vpMeSite>::const_iterator it=list.begin(); it!=list.end(); ++it){
-      p = *it;
-      if (p.getState() == vpMeSite::NO_SUPPRESSION)
+      p_me = *it;
+      if (p_me.getState() == vpMeSite::NO_SUPPRESSION)
       {
-
-        A[k][0] = 2* p.ifloat ;
-        A[k][1] = 2 * p.jfloat ;
+        A[k][0] = 2* p_me.ifloat ;
+        A[k][1] = 2 * p_me.jfloat ;
         A[k][2] = 1 ;
 
-        b[k] = - vpMath::sqr(p.ifloat) - vpMath::sqr(p.jfloat) ;
+        b_[k] = - vpMath::sqr(p_me.ifloat) - vpMath::sqr(p_me.jfloat) ;
         k++ ;
       }
     }
@@ -737,10 +737,10 @@ vpMeEllipse::leastSquare()
       DA = D*A ;
       vpMatrix DAp ;
 
-      x = DA.pseudoInverse(1e-26) *D*b ;
+      x = DA.pseudoInverse(1e-26) *D*b_ ;
 
       vpColVector residu(nos_1);
-      residu = b - A*x;
+      residu = b_ - A*x;
       r.setIteration(iter) ;
       r.MEstimator(vpRobust::TUKEY,residu,w) ;
 
@@ -755,14 +755,14 @@ vpMeEllipse::leastSquare()
 
     k =0 ;
     for(std::list<vpMeSite>::iterator it=list.begin(); it!=list.end(); ++it){
-      p = *it;
-      if (p.getState() == vpMeSite::NO_SUPPRESSION)
+      p_me = *it;
+      if (p_me.getState() == vpMeSite::NO_SUPPRESSION)
       {
         if (w[k] < thresholdWeight)
         {
-          p.setState(vpMeSite::M_ESTIMATOR);
+          p_me.setState(vpMeSite::M_ESTIMATOR);
       
-          *it = p;
+          *it = p_me;
         }
         k++ ;
       }
@@ -840,7 +840,7 @@ vpMeEllipse::initTracking(const vpImage<unsigned char> &I, const unsigned int n,
   if (circle==false)
   {
     vpMatrix A(n,5) ;
-    vpColVector b(n) ;
+    vpColVector b_(n) ;
     vpColVector x(5) ;
 
     // Construction du systeme Ax=b
@@ -855,16 +855,16 @@ vpMeEllipse::initTracking(const vpImage<unsigned char> &I, const unsigned int n,
       A[k][3] = 2* iP[k].get_j() ;
       A[k][4] = 1 ;
 
-      b[k] = - vpMath::sqr(iP[k].get_i()) ;
+      b_[k] = - vpMath::sqr(iP[k].get_i()) ;
     }
 
-    K = A.pseudoInverse(1e-26)*b ;
+    K = A.pseudoInverse(1e-26)*b_ ;
     std::cout << K << std::endl;
   }
   else
   {
     vpMatrix A(n,3) ;
-    vpColVector b(n) ;
+    vpColVector b_(n) ;
     vpColVector x(3) ;
 
     vpColVector Kc(3) ;
@@ -874,10 +874,10 @@ vpMeEllipse::initTracking(const vpImage<unsigned char> &I, const unsigned int n,
       A[k][1] =  2* iP[k].get_j() ;
       A[k][2] = 1 ;
 
-      b[k] = - vpMath::sqr(iP[k].get_i()) - vpMath::sqr(iP[k].get_j()) ;
+      b_[k] = - vpMath::sqr(iP[k].get_i()) - vpMath::sqr(iP[k].get_j()) ;
     }
 
-    Kc = A.pseudoInverse(1e-26)*b ;
+    Kc = A.pseudoInverse(1e-26)*b_ ;
     K[0] = 1 ;
     K[1] = 0 ;
     K[2] = Kc[0] ;
@@ -901,7 +901,6 @@ vpMeEllipse::initTracking(const vpImage<unsigned char> &I, const unsigned int n,
     vpMeTracker::initTracking(I) ;
   }
 
-
   try{
     track(I) ;
   }
@@ -1130,7 +1129,7 @@ vpMeEllipse::initTracking(const vpImage<unsigned char> &I, const unsigned int n,
   if (circle==false)
   {
     vpMatrix A(n,5) ;
-    vpColVector b(n) ;
+    vpColVector b_(n) ;
     vpColVector x(5) ;
 
     // Construction du systeme Ax=b
@@ -1145,16 +1144,16 @@ vpMeEllipse::initTracking(const vpImage<unsigned char> &I, const unsigned int n,
       A[k][3] = 2* j[k] ;
       A[k][4] = 1 ;
 
-      b[k] = - vpMath::sqr(i[k]) ;
+      b_[k] = - vpMath::sqr(i[k]) ;
     }
 
-    K = A.pseudoInverse(1e-26)*b ;
+    K = A.pseudoInverse(1e-26)*b_ ;
     std::cout << K << std::endl;
   }
   else
   {
     vpMatrix A(n,3) ;
-    vpColVector b(n) ;
+    vpColVector b_(n) ;
     vpColVector x(3) ;
 
     vpColVector Kc(3) ;
@@ -1164,10 +1163,10 @@ vpMeEllipse::initTracking(const vpImage<unsigned char> &I, const unsigned int n,
       A[k][1] =  2* j[k] ;
 
       A[k][2] = 1 ;
-      b[k] = - vpMath::sqr(i[k]) - vpMath::sqr(j[k]) ;
+      b_[k] = - vpMath::sqr(i[k]) - vpMath::sqr(j[k]) ;
     }
 
-    Kc = A.pseudoInverse(1e-26)*b ;
+    Kc = A.pseudoInverse(1e-26)*b_ ;
     K[0] = 1 ;
     K[1] = 0 ;
     K[2] = Kc[0] ;
@@ -1192,7 +1191,6 @@ vpMeEllipse::initTracking(const vpImage<unsigned char> &I, const unsigned int n,
     vpMeTracker::initTracking(I) ;
   }
 
-
   try{
     track(I) ;
   }
diff --git a/src/tracking/moving-edges/vpMeEllipse.h b/src/tracking/moving-edges/vpMeEllipse.h
index 8aa71961..741d60ea 100644
--- a/src/tracking/moving-edges/vpMeEllipse.h
+++ b/src/tracking/moving-edges/vpMeEllipse.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMeEllipse.h 4231 2013-04-29 16:26:28Z fspindle $
+ * $Id: vpMeEllipse.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -175,9 +175,9 @@ public:
 
       Compared to the classical equation of an ellipse, \f$ K_0 \f$ is equal to 1 and \f$ K_1 \f$ is equal to 0.
 
-      \param circle : Set to true if you want to track a circle.
+      \param is_circle : Set to true if you want to track a circle.
   */
-  void setCircle(bool circle) { this->circle = circle ; }
+  void setCircle(bool is_circle) { this->circle = is_circle ; }
   
   /*!
     Gets the 0 order moment \f$ m_{00} \f$ which represents the area of the ellipse.
diff --git a/src/tracking/moving-edges/vpMeLine.cpp b/src/tracking/moving-edges/vpMeLine.cpp
index fa562e93..338fea34 100644
--- a/src/tracking/moving-edges/vpMeLine.cpp
+++ b/src/tracking/moving-edges/vpMeLine.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMeLine.cpp 4140 2013-02-21 10:50:22Z fspindle $
+ * $Id: vpMeLine.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,8 +58,12 @@
 #include <stdlib.h>
 #include <cmath>    // std::fabs
 #include <limits>   // numeric_limits
+#include <algorithm>    // std::min
+
 #define INCR_MIN 1
 
+void computeDelta(double &delta, int i1, int j1, int i2, int j2);
+
 static void
 normalizeAngle(double &delta)
 {
@@ -101,18 +105,21 @@ project(double a, double b, double c,
   Basic constructor that calls the constructor of the class vpMeTracker.
 
 */
-vpMeLine::vpMeLine():vpMeTracker()
+vpMeLine::vpMeLine()
+  : rho(0.), theta(0.), delta(0.), delta_1(0.), angle(0.), angle_1(90), sign(1),
+    _useIntensityForRho(true), a(0.), b(0.), c(0.)
 {
-  sign = 1;
-  angle_1 = 90;
-  _useIntensityForRho = true;
 }
 /*!
 
   Copy constructor.
 
 */
-vpMeLine::vpMeLine(const vpMeLine &meline):vpMeTracker(meline)
+vpMeLine::vpMeLine(const vpMeLine &meline)
+  : vpMeTracker(meline),
+    rho(0.), theta(0.), delta(0.), delta_1(0.), angle(0.), angle_1(90), sign(1),
+    _useIntensityForRho(true), a(0.), b(0.), c(0.)
+
 {
   rho = meline.rho;
   theta = meline.theta;
@@ -300,7 +307,7 @@ vpMeLine::leastSquare()
   vpColVector w(numberOfSignal()) ;
   vpColVector B(numberOfSignal()) ;
   w =1 ;
-  vpMeSite p ;
+  vpMeSite p_me ;
   unsigned int iter =0 ;
   unsigned int nos_1 = 0 ;
   double distance = 100;
@@ -320,12 +327,12 @@ vpMeLine::leastSquare()
     nos_1 = numberOfSignal() ;
     unsigned int k =0 ;
     for(std::list<vpMeSite>::const_iterator it=list.begin(); it!=list.end(); ++it){
-      p = *it;
-      if (p.getState() == vpMeSite::NO_SUPPRESSION)
+      p_me = *it;
+      if (p_me.getState() == vpMeSite::NO_SUPPRESSION)
       {
-        A[k][0] = p.ifloat ;
+        A[k][0] = p_me.ifloat ;
         A[k][1] = 1 ;
-        B[k] = -p.jfloat ;
+        B[k] = -p_me.jfloat ;
         k++ ;
       }
     }
@@ -353,14 +360,14 @@ vpMeLine::leastSquare()
 
     k =0 ;
     for(std::list<vpMeSite>::iterator it=list.begin(); it!=list.end(); ++it){
-      p = *it;
-      if (p.getState() == vpMeSite::NO_SUPPRESSION)
+      p_me = *it;
+      if (p_me.getState() == vpMeSite::NO_SUPPRESSION)
       {
         if (w[k] < 0.2)
         {
-          p.setState(vpMeSite::M_ESTIMATOR);
+          p_me.setState(vpMeSite::M_ESTIMATOR);
           
-          *it = p;
+          *it = p_me;
         }
         k++ ;
       }
@@ -385,12 +392,12 @@ vpMeLine::leastSquare()
     nos_1 = numberOfSignal() ;
     unsigned int k =0 ;
     for(std::list<vpMeSite>::const_iterator it=list.begin(); it!=list.end(); ++it){
-      p = *it;
-      if (p.getState() == vpMeSite::NO_SUPPRESSION)
+      p_me = *it;
+      if (p_me.getState() == vpMeSite::NO_SUPPRESSION)
       {
-        A[k][0] = p.jfloat ;
+        A[k][0] = p_me.jfloat ;
         A[k][1] = 1 ;
-        B[k] = -p.ifloat ;
+        B[k] = -p_me.ifloat ;
         k++ ;
       }
     }
@@ -416,17 +423,16 @@ vpMeLine::leastSquare()
       x_1 = x;
     }
 
-
     k =0 ;
     for(std::list<vpMeSite>::iterator it=list.begin(); it!=list.end(); ++it){
-      p = *it;
-      if (p.getState() == vpMeSite::NO_SUPPRESSION)
+      p_me = *it;
+      if (p_me.getState() == vpMeSite::NO_SUPPRESSION)
       {
         if (w[k] < 0.2)
         {
-          p.setState(vpMeSite::M_ESTIMATOR);
+          p_me.setState(vpMeSite::M_ESTIMATOR);
           
-          *it = p;
+          *it = p_me;
         }
         k++ ;
       }
@@ -482,9 +488,9 @@ vpMeLine::initTracking(const vpImage<unsigned char> &I,
       PExt[1].ifloat = (float)ip2.get_i() ;
       PExt[1].jfloat = (float)ip2.get_j() ;
 
-      double angle = atan2((double)(i1s-i2s),(double)(j1s-j2s)) ;
-      a = cos(angle) ;
-      b = sin(angle) ;
+      double angle_ = atan2((double)(i1s-i2s),(double)(j1s-j2s)) ;
+      a = cos(angle_) ;
+      b = sin(angle_) ;
 
       // Real values of a, b can have an other sign. So to get the good values
       // of a and b in order to initialise then c, we call track(I) just below
@@ -634,7 +640,7 @@ vpMeLine::seekExtremities(const vpImage<unsigned char> &I)
 
   // number of samples along line_p
   n_sample = length_p/(double)me->getSampleStep();
-  double sample = (double)me->getSampleStep();
+  double sample_step = (double)me->getSampleStep();
 
   vpMeSite P ;
   P.init((int) PExt[0].ifloat, (int)PExt[0].jfloat, delta_1, 0, sign) ;
@@ -647,8 +653,8 @@ vpMeLine::seekExtremities(const vpImage<unsigned char> &I)
 
   for (int i=0 ; i < 3 ; i++)
   {
-    P.ifloat = P.ifloat + di*sample ; P.i = (int)P.ifloat ;
-    P.jfloat = P.jfloat + dj*sample ; P.j = (int)P.jfloat ;
+    P.ifloat = P.ifloat + di*sample_step ; P.i = (int)P.ifloat ;
+    P.jfloat = P.jfloat + dj*sample_step ; P.j = (int)P.jfloat ;
 
     if(!outOfImage(P.i, P.j, 5, rows, cols))
     {
@@ -678,8 +684,8 @@ vpMeLine::seekExtremities(const vpImage<unsigned char> &I)
   P.setDisplay(selectDisplay) ;
   for (int i=0 ; i < 3 ; i++)
   {
-    P.ifloat = P.ifloat - di*sample ; P.i = (int)P.ifloat ;
-    P.jfloat = P.jfloat - dj*sample ; P.j = (int)P.jfloat ;
+    P.ifloat = P.ifloat - di*sample_step ; P.i = (int)P.ifloat ;
+    P.jfloat = P.jfloat - dj*sample_step ; P.j = (int)P.jfloat ;
 
     if(!outOfImage(P.i, P.j, 5, rows, cols))
     {
@@ -767,34 +773,34 @@ vpMeLine::reSample(const vpImage<unsigned char> &I)
 void
 vpMeLine::updateDelta()
 {
-  vpMeSite p ;
+  vpMeSite p_me ;
 
-  double angle = delta + M_PI/2;
+  double angle_ = delta + M_PI/2;
   double diff = 0;
 
-  while (angle<0) angle += M_PI;
-  while (angle>M_PI) angle -= M_PI;
+  while (angle_<0) angle_ += M_PI;
+  while (angle_>M_PI) angle_ -= M_PI;
 
-  angle = vpMath::round(angle * 180 / M_PI) ;
+  angle_ = vpMath::round(angle_ * 180 / M_PI) ;
 
-  //if(fabs(angle) == 180 )
-  if(std::fabs(std::fabs(angle) - 180) <= std::numeric_limits<double>::epsilon())
+  //if(fabs(angle_) == 180 )
+  if(std::fabs(std::fabs(angle_) - 180) <= std::numeric_limits<double>::epsilon())
   {
-    angle= 0 ;
+    angle_= 0 ;
   }
 
   //std::cout << "angle theta : " << theta << std::endl ;
-  diff = fabs(angle - angle_1);
+  diff = fabs(angle_ - angle_1);
   if (diff > 90)
     sign *= -1;
 
-  angle_1 = angle;
+  angle_1 = angle_;
 
   for(std::list<vpMeSite>::iterator it=list.begin(); it!=list.end(); ++it){
-    p = *it;
-    p.alpha = delta ;
-    p.mask_sign = sign;
-    *it = p;
+    p_me = *it;
+    p_me.alpha = delta ;
+    p_me.mask_sign = sign;
+    *it = p_me;
   }
   delta_1 = delta;
 }
diff --git a/src/tracking/moving-edges/vpMeLine.h b/src/tracking/moving-edges/vpMeLine.h
index 6f7897db..3d51adda 100644
--- a/src/tracking/moving-edges/vpMeLine.h
+++ b/src/tracking/moving-edges/vpMeLine.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMeLine.h 4231 2013-04-29 16:26:28Z fspindle $
+ * $Id: vpMeLine.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/moving-edges/vpMeNurbs.cpp b/src/tracking/moving-edges/vpMeNurbs.cpp
index 389b9172..1ea32929 100644
--- a/src/tracking/moving-edges/vpMeNurbs.cpp
+++ b/src/tracking/moving-edges/vpMeNurbs.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMeNurbs.cpp 4135 2013-02-13 16:48:19Z fspindle $
+ * $Id: vpMeNurbs.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -68,6 +68,15 @@
 #  endif
 #endif
 
+double computeDelta(double deltai, double deltaj);
+void findAngle(const vpImage<unsigned char> &I, const vpImagePoint &iP,
+               vpMe* me, double &angle, double &convlt);
+vpImagePoint findFirstBorder(const vpImage<unsigned char>& Isub, const vpImagePoint &iP);
+bool findCenterPoint(std::list<vpImagePoint> *ip_edges_list);
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+vp_deprecated bool findCenterPoint(vpList<vpImagePoint> *ip_edges_list);
+#endif
+
 //Compute the angle delta = arctan(deltai/deltaj)
 //and normalize it between 0 and pi
 double
@@ -220,20 +229,19 @@ bool findCenterPoint(std::list<vpImagePoint> *ip_edges_list)
 /*!
   Basic constructor that calls the constructor of the class vpMeTracker.
 */
-vpMeNurbs::vpMeNurbs():vpMeTracker()
+vpMeNurbs::vpMeNurbs()
+  : nurbs(), dist(0.), nbControlPoints(20), beginPtFound(0), endPtFound(0), enableCannyDetection(false),
+    cannyTh1(100.), cannyTh2(200.)
 {
-  nbControlPoints = 20;
-  beginPtFound = 0;
-  endPtFound =0;
-  enableCannyDetection = false;
-  cannyTh1 = 100.0;
-  cannyTh2 = 200.0;
 }
 
 /*!
   Copy constructor.
 */
-vpMeNurbs::vpMeNurbs(const vpMeNurbs &menurbs):vpMeTracker(menurbs)
+vpMeNurbs::vpMeNurbs(const vpMeNurbs &menurbs)
+  : vpMeTracker(menurbs),
+    nurbs(), dist(0.), nbControlPoints(20), beginPtFound(0), endPtFound(0), enableCannyDetection(false),
+    cannyTh1(100.), cannyTh2(200.)
 {
   nurbs = menurbs.nurbs;
   dist = menurbs.dist;
@@ -459,7 +467,7 @@ vpMeNurbs::seekExtremities(const vpImage<unsigned char> &I)
   //Check if the two extremities are not to close to eachother.
   double d = vpImagePoint::distance(begin[0],end[0]);
   double threshold = 3*me->getSampleStep();
-  double sample = me->getSampleStep();
+  double sample_step = me->getSampleStep();
   vpImagePoint pt;
   if ( d > threshold /*|| (list.firstValue()).mask_sign != (list.lastValue()).mask_sign*/)
   {
@@ -483,8 +491,8 @@ vpMeNurbs::seekExtremities(const vpImage<unsigned char> &I)
     si = si * vpMath::sign(begin[1].get_i());
     for (int i=0 ; i < 3 ; i++)
     {
-      P.ifloat = P.ifloat - si*sample ; P.i = (int)P.ifloat ;
-      P.jfloat = P.jfloat - co*sample ; P.j = (int)P.jfloat ;
+      P.ifloat = P.ifloat - si*sample_step ; P.i = (int)P.ifloat ;
+      P.jfloat = P.jfloat - co*sample_step ; P.j = (int)P.jfloat ;
       pt.set_ij(P.ifloat,P.jfloat);
       if (vpImagePoint::distance(end[0],pt) < threshold) break;
       if(!outOfImage(P.i, P.j, 5, rows, cols))
@@ -501,9 +509,9 @@ vpMeNurbs::seekExtremities(const vpImage<unsigned char> &I)
           }
         }
         else {
-	  if (vpDEBUG_ENABLE(3)) {
-	    vpDisplay::displayCross(I, pt, 10, vpColor::blue) ;
-	  }
+          if (vpDEBUG_ENABLE(3)) {
+            vpDisplay::displayCross(I, pt, 10, vpColor::blue) ;
+          }
         }
       }
     }
@@ -521,8 +529,8 @@ vpMeNurbs::seekExtremities(const vpImage<unsigned char> &I)
     si = si * vpMath::sign(end[1].get_i());
     for (int i=0 ; i < 3 ; i++)
     {
-      P.ifloat = P.ifloat + si*sample ; P.i = (int)P.ifloat ;
-      P.jfloat = P.jfloat + co*sample ; P.j = (int)P.jfloat ;
+      P.ifloat = P.ifloat + si*sample_step ; P.i = (int)P.ifloat ;
+      P.jfloat = P.jfloat + co*sample_step ; P.j = (int)P.jfloat ;
       pt.set_ij(P.ifloat,P.jfloat);
       if (vpImagePoint::distance(begin[0],pt) < threshold) break;
       if(!outOfImage(P.i, P.j, 5, rows, cols))
@@ -538,9 +546,9 @@ vpMeNurbs::seekExtremities(const vpImage<unsigned char> &I)
           }
         }
         else {
-	  if (vpDEBUG_ENABLE(3)) {
-	    vpDisplay::displayCross(I, pt, 10, vpColor::blue) ;
-	  }
+          if (vpDEBUG_ENABLE(3)) {
+            vpDisplay::displayCross(I, pt, 10, vpColor::blue) ;
+          }
         }
       }
     }
@@ -551,8 +559,8 @@ vpMeNurbs::seekExtremities(const vpImage<unsigned char> &I)
   {
     list.pop_front();
   }
-  if(begin != NULL) delete[] begin;
-  if(end != NULL) delete[] end;
+  /*if(begin != NULL)*/ delete[] begin;
+  /*if(end != NULL)  */ delete[] end;
 }
 
 
@@ -709,7 +717,7 @@ vpMeNurbs::seekExtremitiesCanny(const vpImage<unsigned char> & /* I */)
       me->setRange(memory_range);
     }
     
-    if (begin != NULL) delete[] begin;
+    /* if (begin != NULL) */ delete[] begin;
     beginPtFound = 0;
   }
 
@@ -806,6 +814,7 @@ vpMeNurbs::seekExtremitiesCanny(const vpImage<unsigned char> & /* I */)
       }
 
       std::list<vpMeSite>::iterator itList = list.end();
+      --itList; // Move on the last element
       double convlt;
       double delta;
       int nbr = 0;
@@ -839,17 +848,18 @@ vpMeNurbs::seekExtremitiesCanny(const vpImage<unsigned char> & /* I */)
       unsigned int  memory_range = me->getRange();
       me->setRange(3);
       std::list<vpMeSite>::iterator itList2 = list.end();
+      --itList2; // Move to the last element
       for (int j = 0; j < nbr; j++)
       {
-        vpMeSite s = *itList2;
-        s.track(I,me,false);
-        *itList2 = s;
+        vpMeSite me_s = *itList2;
+        me_s.track(I,me,false);
+        *itList2 = me_s;
         --itList2;
       }
       me->setRange(memory_range);
     }
     
-    if (end != NULL) delete[] end;
+    /* if (end != NULL) */ delete[] end;
     endPtFound = 0;
   }
 #else
@@ -944,14 +954,14 @@ vpMeNurbs::localReSample(const vpImage<unsigned char> &I)
       
       //if(( u != 1.0 || uend != 1.0)
       if( (std::fabs(u-1.0) > std::fabs(vpMath::maximum(u, 1.0))*std::numeric_limits<double>::epsilon())
-          || (std::fabs(uend-1.0) > std::fabs(vpMath::maximum(u, 1.0))*std::numeric_limits<double>::epsilon()))
+          || (std::fabs(uend-1.0) > std::fabs(vpMath::maximum(uend, 1.0))*std::numeric_limits<double>::epsilon()))
       {
         iP = nurbs.computeCurveDersPoint(u, 1);
 
         while (vpImagePoint::sqrDistance(iP[0],iPend) > vpMath::sqr(me->getSampleStep()) && u < uend)
         {
           u+=0.01;
-          if (iP!=NULL) {
+          /*if (iP!=NULL)*/ {
             delete[] iP;
             iP = NULL;
           }
@@ -970,7 +980,7 @@ vpMeNurbs::localReSample(const vpImage<unsigned char> &I)
             }
           }
         }
-        if (iP!=NULL) {
+        /*if (iP!=NULL)*/ {
           delete[] iP;
           iP = NULL;
         }
diff --git a/src/tracking/moving-edges/vpMeNurbs.h b/src/tracking/moving-edges/vpMeNurbs.h
index 73728129..242a99e2 100644
--- a/src/tracking/moving-edges/vpMeNurbs.h
+++ b/src/tracking/moving-edges/vpMeNurbs.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMeNurbs.h 4062 2013-01-09 10:30:06Z fspindle $
+ * $Id: vpMeNurbs.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -160,16 +160,16 @@ class VISP_EXPORT vpMeNurbs : public vpMeTracker
     /*!
       Sets the number of control points used to compute the Nurbs.
 
-      \param nbControlPoints : The number of control points used to compute the Nurbs.
+      \param nb_point : The number of control points used to compute the Nurbs.
     */
-    void setNbControlPoints(const unsigned int nbControlPoints) {this->nbControlPoints = nbControlPoints;}
+    void setNbControlPoints(const unsigned int nb_point) {this->nbControlPoints = nb_point;}
     
     /*!
       Enables or disables the canny detection used during the extremities search.
 
-      \param enableCannyDetection : if true it enables the canny detection.
+      \param enable_canny : if true it enables the canny detection.
     */
-    void setEnableCannyDetection(const bool enableCannyDetection) {this->enableCannyDetection =enableCannyDetection;}
+    void setEnableCannyDetection(const bool enable_canny) {this->enableCannyDetection =enable_canny;}
     
     /*!
       Enables to set the two thresholds use by the canny detection.
diff --git a/src/tracking/moving-edges/vpMeSite.cpp b/src/tracking/moving-edges/vpMeSite.cpp
index 31a8af88..5b87a50f 100644
--- a/src/tracking/moving-edges/vpMeSite.cpp
+++ b/src/tracking/moving-edges/vpMeSite.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMeSite.cpp 4062 2013-01-09 10:30:06Z fspindle $
+ * $Id: vpMeSite.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -100,15 +100,21 @@ vpMeSite::init()
 }
 
 vpMeSite::vpMeSite()
+  : i(0), j(0), i_1(0), j_1(0), ifloat(0), jfloat(0), v(0), mask_sign(1), alpha(0.),
+    convlt(0.), normGradient(0), weight(1), selectDisplay(NONE), state(NO_SUPPRESSION)
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+    , suppress(0)
+#endif
 {
-  init() ;
 }
 
 vpMeSite::vpMeSite(double ip, double jp)
+  : i(0), j(0), i_1(0), j_1(0), ifloat(0), jfloat(0), v(0), mask_sign(1), alpha(0.),
+    convlt(0.), normGradient(0), weight(1), selectDisplay(NONE), state(NO_SUPPRESSION)
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+    , suppress(0)
+#endif
 {
-  init() ;
-
-  selectDisplay = NONE ;
   i = vpMath::round(ip) ;
   j = vpMath::round(jp) ;
   ifloat = ip ;
@@ -119,6 +125,11 @@ vpMeSite::vpMeSite(double ip, double jp)
   Copy constructor.
 */
 vpMeSite::vpMeSite (const vpMeSite &mesite)
+  : i(0), j(0), i_1(0), j_1(0), ifloat(0), jfloat(0), v(0), mask_sign(1), alpha(0.),
+    convlt(0.), normGradient(0), weight(1), selectDisplay(NONE), state(NO_SUPPRESSION)
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+    , suppress(0)
+#endif
 {
   *this = mesite;
 }
@@ -497,7 +508,7 @@ vpMeSite::track(const vpImage<unsigned char>& I,
   int  max_rank =-1 ;
   //   int max_rank1=-1 ;
   //   int max_rank2 = -1;
-  double  convolution = 0 ;
+  double  convolution_ = 0 ;
   double  max_convolution = 0 ;
   double max = 0 ;
   double contraste = 0;
@@ -530,21 +541,21 @@ vpMeSite::track(const vpImage<unsigned char>& I,
   for(unsigned int n = 0 ; n < 2 * range + 1 ; n++)
   {
     //   convolution results
-    convolution = list_query_pixels[n].convolution(I, me) ;
+    convolution_ = list_query_pixels[n].convolution(I, me) ;
 
     // luminance ratio of reference pixel to potential correspondent pixel
     // the luminance must be similar, hence the ratio value should
     // lay between, for instance, 0.5 and 1.5 (parameter tolerance)
     if( test_contraste )
     {
-      likelihood[n] = fabs(convolution + convlt );
+      likelihood[n] = fabs(convolution_ + convlt );
       if (likelihood[n]> threshold)
       {
-        contraste = convolution / convlt;
+        contraste = convolution_ / convlt;
         if((contraste > contraste_min) && (contraste < contraste_max) && fabs(1-contraste) < diff)
         {
           diff = fabs(1-contraste);
-          max_convolution= convolution;
+          max_convolution= convolution_;
           max = likelihood[n] ;
           max_rank = (int)n ;
           // 	    max_rank2 = max_rank1;
@@ -555,10 +566,10 @@ vpMeSite::track(const vpImage<unsigned char>& I,
 
     else
     {
-      likelihood[n] = fabs(2*convolution) ;
+      likelihood[n] = fabs(2*convolution_) ;
       if (likelihood[n] > max  && likelihood[n] > threshold)
       {
-        max_convolution= convolution;
+        max_convolution= convolution_;
         max = likelihood[n] ;
         max_rank = (int)n ;
         //           max_rank2 = max_rank1;
@@ -617,18 +628,18 @@ int vpMeSite::operator!=(const vpMeSite &m)
 
 }
 
-std::ostream& operator<<(std::ostream& os, vpMeSite& vpMeS)
+VISP_EXPORT std::ostream& operator<<(std::ostream& os, vpMeSite& vpMeS)
 {
 #ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
   return (os << "Alpha: " << vpMeS.alpha
           << "  Convolution: " << vpMeS.convlt
           << "  Flag: " << vpMeS.suppress
           << "  Weight: " << vpMeS.weight );
-#endif
-  
+#else
   return (os << "Alpha: " << vpMeS.alpha
           << "  Convolution: " << vpMeS.convlt
           << "  Weight: " << vpMeS.weight );
+#endif
 }
 
 void vpMeSite::display(const vpImage<unsigned char>& I)
@@ -675,6 +686,7 @@ void vpMeSite::display(const vpImage<unsigned char>& I, const double &i, const d
 
     case TOO_NEAR:
       vpDisplay::displayCross(I,vpImagePoint(i,j),3,vpColor::cyan,1);
+      break;
 
     default:
       vpDisplay::displayCross(I,vpImagePoint(i,j),3,vpColor::yellow,1);
@@ -718,6 +730,7 @@ void vpMeSite::display(const vpImage<vpRGBa>& I, const double &i, const double &
 
     case TOO_NEAR:
       vpDisplay::displayCross(I,vpImagePoint(i,j),3,vpColor::cyan,1);
+      break;
 
     default:
       vpDisplay::displayCross(I,vpImagePoint(i,j),3,vpColor::yellow,1);
diff --git a/src/tracking/moving-edges/vpMeSite.h b/src/tracking/moving-edges/vpMeSite.h
index d1c70b0f..bac0bbad 100644
--- a/src/tracking/moving-edges/vpMeSite.h
+++ b/src/tracking/moving-edges/vpMeSite.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMeSite.h 4062 2013-01-09 10:30:06Z fspindle $
+ * $Id: vpMeSite.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/tracking/moving-edges/vpMeTracker.cpp b/src/tracking/moving-edges/vpMeTracker.cpp
index 1d7c911a..f043857f 100644
--- a/src/tracking/moving-edges/vpMeTracker.cpp
+++ b/src/tracking/moving-edges/vpMeTracker.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
 *
-* $Id: vpMeTracker.cpp 4303 2013-07-04 14:14:00Z fspindle $
+* $Id: vpMeTracker.cpp 4649 2014-02-07 14:57:11Z fspindle $
 *
 * This file is part of the ViSP software.
-* Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+* Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 * 
 * This software is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
@@ -66,19 +66,20 @@ vpMeTracker::init()
 }
 
 vpMeTracker::vpMeTracker()
+  : list(), me(NULL), init_range(1), nGoodElement(0), selectDisplay(vpMeSite::NONE)
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+  , query_range (0), display_point(false)
+#endif
 {
   init();
-  me = NULL ;
-  nGoodElement = 0;
-  init_range = 1;
-  
-  #ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
-  query_range = 0;
-  display_point = false ;
-  #endif
 }
 
-vpMeTracker::vpMeTracker(const vpMeTracker& meTracker):vpTracker(meTracker)
+vpMeTracker::vpMeTracker(const vpMeTracker& meTracker)
+  : vpTracker(meTracker),
+    list(), me(NULL), init_range(1), nGoodElement(0), selectDisplay(vpMeSite::NONE)
+#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
+    , query_range (0), display_point(false)
+#endif
 {
   init();
 
@@ -100,11 +101,11 @@ vpMeTracker::~vpMeTracker()
 }
 
 vpMeTracker&
-vpMeTracker::operator = (vpMeTracker& p)
+vpMeTracker::operator = (vpMeTracker& p_me)
 {
-  list = p.list;
-  me = p.me;
-  selectDisplay = p.selectDisplay ;
+  list = p_me.list;
+  me = p_me.me;
+  selectDisplay = p_me.selectDisplay ;
 
   return *this;
 }
@@ -331,8 +332,8 @@ vpMeTracker::display(const vpImage<unsigned char>& I)
   }
 #endif
   for(std::list<vpMeSite>::const_iterator it=list.begin(); it!=list.end(); ++it){
-    vpMeSite p = *it;
-    p.display(I);
+    vpMeSite p_me = *it;
+    p_me.display(I);
   }
 }
 
diff --git a/src/tracking/moving-edges/vpMeTracker.h b/src/tracking/moving-edges/vpMeTracker.h
index de23ef77..ecc60da7 100644
--- a/src/tracking/moving-edges/vpMeTracker.h
+++ b/src/tracking/moving-edges/vpMeTracker.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpMeTracker.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpMeTracker.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -135,9 +135,9 @@ public:
   /*!
     Set the moving edges initialisation parameters
   
-    \param me : Moving Edges.
+    \param p_me : Moving Edges.
   */
-  void setMe(vpMe *me) { this->me = me ; }
+  void setMe(vpMe *p_me) { this->me = p_me ; }
   
   /*!
     Return the moving edges initialisation parameters
diff --git a/src/tracking/template-tracker/ssd/vpTemplateTrackerSSD.cpp b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSD.cpp
new file mode 100644
index 00000000..b7dcbb91
--- /dev/null
+++ b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSD.cpp
@@ -0,0 +1,132 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerSSD.cpp 4666 2014-02-16 16:21:33Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+
+#include <visp/vpTemplateTrackerSSD.h>
+
+vpTemplateTrackerSSD::vpTemplateTrackerSSD(vpTemplateTrackerWarp *warp)
+  : vpTemplateTracker(warp), DI(), temp()
+{
+  dW.resize(2,nbParam);
+  G.resize(nbParam);
+  H.resize(nbParam,nbParam);
+  HLM.resize(nbParam,nbParam);
+
+  temp.resize(nbParam);
+
+  X1.resize(2);
+  X2.resize(2);
+  DI.resize(2);
+}
+
+double vpTemplateTrackerSSD::getCost(const vpImage<unsigned char> &I,vpColVector &tp)
+{
+  double erreur=0;
+  double IW,Tij;
+  int i,j;
+  double i2,j2;
+  int Nbpoint=0;
+
+  Warp->computeCoeff(tp);
+  for(unsigned int point=0;point<templateSize;point++)
+  {
+    i=ptTemplate[point].y;
+    j=ptTemplate[point].x;
+    X1[0]=j;X1[1]=i;
+    Warp->computeDenom(X1,tp);
+    Warp->warpX(X1,X2,tp);
+
+    j2=X2[0];i2=X2[1];
+    if((i2>=0)&&(j2>=0)&&(i2<I.getHeight()-1)&&(j2<I.getWidth()-1))
+    {
+      Tij=ptTemplate[point].val;
+      if(!blur)
+        IW=I.getValue(i2,j2);
+      else
+        IW=BI.getValue(i2,j2);
+      //IW=getSubPixBspline4(I,i2,j2);
+      erreur+=((double)Tij-IW)*((double)Tij-IW);
+      Nbpoint++;
+    }
+  }
+  ratioPixelIn=(double)Nbpoint/(double)templateSize;
+
+  if(Nbpoint==0)return 10e10;
+  return erreur/Nbpoint;
+}
+
+
+double vpTemplateTrackerSSD::getSSD(vpImage<unsigned char> &I,vpColVector &tp)
+{
+  double erreur=0;
+  double IW,Tij;
+  int i,j;
+  double i2,j2;
+  int Nbpoint=0;
+
+  if(pyrInitialised)
+  {
+    templateSize=templateSizePyr[0];
+    ptTemplate=ptTemplatePyr[0];
+  }
+
+  Warp->computeCoeff(tp);
+  for(unsigned int point=0;point<templateSize;point++)
+  {
+    i=ptTemplate[point].y;
+    j=ptTemplate[point].x;
+    X1[0]=j;X1[1]=i;
+    Warp->computeDenom(X1,tp);
+    Warp->warpX(X1,X2,tp);
+
+    j2=X2[0];i2=X2[1];
+    if((j2<I.getWidth()-1)&&(i2<I.getHeight()-1)&&(i2>0)&&(j2>0))
+    {
+      Tij=ptTemplate[point].val;
+      IW=I.getValue(i2,j2);
+      //IW=getSubPixBspline4(I,i2,j2);
+      erreur+=((double)Tij-IW)*((double)Tij-IW);
+      Nbpoint++;
+    }
+  }
+  if(Nbpoint==0)return 10e10;
+  return erreur/Nbpoint;
+}
diff --git a/src/tracking/template-tracker/ssd/vpTemplateTrackerSSD.h b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSD.h
new file mode 100644
index 00000000..00c6a92f
--- /dev/null
+++ b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSD.h
@@ -0,0 +1,84 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerSSD.h 4666 2014-02-16 16:21:33Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerSSD.h
+ \brief
+*/
+
+#ifndef vpTemplateTrackerSSD_hh
+#define vpTemplateTrackerSSD_hh
+
+#include <math.h>
+
+#include <visp/vpTemplateTracker.h>
+#include <visp/vpImage.h>
+#include <visp/vpDisplay.h>
+#include <visp/vpImageTools.h>
+#include <visp/vpImageIo.h>
+#include <visp/vpIoTools.h>
+#include <visp/vpImageTools.h>
+#include <visp/vpImageFilter.h>
+#include <visp/vpMath.h>
+#include <visp/vpList.h>
+#include <visp/vpHomography.h>
+
+class VISP_EXPORT vpTemplateTrackerSSD: public vpTemplateTracker
+{
+  protected:
+    vpRowVector     DI;
+    vpRowVector     temp;
+
+  protected:
+            double  getCost(const vpImage<unsigned char> &I, vpColVector &tp);
+            double  getCost(const vpImage<unsigned char> &I){ return getCost(I,p); }
+    virtual void    initHessienDesired(const vpImage<unsigned char> &I) = 0;
+    virtual void    trackNoPyr(const vpImage<unsigned char> &I) = 0;
+
+  public:
+    vpTemplateTrackerSSD(vpTemplateTrackerWarp *warp);
+
+    double  getSSD(vpImage<unsigned char> &I,vpColVector &tp);
+    void    setGain(double g){ gain=g; }
+};
+
+#endif
+
diff --git a/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDESM.cpp b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDESM.cpp
new file mode 100644
index 00000000..343680b0
--- /dev/null
+++ b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDESM.cpp
@@ -0,0 +1,332 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerSSDESM.cpp 4632 2014-02-03 17:06:40Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <visp/vpTemplateTrackerSSDESM.h>
+#include <visp/vpImageFilter.h>
+
+vpTemplateTrackerSSDESM::vpTemplateTrackerSSDESM(vpTemplateTrackerWarp *warp)
+  : vpTemplateTrackerSSD(warp), compoInitialised(false), HDir(), HInv(),
+    HLMDir(), HLMInv(), GDir(), GInv()
+{
+  useCompositionnal=false;
+  useInverse=false;
+
+  if(!Warp->isESMcompatible())
+    std::cerr<<"The selected warp function is not appropriate for the ESM algorithm..."<<std::endl;
+
+  HInv.resize(nbParam,nbParam);
+  HDir.resize(nbParam,nbParam);
+  HLMInv.resize(nbParam,nbParam);
+  HLMDir.resize(nbParam,nbParam);
+  GInv.resize(nbParam);
+  GDir.resize(nbParam);
+}
+
+void vpTemplateTrackerSSDESM::initHessienDesired(const vpImage<unsigned char> &I)
+{
+  initCompInverse(I);
+}
+
+void vpTemplateTrackerSSDESM::initCompInverse(const vpImage<unsigned char> &/*I*/)
+{
+  //std::cout<<"Initialise precomputed value of ESM with templateSize: "<< templateSize<<std::endl;
+  ptTemplateCompo=new vpTemplateTrackerPointCompo[templateSize];
+  int i,j;
+  //direct
+  for(unsigned int point=0;point<templateSize;point++)
+  {
+    i=ptTemplate[point].y;
+    j=ptTemplate[point].x;
+    ptTemplateCompo[point].dW=new double[2*nbParam];
+    X1[0]=j;X1[1]=i;
+    Warp->computeDenom(X1,p);
+    Warp->getdWdp0(i,j,ptTemplateCompo[point].dW);
+
+  }
+
+  //inverse
+  HInv=0;
+  for(unsigned int point=0;point<templateSize;point++)
+  {
+    i=ptTemplate[point].y;
+    j=ptTemplate[point].x;
+
+    X1[0]=j;X1[1]=i;
+    Warp->computeDenom(X1,p);
+    ptTemplate[point].dW=new double[nbParam];
+    Warp->getdW0(i,j,ptTemplate[point].dy,ptTemplate[point].dx,ptTemplate[point].dW);
+
+    for(unsigned int it=0;it<nbParam;it++)
+      for(unsigned int jt=0;jt<nbParam;jt++)
+        HInv[it][jt]+=ptTemplate[point].dW[it]*ptTemplate[point].dW[jt];
+  }
+  vpMatrix::computeHLM(HInv,lambdaDep,HLMInv);
+
+compoInitialised=true;
+}
+
+void vpTemplateTrackerSSDESM::trackNoPyr(const vpImage<unsigned char> &I)
+{
+  double erreur=0;
+  int Nbpoint=0;
+
+  if(blur)
+    vpImageFilter::filter(I, BI,fgG,taillef);
+  vpImageFilter::getGradXGauss2D(I, dIx, fgG,fgdG,taillef);
+  vpImageFilter::getGradYGauss2D(I, dIy, fgG,fgdG,taillef);
+
+  double IW,dIWx,dIWy;
+  double Tij;
+  unsigned int iteration=0;
+  int i,j;
+  double i2,j2;
+  double alpha=2.;
+  do
+  {
+    Nbpoint=0;
+    erreur=0;
+    dp=0;
+    HDir=0;
+    GDir=0;
+    GInv=0;
+    Warp->computeCoeff(p);
+    for(unsigned int point=0;point<templateSize;point++)
+    {
+      i=ptTemplate[point].y;
+      j=ptTemplate[point].x;
+      X1[0]=j;X1[1]=i;
+
+      Warp->computeDenom(X1,p);
+      Warp->warpX(X1,X2,p);
+
+      j2=X2[0];i2=X2[1];
+      if((i2>=0)&&(j2>=0)&&(i2<I.getHeight()-1)&&(j2<I.getWidth()-1))
+      {
+        //INVERSE
+        Tij=ptTemplate[point].val;
+        if(!blur)
+          IW=I.getValue(i2,j2);
+        else
+          IW=BI.getValue(i2,j2);
+        Nbpoint++;
+        double er=(Tij-IW);
+        for(unsigned int it=0;it<nbParam;it++)
+          GInv[it]+=er*ptTemplate[point].dW[it];
+
+        erreur+=er*er;
+
+        //DIRECT
+        //dIWx=dIx.getValue(i2,j2);
+        //dIWy=dIy.getValue(i2,j2);
+
+        dIWx=dIx.getValue(i2,j2)+ptTemplate[point].dx;
+        dIWy=dIy.getValue(i2,j2)+ptTemplate[point].dy;
+
+        //Calcul du Hessien
+        //Warp->dWarp(X1,X2,p,dW);
+        Warp->dWarpCompo(X1,X2,p,ptTemplateCompo[point].dW,dW);
+
+        double *tempt=new double[nbParam];
+        for(unsigned int it=0;it<nbParam;it++)
+          tempt[it]=dW[0][it]*dIWx+dW[1][it]*dIWy;
+
+        for(unsigned int it=0;it<nbParam;it++)
+          for(unsigned int jt=0;jt<nbParam;jt++)
+            HDir[it][jt]+=tempt[it]*tempt[jt];
+
+        for(unsigned int it=0;it<nbParam;it++)
+          GDir[it]+=er*tempt[it];
+        delete[] tempt;
+      }
+
+
+    }
+    vpMatrix::computeHLM(HDir,lambdaDep,HLMDir);
+    //if(Nbpoint==0)std::cout<<"plus de point dans template suivi"<<std::endl;
+    try
+    {
+      //dp=(HLMInv+HLMDir).inverseByLU()*(GInv+GDir);
+      //dp=HLMInv.inverseByLU()*GInv+HLMDir.inverseByLU()*GDir;
+      //dp=HLMInv.inverseByLU()*GInv;
+      dp=(HLMDir).inverseByLU()*(GDir);
+    }
+    catch(...)
+    {
+      std::cout<<"probleme inversion"<<std::endl;
+      break;
+    }
+
+    dp=gain*dp;
+    if(useBrent)
+    {
+      if(! Nbpoint) {
+        throw(vpException(vpException::divideByZeroError,
+              "Cannot compute optimal Brent gain: size = 0")) ;
+      }
+
+      alpha=2.;
+      computeOptimalBrentGain(I,p,erreur/Nbpoint,dp,alpha);
+      dp=alpha*dp;
+    }
+
+    //Warp->pRondp(p,dp,p);
+    p+=dp;
+    iteration++;
+
+  }
+  while( (iteration < iterationMax));
+
+  nbIteration=iteration;
+}
+
+
+/*void vpTemplateTrackerSSDESM::InitCompInverse(vpImage<unsigned char> &I)
+{
+  ptTempateCompo=new vpTemplateTrackerPointCompo[taille_template];
+  int i,j;
+  for(int point=0;point<taille_template;point++)
+  {
+    i=ptTemplate[point].y;
+    j=ptTemplate[point].x;
+    ptTempateCompo[point].dW=new double[2*nbParam];
+    Warp->getdWdp0(i,j,ptTempateCompo[point].dW);
+  }
+
+}
+
+void vpTemplateTrackerSSDESM::track(vpImage<unsigned char> &I)
+{
+  double erreur=0,erreur_prec=1e38;
+  int Nbpoint=0;
+
+  int taillefiltre=taille_filtre_dgaussien;
+  double *fg=new double[taillefiltre+1] ;
+  getGaussianDerivativeKernel(fg, taillefiltre) ;
+  getGradX(I, dIx,fg,taillefiltre);
+  getGradY(I, dIy,fg,taillefiltre);
+  delete[] fg;
+
+  vpColVector dpinv(nbParam);
+  double lambda=lambdaDep;
+  double IW,dIWx,dIWy;
+  double Tij;
+  int iteration=0;
+  int i,j;
+  double i2,j2;
+  vpTemplateTrackerPoint *pt;
+  do
+  {
+    Nbpoint=0;
+    erreur_prec=erreur;
+    erreur=0;
+    dp=0;
+    HDir=0;
+    GDir=0;
+    GInv=0;
+    Warp->ComputeCoeff(p);
+    for(int point=0;point<taille_template;point++)
+    {
+      pt=&ptTemplate[point];
+      i=pt->y;
+      j=pt->x;
+      X1[0]=j;X1[1]=i;
+
+      Warp->ComputeDenom(X1,p);
+      Warp->warpX(X1,X2,p);
+
+      j2=X2[0];i2=X2[1];
+      if((j2<I.getWidth())&&(i2<I.getHeight())&&(i2>0)&&(j2>0))
+      {
+        //INVERSE
+        Tij=pt->val;
+        IW=I.getPixelBI(j2,i2);
+        Nbpoint++;
+        double er=(Tij-IW);
+        for(int it=0;it<nbParam;it++)
+          GInv[it]+=er*ptTemplate[point].dW[it];
+
+        erreur+=er*er;
+
+        //DIRECT COMPO
+        Tij=ptTemplate[point].val;
+        IW=I.getPixelBI(j2,i2);
+        dIWx=dIx.getPixelBI(j2,i2);
+        dIWy=dIy.getPixelBI(j2,i2);
+        Nbpoint++;
+        Warp->dWarpCompo(X1,X2,p,ptTempateCompo[point].dW,dW);
+        double *tempt=new double[nbParam];
+        for(int it=0;it<nbParam;it++)
+          tempt[it] =dW[0][it]*dIWx+dW[1][it]*dIWy;
+
+        for(int it=0;it<nbParam;it++)
+          for(int jt=0;jt<nbParam;jt++)
+            HDir[it][jt]+=tempt[it]*tempt[jt];
+
+        for(int it=0;it<nbParam;it++)
+          GDir[it]+=er*tempt[it];
+
+        delete[] tempt;
+      }
+
+
+    }
+    if(Nbpoint==0)std::cout<<"plus de point dans template suivi"<<std::endl;
+    try
+    {
+      dp=(HInv+HDir).inverseByLU()*(GInv+GDir);
+    }
+    catch(...)
+    {
+      std::cout<<"probleme inversion"<<std::endl;
+      break;
+    }
+
+    if(Compare)write_infos(p,erreur/Nbpoint);
+
+    p+=Gain*dp;
+    iteration++;
+
+  }
+  while( (iteration < IterationMax));
+
+  NbIteration=iteration;
+}*/
+
diff --git a/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDESM.h b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDESM.h
new file mode 100644
index 00000000..3ab98a1d
--- /dev/null
+++ b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDESM.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerSSDESM.h 4574 2014-01-09 08:48:51Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerSSDESM.h
+ \brief
+*/
+
+#ifndef vpTemplateTrackerSSDESM_hh
+#define vpTemplateTrackerSSDESM_hh
+
+#include <visp/vpTemplateTrackerSSD.h>
+
+class VISP_EXPORT vpTemplateTrackerSSDESM: public vpTemplateTrackerSSD
+{
+  protected:
+    bool        compoInitialised;
+    vpMatrix    HDir;
+    vpMatrix    HInv;
+    vpMatrix    HLMDir;
+    vpMatrix    HLMInv;
+    vpColVector GDir;
+    vpColVector GInv;
+    
+  protected:
+    void initHessienDesired(const vpImage<unsigned char> &I);
+    void initCompInverse(const vpImage<unsigned char> &I);
+    void trackNoPyr(const vpImage<unsigned char> &I);
+
+  public:
+    vpTemplateTrackerSSDESM(vpTemplateTrackerWarp *warp);
+};
+#endif
diff --git a/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardAdditional.cpp b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardAdditional.cpp
new file mode 100644
index 00000000..510ab358
--- /dev/null
+++ b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardAdditional.cpp
@@ -0,0 +1,211 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerSSDForwardAdditional.cpp 4661 2014-02-10 19:34:58Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+
+#include <limits>   // numeric_limits
+
+#include <visp/vpTemplateTrackerSSDForwardAdditional.h>
+#include <visp/vpImageTools.h>
+
+vpTemplateTrackerSSDForwardAdditional::vpTemplateTrackerSSDForwardAdditional(vpTemplateTrackerWarp *warp)
+  : vpTemplateTrackerSSD(warp), minimizationMethod(USE_NEWTON), p_prec(), G_prec(), KQuasiNewton()
+{
+  useCompositionnal=false;
+}
+
+void vpTemplateTrackerSSDForwardAdditional::trackNoPyr(const vpImage<unsigned char> &I)
+{
+  double erreur=0;
+  int Nbpoint=0;
+
+  if(blur)
+    vpImageFilter::filter(I, BI,fgG,taillef);
+  vpImageFilter::getGradXGauss2D(I, dIx, fgG,fgdG,taillef);
+  vpImageFilter::getGradYGauss2D(I, dIy, fgG,fgdG,taillef);
+
+  dW=0;
+
+  double lambda=lambdaDep;
+  double IW,dIWx,dIWy;
+  double Tij;
+  unsigned int iteration=0;
+  int i,j;
+  double i2,j2;
+  double alpha=2.;
+  do
+  {
+    Nbpoint=0;
+    erreur=0;
+    G=0;
+    H=0 ;
+    Warp->computeCoeff(p);
+    for(unsigned int point=0;point<templateSize;point++)
+    {
+      i=ptTemplate[point].y;
+      j=ptTemplate[point].x;
+      X1[0]=j;X1[1]=i;
+
+      Warp->computeDenom(X1,p);
+      Warp->warpX(X1,X2,p);
+
+      j2=X2[0];i2=X2[1];
+      if((i2>=0)&&(j2>=0)&&(i2<I.getHeight()-1)&&(j2<I.getWidth()-1))
+      {
+        Tij=ptTemplate[point].val;
+
+        if(!blur)
+          IW=I.getValue(i2,j2);
+        else
+          IW=BI.getValue(i2,j2);
+
+        dIWx=dIx.getValue(i2,j2);
+        dIWy=dIy.getValue(i2,j2);
+        Nbpoint++;
+        //Calcul du Hessien
+        Warp->dWarp(X1,X2,p,dW);
+        double *tempt=new double[nbParam];
+        for(unsigned int it=0;it<nbParam;it++)
+          tempt[it]=dW[0][it]*dIWx+dW[1][it]*dIWy;
+
+        for(unsigned int it=0;it<nbParam;it++)
+          for(unsigned int jt=0;jt<nbParam;jt++)
+            H[it][jt]+=tempt[it]*tempt[jt];
+
+        double er=(Tij-IW);
+        for(unsigned int it=0;it<nbParam;it++)
+          G[it]+=er*tempt[it];
+
+        erreur+=(er*er);
+        delete[] tempt;
+      }
+
+
+    }
+    if(Nbpoint==0)std::cout<<"plus de point dans template suivi"<<std::endl;
+
+    vpMatrix::computeHLM(H,lambda,HLM);
+    try
+    {
+      dp=1.*HLM.inverseByLU()*G;
+    }
+    catch(...)
+    {
+      std::cout<<"probleme inversion"<<std::endl;
+      break;
+    }
+
+    switch(minimizationMethod)
+    {
+    case vpTemplateTrackerSSDForwardAdditional::USE_LMA:
+    {
+      vpColVector p_test_LMA(nbParam);
+      p_test_LMA=p+1.*dp;
+      erreur=-getCost(I,p);
+      double erreur_LMA=-getCost(I,p_test_LMA);
+      if(erreur_LMA<erreur)
+      {
+        p=p_test_LMA;
+        lambda=(lambda/10.<1e-6)?lambda/10.:1e-6;
+      }
+      else
+      {
+        lambda=(lambda*10.<1e6)?1e6:lambda*10.;
+      }
+    }
+      break;
+    case vpTemplateTrackerSSDForwardAdditional::USE_GRADIENT:
+    {
+      dp=gain*0.000001*G;
+      if(useBrent)
+      {
+        alpha=2.;
+        computeOptimalBrentGain(I,p,erreur,dp,alpha);
+        dp=alpha*dp;
+      }
+      p+=1.*dp;
+      break;
+    }
+
+    case vpTemplateTrackerSSDForwardAdditional::USE_QUASINEWTON:
+    {
+      double s_scal_y;
+      if(iterationGlobale!=0)
+      {
+        vpColVector s_quasi=p-p_prec;
+        vpColVector y_quasi=G-G_prec;
+        s_scal_y=s_quasi.t()*y_quasi;
+        //if(s_scal_y!=0)//BFGS
+        //	KQuasiNewton=KQuasiNewton-(s_quasi*y_quasi.t()*KQuasiNewton+KQuasiNewton*y_quasi*s_quasi.t())/s_scal_y+(1.+y_quasi.t()*(KQuasiNewton*y_quasi)/s_scal_y)*s_quasi*s_quasi.t()/s_scal_y;
+        //if(s_scal_y!=0.0)//DFP
+        if(std::fabs(s_scal_y) > std::numeric_limits<double>::epsilon()) //DFP
+          KQuasiNewton=KQuasiNewton+0.001*(s_quasi*s_quasi.t()/s_scal_y-KQuasiNewton*y_quasi*y_quasi.t()*KQuasiNewton/(y_quasi.t()*KQuasiNewton*y_quasi));
+      }
+      dp=-KQuasiNewton*G;
+      p_prec=p;
+      G_prec=G;
+      p-=1.01*dp;
+    }
+      break;
+
+    case vpTemplateTrackerSSDForwardAdditional::USE_NEWTON:
+    default:
+    {
+      if(useBrent)
+      {
+        alpha=2.;
+        computeOptimalBrentGain(I,p,erreur,dp,alpha);
+        dp=alpha*dp;
+      }
+
+      p+=1.*dp;
+      break;
+    }
+    }
+
+    iteration++;
+    iterationGlobale++;
+  }
+  while( /*( erreur_prec-erreur<50) && */(iteration < iterationMax));
+
+  //std::cout<<"erreur "<<erreur<<std::endl;
+  nbIteration=iteration;
+}
+
diff --git a/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardAdditional.h b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardAdditional.h
new file mode 100644
index 00000000..4d57db07
--- /dev/null
+++ b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardAdditional.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerSSDForwardAdditional.h 4574 2014-01-09 08:48:51Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerSSDForwardAdditional.h
+ \brief
+*/
+
+#ifndef vpTemplateTrackerSSDForwardAdditional_hh
+#define vpTemplateTrackerSSDForwardAdditional_hh
+
+#include <visp/vpTemplateTrackerSSD.h>
+
+/*!
+ The algorithm implemented in this class is described in \cite Baker04a.
+ */
+class VISP_EXPORT vpTemplateTrackerSSDForwardAdditional: public vpTemplateTrackerSSD
+{
+  public:
+  /*! Minimization method. */
+  typedef enum {
+    USE_NEWTON,
+    USE_LMA,
+    USE_GRADIENT,
+    USE_QUASINEWTON
+  } vpMinimizationTypeSSDForwardAdditional;
+
+  private:
+    vpMinimizationTypeSSDForwardAdditional minimizationMethod;
+    //valeur pour calculer Quasi_Newton
+    vpColVector        p_prec;
+    vpColVector        G_prec;
+    vpMatrix           KQuasiNewton;
+
+  protected:
+    void  initHessienDesired(const vpImage<unsigned char> &/*I*/){}
+    void  trackNoPyr(const vpImage<unsigned char> &I);
+
+  public:
+          vpTemplateTrackerSSDForwardAdditional(vpTemplateTrackerWarp *warp);
+
+    void  setMinimizationMethod(vpMinimizationTypeSSDForwardAdditional method){minimizationMethod=method;}
+};
+#endif
+
diff --git a/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardCompositional.cpp b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardCompositional.cpp
new file mode 100644
index 00000000..53655fe4
--- /dev/null
+++ b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardCompositional.cpp
@@ -0,0 +1,175 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerSSDForwardCompositional.cpp 4632 2014-02-03 17:06:40Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <visp/vpTemplateTrackerSSDForwardCompositional.h>
+#include <visp/vpImageFilter.h>
+
+vpTemplateTrackerSSDForwardCompositional::vpTemplateTrackerSSDForwardCompositional(vpTemplateTrackerWarp *warp)
+  : vpTemplateTrackerSSD(warp), compoInitialised(false)
+{
+}
+
+void vpTemplateTrackerSSDForwardCompositional::initCompo(const vpImage<unsigned char> &/*I*/)
+{
+ // std::cout<<"Initialise precomputed value of Compositionnal Direct"<<std::endl;
+  int i,j;
+  for(unsigned int point=0;point<templateSize;point++)
+  {
+    i=ptTemplate[point].y;
+    j=ptTemplate[point].x;
+    ptTemplate[point].dW=new double[2*nbParam];
+    X1[0]=j;X1[1]=i;
+    Warp->computeDenom(X1,p);
+    Warp->getdWdp0(i,j,ptTemplate[point].dW);
+
+  }
+  compoInitialised=true;
+}
+
+void vpTemplateTrackerSSDForwardCompositional::initHessienDesired(const vpImage<unsigned char> &I)
+{
+  initCompo(I);
+}
+
+void vpTemplateTrackerSSDForwardCompositional::trackNoPyr(const vpImage<unsigned char> &I)
+{
+  if(!compoInitialised)
+    std::cout<<"Compositionnal tracking no initialised\nUse InitCompo(vpImage<unsigned char> &I) function"<<std::endl;
+  double erreur=0;
+  int Nbpoint=0;
+
+  if(blur)
+    vpImageFilter::filter(I, BI,fgG,taillef);
+  vpImageFilter::getGradXGauss2D(I, dIx, fgG,fgdG,taillef);
+  vpImageFilter::getGradYGauss2D(I, dIy, fgG,fgdG,taillef);
+
+  dW=0;
+
+  double lambda=lambdaDep;
+  double IW,dIWx,dIWy;
+  double Tij;
+  unsigned int iteration=0;
+  int i,j;
+  double i2,j2;
+  double alpha=2.;
+  do
+  {
+    Nbpoint=0;
+    erreur=0;
+    G=0;
+    H=0 ;
+    Warp->computeCoeff(p);
+    for(unsigned int point=0;point<templateSize;point++)
+    {
+      i=ptTemplate[point].y;
+      j=ptTemplate[point].x;
+      X1[0]=j;X1[1]=i;
+
+      Warp->computeDenom(X1,p);
+      Warp->warpX(X1,X2,p);
+
+      j2=X2[0];i2=X2[1];
+      if((i2>=0)&&(j2>=0)&&(i2<I.getHeight()-1)&&(j2<I.getWidth()-1))
+      {
+        Tij=ptTemplate[point].val;
+        if(!blur)
+          IW=I.getValue(i2,j2);
+        else
+          IW=BI.getValue(i2,j2);
+        dIWx=dIx.getValue(i2,j2);
+        dIWy=dIy.getValue(i2,j2);
+        Nbpoint++;
+        //Calcul du Hessien
+        /*Warp->dWarp(X1,X2,p,dW);
+        double *tempt=new double[nbParam];
+        for(int it=0;it<nbParam;it++)
+        tempt[it]=dW[0][it]*dIWx+dW[1][it]*dIWy;*/
+
+        Warp->dWarpCompo(X1,X2,p,ptTemplate[point].dW,dW);
+
+        double *tempt=new double[nbParam];
+        for(unsigned int it=0;it<nbParam;it++)
+          tempt[it] =dW[0][it]*dIWx+dW[1][it]*dIWy;
+
+        for(unsigned int it=0;it<nbParam;it++)
+          for(unsigned int jt=0;jt<nbParam;jt++)
+            H[it][jt]+=tempt[it]*tempt[jt];
+
+        double er=(Tij-IW);
+        for(unsigned int it=0;it<nbParam;it++)
+          G[it]+=er*tempt[it];
+
+        erreur+=(er*er);
+        delete[] tempt;
+      }
+
+
+    }
+    if(Nbpoint==0)std::cout<<"plus de point dans template suivi"<<std::endl;
+
+    vpMatrix::computeHLM(H,lambda,HLM);
+
+    try
+    {
+      dp=1.*HLM.inverseByLU()*G;
+    }
+    catch(...)
+    {
+      std::cout<<"probleme inversion"<<std::endl;
+      break;
+    }
+
+    dp=gain*dp;
+    if(useBrent)
+    {
+      alpha=2.;
+      computeOptimalBrentGain(I,p,erreur/Nbpoint,dp,alpha);
+      dp=alpha*dp;
+    }
+    Warp->pRondp(p,dp,p);
+    //p+=Gain*dp;
+    iteration++;
+  }
+  while( /*( erreur_prec-erreur<50) &&*/ (iteration < iterationMax));
+
+  nbIteration=iteration;
+}
+
diff --git a/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardCompositional.h b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardCompositional.h
new file mode 100644
index 00000000..76134fe7
--- /dev/null
+++ b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDForwardCompositional.h
@@ -0,0 +1,68 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerSSDForwardCompositional.h 4574 2014-01-09 08:48:51Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerSSDForwardCompositional.h
+ \brief
+*/
+
+#ifndef vpTemplateTrackerSSDForwardCompositional_hh
+#define vpTemplateTrackerSSDForwardCompositional_hh
+
+#include <visp/vpTemplateTrackerSSD.h>
+
+/*!
+ The algorithm implemented in this class is described in \cite Baker04a.
+ */
+class VISP_EXPORT vpTemplateTrackerSSDForwardCompositional: public vpTemplateTrackerSSD
+{
+  protected:
+    bool compoInitialised;
+
+  protected:
+    void initHessienDesired(const vpImage<unsigned char> &I);
+    void initCompo(const vpImage<unsigned char> &I);
+    void trackNoPyr(const vpImage<unsigned char> &I);
+
+  public:
+    vpTemplateTrackerSSDForwardCompositional(vpTemplateTrackerWarp *warp);
+};
+#endif
diff --git a/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDInverseCompositional.cpp b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDInverseCompositional.cpp
new file mode 100644
index 00000000..4b1aa28a
--- /dev/null
+++ b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDInverseCompositional.cpp
@@ -0,0 +1,235 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerSSDInverseCompositional.cpp 4672 2014-02-17 09:01:17Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <visp/vpTemplateTrackerSSDInverseCompositional.h>
+#include <visp/vpImageTools.h>
+
+vpTemplateTrackerSSDInverseCompositional::vpTemplateTrackerSSDInverseCompositional(vpTemplateTrackerWarp *warp)
+  : vpTemplateTrackerSSD(warp), compoInitialised(false), HInv(), HCompInverse(), useTemplateSelect(false),
+    evolRMS(0), x_pos(), y_pos(), threshold_RMS(1e-8)
+{
+  useInverse=true;
+  HInv.resize(nbParam,nbParam);
+  HCompInverse.resize(nbParam,nbParam);
+}
+
+void vpTemplateTrackerSSDInverseCompositional::initCompInverse(const vpImage<unsigned char> &/*I*/)
+{
+
+  H=0;
+  int i,j;
+
+  for(unsigned int point=0;point<templateSize;point++)
+  {
+    if((!useTemplateSelect)||(ptTemplateSelect[point]))
+    {
+      i=ptTemplate[point].y;
+      j=ptTemplate[point].x;
+      X1[0]=j;X1[1]=i;
+      Warp->computeDenom(X1,p);
+      ptTemplate[point].dW=new double[nbParam];
+
+      Warp->getdW0(i,j,ptTemplate[point].dy,ptTemplate[point].dx,ptTemplate[point].dW);
+
+      for(unsigned int it=0;it<nbParam;it++)
+        for(unsigned int jt=0;jt<nbParam;jt++)
+          H[it][jt]+=ptTemplate[point].dW[it]*ptTemplate[point].dW[jt];
+    }
+
+  }
+  HInv=H;
+  vpMatrix HLMtemp(nbParam,nbParam);
+  vpMatrix::computeHLM(H,lambdaDep,HLMtemp);
+
+  HCompInverse.resize(nbParam,nbParam);
+  HCompInverse=HLMtemp.inverseByLU();
+  //std::cout<<Hinverse<<std::endl;
+  vpColVector dWtemp(nbParam);
+  vpColVector HiGtemp(nbParam);
+
+  for(unsigned int point=0;point<templateSize;point++)
+  {
+    if((!useTemplateSelect)||(ptTemplateSelect[point]))
+    {
+      i=ptTemplate[point].y;
+      j=ptTemplate[point].x;
+      for(unsigned int it=0;it<nbParam;it++)
+        dWtemp[it]=ptTemplate[point].dW[it];
+      
+      HiGtemp	= -1.*HCompInverse*dWtemp;
+      ptTemplate[point].HiG=new double[nbParam];
+
+      for(unsigned int it=0;it<nbParam;it++)
+        ptTemplate[point].HiG[it]=HiGtemp[it];
+    }
+  }
+  compoInitialised=true;
+}
+
+void vpTemplateTrackerSSDInverseCompositional::initHessienDesired(const vpImage<unsigned char> &I)
+{
+  initCompInverse(I);
+}
+
+void vpTemplateTrackerSSDInverseCompositional::trackNoPyr(const vpImage<unsigned char> &I)
+{
+  double erreur=0;
+  int Nbpoint=0;
+  if(blur)
+    vpImageFilter::filter(I, BI,fgG,taillef);
+
+  vpColVector dpinv(nbParam);
+  double IW;
+  double Tij;
+  unsigned int iteration=0;
+  int i,j;
+  double i2,j2;
+  double alpha=2.;
+  //vpTemplateTrackerPointtest *pt;
+  initPosEvalRMS(p);
+
+  vpTemplateTrackerPoint *pt;
+  do
+  {
+    Nbpoint=0;
+    erreur=0;
+    dp=0;
+    Warp->computeCoeff(p);
+    for(unsigned int point=0;point<templateSize;point++)
+    {
+      if((!useTemplateSelect)||(ptTemplateSelect[point]))
+      {
+        //pt=&ptTemplatetest[point];
+        pt=&ptTemplate[point];
+        i=pt->y;
+        j=pt->x;
+        X1[0]=j;X1[1]=i;
+        Warp->computeDenom(X1,p);
+        Warp->warpX(X1,X2,p);
+        j2=X2[0];i2=X2[1];
+
+        if((i2>=0)&&(j2>=0)&&(i2<I.getHeight()-1)&&(j2<I.getWidth()-1))
+        {
+          Tij=pt->val;
+          if(!blur)
+            IW=I.getValue(i2,j2);
+          else
+            IW=BI.getValue(i2,j2);
+          Nbpoint++;
+          double er=(Tij-IW);
+          for(unsigned int it=0;it<nbParam;it++)
+            dp[it]+=er*pt->HiG[it];
+
+          erreur+=er*er;
+        }
+      }
+    }
+    if(Nbpoint==0)std::cout<<"plus de point dans template suivi"<<std::endl;
+    dp=gain*dp;
+    //std::cout<<erreur/Nbpoint<<","<<GetCost(I,p)<<std::endl;
+    if(useBrent)
+    {
+      alpha=2.;
+      computeOptimalBrentGain(I,p,erreur/Nbpoint,dp,alpha);
+      dp=alpha*dp;
+    }
+    Warp->getParamInverse(dp,dpinv);
+    Warp->pRondp(p,dpinv,p);
+    iteration++;
+
+    computeEvalRMS(p);
+  }
+  while(/*( erreur_prec-erreur<50) &&*/ (iteration < iterationMax)&&(evolRMS>threshold_RMS));
+
+  nbIteration=iteration;
+  deletePosEvalRMS();
+}
+
+void vpTemplateTrackerSSDInverseCompositional::initPosEvalRMS(vpColVector &p_)
+{
+  unsigned int nb_corners = zoneTracked->getNbTriangle() * 3;
+  x_pos.resize(nb_corners);
+  y_pos.resize(nb_corners);
+
+  Warp->computeCoeff(p_);
+  vpTemplateTrackerTriangle triangle;
+
+  for(unsigned int i=0;i<zoneTracked->getNbTriangle();i++)
+  {
+    zoneTracked->getTriangle(i, triangle);
+    for (unsigned int j=0; j<3; j++) {
+      triangle.getCorner(j, X1[0], X1[1]);
+
+      Warp->computeDenom(X1,p_);
+      Warp->warpX(X1,X2,p_);
+      x_pos[i*3+j]=X2[0];
+      y_pos[i*3+j]=X2[1];
+    }
+  }
+}
+
+void vpTemplateTrackerSSDInverseCompositional::computeEvalRMS(const vpColVector &p_)
+{
+  unsigned int nb_corners = zoneTracked->getNbTriangle() * 3;
+
+  Warp->computeCoeff(p_);
+  evolRMS=0;
+  vpTemplateTrackerTriangle triangle;
+
+  for(unsigned int i=0;i<zoneTracked->getNbTriangle();i++)
+  {
+    zoneTracked->getTriangle(i, triangle);
+    for (unsigned int j=0; j<3; j++) {
+      triangle.getCorner(j, X1[0], X1[1]);
+
+      Warp->computeDenom(X1,p_);
+      Warp->warpX(X1,X2,p_);
+      evolRMS+=(x_pos[i*3+j]-X2[0])*(x_pos[i*3+j]-X2[0])+(y_pos[i*3+j]-X2[1])*(y_pos[i*3+j]-X2[1]);
+      x_pos[i*3+j]=X2[0];
+      y_pos[i*3+j]=X2[1];
+    }
+  }
+  evolRMS=evolRMS/nb_corners;
+}
+
+void vpTemplateTrackerSSDInverseCompositional::deletePosEvalRMS()
+{
+}
diff --git a/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDInverseCompositional.h b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDInverseCompositional.h
new file mode 100644
index 00000000..c2c39e18
--- /dev/null
+++ b/src/tracking/template-tracker/ssd/vpTemplateTrackerSSDInverseCompositional.h
@@ -0,0 +1,85 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerSSDInverseCompositional.h 4672 2014-02-17 09:01:17Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerSSDInverseCompositional.h
+ \brief
+*/
+#ifndef vpTemplateTrackerSSDInverseCompositional_hh
+#define vpTemplateTrackerSSDInverseCompositional_hh
+
+#include <vector>
+
+#include <visp/vpTemplateTrackerSSD.h>
+
+/*!
+ The algorithm implemented in this class is described in \cite Baker04a.
+ */
+class VISP_EXPORT vpTemplateTrackerSSDInverseCompositional: public vpTemplateTrackerSSD
+{
+  protected:
+    bool      compoInitialised;
+    vpMatrix  HInv;
+    vpMatrix  HCompInverse;
+    bool      useTemplateSelect;//use only the strong gradient pixels to compute the Jabocian
+    //pour eval evolRMS
+    double    evolRMS;
+    std::vector<double> x_pos;
+    std::vector<double> y_pos;
+    double    threshold_RMS;
+    
+  protected:
+    void  initHessienDesired(const vpImage<unsigned char> &I);
+    void  initCompInverse(const vpImage<unsigned char> &I);
+    void  trackNoPyr(const vpImage<unsigned char> &I);
+    void  deletePosEvalRMS();
+    void  computeEvalRMS(const vpColVector &p);
+    void  initPosEvalRMS(vpColVector &p);
+
+  public:
+          vpTemplateTrackerSSDInverseCompositional(vpTemplateTrackerWarp *warp);
+
+    /*! Use only the strong gradient pixels to compute the Jabobian. By default this feature is disabled. */
+    void  setUseTemplateSelect(bool b) {useTemplateSelect = b;}
+    void  setThresholdRMS(double threshold){threshold_RMS=threshold;}
+};
+#endif
+
diff --git a/src/tracking/template-tracker/tools/vpTemplateTrackerBSpline.cpp b/src/tracking/template-tracker/tools/vpTemplateTrackerBSpline.cpp
new file mode 100644
index 00000000..7e3c3364
--- /dev/null
+++ b/src/tracking/template-tracker/tools/vpTemplateTrackerBSpline.cpp
@@ -0,0 +1,82 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerBSpline.cpp 4574 2014-01-09 08:48:51Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <visp/vpTemplateTrackerBSpline.h>
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+double vpTemplateTrackerBSpline::getSubPixBspline4(const vpImage<double> &I, double r, double t)
+{
+  double res=0;
+  int cr=(int)(r);
+  int ct=(int)(t);
+  double er=(double)r-cr;
+  double et=(double)t-ct;
+  int height=(int)I.getHeight();//r
+  int width=(int)I.getWidth();//t
+  int tr,tt;
+  for(int ir=-1;ir<=2;ir++)
+  {
+    tr=ir+cr;
+    for(int it=-1;it<=2;it++)
+    {
+      tt=it+ct;
+      if(tr>=0 && tr <height && tt>=0 && tt <width)
+        res+=Bspline4((double)ir-er)*Bspline4((double)it-et)*I[tr][tt];
+    }
+  }
+  return res;
+}
+
+double vpTemplateTrackerBSpline::Bspline4(double diff)
+{
+  //double result;
+  double aDiff=vpMath::abs(diff);
+  if(aDiff<1.)
+    return (aDiff*aDiff*aDiff/2.-aDiff*aDiff+4./6.);
+  //return (0.5*(1.-aDiff)*(1.-aDiff)*(1.-aDiff)+0.5*(1.-aDiff)*(1.-aDiff)-0.5*(1.-aDiff)+1./6.);
+  else if(aDiff<2.)
+    return ((2.-aDiff)*(2.-aDiff)*(2.-aDiff)/6.);
+  else
+    return 0;
+}
+
+#endif
diff --git a/example/manual/image-manipulation/manGrab1394-1.cpp b/src/tracking/template-tracker/tools/vpTemplateTrackerBSpline.h
similarity index 51%
rename from example/manual/image-manipulation/manGrab1394-1.cpp
rename to src/tracking/template-tracker/tools/vpTemplateTrackerBSpline.h
index ae0f2615..7a372d30 100644
--- a/example/manual/image-manipulation/manGrab1394-1.cpp
+++ b/src/tracking/template-tracker/tools/vpTemplateTrackerBSpline.h
@@ -1,10 +1,10 @@
 /****************************************************************************
  *
- * $Id: manGrab1394-1.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpTemplateTrackerBSpline.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
- * 
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * ("GPL") version 2 as published by the Free Software Foundation.
@@ -12,11 +12,11 @@
  * distribution for additional information about the GNU GPL.
  *
  * For using ViSP with software that can not be combined with the GNU
- * GPL, please contact INRIA about acquiring a ViSP Professional 
+ * GPL, please contact INRIA about acquiring a ViSP Professional
  * Edition License.
  *
  * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
- * 
+ *
  * This software was developed at:
  * INRIA Rennes - Bretagne Atlantique
  * Campus Universitaire de Beaulieu
@@ -26,67 +26,39 @@
  *
  * If you have questions regarding the use of this file, please contact
  * INRIA at visp@inria.fr
- * 
+ *
  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- *
  * Description:
- * Images grabbing example.
+ * Template tracker.
  *
  * Authors:
- * Anthony Saunier
+ * Amaury Dame
+ * Aurelien Yol
  * Fabien Spindler
  *
  *****************************************************************************/
 /*!
-  \file manGrab1394-1.cpp
-
-  \brief Images grabbing example with the vp1394Grabber class.
-
- */
-/*!
-  \example manGrab1394-1.cpp
+ \file vpTemplateTrackerBSpline.h
+ \brief
+*/
 
-  \brief Images grabbing example with the vp1394Grabber class.
-
- */
+#ifndef vpTemplateTrackerBSpline_hh
+#define vpTemplateTrackerBSpline_hh
 
 #include <visp/vpConfig.h>
-
-#include <stdlib.h>
-#include <stdio.h>
 #include <visp/vpImage.h>
-#include <visp/vp1394Grabber.h>
+#include <visp/vpMath.h>
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 
-int main()
+class VISP_EXPORT vpTemplateTrackerBSpline
 {
-#ifdef VISP_HAVE_DC1394_1
-  unsigned int ncameras; // Number of cameras on the bus
-  vp1394Grabber g;
-  g.getNumCameras(ncameras);
-  vpImage<unsigned char> *I = new vpImage<unsigned char> [ncameras];
-  
-  // If the first camera supports MODE_640x480_YUV422 video mode
-  g.setCamera(0);
-  g.setFormat(FORMAT_VGA_NONCOMPRESSED);
-  g.setMode(MODE_640x480_YUV422);
-  
-  // If all cameras support 30 fps acquisition
-  for (unsigned int camera=0; camera < ncameras; camera ++) {
-    g.setCamera(camera);
-    g.setFramerate(FRAMERATE_30);
-  }
-  
-  for ( ; ; ) {
-    for (unsigned int camera=0; camera < ncameras; camera ++) {
-      // Acquire successively images from the different cameras
-      g.setCamera(camera);
-      g.acquire(I[camera]);
-    }
-  }
-  delete [] I;
-#endif
+public:
+  static double Bspline4(double diff);
 
-  return 0;
-}
+  static double getSubPixBspline4(const vpImage<double> &I, double r, double t);
+};
+#endif
+#endif
diff --git a/src/tracking/template-tracker/tools/vpTemplateTrackerHeader.h b/src/tracking/template-tracker/tools/vpTemplateTrackerHeader.h
new file mode 100644
index 00000000..339ff926
--- /dev/null
+++ b/src/tracking/template-tracker/tools/vpTemplateTrackerHeader.h
@@ -0,0 +1,91 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerHeader.h 4632 2014-02-03 17:06:40Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerHeader.h
+ \brief
+*/
+
+#ifndef vpTemplateTrackerHeader_hh
+#define vpTemplateTrackerHeader_hh
+
+#include <stdio.h>
+
+struct vpTemplateTrackerZPoint {
+    int x,y;
+
+    vpTemplateTrackerZPoint() : x(0), y(0) {}
+};
+struct vpTemplateTrackerDPoint {
+    double x,y;
+
+    vpTemplateTrackerDPoint() : x(0), y(0) {}
+};
+struct vpTemplateTrackerPoint {
+    int x,y;
+    double dx,dy;
+    double val;
+    double *dW;
+    double *HiG;
+
+    vpTemplateTrackerPoint() : x(0), y(0), dx(0), dy(0), val(0), dW(NULL), HiG(NULL) {}
+};
+struct vpTemplateTrackerPointCompo {
+    double *dW;
+    vpTemplateTrackerPointCompo() : dW(NULL) {}
+};
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+struct vpTemplateTrackerPointSuppMIInv {
+    double et;
+    int ct;
+    double *BtInit;
+    double *Bt;
+    double *dBt;
+    double *d2W;
+    double *d2Wx;
+    double *d2Wy;
+    vpTemplateTrackerPointSuppMIInv() : et(0), ct(0), BtInit(NULL), Bt(NULL), dBt(NULL),
+      d2W(NULL), d2Wx(NULL), d2Wy(NULL) {}
+};
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+#endif
diff --git a/src/tracking/template-tracker/tools/vpTemplateTrackerTriangle.cpp b/src/tracking/template-tracker/tools/vpTemplateTrackerTriangle.cpp
new file mode 100644
index 00000000..5292864b
--- /dev/null
+++ b/src/tracking/template-tracker/tools/vpTemplateTrackerTriangle.cpp
@@ -0,0 +1,436 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerTriangle.cpp 4636 2014-02-04 08:17:58Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <visp/vpTemplateTrackerTriangle.h>
+
+/*!
+  Default constructor.
+ */
+vpTemplateTrackerTriangle::vpTemplateTrackerTriangle()
+  : minx_temp(0), miny_temp(0), C1(), C2(), C3(), l_t(0), h_t(0), not_good(false),
+    uvinv00(0.), uvinv01(0.), uvinv10(0.), uvinv11(0.), marge_triangle(0.00001)
+{
+}
+
+/*!
+  Copy constructor.
+ */
+vpTemplateTrackerTriangle::vpTemplateTrackerTriangle(const vpTemplateTrackerTriangle& T)
+  : minx_temp(0), miny_temp(0), C1(), C2(), C3(), l_t(0), h_t(0), not_good(false),
+    uvinv00(0.), uvinv01(0.), uvinv10(0.), uvinv11(0.), marge_triangle(0.00001)
+{
+  *this = T;
+}
+
+/*!
+  Copy operator.
+ */
+vpTemplateTrackerTriangle & vpTemplateTrackerTriangle::operator=(const vpTemplateTrackerTriangle& T)
+{
+  minx_temp=T.minx_temp;
+  miny_temp=T.miny_temp;
+
+  l_t=T.l_t;
+  h_t=T.h_t;
+  C1.x=T.C1.x;
+  C1.y=T.C1.y;
+  C2.x=T.C2.x;
+  C2.y=T.C2.y;
+  C3.x=T.C3.x;
+  C3.y=T.C3.y;
+  //uvinv.resize(2,2);
+  //uvinv=T.uvinv;
+  //p_ds_uv.resize(2);
+  //p_ds_uv=T.p_ds_uv;
+  //ptempo.resize(2);
+  //ptempo=T.ptempo;
+  not_good=T.not_good;
+
+  uvinv00=T.uvinv00;
+  uvinv01=T.uvinv01;
+  uvinv10=T.uvinv10;
+  uvinv11=T.uvinv11;
+
+  marge_triangle = T.marge_triangle;
+
+  return (*this);
+}
+
+/*!
+  Create a triangle from 3 corners.
+  \param c1 : First corner.
+  \param c2 : Second corner.
+  \param c3 : Third corner.
+
+  The coordinates of the points are defined as a 2 dimension vector with coordinates (x,y).
+  */
+vpTemplateTrackerTriangle::vpTemplateTrackerTriangle(const vpColVector &c1,
+                                                     const vpColVector &c2,
+                                                     const vpColVector &c3)
+  : minx_temp(0), miny_temp(0), C1(), C2(), C3(), l_t(0), h_t(0), not_good(false),
+    uvinv00(0.), uvinv01(0.), uvinv10(0.), uvinv11(0.), marge_triangle(0.00001)
+{
+  init(c1[0],c1[1],c2[0],c2[1],c3[0],c3[1]);
+}
+/*!
+  Return a triangle with coordinates that are down scaled by a factor 2.
+  */
+vpTemplateTrackerTriangle vpTemplateTrackerTriangle::getPyramidDown() const
+{
+  vpTemplateTrackerTriangle Ttemp;
+  Ttemp.init(C1.x/2.,C1.y/2.,C2.x/2.,C2.y/2.,C3.x/2.,C3.y/2.);
+  return Ttemp;
+}
+
+/*!
+  Create a triangle from 3 corners with coordinates (x1,y1), (x2,y2), (x3,y3).
+  - x coordinate is along the columns
+  - y coordinate is along the rows.
+  */
+vpTemplateTrackerTriangle::vpTemplateTrackerTriangle(int x1,int y1, int x2,int y2, int x3,int y3)
+  : minx_temp(0), miny_temp(0), C1(), C2(), C3(), l_t(0), h_t(0), not_good(false),
+    uvinv00(0.), uvinv01(0.), uvinv10(0.), uvinv11(0.), marge_triangle(0.00001)
+{
+  init(x1,y1,x2,y2,x3,y3);
+}
+
+/*!
+  Create a triangle from 3 corners defined as image points.
+  \param c1 : First corner.
+  \param c2 : Second corner.
+  \param c3 : Third corner.
+ */
+vpTemplateTrackerTriangle::vpTemplateTrackerTriangle(const vpImagePoint &c1, const vpImagePoint &c2, const vpImagePoint &c3)
+  : minx_temp(0), miny_temp(0), C1(), C2(), C3(), l_t(0), h_t(0), not_good(false),
+    uvinv00(0.), uvinv01(0.), uvinv10(0.), uvinv11(0.), marge_triangle(0.00001)
+{
+  init(c1.get_u(), c1.get_v(), c2.get_u(), c2.get_v(), c3.get_u(), c3.get_v());
+}
+
+/*!
+  Create a triangle from 3 corners with coordinates (x1,y1), (x2,y2), (x3,y3).
+  - x coordinate is along the columns
+  - y coordinate is along the rows.
+  */
+vpTemplateTrackerTriangle::vpTemplateTrackerTriangle(double x1,double y1, double x2,double y2, double x3,double y3)
+  : minx_temp(0), miny_temp(0), C1(), C2(), C3(), l_t(0), h_t(0), not_good(false),
+    uvinv00(0.), uvinv01(0.), uvinv10(0.), uvinv11(0.), marge_triangle(0.00001)
+{
+  init(x1,y1,x2,y2,x3,y3);
+}
+/*!
+  Initializes a triangle from 3 corners.
+  \param c1 : First corner.
+  \param c2 : Second corner.
+  \param c3 : Third corner.
+
+  The coordinates of the points are defined as a 2 dimension vector with coordinates (x,y).
+  */
+void vpTemplateTrackerTriangle::init(const vpColVector &c1,const vpColVector &c2,const vpColVector &c3)
+{
+  init(c1[0],c1[1],c2[0],c2[1],c3[0],c3[1]);
+}
+/*!
+  Initializes a triangle from 3 corners defined as image points.
+  \param c1 : First corner.
+  \param c2 : Second corner.
+  \param c3 : Third corner.
+ */
+void vpTemplateTrackerTriangle::init(const vpImagePoint &c1, const vpImagePoint &c2, const vpImagePoint &c3)
+{
+  init(c1.get_u(), c1.get_v(), c2.get_u(), c2.get_v(), c3.get_u(), c3.get_v());
+}
+
+/*!
+  Initializes a triangle from 3 corners with coordinates (x1,y1), (x2,y2), (x3,y3).
+  - x coordinate is along the columns
+  - y coordinate is along the rows.
+  */
+void vpTemplateTrackerTriangle::init(int x1, int y1, int x2,int y2, int x3, int y3)
+{
+  init((double)x1,(double)y1,(double)x2,(double)y2,(double)x3,(double)y3);
+}
+
+/*!
+  Initializes a triangle from 3 corners with coordinates (x1,y1), (x2,y2), (x3,y3).
+  - x coordinate is along the columns
+  - y coordinate is along the rows.
+  */
+void vpTemplateTrackerTriangle::init(double x1, double y1, double x2,double y2, double x3, double y3)
+{
+  C1.x=x1;C1.y=y1;
+  C2.x=x2;C2.y=y2;
+  C3.x=x3;C3.y=y3;
+
+  double minx,miny,maxx,maxy;
+  //calcul du rectangle minimal contenant le triangle seletionn�
+  minx=(x1<x2)?x1:x2;
+  miny=(y1<y2)?y1:y2;
+  minx=(minx<x3)?minx:x3;
+  miny=(miny<y3)?miny:y3;
+  maxx=(x1>x2)?x1:x2;
+  maxy=(y1>y2)?y1:y2;
+  maxx=(maxx>x3)?maxx:x3;
+  maxy=(maxy>y3)?maxy:y3;
+
+  vpColVector u;
+  vpColVector v;
+  u.resize(2);
+  v.resize(2);
+  vpMatrix uv(2,2);
+  vpMatrix uvinv(2,2);
+
+  u[0]=C2.x-C1.x;
+  u[1]=C2.y-C1.y;
+
+  v[0]=C3.x-C1.x;
+  v[1]=C3.y-C1.y;
+
+  uv[0][0]=u[0];uv[1][0]=v[0];
+  uv[0][1]=u[1];uv[1][1]=v[1];
+  try
+  {
+    uvinv=uv.inverseByLU();
+    not_good=false;
+  }
+  catch(...)
+  {
+    not_good=true;
+    std::cout<<"Triangle vide"<<std::endl;
+
+  }
+  uvinv00=uvinv[0][0];
+  uvinv01=uvinv[0][1];
+  uvinv10=uvinv[1][0];
+  uvinv11=uvinv[1][1];
+
+  l_t=maxx-minx;
+  h_t=maxy-miny;
+  minx_temp=minx;
+  miny_temp=miny;
+
+  marge_triangle = 0.00001;
+}
+
+//marge ajoutee a zone pour que sommet soit pris en compte
+
+/*!
+  Indicates if a point with coordinates (i,j) is in the triangle.
+  \param i : Coordinate along the rows.
+  \param j : Coordinate along the columns.
+ */
+bool vpTemplateTrackerTriangle::inTriangle(const int &i, const int &j) const
+{
+  if(not_good)
+    return false;
+
+  /*ptempo[0]=j-C1.x;
+  ptempo[1]=i-C1.y;
+
+  p_ds_uv=ptempo*uvinv;
+  return (p_ds_uv[0]+p_ds_uv[1]<1. && p_ds_uv[0]>0 && p_ds_uv[1]>0);*/
+
+  double ptempo0=j-C1.x;
+  double ptempo1=i-C1.y;
+  double p_ds_uv0=ptempo0*uvinv00+ptempo1*uvinv10;
+  double p_ds_uv1=ptempo0*uvinv01+ptempo1*uvinv11;
+  return (p_ds_uv0+p_ds_uv1<1.+marge_triangle && p_ds_uv0>-marge_triangle && p_ds_uv1>-marge_triangle);
+}
+
+/*!
+  Indicates if a point with coordinates (i,j) is in the triangle.
+  \param i : Coordinate along the rows.
+  \param j : Coordinate along the columns.
+ */
+bool vpTemplateTrackerTriangle::inTriangle(const double &i, const double &j) const
+{
+  if(not_good)
+    return false;
+  /*ptempo[0]=j-C1.x;
+  ptempo[1]=i-C1.y;
+
+  p_ds_uv=ptempo*uvinv;
+  return (p_ds_uv[0]+p_ds_uv[1]<1. && p_ds_uv[0]>0 && p_ds_uv[1]>0);*/
+  double ptempo0=j-C1.x;
+  double ptempo1=i-C1.y;
+  double p_ds_uv0=ptempo0*uvinv00+ptempo1*uvinv10;
+  double p_ds_uv1=ptempo0*uvinv01+ptempo1*uvinv11;
+  return (p_ds_uv0+p_ds_uv1<1.+marge_triangle && p_ds_uv0>-marge_triangle && p_ds_uv1>-marge_triangle);
+}
+
+/*!
+  Indicates if an image point is in the triangle.
+  \param ip : Image point to consider.
+ */
+bool vpTemplateTrackerTriangle::inTriangle(const vpImagePoint &ip) const
+{
+  return inTriangle(ip.get_i(), ip.get_j());
+}
+/*!
+  Returns the coordinates of the triangle corners as an image point.
+  \param c1 : First corner.
+  \param c2 : Second corner.
+  \param c3 : Third corner.
+ */
+void vpTemplateTrackerTriangle::getCorners(vpImagePoint &c1, vpImagePoint &c2, vpImagePoint &c3) const
+{
+  c1.set_uv(C1.x, C1.y);
+  c2.set_uv(C2.x, C2.y);
+  c3.set_uv(C3.x, C3.y);
+}
+
+/*!
+  Returns the coordinates of the triangle corners as a 3 dimension vector of image points.
+  \param c : 3 dimension vector of image points that correspond to the triangle corners.
+ */
+void vpTemplateTrackerTriangle::getCorners(std::vector<vpImagePoint> &c) const
+{
+  c.resize(3);
+  c[0].set_uv(C1.x, C1.y);
+  c[1].set_uv(C2.x, C2.y);
+  c[2].set_uv(C3.x, C3.y);
+}
+
+/*!
+  Returns the coordinates of the triangle corners as a 2 dimension vector (x,y).
+  \param c1 : First corner.
+  \param c2 : Second corner.
+  \param c3 : Third corner.
+ */
+void vpTemplateTrackerTriangle::getCorners(vpColVector &c1,vpColVector &c2,vpColVector &c3) const
+{
+  c1=getCorner1();
+  c2=getCorner2();
+  c3=getCorner3();
+}
+
+/*!
+  Returns the coordinates of the triangle first corner.
+  \return A vector with dimension 2, that contains the coordinates (x,y) of the corner.
+ */
+vpColVector vpTemplateTrackerTriangle::getCorner1() const
+{
+  vpColVector c(2);
+  c[0]=C1.x;
+  c[1]=C1.y;
+
+  return c;
+}
+/*!
+  Returns the coordinates of the triangle second corner.
+  \return A vector with dimension 2, that contains the coordinates (x,y) of the corner.
+ */
+vpColVector vpTemplateTrackerTriangle::getCorner2() const
+{
+  vpColVector c(2);
+  c[0]=C2.x;
+  c[1]=C2.y;
+  return c;
+}
+
+/*!
+  Returns the coordinates of the triangle third corner.
+  \return A vector with dimension 2, that contains the coordinates (x,y) of the corner.
+ */
+vpColVector vpTemplateTrackerTriangle::getCorner3() const
+{
+  vpColVector c(2);
+  c[0]=C3.x;
+  c[1]=C3.y;
+  return c;
+}
+
+/*!
+  Get the size of the triangle bounding box.
+  \param w : Bounding box width.
+  \param h : Bounding box height.
+ */
+void vpTemplateTrackerTriangle::getSize(double &w,double &h) const
+{
+  w=l_t;
+  h=h_t;
+}
+/*!
+  Get the size of the triangle bounding box.
+  \param w : Bounding box width.
+  \param h : Bounding box height.
+ */
+void vpTemplateTrackerTriangle::getSize(int &w,int &h) const
+{
+  w=(int)l_t+1;
+  h=(int)h_t+1;
+}
+
+/*!
+  \return The minimal x coordinate (along the columns of the image) of the points that are in the triangle.
+  \sa getMaxx()
+ */
+double vpTemplateTrackerTriangle::getMinx() const
+{
+  return minx_temp-1;
+}
+/*!
+  \return The minimal y coordinate (along the rows of the image) of the points that are in the triangle.
+  \sa getMaxy()
+ */
+double vpTemplateTrackerTriangle::getMiny() const
+{
+  return miny_temp-1;
+}
+/*!
+  \return The maximal x coordinate (along the columns of the image) of the points that are in the triangle.
+  \sa getMinx()
+ */
+double vpTemplateTrackerTriangle::getMaxx() const
+{
+  return minx_temp+l_t+1;
+}
+/*!
+  \return The maximal y coordinate (along the rows of the image) of the points that are in the triangle.
+  \sa getMaxx()
+ */
+double vpTemplateTrackerTriangle::getMaxy() const
+{
+  return miny_temp+h_t+1;
+}
+
+
+
diff --git a/src/tracking/template-tracker/tools/vpTemplateTrackerTriangle.h b/src/tracking/template-tracker/tools/vpTemplateTrackerTriangle.h
new file mode 100644
index 00000000..62460b5e
--- /dev/null
+++ b/src/tracking/template-tracker/tools/vpTemplateTrackerTriangle.h
@@ -0,0 +1,155 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerTriangle.h 4636 2014-02-04 08:17:58Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerTriangle.h
+ \brief
+*/
+
+#ifndef vpTemplateTrackerTriangle_hh
+#define vpTemplateTrackerTriangle_hh
+
+#include <assert.h>
+#include <vector>
+
+#include <visp/vpMatrix.h>
+#include <visp/vpMath.h>
+#include <visp/vpColVector.h>
+#include <visp/vpImagePoint.h>
+#include <visp/vpTemplateTrackerHeader.h>
+
+class VISP_EXPORT vpTemplateTrackerTriangle
+{
+  protected:
+    double            minx_temp;
+    double            miny_temp;
+    vpTemplateTrackerDPoint    C1; //! Corner 1
+    vpTemplateTrackerDPoint    C2; //! Corner 2
+    vpTemplateTrackerDPoint    C3; //! Corner 3
+
+    double            l_t;
+    double            h_t;
+
+    bool              not_good;
+    double            uvinv00;
+    double            uvinv01;
+    double            uvinv10;
+    double            uvinv11;
+    double            marge_triangle;
+
+  private:
+    vpColVector getCorner1() const;
+    vpColVector getCorner2() const;
+    vpColVector getCorner3() const;
+    
+  public:
+    vpTemplateTrackerTriangle();
+    vpTemplateTrackerTriangle(const vpTemplateTrackerTriangle& T);
+    vpTemplateTrackerTriangle(const vpColVector &c1, const vpColVector &c2, const vpColVector &c3);
+    vpTemplateTrackerTriangle(const vpImagePoint &c1, const vpImagePoint &c2, const vpImagePoint &c3);
+    vpTemplateTrackerTriangle(int x1, int y1, int x2, int y2, int x3, int y3);
+    vpTemplateTrackerTriangle(double x1, double y1, double x2, double y2, double x3, double y3);
+
+    vpTemplateTrackerTriangle getPyramidDown() const;
+    void getCorners(vpColVector &c1,vpColVector &c2,vpColVector &c3) const;
+    void getCorners(vpImagePoint &c1, vpImagePoint &c2, vpImagePoint &c3) const;
+    void getCorners(std::vector<vpImagePoint> &c) const;
+
+    /*!
+       Returns the coordinates of a triangle corner.
+       \param i : Allowed values are 0, 1 or 2.
+       \return
+       - if i = 0, return corner 1 coordinates,
+       - if i = 1, return corner 2 coordinates,
+       - if i = 2, return corner 3 coordinates.
+
+       The coordinates are returned as a 2 dimension vector (x,y).
+     */
+    vpColVector getCorner(unsigned int i) const {
+      assert(i<3);
+      if(i==0) return getCorner1();
+      else if(i==1) return getCorner2();
+      else /*if(i==2)*/ return getCorner3();
+    };
+    /*!
+       Returns the coordinates of a triangle corner.
+       \param i : Allowed values are 0, 1 or 2.
+       - if i = 0, return corner 1 coordinates,
+       - if i = 1, return corner 2 coordinates,
+       - if i = 2, return corner 3 coordinates.
+       \param x,y : The coordinates of the corner.
+     */
+    void getCorner(unsigned int i, double &x, double &y) const {
+      assert(i<3);
+      if(i==0) {
+        x = C1.x;
+        y = C1.y;
+      }
+      else if(i==1) {
+        x = C2.x;
+        y = C2.y;
+      }
+      else /*if(i==2)*/ {
+        x = C3.x;
+        y = C3.y;
+      }
+    };
+
+    double getMaxx() const;
+    double getMaxy() const;
+    double getMinx() const;
+    double getMiny() const;
+
+    void getSize(double &w, double &h) const;
+    void getSize(int &w, int &h) const;
+    
+    void init(const vpColVector &c1,const vpColVector &c2,const vpColVector &c3);
+    void init(const vpImagePoint &c1, const vpImagePoint &c2, const vpImagePoint &c3);
+    void init(int x1,int y1, int x2,int y2, int x3,int y3);
+    void init(double x1,double y1, double x2,double y2, double x3,double y3);
+    bool inTriangle(const vpImagePoint &ip) const;
+    bool inTriangle(const int &i, const int &j) const;
+    bool inTriangle(const double &i,const double &j) const;
+
+    vpTemplateTrackerTriangle & operator=(const vpTemplateTrackerTriangle& T);
+};
+#endif
+
diff --git a/src/tracking/template-tracker/tools/vpTemplateTrackerZone.cpp b/src/tracking/template-tracker/tools/vpTemplateTrackerZone.cpp
new file mode 100644
index 00000000..5e7e2eaa
--- /dev/null
+++ b/src/tracking/template-tracker/tools/vpTemplateTrackerZone.cpp
@@ -0,0 +1,590 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerZone.cpp 4661 2014-02-10 19:34:58Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+
+#include <limits>   // numeric_limits
+
+#include <visp/vpConfig.h>
+
+#if VISP_HAVE_OPENCV_VERSION >= 0x020300
+#include <opencv2/imgproc/imgproc.hpp>
+#endif
+
+#include <visp/vpTemplateTrackerZone.h>
+
+
+/*!
+   Default constructor.
+ */
+vpTemplateTrackerZone::vpTemplateTrackerZone()
+  : Zone(), min_x(-1), min_y(-1), max_x(-1), max_y(-1)
+{
+}
+
+/*!
+   Copy constructor.
+ */
+vpTemplateTrackerZone::vpTemplateTrackerZone(const vpTemplateTrackerZone &z)
+  : Zone(), min_x(-1), min_y(-1), max_x(-1), max_y(-1)
+{
+  *this = z;
+}
+
+/*!
+   Remove all the triangles that define the zone.
+ */
+void vpTemplateTrackerZone::clear()
+{
+  min_x=-1;
+  min_y=-1;
+  max_x=-1;
+  max_y=-1;
+
+  Zone.clear();
+}
+
+/*!
+   Copy operator.
+ */
+vpTemplateTrackerZone & vpTemplateTrackerZone::operator=(const vpTemplateTrackerZone &z)
+{
+  clear();
+
+  this->copy(z);
+  return (*this);
+}
+
+/*!
+  Initialize a zone in image \e I using mouse click.
+
+  \param I : Image used to select the zone.
+  \param delaunay : Flag used to enable Delaunay triangulation.
+  - If true, from the image points selected by the user, a Delaunay triangulation is performed
+    to initialize the zone.
+    - A left click select a image point;
+    - A right click select the last image point and ends the initialisation stage.
+    In that case at least 3 points need to be selected by the user.
+  - If false, the user select directly points as successive triangle corners.
+    Three successive points define a triangle. It is not mandatory
+    that triangles have one edge in common; they can define a discontinued area.
+    - A left click select a triangle corner;
+    - A right click select the last triangle corner and ends the initialisation stage.
+    The number of points that are selected by the user should be a multiple of 3.
+    For example, to select a zone as two triangles, the user has to left click
+    five times and finish the selection on the sixth corner with a right click.
+
+ */
+void vpTemplateTrackerZone::initClick(const vpImage<unsigned char> &I, bool delaunay)
+{
+  Zone.clear();
+
+  std::vector<vpImagePoint> vip;
+
+  bool end = false;
+
+  do {
+    vpImagePoint p;
+    vpMouseButton::vpMouseButtonType button;
+    if (vpDisplay::getClick(I, p, button, false) ) {
+      vip.push_back(p);
+
+      vpDisplay::displayCross(I, p, 7, vpColor::red);
+
+      if (vip.size() > 1) {
+        if (delaunay) {
+          // Draw a line between the 2 last points
+          vpDisplay::displayLine(I, p, vip[vip.size()-2], vpColor::blue, 3);
+        }
+        else {
+          if(vip.size() % 3 ==2)
+            // draw line between point 2-1
+            vpDisplay::displayLine(I, p, vip[vip.size()-2], vpColor::blue, 3);
+          else if(vip.size() % 3 ==0) {
+            // draw line between point 3-2
+            vpDisplay::displayLine(I, p, vip[vip.size()-2], vpColor::blue, 3);
+            // draw line between point 3-1
+            vpDisplay::displayLine(I, p, vip[vip.size()-3], vpColor::blue, 3);
+          }
+
+        }
+      }
+      vpDisplay::flush(I);
+
+      if (button == vpMouseButton::button3)
+        end = true;
+    }
+
+    vpTime::wait(20);
+  } while(!end);
+
+  initFromPoints(I, vip, delaunay);
+}
+
+/*!
+
+  Initialize the zone using a vector of image points.
+
+  \param I : Image to process.
+  \param vip : Vector of image points used as initialization.
+  \param delaunay :
+  - If true, a Delaunay triangulation is perfomed on the vector of image points. This functionality
+    is only available if ViSP is build with OpenCV >2.3 third-party.
+  - If false, the vector of image points describe triangles. Its size is then a multiple of 3.
+ */
+void vpTemplateTrackerZone::initFromPoints(const vpImage<unsigned char>& I, const std::vector< vpImagePoint > &vip, bool delaunay)
+{
+  if (delaunay) {
+#if VISP_HAVE_OPENCV_VERSION >= 0x020300
+    // Init Delaunay
+    cv::Subdiv2D subdiv(cv::Rect(0, 0, (int)I.getWidth(), (int)I.getHeight()));
+    for(size_t i=0; i< vip.size(); i++) {
+      cv::Point2f fp((float)vip[i].get_u(), (float)vip[i].get_v());
+      std::cout << "Click point: " << vip[i] << std::endl;
+      subdiv.insert(fp);
+    }
+
+    // Compute Delaunay triangulation
+    std::vector<cv::Vec6f> triangleList;
+    subdiv.getTriangleList(triangleList);
+
+    // Keep only the Delaunay points that are inside the area
+    vpRect rect(vip);
+
+    std::vector<vpImagePoint> vip_delaunay;
+
+    for( size_t i = 0; i < triangleList.size(); i++ ) {
+      cv::Vec6f t = triangleList[i];
+      std::vector<vpImagePoint> p(3);
+
+      p[0].set_uv(t[0], t[1]);
+      p[1].set_uv(t[2], t[3]);
+      p[2].set_uv(t[4], t[5]);
+      if (p[0].inRectangle(rect) && p[1].inRectangle(rect) && p[2].inRectangle(rect)) {
+        vip_delaunay.push_back(p[0]);
+        vip_delaunay.push_back(p[1]);
+        vip_delaunay.push_back(p[2]);
+      }
+    }
+
+    initFromPoints(I, vip_delaunay, false);
+#else
+    throw vpException(vpException::functionNotImplementedError,"Delaunay triangulation is not available!");
+#endif
+  }
+  else {
+    Zone.clear();
+    for(unsigned int i=0; i<vip.size(); i+=3) {
+      vpTemplateTrackerTriangle  triangle(vip[i], vip[i+1], vip[i+2]);
+      add(triangle);
+
+      vpDisplay::displayLine(I, vip[i],   vip[i+1], vpColor::green, 1);
+      vpDisplay::displayLine(I, vip[i+1], vip[i+2], vpColor::green, 1);
+      vpDisplay::displayLine(I, vip[i+2], vip[i],   vpColor::green,1);
+      vpDisplay::flush(I) ;
+
+      // Update the bounding box
+      if((triangle.getMinx()<min_x)||(min_x==-1))
+        min_x=(int)triangle.getMinx();
+      if((triangle.getMaxx()>max_x)||(max_x==-1))
+        max_x=(int)triangle.getMaxx();
+      if((triangle.getMiny()<min_y)||(min_y==-1))
+        min_y=(int)triangle.getMiny();
+      if((triangle.getMaxy()>max_y)||(max_y==-1))
+        max_y=(int)triangle.getMaxy();
+    }
+  }
+}
+
+/*!
+  Add a triangle to the zone and update the bounding box.
+  \param t : Triangle to introduce in the zone.
+  */
+void vpTemplateTrackerZone::add(const vpTemplateTrackerTriangle &t)
+{
+  Zone.push_back(t);
+
+  // Update the bounding box
+  if((t.getMinx()<min_x)||(min_x==-1))
+    min_x=(int)t.getMinx();
+  if((t.getMaxx()>max_x)||(max_x==-1))
+    max_x=(int)t.getMaxx();
+  if((t.getMiny()<min_y)||(min_y==-1))
+    min_y=(int)t.getMiny();
+  if((t.getMaxy()>max_y)||(max_y==-1))
+    max_y=(int)t.getMaxy();
+}
+
+/*!
+  Test if a pixel with coordinates (i,j) is in the zone..
+  \param i, j : Coordinates of the pixel to test.
+  \return true if the pixel with coordinates (i,j) is in the zone defined by a set of triangles, false otherwise.
+ */
+bool vpTemplateTrackerZone::inZone(const int &i, const int &j) const
+{
+  std::vector<vpTemplateTrackerTriangle>::const_iterator Iterateurvecteur;
+  for(Iterateurvecteur=Zone.begin();Iterateurvecteur!=Zone.end();Iterateurvecteur++)
+  {
+    if(Iterateurvecteur->inTriangle(i,j))
+      return true;
+  }
+  return false;
+}
+
+/*!
+  Test if a pixel with coordinates (i,j) is in the zone..
+  \param i, j : Coordinates of the pixel to test.
+  \return true if the pixel with coordinates (i,j) is in the zone defined by a set of triangles, false otherwise.
+ */
+bool vpTemplateTrackerZone::inZone(const double &i,const double &j) const
+{
+  std::vector<vpTemplateTrackerTriangle>::const_iterator Iterateurvecteur;
+  for(Iterateurvecteur=Zone.begin();Iterateurvecteur!=Zone.end();Iterateurvecteur++)
+  {
+    if(Iterateurvecteur->inTriangle(i,j))
+      return true;
+  }
+  return false;
+}
+
+/*!
+  Test if a pixel with coordinates (i,j) is in the zone and returns also the index of
+  the triangle that contains the pixel.
+  \param i, j : Coordinates of the pixel to test.
+  \param id_triangle : Index of the triangle that contains the pixel (i,j).
+  \return true if the pixel with coordinates (i,j) is in the zone defined by a set of triangles, false otherwise.
+ */
+bool vpTemplateTrackerZone::inZone(const int &i,const int &j, unsigned int &id_triangle) const
+{
+  unsigned int id=0;
+  std::vector<vpTemplateTrackerTriangle>::const_iterator Iterateurvecteur;
+  for(Iterateurvecteur=Zone.begin();Iterateurvecteur!=Zone.end();Iterateurvecteur++)
+  {
+    if(Iterateurvecteur->inTriangle(i,j))
+    {
+      id_triangle=id;
+      return true;
+    }
+    id++;
+  }
+  return false;
+}
+
+/*!
+  Test if a pixel with coordinates (i,j) is in the zone and returns also the index of
+  the triangle that contains the pixel.
+  \param i, j : Coordinates of the pixel to test.
+  \param id_triangle : Index of the triangle that contains the pixel (i,j).
+  \return true if the pixel with coordinates (i,j) is in the zone defined by a set of triangles, false otherwise.
+ */
+bool vpTemplateTrackerZone::inZone(const double &i,const double &j, unsigned int &id_triangle) const
+{
+  unsigned int id=0;
+  std::vector<vpTemplateTrackerTriangle>::const_iterator Iterateurvecteur;
+  for(Iterateurvecteur=Zone.begin();Iterateurvecteur!=Zone.end();Iterateurvecteur++)
+  {
+    if(Iterateurvecteur->inTriangle(i,j))
+    {
+      id_triangle=id;
+      return true;
+    }
+    id++;
+  }
+  return false;
+}
+
+/*!
+  A zone is defined by a set of triangles. This function returns the ith triangle.
+  \param i : Index of the triangle to return.
+  \param T : The triangle corresponding to index i.
+  \return true if the triangle with index i was found, false otherwise.
+
+  The following sample code shows how to use this function:
+  \code
+    vpTemplateTrackerZone zone;
+    ...
+    for (unsigned int i=0; i < zone.getNbTriangle(); i++) {
+      vpTemplateTrackerTriangle triangle;
+      zone.getTriangle(i, triangle);
+    }
+  \endcode
+ */
+void vpTemplateTrackerZone::getTriangle(unsigned int i,vpTemplateTrackerTriangle &T) const
+{
+  if (i > getNbTriangle()-1)
+    throw(vpException(vpException::badValue, "Cannot get triangle with index %u", i));
+
+  T = Zone[i];
+}
+/*!
+  A zone is defined by a set of triangles. This function returns the ith triangle.
+  \param i : Index of the triangle to return.
+  \return The triangle corresponding to index i.
+
+  The following sample code shows how to use this function:
+  \code
+    vpTemplateTrackerZone zone;
+    ...
+    for (unsigned int i=0; i < zone.getNbTriangle(); i++) {
+      vpTemplateTrackerTriangle triangle = zone.getTriangle(i);
+    }
+  \endcode
+ */
+vpTemplateTrackerTriangle vpTemplateTrackerZone::getTriangle(unsigned int i) const
+{
+  if (i > getNbTriangle()-1)
+    throw(vpException(vpException::badValue, "Cannot get triangle with index %u", i));
+
+  return Zone[i];
+}
+/*!
+  Return the position of the center of gravity of the zone.
+  \exception vpException::divideByZeroError: The size of the zone is null.
+ */
+vpImagePoint vpTemplateTrackerZone::getCenter() const
+{
+  double xc=0;
+  double yc=0;
+  int cpt=0;
+  for(int i=min_y;i<max_y;i++)
+    for(int j=min_x;j<max_x;j++)
+      if(inZone(i,j))
+      {
+        xc+=j;
+        yc+=i;
+        cpt ++;
+      }
+  if(! cpt) {
+    throw(vpException(vpException::divideByZeroError,
+		      "Cannot compute the zone center: size = 0")) ;
+  }
+  xc=xc/cpt;
+  yc=yc/cpt;
+  vpImagePoint ip;
+  ip.set_uv(xc, yc);
+  return ip;
+}
+
+/*!
+  \return The maximal x coordinate (along the columns of the image) of the points that are in the zone.
+  \sa getMinx(), getBoundingBox()
+ */
+int vpTemplateTrackerZone::getMaxx() const
+{
+  return max_x;
+}
+/*!
+  \return The maximal y coordinate (along the rows of the image) of the points that are in the zone.
+  \sa getMiny(), getBoundingBox()
+ */
+int vpTemplateTrackerZone::getMaxy() const
+{
+  return max_y;
+}
+/*!
+  \return The minimal x coordinate (along the columns of the image) of the points that are in the zone.
+  \sa getMaxx(), getBoundingBox()
+ */
+int vpTemplateTrackerZone::getMinx() const
+{
+  return min_x;
+}
+/*!
+  \return The minimal y coordinate (along the rows of the image) of the points that are in the zone.
+  \sa getMaxy(), getBoundingBox()
+ */
+int vpTemplateTrackerZone::getMiny() const
+{
+  return min_y;
+}
+
+/*!
+  Return a rectangle that defines the bounding box of the zone.
+  \sa getMinx(), getMiny(), getMaxx(), getMaxy()
+ */
+vpRect vpTemplateTrackerZone::getBoundingBox() const
+{
+  vpRect bbox;
+  bbox.setTopLeft(vpImagePoint(min_y, min_x));
+  bbox.setBottomRight(vpImagePoint(max_y, max_x));
+  return bbox;
+}
+
+/*!
+  If a display device is associated to image \c I, display in overlay the triangles that define the zone.
+  \param I : Image.
+  \param col : Color used to display the triangles.
+  \param thickness : Thickness of the triangle lines.
+ */
+void vpTemplateTrackerZone::display(const vpImage<unsigned char> &I, const vpColor &col, const unsigned int thickness)
+{
+  std::vector<vpImagePoint> ip;
+  for (unsigned int i=0; i < Zone.size(); i++) {
+    vpTemplateTrackerTriangle triangle;
+    Zone[i].getCorners(ip);
+    vpDisplay::displayLine(I, ip[0], ip[1], col, thickness);
+    vpDisplay::displayLine(I, ip[1], ip[2], col, thickness);
+    vpDisplay::displayLine(I, ip[2], ip[0], col, thickness);
+  }
+}
+
+/*!
+  If a display device is associated to image \c I, display in overlay the triangles that define the zone.
+  \param I : Image.
+  \param col : Color used to display the triangles.
+  \param thickness : Thickness of the triangle lines.
+ */
+void vpTemplateTrackerZone::display(const vpImage<vpRGBa> &I, const vpColor &col, const unsigned int thickness)
+{
+  std::vector<vpImagePoint> ip;
+  for (unsigned int i=0; i < Zone.size(); i++) {
+    vpTemplateTrackerTriangle triangle;
+    Zone[i].getCorners(ip);
+    vpDisplay::displayLine(I, ip[0], ip[1], col, thickness);
+    vpDisplay::displayLine(I, ip[1], ip[2], col, thickness);
+    vpDisplay::displayLine(I, ip[2], ip[0], col, thickness);
+  }
+}
+
+/*!
+  Destructor.
+ */
+vpTemplateTrackerZone::~vpTemplateTrackerZone()
+{
+  clear();
+}
+
+/*!
+   Modify all the pixels inside a triangle with a given gray level.
+   \param I: Output image.
+   \param id: Triangle id. This value should be less than the number
+   of triangles used to define the zone and available using getNbTriangle().
+   \param gray_level: Color used to fill the triangle with.
+ */
+void vpTemplateTrackerZone::fillTriangle(vpImage<unsigned char>& I, unsigned int id,unsigned char gray_level)
+{
+  assert(id < getNbTriangle());
+  vpTemplateTrackerTriangle triangle;
+  getTriangle(id, triangle);
+  for (int i=0 ; i < (int) I.getHeight() ; i++)
+  {
+    for (int j=0 ; j < (int) I.getWidth() ; j++)
+    {
+      if(triangle.inTriangle(i,j))
+      {
+        I[i][j]=gray_level;
+      }
+    }
+  }
+}
+
+/*!
+  Return a zone with triangles that are down scaled by a factor 2.
+  */
+vpTemplateTrackerZone vpTemplateTrackerZone::getPyramidDown() const
+{
+  vpTemplateTrackerZone tempZone;
+  vpTemplateTrackerTriangle Ttemp;
+  vpTemplateTrackerTriangle TtempDown;
+  for(unsigned int i=0;i<getNbTriangle();i++)
+  {
+    getTriangle(i,Ttemp);
+    TtempDown=Ttemp.getPyramidDown();
+    tempZone.add(TtempDown);
+  }
+  return tempZone;
+}
+
+/*!
+  Copy all the triangles that define zone \c Z in the current zone (*this) and
+  update the zone bounding box.
+  \param z : Zone with a set of triangles provided as input.
+ */
+void vpTemplateTrackerZone::copy(const vpTemplateTrackerZone& z)
+{
+  vpTemplateTrackerTriangle triangle;
+  for(unsigned int i=0;i<z.getNbTriangle();i++)
+  {
+    z.getTriangle(i, triangle);
+    add(triangle);
+    // Update the bounding box
+    if((triangle.getMinx()<min_x)||(min_x==-1))
+      min_x=(int)triangle.getMinx();
+    if((triangle.getMaxx()>max_x)||(max_x==-1))
+      max_x=(int)triangle.getMaxx();
+    if((triangle.getMiny()<min_y)||(min_y==-1))
+      min_y=(int)triangle.getMiny();
+    if((triangle.getMaxy()>max_y)||(max_y==-1))
+      max_y=(int)triangle.getMaxy();
+  }
+}
+
+/*!
+  Return the position of the center of gravity in a given area.
+  \param borne_x : Right coordinate of the area to consider.
+  \param borne_y : Bottom coordinate of the area to consider.
+  \exception vpException::divideByZeroError: The size of the zone is null.
+ */
+
+vpImagePoint vpTemplateTrackerZone::getCenter(int borne_x, int borne_y) const
+{
+  int cpt_pt=0;
+  double x_center=0,y_center=0;
+  for(int j=0;j<borne_x;j++)
+    for(int i=0;i<borne_y;i++)
+      if(inZone(i,j))
+      {
+        x_center+=j;
+        y_center+=i;
+        cpt_pt++;
+      }
+
+  if(! cpt_pt) {
+    throw(vpException(vpException::divideByZeroError,
+          "Cannot compute the zone center: size = 0")) ;
+  }
+
+  x_center=x_center/cpt_pt;
+  y_center=y_center/cpt_pt;
+  vpImagePoint center;
+  center.set_uv(x_center, y_center);
+  return center;
+}
+
diff --git a/src/tracking/template-tracker/tools/vpTemplateTrackerZone.h b/src/tracking/template-tracker/tools/vpTemplateTrackerZone.h
new file mode 100644
index 00000000..a1a6b2cf
--- /dev/null
+++ b/src/tracking/template-tracker/tools/vpTemplateTrackerZone.h
@@ -0,0 +1,118 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerZone.h 4661 2014-02-10 19:34:58Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#ifndef vpTemplateTrackerZone_hh
+#define vpTemplateTrackerZone_hh
+
+#include <vector>
+
+#include <visp/vpDisplay.h>
+#include <visp/vpException.h>
+#include <visp/vpImage.h>
+#include <visp/vpTemplateTrackerTriangle.h>
+#include <visp/vpTemplateTrackerHeader.h>
+#include <visp/vpRect.h>
+
+/*!
+ A zone is defined by a set of triangles defined as vpTemplateTrackerTriangle.
+
+ A zone can be initialized either by user interaction using mouse click in a display device
+ throw initClick(), or by a list of points throw initFromPoints().
+ */
+class VISP_EXPORT vpTemplateTrackerZone
+{
+  protected:
+    std::vector<vpTemplateTrackerTriangle> Zone; //!< Vector of triangles that defines the zone.
+    int min_x; //!< Bounding box parameter
+    int min_y; //!< Bounding box parameter
+    int max_x; //!< Bounding box parameter
+    int max_y; //!< Bounding box parameter
+
+  public:
+    vpTemplateTrackerZone();
+    vpTemplateTrackerZone(const vpTemplateTrackerZone &z);
+    ~vpTemplateTrackerZone();
+
+    //add a triangle to the zone
+    void add(const vpTemplateTrackerTriangle &t);
+    void clear();
+    void copy(const vpTemplateTrackerZone& z);
+
+    //display the area on an image
+    void display(const vpImage<unsigned char> &I, const vpColor &col = vpColor::green, const unsigned int thickness=3);
+    void display(const vpImage<vpRGBa> &I, const vpColor &col = vpColor::green, const unsigned int thickness=3);
+
+    //colorie le tieme triangle
+    void fillTriangle(vpImage<unsigned char>& I, unsigned int id, unsigned char gray_level);
+
+    vpImagePoint getCenter() const;
+    vpImagePoint getCenter(int borne_x, int borne_y) const;
+    //get bounds of the area
+    int getMaxx() const;
+    int getMaxy() const;
+    int getMinx() const;
+    int getMiny() const;
+    vpRect getBoundingBox() const;
+
+    /*! Return the number of triangles that define the zone. \sa getTriangle() */
+	unsigned int getNbTriangle() const { return (unsigned int)Zone.size(); }
+    vpTemplateTrackerZone getPyramidDown() const;
+    //renvoie le ieme triangle de la zone
+    void getTriangle(unsigned int i, vpTemplateTrackerTriangle &T) const;
+    vpTemplateTrackerTriangle getTriangle(unsigned int i) const;
+
+    //create an area by clicking on an image
+    void initClick(const vpImage<unsigned char>& I, bool delaunay = false);
+    //create an area with a pointer of integer that describes a series of triangles:
+    // *pt= t0.S1.x,t0.S1.y,t0.S2.x,t0.S2.y,t0.S3.x,t0.S3.y, t1.S1.x ...
+    void initFromPoints(const vpImage<unsigned char>& I, const std::vector< vpImagePoint > &ip, bool delaunay = false);
+
+    //check if a point is in the area
+    bool inZone(const int &i,const int &j) const;
+    bool inZone(const double &i,const double &j) const;
+    //check if a point is in the area and return the corresponding triangle id_triangle where the point is.
+    bool inZone(const int &i,const int &j, unsigned int &id_triangle) const;
+    bool inZone(const double &i,const double &j, unsigned int &id_triangle) const;
+
+    vpTemplateTrackerZone & operator=(const vpTemplateTrackerZone &z);
+};
+#endif
+
diff --git a/src/tracking/template-tracker/vpTemplateTracker.cpp b/src/tracking/template-tracker/vpTemplateTracker.cpp
new file mode 100644
index 00000000..7fe6387b
--- /dev/null
+++ b/src/tracking/template-tracker/vpTemplateTracker.cpp
@@ -0,0 +1,927 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTracker.cpp 4635 2014-02-04 08:16:59Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <visp/vpTemplateTracker.h>
+#include <visp/vpTemplateTrackerBSpline.h>
+
+vpTemplateTracker::vpTemplateTracker(vpTemplateTrackerWarp *_warp)
+  : nbLvlPyr(1), l0Pyr(0), pyrInitialised(false), ptTemplate(NULL), ptTemplatePyr(NULL),
+    ptTemplateInit(false), templateSize(0), templateSizePyr(NULL),
+    ptTemplateSelect(NULL), ptTemplateSelectPyr(NULL), ptTemplateSelectInit(NULL),
+    templateSelectSize(0), ptTemplateSupp(NULL), ptTemplateSuppPyr(NULL),
+    ptTemplateCompo(NULL), ptTemplateCompoPyr(NULL), zoneTracked(NULL), zoneTrackedPyr(NULL),
+    pyr_IDes(NULL), H(), Hdesire(), HdesirePyr(), HLM(), HLMdesire(), HLMdesirePyr(),
+    HLMdesireInverse(), HLMdesireInversePyr(), G(), gain(1.), thresholdGradient(40),
+    costFunctionVerification(false), blur(true), useBrent(false), nbIterBrent(3),
+    taillef(7), fgG(NULL), fgdG(NULL), ratioPixelIn(0), mod_i(1), mod_j(1), nbParam(0),
+    lambdaDep(0.001), iterationMax(30), iterationGlobale(0), diverge(false), nbIteration(0),
+    useCompositionnal(true), useInverse(false), Warp(_warp), p(0), dp(), X1(), X2(),
+    dW(), BI(), dIx(), dIy(), zoneRef_()
+{
+  nbParam = Warp->getNbParam() ;
+  p.resize(nbParam);
+  dp.resize(nbParam);
+
+  fgG=new double[(taillef+1)/2] ;
+  vpImageFilter::getGaussianKernel(fgG, taillef) ;
+
+  fgdG=new double[(taillef+1)/2] ;
+  vpImageFilter::getGaussianDerivativeKernel(fgdG, taillef) ;
+}
+
+void vpTemplateTracker::setGaussianFilterSize(unsigned int new_taill)
+{
+  taillef=new_taill;
+  if (fgG) delete[] fgG;
+  fgG=new double[taillef] ;
+  vpImageFilter::getGaussianKernel(fgG, taillef) ;
+
+  if (fgdG) delete[] fgdG;
+  fgdG=new double[taillef] ;
+  vpImageFilter::getGaussianDerivativeKernel(fgdG, taillef) ;
+}
+
+void vpTemplateTracker::initTracking(const vpImage<unsigned char>& I, vpTemplateTrackerZone &zone)
+{
+  // 	std::cout<<"\tInitialise reference..."<<std::endl;
+  zoneTracked=&zone;
+
+  int largeur_im=(int)I.getWidth();
+  int hauteur_im=(int)I.getHeight();
+
+  unsigned int NbPointDsZone=0;
+  double xtotal=0,ytotal=0;
+  int mod_fi,mod_fj;
+  mod_fi=mod_i;mod_fj=mod_i;
+
+  for(int j=0;j<largeur_im;j++)
+    for(int i=0;i<hauteur_im;i++)
+      if(i%mod_fi ==0 && j%mod_fj ==0)
+        if(zone.inZone(i,j))
+        {
+          NbPointDsZone++;
+          xtotal+=j;
+          ytotal+=i;
+        }
+  //Warp->setCentre((double)xtotal/NbPointDsZone,(double)ytotal/NbPointDsZone);
+
+  templateSize=NbPointDsZone;
+  ptTemplate = new vpTemplateTrackerPoint[templateSize];ptTemplateInit=true;
+  ptTemplateSelect = new bool[templateSize];ptTemplateSelectInit=true;
+
+  Hdesire.resize(nbParam,nbParam);
+  HLMdesire.resize(nbParam,nbParam);
+
+  //RecupÈration des donnÈes des triangles de la pyramide gaussienne
+  vpTemplateTrackerPoint pt;
+  //vpTemplateTrackerZPoint ptZ;
+  vpImage<double> GaussI ;
+  vpImageFilter::filter(I, GaussI,fgG,taillef);
+  vpImageFilter::getGradXGauss2D(I, dIx, fgG,fgdG,taillef);
+  vpImageFilter::getGradYGauss2D(I, dIy, fgG,fgdG,taillef);
+
+  unsigned int cpt_point=0;
+  templateSelectSize=0;
+  for(int i=0;i<hauteur_im;i++)
+  {
+    //for(int  j=minx_t;j<maxx_t;j++)
+    for(int j=0;j<largeur_im;j++)
+    {
+      if(i%mod_i ==0 && j%mod_j ==0)
+        if(zone.inZone(i,j))
+        {
+          pt.x=j;
+          pt.y=i;
+          
+          pt.dx=dIx[i][j];
+          pt.dy=dIy[i][j];
+
+          if(pt.dx*pt.dx+pt.dy*pt.dy>thresholdGradient)
+          {
+            ptTemplateSelect[cpt_point]=true;
+            templateSelectSize++;
+          }
+          else
+            ptTemplateSelect[cpt_point]=false;
+          //ptTemplate_select[cpt_point]=true;
+
+          /*if(blur)
+          pt.val=GaussI[i][j];
+        else
+          pt.val=I[i][j];*/
+          pt.val=vpTemplateTrackerBSpline::getSubPixBspline4(GaussI,i,j);
+          //ptZone_pyr[NbLevelPyramid-cpt].push_back(pt);
+
+          ptTemplate[cpt_point]=pt;
+          cpt_point++;
+        }
+    }
+  }
+
+  // 	std::cout<<"\tNb pt template apres scale:"<<cpt_point<<std::endl;
+  // 	std::cout<<"utilisation de "<<taille_template_select<<"/"<<cpt_point<<" = "<<100.*taille_template_select/cpt_point<<"% pour calcul derivees"<<std::endl;
+
+  templateSize=cpt_point;
+  GaussI.destroy();
+  // 	std::cout<<"\tEnd of reference initialisation ..."<<std::endl;
+}
+
+vpTemplateTracker::~vpTemplateTracker()
+{
+  // 	vpTRACE("destruction tracker");
+  delete[] fgG;
+  delete[] fgdG;
+
+  resetTracker();
+}	
+
+/*!
+  Reset the tracker by freeing the memory allocated by the template tracker during the initialization.
+ */
+void vpTemplateTracker::resetTracker()
+{
+  // reset the tracker parameters
+  p = 0;
+
+  // 	vpTRACE("resetTracking");
+  if(pyrInitialised)
+  {
+    for(unsigned int i=0;i<nbLvlPyr;i++)
+    {
+      for(unsigned int point=0;point<templateSizePyr[i];point++)
+      {
+        delete[] ptTemplatePyr[i][point].dW;
+        delete[] ptTemplatePyr[i][point].HiG;
+      }
+      delete[] ptTemplatePyr[i];
+    }
+    delete[] ptTemplatePyr;
+
+    if (ptTemplateCompoPyr) {
+      for(unsigned int i=0;i<nbLvlPyr;i++)
+      {
+        if (ptTemplateCompoPyr[i]) {
+          for(unsigned int point=0;point<templateSizePyr[i];point++) {
+            delete[] ptTemplateCompoPyr[i][point].dW;
+          }
+          delete[] ptTemplateCompoPyr[i];
+        }
+      }
+      delete[] ptTemplateCompoPyr;
+      ptTemplateCompoPyr = NULL;
+    }
+
+    if (ptTemplateSuppPyr) {
+      for(unsigned int i=0;i<nbLvlPyr;i++)
+      {
+        if (ptTemplateSuppPyr[i]) {
+          for(unsigned int point=0;point<templateSizePyr[i];point++) {
+            delete[] ptTemplateSuppPyr[i][point].Bt;
+            delete[] ptTemplateSuppPyr[i][point].BtInit;
+            delete[] ptTemplateSuppPyr[i][point].dBt;
+            delete[] ptTemplateSuppPyr[i][point].d2W;
+            delete[] ptTemplateSuppPyr[i][point].d2Wx;
+            delete[] ptTemplateSuppPyr[i][point].d2Wy;
+          }
+          delete[] ptTemplateSuppPyr[i];
+        }
+      }
+      delete[] ptTemplateSuppPyr;
+      ptTemplateSuppPyr = NULL;
+    }
+
+    for(unsigned int i=0;i<nbLvlPyr;i++)
+      delete[] ptTemplateSelectPyr[i];
+    delete[] ptTemplateSelectPyr;
+
+    delete[] templateSizePyr;
+    delete[] HdesirePyr;
+    delete[] HLMdesirePyr;
+    delete[] HLMdesireInversePyr;
+
+    delete[] zoneTrackedPyr;
+    delete[] pyr_IDes;
+  }
+  else
+  {
+    if(ptTemplateInit)
+    {
+      for(unsigned int point=0;point<templateSize;point++)
+      {
+        delete[] ptTemplate[point].dW;
+        delete[] ptTemplate[point].HiG;
+      }
+      delete[] ptTemplate;
+      ptTemplate = NULL;
+      ptTemplateInit = false;
+    }
+    if (ptTemplateCompo) {
+      for(unsigned int point=0;point<templateSize;point++)
+      {
+        delete[] ptTemplateCompo[point].dW;
+      }
+      delete[] ptTemplateCompo;
+      ptTemplateCompo = NULL;
+    }
+    if (ptTemplateSupp) {
+      for(unsigned int point=0;point<templateSize;point++)
+      {
+        delete[] ptTemplateSupp[point].Bt;
+        delete[] ptTemplateSupp[point].BtInit;
+        delete[] ptTemplateSupp[point].dBt;
+        delete[] ptTemplateSupp[point].d2W;
+        delete[] ptTemplateSupp[point].d2Wx;
+        delete[] ptTemplateSupp[point].d2Wy;
+      }
+      delete[] ptTemplateSupp;
+      ptTemplateSupp = NULL;
+    }
+    if(ptTemplateSelectInit) {
+      if (ptTemplateSelect) {
+        delete[] ptTemplateSelect; ptTemplateSelect = NULL;
+      }
+    }
+  }
+}	
+
+/*!
+  Display the warped reference template in an image.
+
+  \param I: Image in which the warped zone has to be displayed.
+  \param col: Color used to draw the triangle edges.
+  \param thickness: Thickness of the lines.
+
+  The following code shows how to use display capabilities:
+  \code
+#include <visp/vpTemplateTrackerSSDInverseCompositional.h>
+#include <visp/vpTemplateTrackerWarpHomography.h>
+
+int main()
+{
+  vpImage<unsigned char> I;
+  vpTemplateTrackerWarpHomography warp;
+  vpTemplateTrackerSSDInverseCompositional tracker(&warp);
+  vpTemplateTrackerZone zoneRef, zoneWarped;
+
+  // Display the warped zone
+  tracker.display(I, vpColor::red);
+
+  // Display the reference zone
+  zoneRef = tracker.getZoneRef();
+  zoneRef.display(I, vpColor::green);
+
+  // Display the warped zone
+  vpColVector p = tracker.getp();
+  warp.warpZone(zoneRef, p, zoneWarped);
+  zoneWarped.display(I, vpColor::blue);
+}
+  \endcode
+ */
+void vpTemplateTracker::display(const vpImage<unsigned char> &I, const vpColor& col, const unsigned int thickness)
+{
+  if (I.display) { // Only if a display is associated to the image
+    vpTemplateTrackerZone zoneWarped;
+    Warp->warpZone(*zoneTracked, p, zoneWarped);
+    zoneWarped.display(I, col, thickness);
+  }
+}
+
+/*!
+  Display the warped reference template in an image.
+
+  \param I: Image in which the warped zone has to be displayed.
+  \param col: Color used to draw the triangle edges.
+  \param thickness: Thickness of the lines.
+
+  The following code shows how to use display capabilities:
+  \code
+#include <visp/vpTemplateTrackerSSDInverseCompositional.h>
+#include <visp/vpTemplateTrackerWarpHomography.h>
+
+int main()
+{
+  vpImage<vpRGBa> I;
+  vpTemplateTrackerWarpHomography warp;
+  vpTemplateTrackerSSDInverseCompositional tracker(&warp);
+  vpTemplateTrackerZone zoneRef, zoneWarped;
+
+  // Display the warped zone
+  tracker.display(I, vpColor::red);
+
+  // Display the reference zone
+  zoneRef = tracker.getZoneRef();
+  zoneRef.display(I, vpColor::green);
+
+  // Display the warped zone
+  vpColVector p = tracker.getp();
+  warp.warpZone(zoneRef, p, zoneWarped);
+  zoneWarped.display(I, vpColor::blue);
+}
+  \endcode
+ */
+void vpTemplateTracker::display(const vpImage<vpRGBa> &I, const vpColor& col, const unsigned int thickness)
+{
+  if (I.display) { // Only if a display is associated to the image
+    vpTemplateTrackerZone zoneWarped;
+    Warp->warpZone(*zoneTracked, p, zoneWarped);
+    zoneWarped.display(I, col, thickness);
+  }
+}
+
+void vpTemplateTracker::computeOptimalBrentGain(const vpImage<unsigned char> &I,vpColVector &tp,double tMI,vpColVector &direction,double &alpha)
+{
+  vpColVector **ptp;
+  ptp=new vpColVector*[4];
+  vpColVector p0(nbParam);
+  p0=tp;
+
+  //valeur necessaire si conditionnel
+  vpColVector dpt(Warp->getNbParam());
+  vpColVector adpt(Warp->getNbParam());
+
+  vpColVector p1(nbParam);
+  if(useCompositionnal)
+  {
+    if(useInverse)
+      Warp->getParamInverse(direction,dpt);
+    else
+      dpt=direction;
+    Warp->pRondp(tp,dpt,p1);
+  }
+  else
+  {
+    p1=tp+direction;
+  }
+
+  vpColVector p2(nbParam);
+  if(useCompositionnal)
+  {
+    adpt=alpha*direction;
+    if(useInverse)
+      Warp->getParamInverse(adpt,dpt);
+    else
+      dpt=adpt;
+    Warp->pRondp(tp,dpt,p2);
+  }
+  else
+  {
+    p2=tp+alpha*direction;
+  }
+  vpColVector p3(nbParam);
+  ptp[0]=&p0;
+  ptp[1]=&p1;
+  ptp[2]=&p2;
+  ptp[3]=&p3;
+
+
+  double *Cost=new double[4];
+  //Cost[0]=getCost(I,p0);
+  Cost[0]=tMI;
+  Cost[1]=getCost(I,p1);
+  Cost[2]=getCost(I,p2);
+
+
+  double *talpha=new double[4];
+  talpha[0]=0;
+  talpha[1]=1.;
+  talpha[2]=alpha;
+
+  //for(int i=0;i<3;i++)
+  //	std::cout<<"alpha["<<i<<"] = "<<talpha[i]<<"   Cost["<<i<<"] = "<<Cost[i]<<std::endl;
+
+  //Utilise trois estimᅵes de paraboles succesive ...
+  //A changer pour rendre adaptable
+  for(unsigned int opt=0;opt<nbIterBrent;opt++)
+  {
+    //double a=talpha[0];
+    //double b=talpha[1];
+    //double c=talpha[2];
+    //double Cost0=Cost[0];
+    //double Cost1=Cost[1];
+    //double Cost2=Cost[2];
+
+    vpMatrix A(3,3);
+    for(unsigned int i=0;i<3;i++){A[i][0]=talpha[i]*talpha[i];A[i][1]=talpha[i];A[i][2]=1.;}
+    //std::cout<<"A="<<A<<std::endl;
+    vpColVector B(3);for(unsigned int i=0;i<3;i++)B[i]=Cost[i];
+    vpColVector parabol(3);parabol=(A.t()*A).inverseByLU()*A.t()*B;
+    //vpColVector parabol(3);parabol=A.pseudoInverse()*B;
+
+    //si convexe
+    if(parabol[0]>0)
+    {
+      talpha[3]=-0.5*parabol[1]/parabol[0];
+      //std::cout<<"parabol = "<<parabol<<std::endl;
+      //std::cout<<"convexe talpha = "<<talpha[3]<<std::endl;
+    }
+    else//si concave
+    {
+      int tindic_x_min=0;
+      int tindic_x_max=0;
+      for(int i=1;i<3;i++)
+      {
+        if(talpha[i]<talpha[tindic_x_min])
+          tindic_x_min=i;
+        if(talpha[i]>talpha[tindic_x_max])
+          tindic_x_max=i;
+      }
+
+      if(Cost[tindic_x_max]<Cost[tindic_x_min])
+      {
+        //talpha[3]=talpha[tindic_x_max]+1.;
+        talpha[3]=talpha[tindic_x_max]+1.;
+        /*if(talpha[tindic_x_min]>talpha[tindic_x_max])
+          talpha[3]=talpha[tindic_x_min]+1.;
+        else
+          talpha[3]=talpha[tindic_x_min]-1.;*/
+      }
+      else
+      {
+        //talpha[3]=talpha[tindic_x_min]-1.;
+        talpha[3]=talpha[tindic_x_min]-1.;
+        /*if(talpha[tindic_x_min]<talpha[tindic_x_max])
+          talpha[3]=talpha[tindic_x_max]+1.;
+        else
+          talpha[3]=talpha[tindic_x_max]-1.;*/
+      }
+      //std::cout<<"concave talpha="<<talpha[3]<<std::endl;
+    }
+    //std::cout<<"talpha="<<talpha[3]<<std::endl;
+    int indic_x_min=0;
+    int indic_x_max=0;
+    for(int i=1;i<3;i++)
+    {
+      if(talpha[i]<talpha[indic_x_min])
+        indic_x_min=i;
+      if(talpha[i]>talpha[indic_x_max])
+        indic_x_max=i;
+    }
+    //std::cout<<"talpha = "<<talpha[3]<<std::endl;
+    if(talpha[3]>talpha[indic_x_max])
+      if((talpha[3]-talpha[indic_x_max])>alpha)talpha[3]=talpha[indic_x_max]+4.;
+    if(talpha[3]<talpha[indic_x_min])
+      if((talpha[indic_x_min]-talpha[3])>alpha)talpha[3]=talpha[indic_x_min]-4.;
+
+    /*if(((b-a)*(Cost1-Cost2)-(b-c)*(Cost1-Cost0))==0)
+    {Cost[3]=1000;break;}
+
+    //calcul du gain correspondant au minimum de la parabole estimᅵe
+    talpha[3]=b-0.5*((b-a)*(b-a)*(Cost1-Cost2)-(b-c)*(b-c)*(Cost1-Cost0))/((b-a)*(Cost1-Cost2)-(b-c)*(Cost1-Cost0));
+    int indic_x_min=0;
+    int indic_x_max=0;
+    for(int i=1;i<3;i++)
+    {
+      if(talpha[i]<talpha[indic_x_min])
+        indic_x_min=i;
+      if(talpha[i]>talpha[indic_x_max])
+        indic_x_max=i;
+    }
+    std::cout<<"talpha = "<<talpha[3]<<std::endl;
+    if(talpha[3]>talpha[indic_x_max])
+      if((talpha[3]-talpha[indic_x_max])>alpha)talpha[3]=talpha[indic_x_max]+alpha;
+    if(talpha[3]<talpha[indic_x_min])
+      if((talpha[indic_x_min]-talpha[3])>alpha)talpha[3]=talpha[indic_x_min]-alpha;*/
+
+    //p3=tp-talpha[3]*direction;
+    if(useCompositionnal)
+    {
+      adpt=talpha[3]*direction;
+      if(useInverse)
+        Warp->getParamInverse(adpt,dpt);
+      else
+        dpt=adpt;
+      Warp->pRondp(tp,dpt,p3);
+    }
+    else
+    {
+      p3=tp+talpha[3]*direction;
+    }
+
+    Cost[3]=getCost(I,p3);
+    //std::cout<<"new cost="<<Cost[3]<<std::endl;
+
+    int indice_f_max=0;
+    for(int i=1;i<4;i++)
+      if(Cost[i]>Cost[indice_f_max])
+        indice_f_max=i;
+    if(indice_f_max!=3)
+    {
+      *ptp[indice_f_max]=*ptp[3];
+      Cost[indice_f_max]=Cost[3];
+      talpha[indice_f_max]=talpha[3];
+    }
+    else
+      break;
+  }
+
+  int indice_f_min=0;
+  for(int i=0;i<4;i++)
+    if(Cost[i]<Cost[indice_f_min])
+      indice_f_min=i;
+
+  alpha=talpha[indice_f_min];
+
+  if(alpha<1)alpha=1.;
+
+  delete[] ptp;
+  delete[] Cost;
+  delete[] talpha;
+}
+
+
+/*!
+  \param nbLvl : Number of levels in the pyramid.
+  \param l0 : Pyramid level where the tracking is stopped. The level with the highest resolution is 0.
+ */
+void vpTemplateTracker::initPyramidal(unsigned int nbLvl, unsigned int l0)
+{
+  // 	vpTRACE("init_pyramidal");
+  nbLvlPyr=nbLvl;
+  l0Pyr=l0;
+
+  zoneTrackedPyr=new vpTemplateTrackerZone[nbLvlPyr];
+  pyr_IDes=new vpImage<unsigned char>[nbLvlPyr];
+  ptTemplatePyr=new vpTemplateTrackerPoint*[nbLvlPyr];
+  ptTemplateSelectPyr=new bool*[nbLvlPyr];
+  ptTemplateSuppPyr=new vpTemplateTrackerPointSuppMIInv*[nbLvlPyr];
+  ptTemplateCompoPyr=new vpTemplateTrackerPointCompo*[nbLvlPyr];
+  for(unsigned int i=0; i< nbLvlPyr; i++) {
+    ptTemplatePyr[i]       = NULL;
+    ptTemplateSuppPyr[i]   = NULL;
+    ptTemplateSelectPyr[i] = NULL;
+    ptTemplateCompoPyr[i]  = NULL;
+  }
+  templateSizePyr=new unsigned int[nbLvlPyr];
+  HdesirePyr=new vpMatrix[nbLvlPyr];
+  HLMdesirePyr=new vpMatrix[nbLvlPyr];
+  HLMdesireInversePyr=new vpMatrix[nbLvlPyr];
+
+  pyrInitialised=true;
+  // 	vpTRACE("fin init_pyramidal");
+
+}
+void vpTemplateTracker::initTrackingPyr(const vpImage<unsigned char>& I,vpTemplateTrackerZone &zone)
+{
+  // 	vpTRACE("initTrackingPyr");
+  zoneTrackedPyr[0].copy(zone);
+  //vpTRACE("fin copy zone");
+
+  pyr_IDes[0]=I;
+  initTracking(pyr_IDes[0],zoneTrackedPyr[0]);
+  ptTemplatePyr[0]=ptTemplate;
+  ptTemplateSelectPyr[0]=ptTemplateSelect;
+  templateSizePyr[0]=templateSize;
+
+  //creationpyramide de zones et images desiree
+  if(nbLvlPyr>1)
+  {
+    for(unsigned int i=1;i<nbLvlPyr;i++)
+    {
+      zoneTrackedPyr[i]=zoneTrackedPyr[i-1].getPyramidDown();
+      vpImageFilter::getGaussPyramidal(pyr_IDes[i-1],pyr_IDes[i]);
+
+      initTracking(pyr_IDes[i],zoneTrackedPyr[i]);
+      ptTemplatePyr[i]=ptTemplate;
+      ptTemplateSelectPyr[i]=ptTemplateSelect;
+      templateSizePyr[i]=templateSize;
+      //reste probleme avec le Hessien
+    }
+  }
+  /*for(int i=0;i<nbLvlPyr;i++)
+  {
+    vpColVector ptemp(8);ptemp=0;
+    zoneTracked=&zoneTrackedPyr[i];
+    init_pos_evalRMS(ptemp);
+  }*/
+  zoneTracked=&zoneTrackedPyr[0];
+
+
+  // 	vpTRACE("fin initTrackingPyr");
+
+}
+
+/*!
+  Select the reference template in image \e I using mouse click.
+
+  \param I: Image containing the reference template.
+  \param delaunay: Flag used to enable Delaunay triangulation.
+  - If true, from the image points selected by the user, a Delaunay triangulation is performed
+    to initialize the reference template.
+    - A left click select a image point;
+    - A right click select the last image point and ends the initialisation stage.
+  - If false, the user select directly points as successive triangle corners.
+    The size of \e v_ip vector should be a multiple of 3. It is not mandatory
+    that triangles have one edge in common; they can define a discontinued area.
+    - A left click select a triangle corner;
+    - A right click select the last triangle corner and ends the initialisation stage.
+    For example, to select the reference template as two triangles, the user has to left click
+    five times and finish the selection on the sixth corner with a right click.
+
+ */
+void vpTemplateTracker::initClick(const vpImage<unsigned char> &I, bool delaunay)
+{
+  zoneRef_.initClick(I, delaunay);
+
+  if (nbLvlPyr > 1) {
+    initPyramidal(nbLvlPyr, l0Pyr);
+    initTrackingPyr(I, zoneRef_);
+    initHessienDesiredPyr(I);
+  }
+  else {
+    initTracking(I, zoneRef_);
+    initHessienDesired(I);
+//    trackNoPyr(I);
+  }
+}
+
+/*!
+  Initialize the reference template from a vector of points.
+
+  \param I: Image containing the reference template.
+  \param v_ip: Vector of image points defining the reference template.
+  \param delaunay:
+  - If true, from the image points defining the reference template enable Delaunay triangulation.
+  - If false, the vector of image points define the reference template as a list of triangles.
+  The size of \e v_ip vector should be a multiple of 3.
+ */
+void vpTemplateTracker::initFromPoints(const vpImage<unsigned char> &I, const std::vector< vpImagePoint > &v_ip, bool delaunay)
+{
+  zoneRef_.initFromPoints(I, v_ip, delaunay);
+
+  if (nbLvlPyr > 1) {
+    initPyramidal(nbLvlPyr, l0Pyr);
+    initTrackingPyr(I, zoneRef_);
+    initHessienDesiredPyr(I);
+  }
+  else {
+    initTracking(I, zoneRef_);
+    initHessienDesired(I);
+    //trackNoPyr(I);
+  }
+}
+
+/*!
+  Initialize the reference template from a vector of points.
+
+  \param I: Image containing the reference template.
+  \param zone: The zone that describes the reference template.
+ */
+void vpTemplateTracker::initFromZone(const vpImage<unsigned char> &I, const vpTemplateTrackerZone& zone)
+{
+  zoneRef_ = zone;
+
+  if (nbLvlPyr > 1) {
+    initPyramidal(nbLvlPyr, l0Pyr);
+    initTrackingPyr(I, zoneRef_);
+    initHessienDesiredPyr(I);
+  }
+  else {
+    initTracking(I, zoneRef_);
+    initHessienDesired(I);
+//    trackNoPyr(I);
+  }
+}
+
+void vpTemplateTracker::initCompInversePyr(const vpImage<unsigned char> &I)
+{
+  vpTRACE("initCompInversePyr");
+  templateSize=templateSizePyr[0];
+  //ptTemplateSupp=ptTemplateSuppPyr[0];
+  //ptTemplateCompo=ptTemplateCompoPyr[0];
+  ptTemplate=ptTemplatePyr[0];
+  ptTemplateSelect=ptTemplateSelectPyr[0];
+  initCompInversePyr(I);
+  ptTemplateSuppPyr[0]=ptTemplateSupp;
+  ptTemplateCompoPyr[0]=ptTemplateCompo;
+
+
+  if(nbLvlPyr>1)
+  {
+    vpImage<unsigned char> Itemp=I;
+    for(unsigned int i=1;i<nbLvlPyr;i++)
+    {
+      vpImageFilter::getGaussPyramidal(Itemp,Itemp);
+
+      templateSize=templateSizePyr[i];
+      ptTemplate=ptTemplatePyr[i];
+      ptTemplateSelect=ptTemplateSelectPyr[i];
+      initCompInversePyr(Itemp);
+      ptTemplateSuppPyr[i]=ptTemplateSupp;
+      ptTemplateCompoPyr[i]=ptTemplateCompo;
+    }
+  }
+  // 	vpTRACE("fin initCompInversePyr");
+
+}
+void vpTemplateTracker::initHessienDesiredPyr(const vpImage<unsigned char> &I)
+{
+  // 	vpTRACE("initHessienDesiredPyr");
+  templateSize=templateSizePyr[0];
+  //ptTemplateSupp=ptTemplateSuppPyr[0];
+  //ptTemplateCompo=ptTemplateCompoPyr[0];
+  ptTemplate=ptTemplatePyr[0];
+  ptTemplateSelect=ptTemplateSelectPyr[0];
+  initHessienDesired(I);
+  ptTemplateSuppPyr[0]=ptTemplateSupp;
+
+  ptTemplateCompoPyr[0]=ptTemplateCompo;
+  //HdesirePyr[0].resize(NbParam,NbParam);
+  //HLMdesirePyr[0].resize(NbParam,NbParam);
+  HdesirePyr[0]=Hdesire;
+  HLMdesirePyr[0]=HLMdesire;
+  HLMdesireInversePyr[0]=HLMdesireInverse;
+
+  if(nbLvlPyr>1)
+  {
+    vpImage<unsigned char> Itemp;Itemp=I;
+    for(unsigned int i=1;i<nbLvlPyr;i++)
+    {
+      vpImageFilter::getGaussPyramidal(Itemp,Itemp);
+
+      templateSize=templateSizePyr[i];
+      ptTemplate=ptTemplatePyr[i];
+      ptTemplateSelect=ptTemplateSelectPyr[i];
+      //ptTemplateSupp=ptTemplateSuppPyr[i];
+      //ptTemplateCompo=ptTemplateCompoPyr[i];
+      initHessienDesired(Itemp);
+      ptTemplateSuppPyr[i]=ptTemplateSupp;
+      ptTemplateCompoPyr[i]=ptTemplateCompo;
+
+      /*HdesirePyr[i].resize(NbParam,NbParam);HdesirePyr[i]=H;
+      HLMdesirePyr[i].resize(NbParam,NbParam);HLMdesirePyr[i]=HLM;*/
+      HdesirePyr[i]=Hdesire;
+      HLMdesirePyr[i]=HLMdesire;
+      HLMdesireInversePyr[i]=HLMdesireInverse;
+    }
+  }
+  // 	vpTRACE("fin initHessienDesiredPyr");
+}
+
+/*!
+   Track the template on image \e I.
+   \param I: Image to process.
+ */
+void vpTemplateTracker::track(const vpImage<unsigned char> &I)
+{
+  if (nbLvlPyr > 1)
+    trackPyr(I);
+  else
+    trackNoPyr(I);
+}
+
+void vpTemplateTracker::trackPyr(const vpImage<unsigned char> &I)
+{
+  //vpTRACE("trackPyr");
+  vpImage<unsigned char> *pyr_I;
+//  pyr_I=new vpImage<unsigned char>[nbLvlPyr+1]; // Why +1 ?
+  pyr_I=new vpImage<unsigned char>[nbLvlPyr]; // Why +1 ?
+  pyr_I[0]=I;
+
+  vpColVector ptemp(nbParam);
+  if(nbLvlPyr>1)
+  {
+//    vpColVector *p_sauv=new vpColVector[nbLvlPyr];
+//    for(unsigned int i=0;i<nbLvlPyr;i++)p_sauv[i].resize(nbParam);
+
+//    p_sauv[0]=p;
+    for(unsigned int i=1;i<nbLvlPyr;i++)
+    {
+      vpImageFilter::getGaussPyramidal(pyr_I[i-1],pyr_I[i]);
+      //test getParamPyramidDown
+      /*vpColVector vX_test(2);vX_test[0]=15.;vX_test[1]=30.;
+      vpColVector vX_test2(2);
+      Warp->computeCoeff(p);
+      Warp->computeDenom(vX_test,p);
+      Warp->warpX(vX_test,vX_test2,p);
+      std::cout<<"p = "<<p.t()<<std::endl;*/
+      //std::cout<<"get p down"<<std::endl;
+      Warp->getParamPyramidDown(p,ptemp);
+      p=ptemp;
+      zoneTracked=&zoneTrackedPyr[i];
+
+//      p_sauv[i]=p;
+      /*std::cout<<"p_down = "<<p.t()<<std::endl;
+
+      vpColVector vX_testd(2);vX_testd[0]=15./2.;vX_testd[1]=30./2.;
+      vpColVector vX_testd2(2);
+      Warp->computeCoeff(p);
+      Warp->computeDenom(vX_testd,p);
+      Warp->warpX(vX_testd,vX_testd2,p);
+      std::cout<<2.*vX_testd2[0]<<","<<2.*vX_testd2[1]<<" <=> "<<vX_test2[0]<<","<<vX_test2[1]<<std::endl;*/
+
+    }
+
+    for(int i=(int)nbLvlPyr-1;i>=0;i--)
+    {
+      if(i>=(int)l0Pyr)
+      {
+        templateSize=templateSizePyr[i];
+        ptTemplate=ptTemplatePyr[i];
+        ptTemplateSelect=ptTemplateSelectPyr[i];
+        ptTemplateSupp=ptTemplateSuppPyr[i];
+        ptTemplateCompo=ptTemplateCompoPyr[i];
+        H=HdesirePyr[i];
+        HLM=HLMdesirePyr[i];
+        HLMdesireInverse=HLMdesireInversePyr[i];
+//        zoneTracked=&zoneTrackedPyr[i];
+        trackRobust(pyr_I[i]);
+      }
+      //std::cout<<"get p up"<<std::endl;
+//      ptemp=p_sauv[i-1];
+      if (i > 0) {
+        Warp->getParamPyramidUp(p,ptemp);
+        p=ptemp;
+        zoneTracked=&zoneTrackedPyr[i-1];
+      }
+    }
+#if 0
+    if(l0Pyr==0)
+    {
+      templateSize=templateSizePyr[0];
+      ptTemplate=ptTemplatePyr[0];
+      ptTemplateSelect=ptTemplateSelectPyr[0];
+      ptTemplateSupp=ptTemplateSuppPyr[0];
+      ptTemplateCompo=ptTemplateCompoPyr[0];
+      H=HdesirePyr[0];
+      HLM=HLMdesirePyr[0];
+      HLMdesireInverse=HLMdesireInversePyr[0];
+      zoneTracked=&zoneTrackedPyr[0];
+      trackRobust(pyr_I[0]);
+    }
+
+    if (l0Pyr > 0) {
+//      for (int l=(int)l0Pyr; l >=0; l--) {
+//        Warp->getParamPyramidUp(p,ptemp);
+//        p=ptemp;
+//      }
+      zoneTracked=&zoneTrackedPyr[0];
+    }
+#endif
+    //    delete [] p_sauv;
+  }
+  else
+  {
+    //std::cout<<"reviens a tracker de base"<<std::endl;
+    trackRobust(I);
+  }
+  delete[] pyr_I;
+}
+
+void vpTemplateTracker::trackRobust(const vpImage<unsigned char> &I)
+{
+  if(costFunctionVerification)
+  {
+    vpColVector p_pre_estimation;p_pre_estimation=p;
+    getGaussianBluredImage(I);
+    double pre_fcost=getCost(I,p);
+
+    trackNoPyr(I);
+
+    //std::cout<<"fct avant : "<<pre_fcost<<std::endl;
+    double post_fcost=getCost(I,p);
+    //std::cout<<"fct apres : "<<post_fcost<<std::endl<<std::endl;
+    if(pre_fcost<post_fcost)
+      p=p_pre_estimation;
+  }
+  else
+    trackNoPyr(I);
+
+}
diff --git a/src/tracking/template-tracker/vpTemplateTracker.h b/src/tracking/template-tracker/vpTemplateTracker.h
new file mode 100644
index 00000000..1fbdeaac
--- /dev/null
+++ b/src/tracking/template-tracker/vpTemplateTracker.h
@@ -0,0 +1,219 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTracker.h 4648 2014-02-07 13:30:07Z ayol $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTracker.h
+ \brief
+*/
+
+#ifndef vpTemplateTracker_hh
+#define vpTemplateTracker_hh
+
+#include <math.h>
+
+#include <visp/vpTemplateTrackerHeader.h>
+#include <visp/vpTemplateTrackerZone.h>
+#include <visp/vpTemplateTrackerWarp.h>
+#include <visp/vpImageFilter.h>
+
+class VISP_EXPORT vpTemplateTracker
+{
+  protected:
+    //traitement pyramidal
+    unsigned int                nbLvlPyr; // If = 1, disable pyramidal usage
+    unsigned int                l0Pyr;
+    bool                        pyrInitialised;
+    
+    vpTemplateTrackerPoint     *ptTemplate;
+    vpTemplateTrackerPoint    **ptTemplatePyr;
+    bool                        ptTemplateInit;
+    unsigned int                templateSize;
+    unsigned int               *templateSizePyr;
+    bool                       *ptTemplateSelect;
+    bool                      **ptTemplateSelectPyr;
+    bool                        ptTemplateSelectInit;
+    unsigned int                templateSelectSize;
+
+    #ifndef DOXYGEN_SHOULD_SKIP_THIS
+    vpTemplateTrackerPointSuppMIInv *ptTemplateSupp; //pour inverse et compo
+    vpTemplateTrackerPointSuppMIInv **ptTemplateSuppPyr;  //pour inverse et compo
+    #endif
+
+    vpTemplateTrackerPointCompo *ptTemplateCompo;    //pour ESM
+    vpTemplateTrackerPointCompo **ptTemplateCompoPyr;   //pour ESM
+    vpTemplateTrackerZone               *zoneTracked;
+    vpTemplateTrackerZone               *zoneTrackedPyr;
+    
+    vpImage<unsigned char>     *pyr_IDes;
+    
+    vpMatrix                    H;
+    vpMatrix                    Hdesire;
+    vpMatrix                   *HdesirePyr;
+    vpMatrix                    HLM;
+    vpMatrix                    HLMdesire;
+    vpMatrix                   *HLMdesirePyr;
+    vpMatrix                    HLMdesireInverse;
+    vpMatrix                   *HLMdesireInversePyr;
+    vpColVector                 G;
+    
+    double                      gain;
+    double                      thresholdGradient;
+    bool                        costFunctionVerification;
+    bool                        blur;
+    bool                        useBrent;
+    unsigned int                nbIterBrent;
+    unsigned int                taillef;
+    double                     *fgG;
+    double                     *fgdG;
+    double                      ratioPixelIn;
+    int                         mod_i;
+    int                         mod_j;//variable de sampling de zone de reference
+    unsigned int                nbParam ;
+    double                      lambdaDep ;
+    unsigned int                iterationMax ;
+    //pour BFGS
+    unsigned int                iterationGlobale;
+    //diverge is set to true if there is no more point in the tracked area
+    bool                        diverge;
+    unsigned int                nbIteration;
+    bool                        useCompositionnal;
+    bool                        useInverse;
+
+    vpTemplateTrackerWarp      *Warp;
+    //Parametre de deplacement
+    vpColVector                 p;
+    vpColVector                 dp;
+
+    //temporary values for warping
+    vpColVector                 X1;
+    vpColVector                 X2;
+    //temporary derivative matrix
+    vpMatrix                    dW;
+
+    vpImage<double>             BI;
+    vpImage<double>             dIx ;
+    vpImage<double>             dIy ;
+    vpTemplateTrackerZone       zoneRef_; // Reference zone
+    
+  public:
+    vpTemplateTracker(vpTemplateTrackerWarp *_warp);
+    virtual        ~vpTemplateTracker();
+    
+    void    display(const vpImage<unsigned char> &I, const vpColor& col = vpColor::green, const unsigned int thickness=3);
+    void    display(const vpImage<vpRGBa> &I, const vpColor& col = vpColor::green, const unsigned int thickness=3);
+
+    bool    getDiverge() const {return diverge;}
+    vpColVector getdp(){ return dp; }
+    vpColVector getG() const { return G; }
+    vpMatrix    getH() const { return H; }
+    unsigned int getNbParam() const { return nbParam ; }
+    unsigned int getNbIteration() const { return nbIteration; }
+    vpColVector getp() const { return p;}
+    double  getRatioPixelIn() const {return ratioPixelIn;}
+
+    /*!
+
+       \return The pointer to the warper.
+     */
+    vpTemplateTrackerWarp *getWarp() const {return Warp;}
+
+    /*!
+     Return the reference template zone.
+     */
+    vpTemplateTrackerZone getZoneRef() const { return zoneRef_; }
+
+    void    initClick(const vpImage<unsigned char> &I, bool delaunay=false);
+    void    initFromPoints(const vpImage<unsigned char> &I, const std::vector< vpImagePoint > &v_ip, bool delaunay=false);
+    void    initFromZone(const vpImage<unsigned char> &I, const vpTemplateTrackerZone& zone);
+    
+    void    resetTracker();
+    
+    void    setBlur(bool b){blur = b;}
+    void    setCostFunctionVerification(bool b){costFunctionVerification = b;}
+    void    setGain(double g){gain=g;}
+    void    setGaussianFilterSize(unsigned int new_taill);
+    void    setHDes(vpMatrix &tH){ Hdesire=tH; vpMatrix::computeHLM(Hdesire,lambdaDep,HLMdesire); HLMdesireInverse = HLMdesire.inverseByLU();}
+    void    setIterationMax(const unsigned int &n) { iterationMax = n ; }
+    void    setLambda(double l) { lambdaDep = l ; }
+    void    setNbIterBrent(const unsigned int &b){nbIterBrent=b;}
+    void    setp(const vpColVector &tp){ p=tp; diverge=false; iterationGlobale=0; }
+    /*!
+     Set the number of pyramid levels used in the multi-resolution scheme.
+     If \e nlevels > 1, the tracker uses a pyramidal approach.
+
+     \param nlevels: Number of pyramid levels. Algorithm starts at level nlevels-1.
+     \param level_to_stop: Last level of the pyramid that will be considered. (Lowest level is Zero)
+     */
+    void    setPyramidal(unsigned int nlevels=2, unsigned int level_to_stop=1) {
+        nbLvlPyr = nlevels;
+        l0Pyr = level_to_stop;
+        if(l0Pyr >= nlevels){
+          std::cout << "Warning: level_to_stop: " << level_to_stop << " higher than level_to_start: " << nlevels-1 << " (nlevels-1)" <<std::endl;
+          std::cout << "Level to stop put to: " << nlevels-1 << std::endl;
+          l0Pyr = nlevels-1;
+        }
+    }
+
+    void    setSampling(int _mod_i,int _mod_j){mod_i=_mod_i;mod_j=_mod_j;}
+    void    setThresholdGradient(double threshold){thresholdGradient=threshold;}
+    /*! By default Brent usage is disabled. */
+    void    setUseBrent(bool b){useBrent = b;}
+    
+    void    track(const vpImage<unsigned char> &I);
+    void    trackRobust(const vpImage<unsigned char> &I);
+    
+  protected:
+
+    void            computeOptimalBrentGain(const vpImage<unsigned char> &I,vpColVector &tp,double tMI,vpColVector &direction,double &alpha);
+    virtual double  getCost(const vpImage<unsigned char> &I, vpColVector &tp) = 0;
+    void            getGaussianBluredImage(const vpImage<unsigned char> &I){ vpImageFilter::filter(I, BI,fgG,taillef); }
+    void            initCompInverse(const vpImage<unsigned char> &I);
+    virtual void    initCompInversePyr(const vpImage<unsigned char> &I);
+    virtual void    initHessienDesired(const vpImage<unsigned char> &I)=0;
+    virtual void    initHessienDesiredPyr(const vpImage<unsigned char> &I);
+    virtual void    initPyramidal(unsigned int nbLvl,unsigned int l0);
+    void            initTracking(const vpImage<unsigned char>& I,vpTemplateTrackerZone &zone);
+    virtual void    initTrackingPyr(const vpImage<unsigned char>& I,vpTemplateTrackerZone &zone);
+    virtual void    trackNoPyr(const vpImage<unsigned char> &I) = 0;
+    virtual void    trackPyr(const vpImage<unsigned char> &I);
+};
+#endif
+
diff --git a/src/tracking/template-tracker/warp/vpTemplateTrackerWarp.cpp b/src/tracking/template-tracker/warp/vpTemplateTrackerWarp.cpp
new file mode 100644
index 00000000..7754a79b
--- /dev/null
+++ b/src/tracking/template-tracker/warp/vpTemplateTrackerWarp.cpp
@@ -0,0 +1,163 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerWarp.cpp 4649 2014-02-07 14:57:11Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <visp/vpTemplateTrackerWarp.h>
+
+void vpTemplateTrackerWarp::warpTriangle(const vpTemplateTrackerTriangle &in,const vpColVector &p, vpTemplateTrackerTriangle &out)
+{
+  vpColVector S1(2),S2(2),S3(2);
+  vpColVector rS1(2),rS2(2),rS3(2);
+  in.getCorners(S1,S2,S3);
+  computeDenom(S1,p);
+  warpX(S1,rS1,p);
+  computeDenom(S2,p);
+  warpX(S2,rS2,p);
+  computeDenom(S3,p);
+  warpX(S3,rS3,p);
+  out.init(rS1,rS2,rS3);
+}
+void vpTemplateTrackerWarp::warpZone(const vpTemplateTrackerZone &in,const vpColVector &p, vpTemplateTrackerZone &out)
+{
+  vpTemplateTrackerTriangle TR,TT;
+  out.clear();
+  for(unsigned int i=0;i<in.getNbTriangle();i++)
+  {
+    in.getTriangle(i,TR);
+    warpTriangle(TR,p,TT);
+    out.add(TT);
+  }
+}
+
+double vpTemplateTrackerWarp::getDistanceBetweenZoneAndWarpedZone(const vpTemplateTrackerZone &Z, const vpColVector &p)
+{
+  unsigned int nb_corners = Z.getNbTriangle() * 3;
+  computeCoeff(p);
+  vpColVector X1(2),X2(2);
+
+  double res=0;
+  vpTemplateTrackerTriangle triangle;
+  for(unsigned int i=0;i<Z.getNbTriangle();i++)
+  {
+    Z.getTriangle(i, triangle);
+    for (unsigned int j=0; j<3; j++) {
+      triangle.getCorner(j, X1[0], X1[1]);
+
+      computeDenom(X1,p);
+      warpX(X1,X2,p);
+      res+=sqrt((X2[0]-X1[0])*(X2[0]-X1[0])+(X2[1]-X1[1])*(X2[1]-X1[1]));
+    }
+  }
+
+  return res/nb_corners;
+}
+
+void vpTemplateTrackerWarp::warp(const double *ut0,const double *vt0,int nb_pt,const vpColVector& p,double *u,double *v)
+{
+  computeCoeff(p);
+  vpColVector X1(2),X2(2);
+  for(int i=0;i<nb_pt;i++)
+  {
+    X1[0]=ut0[i];
+    X1[1]=vt0[i];
+    computeDenom(X1,p);
+    warpX(X1,X2,p);
+    u[i]=X2[0];
+    v[i]=X2[1];
+    //std::cout<<"warp "<<X2[0]<<","<<X2[1]<<std::endl;
+  }
+}
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+void vpTemplateTrackerWarp::findWarp(const double *ut0,const double *vt0,const double *u,const double *v,int nb_pt,vpColVector& p)
+{
+  vpMatrix dW_(2,nbParam);
+  vpMatrix dX(2,1);
+  vpMatrix H(nbParam,nbParam), HLM(nbParam,nbParam);
+  vpMatrix G(nbParam,1);
+
+  int cpt=0;
+  vpColVector X1(2);
+  vpColVector fX1(2);
+  vpColVector X2(2);
+  double erreur=0;
+  double erreur_prec;
+  double lambda=0.01;
+  do
+  {
+    erreur_prec=erreur;
+    H=0;
+    G=0;
+    erreur=0;
+    computeCoeff(p);
+    for(int i=0;i<nb_pt;i++)
+    {
+      X1[0]=ut0[i];
+      X1[1]=vt0[i];
+      computeDenom(X1,p);
+      warpX(X1,fX1,p);
+      dWarp(X1,fX1,p,dW_);
+      H+=dW_.AtA();
+
+      X2[0]=u[i];
+      X2[1]=v[i];
+
+      dX=X2-fX1;
+      G+=dW_.t()*dX;
+
+      erreur+=((u[i]-fX1[0])*(u[i]-fX1[0])+(v[i]-fX1[1])*(v[i]-fX1[1]));
+
+    }
+
+    vpMatrix::computeHLM(H, lambda, HLM);
+    try{
+      p+=HLM.inverseByLU()*G;
+    }
+    catch(...) {
+      std::cout<<"Cannot inverse the matrix by LU " << std::endl;
+      break;
+    }
+    cpt++;
+  }
+  while((cpt<150)&&(sqrt((erreur_prec-erreur)*(erreur_prec-erreur))>1e-20));
+  //std::cout<<"erreur apres transformation="<<erreur<<std::endl;
+}
+#endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
+
diff --git a/src/tracking/template-tracker/warp/vpTemplateTrackerWarp.h b/src/tracking/template-tracker/warp/vpTemplateTrackerWarp.h
new file mode 100644
index 00000000..74f52733
--- /dev/null
+++ b/src/tracking/template-tracker/warp/vpTemplateTrackerWarp.h
@@ -0,0 +1,245 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerWarp.h 4632 2014-02-03 17:06:40Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerWarp.h
+ \brief
+*/
+
+
+#ifndef vpTemplateTrackerWarp_hh
+#define vpTemplateTrackerWarp_hh
+
+#include <visp/vpDisplay.h>
+#include <visp/vpTemplateTrackerHeader.h>
+#include <visp/vpTemplateTrackerTriangle.h>
+#include <visp/vpTemplateTrackerZone.h>
+#include <visp/vpTrackingException.h>
+
+class VISP_EXPORT vpTemplateTrackerWarp
+{
+  protected:
+    double denom;
+    vpMatrix dW;
+    unsigned int nbParam ;
+    
+  public:
+    //constructor;
+    vpTemplateTrackerWarp() : denom(1.), dW(), nbParam(0) {}
+    virtual ~vpTemplateTrackerWarp(){}
+
+    #ifndef DOXYGEN_SHOULD_SKIP_THIS
+    virtual void computeCoeff(const vpColVector &p)=0;
+    virtual void computeDenom(vpColVector &vX, const vpColVector &ParamM)=0;
+    #endif
+    
+    /*!
+      Compute the derivative of the warping function according to its parameters.
+
+      \param X1 : Point to consider in the derivative computation.
+      \param X2 : Point to consider in the derivative computation.
+      \param ParamM : Parameters of the warping function.
+      \param dW : Resulting derivative matrix.
+    */
+    virtual void dWarp(const vpColVector &X1,const vpColVector &X2,const vpColVector &ParamM,vpMatrix &dW) = 0;
+
+    /*!
+      Compute the compositionnal derivative of the warping function according to its parameters.
+
+      \param X1 : Point to consider in the derivative computation.
+      \param X2 : Point to consider in the derivative computation.
+      \param ParamM : Parameters of the warping function.
+      \param dwdp0 : Derivative matrix of the warping function according to the initial warping function parameters (p=0).
+      \param dW : Resulting compositionnal derivative matrix.
+    */
+    virtual void dWarpCompo(const vpColVector &X1,const vpColVector &X2,const vpColVector &ParamM,const double *dwdp0,vpMatrix &dW) = 0;
+
+    #ifndef DOXYGEN_SHOULD_SKIP_THIS
+    void findWarp(const double *ut0,const double *vt0,const double *u,const double *v,int nb_pt,vpColVector& p);
+    #endif
+
+    /*!
+      Compute the derivative of the image with relation to the warping function parameters.
+
+      \param i : i coordinate (along the rows) of the point to consider in the image.
+      \param j : j coordinate (along the columns) of the point to consider in the image.
+      \param dy : Derivative on the y-axis (along the rows) of the point (i,j).
+      \param dx : Derivative on the x-axis (along the columns) of the point (i,j).
+      \param dIdW : Resulting derivative matrix (Image according to the warping function).
+    */
+    virtual void getdW0(const int &i,const int &j,const double &dy,const double &dx,double *dIdW) = 0;
+
+    /*!
+      Compute the derivative of the warping function according to the initial parameters.
+
+      \param i : i coordinate (along the rows) of the point to consider in the image.
+      \param j : j coordinate (along the columns) of the point to consider in the image.
+      \param dIdW : Resulting derivative matrix (Image according to the warping function).
+    */
+    virtual void getdWdp0(const int &i,const int &j,double *dIdW) = 0;
+
+    /*!
+      Compute the distance between a zone and its associated warped zone.
+
+      \param Z : Zone to consider.
+      \param p : Parameters of the warping function.
+    */
+    double getDistanceBetweenZoneAndWarpedZone(const vpTemplateTrackerZone &Z,const vpColVector &p);
+
+    /*!
+      Get the number of parameters of the warping function.
+
+      \return Number of parameters.
+    */
+    unsigned int getNbParam() const {return nbParam;}
+
+    /*!
+      Get the inverse of the warping function parameters.
+
+      \param ParamM : Parameters of the warping function.
+      \param ParamMinv : Inverse parameters.
+    */
+    virtual void getParamInverse(const vpColVector &ParamM,vpColVector &ParamMinv) const = 0;
+
+    /*!
+      Get the parameters of the warping function one level down.
+
+      \param p : Current parameters of the warping function.
+      \param pdown : Resulting parameters on level down.
+    */
+    virtual void getParamPyramidDown(const vpColVector &p,vpColVector &pdown) =0;
+
+    /*!
+      Get the parameters of the warping function one level up.
+
+      \param p : Current parameters of the warping function.
+      \param pup : Resulting parameters one level up.
+    */
+    virtual void getParamPyramidUp(const vpColVector &p,vpColVector &pup) =0;
+
+    /*!
+      Tells if the warping function is ESM compatible.
+
+      \return True if it is ESM compatible, False otherwise.
+    */
+    virtual bool isESMcompatible() const =0;
+
+    /*!
+      Get the displacement resulting from the composition of two other displacements.
+
+      \param p1 : First displacement.
+      \param p2 : Second displacement.
+      \param pres : Displacement resulting from the composition of p1 and p2.
+    */
+    virtual void pRondp(const vpColVector &p1, const vpColVector &p2,vpColVector &pres) const = 0;
+
+    /*!
+      Set the number of parameters of the warping function.
+
+      \param nb : New number of parameters.
+    */
+    void setNbParam(unsigned int nb){nbParam=nb;dW.resize(2,nbParam);}
+
+    /*!
+      Warp a list of points.
+
+      \param ut0 : List of u coordinates of the points.
+      \param vt0 : List of v coordinates of the points.
+      \param nb_pt : Number of points to consider.
+      \param p : Parameters of the warp.
+      \param u : Resulting u coordinates.
+      \param v : resulting v coordinates.
+    */
+    void warp(const double *ut0,const double *vt0,int nb_pt,const vpColVector& p,double *u,double *v);
+
+    /*!
+      Warp a point.
+
+      \param i : i coordinate (along the rows) of the point to warp.
+      \param j : j coordinate (along the columns) of the point to warp.
+      \param i2 : i coordinate (along the rows) of the warped point.
+      \param j2 : j coordinate (along the columns) of the warped point.
+      \param ParamM : Parameters of the warp.
+    */
+    virtual void warpX(const int &i, const int &j,double &i2,double &j2, const vpColVector &ParamM) = 0;
+
+    /*!
+      Warp a point.
+
+      \param vX : Coordinates of the point to warp.
+      \param vXres : Coordinates of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    virtual void warpX(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM) = 0;
+
+    /*!
+      Inverse Warp a point.
+
+      \param vX : Coordinates of the point to warp.
+      \param vXres : Coordinates of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    virtual void warpXInv(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM) = 0;
+
+    /*!
+      Warp a triangle and store the result in a new zone.
+
+      \param in : Triangle to warp.
+      \param p : Parameters of the warping function. These parameters are estimated by the template
+      tracker and returned using vpTemplateTracker::getp().
+      \param out : Resulting triangle.
+    */
+    void warpTriangle(const vpTemplateTrackerTriangle &in,const vpColVector &p, vpTemplateTrackerTriangle &out);
+
+    /*!
+      Warp a zone and store the result in a new zone.
+
+      \param in : Zone to warp.
+      \param p : Parameters of the warping function. These parameters are estimated by the template
+      tracker and returned using vpTemplateTracker::getp().
+      \param out : Resulting zone.
+    */
+    void warpZone(const vpTemplateTrackerZone &in,const vpColVector &p, vpTemplateTrackerZone &out);
+
+};
+
+#endif
+
diff --git a/src/tracking/template-tracker/warp/vpTemplateTrackerWarpAffine.cpp b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpAffine.cpp
new file mode 100644
index 00000000..078f13cf
--- /dev/null
+++ b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpAffine.cpp
@@ -0,0 +1,172 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerWarpAffine.cpp 4649 2014-02-07 14:57:11Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <visp/vpTemplateTrackerWarpAffine.h>
+
+
+vpTemplateTrackerWarpAffine::vpTemplateTrackerWarpAffine()
+{
+  nbParam = 6 ;
+  dW.resize(2,nbParam);
+}
+
+//get the parameter corresponding to the lower level of a gaussian pyramid
+void vpTemplateTrackerWarpAffine::getParamPyramidDown(const vpColVector &p,vpColVector &pdown)
+{
+  pdown=p;
+  pdown[4]=p[4]/2.;
+  pdown[5]=p[5]/2.;
+}
+
+void vpTemplateTrackerWarpAffine::getParamPyramidUp(const vpColVector &p,vpColVector &pup)
+{
+  pup=p;
+  pup[4]=p[4]*2.;
+  pup[5]=p[5]*2.;
+}
+/*calcul de di*dw(x,p0)/dp
+*/
+void vpTemplateTrackerWarpAffine::getdW0(const int &i,const int &j,const double &dy,const double &dx,double *dIdW)
+{
+  dIdW[0]=j*dx;
+  dIdW[1]=j*dy;
+  dIdW[2]=i*dx;
+  dIdW[3]=i*dy;
+  dIdW[4]=dx;
+  dIdW[5]=dy;
+}
+/*calcul de dw(x,p0)/dp
+*/
+void vpTemplateTrackerWarpAffine::getdWdp0(const int &i,const int &j,double *dIdW)
+{
+  dIdW[0]=j;
+  dIdW[1]=0;
+  dIdW[2]=i;
+  dIdW[3]=0;
+  dIdW[4]=1.;
+  dIdW[5]=0;
+
+  dIdW[6]=0;
+  dIdW[7]=j;
+  dIdW[8]=0;
+  dIdW[9]=i;
+  dIdW[10]=0;
+  dIdW[11]=1.;
+}
+
+void vpTemplateTrackerWarpAffine::warpX(const int &i, const int &j,double &i2,double &j2, const vpColVector &ParamM)
+{
+  j2=(1+ParamM[0])*j+ParamM[2]*i+ParamM[4];
+  i2=ParamM[1]*j+(1+ParamM[3])*i+ParamM[5];
+}
+
+
+void vpTemplateTrackerWarpAffine::warpX(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM)
+{
+  vXres[0]=(1.0+ParamM[0])*vX[0]+ParamM[2]*vX[1]+ParamM[4];
+  vXres[1]=ParamM[1]*vX[0]+(1.0+ParamM[3])*vX[1]+ParamM[5];
+}
+
+void vpTemplateTrackerWarpAffine::dWarp(const vpColVector &X1,const vpColVector &/*X2*/,const vpColVector &/*ParamM*/,vpMatrix &dW_)
+{
+  double j=X1[0];
+  double i=X1[1];
+  dW_=0;
+  dW_[0][0]=j;dW_[0][2]=i;dW_[0][4]=1;
+  dW_[1][1]=j;dW_[1][3]=i;dW_[1][5]=1;
+}
+
+/*compute dw=dw/dx*dw/dp
+*/
+void vpTemplateTrackerWarpAffine::dWarpCompo(const vpColVector &/*X1*/,const vpColVector &/*X2*/,const vpColVector &ParamM,
+                                             const double *dwdp0, vpMatrix &dW_)
+{
+  for(unsigned int i=0;i<nbParam;i++)
+  {
+    dW_[0][i]=(1.+ParamM[0])*dwdp0[i]+ParamM[2]*dwdp0[i+nbParam];
+    dW_[1][i]=ParamM[1]*dwdp0[i]+(1.+ParamM[3])*dwdp0[i+nbParam];
+  }
+}
+
+void vpTemplateTrackerWarpAffine::warpXInv(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM)
+{
+  vXres[0]=(1+ParamM[0])*vX[0]+ParamM[2]*vX[1]+ParamM[4];
+  vXres[1]=ParamM[1]*vX[0]+(1+ParamM[3])*vX[1]+ParamM[5];
+} 
+void vpTemplateTrackerWarpAffine::getParamInverse(const vpColVector &ParamM,vpColVector &ParamMinv) const
+{
+  vpColVector Trans(2);
+  vpMatrix MWrap(2,2);
+  Trans[0]=ParamM[4];Trans[1]=ParamM[5];
+  MWrap[0][0]=1+ParamM[0];MWrap[0][1]=ParamM[2];
+  MWrap[1][0]=ParamM[1];MWrap[1][1]=1+ParamM[3];
+
+  vpMatrix MWrapInv(2,2);MWrapInv=MWrap.inverseByLU();
+  vpColVector TransInv(2);TransInv=-1*MWrapInv*Trans;
+
+  ParamMinv[0]=MWrapInv[0][0]-1;ParamMinv[2]=MWrapInv[0][1];
+  ParamMinv[1]=MWrapInv[1][0];ParamMinv[3]=MWrapInv[1][1]-1;
+  ParamMinv[4]=TransInv[0];ParamMinv[5]=TransInv[1];
+} 
+
+void vpTemplateTrackerWarpAffine::pRondp(const vpColVector &p1, const vpColVector &p2,vpColVector &pres) const
+{
+  vpColVector Trans1(2);
+  vpMatrix MWrap1(2,2);
+  Trans1[0]=p1[4];Trans1[1]=p1[5];
+  MWrap1[0][0]=1+p1[0];MWrap1[0][1]=p1[2];
+  MWrap1[1][0]=p1[1];MWrap1[1][1]=1+p1[3];
+
+  vpColVector Trans2(2);
+  vpMatrix MWrap2(2,2);
+  Trans2[0]=p2[4];Trans2[1]=p2[5];
+  MWrap2[0][0]=1+p2[0];MWrap2[0][1]=p2[2];
+  MWrap2[1][0]=p2[1];MWrap2[1][1]=1+p2[3];
+
+  vpColVector TransRes(2);
+  vpMatrix MWrapRes(2,2);
+  TransRes=MWrap1*Trans2+Trans1;
+  MWrapRes=MWrap1*MWrap2;
+
+  pres[0]=MWrapRes[0][0]-1;pres[2]=MWrapRes[0][1];
+  pres[1]=MWrapRes[1][0];pres[3]=MWrapRes[1][1]-1;
+  pres[4]=TransRes[0];pres[5]=TransRes[1];
+}
diff --git a/src/tracking/template-tracker/warp/vpTemplateTrackerWarpAffine.h b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpAffine.h
new file mode 100644
index 00000000..0c60a29f
--- /dev/null
+++ b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpAffine.h
@@ -0,0 +1,175 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerWarpAffine.h 4607 2014-01-21 16:02:11Z ayol $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerWarpAffine.h
+ \brief Affine warping function: w(X)=AX+b with: A=[[1+p0, p2], [p1, 1+p3]] and b= [p4, p5]]
+*/
+
+
+#ifndef vpTemplateTrackerWarpAffine_hh
+#define vpTemplateTrackerWarpAffine_hh
+
+#include <visp/vpTemplateTrackerWarp.h>
+
+
+class VISP_EXPORT vpTemplateTrackerWarpAffine: public vpTemplateTrackerWarp
+{
+  public:
+    //constructor;
+    vpTemplateTrackerWarpAffine();
+    
+    #ifndef DOXYGEN_SHOULD_SKIP_THIS
+    void computeCoeff(const vpColVector &/*p*/){}
+    void computeDenom(vpColVector &/*vX*/, const vpColVector &/*ParamM*/){}
+    #endif
+
+    /*!
+      Compute the derivative of the warping function according to its parameters.
+
+      \param X1 : Point to consider in the derivative computation.
+      \param X2 : Point to consider in the derivative computation.
+      \param ParamM : Parameters of the warping function.
+      \param dW : Resulting derivative matrix.
+    */
+    void dWarp(const vpColVector &X1,const vpColVector &X2,const vpColVector &ParamM,vpMatrix &dW);
+
+    /*!
+      Compute the compositionnal derivative of the warping function according to its parameters.
+
+      \param X1 : Point to consider in the derivative computation.
+      \param X2 : Point to consider in the derivative computation.
+      \param ParamM : Parameters of the warping function.
+      \param dwdp0 : Derivative matrix of the warping function according to the initial warping function parameters (p=0).
+      \param dW : Resulting compositionnal derivative matrix.
+    */
+    void dWarpCompo(const vpColVector &X1,const vpColVector &X2,const vpColVector &ParamM,const double *dwdp0,vpMatrix &dW);
+
+    /*!
+      Compute the derivative of the image with relation to the warping function parameters.
+
+      \param i : i coordinate (along the rows) of the point to consider in the image.
+      \param j : j coordinate (along the columns) of the point to consider in the image.
+      \param dy : Derivative on the y-axis (along the rows) of the point (i,j).
+      \param dx : Derivative on the x-axis of the point (i,j).
+      \param dIdW : Resulting derivative matrix (Image according to the warping function).
+    */
+    void getdW0(const int &i,const int &j,const double &dy,const double &dx,double *dIdW);
+
+    /*!
+      Compute the derivative of the warping function according to the initial parameters.
+
+      \param i : i coordinate (along the rows) of the point to consider in the image.
+      \param j : j coordinate (along the columns) of the point to consider in the image.
+      \param dIdW : Resulting derivative matrix (Image according to the warping function).
+    */
+    void getdWdp0(const int &i,const int &j,double *dIdW);
+
+    /*!
+      Get the inverse of the warping function parameters.
+
+      \param ParamM : Parameters of the warping function.
+      \param ParamMinv : Inverse parameters.
+    */
+    void getParamInverse(const vpColVector &ParamM,vpColVector &ParamMinv) const;
+
+    /*!
+      Get the parameters of the warping function one level down.
+
+      \param p : Current parameters of the warping function.
+      \param pdown : Resulting parameters on level down.
+    */
+    void getParamPyramidDown(const vpColVector &p,vpColVector &pdown);
+
+    /*!
+      Get the parameters of the warping function one level up.
+
+      \param p : Current parameters of the warping function.
+      \param pup : Resulting parameters one level up.
+    */
+    void getParamPyramidUp(const vpColVector &p,vpColVector &pup);
+
+    /*!
+      Tells if the warping function is ESM compatible.
+
+      \return True if it is ESM compatible, False otherwise.
+    */
+    bool isESMcompatible() const {return false;}
+
+    /*!
+      Get the displacement resulting from the composition of two other displacements.
+
+      \param p1 : First displacement.
+      \param p2 : Second displacement.
+      \param pres : Displacement resulting from the composition of p1 and p2.
+    */
+    void pRondp(const vpColVector &p1, const vpColVector &p2,vpColVector &pres) const;
+
+    /*!
+      Warp a point.
+
+      \param vX : Coordinates of the point to warp.
+      \param vXres : Coordinates of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    void warpX(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM);
+
+    /*!
+      Warp a point.
+
+      \param i : i coordinate (along the rows) of the point to warp.
+      \param j : j coordinate (along the columns) of the point to warp.
+      \param i2 : i coordinate (along the columns) of the warped point.
+      \param j2 : j coordinate (along the columns) of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    void warpX(const int &i,const int &j,double &i2,double &j2,const vpColVector &ParamM);
+
+    /*!
+      Inverse Warp a point.
+
+      \param vX : Coordinates of the point to warp.
+      \param vXres : Coordinates of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    void warpXInv(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM);
+};
+#endif
diff --git a/src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomography.cpp b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomography.cpp
new file mode 100644
index 00000000..46ad0f12
--- /dev/null
+++ b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomography.cpp
@@ -0,0 +1,221 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerWarpHomography.cpp 4649 2014-02-07 14:57:11Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <visp/vpTemplateTrackerWarpHomography.h>
+#include <visp/vpTrackingException.h>
+
+vpTemplateTrackerWarpHomography::vpTemplateTrackerWarpHomography()
+{
+  nbParam = 8 ;
+  dW.resize(2,nbParam);
+}
+
+//get the parameter corresponding to the lower level of a gaussian pyramid
+void vpTemplateTrackerWarpHomography::getParamPyramidDown(const vpColVector &p,vpColVector &pdown)
+{
+  pdown=p;
+  pdown[2]=p[2]*2.;
+  pdown[5]=p[5]*2.;
+  pdown[6]=p[6]/2.;
+  pdown[7]=p[7]/2.;
+}
+
+void vpTemplateTrackerWarpHomography::getParamPyramidUp(const vpColVector &p,vpColVector &pup)
+{
+  pup=p;
+  pup[2]=p[2]/2.;
+  pup[5]=p[5]/2.;
+  pup[6]=p[6]*2.;
+  pup[7]=p[7]*2.;
+}
+
+/*calcul de di*dw(x,p0)/dp  */
+void vpTemplateTrackerWarpHomography::getdW0(const int &i,const int &j,const double &dy,const double &dx,double *dIdW)
+{
+  dIdW[0]=j*dx;
+  dIdW[1]=j*dy;
+  dIdW[2]=-j*j*dx-i*j*dy;
+  dIdW[3]=i*dx;
+  dIdW[4]=i*dy;
+  dIdW[5]=-i*j*dx-i*i*dy;
+  dIdW[6]=dx;
+  dIdW[7]=dy;
+}
+/*calcul de dw(x,p0)/dp  */
+void vpTemplateTrackerWarpHomography::getdWdp0(const int &i,const int &j,double *dIdW)
+{ 
+  dIdW[0]=j;
+  dIdW[1]=0;
+  dIdW[2]=-j*j;
+  dIdW[3]=i;
+  dIdW[4]=0;
+  dIdW[5]=-i*j;
+  dIdW[6]=1.;
+  dIdW[7]=0;
+
+  dIdW[8]=0;
+  dIdW[9]=j;
+  dIdW[10]=-i*j;
+  dIdW[11]=0;
+  dIdW[12]=i;
+  dIdW[13]=-i*i;
+  dIdW[14]=0;
+  dIdW[15]=1.;
+}
+void vpTemplateTrackerWarpHomography::computeDenom(vpColVector &vX, const vpColVector &ParamM)
+{
+  denom=(1./(ParamM[2]*vX[0]+ParamM[5]*vX[1]+1.));
+}
+
+void vpTemplateTrackerWarpHomography::warpX(const int &i,const int &j,double &i2,double &j2,const vpColVector &ParamM)
+{
+  j2=((1.+ParamM[0])*j+ParamM[3]*i+ParamM[6])*denom;
+  i2=(ParamM[1]*j+(1.+ParamM[4])*i+ParamM[7])*denom;
+}
+
+
+void vpTemplateTrackerWarpHomography::warpX(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM)
+{
+  //if((ParamM[2]*vX[0]+ParamM[5]*vX[1]+1)>0)//si dans le plan image reel
+  if((denom)>0)// FS optimisation
+  {
+    vXres[0]=((1+ParamM[0])*vX[0]+ParamM[3]*vX[1]+ParamM[6])*denom;
+    vXres[1]=(ParamM[1]*vX[0]+(1+ParamM[4])*vX[1]+ParamM[7])*denom;
+  }
+  else
+    throw(vpTrackingException(vpTrackingException::fatalError,"Division by zero in vpTemplateTrackerWarpHomography::warpX()"));
+}
+
+void vpTemplateTrackerWarpHomography::dWarp(const vpColVector &X1,const vpColVector &X2,const vpColVector &/*ParamM*/,vpMatrix &dW_)
+{
+  double j=X1[0];
+  double i=X1[1];
+  dW_=0;
+  dW_[0][0]=j*denom;
+  dW_[0][2]=-j*X2[0]*denom;
+  dW_[0][3]=i*denom;
+  dW_[0][5]=-i*X2[0]*denom;
+  dW_[0][6]=denom;
+
+  dW_[1][1]=j*denom;
+  dW_[1][2]=-j*X2[1]*denom;
+  dW_[1][4]=i*denom;
+  dW_[1][5]=-i*X2[1]*denom;
+  dW_[1][7]=denom;
+}
+
+/*compute dw=dw/dx*dw/dp  */
+void vpTemplateTrackerWarpHomography::dWarpCompo(const vpColVector &/*X1*/,const vpColVector &X2,const vpColVector &ParamM,
+                                                 const double *dwdp0,vpMatrix &dW_)
+{
+  double dwdx0,dwdx1;
+  double dwdy0,dwdy1;
+
+  dwdx0=((1.+ParamM[0])-X2[0]*ParamM[2])*denom;
+  dwdx1=(ParamM[1]-X2[1]*ParamM[2])*denom;
+  dwdy0=(ParamM[3]-X2[0]*ParamM[5])*denom;
+  dwdy1=((1.+ParamM[4])-X2[1]*ParamM[5])*denom;
+  for(unsigned int i=0;i<nbParam;i++)
+  {
+    dW_[0][i]=dwdx0*dwdp0[i]+dwdy0*dwdp0[i+nbParam];
+    dW_[1][i]=dwdx1*dwdp0[i]+dwdy1*dwdp0[i+nbParam];
+  }
+}
+
+void vpTemplateTrackerWarpHomography::warpXInv(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM)
+{
+
+  if((ParamM[2]*vX[0]+ParamM[5]*vX[1]+1)<0)//si dans le plan image reel
+  {
+    vXres[0]=((1+ParamM[0])*vX[0]+ParamM[3]*vX[1]+ParamM[6])/(ParamM[2]*vX[0]+ParamM[5]*vX[1]+1);
+    vXres[1]=(ParamM[1]*vX[0]+(1+ParamM[4])*vX[1]+ParamM[7])/(ParamM[2]*vX[0]+ParamM[5]*vX[1]+1);
+  }
+  else
+    throw(vpTrackingException(vpTrackingException::fatalError,"Division by zero in vpTemplateTrackerWarpHomography::warpXSpecialInv()")) ;
+} 
+void vpTemplateTrackerWarpHomography::getParamInverse(const vpColVector &ParamM,vpColVector &ParamMinv) const
+{
+  vpHomography H    = getHomography(ParamM);
+  vpHomography Hinv = H.inverse();
+  getParam(Hinv, ParamMinv);
+} 
+
+
+vpHomography vpTemplateTrackerWarpHomography::getHomography(const vpColVector &ParamM) const
+{
+  vpHomography H;
+  for(unsigned int i=0;i<3;i++)
+    for(unsigned int j=0;j<3;j++)
+    {
+      if(i+3*j!=8)
+      {
+        H[i][j]=ParamM[i+3*j];
+        if(i==j)H[i][j]++;
+      }
+      else
+        H[i][j]=1.;
+    }
+
+  return H;
+}
+void vpTemplateTrackerWarpHomography::getParam(const vpHomography &H,vpColVector &par) const
+{
+  par=0;
+  for(unsigned int i=0;i<3;i++)
+    for(unsigned int j=0;j<3;j++)
+    {
+      if(i+3*j!=8)
+      {
+        par[i+3*j]=H[i][j]/H[2][2];
+        if(i==j)par[i+3*j]--;
+      }
+    }
+}
+
+
+
+void vpTemplateTrackerWarpHomography::pRondp(const vpColVector &p1, const vpColVector &p2,vpColVector &pres) const
+{
+  vpHomography H1 = getHomography(p1);
+  vpHomography H2 = getHomography(p2);
+  vpHomography H  = H1*H2;
+  getParam(H,pres);
+}
diff --git a/src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomography.h b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomography.h
new file mode 100644
index 00000000..58201ab1
--- /dev/null
+++ b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomography.h
@@ -0,0 +1,200 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerWarpHomography.h 4607 2014-01-21 16:02:11Z ayol $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerWarpHomography.h
+ \brief warping function of an homography: the homography is directly defined by the diplacement parameter: H=[[1+p0, p3, p6], [p1, 1+p4, p7], [p2, p5, 1]]
+*/
+
+
+#ifndef vpTemplateTrackerWarpHomography_hh
+#define vpTemplateTrackerWarpHomography_hh
+
+#include <visp/vpTemplateTrackerWarp.h>
+#include <visp/vpHomography.h>
+
+
+class VISP_EXPORT vpTemplateTrackerWarpHomography: public vpTemplateTrackerWarp
+{
+  public:
+    //constructor;
+    vpTemplateTrackerWarpHomography();
+    
+    #ifndef DOXYGEN_SHOULD_SKIP_THIS
+    void computeCoeff(const vpColVector &/*p*/){}
+    #endif
+
+    /*!
+     Compute the projection denominator (Z) used in x = X/Z and y = Y/Z.
+
+     \param vX : Point to consider
+     \param ParamM : parameters of the warping function.
+    */
+    void computeDenom(vpColVector &vX, const vpColVector &ParamM);
+
+    /*!
+      Compute the derivative of the warping function according to its parameters.
+
+      \param X1 : Point to consider in the derivative computation.
+      \param X2 : Point to consider in the derivative computation.
+      \param ParamM : Parameters of the warping function.
+      \param dW : Resulting derivative matrix.
+    */
+    void dWarp(const vpColVector &X1,const vpColVector &X2,const vpColVector &ParamM,vpMatrix &dW);
+
+    /*!
+      Compute the compositionnal derivative of the warping function according to its parameters.
+
+      \param X1 : Point to consider in the derivative computation.
+      \param X2 : Point to consider in the derivative computation.
+      \param ParamM : Parameters of the warping function.
+      \param dwdp0 : Derivative matrix of the warping function according to the initial warping function parameters (p=0).
+      \param dW : Resulting compositionnal derivative matrix.
+    */
+    void dWarpCompo(const vpColVector &X1,const vpColVector &X2,const vpColVector &ParamM,const double *dwdp0,vpMatrix &dW);
+
+    /*!
+      Compute the derivative of the image with relation to the warping function parameters.
+
+      \param i : i coordinate (along the rows) of the point to consider in the image.
+      \param j : j coordinate (along the columns) of the point to consider in the image.
+      \param dy : Derivative on the y-axis (along the rows) of the point (i,j).
+      \param dx : Derivative on the x-axis (along the columns) of the point (i,j).
+      \param dIdW : Resulting derivative matrix (Image according to the warping function).
+    */
+    void getdW0(const int &i,const int &j,const double &dy,const double &dx,double *dIdW);
+
+    /*!
+      Compute the derivative of the warping function according to the initial parameters.
+
+      \param i : i coordinate (along the rows) of the point to consider in the image.
+      \param j : j coordinate (along the columns) of the point to consider in the image.
+      \param dIdW : Resulting derivative matrix (Image according to the warping function).
+    */
+    void getdWdp0(const int &i,const int &j,double *dIdW);
+
+    /*!
+     Return the homography defined by the given parameters
+
+     \param ParamM : Parameters of the homography.
+
+     \return An Homography via vpHomography.
+     */
+    vpHomography getHomography(const vpColVector &ParamM) const;
+
+    /*!
+     Compute the parameters of the homography warping function according to the given vpHomography
+
+     \param H : Homography used to compute the parameters.
+     \param par : Resulting warping function parameters.
+     */
+    void getParam(const vpHomography &H,vpColVector &par) const;
+
+    /*!
+      Get the inverse of the warping function parameters.
+
+      \param ParamM : Parameters of the warping function.
+      \param ParamMinv : Inverse parameters.
+    */
+    void getParamInverse(const vpColVector &ParamM,vpColVector &ParamMinv) const;
+
+    /*!
+      Get the parameters of the warping function one level down.
+
+      \param p : Current parameters of the warping function.
+      \param pdown : Resulting parameters on level down.
+    */
+    void getParamPyramidDown(const vpColVector &p,vpColVector &pdown);
+
+    /*!
+      Get the parameters of the warping function one level up.
+
+      \param p : Current parameters of the warping function.
+      \param pup : Resulting parameters one level up.
+    */
+    void getParamPyramidUp(const vpColVector &p,vpColVector &pup);
+
+    /*!
+      Tells if the warping function is ESM compatible.
+
+      \return True if it is ESM compatible, False otherwise.
+    */
+    bool isESMcompatible() const {return false;}
+
+    /*!
+      Get the displacement resulting from the composition of two other displacements.
+
+      \param p1 : First displacement.
+      \param p2 : Second displacement.
+      \param pres : Displacement resulting from the composition of p1 and p2.
+    */
+    void pRondp(const vpColVector &p1, const vpColVector &p2,vpColVector &pres) const ;
+
+    /*!
+      Warp a point.
+
+      \param vX : Coordinates of the point to warp.
+      \param vXres : Coordinates of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    void warpX(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM);
+
+    /*!
+      Warp a point.
+
+      \param i : i coordinate (along the rows) of the point to warp.
+      \param j : j coordinate (along the columns) of the point to warp.
+      \param i2 : i coordinate (along the rows) of the warped point.
+      \param j2 : j coordinate (along the columns) of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    void warpX(const int &i,const int &j,double &i2,double &j2,const vpColVector &ParamM);
+
+    /*!
+      Inverse Warp a point.
+
+      \param vX : Coordinates of the point to warp.
+      \param vXres : Coordinates of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    void warpXInv(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM);
+};
+#endif
diff --git a/src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomographySL3.cpp b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomographySL3.cpp
new file mode 100644
index 00000000..3e667651
--- /dev/null
+++ b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomographySL3.cpp
@@ -0,0 +1,402 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerWarpHomographySL3.cpp 4669 2014-02-16 16:25:57Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <visp/vpTemplateTrackerWarpHomographySL3.h>
+
+//findWarp special a SL3 car methode additionnelle ne marche pas (la derivee n est calculable qu en p=0)
+// => resout le probleme de maniere compositionnelle
+void vpTemplateTrackerWarpHomographySL3::findWarp(const double *ut0,const double *vt0,
+                                                  const double *u, const double *v,int nb_pt,vpColVector& p)
+{
+  //std::cout<<"findWarp OVERLOADE"<<std::endl;
+  vpColVector dp(nbParam);
+  vpMatrix dW_(2,nbParam);
+  vpMatrix dX(2,1);
+  vpMatrix H(nbParam,nbParam), HLM(nbParam,nbParam);
+  vpMatrix G_(nbParam,1);
+
+  //vpMatrix *dW_ddp0=new vpMatrix[nb_pt];
+  double **dW_ddp0=new double*[(unsigned int)nb_pt];
+  for(int i=0;i<nb_pt;i++)
+  {
+    //dW_ddp0[i].resize(2,nbParam);
+    dW_ddp0[i]=new double[2*nbParam];
+    //getdWdp0(vt0[i],ut0[i],dW_ddp0[i]);
+    //std::cout<<"findWarp"<<v[i]<<","<<u[i]<<std::endl;
+    getdWdp0(v[i],u[i],dW_ddp0[i]);
+  }
+  
+  int cpt=0;
+  vpColVector X1(2);
+  vpColVector fX1(2);
+  vpColVector X2(2);
+  double erreur=0;
+  double erreur_prec;
+  double lambda=0.00001;
+  do
+  {
+    erreur_prec=erreur;
+    H=0;
+    G_=0;
+    erreur=0;
+    computeCoeff(p);
+    for(int i=0;i<nb_pt;i++)
+    {
+      X1[0]=ut0[i];
+      X1[1]=vt0[i];
+      computeDenom(X1,p);
+      warpX(X1,fX1,p);
+      //dWarpCompo(X1,fX1,p,dW_ddp0[i],dW);
+      //dWarp(X1,fX1,p,dW);
+      for(unsigned int ip=0;ip<nbParam;ip++)
+      {
+        dW_[0][ip]=dW_ddp0[i][ip];
+        dW_[1][ip]=dW_ddp0[i][ip+nbParam];
+      }
+
+      H+=dW_.AtA();
+      
+      X2[0]=u[i];
+      X2[1]=v[i];
+
+      dX=X2-fX1;
+      G_+=dW_.t()*dX;
+
+      erreur+=((u[i]-fX1[0])*(u[i]-fX1[0])+(v[i]-fX1[1])*(v[i]-fX1[1]));   
+    }
+
+    vpMatrix::computeHLM(H, lambda, HLM);
+    try{
+      dp=HLM.inverseByLU()*G_;
+    }
+    catch(...){
+      std::cout<<"Cannot inverse the matrix by LU "<<std::endl;
+      break;
+    }
+    pRondp(p,dp,p);
+
+    cpt++;
+    //  std::cout<<"erreur ="<<erreur<<std::endl;
+  }
+  //while((cpt<1500));
+  while((cpt<150)&&(sqrt((erreur_prec-erreur)*(erreur_prec-erreur))>1e-20));
+    
+  //std::cout<<"erreur apres transformation="<<erreur<<std::endl;
+  for(int i=0;i<nb_pt;i++)
+    delete[] dW_ddp0[i];
+  delete[] dW_ddp0;
+  
+}
+
+vpTemplateTrackerWarpHomographySL3::vpTemplateTrackerWarpHomographySL3()
+  : G(), dGx(), A()
+{
+  nbParam = 8 ;
+  G.resize(3,3);
+  dGx.resize(3,nbParam);
+
+  A.resize(8);
+  for(unsigned int i=0;i<8;i++)
+  {
+    A[i].resize(3,3);
+    A[i]=0;
+  }
+  A[0][0][2]=1;
+  A[1][1][2]=1;
+  A[2][0][1]=1;
+  A[3][1][0]=1;
+  A[4][0][0]=1;
+  A[4][1][1]=-1;
+  A[5][1][1]=-1;
+  A[5][2][2]=1;
+  A[6][2][0]=1;
+  A[7][2][1]=1;
+}
+
+vpTemplateTrackerWarpHomographySL3::~vpTemplateTrackerWarpHomographySL3()
+{
+}
+
+//get the parameter corresponding to the lower level of a gaussian pyramid
+//a refaire de facon analytique
+void vpTemplateTrackerWarpHomographySL3::getParamPyramidDown(const vpColVector &p,vpColVector &pdown)
+{
+  double *u,*v;u=new double[4];v=new double[4];
+  //u[0]=0;v[0]=0;u[1]=640;v[1]=0;u[2]=640;v[2]=480;u[3]=0;v[3]=480;
+  u[0]=0;v[0]=0;u[1]=160;v[1]=0;u[2]=160;v[2]=120;u[3]=0;v[3]=120;
+  double *u2,*v2;u2=new double[4];v2=new double[4];
+  warp(u,v,4,p,u2,v2);
+  //p=0;findWarp(u,v,u2,v2,4,p);
+  for(int i=0;i<4;i++)
+  {
+    u[i]=u[i]/2.;
+    v[i]=v[i]/2.;
+    u2[i]=u2[i]/2.;
+    v2[i]=v2[i]/2.;
+    //std::cout<<"recherche "<<u2[i]<<","<<v2[i]<<std::endl;
+  }
+  pdown=p;
+  findWarp(u,v,u2,v2,4,pdown);
+  delete[] u;
+  delete[] v;
+  delete[] u2;
+  delete[] v2;
+}
+
+void vpTemplateTrackerWarpHomographySL3::getParamPyramidUp(const vpColVector &p,vpColVector &pup)
+{
+  double *u,*v;u=new double[4];v=new double[4];
+  //u[0]=0;v[0]=0;u[1]=640;v[1]=0;u[2]=640;v[2]=480;u[3]=0;v[3]=480;
+  u[0]=0;v[0]=0;u[1]=160;v[1]=0;u[2]=160;v[2]=120;u[3]=0;v[3]=120;
+  //u[0]=40;v[0]=30;u[1]=160;v[1]=30;u[2]=160;v[2]=120;u[3]=40;v[3]=120;
+  double *u2,*v2;u2=new double[4];v2=new double[4];
+
+  //pup=p;
+
+  /*vpColVector ptest=pup;
+  warp(u,v,4,ptest,u2,v2);
+  for(int i=0;i<4;i++)
+    std::cout<<"test "<<u2[i]<<","<<v2[i]<<std::endl;*/
+
+  warp(u,v,4,p,u2,v2);
+  //p=0;findWarp(u,v,u2,v2,4,p);
+
+
+  for(int i=0;i<4;i++)
+  {
+    u[i]=u[i]*2.;
+    v[i]=v[i]*2.;
+    u2[i]=u2[i]*2.;
+    v2[i]=v2[i]*2.;
+    /*std::cout<<"#########################################################################################"<<std::endl;
+    std::cout<<"#########################################################################################"<<std::endl;
+    std::cout<<"#########################################################################################"<<std::endl;
+    std::cout<<"recherche "<<u2[i]<<","<<v2[i]<<std::endl;*/
+  }
+  findWarp(u,v,u2,v2,4,pup);
+
+  delete[] u;
+  delete[] v;
+  delete[] u2;
+  delete[] v2;
+}
+
+void vpTemplateTrackerWarpHomographySL3::computeDenom(vpColVector &vX, const vpColVector &/*ParamM*/)
+{
+  denom=vX[0]*G[2][0]+vX[1]*G[2][1]+G[2][2];
+}
+
+void vpTemplateTrackerWarpHomographySL3::computeCoeff(const vpColVector &p)
+{
+  vpMatrix pA(3,3);
+  pA[0][0]=p[4];
+  pA[0][1]=p[2];
+  pA[0][2]=p[0];
+
+  pA[1][0]=p[3];
+  pA[1][1]=-p[4]-p[5];
+  pA[1][2]=p[1];
+
+  pA[2][0]=p[6];
+  pA[2][1]=p[7];
+  pA[2][2]=p[5];
+
+  G=pA.expm();
+}
+
+
+void vpTemplateTrackerWarpHomographySL3::warpX(const vpColVector &vX,vpColVector &vXres,const vpColVector &/*ParamM*/)
+{
+  double i=vX[1],j=vX[0];
+  vXres[0]=(j*G[0][0]+i*G[0][1]+G[0][2])/denom;
+  vXres[1]=(j*G[1][0]+i*G[1][1]+G[1][2])/denom;
+}
+void vpTemplateTrackerWarpHomographySL3::warpX(const int &i,const int &j,double &i2,double &j2,const vpColVector &/*ParamM*/)
+{
+  j2=(j*G[0][0]+i*G[0][1]+G[0][2])/denom;
+  i2=(j*G[1][0]+i*G[1][1]+G[1][2])/denom;
+}
+
+vpHomography vpTemplateTrackerWarpHomographySL3::getHomography() const
+{
+  vpHomography H;
+  for (unsigned int i=0; i<3; i++)
+    for (unsigned int j=0; j<3; j++)
+      H[i][j] = G[i][j];
+  return H;
+}
+
+void vpTemplateTrackerWarpHomographySL3::dWarp(const vpColVector &X1,const vpColVector &X2,const vpColVector &/*ParamM*/,vpMatrix &dW_)
+{
+  vpMatrix dhdx(2,3);
+  dhdx=0;
+  dhdx[0][0]=1./denom;dhdx[1][1]=1./denom;dhdx[0][2]=-X2[0]/(denom);dhdx[1][2]=-X2[1]/(denom);
+  dGx=0;
+  for(unsigned int i=0;i<3;i++)
+  {
+    dGx[i][0]=G[i][0];
+    dGx[i][1]=G[i][1];
+    dGx[i][2]=G[i][0]*X1[1];
+    dGx[i][3]=G[i][1]*X1[0];
+    dGx[i][4]=G[i][0]*X1[0]-G[i][1]*X1[1];
+    dGx[i][5]=G[i][2]-G[i][1]*X1[1];
+    dGx[i][6]=G[i][2]*X1[0];
+    dGx[i][7]=G[i][2]*X1[1];
+  }
+  dW_=dhdx*dGx;
+
+}
+
+/*calcul de di*dw(x,p0)/dp
+*/
+void vpTemplateTrackerWarpHomographySL3::getdW0(const int &i,const int &j,const double &dy,const double &dx,double *dIdW)
+{
+  vpMatrix dhdx(1,3);
+  dhdx=0;
+  dhdx[0][0]=dx;dhdx[0][1]=dy;dhdx[0][2]=-j*dx-i*dy;
+  G.setIdentity();
+
+  dGx=0;
+  for(unsigned int par=0;par<3;par++)
+  {
+    dGx[par][0]=G[par][0];
+    dGx[par][1]=G[par][1];
+    dGx[par][2]=G[par][0]*i;
+    dGx[par][3]=G[par][1]*j;
+    dGx[par][4]=G[par][0]*j-G[par][1]*i;
+    dGx[par][5]=G[par][2]-G[par][1]*i;
+    dGx[par][6]=G[par][2]*j;
+    dGx[par][7]=G[par][2]*i;
+  }
+
+  for(unsigned int par=0;par<nbParam;par++)
+  {
+    double res=0;
+    for(unsigned int par2=0;par2<3;par2++)
+      res+=dhdx[0][par2]*dGx[par2][par];
+    dIdW[par]=res;
+  }
+
+}
+/*calcul de dw(x,p0)/dp
+*/
+
+void vpTemplateTrackerWarpHomographySL3::getdWdp0(const int &i,const int &j,double *dIdW)
+{
+  vpMatrix dhdx(2,3);
+  dhdx=0;
+  dhdx[0][0]=1.;dhdx[1][1]=1.;dhdx[0][2]=-j;dhdx[1][2]=-i;
+  G.setIdentity();
+
+  dGx=0;
+  for(unsigned int par=0;par<3;par++)
+  {
+    dGx[par][0]=G[par][0];
+    dGx[par][1]=G[par][1];
+    dGx[par][2]=G[par][0]*i;
+    dGx[par][3]=G[par][1]*j;
+    dGx[par][4]=G[par][0]*j-G[par][1]*i;
+    dGx[par][5]=G[par][2]-G[par][1]*i;
+    dGx[par][6]=G[par][2]*j;
+    dGx[par][7]=G[par][2]*i;
+  }
+  vpMatrix dIdW_temp(2,nbParam);
+  dIdW_temp=dhdx*dGx;
+
+  for(unsigned int par=0;par<nbParam;par++)
+  {
+    dIdW[par]=dIdW_temp[0][par];
+    dIdW[par+nbParam]=dIdW_temp[1][par];
+  }
+
+}
+void vpTemplateTrackerWarpHomographySL3::getdWdp0(const double &i,const double &j,double *dIdW)
+{
+  vpMatrix dhdx(2,3);
+  dhdx=0;
+  dhdx[0][0]=1.;dhdx[1][1]=1.;dhdx[0][2]=-j;dhdx[1][2]=-i;
+  G.setIdentity();
+
+  dGx=0;
+  for(unsigned int par=0;par<3;par++)
+  {
+    dGx[par][0]=G[par][0];
+    dGx[par][1]=G[par][1];
+    dGx[par][2]=G[par][0]*i;
+    dGx[par][3]=G[par][1]*j;
+    dGx[par][4]=G[par][0]*j-G[par][1]*i;
+    dGx[par][5]=G[par][2]-G[par][1]*i;
+    dGx[par][6]=G[par][2]*j;
+    dGx[par][7]=G[par][2]*i;
+  }
+  vpMatrix dIdW_temp(2,nbParam);
+  dIdW_temp=dhdx*dGx;
+
+  for(unsigned int par=0;par<nbParam;par++)
+  {
+    dIdW[par]=dIdW_temp[0][par];
+    dIdW[par+nbParam]=dIdW_temp[1][par];
+  }
+
+}
+/*compute dw=dw/dx*dw/dp
+*/
+
+void vpTemplateTrackerWarpHomographySL3::dWarpCompo(const vpColVector &/*X1*/,const vpColVector &X2,const vpColVector &/*ParamM*/,
+                                                    const double *dwdp0,vpMatrix &dW_)
+{
+  for(unsigned int i=0;i<nbParam;i++)
+  {
+    dW_[0][i]=denom*((G[0][0]-X2[0]*G[2][0])*dwdp0[i]+(G[0][1]-X2[0]*G[2][1])*dwdp0[i+nbParam]);
+    dW_[1][i]=denom*((G[1][0]-X2[1]*G[2][0])*dwdp0[i]+(G[1][1]-X2[1]*G[2][1])*dwdp0[i+nbParam]);
+  }
+}
+
+void vpTemplateTrackerWarpHomographySL3::getParamInverse(const vpColVector &ParamM,vpColVector &ParamMinv) const
+{ 
+  ParamMinv=-ParamM;
+} 
+void vpTemplateTrackerWarpHomographySL3::pRondp(const vpColVector &p1, const vpColVector &p2,vpColVector &pres) const
+{
+  //vrai que si commutatif ...
+  pres=p1+p2;
+}
+
diff --git a/src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomographySL3.h b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomographySL3.h
new file mode 100644
index 00000000..43adff0e
--- /dev/null
+++ b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpHomographySL3.h
@@ -0,0 +1,216 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerWarpHomographySL3.h 4669 2014-02-16 16:25:57Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerWarpHomographySL3.h
+ \brief warping function of an homography: the homography is defined on the sl3 lie algebra  H=exp(Sum(p[i]* A_i)) A_i is the basis of the SL3 Algebra
+*/
+
+
+#ifndef vpTemplateTrackerWarpHomographySL3_hh
+#define vpTemplateTrackerWarpHomographySL3_hh
+
+#include <vector>
+
+#include <visp/vpTemplateTrackerWarp.h>
+#include <visp/vpHomography.h>
+
+class VISP_EXPORT vpTemplateTrackerWarpHomographySL3: public vpTemplateTrackerWarp
+{
+  protected:
+    vpMatrix G;
+    vpMatrix dGx;
+    std::vector<vpMatrix> A;
+    
+  public:
+    //constructor;
+    vpTemplateTrackerWarpHomographySL3();
+    ~vpTemplateTrackerWarpHomographySL3();
+
+    /*!
+     Compute the exponential of the homography matrix defined by the given parameters
+
+     \param p : Parameters of the SL3 homography warping function.
+    */
+    void computeCoeff(const vpColVector &p);
+
+    /*!
+     Compute the projection denominator (Z) used in x = X/Z and y = Y/Z.
+
+     \param vX : Point to consider
+     \param ParamM : parameters of the warping function.
+    */
+    void computeDenom(vpColVector &vX, const vpColVector &ParamM);
+
+    /*!
+      Compute the derivative of the warping function according to its parameters.
+
+      \param X1 : Point to consider in the derivative computation.
+      \param X2 : Point to consider in the derivative computation.
+      \param ParamM : Parameters of the warping function.
+      \param dW : Resulting derivative matrix.
+    */
+    void dWarp(const vpColVector &X1,const vpColVector &X2,const vpColVector &ParamM,vpMatrix &dW);
+
+    /*!
+      Compute the compositionnal derivative of the warping function according to its parameters.
+
+      \param X1 : Point to consider in the derivative computation.
+      \param X2 : Point to consider in the derivative computation.
+      \param ParamM : Parameters of the warping function.
+      \param dwdp0 : Derivative matrix of the warping function according to the initial warping function parameters (p=0).
+      \param dW : Resulting compositionnal derivative matrix.
+    */
+    void dWarpCompo(const vpColVector &X1,const vpColVector &X2,const vpColVector &ParamM,const double *dwdp0,vpMatrix &dW);
+
+    /*!
+      Find the displacement/warping function parameters from a list of points.
+
+      \param ut0 : Original u coordinates.
+      \param vt0 : Original v coordinates.
+      \param u : Warped u coordinates.
+      \param v : Warped v coordinates.
+      \param nb_pt : Number of points.
+      \param p : Resulting warping function parameters.
+    */
+    void findWarp(const double *ut0,const double *vt0,const double *u,const double *v,int nb_pt,vpColVector& p);
+
+    /*!
+      Compute the derivative of the image with relation to the warping function parameters.
+
+      \param i : i coordinate (along the rows) of the point to consider in the image.
+      \param j : j coordinate (along the columns) of the point to consider in the image.
+      \param dy : Derivative on the y-axis (along the rows) of the point (i,j).
+      \param dx : Derivative on the x-axis (along the columns) of the point (i,j).
+      \param dIdW : Resulting derivative matrix (Image according to the warping function).
+    */
+    void getdW0(const int &i,const int &j,const double &dy,const double &dx,double *dIdW);
+
+    /*!
+      Compute the derivative of the warping function according to the initial parameters.
+
+      \param i : i coordinate (along the rows) of the point to consider in the image.
+      \param j : j coordinate (along the columns) of the point to consider in the image.
+      \param dIdW : Resulting derivative matrix (Image according to the warping function).
+    */
+    void getdWdp0(const int &i,const int &j,double *dIdW);
+
+    /*!
+      Compute the derivative of the warping function according to the initial parameters.
+
+      \param i : i coordinate (along the rows) of the point to consider in the image.
+      \param j : j coordinate (along the columns) of the point to consider in the image.
+      \param dIdW : Resulting derivative matrix (Image according to the warping function).
+    */
+    void getdWdp0(const double &i, const double &j,double *dIdW);
+
+    /*!
+     Return the homography defined by the warping function
+
+     \return An Homography via vpHomography.
+     */
+    vpHomography getHomography() const;
+
+    /*!
+      Get the inverse of the warping function parameters.
+
+      \param ParamM : Parameters of the warping function.
+      \param ParamMinv : Inverse parameters.
+    */
+    void getParamInverse(const vpColVector &ParamM,vpColVector &ParamMinv) const;
+
+    /*!
+      Get the parameters of the warping function one level down.
+
+      \param p : Current parameters of the warping function.
+      \param pdown : Resulting parameters on level down.
+    */
+    void getParamPyramidDown(const vpColVector &p,vpColVector &pdown);
+
+    /*!
+      Get the parameters of the warping function one level up.
+
+      \param p : Current parameters of the warping function.
+      \param pup : Resulting parameters one level up.
+    */
+    void getParamPyramidUp(const vpColVector &p,vpColVector &pup);
+
+    /*!
+      Tells if the warping function is ESM compatible.
+
+      \return True if it is ESM compatible, False otherwise.
+    */
+    bool isESMcompatible() const {return true;}
+
+    /*!
+      Get the displacement resulting from the composition of two other displacements.
+
+      \param p1 : First displacement.
+      \param p2 : Second displacement.
+      \param pres : Displacement resulting from the composition of p1 and p2.
+    */
+    void pRondp(const vpColVector &p1, const vpColVector &p2,vpColVector &pres) const;
+
+    /*!
+      Warp a point.
+
+      \param vX : Coordinates of the point to warp.
+      \param vXres : Coordinates of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    void warpX(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM);
+
+    /*!
+      Warp a point.
+
+      \param i : i coordinate (along the rows) of the point to warp.
+      \param j : j coordinate (along the columns) of the point to warp.
+      \param i2 : i coordinate (along the rows) of the warped point.
+      \param j2 : j coordinate (along the columns) of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    void warpX(const int &i,const int &j,double &i2,double &j2,const vpColVector &ParamM);
+
+    #ifndef DOXYGEN_SHOULD_SKIP_THIS
+    void warpXInv(const vpColVector &/*vX*/,vpColVector &/*vXres*/,const vpColVector &/*ParamM*/) {}
+    #endif
+};
+#endif
diff --git a/src/tracking/template-tracker/warp/vpTemplateTrackerWarpSRT.cpp b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpSRT.cpp
new file mode 100644
index 00000000..6913eff1
--- /dev/null
+++ b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpSRT.cpp
@@ -0,0 +1,188 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerWarpSRT.cpp 4649 2014-02-07 14:57:11Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <visp/vpTemplateTrackerWarpSRT.h>
+
+
+vpTemplateTrackerWarpSRT::vpTemplateTrackerWarpSRT()
+{
+  nbParam = 4 ;
+  dW.resize(2,nbParam);
+}
+
+//get the parameter corresponding to the lower level of a gaussian pyramid
+void vpTemplateTrackerWarpSRT::getParamPyramidDown(const vpColVector &p,vpColVector &pdown)
+{
+  pdown=p;
+  pdown[2]=p[2]/2.;
+  pdown[3]=p[3]/2.;
+}
+
+void vpTemplateTrackerWarpSRT::getParamPyramidUp(const vpColVector &p,vpColVector &pup)
+{
+  pup=p;
+  pup[2]=p[2]*2.;
+  pup[3]=p[3]*2.;
+}
+/*calcul de di*dw(x,p0)/dp
+*/
+void vpTemplateTrackerWarpSRT::getdW0(const int &i,const int &j,const double &dy,const double &dx,double *dIdW)
+{
+  //   std::cout << "getdW0" << std::endl;
+  dIdW[0]=j*dx + i*dy;
+  dIdW[1]=-i*dx + j*dy;
+  dIdW[2]=dx;
+  dIdW[3]=dy;
+}
+/*calcul de dw(x,p0)/dp
+*/
+void vpTemplateTrackerWarpSRT::getdWdp0(const int &i,const int &j,double *dIdW)
+{
+  dIdW[0]=j;
+  dIdW[1]=-i;
+  dIdW[2]=1.;
+  dIdW[3]=0;
+
+  dIdW[4]=i;
+  dIdW[5]=j;
+  dIdW[6]=0;
+  dIdW[7]=1.;
+}
+
+void vpTemplateTrackerWarpSRT::warpX(const int &i,const int &j,double &i2,double &j2,const vpColVector &ParamM)
+{
+  j2=((1.0+ParamM[0])*cos(ParamM[1])*j) - ((1.0+ParamM[0])*sin(ParamM[1])*i) + ParamM[2];
+  i2=((1.0+ParamM[0])*sin(ParamM[1])*j) + ((1.0+ParamM[0])*cos(ParamM[1])*i) + ParamM[3];
+}
+
+
+void vpTemplateTrackerWarpSRT::warpX(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM)
+{
+  vXres[0]=((1.0+ParamM[0])*cos(ParamM[1])*vX[0]) - ((1.0+ParamM[0])*sin(ParamM[1])*vX[1]) + ParamM[2];
+  vXres[1]=((1.0+ParamM[0])*sin(ParamM[1])*vX[0]) + ((1.0+ParamM[0])*cos(ParamM[1])*vX[1]) + ParamM[3];
+}
+
+void vpTemplateTrackerWarpSRT::dWarp(const vpColVector &X1,const vpColVector &/*X2*/,const vpColVector &ParamM,vpMatrix &dW_)
+{
+  double j=X1[0];
+  double i=X1[1];
+  dW_=0;
+  dW_[0][0]=cos(ParamM[1])*j - sin(ParamM[1])*i;
+  dW_[0][1]=(-(1.0+ParamM[0])*sin(ParamM[1])*j) - ((1.0+ParamM[0])*cos(ParamM[1])*i);
+  dW_[0][2]=1;
+  
+  dW_[1][0]=sin(ParamM[1])*j + cos(ParamM[1])*i;
+  dW_[1][1]=(1.0+ParamM[0])*cos(ParamM[1])*j - (1.0+ParamM[0])*sin(ParamM[1])*i;
+  dW_[1][3]=1;
+}
+
+/*compute dw=dw/dx*dw/dp
+*/
+void vpTemplateTrackerWarpSRT::dWarpCompo(const vpColVector &/*X1*/,const vpColVector &/*X2*/,const vpColVector &ParamM,
+                                          const double *dwdp0,vpMatrix &dW_)
+{
+  for(unsigned int i=0;i<nbParam;i++)
+  {
+    dW_[0][i]=((1.+ParamM[0])*cos(ParamM[1])*dwdp0[i]) - ((1.0+ParamM[0])*sin(ParamM[1])*dwdp0[i+nbParam]);
+    dW_[1][i]=((1.+ParamM[0])*sin(ParamM[1])*dwdp0[i]) + ((1.0+ParamM[0])*cos(ParamM[1])*dwdp0[i+nbParam]);
+  }
+}
+
+void vpTemplateTrackerWarpSRT::warpXInv(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM)
+{
+  //   std::cout << "warpXspe" << std::endl;
+  vXres[0]=((1.0+ParamM[0])*cos(ParamM[1])*vX[0]) - ((1.0+ParamM[0])*sin(ParamM[1])*vX[1]) + ParamM[2];
+  vXres[1]=((1.0+ParamM[0])*sin(ParamM[1])*vX[0]) + ((1.0+ParamM[0])*cos(ParamM[1])*vX[1]) + ParamM[3];
+} 
+
+void vpTemplateTrackerWarpSRT::getParamInverse(const vpColVector &ParamM,vpColVector &ParamMinv) const
+{
+  vpColVector Trans(2);
+  vpMatrix MWrap(2,2);
+  Trans[0]=ParamM[2];
+  Trans[1]=ParamM[3];
+  MWrap[0][0]=cos(ParamM[1]);
+  MWrap[0][1]=-sin(ParamM[1]);
+  MWrap[1][0]=sin(ParamM[1]);
+  MWrap[1][1]=cos(ParamM[1]);
+  
+  vpMatrix MWrapInv(2,2);
+  MWrapInv=MWrap.transpose();
+  vpColVector TransInv(2);
+  TransInv=(-1.0/(1.0+ParamM[0]))*MWrapInv*Trans;
+  
+  ParamMinv[0]=1.0/(1.0+ParamM[0]) - 1.0;
+  ParamMinv[1]= atan2(MWrapInv[1][0],MWrapInv[1][1]);
+  ParamMinv[2]=TransInv[0];
+  ParamMinv[3]=TransInv[1];
+} 
+
+void vpTemplateTrackerWarpSRT::pRondp(const vpColVector &p1, const vpColVector &p2,vpColVector &pres) const
+{
+  vpColVector Trans1(2);
+  vpMatrix MWrap1(2,2);
+  Trans1[0]=p1[2];Trans1[1]=p1[3];
+  
+  MWrap1[0][0]=cos(p1[1]);
+  MWrap1[0][1]=-sin(p1[1]);
+  MWrap1[1][0]=sin(p1[1]);
+  MWrap1[1][1]=cos(p1[1]);
+
+  vpColVector Trans2(2);
+  vpMatrix MWrap2(2,2);
+  Trans2[0]=p2[2];Trans2[1]=p2[3];
+  
+  MWrap2[0][0]=cos(p2[1]);
+  MWrap2[0][1]=-sin(p2[1]);
+  MWrap2[1][0]=sin(p2[1]);
+  MWrap2[1][1]=cos(p2[1]);
+  
+  vpColVector TransRes(2);
+  vpMatrix MWrapRes(2,2);
+  TransRes=(1.0+p1[0])*MWrap1*Trans2+Trans1;
+  MWrapRes=MWrap1*MWrap2;
+  
+  pres[0]=(1.0+p1[0])*(1.0+p2[0]) - 1.0;
+  pres[1]=atan2(MWrapRes[1][0],MWrapRes[1][1]);
+  
+  pres[2]=TransRes[0];
+  pres[3]=TransRes[1];
+}
diff --git a/src/tracking/template-tracker/warp/vpTemplateTrackerWarpSRT.h b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpSRT.h
new file mode 100644
index 00000000..08f7d50e
--- /dev/null
+++ b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpSRT.h
@@ -0,0 +1,174 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerWarpSRT.h 4607 2014-01-21 16:02:11Z ayol $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerWarpSRT.h
+ \brief sRt warping function
+*/
+
+
+#ifndef vpTemplateTrackerWarpSRT_hh
+#define vpTemplateTrackerWarpSRT_hh
+
+#include <visp/vpTemplateTrackerWarp.h>
+
+class VISP_EXPORT vpTemplateTrackerWarpSRT: public vpTemplateTrackerWarp
+{
+  public:
+    //constructor;
+    vpTemplateTrackerWarpSRT();
+    
+    #ifndef DOXYGEN_SHOULD_SKIP_THIS
+    void computeCoeff(const vpColVector &/*p*/){}
+    void computeDenom(vpColVector &/*vX*/, const vpColVector &/*ParamM*/){}
+    #endif
+
+    /*!
+      Compute the derivative of the warping function according to its parameters.
+
+      \param X1 : Point to consider in the derivative computation.
+      \param X2 : Point to consider in the derivative computation.
+      \param ParamM : Parameters of the warping function.
+      \param dW : Resulting derivative matrix.
+    */
+    void dWarp(const vpColVector &X1,const vpColVector &X2,const vpColVector &ParamM,vpMatrix &dW);
+
+    /*!
+      Compute the compositionnal derivative of the warping function according to its parameters.
+
+      \param X1 : Point to consider in the derivative computation.
+      \param X2 : Point to consider in the derivative computation.
+      \param ParamM : Parameters of the warping function.
+      \param dwdp0 : Derivative matrix of the warping function according to the initial warping function parameters (p=0).
+      \param dW : Resulting compositionnal derivative matrix.
+    */
+    void dWarpCompo(const vpColVector &X1,const vpColVector &X2,const vpColVector &ParamM,const double *dwdp0,vpMatrix &dW);
+
+    /*!
+      Compute the derivative of the image with relation to the warping function parameters.
+
+      \param i : i coordinate (along the rows) of the point to consider in the image.
+      \param j : j coordinate (along the columns) of the point to consider in the image.
+      \param dy : Derivative on the y-axis (along the rows) of the point (i,j).
+      \param dx : Derivative on the x-axis (along the columns) of the point (i,j).
+      \param dIdW : Resulting derivative matrix (Image according to the warping function).
+    */
+    void getdW0(const int &i,const int &j,const double &dy,const double &dx,double *dIdW);
+
+    /*!
+      Compute the derivative of the warping function according to the initial parameters.
+
+      \param i : i coordinate (along the rows) of the point to consider in the image.
+      \param j : j coordinate (along the columns) of the point to consider in the image.
+      \param dIdW : Resulting derivative matrix (Image according to the warping function).
+    */
+    void getdWdp0(const int &i,const int &j,double *dIdW);
+
+    /*!
+      Get the inverse of the warping function parameters.
+
+      \param ParamM : Parameters of the warping function.
+      \param ParamMinv : Inverse parameters.
+    */
+    void getParamInverse(const vpColVector &ParamM,vpColVector &ParamMinv) const;
+
+    /*!
+      Get the parameters of the warping function one level down.
+
+      \param p : Current parameters of the warping function.
+      \param pdown : Resulting parameters on level down.
+    */
+    void getParamPyramidDown(const vpColVector &p,vpColVector &pdown);
+
+    /*!
+      Get the parameters of the warping function one level up.
+
+      \param p : Current parameters of the warping function.
+      \param pup : Resulting parameters one level up.
+    */
+    void getParamPyramidUp(const vpColVector &p,vpColVector &pup);
+
+    /*!
+      Tells if the warping function is ESM compatible.
+
+      \return True if it is ESM compatible, False otherwise.
+    */
+    bool isESMcompatible() const {return false;}
+
+    /*!
+      Get the displacement resulting from the composition of two other displacements.
+
+      \param p1 : First displacement.
+      \param p2 : Second displacement.
+      \param pres : Displacement resulting from the composition of p1 and p2.
+    */
+    void pRondp(const vpColVector &p1, const vpColVector &p2,vpColVector &pres) const;
+
+    /*!
+      Warp a point.
+
+      \param vX : Coordinates of the point to warp.
+      \param vXres : Coordinates of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    void warpX(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM);
+
+    /*!
+      Warp a point.
+
+      \param i : i coordinate (along the rows) of the point to warp.
+      \param j : j coordinate (along the columns) of the point to warp.
+      \param i2 : i coordinate (along the rows) of the warped point.
+      \param j2 : j coordinate (along the columns) of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    void warpX(const int &i,const int &j,double &i2,double &j2,const vpColVector &ParamM);
+
+    /*!
+      Inverse Warp a point.
+
+      \param vX : Coordinates of the point to warp.
+      \param vXres : Coordinates of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    void warpXInv(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM);
+};
+#endif
diff --git a/src/tracking/template-tracker/warp/vpTemplateTrackerWarpTranslation.cpp b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpTranslation.cpp
new file mode 100644
index 00000000..d61f8fc0
--- /dev/null
+++ b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpTranslation.cpp
@@ -0,0 +1,129 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerWarpTranslation.cpp 4649 2014-02-07 14:57:11Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <visp/vpTemplateTrackerWarpTranslation.h>
+
+vpTemplateTrackerWarpTranslation::vpTemplateTrackerWarpTranslation()
+{
+  nbParam = 2 ;
+  dW.resize(2,nbParam);
+}
+
+
+//get the parameter corresponding to the lower level of a gaussian pyramid
+void vpTemplateTrackerWarpTranslation::getParamPyramidDown(const vpColVector &p,vpColVector &pdown)
+{
+  pdown[0]=p[0]/2.;
+  pdown[1]=p[1]/2.;
+}
+
+void vpTemplateTrackerWarpTranslation::getParamPyramidUp(const vpColVector &p,vpColVector &pup)
+{
+  pup[0]=p[0]*2.;
+  pup[1]=p[1]*2.;
+}
+
+/*calcul de di*dw(x,p0)/dp
+*/
+void vpTemplateTrackerWarpTranslation::getdW0(const int &/*i*/,const int &/*j*/,const double &dy,const double &dx,double *dIdW)
+{
+  dIdW[0]=dx;
+  dIdW[1]=dy;
+}
+/*calcul de dw(x,p0)/dp
+*/
+void vpTemplateTrackerWarpTranslation::getdWdp0(const int &/*i*/,const int &/*j*/,double *dIdW)
+{
+  dIdW[0]=1.;
+  dIdW[1]=0;
+
+  dIdW[2]=0;
+  dIdW[3]=1.;
+}
+
+void vpTemplateTrackerWarpTranslation::warpX(const int &i,const int &j,double &i2,double &j2,const vpColVector &ParamM)
+{
+  j2=j+ParamM[0];
+  i2=i+ParamM[1];
+}
+
+
+void vpTemplateTrackerWarpTranslation::warpX(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM)
+{
+  vXres[0]=vX[0]+ParamM[0];
+  vXres[1]=vX[1]+ParamM[1];
+}
+
+void vpTemplateTrackerWarpTranslation::dWarp(const vpColVector &/*X1*/,const vpColVector &/*X2*/,const vpColVector &/*ParamM*/,
+                                             vpMatrix &dW_)
+{
+  dW_[0][0]=1;dW_[0][1]=0;
+  dW_[1][0]=0;dW_[1][1]=1;
+}
+
+/*compute dw=dw/dx*dw/dp
+*/
+void vpTemplateTrackerWarpTranslation::dWarpCompo(const vpColVector &/*X1*/,const vpColVector &/*X2*/,const vpColVector &/*ParamM*/,
+                                                  const double *dwdp0,vpMatrix &dW_)
+{
+  for(unsigned int i=0;i<nbParam;i++)
+  {
+    dW_[0][i]=dwdp0[i];
+    dW_[1][i]=dwdp0[i+nbParam];
+  }
+}
+
+void vpTemplateTrackerWarpTranslation::warpXInv(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM)
+{
+  vXres[0]=vX[0]+ParamM[0];
+  vXres[1]=vX[1]+ParamM[1];
+} 
+void vpTemplateTrackerWarpTranslation::getParamInverse(const vpColVector &ParamM,vpColVector &ParamMinv) const
+{
+  ParamMinv[0]=-ParamM[0];
+  ParamMinv[1]=-ParamM[1];
+} 
+
+void vpTemplateTrackerWarpTranslation::pRondp(const vpColVector &p1, const vpColVector &p2,vpColVector &pres) const
+{
+  pres[0]=p1[0]+p2[0];
+  pres[1]=p1[1]+p2[1];
+}
diff --git a/src/tracking/template-tracker/warp/vpTemplateTrackerWarpTranslation.h b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpTranslation.h
new file mode 100644
index 00000000..61a705fd
--- /dev/null
+++ b/src/tracking/template-tracker/warp/vpTemplateTrackerWarpTranslation.h
@@ -0,0 +1,175 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerWarpTranslation.h 4607 2014-01-21 16:02:11Z ayol $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerWarpTranslation.h
+ \brief Translation warping function: w(X)=X+b with: b= [p0, p1]]
+*/
+
+
+#ifndef vpTemplateTrackerWarpTranslation_hh
+#define vpTemplateTrackerWarpTranslation_hh
+
+#include <visp/vpTemplateTrackerWarp.h>
+
+
+class VISP_EXPORT vpTemplateTrackerWarpTranslation: public vpTemplateTrackerWarp
+{
+  public:
+    //constructor;
+    vpTemplateTrackerWarpTranslation();
+
+    #ifndef DOXYGEN_SHOULD_SKIP_THIS
+    void computeCoeff(const vpColVector &/*p*/){}
+    void computeDenom(vpColVector &/*vX*/, const vpColVector &/*ParamM*/){}
+    #endif
+
+    /*!
+      Compute the derivative of the warping function according to its parameters.
+
+      \param X1 : Point to consider in the derivative computation.
+      \param X2 : Point to consider in the derivative computation.
+      \param ParamM : Parameters of the warping function.
+      \param dW : Resulting derivative matrix.
+    */
+    void dWarp(const vpColVector &X1,const vpColVector &X2,const vpColVector &ParamM,vpMatrix &dW);
+
+    /*!
+      Compute the compositionnal derivative of the warping function according to its parameters.
+
+      \param X1 : Point to consider in the derivative computation.
+      \param X2 : Point to consider in the derivative computation.
+      \param ParamM : Parameters of the warp.
+      \param dwdp0 : Derivative matrix of the warping function according to the initial warping function parameters (p=0).
+      \param dW : Resulting compositionnal derivative matrix.
+    */
+    void dWarpCompo(const vpColVector &X1,const vpColVector &X2,const vpColVector &ParamM,const double *dwdp0,vpMatrix &dW);
+
+    /*!
+      Compute the derivative of the image with relation to the warping function parameters.
+
+      \param i : i coordinate (along the rows) of the point to consider in the image.
+      \param j : j coordinate (along the columns) of the point to consider in the image.
+      \param dy : Derivative on the y-axis (along the rows) of the point (i,j).
+      \param dx : Derivative on the x-axis (along the columns) of the point (i,j).
+      \param dIdW : Resulting derivative matrix (Image according to the warping function).
+    */
+    void getdW0(const int &i,const int &j,const double &dy,const double &dx,double *dIdW);
+
+    /*!
+      Compute the derivative of the warping function according to the initial parameters.
+
+      \param i : i coordinate (along the rows) of the point to consider in the image.
+      \param j : j coordinate (along the columns) of the point to consider in the image.
+      \param dIdW : Resulting derivative matrix (Image according to the warping function).
+    */
+    void getdWdp0(const int &i,const int &j,double *dIdW);
+
+    /*!
+      Get the inverse of the warping function parameters.
+
+      \param ParamM : Parameters of the warping function.
+      \param ParamMinv : Inverse parameters.
+    */
+    void getParamInverse(const vpColVector &ParamM,vpColVector &ParamMinv) const ;
+
+    /*!
+      Get the parameters of the warping function one level down.
+
+      \param p : Current parameters of the warping function.
+      \param pdown : Resulting parameters on level down.
+    */
+    void getParamPyramidDown(const vpColVector &p,vpColVector &pdown);
+
+    /*!
+      Get the parameters of the warping function one level up.
+
+      \param p : Current parameters of the warping function.
+      \param pup : Resulting parameters one level up.
+    */
+    void getParamPyramidUp(const vpColVector &p,vpColVector &pup);
+
+    /*!
+      Tells if the warping function is ESM compatible.
+
+      \return True if it is ESM compatible, False otherwise.
+    */
+    bool isESMcompatible() const {return true;}
+
+    /*!
+      Get the displacement resulting from the composition of two other displacements.
+
+      \param p1 : First displacement.
+      \param p2 : Second displacement.
+      \param pres : Displacement resulting from the composition of p1 and p2.
+    */
+    void pRondp(const vpColVector &p1, const vpColVector &p2,vpColVector &pres) const ;
+
+    /*!
+      Warp a point.
+
+      \param vX : Coordinates of the point to warp.
+      \param vXres : Coordinates of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    void warpX(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM);
+
+    /*!
+      Warp a point.
+
+      \param i : i coordinate (along the rows) of the point to warp.
+      \param j : j coordinate (along the columns) of the point to warp.
+      \param i2 : i coordinate (along the rows) of the warped point.
+      \param j2 : j coordinate (along the columns) of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    void warpX(const int &i,const int &j,double &i2,double &j2,const vpColVector &ParamM);
+
+    /*!
+      Inverse Warp a point.
+
+      \param vX : Coordinates of the point to warp.
+      \param vXres : Coordinates of the warped point.
+      \param ParamM : Parameters of the warping function.
+    */
+    void warpXInv(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM);
+};
+#endif
diff --git a/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCC.cpp b/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCC.cpp
new file mode 100644
index 00000000..d8e866f1
--- /dev/null
+++ b/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCC.cpp
@@ -0,0 +1,134 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerZNCC.cpp 4666 2014-02-16 16:21:33Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <visp/vpTemplateTrackerZNCC.h>
+
+vpTemplateTrackerZNCC::vpTemplateTrackerZNCC(vpTemplateTrackerWarp *warp)
+  : vpTemplateTracker(warp), DI(), temp()
+{
+  dW.resize(2,nbParam);
+  G.resize(nbParam);
+  H.resize(nbParam,nbParam);
+  HLM.resize(nbParam,nbParam);
+
+  temp.resize(nbParam);
+
+  X1.resize(2);
+  X2.resize(2);
+  DI.resize(2);
+}
+
+
+double vpTemplateTrackerZNCC::getCost(const vpImage<unsigned char> &I, vpColVector &tp)
+{
+  double IW,Tij;
+  int i,j;
+  double i2,j2;
+  int Nbpoint=0;
+
+  Warp->computeCoeff(tp);
+
+  double moyTij=0;
+  double moyIW=0;
+  for(unsigned int point=0;point<templateSize;point++)
+  {
+    i=ptTemplate[point].y;
+    j=ptTemplate[point].x;
+    X1[0]=j;X1[1]=i;
+    Warp->computeDenom(X1,tp);
+    Warp->warpX(X1,X2,tp);
+
+    j2=X2[0];i2=X2[1];
+    if((j2<I.getWidth()-1)&&(i2<I.getHeight()-1)&&(i2>0)&&(j2>0))
+    {
+      Tij=ptTemplate[point].val;
+      if(!blur)
+        IW=I.getValue(i2,j2);
+      else
+        IW=BI.getValue(i2,j2);
+      //IW=getSubPixBspline4(I,i2,j2);
+      moyTij+=Tij;
+      moyIW+=IW;
+      Nbpoint++;
+    }
+  }
+  ratioPixelIn=(double)Nbpoint/(double)templateSize;
+  if(! Nbpoint) {
+    throw(vpException(vpException::divideByZeroError,
+          "Cannot get cost: size = 0")) ;
+  }
+
+  moyTij=moyTij/Nbpoint;
+  moyIW=moyIW/Nbpoint;
+
+  double nom=0,denom=0;
+  double var1=0,var2=0;
+  for(unsigned int point=0;point<templateSize;point++)
+  {
+    i=ptTemplate[point].y;
+    j=ptTemplate[point].x;
+    X1[0]=j;X1[1]=i;
+    Warp->computeDenom(X1,tp);
+    Warp->warpX(X1,X2,tp);
+
+    j2=X2[0];i2=X2[1];
+    if((j2<I.getWidth()-1)&&(i2<I.getHeight()-1)&&(i2>0)&&(j2>0))
+    {
+      Tij=ptTemplate[point].val;
+      if(!blur)
+        IW=I.getValue(i2,j2);
+      else
+        IW=BI.getValue(i2,j2);
+      //IW=getSubPixBspline4(I,i2,j2);
+      nom+=(Tij-moyTij)*(IW-moyIW);
+      denom+=(Tij-moyTij)*(Tij-moyTij)*(IW-moyIW)*(IW-moyIW);
+      var1+=(IW-moyIW)*(IW-moyIW);
+      var2+=(Tij-moyTij)*(Tij-moyTij);
+
+      Nbpoint++;
+    }
+  }
+  if(Nbpoint==0)return 10e10;
+  //return -nom/sqrt(denom);
+  return -nom/sqrt(var1*var2);
+}
+
+
diff --git a/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCC.h b/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCC.h
new file mode 100644
index 00000000..f0e51413
--- /dev/null
+++ b/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCC.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerZNCC.h 4666 2014-02-16 16:21:33Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerZNCC.h
+ \brief
+*/
+
+#ifndef vpTemplateTrackerZNCC_hh
+#define vpTemplateTrackerZNCC_hh
+
+#include <math.h>
+
+#include <visp/vpTemplateTracker.h>
+#include <visp/vpImage.h>
+#include <visp/vpDisplay.h>
+#include <visp/vpImageTools.h>
+#include <visp/vpIoTools.h>
+#include <visp/vpImageTools.h>
+#include <visp/vpImageFilter.h>
+#include <visp/vpMath.h>
+#include <visp/vpList.h>
+#include <visp/vpHomography.h>
+
+#define APPROX_NCC
+
+class VISP_EXPORT vpTemplateTrackerZNCC: public vpTemplateTracker
+{
+  protected:
+    vpRowVector   DI;
+    vpRowVector   temp;
+
+  protected:
+            double getCost(const vpImage<unsigned char> &I, vpColVector &tp) ;
+            double getCost(const vpImage<unsigned char> &I) {vpColVector tp; return getCost(I,tp);}
+    virtual void   initHessienDesired(const vpImage<unsigned char> &I)=0;
+    virtual void   trackNoPyr(const vpImage<unsigned char> &I)=0;
+
+  public:
+    vpTemplateTrackerZNCC(vpTemplateTrackerWarp *warp);
+
+    void   setGain(double _gain){gain=_gain;}
+};
+#endif
+
diff --git a/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCForwardAdditional.cpp b/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCForwardAdditional.cpp
new file mode 100644
index 00000000..1954f235
--- /dev/null
+++ b/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCForwardAdditional.cpp
@@ -0,0 +1,323 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerZNCCForwardAdditional.cpp 4574 2014-01-09 08:48:51Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <visp/vpTemplateTrackerZNCCForwardAdditional.h>
+#include <visp/vpImageFilter.h>
+
+vpTemplateTrackerZNCCForwardAdditional::vpTemplateTrackerZNCCForwardAdditional(vpTemplateTrackerWarp *warp):vpTemplateTrackerZNCC(warp)
+{
+  useCompositionnal=false;
+}
+
+void vpTemplateTrackerZNCCForwardAdditional::initHessienDesired(const vpImage<unsigned char> &I)
+{
+  if(blur)
+    vpImageFilter::filter(I, BI,fgG,taillef);
+  vpImageFilter::getGradXGauss2D(I, dIx, fgG,fgdG,taillef);
+  vpImageFilter::getGradYGauss2D(I, dIy, fgG,fgdG,taillef);
+
+  vpImage<double> dIxx,dIxy,dIyx,dIyy;
+  vpImageFilter::getGradX(dIx, dIxx, fgdG,taillef);
+  vpImageFilter::getGradY(dIx, dIxy, fgdG,taillef);
+
+  vpImageFilter::getGradX(dIy, dIyx, fgdG,taillef);
+  vpImageFilter::getGradY(dIy, dIyy, fgdG,taillef);
+
+  Warp->computeCoeff(p);
+  double IW,dIWx,dIWy;
+  double Tij;
+  int i,j;
+  double i2,j2;
+  int Nbpoint=0;
+
+  double moyTij=0;
+  double moyIW=0;
+  double denom=0;
+  for(unsigned int point=0;point<templateSize;point++)
+  {
+    i=ptTemplate[point].y;
+    j=ptTemplate[point].x;
+    X1[0]=j;X1[1]=i;
+    X2[0]=j;X2[1]=i;
+
+    Warp->computeDenom(X1,p);
+
+    j2=X2[0];i2=X2[1];
+
+    if((i2>=0)&&(j2>=0)&&(i2<I.getHeight()-1)&&(j2<I.getWidth()-1))
+    {
+      Tij=ptTemplate[point].val;
+
+      if(!blur)
+        IW=I.getValue(i2,j2);
+      else
+        IW=BI.getValue(i2,j2);
+
+      Nbpoint++;
+      moyTij+=Tij;
+      moyIW+=IW;
+    }
+  }
+  moyTij=moyTij/Nbpoint;
+  moyIW=moyIW/Nbpoint;
+  Hdesire=0;
+  for(unsigned int point=0;point<templateSize;point++)
+  {
+    i=ptTemplate[point].y;
+    j=ptTemplate[point].x;
+    X1[0]=j;X1[1]=i;
+    X2[0]=j;X2[1]=i;
+
+    Warp->computeDenom(X1,p);
+
+    j2=X2[0];i2=X2[1];
+
+    if((i2>=0)&&(j2>=0)&&(i2<I.getHeight()-1)&&(j2<I.getWidth()-1))
+    {
+      Tij=ptTemplate[point].val;
+
+      if(!blur)
+        IW=I.getValue(i2,j2);
+      else
+        IW=BI.getValue(i2,j2);
+
+      dIWx=dIx.getValue(i2,j2);
+      dIWy=dIy.getValue(i2,j2);
+      //Calcul du Hessien
+      Warp->dWarp(X1,X2,p,dW);
+      double *tempt=new double[nbParam];
+      for(unsigned int it=0;it<nbParam;it++)
+        tempt[it]=dW[0][it]*dIWx+dW[1][it]*dIWy;
+
+
+      double prod=(Tij-moyTij);
+
+      double d_Ixx=dIxx.getValue(i2,j2);
+      double d_Iyy=dIyy.getValue(i2,j2);
+      double d_Ixy=dIxy.getValue(i2,j2);
+
+      for(unsigned int it=0;it<nbParam;it++)
+        for(unsigned int jt=0;jt<nbParam;jt++)
+          Hdesire[it][jt] +=prod*(dW[0][it]*(dW[0][jt]*d_Ixx+dW[1][jt]*d_Ixy)
+              +dW[1][it]*(dW[0][jt]*d_Ixy+dW[1][jt]*d_Iyy));
+      /*Hdesire[0][0]+=prod*d_Ixx;
+      Hdesire[1][0]+=prod*d_Ixy;
+      Hdesire[0][1]+=prod*d_Ixy;
+      Hdesire[1][1]+=prod*d_Iyy;*/
+
+      denom+=(Tij-moyTij)*(Tij-moyTij)*(IW-moyIW)*(IW-moyIW);
+      delete[] tempt;
+    }
+
+
+  }
+
+  Hdesire=Hdesire/sqrt(denom);
+  vpMatrix::computeHLM(Hdesire,lambdaDep,HLMdesire);
+  HLMdesireInverse=HLMdesire.inverseByLU();
+  //std::cout<<"Hdesire = "<<Hdesire<<std::endl;
+
+}
+
+void vpTemplateTrackerZNCCForwardAdditional::trackNoPyr(const vpImage<unsigned char> &I)
+{
+  double erreur=0;
+  int Nbpoint=0;
+
+  if(blur)
+    vpImageFilter::filter(I, BI,fgG,taillef);
+  vpImageFilter::getGradXGauss2D(I, dIx, fgG,fgdG,taillef);
+  vpImageFilter::getGradYGauss2D(I, dIy, fgG,fgdG,taillef);
+
+  /*vpImage<double> dIxx,dIxy,dIyx,dIyy;
+  getGradX(dIx, dIxx, fgdG,taillef);
+  getGradY(dIx, dIxy, fgdG,taillef);
+
+  getGradX(dIy, dIyx, fgdG,taillef);
+  getGradY(dIy, dIyy, fgdG,taillef);*/
+
+  dW=0;
+
+  //double lambda=lambdaDep;
+  double IW,dIWx,dIWy;
+  double Tij;
+  unsigned int iteration=0;
+  int i,j;
+  double i2,j2;
+  double alpha=2.;
+  do
+  {
+    Nbpoint=0;
+    erreur=0;
+    G=0;
+    H=0 ;
+    Warp->computeCoeff(p);
+    double moyTij=0;
+    double moyIW=0;
+    double denom=0;
+    for(unsigned int point=0;point<templateSize;point++)
+    {
+      i=ptTemplate[point].y;
+      j=ptTemplate[point].x;
+      X1[0]=j;X1[1]=i;
+
+      Warp->computeDenom(X1,p);
+      Warp->warpX(X1,X2,p);
+
+      j2=X2[0];i2=X2[1];
+      if((i2>=0)&&(j2>=0)&&(i2<I.getHeight()-1)&&(j2<I.getWidth()-1))
+      {
+        Tij=ptTemplate[point].val;
+
+        if(!blur)
+          IW=I.getValue(i2,j2);
+        else
+          IW=BI.getValue(i2,j2);
+
+        Nbpoint++;
+        moyTij+=Tij;
+        moyIW+=IW;
+      }
+    }
+
+    if(! Nbpoint) {
+      throw(vpException(vpException::divideByZeroError,
+            "Cannot track the template: no point")) ;
+    }
+
+    moyTij=moyTij/Nbpoint;
+    moyIW=moyIW/Nbpoint;
+    //vpMatrix d2Wx(nbParam,nbParam);
+    //vpMatrix d2Wy(nbParam,nbParam);
+    for(unsigned int point=0;point<templateSize;point++)
+    {
+      i=ptTemplate[point].y;
+      j=ptTemplate[point].x;
+      X1[0]=j;X1[1]=i;
+
+      Warp->computeDenom(X1,p);
+      Warp->warpX(X1,X2,p);
+
+      j2=X2[0];i2=X2[1];
+      if((i2>=0)&&(j2>=0)&&(i2<I.getHeight()-1)&&(j2<I.getWidth()-1))
+      {
+        Tij=ptTemplate[point].val;
+
+        if(!blur)
+          IW=I.getValue(i2,j2);
+        else
+          IW=BI.getValue(i2,j2);
+
+        dIWx=dIx.getValue(i2,j2);
+        dIWy=dIy.getValue(i2,j2);
+        //Calcul du Hessien
+        Warp->dWarp(X1,X2,p,dW);
+        double *tempt=new double[nbParam];
+        for(unsigned int it=0;it<nbParam;it++)
+          tempt[it]=dW[0][it]*dIWx+dW[1][it]*dIWy;
+
+
+        double prod=(Tij-moyTij);
+        for(unsigned int it=0;it<nbParam;it++)
+          G[it]+=prod*tempt[it];
+
+        /*	Warp->d2Warp(X1,X2,p,d2Wx,d2Wy);
+        for(int it=0;it<nbParam;it++)
+          for(int jt=0;jt<nbParam;jt++)
+            H[it][jt]+=prod*(d2Wx[it][jt]*dIWx+d2Wx[it][jt]*dIWy);*/
+        /*double d_Ixx=dIxx.getValue(i2,j2);
+        double d_Iyy=dIyy.getValue(i2,j2);
+        double d_Ixy=dIxy.getValue(i2,j2);
+
+        for(int it=0;it<nbParam;it++)
+          for(int jt=0;jt<nbParam;jt++)
+            H[it][jt] +=prod*(dW[0][it]*(dW[0][jt]*d_Ixx+dW[1][jt]*d_Ixy)
+                +dW[1][it]*(dW[0][jt]*d_Ixy+dW[1][jt]*d_Iyy));*/
+        /*H[0][0]+=prod*d_Ixx;
+        H[1][0]+=prod*d_Ixy;
+        H[0][1]+=prod*d_Ixy;
+        H[1][1]+=prod*d_Iyy;*/
+
+        double er=(Tij-IW);
+        erreur+=(er*er);
+        denom+=(Tij-moyTij)*(Tij-moyTij)*(IW-moyIW)*(IW-moyIW);
+        delete[] tempt;
+      }
+
+
+    }
+    /*std::cout<<"G="<<G<<std::endl;
+    std::cout<<"H="<<H<<std::endl;
+    std::cout<<" denom="<<denom<<std::endl;*/
+    G=G/sqrt(denom);
+    //std::cout<<G<<std::endl;
+    H=H/sqrt(denom);
+
+    if(Nbpoint==0)std::cout<<"plus de point dans template suivi"<<std::endl;
+
+    try
+    {
+      //vpMatrix::computeHLM(H,lambda,HLM);
+      //dp=1.*HLM.inverseByLU()*G;
+      dp=1.*HLMdesireInverse*G;
+    }
+    catch(...)
+    {
+      std::cout<<"probleme inversion"<<std::endl;
+      break;
+    }
+
+    dp=gain*dp;
+    if(useBrent)
+    {
+      alpha=2.;
+      computeOptimalBrentGain(I,p,erreur/Nbpoint,dp,alpha);
+      dp=alpha*dp;
+    }
+    p-=dp;
+    iteration++;
+  }
+  while( /*( erreur_prec-erreur<50) && */(iteration < iterationMax));
+
+  //std::cout<<"erreur "<<erreur<<std::endl;
+  nbIteration=iteration;
+}
+
diff --git a/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCForwardAdditional.h b/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCForwardAdditional.h
new file mode 100644
index 00000000..5da1c7ec
--- /dev/null
+++ b/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCForwardAdditional.h
@@ -0,0 +1,66 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerZNCCForwardAdditional.h 4574 2014-01-09 08:48:51Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerZNCCForwardAdditional.h
+ \brief
+*/
+
+#ifndef vpTemplateTrackerZNCCForwardAdditional_hh
+#define vpTemplateTrackerZNCCForwardAdditional_hh
+
+
+#include <visp/vpTemplateTrackerZNCC.h>
+
+/*!
+ The algorithm implemented in this class is described in \cite Irani98a.
+ */
+class VISP_EXPORT vpTemplateTrackerZNCCForwardAdditional: public vpTemplateTrackerZNCC
+{
+  protected:
+    void initHessienDesired(const vpImage<unsigned char> &I);
+    void trackNoPyr(const vpImage<unsigned char> &I);
+
+  public:
+    vpTemplateTrackerZNCCForwardAdditional(vpTemplateTrackerWarp *warp);
+};
+#endif
+
diff --git a/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCInverseCompositional.cpp b/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCInverseCompositional.cpp
new file mode 100644
index 00000000..47242759
--- /dev/null
+++ b/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCInverseCompositional.cpp
@@ -0,0 +1,439 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerZNCCInverseCompositional.cpp 4671 2014-02-17 08:59:28Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+#include <limits>   // numeric_limits
+
+#include <visp/vpTemplateTrackerZNCCInverseCompositional.h>
+#include <visp/vpImageFilter.h>
+
+vpTemplateTrackerZNCCInverseCompositional::vpTemplateTrackerZNCCInverseCompositional(vpTemplateTrackerWarp *warp)
+  : vpTemplateTrackerZNCC(warp), compoInitialised(false),
+    evolRMS(0), x_pos(), y_pos(), threshold_RMS(1e-8), moydIrefdp()
+{
+  useInverse=true;
+}
+
+void vpTemplateTrackerZNCCInverseCompositional::initCompInverse(const vpImage<unsigned char> &I)
+{
+  //std::cout<<"Initialise precomputed value of Compositionnal Inverse"<<std::endl;
+  int i,j;
+
+  vpImageFilter::getGradXGauss2D(I, dIx, fgG,fgdG,taillef);
+  vpImageFilter::getGradYGauss2D(I, dIy, fgG,fgdG,taillef);
+
+
+  for(unsigned int point=0;point<templateSize;point++)
+  {
+    i=ptTemplate[point].y;
+    j=ptTemplate[point].x;
+
+    X1[0]=j;X1[1]=i;
+    Warp->computeDenom(X1,p);
+    ptTemplate[point].dW=new double[nbParam];
+
+    double dx=ptTemplate[point].dx;
+    double dy=ptTemplate[point].dy;
+    //std::cout<<ptTemplate[point].dx<<","<<ptTemplate[point].dy<<std::endl;
+
+    Warp->getdW0(i,j,dy,dx,ptTemplate[point].dW);
+
+  }
+  //vpTRACE("fin Comp Inverse");
+  compoInitialised=true;
+}
+
+void vpTemplateTrackerZNCCInverseCompositional::initHessienDesired(const vpImage<unsigned char> &I)
+{
+  initCompInverse(I);
+
+  if(blur)
+    vpImageFilter::filter(I, BI,fgG,taillef);
+  vpImageFilter::getGradXGauss2D(I, dIx, fgG,fgdG,taillef);
+  vpImageFilter::getGradYGauss2D(I, dIy, fgG,fgdG,taillef);
+
+  vpImage<double> dIxx,dIxy,dIyx,dIyy;
+  vpImageFilter::getGradX(dIx, dIxx, fgdG,taillef);
+  vpImageFilter::getGradY(dIx, dIxy, fgdG,taillef);
+
+  vpImageFilter::getGradX(dIy, dIyx, fgdG,taillef);
+  vpImageFilter::getGradY(dIy, dIyy, fgdG,taillef);
+
+  Warp->computeCoeff(p);
+  double Ic,dIcx=0.,dIcy=0.;
+  double Iref;
+  int i,j;
+  double i2,j2;
+  int Nbpoint=0;
+
+  double moyIref=0;
+  double moyIc=0;
+  double denom=0;
+  moydIrefdp.resize(nbParam);	moydIrefdp=0;
+  vpMatrix moyd2Iref(nbParam,nbParam);moyd2Iref=0;
+
+  for(unsigned int point=0;point<templateSize;point++)
+  {
+    i=ptTemplate[point].y;
+    j=ptTemplate[point].x;
+    X1[0]=j;X1[1]=i;
+    X2[0]=j;X2[1]=i;
+
+    Warp->computeDenom(X1,p);
+
+    j2=X2[0];i2=X2[1];
+
+    if((i2>=0)&&(j2>=0)&&(i2<I.getHeight()-1)&&(j2<I.getWidth()-1))
+    {
+      Iref=ptTemplate[point].val;
+
+      if(!blur)
+        Ic=I.getValue(i2,j2);
+      else
+        Ic=BI.getValue(i2,j2);
+
+      Nbpoint++;
+      moyIref+=Iref;
+      moyIc+=Ic;
+
+      for(unsigned int it=0;it<nbParam;it++)
+        moydIrefdp[it]+=ptTemplate[point].dW[it];
+
+
+      Warp->dWarp(X1,X2,p,dW);
+      double *tempt=new double[nbParam];
+      for(unsigned int it=0;it<nbParam;it++)
+        tempt[it]=dW[0][it]*dIcx+dW[1][it]*dIcy;
+      double d_Ixx=dIxx.getValue(i2,j2);
+      double d_Iyy=dIyy.getValue(i2,j2);
+      double d_Ixy=dIxy.getValue(i2,j2);
+
+      for(unsigned int it=0;it<nbParam;it++)
+        for(unsigned int jt=0;jt<nbParam;jt++)
+        {
+          moyd2Iref[it][jt] +=(dW[0][it]*(dW[0][jt]*d_Ixx+dW[1][jt]*d_Ixy)
+              +dW[1][it]*(dW[0][jt]*d_Ixy+dW[1][jt]*d_Iyy));
+        }
+
+      delete[] tempt;
+
+
+    }
+  }
+
+  moyIref=moyIref/Nbpoint;
+  moydIrefdp=moydIrefdp/Nbpoint;
+  moyd2Iref=moyd2Iref/Nbpoint;
+  moyIc=moyIc/Nbpoint;
+  Hdesire=0;
+  double covarIref=0,covarIc=0;
+  double sIcIref=0;
+  vpColVector sIcdIref(nbParam);sIcdIref=0;
+  vpMatrix sIcd2Iref(nbParam,nbParam);sIcd2Iref=0;
+  vpMatrix sdIrefdIref(nbParam,nbParam);sdIrefdIref=0;
+  for(unsigned int point=0;point<templateSize;point++)
+  {
+    i=ptTemplate[point].y;
+    j=ptTemplate[point].x;
+    X1[0]=j;X1[1]=i;
+    X2[0]=j;X2[1]=i;
+
+    Warp->computeDenom(X1,p);
+
+    j2=X2[0];i2=X2[1];
+
+    if((i2>=0)&&(j2>=0)&&(i2<I.getHeight()-1)&&(j2<I.getWidth()-1))
+    {
+      Iref=ptTemplate[point].val;
+
+      if(!blur)
+        Ic=I.getValue(i2,j2);
+      else
+        Ic=BI.getValue(i2,j2);
+
+      dIcx=dIx.getValue(i2,j2);
+      dIcy=dIy.getValue(i2,j2);
+
+      Warp->dWarp(X1,X2,p,dW);
+
+      double *tempt=new double[nbParam];
+      for(unsigned int it=0;it<nbParam;it++)
+        tempt[it]=dW[0][it]*dIcx+dW[1][it]*dIcy;
+
+      double prodIc=(Ic-moyIc);
+
+      double d_Ixx=dIxx.getValue(i2,j2);
+      double d_Iyy=dIyy.getValue(i2,j2);
+      double d_Ixy=dIxy.getValue(i2,j2);
+
+      for(unsigned int it=0;it<nbParam;it++)
+        for(unsigned int jt=0;jt<nbParam;jt++)
+        {
+          sIcd2Iref[it][jt] +=prodIc*(dW[0][it]*(dW[0][jt]*d_Ixx+dW[1][jt]*d_Ixy)
+              +dW[1][it]*(dW[0][jt]*d_Ixy+dW[1][jt]*d_Iyy)-moyd2Iref[it][jt]);
+          sdIrefdIref[it][jt] +=(ptTemplate[point].dW[it]-moydIrefdp[it])*(ptTemplate[point].dW[jt]-moydIrefdp[jt]);
+        }
+
+
+      delete[] tempt;
+
+      for(unsigned int it=0;it<nbParam;it++)
+        sIcdIref[it]+=prodIc*(ptTemplate[point].dW[it]-moydIrefdp[it]);
+
+      covarIref+=(Iref-moyIref)*(Iref-moyIref);
+      covarIc+=(Ic-moyIc)*(Ic-moyIc);
+      sIcIref+=(Iref-moyIref)*(Ic-moyIc);
+    }
+
+
+  }
+  covarIref=sqrt(covarIref);
+  covarIc=sqrt(covarIc);
+
+  denom=covarIref*covarIc;
+
+  double NCC=sIcIref/denom;
+  //std::cout<<"NCC = "<<NCC<<std::endl;
+  vpColVector dcovarIref(nbParam);dcovarIref=-sIcdIref/covarIref;
+
+  vpColVector dNCC(nbParam);dNCC=(sIcdIref/denom-NCC*dcovarIref/covarIref);
+  vpMatrix d2covarIref(nbParam,nbParam);
+  d2covarIref=-(sIcd2Iref-sdIrefdIref+dcovarIref*dcovarIref.t())/covarIref;
+#ifdef APPROX_NCC
+  Hdesire=sIcd2Iref/denom;
+#else
+  Hdesire=(sIcd2Iref-sdIrefdIref+dcovarIref*dcovarIref.t())/denom;
+#endif
+  vpMatrix::computeHLM(Hdesire,lambdaDep,HLMdesire);
+  HLMdesireInverse=HLMdesire.inverseByLU();
+  //std::cout<<"Hdesire = "<<Hdesire<<std::endl;
+}
+
+void vpTemplateTrackerZNCCInverseCompositional::trackNoPyr(const vpImage<unsigned char> &I)
+{
+  if(blur)
+    vpImageFilter::filter(I, BI,fgG,taillef);
+
+  double erreur=0;
+  int Nbpoint=0;
+  vpColVector dpinv(nbParam);
+  double Ic;
+  double Iref;
+  unsigned int iteration=0;
+  int i,j;
+  double i2,j2;
+  initPosEvalRMS(p);
+  do
+  {
+    Nbpoint=0;
+    erreur=0;
+    G=0;
+    Warp->computeCoeff(p);
+    double moyIref=0;
+    double moyIc=0;
+    double denom=0;
+    for(unsigned int point=0;point<templateSize;point++)
+    {
+      i=ptTemplate[point].y;
+      j=ptTemplate[point].x;
+      X1[0]=j;X1[1]=i;
+
+      Warp->computeDenom(X1,p);
+      Warp->warpX(X1,X2,p);
+
+      j2=X2[0];i2=X2[1];
+      if((i2>=0)&&(j2>=0)&&(i2<I.getHeight()-1)&&(j2<I.getWidth()-1))
+      {
+        Iref=ptTemplate[point].val;
+
+        if(!blur)
+          Ic=I.getValue(i2,j2);
+        else
+          Ic=BI.getValue(i2,j2);
+
+        Nbpoint++;
+        moyIref+=Iref;
+        moyIc+=Ic;
+      }
+
+
+    }
+    if(Nbpoint!=0)
+    {
+      moyIref=moyIref/Nbpoint;
+      moyIc=moyIc/Nbpoint;
+      double sIcIref=0;
+      double covarIref=0,covarIc=0;
+      vpColVector sIcdIref(nbParam);sIcdIref=0;
+      vpColVector sIrefdIref(nbParam);sIrefdIref=0;
+
+
+      for(unsigned int point=0;point<templateSize;point++)
+      {
+        i=ptTemplate[point].y;
+        j=ptTemplate[point].x;
+        X1[0]=j;X1[1]=i;
+
+        Warp->computeDenom(X1,p);
+        Warp->warpX(X1,X2,p);
+
+        j2=X2[0];i2=X2[1];
+        if((i2>=0)&&(j2>=0)&&(i2<I.getHeight()-1)&&(j2<I.getWidth()-1))
+        {
+          Iref=ptTemplate[point].val;
+
+          if(!blur)
+            Ic=I.getValue(i2,j2);
+          else
+            Ic=BI.getValue(i2,j2);
+
+
+          double prod=(Ic-moyIc);
+          for(unsigned int it=0;it<nbParam;it++)
+            sIcdIref[it]+=prod*(ptTemplate[point].dW[it]-moydIrefdp[it]);
+          for(unsigned int it=0;it<nbParam;it++)
+            sIrefdIref[it]+=(Iref-moyIref)*(ptTemplate[point].dW[it]-moydIrefdp[it]);
+
+          double er=(Iref-Ic);
+          erreur+=(er*er);
+          //denom+=(Iref-moyIref)*(Iref-moyIref)*(Ic-moyIc)*(Ic-moyIc);
+          covarIref+=(Iref-moyIref)*(Iref-moyIref);
+          covarIc+=(Ic-moyIc)*(Ic-moyIc);
+          sIcIref+=(Iref-moyIref)*(Ic-moyIc);
+        }
+
+
+      }
+      covarIref=sqrt(covarIref);
+      covarIc=sqrt(covarIc);
+      denom=covarIref*covarIc;
+
+      //if(denom==0.0)
+      if (std::fabs(denom) <= std::numeric_limits<double>::epsilon())
+      {
+        diverge=true;
+      }
+      else
+      {
+        double NCC=sIcIref/denom;
+        vpColVector dcovarIref(nbParam);dcovarIref=sIrefdIref/covarIref;
+        G=1.*(sIcdIref/denom-NCC*dcovarIref/covarIref);
+
+
+        try
+        {
+          dp=-1.*HLMdesireInverse*G;
+        }
+        catch(...)
+        {
+          std::cout<<"probleme inversion"<<std::endl;
+          break;
+        }
+
+        Warp->getParamInverse(dp,dpinv);
+        Warp->pRondp(p,dpinv,p);
+
+        computeEvalRMS(p);
+      }
+    }
+    else
+      diverge=true;
+
+    iteration++;
+  }
+  while( (!diverge &&(evolRMS>threshold_RMS) && (iteration < iterationMax)));
+
+  //std::cout<<"erreur "<<erreur<<std::endl;
+  nbIteration=iteration;
+
+  deletePosEvalRMS();
+}
+
+void vpTemplateTrackerZNCCInverseCompositional::initPosEvalRMS(vpColVector &p_)
+{
+  unsigned int nb_corners = zoneTracked->getNbTriangle() * 3;
+  x_pos.resize(nb_corners);
+  y_pos.resize(nb_corners);
+
+  Warp->computeCoeff(p);
+  vpTemplateTrackerTriangle triangle;
+
+  for(unsigned int i=0;i<zoneTracked->getNbTriangle();i++)
+  {
+    zoneTracked->getTriangle(i, triangle);
+    for (unsigned int j=0; j<3; j++) {
+      triangle.getCorner(j, X1[0], X1[1]);
+
+      Warp->computeDenom(X1,p_);
+      Warp->warpX(X1,X2,p_);
+      x_pos[i*3+j]=X2[0];
+      y_pos[i*3+j]=X2[1];
+    }
+  }
+}
+
+void vpTemplateTrackerZNCCInverseCompositional::computeEvalRMS(const vpColVector &p_)
+{
+  unsigned int nb_corners = zoneTracked->getNbTriangle() * 3;
+
+  Warp->computeCoeff(p_);
+  evolRMS=0;
+  vpTemplateTrackerTriangle triangle;
+
+  for(unsigned int i=0;i<zoneTracked->getNbTriangle();i++)
+  {
+    zoneTracked->getTriangle(i, triangle);
+    for (unsigned int j=0; j<3; j++) {
+      triangle.getCorner(j, X1[0], X1[1]);
+
+      Warp->computeDenom(X1,p_);
+      Warp->warpX(X1,X2,p_);
+      evolRMS+=(x_pos[i*3+j]-X2[0])*(x_pos[i*3+j]-X2[0])+(y_pos[i*3+j]-X2[1])*(y_pos[i*3+j]-X2[1]);
+      x_pos[i*3+j]=X2[0];
+      y_pos[i*3+j]=X2[1];
+    }
+  }
+  evolRMS=evolRMS/nb_corners;
+
+}
+
+void vpTemplateTrackerZNCCInverseCompositional::deletePosEvalRMS()
+{
+}
diff --git a/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCInverseCompositional.h b/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCInverseCompositional.h
new file mode 100644
index 00000000..814b2379
--- /dev/null
+++ b/src/tracking/template-tracker/zncc/vpTemplateTrackerZNCCInverseCompositional.h
@@ -0,0 +1,82 @@
+/****************************************************************************
+ *
+ * $Id: vpTemplateTrackerZNCCInverseCompositional.h 4669 2014-02-16 16:25:57Z fspindle $
+ *
+ * This file is part of the ViSP software.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * ("GPL") version 2 as published by the Free Software Foundation.
+ * See the file LICENSE.txt at the root directory of this source
+ * distribution for additional information about the GNU GPL.
+ *
+ * For using ViSP with software that can not be combined with the GNU
+ * GPL, please contact INRIA about acquiring a ViSP Professional
+ * Edition License.
+ *
+ * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
+ *
+ * This software was developed at:
+ * INRIA Rennes - Bretagne Atlantique
+ * Campus Universitaire de Beaulieu
+ * 35042 Rennes Cedex
+ * France
+ * http://www.irisa.fr/lagadic
+ *
+ * If you have questions regarding the use of this file, please contact
+ * INRIA at visp@inria.fr
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Description:
+ * Template tracker.
+ *
+ * Authors:
+ * Amaury Dame
+ * Aurelien Yol
+ * Fabien Spindler
+ *
+ *****************************************************************************/
+/*!
+ \file vpTemplateTrackerZNCCInverseCompositional.h
+ \brief
+*/
+
+#ifndef vpTemplateTrackerZNCCInverseCompositional_hh
+#define vpTemplateTrackerZNCCInverseCompositional_hh
+
+#include <vector>
+
+#include <visp/vpTemplateTrackerZNCC.h>
+
+/*!
+ The algorithm implemented in this class is described in \cite Irani98a.
+ */
+class VISP_EXPORT vpTemplateTrackerZNCCInverseCompositional: public vpTemplateTrackerZNCC
+{
+  protected:
+    bool        compoInitialised;
+    //pour eval evolRMS
+    double      evolRMS;
+    std::vector<double> x_pos;
+    std::vector<double> y_pos;
+    double      threshold_RMS;
+    vpColVector moydIrefdp;
+
+  protected:
+    void initCompInverse(const vpImage<unsigned char> &I);
+    void initHessienDesired(const vpImage<unsigned char> &I);
+    void trackNoPyr(const vpImage<unsigned char> &I);
+    void deletePosEvalRMS();
+    void computeEvalRMS(const vpColVector &p);
+    void initPosEvalRMS(vpColVector &p);
+
+  public:
+          vpTemplateTrackerZNCCInverseCompositional(vpTemplateTrackerWarp *warp);
+
+    void  setThresholdRMS(double threshold){threshold_RMS=threshold;}
+};
+#endif
+
diff --git a/src/video/vpFFMPEG.cpp b/src/video/vpFFMPEG.cpp
index 85dc4cff..744d873c 100644
--- a/src/video/vpFFMPEG.cpp
+++ b/src/video/vpFFMPEG.cpp
@@ -3,7 +3,7 @@
  * $Id: vpImagePoint.h 2359 2009-11-24 15:09:25Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -65,23 +65,15 @@ extern "C"
   Basic constructor.
 */
 vpFFMPEG::vpFFMPEG()
+  : width(-1), height(-1), frameNumber(0), pFormatCtx(NULL), pCodecCtx(NULL),
+    pCodec(NULL), pFrame(NULL), pFrameRGB(NULL), pFrameGRAY(NULL), packet(NULL),
+    img_convert_ctx(NULL), videoStream(0), numBytes(0), buffer(NULL), index(),
+    streamWasOpen(false), streamWasInitialized(false), color_type(COLORED),
+    f(NULL), outbuf(NULL), picture_buf(NULL), outbuf_size(0), out_size(0),
+    bit_rate(500000), encoderWasOpened(false),
+    framerate_stream(-1), framerate_encoder(25)
 {
-  frameNumber = 0;
-  width = -1;
-  height = -1;
-  framerate_stream = -1;
-  framerate_encoder = 25;
-  buffer = NULL;
-  streamWasOpen = false;
-  streamWasInitialized = false;
-  bit_rate = 500000;
-  outbuf = NULL;
-  picture_buf = NULL;
-  f = NULL;
-  encoderWasOpened = false;
   packet = new AVPacket;
-
-  pFormatCtx = NULL;
 }
 
 /*!
@@ -99,14 +91,14 @@ vpFFMPEG::~vpFFMPEG()
   and the dimension of the images using getWidth() and getHeight().
   
   \param filename : Path to the video which has to be read.
-  \param color_type : Desired color map used to open the video.
+  \param colortype : Desired color map used to open the video.
   The parameter can take two values : COLORED and GRAY_SCALED.
   
   \return It returns true if the paramters could be initialized. Else it returns false.
 */
-bool vpFFMPEG::openStream(const char *filename, vpFFMPEGColorType color_type)
+bool vpFFMPEG::openStream(const char *filename, vpFFMPEGColorType colortype)
 {
-  this->color_type = color_type;
+  this->color_type = colortype;
   
   av_register_all();
 #if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53,0,0) // libavformat 52.84.0
@@ -141,7 +133,7 @@ bool vpFFMPEG::openStream(const char *filename, vpFFMPEGColorType color_type)
 #endif
     {
       videoStream = i;
-      std::cout << "rate: " << pFormatCtx->streams[i]->r_frame_rate.num << " " << pFormatCtx->streams[i]->r_frame_rate.den << std::endl;
+      //std::cout << "rate: " << pFormatCtx->streams[i]->r_frame_rate.num << " " << pFormatCtx->streams[i]->r_frame_rate.den << std::endl;
       framerate_stream =  pFormatCtx->streams[i]->r_frame_rate.num;
       framerate_stream /= pFormatCtx->streams[i]->r_frame_rate.den;
       found_codec= true;
@@ -643,8 +635,7 @@ void vpFFMPEG::closeStream()
   Allocates and initializes the parameters depending on the video to write.
   
   \param filename : Path to the video which has to be writen.
-  \param width : Width of the image which will be saved.
-  \param height : Height of the image which will be saved.
+  \param w,h : Width and height of the image which will be saved.
   \param codec : Type of codec used to encode the video.
   
   By default codec is set to AV_CODEC_ID_MPEG1VIDEO. But if installed, you can use one of the
@@ -656,9 +647,9 @@ void vpFFMPEG::closeStream()
   \return It returns true if the paramters could be initialized. Else it returns false.
 */
 #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54,51,110) // libavcodec 54.51.100
-bool vpFFMPEG::openEncoder(const char *filename, unsigned int width, unsigned int height, CodecID codec)
+bool vpFFMPEG::openEncoder(const char *filename, unsigned int w, unsigned int h, CodecID codec)
 #else
-bool vpFFMPEG::openEncoder(const char *filename, unsigned int width, unsigned int height, AVCodecID codec)
+bool vpFFMPEG::openEncoder(const char *filename, unsigned int w, unsigned int h, AVCodecID codec)
 #endif
 {
   av_register_all();
@@ -681,10 +672,10 @@ bool vpFFMPEG::openEncoder(const char *filename, unsigned int width, unsigned in
   /* put sample parameters */
   pCodecCtx->bit_rate = (int)bit_rate;
   /* resolution must be a multiple of two */
-  pCodecCtx->width = (int)width;
-  pCodecCtx->height = (int)height;
-  this->width = (int)width;
-  this->height = (int)height;
+  pCodecCtx->width = (int)w;
+  pCodecCtx->height = (int)h;
+  this->width = (int)w;
+  this->height = (int)h;
   /* frames per second */
   pCodecCtx->time_base= (AVRational){1,framerate_encoder};
   pCodecCtx->gop_size = 10; /* emit one intra frame every ten frames */
diff --git a/src/video/vpFFMPEG.h b/src/video/vpFFMPEG.h
index 5c6b586f..85b0986b 100644
--- a/src/video/vpFFMPEG.h
+++ b/src/video/vpFFMPEG.h
@@ -3,7 +3,7 @@
  * $Id: vpImagePoint.h 2359 2009-11-24 15:09:25Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -252,9 +252,9 @@ class VISP_EXPORT vpFFMPEG
     /*!
      Sets the bit rate of the video when encoding.
 
-     \param bit_rate : the expected bit rate.
+     \param rate : the expected bit rate.
     */
-    inline void setBitRate(const unsigned int bit_rate) {this->bit_rate = bit_rate;}
+    inline void setBitRate(const unsigned int rate) {this->bit_rate = rate;}
     /*!
      Sets the framerate of the video when encoding.
 
diff --git a/src/video/vpVideoReader.cpp b/src/video/vpVideoReader.cpp
index f79518b2..187fce0c 100644
--- a/src/video/vpVideoReader.cpp
+++ b/src/video/vpVideoReader.cpp
@@ -3,7 +3,7 @@
  * $Id: vpImagePoint.h 2359 2009-11-24 15:09:25Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -55,21 +55,15 @@
   Basic constructor.
 */
 vpVideoReader::vpVideoReader()
+  : imSequence(NULL),
+#ifdef VISP_HAVE_FFMPEG
+    ffmpeg(NULL),
+#endif
+    formatType(FORMAT_UNKNOWN), initFileName(false), isOpen(false), frameCount(0),
+    firstFrame(0), lastFrame(0), firstFrameIndexIsSet(false), lastFrameIndexIsSet(false)
 {
-  imSequence = NULL;
-  #ifdef VISP_HAVE_FFMPEG
-  ffmpeg = NULL;
-  #endif
-  initFileName = false;
-  isOpen = false;
-  firstFrame = 0;
-  frameCount = 0;
-  lastFrame = 0;
-  firstFrameIndexIsSet = false;
-  lastFrameIndexIsSet = false;
 }
 
-
 /*!
   Basic destructor.
 */
@@ -105,6 +99,11 @@ void vpVideoReader::setFileName(const char *filename)
     throw (vpImageException(vpImageException::noFileNameError,"filename empty ")) ;
   }
   
+  if (strlen( filename ) >= FILENAME_MAX) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the file name"));
+  }
+
   strcpy(this->fileName,filename);
   
   formatType = getFormat(fileName);
@@ -487,25 +486,30 @@ vpVideoReader::findLastFrameIndex()
 
   if (imSequence != NULL)
   {
-    char name[FILENAME_MAX];
-    int image_number = firstFrame;
-    std::fstream file;
-    bool failed;
-    do
-    {
-      sprintf(name,fileName,image_number) ;
-      file.open(name, std::fstream::in);
-      failed = file.fail();
-      if (!failed) file.close();
-      image_number++;
-    }while(!failed);
-
-    lastFrame = image_number - 2;
+    if (! lastFrameIndexIsSet) {
+      char name[FILENAME_MAX];
+      int image_number = firstFrame;
+      bool failed;
+      do
+      {
+        std::fstream file;
+        sprintf(name,fileName,image_number) ;
+        file.open(name, std::ios::in);
+        failed = file.fail();
+        if (!failed) file.close();
+        image_number++;
+      }while(!failed);
+
+      lastFrame = image_number - 2;
+    }
   }
 
-  #ifdef VISP_HAVE_FFMPEG
-  else if (ffmpeg != NULL)
-    lastFrame = (long)(ffmpeg->getFrameNumber() - 1);
+#ifdef VISP_HAVE_FFMPEG
+  else if (ffmpeg != NULL) {
+    if (! lastFrameIndexIsSet) {
+      lastFrame = (long)(ffmpeg->getFrameNumber() - 1);
+    }
+  }
   #endif
 }
 /*!
@@ -519,11 +523,11 @@ vpVideoReader::findFirstFrameIndex()
     if (! firstFrameIndexIsSet) {
       char name[FILENAME_MAX];
       int image_number = 0;
-      std::fstream file;
       bool failed;
       do {
+        std::fstream file;
         sprintf(name, fileName, image_number) ;
-        file.open(name, std::fstream::in);
+        file.open(name, std::ios::in);
         failed = file.fail();
         if (!failed) file.close();
         image_number++;
diff --git a/src/video/vpVideoReader.h b/src/video/vpVideoReader.h
index 89790d9e..e0da5a4c 100644
--- a/src/video/vpVideoReader.h
+++ b/src/video/vpVideoReader.h
@@ -3,7 +3,7 @@
  * $Id: vpImagePoint.h 2359 2009-11-24 15:09:25Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -101,7 +101,10 @@ int main()
   The other following example explains how to use the class to read a
   sequence of images. The images are stored in the folder "./image" and are
   named "image0000.jpeg", "image0001.jpeg", "image0002.jpeg", ... As explained
-  in setFirstFrameIndex() it is also possible to set the first and last image numbers.
+  in setFirstFrameIndex() and setLastFrameIndex() it is also possible to set the
+  first and last image numbers to read a portion of the sequence. If these two
+  functions are not used, first and last image numbers are set automatically to
+  match the first and image images of the sequence.
 
   \code
 #include <visp/vpImage.h>
@@ -116,6 +119,8 @@ int main()
 
   // Initialize the reader.
   reader.setFileName("./image/image%04d.jpeg");
+  reader.setFirstFrameIndex(10);
+  reader.setLastFrameIndex(20);
   reader.open(I);
 
   while (! reader.end() )
@@ -250,24 +255,24 @@ class VISP_EXPORT vpVideoReader : public vpFrameGrabber
       Enables to set the first frame index if you want to use the class like a grabber (ie with the
       acquire method).
 
-      \param firstFrame : The first frame index.
+      \param first_frame : The first frame index.
 
       \sa setLastFrameIndex()
     */
-    inline void setFirstFrameIndex(const long firstFrame) {
+    inline void setFirstFrameIndex(const long first_frame) {
       this->firstFrameIndexIsSet = true;
-      this->firstFrame = firstFrame;
+      this->firstFrame = first_frame;
     }
     /*!
       Enables to set the last frame index.
 
-      \param lastFrame : The last frame index.
+      \param last_frame : The last frame index.
 
       \sa setFirstFrameIndex()
     */
-    inline void setLastFrameIndex(const long lastFrame) {
+    inline void setLastFrameIndex(const long last_frame) {
       this->lastFrameIndexIsSet = true;
-      this->lastFrame = lastFrame;
+      this->lastFrame = last_frame;
     }
 
   private:
diff --git a/src/video/vpVideoWriter.cpp b/src/video/vpVideoWriter.cpp
index 0e975558..9451e74f 100755
--- a/src/video/vpVideoWriter.cpp
+++ b/src/video/vpVideoWriter.cpp
@@ -3,7 +3,7 @@
  * $Id: vpImagePoint.h 2359 2009-11-24 15:09:25Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -52,21 +52,35 @@
   Basic constructor.
 */
 vpVideoWriter::vpVideoWriter()
+  :
+#ifdef VISP_HAVE_FFMPEG
+    ffmpeg(NULL),
+#  if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54,51,110) // libavcodec 54.51.100
+    codec(CODEC_ID_MPEG1VIDEO),
+#  else
+    codec(AV_CODEC_ID_MPEG1VIDEO),
+#  endif
+    bit_rate(500000),
+    framerate(25),
+#endif
+    formatType(FORMAT_UNKNOWN), initFileName(false), isOpen(false), frameCount(0),
+    firstFrame(0), width(0), height(0)
 {
   initFileName = false;
   firstFrame = 0;
   frameCount = 0;
-  
-  #ifdef VISP_HAVE_FFMPEG
+  isOpen = false;
+  width = height = 0;
+#ifdef VISP_HAVE_FFMPEG
   ffmpeg = NULL;
-#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54,51,110) // libavcodec 54.51.100
+#  if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54,51,110) // libavcodec 54.51.100
   codec = CODEC_ID_MPEG1VIDEO;
-#else
+#  else
   codec = AV_CODEC_ID_MPEG1VIDEO;
-#endif
+#  endif
   bit_rate = 500000;
   framerate = 25;
-  #endif
+#endif
 }
 
 
@@ -96,7 +110,12 @@ void vpVideoWriter::setFileName(const char *filename)
     vpERROR_TRACE("filename empty ") ;
     throw (vpImageException(vpImageException::noFileNameError,"filename empty ")) ;
   }
-  
+
+  if (strlen( filename ) >= FILENAME_MAX) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the file name"));
+  }
+
   strcpy(this->fileName,filename);
   
   formatType = getFormat(fileName);
diff --git a/src/video/vpVideoWriter.h b/src/video/vpVideoWriter.h
index 6a198c63..d8b50e0b 100755
--- a/src/video/vpVideoWriter.h
+++ b/src/video/vpVideoWriter.h
@@ -3,7 +3,7 @@
  * $Id: vpImagePoint.h 2359 2009-11-24 15:09:25Z nmelchio $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -212,16 +212,16 @@ class VISP_EXPORT vpVideoWriter
     /*!
       Sets the bit rate of the video when encoding.
 
-      \param bit_rate : the expected bit rate.
+      \param bitrate : the expected bit rate.
 
       By default the bit rate is set to 500 000.
     */
-    inline void setBitRate(const unsigned int bit_rate) {this->bit_rate = bit_rate;}
+    inline void setBitRate(const unsigned int bitrate) {this->bit_rate = bitrate;}
 
     /*!
       Sets the codec used to encode the video.
 
-      \param codec : the expected codec.
+      \param codec_id : the expected codec.
 
       By default codec is set to AV_CODEC_ID_MPEG1VIDEO. But if installed, you can use one of the
       AVCodecID proposed by ffmpeg such as : AV_CODEC_ID_MPEG2VIDEO, AV_CODEC_ID_MPEG2VIDEO_XVMC,
@@ -230,9 +230,9 @@ class VISP_EXPORT vpVideoWriter
       Of course to use the codec it must be installed on your computer.
     */
 #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54,51,110) // libavcodec 54.51.100
-    inline void setCodec(const CodecID codec) {this->codec = codec;}
+    inline void setCodec(const CodecID codec_id) {this->codec = codec_id;}
 #else
-    inline void setCodec(const AVCodecID codec) {this->codec = codec;}
+    inline void setCodec(const AVCodecID codec_id) {this->codec = codec_id;}
 #endif
 #endif
 
@@ -241,19 +241,19 @@ class VISP_EXPORT vpVideoWriter
     /*!
       Enables to set the first frame index.
       
-      \param firstFrame : The first frame index.
+      \param first_frame : The first frame index.
     */
-    inline void setFirstFrameIndex(const unsigned int firstFrame) {this->firstFrame = firstFrame;}
+    inline void setFirstFrameIndex(const unsigned int first_frame) {this->firstFrame = first_frame;}
 #ifdef VISP_HAVE_FFMPEG
     /*!
       Sets the framerate in Hz of the video when encoding.
 
-      \param framerate : the expected framerate.
+      \param frame_rate : the expected framerate.
 
       By default the framerate is set to 25Hz.
     */
-    inline void setFramerate(const int framerate) {
-      this->framerate = framerate;
+    inline void setFramerate(const int frame_rate) {
+      this->framerate = frame_rate;
     }
 #endif
 
diff --git a/src/visual-feature/vpBasicFeature.cpp b/src/visual-feature/vpBasicFeature.cpp
index 2b228bbe..3c8ccdce 100644
--- a/src/visual-feature/vpBasicFeature.cpp
+++ b/src/visual-feature/vpBasicFeature.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpBasicFeature.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpBasicFeature.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -68,21 +68,39 @@ const unsigned int vpBasicFeature::FEATURE_ALL = 0xffff;
 /*!
   \file vpBasicFeature.cpp
   \brief Class that defines what is a visual feature.
-*/
 
+  Default constructor.
+*/
 vpBasicFeature::vpBasicFeature()
+  : s(), dim_s(0), flags(NULL), nbParameters(0), deallocate(vpBasicFeature::user)
+{
+}
+
+/*!
+  Copy constructor.
+*/
+vpBasicFeature::vpBasicFeature(const vpBasicFeature &f)
+  : s(), dim_s(0), flags(NULL), nbParameters(0), deallocate(vpBasicFeature::user)
 {
-//     featureLine[0] = 0x1 ;
-//     featureLine[1] = 0x2 ;
-//     featureLine[2] = 0x4 ;
-//     featureLine[3] = 0x8 ;
-//     featureLine[4] = 0x10 ;
-//     featureLine[5] = 0x20 ;
-//     featureLine[6] = 0x40 ;
-//     featureLine[7] = 0x80 ;
-    //vpTRACE("0x%x", this);
-    deallocate = vpBasicFeature::user ;
-    flags = NULL;
+  *this = f;
+}
+
+/*!
+  Copy operator.
+*/
+vpBasicFeature &vpBasicFeature::operator=(const vpBasicFeature &f)
+{
+  s = f.s;
+  dim_s = f.dim_s;
+  nbParameters = f.nbParameters;
+  deallocate = f.deallocate;
+  if (flags)
+    delete [] flags;
+  flags = new bool [nbParameters];
+  for (unsigned int i = 0; i < nbParameters; i++)
+    flags[i] = f.flags[i];
+
+  return (*this);
 }
 
 //! Get the feature vector dimension.
diff --git a/src/visual-feature/vpBasicFeature.h b/src/visual-feature/vpBasicFeature.h
index 23258fd4..79215c69 100644
--- a/src/visual-feature/vpBasicFeature.h
+++ b/src/visual-feature/vpBasicFeature.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpBasicFeature.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpBasicFeature.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -106,6 +106,8 @@ public:
   virtual void init() = 0 ;
 
   vpBasicFeature() ;
+  vpBasicFeature(const vpBasicFeature &f) ;
+  vpBasicFeature &operator=(const vpBasicFeature &f) ;
   virtual ~vpBasicFeature() { /*vpTRACE("0x%x", this)*/; }
   //! Return element \e i in the state vector  (usage : x = s[i] )
   virtual inline double operator[](const unsigned int i) const {  return s[i]; }
diff --git a/src/visual-feature/vpFeatureDepth.cpp b/src/visual-feature/vpFeatureDepth.cpp
index 385f543d..e8bc72c9 100644
--- a/src/visual-feature/vpFeatureDepth.cpp
+++ b/src/visual-feature/vpFeatureDepth.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureDepth.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureDepth.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -92,13 +92,15 @@ vpFeatureDepth::init()
     if (flags == NULL)
       flags = new bool[nbParameters];
     for (unsigned int i = 0; i < nbParameters; i++) flags[i] = false;
+    x = y = 0.;
+    Z = 1.;
 }
 
 
 /*! 
   Default constructor that build a visual feature.
 */
-vpFeatureDepth::vpFeatureDepth() : vpBasicFeature()
+vpFeatureDepth::vpFeatureDepth() : x(0), y(0), Z(1.)
 {
     init() ;
 }
@@ -131,12 +133,12 @@ vpFeatureDepth::get_LogZoverZstar() const
 /*!
   Set the value of \f$ x \f$ which represents the x coordinate of the point in the camera frame.
 
-  \param x : \f$ x \f$ value to set.
+  \param x_ : \f$ x \f$ value to set.
 */
 void
-vpFeatureDepth::set_x(const double x)
+vpFeatureDepth::set_x(const double x_)
 {
-    this->x = x ;
+    this->x = x_ ;
     flags[0] = true;
 }
 
@@ -156,12 +158,12 @@ vpFeatureDepth::get_x() const
 /*!
   Set the value of \f$ y \f$ which represents the y coordinate of the point in the camera frame.
 
-  \param y : \f$ y \f$ value to set.
+  \param y_ : \f$ y \f$ value to set.
 */
 void
-vpFeatureDepth::set_y(const double y)
+vpFeatureDepth::set_y(const double y_)
 {
-    this->y = y ;
+    this->y = y_ ;
     flags[1] = true;
 }
 
@@ -180,12 +182,12 @@ vpFeatureDepth::get_y() const
 /*!
   Set the value of \f$ Z \f$ which represents the depth in the 3D camera frame.
 
-  \param Z : \f$ Z \f$ value to set.
+  \param Z_ : \f$ Z \f$ value to set.
 */
 void
-vpFeatureDepth::set_Z(const double Z)
+vpFeatureDepth::set_Z(const double Z_)
 {
-    this->Z = Z ;
+    this->Z = Z_ ;
     flags[2] = true;
 }
 
@@ -205,20 +207,20 @@ vpFeatureDepth::get_Z() const
 /*!
   Set the value of \f$ x \f$, \f$ y \f$, \f$ Z \f$ and \f$ log(\frac{Z}{Z^*}) \f$. \f$ x \f$ and \f$ y \f$ represent the coordinates of the point in the camera frame. \f$ Z \f$ is the 3D coordinate representing the depth. \f$ log(\frac{Z}{Z^*}) \f$ represents the logarithm of the current depth relative to the desired depth.
 
-  \param x : \f$ x \f$ value to set.
-  \param y : \f$ y \f$ value to set.
-  \param Z : \f$ Z \f$ value to set.
+  \param x_ : \f$ x \f$ value to set.
+  \param y_ : \f$ y \f$ value to set.
+  \param Z_ : \f$ Z \f$ value to set.
   \param LogZoverZstar : \f$ log(\frac{Z}{Z^*}) \f$ value to set.
 */
 void
-vpFeatureDepth::set_xyZLogZoverZstar(const double x,
-			const double y,
-			const double Z,
+vpFeatureDepth::set_xyZLogZoverZstar(const double x_,
+      const double y_,
+      const double Z_,
 			const double LogZoverZstar)
 {
-  set_x(x) ;
-  set_y(y) ;
-  set_Z(Z) ;
+  set_x(x_) ;
+  set_y(y_) ;
+  set_Z(Z_) ;
   set_LogZoverZstar(LogZoverZstar) ;
   for( unsigned int i = 0; i < nbParameters; i++) flags[i] = true;
 }
@@ -276,23 +278,23 @@ vpFeatureDepth::interaction(const unsigned int select)
 
   L.resize(1,6) ;
 
-  double x = get_x();
-  double y = get_y();
-  double Z = get_Z();
+  double x_ = get_x();
+  double y_ = get_y();
+  double Z_ = get_Z();
 
-  if (Z < 0)
+  if (Z_ < 0)
   {
     vpERROR_TRACE("Point is behind the camera ") ;
-    std::cout <<"Z = " << Z << std::endl ;
+    std::cout <<"Z = " << Z_ << std::endl ;
 
     throw(vpFeatureException(vpFeatureException::badInitializationError,
 			     "Point is behind the camera ")) ;
   }
 
-  if (fabs(Z) < 1e-6)
+  if (fabs(Z_) < 1e-6)
   {
     vpERROR_TRACE("Point Z coordinates is null ") ;
-    std::cout <<"Z = " << Z << std::endl ;
+    std::cout <<"Z = " << Z_ << std::endl ;
 
     throw(vpFeatureException(vpFeatureException::badInitializationError,
 			     "Point Z coordinates is null")) ;
@@ -303,9 +305,9 @@ vpFeatureDepth::interaction(const unsigned int select)
     L = 0;
     L[0][0] = 0;
     L[0][1] = 0;
-    L[0][2] = -1/Z;
-    L[0][3] = -y;
-    L[0][4] = x;
+    L[0][2] = -1/Z_;
+    L[0][3] = -y_;
+    L[0][4] = x_;
     L[0][5] = 0;
   }
 
@@ -403,20 +405,20 @@ vpFeatureDepth::print(const unsigned int select ) const
 /*!
   Build a 3D depth visual feature from the point coordinates \f$ x \f$ and \f$ y \f$ given in the camera frame, \f$ Z \f$ which describes the depth and \f$ log(\frac{Z}{Z^*}) \f$ which represents the logarithm of the current depth relative to the desired depth.
 
-  \param x : The \f$ x \f$ parameter.
-  \param y : The \f$ y \f$ parameter.
-  \param Z : The \f$ Z \f$ parameter.
+  \param x_ : The \f$ x \f$ parameter.
+  \param y_ : The \f$ y \f$ parameter.
+  \param Z_ : The \f$ Z \f$ parameter.
   \param LogZoverZstar : The \f$ log(\frac{Z}{Z^*}) \f$ parameter.
 */
 void
-vpFeatureDepth::buildFrom(const double x, const double y, const double Z, const double LogZoverZstar)
+vpFeatureDepth::buildFrom(const double x_, const double y_, const double Z_, const double LogZoverZstar)
 {
 
   s[0] = LogZoverZstar;
 
-  this->x = x  ;
-  this->y = y  ;
-  this->Z = Z  ;
+  this->x = x_  ;
+  this->y = y_  ;
+  this->Z = Z_  ;
 
   if (Z < 0)
   {
diff --git a/src/visual-feature/vpFeatureDepth.h b/src/visual-feature/vpFeatureDepth.h
index d6cadd22..17779f12 100644
--- a/src/visual-feature/vpFeatureDepth.h
+++ b/src/visual-feature/vpFeatureDepth.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureDepth.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureDepth.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/visual-feature/vpFeatureDisplay.cpp b/src/visual-feature/vpFeatureDisplay.cpp
index e97aa9ab..f29dae72 100644
--- a/src/visual-feature/vpFeatureDisplay.cpp
+++ b/src/visual-feature/vpFeatureDisplay.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureDisplay.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureDisplay.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/visual-feature/vpFeatureDisplay.h b/src/visual-feature/vpFeatureDisplay.h
index bb39b212..9547c4df 100644
--- a/src/visual-feature/vpFeatureDisplay.h
+++ b/src/visual-feature/vpFeatureDisplay.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureDisplay.h 4062 2013-01-09 10:30:06Z fspindle $
+ * $Id: vpFeatureDisplay.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/visual-feature/vpFeatureEllipse.cpp b/src/visual-feature/vpFeatureEllipse.cpp
index ff30ae64..8c864e16 100644
--- a/src/visual-feature/vpFeatureEllipse.cpp
+++ b/src/visual-feature/vpFeatureEllipse.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureEllipse.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureEllipse.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -97,7 +97,7 @@ vpFeatureEllipse::init()
 
 }
 
-vpFeatureEllipse::vpFeatureEllipse() : vpBasicFeature()
+vpFeatureEllipse::vpFeatureEllipse() : A(0), B(0), C(0)
 {
     init() ;
 }
@@ -343,7 +343,7 @@ void
 vpFeatureEllipse::buildFrom(const double x, const double y,
 			    const double mu20, const double mu11,
 			    const double mu02,
-			    const double A, const double B, const double C)
+          const double a, const double b, const double c)
 {
 
   s[0] = x ;
@@ -352,9 +352,9 @@ vpFeatureEllipse::buildFrom(const double x, const double y,
   s[3] = mu11 ;
   s[4] = mu02 ;
 
-  this->A = A ;
-  this->B = B ;
-  this->C = C ;
+  this->A = a ;
+  this->B = b ;
+  this->C = c ;
 
   for( unsigned int i = 0; i < nbParameters; i++) flags[i] = true;
 }
@@ -382,11 +382,11 @@ vpFeatureEllipse::set_xy(const double x,const double y)
 }
 
 void
-vpFeatureEllipse::setABC(const double A, const double B, const double C)
+vpFeatureEllipse::setABC(const double a, const double b, const double c)
 {
-  this->A = A ;
-  this->B = B ;
-  this->C = C ;
+  this->A = a ;
+  this->B = b ;
+  this->C = c ;
   for( unsigned int i = 5; i < nbParameters; i++) flags[i] = true;
 }
 
diff --git a/src/visual-feature/vpFeatureEllipse.h b/src/visual-feature/vpFeatureEllipse.h
index dd99810a..7e19a333 100644
--- a/src/visual-feature/vpFeatureEllipse.h
+++ b/src/visual-feature/vpFeatureEllipse.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureEllipse.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureEllipse.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/visual-feature/vpFeatureException.h b/src/visual-feature/vpFeatureException.h
index 61cfcc6e..f89311d1 100644
--- a/src/visual-feature/vpFeatureException.h
+++ b/src/visual-feature/vpFeatureException.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureException.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureException.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -70,12 +70,12 @@
  */
 class VISP_EXPORT vpFeatureException : public vpException
 {
-public:
-  /*!
+  public:
+    /*!
     \brief Lists the possible error than can be emmited while calling
     vpFeature member
    */
-  enum errorFeatureCodeEnum
+    enum errorFeatureCodeEnum
     {
       //! feature list or desired feature list is empty
       badErrorVectorError,
@@ -84,25 +84,20 @@ public:
       badInitializationError
     } ;
 
-public:
-  vpFeatureException (const int code, const char * msg)
-    : vpException(code, msg){ ; }
-  vpFeatureException (const int code, const std::string & msg)
-    : vpException(code, msg){ ; }
-  vpFeatureException (const int code)
-    : vpException(code){ ; }
+  public:
+    vpFeatureException (const int id,  const char* format, ...)
+    {
+      this->code = id;
+      va_list args;
+      va_start(args, format);
+      setMessage(format, args);
+      va_end (args);
+    }
+    vpFeatureException (const int id, const std::string & msg)
+      : vpException(id, msg){ ; }
+    vpFeatureException (const int id)
+      : vpException(id){ ; }
 
 };
 
-
-
-
-
-#endif /* #ifndef __vpFeatureException_H */
-
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */
+#endif
diff --git a/src/visual-feature/vpFeatureLine.cpp b/src/visual-feature/vpFeatureLine.cpp
index b04c8525..77d348d7 100644
--- a/src/visual-feature/vpFeatureLine.cpp
+++ b/src/visual-feature/vpFeatureLine.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureLine.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureLine.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -113,7 +113,7 @@ vpFeatureLine::init()
 /*! 
   Default constructor that build a visual feature.
 */
-vpFeatureLine::vpFeatureLine() : vpBasicFeature()
+vpFeatureLine::vpFeatureLine() : A(0), B(0), C(0), D(0)
 {
     init() ;
 }
@@ -139,19 +139,19 @@ vpFeatureLine::setRhoTheta(const double rho, const double theta)
   \f[ AX + BY + CZ + D = 0 \f]
   Those parameters are needed to compute the interaction matrix associated to a visual feature. Normally, two plans are needed to describe a line (the intersection of those two plans). But to compute the interaction matrix only one plan equation is required. The only one restrictions is that the value of D must not be equal to zero !
 
-  \param A : A value to set.
-  \param B : B value to set.
-  \param C : C value to set.
-  \param D : D value to set.
+  \param A_ : A value to set.
+  \param B_ : B value to set.
+  \param C_ : C value to set.
+  \param D_ : D value to set.
 */
 void
-vpFeatureLine::setABCD(const double A, const double B,
-		       const double C, const double D)
+vpFeatureLine::setABCD(const double A_, const double B_,
+           const double C_, const double D_)
 {
-  this->A = A ;
-  this->B = B ;
-  this->C = C ;
-  this->D = D ;
+  this->A = A_ ;
+  this->B = B_ ;
+  this->C = C_ ;
+  this->D = D_ ;
   for(unsigned int i = 2; i < nbParameters; i++) flags[i] = true;
 }
 
@@ -457,22 +457,22 @@ vpFeatureLine::buildFrom(const double rho, const double theta)
 
   \param rho : The \f$ \rho \f$ parameter.
   \param theta : The \f$ \theta \f$ parameter.
-  \param A : A parameter of the plan equation.
-  \param B : B parameter of the plan equation.
-  \param C : C parameter of the plan equation.
-  \param D : D parameter of the plan equation.
+  \param A_ : A parameter of the plan equation.
+  \param B_ : B parameter of the plan equation.
+  \param C_ : C parameter of the plan equation.
+  \param D_ : D parameter of the plan equation.
 
 */
 void vpFeatureLine::buildFrom(const double rho, const double theta,
-			      const double A, const double B,
-			      const double C, const double D)
+            const double A_, const double B_,
+            const double C_, const double D_)
 {
   s[0] = rho ;
   s[1] = theta ;
-  this->A = A ;
-  this->B = B ;
-  this->C = C ;
-  this->D = D ;
+  this->A = A_ ;
+  this->B = B_ ;
+  this->C = C_ ;
+  this->D = D_ ;
   for(unsigned int i = 0; i < nbParameters; i++) flags[i] = true;
 }
 
diff --git a/src/visual-feature/vpFeatureLine.h b/src/visual-feature/vpFeatureLine.h
index 0d946351..f7ad5023 100644
--- a/src/visual-feature/vpFeatureLine.h
+++ b/src/visual-feature/vpFeatureLine.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureLine.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureLine.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/visual-feature/vpFeatureLuminance.cpp b/src/visual-feature/vpFeatureLuminance.cpp
index 63a7d86a..700eda41 100755
--- a/src/visual-feature/vpFeatureLuminance.cpp
+++ b/src/visual-feature/vpFeatureLuminance.cpp
@@ -15,11 +15,7 @@
   \file vpFeatureLuminance.cpp
   \brief Class that defines the image luminance visual feature
 
-  for more details see
-  C. Collewet, E. Marchand, F. Chaumette. Visual
-  servoing set free from image processing. In IEEE Int. Conf. on
-  Robotics and Automation, ICRA'08, Pages 81-86, Pasadena, Californie,
-  Mai 2008.
+  For more details see \cite collewet:inria-00261398..
 */
 
 
@@ -39,6 +35,7 @@ vpFeatureLuminance::init()
 
     firstTimeIn =0 ;
 
+    nbr = nbc = 0;
 }
 
 
@@ -70,17 +67,44 @@ vpFeatureLuminance::init(unsigned int _nbr, unsigned int _nbc, double _Z)
 /*! 
   Default constructor that build a visual feature.
 */
-vpFeatureLuminance::vpFeatureLuminance() : vpBasicFeature()
+vpFeatureLuminance::vpFeatureLuminance()
+  : Z(1), nbr(0), nbc(0), bord(10), pixInfo(NULL), firstTimeIn(0), cam()
 {
     nbParameters = 1;
     dim_s = 0 ;
-    bord = 10 ;
     flags = NULL;
-    pixInfo = NULL;
 
     init() ;
 }
 
+/*!
+ Copy constructor.
+ */
+vpFeatureLuminance::vpFeatureLuminance(const vpFeatureLuminance& f)
+  : vpBasicFeature(f), Z(1), nbr(0), nbc(0), bord(10), pixInfo(NULL), firstTimeIn(0), cam()
+{
+  *this = f;
+}
+
+/*!
+ Copy operator.
+ */
+vpFeatureLuminance &vpFeatureLuminance::operator=(const vpFeatureLuminance& f)
+{
+  Z = f.Z;
+  nbr = f.nbr;
+  nbc = f.nbc;
+  bord = f.bord;
+  firstTimeIn = f.firstTimeIn;
+  cam = f.cam;
+  if (pixInfo)
+    delete [] pixInfo;
+  pixInfo = new vpLuminance[dim_s] ;
+  for(unsigned int i=0; i< dim_s; i++)
+    pixInfo[i] = f.pixInfo[i];
+  return (*this);
+}
+
 /*! 
   Default destructor.
 */
@@ -95,12 +119,12 @@ vpFeatureLuminance::~vpFeatureLuminance()
 /*!
   Set the value of \f$ Z \f$ which represents the depth in the 3D camera frame.
 
-  \param Z : \f$ Z \f$ value to set.
+  \param Z_ : \f$ Z \f$ value to set.
 */
 void
-vpFeatureLuminance::set_Z(const double Z)
+vpFeatureLuminance::set_Z(const double Z_)
 {
-    this->Z = Z ;
+    this->Z = Z_ ;
     flags[0] = true;
 }
 
diff --git a/src/visual-feature/vpFeatureLuminance.h b/src/visual-feature/vpFeatureLuminance.h
index fe68cc76..3e4d9fa6 100755
--- a/src/visual-feature/vpFeatureLuminance.h
+++ b/src/visual-feature/vpFeatureLuminance.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureLuminance.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureLuminance.h 4664 2014-02-16 16:17:54Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -51,11 +51,7 @@
   \file vpFeatureLuminance.h
   \brief Class that defines the image luminance visual feature
 
-  for more details see
-  C. Collewet, E. Marchand, F. Chaumette. Visual
-  servoing set free from image processing. In IEEE Int. Conf. on
-  Robotics and Automation, ICRA'08, Pages 81-86, Pasadena, Californie,
-  Mai 2008.
+  For more details see \cite collewet:inria-00261398.
 */
 
 
@@ -82,11 +78,7 @@ class VISP_EXPORT vpLuminance
   \class vpFeatureLuminance
   \brief Class that defines the image luminance visual feature
 
-  For more details see
-  C. Collewet, E. Marchand, F. Chaumette. Visual
-  servoing set free from image processing. In IEEE Int. Conf. on
-  Robotics and Automation, ICRA'08, Pages 81-86, Pasadena, Californie,
-  Mai 2008.
+  For more details see \cite collewet:inria-00261398.
 */
 
 class VISP_EXPORT vpFeatureLuminance : public vpBasicFeature
@@ -116,7 +108,9 @@ public:
   void init(unsigned int _nbr, unsigned int _nbc, double _Z) ;
 
   vpFeatureLuminance() ;
- 
+  vpFeatureLuminance(const vpFeatureLuminance& f) ;
+  vpFeatureLuminance &operator=(const vpFeatureLuminance& f) ;
+
   //! Destructor.
   virtual ~vpFeatureLuminance()  ;
 
diff --git a/src/visual-feature/vpFeatureMoment.cpp b/src/visual-feature/vpFeatureMoment.cpp
index ae3cd40b..a2a26757 100644
--- a/src/visual-feature/vpFeatureMoment.cpp
+++ b/src/visual-feature/vpFeatureMoment.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureMoment.cpp 4303 2013-07-04 14:14:00Z fspindle $
+ * $Id: vpFeatureMoment.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -142,20 +142,19 @@ void vpFeatureMoment::display (const vpCameraParameters &cam, const vpImage< vpR
 
   \attention The behaviour of this method is not the same as vpMoment::update which only acknowledges the new object. This method also computes the interaction matrices.
 
-  \param A : A coefficient of the plane.
-  \param B : B coefficient of the plane.
-  \param C : C coefficient of the plane.
+  \param A_ : A coefficient of the plane.
+  \param B_ : B coefficient of the plane.
+  \param C_ : C coefficient of the plane.
 */
-void vpFeatureMoment::update (double A, double B, double C){
-    this->A = A;
-    this->B = B;
-    this->C = C;
+void vpFeatureMoment::update (double A_, double B_, double C_){
+    this->A = A_;
+    this->B = B_;
+    this->C = C_;
 
     if(moment==NULL){
         bool found;        
         this->moment = &(moments.get(momentName(),found));
-        if(!found) throw ("Moment not found for feature");
-
+        if(!found) throw vpException(vpException::notInitialized,"Moment not found for feature");
     }
     nbParameters = 1;
     if(this->moment!=NULL){
@@ -235,10 +234,15 @@ vpBasicFeature* vpFeatureMoment::duplicate () const
   
 */
 void vpFeatureMoment::linkTo(vpFeatureMomentDatabase& featureMoments){
-    std::strcpy(_name,name());
-    this->featureMomentsDataBase=&featureMoments;
+  if (strlen( name() ) >= 255) {
+    throw(vpException(vpException::memoryAllocationError,
+                      "Not enough memory to intialize the moment name"));
+  }
+
+  std::strcpy(_name,name());
+  this->featureMomentsDataBase=&featureMoments;
 
-    featureMoments.add(*this,_name);
+  featureMoments.add(*this,_name);
 }
 
 
diff --git a/src/visual-feature/vpFeatureMoment.h b/src/visual-feature/vpFeatureMoment.h
index 85ec2442..76b8b4bc 100644
--- a/src/visual-feature/vpFeatureMoment.h
+++ b/src/visual-feature/vpFeatureMoment.h
@@ -1,9 +1,9 @@
 /****************************************************************************
 *
-* $Id: vpFeatureMoment.h 4276 2013-06-25 12:36:48Z fspindle $
+* $Id: vpFeatureMoment.h 4649 2014-02-07 14:57:11Z fspindle $
 *
 * This file is part of the ViSP software.
-* Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+* Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 *
 * This software is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
@@ -145,8 +145,8 @@ return 0;
 */
 class VISP_EXPORT vpFeatureMoment : public vpBasicFeature{
 protected:
-  vpMoment* moment;
-  vpMoment& getMoment(){return *moment;}
+  const vpMoment* moment;
+  const vpMoment& getMoment() const {return *moment;}
   vpMomentDatabase& moments;
   vpFeatureMomentDatabase* featureMomentsDataBase;
   std::vector<vpMatrix> interaction_matrices;
@@ -155,22 +155,24 @@ protected:
   double B;
   double C;
   char _name[255];
+
 public:
   /*!
   Initializes the feature with information about the database of moment primitives, the object plane, feature database and matrix size.
-  \param moments : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
-  \param A : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-  \param B : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-  \param C : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+  \param data_base : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
+  \param A_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+  \param B_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+  \param C_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
   \param featureMoments : Feature database
   \param nbmatrices : If you want to create a new vpFeatureMoment implementation, your feature will often have a matrix size of n lines. You can specify the number of lines by this parameter.
   */
-  vpFeatureMoment(vpMomentDatabase& moments,double A=0.0, double B=0.0, double C=0.0,vpFeatureMomentDatabase* featureMoments=NULL,unsigned int nbmatrices=1) :
-      moment(NULL),
-        moments(moments),
-        featureMomentsDataBase(featureMoments),
-        interaction_matrices(nbmatrices),
-        A(A),B(B),C(C) {}
+  vpFeatureMoment(vpMomentDatabase& data_base,double A_=0.0, double B_=0.0, double C_=0.0,
+                  vpFeatureMomentDatabase* featureMoments=NULL,unsigned int nbmatrices=1)
+    : moment(NULL),
+      moments(data_base),
+      featureMomentsDataBase(featureMoments),
+      interaction_matrices(nbmatrices),
+      A(A_),B(B_),C(C_) {}
       virtual ~vpFeatureMoment();
 
       virtual void 	compute_interaction (void);
@@ -182,24 +184,24 @@ public:
 
       int 	getDimension (unsigned int select=FEATURE_ALL) const;
       void 	init (void);
-      vpMatrix 	interaction (const unsigned int select=FEATURE_ALL);        
+      vpMatrix 	interaction (const unsigned int select=FEATURE_ALL) ;
       void linkTo(vpFeatureMomentDatabase& featureMoments);
 
       /*!
       Name of the moment corresponding to the feature. This allows to locate the moment
       associated with the feature in the provided database.
       */
-      virtual const char* momentName() = 0;
+      virtual const char* momentName() const = 0;
       /*!
       Name of the feature used to locate it in the database of features.
       */
-      virtual const char* name() = 0;
+      virtual const char* name() const = 0;
       void 	print (const unsigned int select=FEATURE_ALL) const ;
 
       void update (double A, double B, double C);
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
-        void operator=(const vpFeatureMoment &){
+        vpFeatureMoment& operator=(const vpFeatureMoment &){
           throw vpException(vpException::functionNotImplementedError,"Not implemented!");
         }
 #endif
@@ -222,15 +224,17 @@ Duplication is mostly used internally in ViSP.
 */
 class VISP_EXPORT vpMomentGenericFeature : public vpFeatureMoment{
 public:
-  vpMomentGenericFeature(vpMomentDatabase& moments,double A, double B, double C,vpFeatureMomentDatabase* featureMoments, vpMoment* moment) : vpFeatureMoment(moments,A,B,C,featureMoments){this->moment = moment;}
+  vpMomentGenericFeature(vpMomentDatabase& data_base,double A_, double B_, double C_,
+                         vpFeatureMomentDatabase* featureMoments, const vpMoment* p_moment)
+    : vpFeatureMoment(data_base,A_,B_,C_,featureMoments){this->moment = p_moment;}
   /*!
   No specific moment name.
   */
-  const char* momentName() { return NULL;}
+  const char* momentName() const { return NULL;}
   /*!
   No specific feature name.
   */
-  virtual const char* name() { return NULL;}
+  virtual const char* name() const { return NULL;}
 };
 
 #endif
diff --git a/src/visual-feature/vpFeatureMomentAlpha.cpp b/src/visual-feature/vpFeatureMomentAlpha.cpp
index 26ae79e1..9645e49e 100644
--- a/src/visual-feature/vpFeatureMomentAlpha.cpp
+++ b/src/visual-feature/vpFeatureMomentAlpha.cpp
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentImpl.cpp 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -62,8 +62,8 @@ void vpFeatureMomentAlpha::compute_interaction(){
     bool found_moment_centered;
     bool found_FeatureMoment_centered;
 
-    vpMomentCentered& momentCentered = (static_cast<vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered)));
-    vpFeatureMomentCentered& featureMomentCentered = (static_cast<vpFeatureMomentCentered&>(featureMoments->get("vpFeatureMomentCentered",found_FeatureMoment_centered)));
+    const vpMomentCentered& momentCentered = (static_cast<const vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered)));
+    vpFeatureMomentCentered& featureMomentCentered = (static_cast<vpFeatureMomentCentered&>(featureMomentsDataBase->get("vpFeatureMomentCentered",found_FeatureMoment_centered)));
 
     if(!found_moment_centered) throw vpException(vpException::notInitialized,"vpMomentCentered not found");
     if(!found_FeatureMoment_centered) throw vpException(vpException::notInitialized,"vpFeatureMomentCentered not found");
@@ -87,9 +87,9 @@ void vpFeatureMomentAlpha::compute_interaction(){
     bool found_moment_centered;
     bool found_moment_gravity;
 
-    vpMomentCentered& momentCentered = static_cast<vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered));
-    vpMomentGravityCenter& momentGravity = static_cast<vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_moment_gravity));
-    vpMomentObject& momentObject = moment->getObject();
+    const vpMomentCentered& momentCentered = static_cast<const vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered));
+    const vpMomentGravityCenter& momentGravity = static_cast<const vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_moment_gravity));
+    const vpMomentObject& momentObject = moment->getObject();
 
 
     if(!found_moment_centered) throw vpException(vpException::notInitialized,"vpMomentCentered not found");
diff --git a/src/visual-feature/vpFeatureMomentAlpha.h b/src/visual-feature/vpFeatureMomentAlpha.h
index 1f031480..40faae3a 100644
--- a/src/visual-feature/vpFeatureMomentAlpha.h
+++ b/src/visual-feature/vpFeatureMomentAlpha.h
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentImpl.h 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -91,11 +91,11 @@ class VISP_EXPORT vpFeatureMomentAlpha : public vpFeatureMoment{
         /*!
           associated moment name
           */
-        const char* momentName(){ return "vpMomentAlpha";}
+        const char* momentName() const { return "vpMomentAlpha";}
         /*!
           feature name
           */
-        const char* name(){ return "vpFeatureMomentAlpha";}
+        const char* name() const { return "vpFeatureMomentAlpha";}
 };
 #else
 class vpMomentDatabase;
@@ -149,26 +149,26 @@ class VISP_EXPORT vpFeatureMomentAlpha : public vpFeatureMoment{
  public:
     /*!
     Initializes the feature with information about the database of moment primitives, the object plane and feature database.
-    \param moments : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
-    \param A : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-    \param B : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-    \param C : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+    \param data_base : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
+    \param A_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+    \param B_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+    \param C_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
     \param featureMoments : Feature database.
 
     */
-    vpFeatureMomentAlpha(vpMomentDatabase& moments,double A, double B, double C,vpFeatureMomentDatabase* featureMoments=NULL) :
-        vpFeatureMoment(moments,A,B,C,featureMoments,1)
+    vpFeatureMomentAlpha(vpMomentDatabase& data_base,double A_, double B_, double C_,vpFeatureMomentDatabase* featureMoments=NULL) :
+        vpFeatureMoment(data_base,A_,B_,C_,featureMoments,1)
     {}
 
     void compute_interaction();
     /*!
       Associated moment name.
       */
-    const char* momentName(){ return "vpMomentAlpha";}
+    const char* momentName() const { return "vpMomentAlpha";}
     /*!
       Feature name.
       */
-    const char* name(){ return "vpFeatureMomentAlpha";}
+    const char* name() const { return "vpFeatureMomentAlpha";}
 
     vpColVector error (const vpBasicFeature &s_star, const unsigned int select=FEATURE_ALL);
 };
diff --git a/src/visual-feature/vpFeatureMomentArea.cpp b/src/visual-feature/vpFeatureMomentArea.cpp
index a2664649..bd409128 100644
--- a/src/visual-feature/vpFeatureMomentArea.cpp
+++ b/src/visual-feature/vpFeatureMomentArea.cpp
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentArea.cpp 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -80,19 +80,19 @@ void vpFeatureMomentArea::compute_interaction(){
 	else {
 		// Get Xg and Yg
 		bool found_xgyg;
-		vpMomentGravityCenter& momentGravity = static_cast<vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_xgyg));
+		const vpMomentGravityCenter& momentGravity = static_cast<const vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_xgyg));
 		if (!found_xgyg) throw vpException(vpException::notInitialized,"vpMomentGravityCenter not found");
 
 		bool found_m00;
-		vpMomentArea& areamoment = static_cast<vpMomentArea&>(moments.get("vpMomentArea", found_m00));
+		const vpMomentArea& areamoment = static_cast<const vpMomentArea&>(moments.get("vpMomentArea", found_m00));
 		if (!found_m00) throw vpException(vpException::notInitialized,"vpMomentArea not found");
 
 		double Xg = momentGravity.getXg();
 		double Yg = momentGravity.getYg();
 
 		double a = areamoment.get()[0];	// Area scalar
-    //assert(a==mobj.get(0,0));
-    assert(std::fabs(a-mobj.get(0,0)) < a*std::numeric_limits<double>::epsilon());
+        //assert(a==mobj.get(0,0));
+        assert(std::fabs(a-mobj.get(0,0)) < a*std::numeric_limits<double>::epsilon());
 
 		interaction_matrices[0][0][0] = -a*A;
 		interaction_matrices[0][0][1] = -a*B;
diff --git a/src/visual-feature/vpFeatureMomentArea.h b/src/visual-feature/vpFeatureMomentArea.h
index 42045ef6..1d95aac8 100644
--- a/src/visual-feature/vpFeatureMomentArea.h
+++ b/src/visual-feature/vpFeatureMomentArea.h
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentArea.h 3317 2011-09-06 14:14:47Z mbakthav $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -61,25 +61,25 @@ class VISP_EXPORT vpFeatureMomentArea : public vpFeatureMoment{
  public:
         /*!
         Initializes the feature with information about the database of moment primitives, the object plane and feature database.
-        \param moments : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
-        \param A : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-        \param B : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-        \param C : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param data_base : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
+        \param A_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param B_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param C_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
         \param featureMoments : Feature database.
 
         */
-        vpFeatureMomentArea(vpMomentDatabase& moments,double A, double B, double C,vpFeatureMomentDatabase* featureMoments=NULL) :
-            vpFeatureMoment(moments,A,B,C,featureMoments,1){}
+        vpFeatureMomentArea(vpMomentDatabase& data_base,double A_, double B_, double C_,vpFeatureMomentDatabase* featureMoments=NULL) :
+            vpFeatureMoment(data_base,A_,B_,C_,featureMoments,1){}
 
         void compute_interaction();
         /*!
           associated moment name
           */
-        const char* momentName(){ return "vpMomentArea";}
+        const char* momentName() const { return "vpMomentArea";}
         /*!
           feature name
           */
-        const char* name(){ return "vpFeatureMomentArea";}
+        const char* name() const { return "vpFeatureMomentArea";}
 
 };
 #endif
diff --git a/src/visual-feature/vpFeatureMomentAreaNormalized.cpp b/src/visual-feature/vpFeatureMomentAreaNormalized.cpp
index 30142620..5150af6d 100644
--- a/src/visual-feature/vpFeatureMomentAreaNormalized.cpp
+++ b/src/visual-feature/vpFeatureMomentAreaNormalized.cpp
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentImpl.cpp 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -68,14 +68,12 @@ void vpFeatureMomentAreaNormalized::compute_interaction(){
     bool found_FeatureMoment_centered;
 
     bool found_featuremoment_basic;
-    vpFeatureMomentBasic& featureMomentBasic= (static_cast<vpFeatureMomentBasic&>(featureMoments->get("vpFeatureMomentBasic",found_featuremoment_basic)));
+    vpFeatureMomentBasic& featureMomentBasic= (static_cast<vpFeatureMomentBasic&>(featureMomentsDataBase->get("vpFeatureMomentBasic",found_featuremoment_basic)));
 
-
-
-    vpMomentCentered& momentCentered = static_cast<vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered));
-    vpMomentObject& momentObject = moment->getObject();
-    vpMomentAreaNormalized& momentSurfaceNormalized = static_cast<vpMomentAreaNormalized&>(moments.get("vpMomentAreaNormalized",found_moment_surface_normalized));
-    vpFeatureMomentCentered& featureMomentCentered = (static_cast<vpFeatureMomentCentered&>(featureMoments->get("vpFeatureMomentCentered",found_FeatureMoment_centered)));
+    const vpMomentCentered& momentCentered = static_cast<const vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered));
+    const vpMomentObject& momentObject = moment->getObject();
+    const vpMomentAreaNormalized& momentSurfaceNormalized = static_cast<const vpMomentAreaNormalized&>(moments.get("vpMomentAreaNormalized",found_moment_surface_normalized));
+    vpFeatureMomentCentered& featureMomentCentered = (static_cast<vpFeatureMomentCentered&>(featureMomentsDataBase->get("vpFeatureMomentCentered",found_FeatureMoment_centered)));
 
     if(!found_FeatureMoment_centered) throw vpException(vpException::notInitialized, "vpFeatureMomentCentered not found");
     if(!found_moment_surface_normalized) throw vpException(vpException::notInitialized,"vpMomentAreaNormalized not found");
@@ -125,10 +123,10 @@ void vpFeatureMomentAreaNormalized::compute_interaction(){
     bool found_moment_surface_normalized;
     bool found_moment_gravity;
 
-    vpMomentCentered& momentCentered = static_cast<vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered));
-    vpMomentGravityCenter& momentGravity = static_cast<vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_moment_gravity));
-    vpMomentObject& momentObject = moment->getObject();
-    vpMomentAreaNormalized& momentSurfaceNormalized = static_cast<vpMomentAreaNormalized&>(moments.get("vpMomentAreaNormalized",found_moment_surface_normalized));
+    const vpMomentCentered& momentCentered = static_cast<const vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered));
+    const vpMomentGravityCenter& momentGravity = static_cast<const vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_moment_gravity));
+    const vpMomentObject& momentObject = moment->getObject();
+    const vpMomentAreaNormalized& momentSurfaceNormalized = static_cast<const vpMomentAreaNormalized&>(moments.get("vpMomentAreaNormalized",found_moment_surface_normalized));
 
     if (!found_moment_surface_normalized) throw vpException(vpException::notInitialized,"vpMomentAreaNormalized not found");
     if (!found_moment_centered) throw vpException(vpException::notInitialized,"vpMomentCentered not found");
diff --git a/src/visual-feature/vpFeatureMomentAreaNormalized.h b/src/visual-feature/vpFeatureMomentAreaNormalized.h
index b43e2ea2..7004fe33 100644
--- a/src/visual-feature/vpFeatureMomentAreaNormalized.h
+++ b/src/visual-feature/vpFeatureMomentAreaNormalized.h
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentImpl.h 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -77,24 +77,24 @@ class VISP_EXPORT vpFeatureMomentAreaNormalized : public vpFeatureMoment{
  public:
         /*!
         Initializes the feature with information about the database of moment primitives, the object plane and feature database.
-        \param moments : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
+        \param database : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
         \param A : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
         \param B : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
         \param C : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
         \param featureMoments : Feature database.
 
         */
-        vpFeatureMomentAreaNormalized(vpMomentDatabase& moments,double A, double B, double C,vpFeatureMomentDatabase* featureMoments=NULL) :
-            vpFeatureMoment(moments,A,B,C,featureMoments,1){}
+        vpFeatureMomentAreaNormalized(vpMomentDatabase& database,double A_, double B_, double C_,vpFeatureMomentDatabase* featureMoments=NULL)
+          : vpFeatureMoment(database,A_,B_,C_,featureMoments,1){}
         void compute_interaction();
         /*!
           associated moment name
           */
-        const char* momentName(){ return "vpMomentAreaNormalized";}
+        const char* momentName() const { return "vpMomentAreaNormalized";}
         /*!
           feature name
           */
-        const char* name(){ return "vpFeatureMomentAreaNormalized";}
+        const char* name() const { return "vpFeatureMomentAreaNormalized";}
 
 };
 
@@ -160,24 +160,24 @@ class VISP_EXPORT vpFeatureMomentAreaNormalized : public vpFeatureMoment{
  public:
         /*!
         Initializes the feature with information about the database of moment primitives, the object plane and feature database.
-        \param moments : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
-        \param A : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-        \param B : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-        \param C : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param data_base : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
+        \param A_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param B_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param C_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
         \param featureMoments : Feature database.
 
         */
-        vpFeatureMomentAreaNormalized(vpMomentDatabase& moments,double A, double B, double C,vpFeatureMomentDatabase* featureMoments=NULL) :
-            vpFeatureMoment(moments,A,B,C,featureMoments,1){}
+        vpFeatureMomentAreaNormalized(vpMomentDatabase& data_base,double A_, double B_, double C_,vpFeatureMomentDatabase* featureMoments=NULL) :
+            vpFeatureMoment(data_base,A_,B_,C_,featureMoments,1){}
         void compute_interaction();
         /*!
           associated moment name
           */
-        const char* momentName(){ return "vpMomentAreaNormalized";}
+        const char* momentName() const { return "vpMomentAreaNormalized";}
         /*!
           feature name
           */
-        const char* name(){ return "vpFeatureMomentAreaNormalized";}
+        const char* name() const { return "vpFeatureMomentAreaNormalized";}
 
 };
 #endif
diff --git a/src/visual-feature/vpFeatureMomentBasic.cpp b/src/visual-feature/vpFeatureMomentBasic.cpp
index 102ce4a7..08ef40eb 100644
--- a/src/visual-feature/vpFeatureMomentBasic.cpp
+++ b/src/visual-feature/vpFeatureMomentBasic.cpp
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentImpl.cpp 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -48,14 +48,14 @@
 #include <limits>
 /*!
   Default constructor.
-  \param moments : Database of moment primitives.
-  \param A : First plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
-  \param B : Second plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
-  \param C : Third plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
+  \param data_base : Database of moment primitives.
+  \param A_ : First plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
+  \param B_ : Second plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
+  \param C_ : Third plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
   \param featureMoments : Database of features.
 */
-vpFeatureMomentBasic::vpFeatureMomentBasic(vpMomentDatabase& moments,double A, double B, double C,vpFeatureMomentDatabase* featureMoments) :
-    vpFeatureMoment(moments,A,B,C,featureMoments)
+vpFeatureMomentBasic::vpFeatureMomentBasic(vpMomentDatabase& data_base,double A_, double B_, double C_,vpFeatureMomentDatabase* featureMoments) :
+  vpFeatureMoment(data_base,A_,B_,C_,featureMoments), order(0)
 {
 }
 
@@ -65,12 +65,12 @@ vpFeatureMomentBasic::vpFeatureMomentBasic(vpMomentDatabase& moments,double A, d
 */
 void vpFeatureMomentBasic::compute_interaction(){
     int delta;
-    vpMomentObject& momentObject = moment->getObject();
-    order = momentObject.getOrder()+1;
+    const vpMomentObject& m = moment->getObject();
+    order = m.getOrder()+1;
     interaction_matrices.resize(order*order);
     for(std::vector< vpMatrix >::iterator i=interaction_matrices.begin();i!=interaction_matrices.end();i++)
         i->resize(1,6);
-    if (momentObject.getType()==vpMomentObject::DISCRETE){
+    if (m.getType()==vpMomentObject::DISCRETE){
         delta=0;
     } else {
         delta=1;
@@ -84,12 +84,12 @@ void vpFeatureMomentBasic::compute_interaction(){
     int WZ = 5;
 
     //i=0;j=0
-    interaction_matrices[0][0][VX] = -delta*A*momentObject.get(0, 0);
-    interaction_matrices[0][0][VY] = -delta*B*momentObject.get(0, 0);
-    interaction_matrices[0][0][VZ] =  3*delta*(A*momentObject.get(1, 0)+B*momentObject.get(0, 1)+C*momentObject.get(0, 0))-delta*C*momentObject.get(0, 0);
+    interaction_matrices[0][0][VX] = -delta*A*m.get(0, 0);
+    interaction_matrices[0][0][VY] = -delta*B*m.get(0, 0);
+    interaction_matrices[0][0][VZ] =  3*delta*(A*m.get(1, 0)+B*m.get(0, 1)+C*m.get(0, 0))-delta*C*m.get(0, 0);
 
-    interaction_matrices[0][0][WX] =  3*delta*momentObject.get(0, 1);
-    interaction_matrices[0][0][WY] = -3*delta*momentObject.get(1, 0);
+    interaction_matrices[0][0][WX] =  3*delta*m.get(0, 1);
+    interaction_matrices[0][0][WY] = -3*delta*m.get(1, 0);
     interaction_matrices[0][0][WZ] = 0;
 
     // int i=0;
@@ -98,13 +98,13 @@ void vpFeatureMomentBasic::compute_interaction(){
       unsigned int jm1_ = j_ - 1;
       unsigned int jp1_ = j_ + 1;
 
-        interaction_matrices[j_*order][0][VX] = -delta*A*momentObject.get(0, j_);
-        interaction_matrices[j_*order][0][VY] = -j*(A*momentObject.get(1,jm1_)+B*momentObject.get(0,j_)+C*momentObject.get(0,jm1_))-delta*B*momentObject.get(0,j_);
-        interaction_matrices[j_*order][0][VZ] = (j+3*delta)*(A*momentObject.get(1,j_)+B*momentObject.get(0,jp1_)+C*momentObject.get(0,j_))-delta*C*momentObject.get(0,j_);
+        interaction_matrices[j_*order][0][VX] = -delta*A*m.get(0, j_);
+        interaction_matrices[j_*order][0][VY] = -j*(A*m.get(1,jm1_)+B*m.get(0,j_)+C*m.get(0,jm1_))-delta*B*m.get(0,j_);
+        interaction_matrices[j_*order][0][VZ] = (j+3*delta)*(A*m.get(1,j_)+B*m.get(0,jp1_)+C*m.get(0,j_))-delta*C*m.get(0,j_);
 
-        interaction_matrices[j_*order][0][WX] = (j+3*delta)*momentObject.get(0,jp1_)+j*momentObject.get(0,jm1_);
-        interaction_matrices[j_*order][0][WY] = -(j+3*delta)*momentObject.get(1,j_);
-        interaction_matrices[j_*order][0][WZ] = -j*momentObject.get(1,jm1_);
+        interaction_matrices[j_*order][0][WX] = (j+3*delta)*m.get(0,jp1_)+j*m.get(0,jm1_);
+        interaction_matrices[j_*order][0][WY] = -(j+3*delta)*m.get(1,j_);
+        interaction_matrices[j_*order][0][WZ] = -j*m.get(1,jm1_);
     }
 
     //int j=0;
@@ -113,13 +113,13 @@ void vpFeatureMomentBasic::compute_interaction(){
       unsigned int im1_ = i_ - 1;
       unsigned int ip1_ = i_ + 1;
 
-      interaction_matrices[i_][0][VX] = -i*(A*momentObject.get(i_, 0)+B*momentObject.get(im1_, 1)+C*momentObject.get(im1_, 0))-delta*A*momentObject.get(i_, 0);
-      interaction_matrices[i_][0][VY] = -delta*B*momentObject.get(i_, 0);
-      interaction_matrices[i_][0][VZ] = (i+3*delta)*(A*momentObject.get(ip1_, 0)+B*momentObject.get(i_, 1)+C*momentObject.get(i_, 0))-delta*C*momentObject.get(i_, 0);
+      interaction_matrices[i_][0][VX] = -i*(A*m.get(i_, 0)+B*m.get(im1_, 1)+C*m.get(im1_, 0))-delta*A*m.get(i_, 0);
+      interaction_matrices[i_][0][VY] = -delta*B*m.get(i_, 0);
+      interaction_matrices[i_][0][VZ] = (i+3*delta)*(A*m.get(ip1_, 0)+B*m.get(i_, 1)+C*m.get(i_, 0))-delta*C*m.get(i_, 0);
 
-      interaction_matrices[i_][0][WX] = (i+3*delta)*momentObject.get(i_, 1);
-      interaction_matrices[i_][0][WY] = -(i+3*delta)*momentObject.get(ip1_, 0)-i*momentObject.get(im1_, 0);
-      interaction_matrices[i_][0][WZ] = i*momentObject.get(im1_, 1);
+      interaction_matrices[i_][0][WX] = (i+3*delta)*m.get(i_, 1);
+      interaction_matrices[i_][0][WY] = -(i+3*delta)*m.get(ip1_, 0)-i*m.get(im1_, 0);
+      interaction_matrices[i_][0][WZ] = i*m.get(im1_, 1);
     }
 
     for(int j=1; j<(int)order-1; j++){
@@ -132,13 +132,13 @@ void vpFeatureMomentBasic::compute_interaction(){
           unsigned int im1_ = i_ - 1;
           unsigned int ip1_ = i_ + 1;
 
-          interaction_matrices[j_*order+i_][0][VX] = -i*(A*momentObject.get(i_, j_)+B*momentObject.get(im1_, jp1_)+C*momentObject.get(im1_,j_))-delta*A*momentObject.get(i_, j_);
-          interaction_matrices[j_*order+i_][0][VY] = -j*(A*momentObject.get(ip1_, jm1_)+B*momentObject.get(i_, j_)+C*momentObject.get(i_,jm1_))-delta*B*momentObject.get(i_, j_);
-          interaction_matrices[j_*order+i_][0][VZ] = (i+j+3*delta)*(A*momentObject.get(ip1_, j_)+B*momentObject.get(i_,jp1_)+C*momentObject.get(i_, j_))-delta*C*momentObject.get(i_,j_);
+          interaction_matrices[j_*order+i_][0][VX] = -i*(A*m.get(i_, j_)+B*m.get(im1_, jp1_)+C*m.get(im1_,j_))-delta*A*m.get(i_, j_);
+          interaction_matrices[j_*order+i_][0][VY] = -j*(A*m.get(ip1_, jm1_)+B*m.get(i_, j_)+C*m.get(i_,jm1_))-delta*B*m.get(i_, j_);
+          interaction_matrices[j_*order+i_][0][VZ] = (i+j+3*delta)*(A*m.get(ip1_, j_)+B*m.get(i_,jp1_)+C*m.get(i_, j_))-delta*C*m.get(i_,j_);
 
-          interaction_matrices[j_*order+i_][0][WX] = (i+j+3*delta)*momentObject.get(i_, jp1_)+j*momentObject.get(i_, jm1_);
-          interaction_matrices[j_*order+i_][0][WY] = -(i+j+3*delta)*momentObject.get(ip1_, j_)-i*momentObject.get(im1_, j_);
-          interaction_matrices[j_*order+i_][0][WZ] = i*momentObject.get(im1_,jp1_)-j*momentObject.get(ip1_, jm1_);
+          interaction_matrices[j_*order+i_][0][WX] = (i+j+3*delta)*m.get(i_, jp1_)+j*m.get(i_, jm1_);
+          interaction_matrices[j_*order+i_][0][WY] = -(i+j+3*delta)*m.get(ip1_, j_)-i*m.get(im1_, j_);
+          interaction_matrices[j_*order+i_][0][WZ] = i*m.get(im1_,jp1_)-j*m.get(ip1_, jm1_);
         }
     }
 }
@@ -149,7 +149,7 @@ Interaction matrix corresponding to \f$ m_{ij} \f$ moment.
 \param select_two : second index (j).
 \return Interaction matrix \f$ L_{m_{ij}} \f$ corresponding to the moment.
 */
-vpMatrix vpFeatureMomentBasic::interaction (unsigned int select_one,unsigned int select_two){
+vpMatrix vpFeatureMomentBasic::interaction (unsigned int select_one,unsigned int select_two) const {
     if(select_one+select_two>moment->getObject().getOrder())
       throw vpException(vpException::badValue,"The requested value has not been computed, you should specify a higher order.");
     return interaction_matrices[select_two*order+select_one];
diff --git a/src/visual-feature/vpFeatureMomentBasic.h b/src/visual-feature/vpFeatureMomentBasic.h
index 90d889a3..64df62c7 100644
--- a/src/visual-feature/vpFeatureMomentBasic.h
+++ b/src/visual-feature/vpFeatureMomentBasic.h
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentImpl.h 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -71,7 +71,7 @@ class vpMomentDatabase;
 
 */
 class VISP_EXPORT vpFeatureMomentBasic : public vpFeatureMoment{
-private:
+protected:
     unsigned int order;
  public:
         vpFeatureMomentBasic(vpMomentDatabase& moments,double A, double B, double C,vpFeatureMomentDatabase* featureMoments=NULL);
@@ -84,15 +84,15 @@ private:
         }
 #endif
 
-        vpMatrix interaction (unsigned int select_one,unsigned int select_two);
+        vpMatrix interaction (unsigned int select_one,unsigned int select_two) const;
         /*!
           Associated moment name.
           */
-        const char* momentName(){ return "vpMomentBasic";}
+        const char* momentName() const { return "vpMomentBasic";}
         /*!
           Feature name.
           */
-        const char* name(){ return "vpFeatureMomentBasic";}
+        const char* name() const { return "vpFeatureMomentBasic";}
 
 };
 #endif
diff --git a/src/visual-feature/vpFeatureMomentCInvariant.cpp b/src/visual-feature/vpFeatureMomentCInvariant.cpp
index d00d1bd4..c6dbe957 100644
--- a/src/visual-feature/vpFeatureMomentCInvariant.cpp
+++ b/src/visual-feature/vpFeatureMomentCInvariant.cpp
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentImpl.cpp 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -68,12 +68,12 @@ void vpFeatureMomentCInvariant::compute_interaction(){
     bool found_FeatureMoment_centered;
     bool found_featuremoment_basic;
 
-    vpMomentObject& momentObject = moment->getObject();
-    vpMomentCentered& momentCentered = (static_cast<vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered)));
-    vpMomentCInvariant& momentCInvariant = (static_cast<vpMomentCInvariant&>(moments.get("vpMomentCInvariant",found_moment_cinvariant)));
-    vpFeatureMomentCentered& featureMomentCentered = (static_cast<vpFeatureMomentCentered&>(featureMoments->get("vpFeatureMomentCentered",found_FeatureMoment_centered)));
+    const vpMomentObject& momentObject = moment->getObject();
+    const vpMomentCentered& momentCentered = (static_cast<const vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered)));
+    const vpMomentCInvariant& momentCInvariant = (static_cast<const vpMomentCInvariant&>(moments.get("vpMomentCInvariant",found_moment_cinvariant)));
+    vpFeatureMomentCentered& featureMomentCentered = (static_cast<vpFeatureMomentCentered&>(featureMomentsDataBase->get("vpFeatureMomentCentered",found_FeatureMoment_centered)));
 
-    vpFeatureMomentBasic& featureMomentBasic= (static_cast<vpFeatureMomentBasic&>(featureMoments->get("vpFeatureMomentBasic",found_featuremoment_basic)));
+    vpFeatureMomentBasic& featureMomentBasic= (static_cast<vpFeatureMomentBasic&>(featureMomentsDataBase->get("vpFeatureMomentBasic",found_featuremoment_basic)));
 
     if(!found_featuremoment_basic) throw vpException(vpException::notInitialized,"vpFeatureMomentBasic not found");
 
@@ -194,7 +194,7 @@ void vpFeatureMomentCInvariant::compute_interaction(){
 #include <vector>
 #include <iostream>
 #include <limits>
-
+#include <cmath>
 
 /*!
   Computes interaction matrix for space-scale-rotation invariants. Called internally.
@@ -214,16 +214,15 @@ void vpFeatureMomentCInvariant::compute_interaction(){
     bool found_FeatureMoment_centered;
     bool found_featuremoment_basic;
 
-    vpMomentObject& momentObject = moment->getObject();
-    vpMomentCentered& momentCentered = (static_cast<vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered)));
-    vpMomentCInvariant& momentCInvariant = (static_cast<vpMomentCInvariant&>(moments.get("vpMomentCInvariant",found_moment_cinvariant)));
+    const vpMomentObject& momentObject = moment->getObject();
+    const vpMomentCentered& momentCentered = (static_cast<const vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered)));
+    const vpMomentCInvariant& momentCInvariant = (static_cast<const vpMomentCInvariant&>(moments.get("vpMomentCInvariant",found_moment_cinvariant)));
+
     vpFeatureMomentCentered& featureMomentCentered = (static_cast<vpFeatureMomentCentered&>(featureMomentsDataBase->get("vpFeatureMomentCentered",found_FeatureMoment_centered)));
 
     vpFeatureMomentBasic& featureMomentBasic= (static_cast<vpFeatureMomentBasic&>(featureMomentsDataBase->get("vpFeatureMomentBasic",found_featuremoment_basic)));
 
     if(!found_featuremoment_basic) throw vpException(vpException::notInitialized,"vpFeatureMomentBasic not found");
-
-
     if(!found_moment_centered) throw vpException(vpException::notInitialized,"vpMomentCentered not found");
     if(!found_moment_cinvariant) throw vpException(vpException::notInitialized,"vpMomentCInvariant not found");
     if(!found_FeatureMoment_centered) throw vpException(vpException::notInitialized,"vpFeatureMomentCentered not found");
@@ -256,8 +255,6 @@ void vpFeatureMomentCInvariant::compute_interaction(){
     double mu12 = momentCentered.get(1,2);
     double mu11 = momentCentered.get(1,1);
 
-
-
     double mu12_2 = mu12*mu12;
     double mu21_2 = mu21*mu21;
     double mu21_3 = mu21*mu21_2;
@@ -282,7 +279,6 @@ void vpFeatureMomentCInvariant::compute_interaction(){
     vpMatrix Lmu41 = featureMomentCentered.interaction(4,1);
     vpMatrix Lmu50 = featureMomentCentered.interaction(5,0);
 
-
     LI[1]= -Lmu20*mu02-mu20*Lmu02+2*mu11*Lmu11;
 
     LI[2]= (-2*mu20+2*mu02)*Lmu02+8*mu11*Lmu11+(2*mu20-2*mu02)*Lmu20;
@@ -317,6 +313,7 @@ void vpFeatureMomentCInvariant::compute_interaction(){
     double s2 = momentCInvariant.getS(2);
     double c3 = momentCInvariant.getC(3);
     double c2 = momentCInvariant.getC(2);
+
     double I1 = momentCInvariant.getII(1);
     double I2 = momentCInvariant.getII(2);
     double I3 = momentCInvariant.getII(3);
@@ -331,7 +328,6 @@ void vpFeatureMomentCInvariant::compute_interaction(){
     vpMatrix LI2 = 2 * (mu03 - 3 * mu21) * (Lc2) + 2 * (mu30 - 3 * mu12) * (Ls2);
     vpMatrix LI3 = Lmu20 + Lmu02;
 
-
     vpMatrix La(1,6);
     double a;
     if(momentObject.getType()==vpMomentObject::DISCRETE){
@@ -341,8 +337,8 @@ void vpFeatureMomentCInvariant::compute_interaction(){
         a = momentObject.get(0,0);
         La = featureMomentBasic.interaction(0,0);
     }
-    interaction_matrices.resize(14);
 
+    interaction_matrices.resize(14);
 
     interaction_matrices[0] = (1./(momentCInvariant.getI(2)*momentCInvariant.getI(2)))*(momentCInvariant.getI(2)*LI[1]-momentCInvariant.getI(1)*LI[2]);
     interaction_matrices[1] = (1./(momentCInvariant.getI(4)*momentCInvariant.getI(4)))*(momentCInvariant.getI(4)*LI[3]-momentCInvariant.getI(3)*LI[4]);
@@ -355,7 +351,6 @@ void vpFeatureMomentCInvariant::compute_interaction(){
 
     interaction_matrices[5] = (1./(momentCInvariant.getI(6)*momentCInvariant.getI(6)))*(momentCInvariant.getI(6)*LI[9]-momentCInvariant.getI(9)*LI[6]);
 
-
     interaction_matrices[6] = (1./(momentCInvariant.getI(10)*momentCInvariant.getI(10)))*(momentCInvariant.getI(10)*LI[11]-momentCInvariant.getI(11)*LI[10]);
 
     interaction_matrices[7] = (1./(momentCInvariant.getI(10)*momentCInvariant.getI(10)))*(momentCInvariant.getI(10)*LI[12]-momentCInvariant.getI(12)*LI[10]);
@@ -364,12 +359,12 @@ void vpFeatureMomentCInvariant::compute_interaction(){
 
     interaction_matrices[9] = (1./(momentCInvariant.getI(15)*momentCInvariant.getI(15)))*(momentCInvariant.getI(15)*LI[14]-momentCInvariant.getI(14)*LI[15]);
 
-
     interaction_matrices[10] = (Lc2 * c3 + c2 * Lc3 + Ls2 * s3 + s2 * Ls3) * sqrt(a) / I1 * pow(I3, -0.3e1 / 0.2e1) + (c2 * c3 + s2 * s3) * pow(a, -0.1e1 / 0.2e1) / I1 * pow(I3, -0.3e1 / 0.2e1) * La / 0.2e1 - (c2 * c3 + s2 * s3) * sqrt(a) * pow(I1, -0.2e1) * pow(I3, -0.3e1 / 0.2e1) * LI1 - 0.3e1 / 0.2e1 * (c2 * c3 + s2 * s3) * sqrt(a) / I1 * pow(I3, -0.5e1 / 0.2e1) * LI3;
 
     interaction_matrices[11] = (Ls2 * c3 + s2 * Lc3 - Lc2 * s3 - c2 * Ls3) * sqrt(a) / I1 * pow(I3, -0.3e1 / 0.2e1) + (s2 * c3 - c2 * s3) * pow(a, -0.1e1 / 0.2e1) / I1 * pow(I3, -0.3e1 / 0.2e1) * La / 0.2e1 - (s2 * c3 - c2 * s3) * sqrt(a) * pow(I1, -0.2e1) * pow(I3, -0.3e1 / 0.2e1) * LI1 - 0.3e1 / 0.2e1 * (s2 * c3 - c2 * s3) * sqrt(a) / I1 * pow(I3, -0.5e1 / 0.2e1) * LI3;
 
     interaction_matrices[12] = (1/(I3*I3))*LI1-(2*I1/(I3*I3*I3))*LI3;
+
     interaction_matrices[13] = (I2/(I3*I3*I3))*La+(a/(I3*I3*I3))*LI2-(3*a*I2/(I3*I3*I3*I3))*LI3;
 }
 #endif
diff --git a/src/visual-feature/vpFeatureMomentCInvariant.h b/src/visual-feature/vpFeatureMomentCInvariant.h
index b6218c45..25826682 100644
--- a/src/visual-feature/vpFeatureMomentCInvariant.h
+++ b/src/visual-feature/vpFeatureMomentCInvariant.h
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentImpl.h 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -96,11 +96,11 @@ class VISP_EXPORT vpFeatureMomentCInvariant : public vpFeatureMoment{
         /*!
           associated moment name
           */
-        const char* momentName(){ return "vpMomentCInvariant";}
+        const char* momentName() const { return "vpMomentCInvariant";}
         /*!
           feature name
           */
-        const char* name(){ return "vpFeatureMomentCInvariant";}
+        const char* name() const { return "vpFeatureMomentCInvariant";}
 
         /*!
           Shortcut selector for \f$C_1\f$.
@@ -201,24 +201,24 @@ class VISP_EXPORT vpFeatureMomentCInvariant : public vpFeatureMoment{
  public:
     /*!
     Initializes the feature with information about the database of moment primitives, the object plane and feature database.
-    \param moments : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
-    \param A : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-    \param B : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-    \param C : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+    \param data_base : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
+    \param A_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+    \param B_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+    \param C_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
     \param featureMoments : Feature database.
 
     */
-    vpFeatureMomentCInvariant(vpMomentDatabase& moments,double A, double B, double C,vpFeatureMomentDatabase* featureMoments=NULL) :
-        vpFeatureMoment(moments,A,B,C,featureMoments,16){}
+    vpFeatureMomentCInvariant(vpMomentDatabase& data_base,double A_, double B_, double C_,vpFeatureMomentDatabase* featureMoments=NULL) :
+        vpFeatureMoment(data_base,A_,B_,C_,featureMoments,16){}
     void compute_interaction();
         /*!
           associated moment name
           */
-        const char* momentName(){ return "vpMomentCInvariant";}
+        const char* momentName() const { return "vpMomentCInvariant";}
         /*!
           feature name
           */
-        const char* name(){ return "vpFeatureMomentCInvariant";}
+        const char* name() const { return "vpFeatureMomentCInvariant";}
 
         /*!
           Shortcut selector for \f$C_1\f$.
diff --git a/src/visual-feature/vpFeatureMomentCentered.cpp b/src/visual-feature/vpFeatureMomentCentered.cpp
index 246230aa..36b7b629 100644
--- a/src/visual-feature/vpFeatureMomentCentered.cpp
+++ b/src/visual-feature/vpFeatureMomentCentered.cpp
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentImpl.cpp 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -55,15 +55,15 @@
 /*!
   Default constructor
   \param moments : Database of moment primitives.
-  \param A : First plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
-  \param B : Second plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
-  \param C : Third plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
+  \param A_ : First plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
+  \param B_ : Second plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
+  \param C_ : Third plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
   \param featureMoments : Database of features.
 */
 vpFeatureMomentCentered::vpFeatureMomentCentered(vpMomentDatabase& moments,
-                                                 double A, double B, double C,
-                                                 vpFeatureMomentDatabase* featureMoments) :
-    vpFeatureMoment(moments,A,B,C,featureMoments)
+                                                 double A_, double B_, double C_,
+                                                 vpFeatureMomentDatabase* featureMoments)
+  : vpFeatureMoment(moments,A_,B_,C_,featureMoments), order(0)
 
 {
 }
@@ -95,15 +95,15 @@ void vpFeatureMomentCentered::compute_interaction(){
     bool found_feature_gravity_center;
     bool found_moment_gravity;
 
-    vpMomentObject& momentObject = moment->getObject();
+    const vpMomentObject& momentObject = moment->getObject();
     order = momentObject.getOrder()+1;
     interaction_matrices.resize(order*order);
     for(std::vector< vpMatrix >::iterator i=interaction_matrices.begin();i!=interaction_matrices.end(); ++i)
         i->resize(1,6);
 
-    vpFeatureMomentBasic& featureMomentBasic= (static_cast<vpFeatureMomentBasic&>(featureMoments->get("vpFeatureMomentBasic",found_featuremoment_basic)));
-    vpFeatureMomentGravityCenter& featureMomentGravityCenter= (static_cast<vpFeatureMomentGravityCenter&>(featureMoments->get("vpFeatureMomentGravityCenter",found_feature_gravity_center)));
-    vpMomentGravityCenter& momentGravity = static_cast<vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_moment_gravity));
+    vpFeatureMomentBasic& featureMomentBasic= (static_cast<vpFeatureMomentBasic&>(featureMomentsDataBase->get("vpFeatureMomentBasic",found_featuremoment_basic)));
+    vpFeatureMomentGravityCenter& featureMomentGravityCenter= (static_cast<vpFeatureMomentGravityCenter&>(featureMomentsDataBase->get("vpFeatureMomentGravityCenter",found_feature_gravity_center)));
+    const vpMomentGravityCenter& momentGravity = static_cast<const vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_moment_gravity));
     vpMatrix zeros(1,6);
     for(int i=0;i<6;i++) zeros[0][i]=0;
 
@@ -147,15 +147,14 @@ void vpFeatureMomentCentered::compute_interaction(){
 
 /*!
   Default constructor
-  \param moments : Database of moment primitives.
-  \param A : First plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
-  \param B : Second plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
-  \param C : Third plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
+  \param data_base : Database of moment primitives.
+  \param A_ : First plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
+  \param B_ : Second plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
+  \param C_ : Third plane coefficient for a plane equation of the following type Ax+By+C=1/Z.
   \param featureMoments : Database of features.
 */
-vpFeatureMomentCentered::vpFeatureMomentCentered(vpMomentDatabase& moments,double A, double B, double C,vpFeatureMomentDatabase* featureMoments) :
-    vpFeatureMoment(moments,A,B,C,featureMoments)
-
+vpFeatureMomentCentered::vpFeatureMomentCentered(vpMomentDatabase& data_base,double A_, double B_, double C_,vpFeatureMomentDatabase* featureMoments)
+  : vpFeatureMoment(data_base,A_,B_,C_,featureMoments), order(0)
 {
 }
 
@@ -165,7 +164,7 @@ Interaction matrix corresponding to \f$ \mu_{ij} \f$ moment
 \param select_two : second index (j)
 \return Interaction matrix corresponding to the moment
 */
-vpMatrix 	vpFeatureMomentCentered::interaction (unsigned int select_one,unsigned int select_two){
+vpMatrix 	vpFeatureMomentCentered::interaction (unsigned int select_one,unsigned int select_two) const {
     if(select_one+select_two>moment->getObject().getOrder())
       throw vpException(vpException::badValue,"The requested value has not been computed, you should specify a higher order.");
     return interaction_matrices[select_two*order+select_one];
@@ -184,15 +183,15 @@ void vpFeatureMomentCentered::compute_interaction(){
     bool found_moment_centered;
     bool found_moment_gravity;
 
-    vpMomentCentered& momentCentered= (static_cast<vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered)));
-    vpMomentGravityCenter& momentGravity = static_cast<vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_moment_gravity));
+    const vpMomentCentered& momentCentered= (static_cast<const vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered)));
+    const vpMomentGravityCenter& momentGravity = static_cast<const vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_moment_gravity));
 
     if(!found_moment_centered) throw vpException(vpException::notInitialized,"vpMomentCentered not found");
     if(!found_moment_gravity) throw vpException(vpException::notInitialized,"vpMomentGravityCenter not found");
 
     int delta;
     int epsilon;
-    vpMomentObject& momentObject = moment->getObject();
+    const vpMomentObject& momentObject = moment->getObject();
     order = momentObject.getOrder()+1;
     interaction_matrices.resize(order*order);
     for (std::vector< vpMatrix >::iterator i=interaction_matrices.begin(); i!=interaction_matrices.end(); ++i)
@@ -299,4 +298,16 @@ void vpFeatureMomentCentered::compute_interaction(){
       }
     }
   }
+
+  std::ostream& operator<<(std::ostream & os, const vpFeatureMomentCentered& mu){
+    vpTRACE(" << CENTRED MOMENTS >>");
+    unsigned int order_m_1 = (unsigned int)(mu.order - 1);
+    for(unsigned int i=0; i<order_m_1; i++){
+        for(unsigned int j=0; j<order_m_1-i; j++){
+            std::cout << "L_mu[" << i << "," << j << "] = ";
+            mu.interaction(i,j).matlabPrint(std::cout);
+        }
+    }
+    return os;
+  }
 #endif
diff --git a/src/visual-feature/vpFeatureMomentCentered.h b/src/visual-feature/vpFeatureMomentCentered.h
index 80e9100c..ccbebc66 100644
--- a/src/visual-feature/vpFeatureMomentCentered.h
+++ b/src/visual-feature/vpFeatureMomentCentered.h
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentImpl.h 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -85,11 +85,11 @@ private:
         /*!
           associated moment name
           */
-        const char* momentName(){ return "vpMomentCentered";}
+        const char* momentName() const { return "vpMomentCentered";}
         /*!
           feature name
           */
-        const char* name(){ return "vpFeatureMomentCentered";}
+        const char* name() const { return "vpFeatureMomentCentered";}
 
 
 };
@@ -117,7 +117,7 @@ class vpMomentDatabase;
       - vpMomentCentered
 */
 class VISP_EXPORT vpFeatureMomentCentered : public vpFeatureMoment{
-private:
+protected:
     unsigned int order;
  public:
         vpFeatureMomentCentered(vpMomentDatabase& moments,double A, double B, double C,vpFeatureMomentDatabase* featureMoments=NULL);
@@ -130,18 +130,18 @@ private:
         }
 #endif
 
-        vpMatrix 	interaction (unsigned int select_one,unsigned int select_two);
+        vpMatrix interaction (unsigned int select_one,unsigned int select_two) const;
 
         /*!
           associated moment name
           */
-        const char* momentName(){ return "vpMomentCentered";}
+        const char* momentName() const { return "vpMomentCentered";}
         /*!
           feature name
           */
-        const char* name(){ return "vpFeatureMomentCentered";}
-
+        const char* name() const { return "vpFeatureMomentCentered";}
 
+        friend VISP_EXPORT std::ostream & operator<<(std::ostream & os, const vpFeatureMomentCentered& v);
 };
 
 #endif
diff --git a/src/visual-feature/vpFeatureMomentCommon.cpp b/src/visual-feature/vpFeatureMomentCommon.cpp
index 40a6e253..7b4bf316 100644
--- a/src/visual-feature/vpFeatureMomentCommon.cpp
+++ b/src/visual-feature/vpFeatureMomentCommon.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureMomentCommon.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureMomentCommon.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -57,7 +57,7 @@ vpFeatureMomentCommon::vpFeatureMomentCommon(vpMomentDatabase& moments,double A,
     featureAlpha(moments,A,B,C),
     featureCentered(moments,A,B,C),
     featureMomentBasic(moments,A,B,C),
-	feature_moment_area(moments,A,B,C)
+    feature_moment_area(moments,A,B,C)
 
 {
     featureGravity.linkTo(*this);
diff --git a/src/visual-feature/vpFeatureMomentCommon.h b/src/visual-feature/vpFeatureMomentCommon.h
index 911e9cb1..4bb96ae9 100644
--- a/src/visual-feature/vpFeatureMomentCommon.h
+++ b/src/visual-feature/vpFeatureMomentCommon.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureMomentCommon.h 4276 2013-06-25 12:36:48Z fspindle $
+ * $Id: vpFeatureMomentCommon.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/visual-feature/vpFeatureMomentDatabase.cpp b/src/visual-feature/vpFeatureMomentDatabase.cpp
index 908a8749..be394342 100644
--- a/src/visual-feature/vpFeatureMomentDatabase.cpp
+++ b/src/visual-feature/vpFeatureMomentDatabase.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureMomentDatabase.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureMomentDatabase.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/visual-feature/vpFeatureMomentDatabase.h b/src/visual-feature/vpFeatureMomentDatabase.h
index 747b08e6..2efa12a9 100644
--- a/src/visual-feature/vpFeatureMomentDatabase.h
+++ b/src/visual-feature/vpFeatureMomentDatabase.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureMomentDatabase.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureMomentDatabase.h 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -162,7 +162,11 @@ class VISP_EXPORT vpFeatureMomentDatabase{
   void add(vpFeatureMoment& featureMoment,char* name);
  public:
   /*!
-    virtual destructor.
+    Default constructor.
+  */
+  vpFeatureMomentDatabase() {}
+  /*!
+    Virtual destructor that does nothing.
   */
   virtual ~vpFeatureMomentDatabase() {}
   virtual void updateAll(double A=0.0, double B=0.0, double C=1.0);
diff --git a/src/visual-feature/vpFeatureMomentGravityCenter.cpp b/src/visual-feature/vpFeatureMomentGravityCenter.cpp
index 8a8f032b..425d757d 100644
--- a/src/visual-feature/vpFeatureMomentGravityCenter.cpp
+++ b/src/visual-feature/vpFeatureMomentGravityCenter.cpp
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentImpl.cpp 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -63,8 +63,8 @@
 void vpFeatureMomentGravityCenter::compute_interaction(){
     bool found_featuremoment_basic;
 
-    vpFeatureMomentBasic& featureMomentBasic= (static_cast<vpFeatureMomentBasic&>(featureMoments->get("vpFeatureMomentBasic",found_featuremoment_basic)));
-    vpMomentObject& momentObject = moment->getObject();
+    vpFeatureMomentBasic& featureMomentBasic= (static_cast<vpFeatureMomentBasic&>(featureMomentsDataBase->get("vpFeatureMomentBasic",found_featuremoment_basic)));
+    const vpMomentObject& momentObject = moment->getObject();
 
     if(!found_featuremoment_basic) throw vpException(vpException::notInitialized,"vpFeatureMomentBasic not found");
 
@@ -104,11 +104,11 @@ void vpFeatureMomentGravityCenter::compute_interaction(){
     bool found_moment_centered;
     bool found_moment_gravity;
 
-    vpMomentCentered& momentCentered= (static_cast<vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered)));
-    vpMomentGravityCenter& momentGravity = static_cast<vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_moment_gravity));
+    const vpMomentCentered& momentCentered= (static_cast<const vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered)));
+    const vpMomentGravityCenter& momentGravity = static_cast<const vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_moment_gravity));
 
 
-    vpMomentObject& momentObject = moment->getObject();
+    const vpMomentObject& momentObject = moment->getObject();
 
     if(!found_moment_centered) throw vpException(vpException::notInitialized,"vpMomentCentered not found");
     if(!found_moment_gravity) throw vpException(vpException::notInitialized,"vpMomentGravityCenter not found");
diff --git a/src/visual-feature/vpFeatureMomentGravityCenter.h b/src/visual-feature/vpFeatureMomentGravityCenter.h
index 6cdb1da1..e79af85c 100644
--- a/src/visual-feature/vpFeatureMomentGravityCenter.h
+++ b/src/visual-feature/vpFeatureMomentGravityCenter.h
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentImpl.h 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -147,24 +147,24 @@ class VISP_EXPORT vpFeatureMomentGravityCenter: public vpFeatureMoment{
  public:
         /*!
         Initializes the feature with information about the database of moment primitives, the object plane and feature database.
-        \param moments : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
-        \param A : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-        \param B : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-        \param C : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param database : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
+        \param A_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param B_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param C_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
         \param featureMoments : Feature database.
         */
-        vpFeatureMomentGravityCenter(vpMomentDatabase& moments,double A, double B, double C,vpFeatureMomentDatabase* featureMoments=NULL) :
-            vpFeatureMoment(moments,A,B,C,featureMoments,2)
+        vpFeatureMomentGravityCenter(vpMomentDatabase& database,double A_, double B_, double C_,vpFeatureMomentDatabase* featureMoments=NULL)
+          : vpFeatureMoment(database,A_,B_,C_,featureMoments,2)
         {}
         void compute_interaction();
         /*!
           Associated moment name.
         */
-        const char* momentName(){ return "vpMomentGravityCenter";}
+        const char* momentName() const { return "vpMomentGravityCenter";}
         /*!
           Feature name.
           */
-        const char* name(){ return "vpFeatureMomentGravityCenter";}
+        const char* name() const { return "vpFeatureMomentGravityCenter";}
 
         /*!
           Shortcut selector for \f$x_g\f$.
@@ -208,24 +208,24 @@ class VISP_EXPORT vpFeatureMomentGravityCenter: public vpFeatureMoment{
  public:
         /*!
         Initializes the feature with information about the database of moment primitives, the object plane and feature database.
-        \param moments : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
-        \param A : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-        \param B : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-        \param C : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param data_base : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
+        \param A_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param B_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param C_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
         \param featureMoments : Feature database.
         */
-        vpFeatureMomentGravityCenter(vpMomentDatabase& moments,double A, double B, double C,vpFeatureMomentDatabase* featureMoments=NULL) :
-            vpFeatureMoment(moments,A,B,C,featureMoments,2)
+        vpFeatureMomentGravityCenter(vpMomentDatabase& data_base,double A_, double B_, double C_,vpFeatureMomentDatabase* featureMoments=NULL) :
+            vpFeatureMoment(data_base,A_,B_,C_,featureMoments,2)
         {}
         void compute_interaction();
         /*!
           Associated moment name.
         */
-        const char* momentName(){ return "vpMomentGravityCenter";}
+        const char* momentName() const { return "vpMomentGravityCenter";}
         /*!
           Feature name.
           */
-        const char* name(){ return "vpFeatureMomentGravityCenter";}
+        const char* name() const { return "vpFeatureMomentGravityCenter";}
 
         /*!
           Shortcut selector for \f$x_g\f$.
diff --git a/src/visual-feature/vpFeatureMomentGravityCenterNormalized.cpp b/src/visual-feature/vpFeatureMomentGravityCenterNormalized.cpp
index b048413f..88b59057 100644
--- a/src/visual-feature/vpFeatureMomentGravityCenterNormalized.cpp
+++ b/src/visual-feature/vpFeatureMomentGravityCenterNormalized.cpp
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentImpl.cpp 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -71,10 +71,10 @@ void vpFeatureMomentGravityCenterNormalized::compute_interaction(){
     bool found_featuremoment_gravity;
     bool found_featuremoment_surfacenormalized;
 
-    vpMomentAreaNormalized& momentSurfaceNormalized = static_cast<vpMomentAreaNormalized&>(moments.get("vpMomentAreaNormalized",found_moment_surface_normalized));
-    vpMomentGravityCenter& momentGravity = static_cast<vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_moment_gravity));
-    vpFeatureMomentGravityCenter& featureMomentGravity = (static_cast<vpFeatureMomentGravityCenter&>(featureMoments->get("vpFeatureMomentGravityCenter",found_featuremoment_gravity)));
-    vpFeatureMomentAreaNormalized featureMomentAreaNormalized = (static_cast<vpFeatureMomentAreaNormalized&>(featureMoments->get("vpFeatureMomentAreaNormalized",found_featuremoment_surfacenormalized)));
+    const vpMomentAreaNormalized& momentSurfaceNormalized = static_cast<const vpMomentAreaNormalized&>(moments.get("vpMomentAreaNormalized",found_moment_surface_normalized));
+    const vpMomentGravityCenter& momentGravity = static_cast<const vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_moment_gravity));
+    vpFeatureMomentGravityCenter& featureMomentGravity = (static_cast<vpFeatureMomentGravityCenter&>(featureMomentsDataBase->get("vpFeatureMomentGravityCenter",found_featuremoment_gravity)));
+    vpFeatureMomentAreaNormalized featureMomentAreaNormalized = (static_cast<vpFeatureMomentAreaNormalized&>(featureMomentsDataBase->get("vpFeatureMomentAreaNormalized",found_featuremoment_surfacenormalized)));
 
     if(!found_moment_surface_normalized) throw vpException(vpException::notInitialized,"vpMomentAreaNormalized not found");
     if(!found_moment_gravity) throw vpException(vpException::notInitialized,"vpMomentGravityCenter not found");
@@ -117,15 +117,15 @@ void vpFeatureMomentGravityCenterNormalized::compute_interaction(){
     bool found_moment_gravity;
     bool found_moment_centered;
 
-    vpMomentCentered& momentCentered = static_cast<vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered));
-    vpMomentGravityCenter& momentGravity = static_cast<vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_moment_gravity));
-    vpMomentAreaNormalized& momentSurfaceNormalized = static_cast<vpMomentAreaNormalized&>(moments.get("vpMomentAreaNormalized",found_moment_surface_normalized));
+    const vpMomentCentered& momentCentered = static_cast<const vpMomentCentered&>(moments.get("vpMomentCentered",found_moment_centered));
+    const vpMomentGravityCenter& momentGravity = static_cast<const vpMomentGravityCenter&>(moments.get("vpMomentGravityCenter",found_moment_gravity));
+    const vpMomentAreaNormalized& momentSurfaceNormalized = static_cast<const vpMomentAreaNormalized&>(moments.get("vpMomentAreaNormalized",found_moment_surface_normalized));
 
     if(!found_moment_surface_normalized) throw vpException(vpException::notInitialized,"vpMomentAreaNormalized not found");
     if(!found_moment_gravity) throw vpException(vpException::notInitialized,"vpMomentGravityCenter not found");
     if(!found_moment_centered) throw vpException(vpException::notInitialized,"vpMomentCentered not found");
 
-    vpMomentObject& momentObject = moment->getObject();
+    const vpMomentObject& momentObject = moment->getObject();
     interaction_matrices[0].resize(1,6);
     interaction_matrices[1].resize(1,6);
 
diff --git a/src/visual-feature/vpFeatureMomentGravityCenterNormalized.h b/src/visual-feature/vpFeatureMomentGravityCenterNormalized.h
index e66685e2..f6a657e0 100644
--- a/src/visual-feature/vpFeatureMomentGravityCenterNormalized.h
+++ b/src/visual-feature/vpFeatureMomentGravityCenterNormalized.h
@@ -3,7 +3,7 @@
  * $Id: vpFeatureMomentImpl.h 3317 2011-09-06 14:14:47Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -83,25 +83,25 @@ class VISP_EXPORT vpFeatureMomentGravityCenterNormalized : public vpFeatureMomen
  public:
         /*!
         Initializes the feature with information about the database of moment primitives, the object plane and feature database.
-        \param moments : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
-        \param A : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-        \param B : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-        \param C : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param database : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
+        \param A_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param B_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param C_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
         \param featureMoments : Feature database.
 
         */
-        vpFeatureMomentGravityCenterNormalized(vpMomentDatabase& moments,double A, double B, double C,vpFeatureMomentDatabase* featureMoments=NULL) :
-            vpFeatureMoment(moments,A,B,C,featureMoments,2)
+        vpFeatureMomentGravityCenterNormalized(vpMomentDatabase& database,double A_, double B_, double C_,vpFeatureMomentDatabase* featureMoments=NULL)
+          : vpFeatureMoment(database,A_,B_,C_,featureMoments,2)
         {}
         void compute_interaction();
         /*!
           associated moment name
           */
-        const char* momentName(){ return "vpMomentGravityCenterNormalized";}
+        const char* momentName() const { return "vpMomentGravityCenterNormalized";}
         /*!
             feature name
           */
-        const char* name(){ return "vpFeatureMomentGravityCenterNormalized";}
+        const char* name() const { return "vpFeatureMomentGravityCenterNormalized";}
 
         /*!
           Shortcut selector for \f$x_n\f$.
@@ -219,25 +219,26 @@ class VISP_EXPORT vpFeatureMomentGravityCenterNormalized : public vpFeatureMomen
  public:
         /*!
         Initializes the feature with information about the database of moment primitives, the object plane and feature database.
-        \param moments : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
-        \param A : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-        \param B : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
-        \param C : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param data_base : Moment database. The database of moment primitives (first parameter) is mandatory. It is used to access different moment values later used to compute the final matrix.
+        \param A_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param B_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
+        \param C_ : Plane coefficient in a \f$ A \times x+B \times y + C = \frac{1}{Z} \f$ plane.
         \param featureMoments : Feature database.
 
         */
-        vpFeatureMomentGravityCenterNormalized(vpMomentDatabase& moments,double A, double B, double C,vpFeatureMomentDatabase* featureMoments=NULL) :
-            vpFeatureMoment(moments,A,B,C,featureMoments,2)
+        vpFeatureMomentGravityCenterNormalized(vpMomentDatabase& data_base,double A_, double B_, double C_,
+                                               vpFeatureMomentDatabase* featureMoments=NULL)
+          : vpFeatureMoment(data_base,A_,B_,C_,featureMoments,2)
         {}
         void compute_interaction();
         /*!
           associated moment name
           */
-        const char* momentName(){ return "vpMomentGravityCenterNormalized";}
+        const char* momentName() const { return "vpMomentGravityCenterNormalized";}
         /*!
             feature name
           */
-        const char* name(){ return "vpFeatureMomentGravityCenterNormalized";}
+        const char* name() const { return "vpFeatureMomentGravityCenterNormalized";}
 
         /*!
           Shortcut selector for \f$x_n\f$.
diff --git a/src/visual-feature/vpFeaturePoint.cpp b/src/visual-feature/vpFeaturePoint.cpp
index c2b590b1..0e216dac 100644
--- a/src/visual-feature/vpFeaturePoint.cpp
+++ b/src/visual-feature/vpFeaturePoint.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeaturePoint.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeaturePoint.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -89,13 +89,12 @@ vpFeaturePoint::init()
 
     //default value Z (1 meters)
     Z = 1;
-
 }
 
 /*! 
   Default constructor that build a visual feature.
 */
-vpFeaturePoint::vpFeaturePoint() : vpBasicFeature()
+vpFeaturePoint::vpFeaturePoint() : Z(1.)
 {
     init() ;
 }
@@ -104,12 +103,12 @@ vpFeaturePoint::vpFeaturePoint() : vpBasicFeature()
 /*!
   Set the value of \f$ Z \f$ which represents the depth in the 3D camera frame.
 
-  \param Z : \f$ Z \f$ value to set.
+  \param Z_ : \f$ Z \f$ value to set.
 */
 void
-vpFeaturePoint::set_Z(const double Z)
+vpFeaturePoint::set_Z(const double Z_)
 {
-    this->Z = Z ;
+    this->Z = Z_ ;
     flags[2] = true;
 }
 
@@ -185,18 +184,18 @@ vpFeaturePoint::get_y() const
   parameters of the visual feature \f$ s \f$. \f$ Z \f$ is the 3D coordinate in the camera frame
   representing the depth.
 
-  \param x : \f$ x \f$ value to set.
-  \param y : \f$ y \f$ value to set.
-  \param Z : \f$ Z \f$ value to set.
+  \param x_ : \f$ x \f$ value to set.
+  \param y_ : \f$ y \f$ value to set.
+  \param Z_ : \f$ Z \f$ value to set.
 */
 void
-vpFeaturePoint::set_xyZ(const double x,
-			const double y,
-			const double Z)
+vpFeaturePoint::set_xyZ(const double x_,
+      const double y_,
+      const double Z_)
 {
-  set_x(x) ;
-  set_y(y) ;
-  set_Z(Z) ;
+  set_x(x_) ;
+  set_y(y_) ;
+  set_Z(Z_) ;
   for(unsigned int i = 0; i < nbParameters; i++) flags[i] = true;
 }
 
@@ -275,23 +274,23 @@ vpFeaturePoint::interaction(const unsigned int select)
     resetFlags();
   }
 
-  double x = get_x() ;
-  double y = get_y() ;
-  double Z = get_Z() ;
+  double x_ = get_x() ;
+  double y_ = get_y() ;
+  double Z_ = get_Z() ;
 
-  if (Z < 0)
+  if (Z_ < 0)
   {
     vpERROR_TRACE("Point is behind the camera ") ;
-    std::cout <<"Z = " << Z << std::endl ;
+    std::cout <<"Z = " << Z_ << std::endl ;
 
     throw(vpFeatureException(vpFeatureException::badInitializationError,
 			     "Point is behind the camera ")) ;
   }
 
-  if (fabs(Z) < 1e-6)
+  if (fabs(Z_) < 1e-6)
   {
     vpERROR_TRACE("Point Z coordinates is null ") ;
-    std::cout <<"Z = " << Z << std::endl ;
+    std::cout <<"Z = " << Z_ << std::endl ;
 
     throw(vpFeatureException(vpFeatureException::badInitializationError,
 			     "Point Z coordinates is null")) ;
@@ -301,12 +300,12 @@ vpFeaturePoint::interaction(const unsigned int select)
   {
     vpMatrix Lx(1,6) ; Lx = 0;
 
-    Lx[0][0] = -1/Z  ;
+    Lx[0][0] = -1/Z_  ;
     Lx[0][1] = 0 ;
-    Lx[0][2] = x/Z ;
-    Lx[0][3] = x*y ;
-    Lx[0][4] = -(1+x*x) ;
-    Lx[0][5] = y ;
+    Lx[0][2] = x_/Z_ ;
+    Lx[0][3] = x_*y_ ;
+    Lx[0][4] = -(1+x_*x_) ;
+    Lx[0][5] = y_ ;
 
     L = vpMatrix::stackMatrices(L,Lx) ;
   }
@@ -316,11 +315,11 @@ vpFeaturePoint::interaction(const unsigned int select)
     vpMatrix Ly(1,6) ; Ly = 0;
 
     Ly[0][0] = 0 ;
-    Ly[0][1]  = -1/Z ;
-    Ly[0][2] = y/Z ;
-    Ly[0][3] = 1+y*y ;
-    Ly[0][4] = -x*y ;
-    Ly[0][5] = -x ;
+    Ly[0][1]  = -1/Z_ ;
+    Ly[0][2] = y_/Z ;
+    Ly[0][3] = 1+y_*y_ ;
+    Ly[0][4] = -x_*y_ ;
+    Ly[0][5] = -x_ ;
 
     L = vpMatrix::stackMatrices(L,Ly) ;
   }
@@ -435,32 +434,32 @@ vpFeaturePoint::print(const unsigned int select ) const
 
   See the vpFeaturePoint class description for more details about \f$ x \f$ and \f$ y \f$.
 
-  \param x : The \f$ x \f$ parameter.
-  \param y : The \f$ y \f$ parameter.
-  \param Z : The \f$ Z \f$ parameter.
+  \param x_ : The \f$ x \f$ parameter.
+  \param y_ : The \f$ y \f$ parameter.
+  \param Z_ : The \f$ Z \f$ parameter.
 */
 void
-vpFeaturePoint::buildFrom(const double x, const double y, const double Z)
+vpFeaturePoint::buildFrom(const double x_, const double y_, const double Z_)
 {
 
-  s[0] = x ;
-  s[1] = y ;
+  s[0] = x_ ;
+  s[1] = y_ ;
 
-  this->Z = Z  ;
+  this->Z = Z_  ;
 
-  if (Z < 0)
+  if (Z_ < 0)
   {
     vpERROR_TRACE("Point is behind the camera ") ;
-    std::cout <<"Z = " << Z << std::endl ;
+    std::cout <<"Z = " << Z_ << std::endl ;
 
     throw(vpFeatureException(vpFeatureException::badInitializationError,
 			     "Point is behind the camera ")) ;
   }
 
-  if (fabs(Z) < 1e-6)
+  if (fabs(Z_) < 1e-6)
   {
     vpERROR_TRACE("Point Z coordinates is null ") ;
-    std::cout <<"Z = " << Z << std::endl ;
+    std::cout <<"Z = " << Z_ << std::endl ;
 
     throw(vpFeatureException(vpFeatureException::badInitializationError,
 			     "Point Z coordinates is null")) ;
diff --git a/src/visual-feature/vpFeaturePoint.h b/src/visual-feature/vpFeaturePoint.h
index 4e56541f..4efed37a 100644
--- a/src/visual-feature/vpFeaturePoint.h
+++ b/src/visual-feature/vpFeaturePoint.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeaturePoint.h 4233 2013-05-02 13:46:42Z fspindle $
+ * $Id: vpFeaturePoint.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/visual-feature/vpFeaturePoint3D.cpp b/src/visual-feature/vpFeaturePoint3D.cpp
index 72073ded..3cea6223 100644
--- a/src/visual-feature/vpFeaturePoint3D.cpp
+++ b/src/visual-feature/vpFeaturePoint3D.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeaturePoint3D.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeaturePoint3D.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -96,7 +96,7 @@ vpFeaturePoint3D::init()
   initialize it to \f${\bf X} = (0, 0, 1)\f$.
 
 */
-vpFeaturePoint3D::vpFeaturePoint3D() : vpBasicFeature()
+vpFeaturePoint3D::vpFeaturePoint3D()
 {
     init() ;
 }
diff --git a/src/visual-feature/vpFeaturePoint3D.h b/src/visual-feature/vpFeaturePoint3D.h
index 0fbb526a..b91984cb 100644
--- a/src/visual-feature/vpFeaturePoint3D.h
+++ b/src/visual-feature/vpFeaturePoint3D.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeaturePoint3D.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeaturePoint3D.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/visual-feature/vpFeaturePointPolar.cpp b/src/visual-feature/vpFeaturePointPolar.cpp
index f792b119..d6775f98 100644
--- a/src/visual-feature/vpFeaturePointPolar.cpp
+++ b/src/visual-feature/vpFeaturePointPolar.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeaturePointPolar.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeaturePointPolar.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -108,7 +108,7 @@ vpFeaturePointPolar::init()
   matrix (see interaction()) is initialized to \f$Z=1\f$.
 
 */
-vpFeaturePointPolar::vpFeaturePointPolar() : vpBasicFeature()
+vpFeaturePointPolar::vpFeaturePointPolar() : Z(1.)
 {
     init() ;
 }
@@ -142,9 +142,9 @@ vpFeaturePointPolar::set_theta(const double theta)
 
 */
 void
-vpFeaturePointPolar::set_Z(const double Z)
+vpFeaturePointPolar::set_Z(const double Z_)
 {
-    this->Z = Z ;
+    this->Z = Z_ ;
     flags[2] = true;
 }
 
@@ -154,18 +154,18 @@ vpFeaturePointPolar::set_Z(const double Z)
   \param rho, theta : Polar coordinates \f$(\rho,\theta)\f$ of
   the image point.
 
-  \param Z : 3D depth of the point in the camera frame.
+  \param Z_ : 3D depth of the point in the camera frame.
   
   \sa set_rho(), set_theta(), set_Z()
 */
 void
 vpFeaturePointPolar::set_rhoThetaZ(const double rho,
 					 const double theta,
-					 const double Z)
+           const double Z_)
 {
   set_rho(rho) ;
   set_theta(theta) ;
-  set_Z(Z) ;
+  set_Z(Z_) ;
 
   for(unsigned int i = 0; i < nbParameters; i++) flags[i] = true;
 }
@@ -311,10 +311,10 @@ vpFeaturePointPolar::interaction(const unsigned int select)
 
   double rho   = get_rho() ;
   double theta = get_theta() ;
-  double Z     = get_Z() ;
+  double Z_    = get_Z() ;
 
-  double c = cos(theta);
-  double s = sin(theta);
+  double c_ = cos(theta);
+  double s_ = sin(theta);
 
   double rho2 = rho*rho;
 
@@ -326,20 +326,19 @@ vpFeaturePointPolar::interaction(const unsigned int select)
 			     "rho polar coordinate of the point is null")) ;
   }
 
-
-  if (Z < 0)
+  if (Z_ < 0)
   {
     vpERROR_TRACE("Point is behind the camera ") ;
-    std::cout <<"Z = " << Z << std::endl ;
+    std::cout <<"Z = " << Z_ << std::endl ;
 
     throw(vpFeatureException(vpFeatureException::badInitializationError,
 			     "Point is behind the camera ")) ;
   }
 
-  if (fabs(Z) < 1e-6)
+  if (fabs(Z_) < 1e-6)
   {
     vpERROR_TRACE("Point Z coordinates is null ") ;
-    std::cout <<"Z = " << Z << std::endl ;
+    std::cout <<"Z = " << Z_ << std::endl ;
 
     throw(vpFeatureException(vpFeatureException::badInitializationError,
 			     "Point Z coordinates is null")) ;
@@ -349,11 +348,11 @@ vpFeaturePointPolar::interaction(const unsigned int select)
   {
     vpMatrix Lrho(1,6) ; Lrho = 0;
 
-    Lrho[0][0] = -c/Z  ;
-    Lrho[0][1] = -s/Z ;
-    Lrho[0][2] = rho/Z ;
-    Lrho[0][3] = (1+rho2)*s ;
-    Lrho[0][4] = -(1+rho2)*c ;
+    Lrho[0][0] = -c_/Z_  ;
+    Lrho[0][1] = -s_/Z_ ;
+    Lrho[0][2] = rho/Z_ ;
+    Lrho[0][3] = (1+rho2)*s_ ;
+    Lrho[0][4] = -(1+rho2)*c_ ;
     Lrho[0][5] = 0 ;
 
 //     printf("Lrho: rho %f theta %f Z %f\n", rho, theta, Z);
@@ -366,11 +365,11 @@ vpFeaturePointPolar::interaction(const unsigned int select)
   {
     vpMatrix Ltheta(1,6) ; Ltheta = 0;
 
-    Ltheta[0][0] = s/(rho*Z) ;
-    Ltheta[0][1]  = -c/(rho*Z) ;
+    Ltheta[0][0] = s_/(rho*Z_) ;
+    Ltheta[0][1]  = -c_/(rho*Z_) ;
     Ltheta[0][2] = 0 ;
-    Ltheta[0][3] = c/rho ;
-    Ltheta[0][4] = s/rho ;
+    Ltheta[0][3] = c_/rho ;
+    Ltheta[0][4] = s_/rho ;
     Ltheta[0][5] = -1 ;
 
 //     printf("Ltheta: rho %f theta %f Z %f\n", rho, theta, Z);
@@ -513,7 +512,7 @@ vpFeaturePointPolar::print(const unsigned int select ) const
   \param rho, theta : Polar coordinates \f$(\rho,\theta)\f$ of
   the image point.
 
-  \param Z : 3D depth of the point in the camera frame.
+  \param Z_ : 3D depth of the point in the camera frame.
 
   \exception vpFeatureException::badInitializationError: If the depth
   (\f$Z\f$ coordinate) is negative. That means that the 3D point is
@@ -525,13 +524,13 @@ vpFeaturePointPolar::print(const unsigned int select ) const
 */
 void
 vpFeaturePointPolar::buildFrom(const double rho, const double theta, 
-				     const double Z)
+             const double Z_)
 {
 
   s[0] = rho ;
   s[1] = theta ;
 
-  this->Z = Z  ;
+  this->Z = Z_  ;
 
   if (Z < 0)
   {
diff --git a/src/visual-feature/vpFeaturePointPolar.h b/src/visual-feature/vpFeaturePointPolar.h
index 0be5c891..a005d8d6 100644
--- a/src/visual-feature/vpFeaturePointPolar.h
+++ b/src/visual-feature/vpFeaturePointPolar.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeaturePointPolar.h 4276 2013-06-25 12:36:48Z fspindle $
+ * $Id: vpFeaturePointPolar.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/visual-feature/vpFeatureSegment.cpp b/src/visual-feature/vpFeatureSegment.cpp
index 28925770..7ba11dd8 100644
--- a/src/visual-feature/vpFeatureSegment.cpp
+++ b/src/visual-feature/vpFeatureSegment.cpp
@@ -3,7 +3,7 @@
  * $Id: vpFeatureThetaU.cpp 3530 2012-01-03 10:52:12Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -62,7 +62,6 @@
   \brief class that defines the vpFeatureSegment visual feature
 */
 
-
 /*! 
 
   Initialise the memory space requested for segment visual
@@ -89,11 +88,9 @@ vpFeatureSegment::init()
   \param normalized : If true, use normalized features \f${\bf s} = (x_n, y_n, l_n, \alpha)\f$.
   If false, use non normalized features \f${\bf s} = (x_c, y_c, l_c, \alpha)\f$.
 */
-vpFeatureSegment::vpFeatureSegment(bool normalized):
-  vpBasicFeature()
+vpFeatureSegment::vpFeatureSegment(bool normalized)
+  : xc_(0), yc_(0), l_(0), alpha_(0), Z1_(0), Z2_(0), cos_a_(0), sin_a_(0), normalized_(normalized)
 {
-  this->normalized_ = normalized;
-
   init();
 }
 
diff --git a/src/visual-feature/vpFeatureSegment.h b/src/visual-feature/vpFeatureSegment.h
index fc6d931b..87a8f762 100644
--- a/src/visual-feature/vpFeatureSegment.h
+++ b/src/visual-feature/vpFeatureSegment.h
@@ -3,7 +3,7 @@
  * $Id: vpFeatureThetaU.h 3530 2012-01-03 10:52:12Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/visual-feature/vpFeatureThetaU.cpp b/src/visual-feature/vpFeatureThetaU.cpp
index 728948ac..cfee61e4 100644
--- a/src/visual-feature/vpFeatureThetaU.cpp
+++ b/src/visual-feature/vpFeatureThetaU.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureThetaU.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureThetaU.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -91,8 +91,8 @@ vpFeatureThetaU::init()
   visual feature.
 
 */
-vpFeatureThetaU::vpFeatureThetaU(vpFeatureThetaURotationRepresentationType r):
-  vpBasicFeature()
+vpFeatureThetaU::vpFeatureThetaU(vpFeatureThetaURotationRepresentationType r)
+  : rotation(r)
 {
   //vpTRACE("0x%x", this);
   init() ;
@@ -121,15 +121,12 @@ vpFeatureThetaU::vpFeatureThetaU(vpFeatureThetaURotationRepresentationType r):
 */
 
 vpFeatureThetaU::vpFeatureThetaU(vpThetaUVector &tu, 
-				 vpFeatureThetaURotationRepresentationType r):
-  vpBasicFeature()
+                                 vpFeatureThetaURotationRepresentationType r)
+  : rotation(r)
 {
   init() ;
   
   buildFrom(tu) ;
-
-  // kind of rotation representation
-  rotation = r;
 }
 
 /*!
@@ -150,16 +147,13 @@ vpFeatureThetaU::vpFeatureThetaU(vpThetaUVector &tu,
 */
 
 vpFeatureThetaU::vpFeatureThetaU(vpRotationMatrix &R, 
-				 vpFeatureThetaURotationRepresentationType r):
-  vpBasicFeature()
+                                 vpFeatureThetaURotationRepresentationType r)
+  : rotation(r)
 {
   init() ;
   
   vpThetaUVector tu(R) ;
   buildFrom(tu) ;
-
-  // kind of rotation representation
-  rotation = r;
 }
 
 /*!
@@ -182,17 +176,14 @@ vpFeatureThetaU::vpFeatureThetaU(vpRotationMatrix &R,
 
 */
 vpFeatureThetaU::vpFeatureThetaU(vpHomogeneousMatrix &M, 
-				 vpFeatureThetaURotationRepresentationType r):
- vpBasicFeature()
+                                 vpFeatureThetaURotationRepresentationType r)
+  : rotation(r)
 {
   init() ;
   vpRotationMatrix R ;
   M.extract(R)  ;
   vpThetaUVector tu(R) ;
   buildFrom(tu) ;
-
-  // kind of rotation representation
-  rotation = r;
 }
 
 /*!
diff --git a/src/visual-feature/vpFeatureThetaU.h b/src/visual-feature/vpFeatureThetaU.h
index 97c11da0..431e19c2 100644
--- a/src/visual-feature/vpFeatureThetaU.h
+++ b/src/visual-feature/vpFeatureThetaU.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureThetaU.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureThetaU.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/visual-feature/vpFeatureTranslation.cpp b/src/visual-feature/vpFeatureTranslation.cpp
index 616e7f7f..7b7031b2 100644
--- a/src/visual-feature/vpFeatureTranslation.cpp
+++ b/src/visual-feature/vpFeatureTranslation.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureTranslation.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureTranslation.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -92,11 +92,10 @@ vpFeatureTranslation::init()
   \param r : Type of considered 3D translation feature. 
 
 */
-vpFeatureTranslation::vpFeatureTranslation(vpFeatureTranslationRepresentationType r) : vpBasicFeature()
+vpFeatureTranslation::vpFeatureTranslation(vpFeatureTranslationRepresentationType r)
+  : f2Mf1(), translation(r)
 {
   init() ;
-
-  translation = r;
 }
 
 
@@ -105,31 +104,30 @@ vpFeatureTranslation::vpFeatureTranslation(vpFeatureTranslationRepresentationTyp
   Constructor that build a 3D visual feature from an homogeneous
   matrix \f$ ^{{\cal{F}}_2}M_{{\cal{F}}_1} \f$ that represent the 3D transformation between two frames \f${\cal{F}}_1\f$ and \f${\cal{F}}_2\f$.
 
-  \param f2Mf1 [in] : 3D displacement that the camera has to achieve to
+  \param f2Mf1_ [in] : 3D displacement that the camera has to achieve to
   move from the frame \f${\cal{F}}_2\f$ to the frame \f${\cal{F}}_1\f$ (\f$ ^{{\cal{F}}_2}M_{{\cal{F}}_1} \f$).
   \param r : type of feature. It can be vpFeature::cdMc or vpFeature::cMo.
 
 */
-vpFeatureTranslation::vpFeatureTranslation(vpHomogeneousMatrix &f2Mf1, vpFeatureTranslationRepresentationType r) : vpBasicFeature()
+vpFeatureTranslation::vpFeatureTranslation(vpHomogeneousMatrix &f2Mf1_, vpFeatureTranslationRepresentationType r)
+  : f2Mf1(), translation(r)
 {
   init() ;
 
-  translation = r;
-
-  buildFrom(f2Mf1) ;
+  buildFrom(f2Mf1_) ;
 }
 
 /*!
   Build a 3D translation visual feature from an homogeneous
   matrix \f$ ^{{\cal{F}}_2}M_{{\cal{F}}_1} \f$ that represent the 3D transformation between two frames \f${\cal{F}}_1\f$ and \f${\cal{F}}_2\f$.
 
-  \param f2Mf1 [in] : 3D displacement that the camera has to achieve to
+  \param f2Mf1_ [in] : 3D displacement that the camera has to achieve to
   move from the frame \f${\cal{F}}_2\f$ to the frame \f${\cal{F}}_1\f$ (\f$ ^{{\cal{F}}_2}M_{{\cal{F}}_1} \f$).
 */
 void
-vpFeatureTranslation::buildFrom(const vpHomogeneousMatrix &f2Mf1)
+vpFeatureTranslation::buildFrom(const vpHomogeneousMatrix &f2Mf1_)
 {
-  this->f2Mf1 = f2Mf1 ;
+  this->f2Mf1 = f2Mf1_ ;
   s[0] = f2Mf1[0][3] ;
   s[1] = f2Mf1[1][3] ;
   s[2] = f2Mf1[2][3] ;
diff --git a/src/visual-feature/vpFeatureTranslation.h b/src/visual-feature/vpFeatureTranslation.h
index 9a636cb2..0636ff22 100644
--- a/src/visual-feature/vpFeatureTranslation.h
+++ b/src/visual-feature/vpFeatureTranslation.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureTranslation.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureTranslation.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/visual-feature/vpFeatureVanishingPoint.cpp b/src/visual-feature/vpFeatureVanishingPoint.cpp
index 28798027..c3cd4c4a 100644
--- a/src/visual-feature/vpFeatureVanishingPoint.cpp
+++ b/src/visual-feature/vpFeatureVanishingPoint.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureVanishingPoint.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureVanishingPoint.cpp 4632 2014-02-03 17:06:40Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -77,7 +77,7 @@ vpFeatureVanishingPoint::init()
     //set_Z(1) ;
 
 }
-vpFeatureVanishingPoint::vpFeatureVanishingPoint() : vpBasicFeature()
+vpFeatureVanishingPoint::vpFeatureVanishingPoint()
 {
     init() ;
 }
diff --git a/src/visual-feature/vpFeatureVanishingPoint.h b/src/visual-feature/vpFeatureVanishingPoint.h
index a8467bcf..d4dac922 100644
--- a/src/visual-feature/vpFeatureVanishingPoint.h
+++ b/src/visual-feature/vpFeatureVanishingPoint.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpFeatureVanishingPoint.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpFeatureVanishingPoint.h 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/src/visual-feature/vpGenericFeature.cpp b/src/visual-feature/vpGenericFeature.cpp
index f4d2a318..0144fb5f 100644
--- a/src/visual-feature/vpGenericFeature.cpp
+++ b/src/visual-feature/vpGenericFeature.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpGenericFeature.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpGenericFeature.cpp 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -81,6 +81,7 @@ void vpGenericFeature::init()
 
 */
 vpGenericFeature::vpGenericFeature()
+  : L(), err(), errorStatus(errorNotInitalized)
 {
   /*
   vpERROR_TRACE("You are not allow to use this constructor ") ;
@@ -96,28 +97,28 @@ vpGenericFeature::vpGenericFeature()
 /*!
   Constructor of the class you have to use. The feature table is initilialized with the good dimension.
 
-  \param dim_s : Dimension of the feature. It corresponds to the number of features you want to create.
+  \param dimension_gen_s : Dimension of the generic feature. It corresponds to the number of features you want to create.
 */
-vpGenericFeature::vpGenericFeature(unsigned int dim_s)
+vpGenericFeature::vpGenericFeature(unsigned int dimension_gen_s)
+  : L(), err(), errorStatus(errorNotInitalized)
 {
-  this->dim_s = dim_s ;
-  s.resize(dim_s) ;
-  errorStatus = errorNotInitalized ;
+  this->dim_s = dimension_gen_s ;
+  s.resize(dimension_gen_s) ;
 }
 
 /*!
 
   Set the error vector \f$(s-s*)\f$.
 
-  \param error : Error vector \f$(s-s*)\f$.
+  \param error_vector : Error vector \f$(s-s*)\f$.
 
   \exception vpFeatureException::sizeMismatchError : If the size of
   the error vector is bad.
 */
 void
-vpGenericFeature::setError(vpColVector &error)
+vpGenericFeature::setError(const vpColVector &error_vector)
 {
-  if (error.getRows() != dim_s)
+  if (error_vector.getRows() != dim_s)
   {
     vpERROR_TRACE("size mismatch between error dimension"
 		"and feature dimension");
@@ -127,7 +128,7 @@ vpGenericFeature::setError(vpColVector &error)
 
   }
   errorStatus = errorInitialized ;
-  err = error ;
+  err = error_vector ;
 }
 
 
@@ -448,80 +449,74 @@ vpGenericFeature::interaction(const unsigned int select)
 /*!
   \brief set the value of the interaction matrix.
 
-  \param L : The matrix corresponding to the interaction matrix you computed.
+  \param L_ : The matrix corresponding to the interaction matrix you computed.
 
   \exception an exception is thrown if the number of row of the interaction
   matrix is different from the dimension of the visual feature as specified
   in the constructor
 */
 void
-vpGenericFeature::setInteractionMatrix(const vpMatrix &L)
+vpGenericFeature::setInteractionMatrix(const vpMatrix &L_)
 {
-
-  if (L.getRows() != dim_s)
+  if (L_.getRows() != dim_s)
   {
-    std::cout << L.getRows() <<"  " << dim_s << std::endl ;;
+    std::cout << L_.getRows() <<"  " << dim_s << std::endl ;;
     vpERROR_TRACE("size mismatch between interaction matrix size "
 		"and feature dimension");
     throw(vpFeatureException(vpFeatureException::sizeMismatchError,
 			     "size mismatch between interaction matrix size "
 			     "and feature dimension"));
-
   }
 
-  this->L = L ;
-
+  this->L = L_ ;
 }
 
 /*!
   \brief set the value of all the features.
 
-  \param s : It is a vector containing the value of the visual features.
+  \param s_vector : It is a vector containing the value of the visual features.
 
   \exception an exception is thrown if the number of row of the vector s
   is different from the dimension of the visual feature as specified
   in the constructor
 */
 void
-vpGenericFeature::set_s(const vpColVector &s)
+vpGenericFeature::set_s(const vpColVector &s_vector)
 {
 
-  if (s.getRows() != dim_s)
+  if (s_vector.getRows() != dim_s)
   {
     vpERROR_TRACE("size mismatch between s dimension"
 		"and feature dimension");
     throw(vpFeatureException(vpFeatureException::sizeMismatchError,
 			     "size mismatch between s dimension"
 			     "and feature dimension"));
-
   }
-  this->s = s ;
+  this->s = s_vector ;
 }
 
 
 /*!
   \brief get the value of all the features.
 
-  \param s : It is a vector which will contain the value of the visual features.
+  \param s_vector : It is a vector which will contain the value of the visual features.
 
   \exception an exception is thrown if the number of row of the vector s
   is different from the dimension of the visual feature as specified
   in the constructor
 */
 void
-vpGenericFeature::get_s(vpColVector &s) const
+vpGenericFeature::get_s(vpColVector &s_vector) const
 {
-
-  if (s.getRows() != dim_s)
+  if (s_vector.getRows() != dim_s)
   {
     vpERROR_TRACE("size mismatch between s dimension"
 		"and feature dimension");
     throw(vpFeatureException(vpFeatureException::sizeMismatchError,
 			     "size mismatch between s dimension"
 			     "and feature dimension"));
-
   }
-  s = this->s ;
+  s_vector = this->s ;
 }
 
 
diff --git a/src/visual-feature/vpGenericFeature.h b/src/visual-feature/vpGenericFeature.h
index 65651949..ffbccadc 100644
--- a/src/visual-feature/vpGenericFeature.h
+++ b/src/visual-feature/vpGenericFeature.h
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: vpGenericFeature.h 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: vpGenericFeature.h 4649 2014-02-07 14:57:11Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -209,7 +209,7 @@ private:
 public:
   void setInteractionMatrix(const vpMatrix &L) ;
   vpMatrix getInteractionMatrix() const { return L ; }
-  void setError(vpColVector &error)  ;
+  void setError(const vpColVector &error_vector)  ;
   void set_s(const vpColVector &s) ;
   void set_s(const double s0) ;
   void set_s(const double s0, const double s1) ;
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 87750a1a..a2084607 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/camera/CMakeLists.txt b/test/camera/CMakeLists.txt
index 5216126f..f5b4750f 100644
--- a/test/camera/CMakeLists.txt
+++ b/test/camera/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/camera/testCameraParametersConversion.cpp b/test/camera/testCameraParametersConversion.cpp
index 2d6ea702..f8a70f9f 100644
--- a/test/camera/testCameraParametersConversion.cpp
+++ b/test/camera/testCameraParametersConversion.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testCameraParametersConversion.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testCameraParametersConversion.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -62,6 +62,9 @@
 #include <stdlib.h>
 #include <stdio.h>
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
   Print the program options.
@@ -93,15 +96,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -110,7 +113,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -121,56 +124,62 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  vpCameraParameters cam;
-  double px,py,u0,v0;
-  px = 1657.429131;
-  py = 1658.818598;
-  u0 = 322.2437833;
-  v0 = 230.8012737;
-  vpCameraParameters camDist;
-  double px_dist,py_dist,u0_dist,v0_dist,kud_dist,kdu_dist;
-  px_dist = 1624.824731;
-  py_dist = 1625.263641;
-  u0_dist = 324.0923411;
-  v0_dist = 245.2421388;
-  kud_dist = -0.1741532338;
-  kdu_dist = 0.1771165148;
-
-  cam.initPersProjWithoutDistortion(px,py,u0,v0);
-  camDist.initPersProjWithDistortion(px_dist,py_dist,u0_dist,v0_dist,
-                                     kud_dist, kdu_dist);
-
-  double u1 = 320;
-  double v1 = 240;
-  double x1 = 0, y1 = 0;
-  double u2 = 0, v2 = 0;
-  vpPixelMeterConversion::convertPoint(cam,u1,v1,x1,y1);
-  vpMeterPixelConversion::convertPoint(cam,x1,y1,u2,v2);
-  if(!vpMath::equal(u1,u2) || !vpMath::equal(v1,v2)){
-    vpTRACE("Error in convertPoint without distortion:\n"
-            "u1 = %f, u2 = %f\n"
-            "v1 = %f, v2 = %f\n",u1,u2,v1,v2);
-    return -1;
+    vpCameraParameters cam;
+    double px,py,u0,v0;
+    px = 1657.429131;
+    py = 1658.818598;
+    u0 = 322.2437833;
+    v0 = 230.8012737;
+    vpCameraParameters camDist;
+    double px_dist,py_dist,u0_dist,v0_dist,kud_dist,kdu_dist;
+    px_dist = 1624.824731;
+    py_dist = 1625.263641;
+    u0_dist = 324.0923411;
+    v0_dist = 245.2421388;
+    kud_dist = -0.1741532338;
+    kdu_dist = 0.1771165148;
+
+    cam.initPersProjWithoutDistortion(px,py,u0,v0);
+    camDist.initPersProjWithDistortion(px_dist,py_dist,u0_dist,v0_dist,
+                                       kud_dist, kdu_dist);
+
+    double u1 = 320;
+    double v1 = 240;
+    double x1 = 0, y1 = 0;
+    double u2 = 0, v2 = 0;
+    vpPixelMeterConversion::convertPoint(cam,u1,v1,x1,y1);
+    vpMeterPixelConversion::convertPoint(cam,x1,y1,u2,v2);
+    if(!vpMath::equal(u1,u2) || !vpMath::equal(v1,v2)){
+      vpTRACE("Error in convertPoint without distortion:\n"
+              "u1 = %f, u2 = %f\n"
+              "v1 = %f, v2 = %f\n",u1,u2,v1,v2);
+      return -1;
+    }
+    vpTRACE("convertPoint without distortion :\n"
+            "u1 - u2 = %.20f\n"
+            "v1 - v2 = %.20f\n",u1 - u2,v1 - v2);
+
+    vpPixelMeterConversion::convertPoint(camDist,u1,v1,x1,y1);
+    vpMeterPixelConversion::convertPoint(camDist,x1,y1,u2,v2);
+    if(!vpMath::equal(u1,u2) || !vpMath::equal(v1,v2)){
+      vpTRACE("Error in convertPoint with distortion :\n"
+              "u1 = %f, u2 = %f\n"
+              "v1 = %f, v2 = %f\n",u1,u2,v1,v2);
+      return -1;
+    }
+    vpTRACE("convertPoint with distortion :\n"
+            "u1 - u2 = %.20f\n"
+            "v1 - v2 = %.20f\n",u1 - u2,v1 - v2);
+    return 0;
   }
-  vpTRACE("convertPoint without distortion :\n"
-          "u1 - u2 = %.20f\n"
-          "v1 - v2 = %.20f\n",u1 - u2,v1 - v2);
-
-  vpPixelMeterConversion::convertPoint(camDist,u1,v1,x1,y1);
-  vpMeterPixelConversion::convertPoint(camDist,x1,y1,u2,v2);
-  if(!vpMath::equal(u1,u2) || !vpMath::equal(v1,v2)){
-    vpTRACE("Error in convertPoint with distortion :\n"
-            "u1 = %f, u2 = %f\n"
-            "v1 = %f, v2 = %f\n",u1,u2,v1,v2);
-    return -1;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  vpTRACE("convertPoint with distortion :\n"
-          "u1 - u2 = %.20f\n"
-          "v1 - v2 = %.20f\n",u1 - u2,v1 - v2);
-  return 0;
 }
diff --git a/test/device/CMakeLists.txt b/test/device/CMakeLists.txt
index ee860dca..81849363 100644
--- a/test/device/CMakeLists.txt
+++ b/test/device/CMakeLists.txt
@@ -3,7 +3,7 @@
 # $Id: CMakeLists.txt 3057 2011-02-11 13:17:26Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/device/display/CMakeLists.txt b/test/device/display/CMakeLists.txt
index 7a7a9c84..a17dd0f1 100644
--- a/test/device/display/CMakeLists.txt
+++ b/test/device/display/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/device/display/testClick.cpp b/test/device/display/testClick.cpp
index 7b4648fe..00d141b0 100644
--- a/test/device/display/testClick.cpp
+++ b/test/device/display/testClick.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testClick.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: testClick.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -77,6 +77,11 @@ typedef enum {
   vpCV 
 } vpDisplayType;
 
+void usage(const char *name, const char *badparam, std::string ipath, vpDisplayType &dtype);
+bool getOptions(int argc, const char **argv,
+                std::string &ipath, vpDisplayType &dtype, bool &list,
+                bool &click_allowed, bool &display );
+
 /*!
 
   Print the program options.
@@ -163,17 +168,17 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv,
                 std::string &ipath, vpDisplayType &dtype, bool &list,
-                bool &click_allowed, bool &display )
+                bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
   std::string sDisplayType;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'i': ipath = optarg; break;
+    case 'i': ipath = optarg_; break;
     case 'l': list = true; break;
-    case 't': sDisplayType = optarg;
+    case 't': sDisplayType = optarg_;
       // Parse the display type option
       if (sDisplayType.compare("X11") == 0) {
         dtype = vpX11;
@@ -197,7 +202,7 @@ bool getOptions(int argc, const char **argv,
     case 'd': display = false; break;
 
     default:
-      usage(argv[0], optarg, ipath, dtype); return false; break;
+      usage(argv[0], optarg_, ipath, dtype); return false; break;
     }
   }
 
@@ -206,7 +211,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, dtype);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -426,7 +431,6 @@ main(int argc, const char ** argv)
     vpERROR_TRACE("Error while displaying the image") ;
     exit(-1);
   }
-
 }
 
 #else
diff --git a/test/device/display/testDisplays.cpp b/test/device/display/testDisplays.cpp
index 753a60c3..1a161cfa 100644
--- a/test/device/display/testDisplays.cpp
+++ b/test/device/display/testDisplays.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testDisplays.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testDisplays.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -70,6 +70,10 @@
 // List of allowed command line options
 #define GETOPTARGS	"hl:dc"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool &list, bool &click_allowed, bool &display);
+void draw(vpImage<vpRGBa> &I);
+
 /*!
 
   Print the program options.
@@ -120,13 +124,12 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv, bool &list,
-                bool &click_allowed, bool &display )
+bool getOptions(int argc, const char **argv, bool &list, bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
   std::string sDisplayType;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'l': list = true; break;
@@ -135,16 +138,15 @@ bool getOptions(int argc, const char **argv, bool &list,
     case 'd': display = false; break;
 
     default:
-      usage(argv[0], optarg); return false; break;
+      usage(argv[0], optarg_); return false; break;
     }
   }
 
-
   if ((c == 1) || (c == -1)) {
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
diff --git a/test/device/display/testMouseEvent.cpp b/test/device/display/testMouseEvent.cpp
index c0f17968..66ef3a6a 100644
--- a/test/device/display/testMouseEvent.cpp
+++ b/test/device/display/testMouseEvent.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testMouseEvent.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: testMouseEvent.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -91,6 +91,12 @@ typedef enum {
   vpD3D,
 } vpDisplayType;
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string ppath,
+           unsigned first, unsigned nimages, unsigned step, vpDisplayType &dtype);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath,
+                unsigned &first, unsigned &nimages, unsigned &step,
+                vpDisplayType &dtype, bool &list, bool &display, bool &click, bool &wait);
+
 /*!
 
   Print the program options.
@@ -106,8 +112,7 @@ typedef enum {
 
  */
 void usage(const char *name, const char *badparam, std::string ipath, std::string ppath,
-           unsigned first, unsigned nimages, unsigned step,
-           vpDisplayType &dtype)
+           unsigned first, unsigned nimages, unsigned step, vpDisplayType &dtype)
 {
   fprintf(stdout, "\n\
 Read an image sequence from the disk and display it.\n\
@@ -217,15 +222,15 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &pp
 		unsigned &first, unsigned &nimages, unsigned &step,
 		vpDisplayType &dtype, bool &list, bool &display, bool &click, bool &wait)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
   std::string sDisplayType; 
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click = false; break;
     case 'd': display = false; break;
-    case 't': sDisplayType = optarg;
+    case 't': sDisplayType = optarg_;
       // Parse the display type option
     if (sDisplayType.compare("X11") == 0) {
       dtype = vpX11;
@@ -241,18 +246,18 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &pp
     }
 
     break;  
-    case 'i': ipath = optarg; break;
+    case 'i': ipath = optarg_; break;
     case 'l': list = true; break;
-    case 'p': ppath = optarg; break;
-    case 'f': first = (unsigned) atoi(optarg); break;
-    case 'n': nimages = (unsigned) atoi(optarg); break;
-    case 's': step = (unsigned) atoi(optarg); break;
+    case 'p': ppath = optarg_; break;
+    case 'f': first = (unsigned) atoi(optarg_); break;
+    case 'n': nimages = (unsigned) atoi(optarg_); break;
+    case 's': step = (unsigned) atoi(optarg_); break;
     case 'w': wait = true; break;
     case 'h': usage(argv[0], NULL, ipath, ppath, first, nimages, step, dtype);
       return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, ppath, first, nimages, step, dtype);
+      usage(argv[0], optarg_, ipath, ppath, first, nimages, step, dtype);
       return false; break;
     }
   }
@@ -261,7 +266,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath, std::string &pp
     // standalone param or error
     usage(argv[0], NULL, ipath, ppath, first, nimages, step, dtype);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
diff --git a/test/device/display/testVideoDevice.cpp b/test/device/display/testVideoDevice.cpp
index 320ee3e2..bc2bc73d 100644
--- a/test/device/display/testVideoDevice.cpp
+++ b/test/device/display/testVideoDevice.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testVideoDevice.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: testVideoDevice.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -77,6 +77,11 @@ typedef enum {
   vpCV 
 } vpDisplayType;
 
+void usage(const char *name, const char *badparam, std::string ipath, vpDisplayType &dtype);
+bool getOptions(int argc, const char **argv,
+                std::string &ipath, vpDisplayType &dtype, bool &list,
+                bool &click_allowed, bool &display );
+
 /*!
 
   Print the program options.
@@ -161,15 +166,15 @@ bool getOptions(int argc, const char **argv,
                 std::string &ipath, vpDisplayType &dtype, bool &list,
                 bool &click_allowed, bool &display )
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
   std::string sDisplayType;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'i': ipath = optarg; break;
+    case 'i': ipath = optarg_; break;
     case 'l': list = true; break;
-    case 't': sDisplayType = optarg;
+    case 't': sDisplayType = optarg_;
       // Parse the display type option
       if (sDisplayType.compare("X11") == 0) {
         dtype = vpX11;
@@ -193,7 +198,7 @@ bool getOptions(int argc, const char **argv,
     case 'd': display = false; break;
 
     default:
-      usage(argv[0], optarg, ipath,dtype); return false; break;
+      usage(argv[0], optarg_, ipath,dtype); return false; break;
     }
   }
 
@@ -202,7 +207,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, dtype);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
diff --git a/test/device/display/testVideoDeviceDual.cpp b/test/device/display/testVideoDeviceDual.cpp
index 6e4b1ab5..a3bc6ba9 100644
--- a/test/device/display/testVideoDeviceDual.cpp
+++ b/test/device/display/testVideoDeviceDual.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testVideoDeviceDual.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testVideoDeviceDual.cpp 4659 2014-02-09 14:11:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -60,6 +60,7 @@
 
 */
 
+
 // List of allowed command line options
 #define GETOPTARGS	"hlt:dc"
 
@@ -71,6 +72,9 @@ typedef enum {
   vpCV 
 } vpDisplayType;
 
+void usage(const char *name, const char *badparam, vpDisplayType &dtype);
+bool getOptions(int argc, const char **argv, vpDisplayType &dtype, bool &list, bool &click_allowed, bool &display);
+
 /*!
 
   Print the program options.
@@ -142,16 +146,16 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv,
                 vpDisplayType &dtype, bool &list,
-                bool &click_allowed, bool &display )
+                bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
   std::string sDisplayType;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'l': list = true; break;
-    case 't': sDisplayType = optarg;
+    case 't': sDisplayType = optarg_;
       // Parse the display type option
       if (sDisplayType.compare("X11") == 0) {
         dtype = vpX11;
@@ -175,7 +179,7 @@ bool getOptions(int argc, const char **argv,
     case 'd': display = false; break;
 
     default:
-      usage(argv[0], optarg, dtype); return false; break;
+      usage(argv[0], optarg_, dtype); return false; break;
     }
   }
 
@@ -183,7 +187,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, dtype);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -192,152 +196,158 @@ bool getOptions(int argc, const char **argv,
 
 int main(int argc, const char ** argv)
 {
-  bool opt_list = false; // To print the list of video devices
-  vpDisplayType opt_dtype; // Type of display to use
-  bool opt_click_allowed = true;
-  bool opt_display = true;
+  try {
+    bool opt_list = false; // To print the list of video devices
+    vpDisplayType opt_dtype; // Type of display to use
+    bool opt_click_allowed = true;
+    bool opt_display = true;
 
-  // Default display is one available
+    // Default display is one available
 #if defined VISP_HAVE_GTK
-  opt_dtype = vpGTK;
+    opt_dtype = vpGTK;
 #elif defined VISP_HAVE_X11
-  opt_dtype = vpX11;
+    opt_dtype = vpX11;
 #elif defined VISP_HAVE_GDI
-  opt_dtype = vpGDI;
+    opt_dtype = vpGDI;
 #elif defined VISP_HAVE_D3D9
-  opt_dtype = vpD3D;
+    opt_dtype = vpD3D;
 #elif defined VISP_HAVE_OPENCV
-  opt_dtype = vpCV;  
+    opt_dtype = vpCV;
 #endif
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_dtype, opt_list,
-                 opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+    // Read the command line options
+    if (getOptions(argc, argv, opt_dtype, opt_list,
+                   opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Print the list of video-devices available
-  if (opt_list) {
-    unsigned nbDevices = 0;
-    std::cout << "List of video-devices available: \n";
+    // Print the list of video-devices available
+    if (opt_list) {
+      unsigned nbDevices = 0;
+      std::cout << "List of video-devices available: \n";
 #if defined VISP_HAVE_GTK
-    std::cout << "  GTK (use \"-t GTK\" option to use it)\n";
-    nbDevices ++;
+      std::cout << "  GTK (use \"-t GTK\" option to use it)\n";
+      nbDevices ++;
 #endif
 #if defined VISP_HAVE_X11
-    std::cout << "  X11 (use \"-t X11\" option to use it)\n";
-    nbDevices ++;
+      std::cout << "  X11 (use \"-t X11\" option to use it)\n";
+      nbDevices ++;
 #endif
 #if defined VISP_HAVE_GDI
-    std::cout << "  GDI (use \"-t GDI\" option to use it)\n";
-    nbDevices ++;
+      std::cout << "  GDI (use \"-t GDI\" option to use it)\n";
+      nbDevices ++;
 #endif
 #if defined VISP_HAVE_D3D9
-    std::cout << "  D3D (use \"-t D3D\" option to use it)\n";
-    nbDevices ++;
+      std::cout << "  D3D (use \"-t D3D\" option to use it)\n";
+      nbDevices ++;
 #endif
 #if defined VISP_HAVE_OPENCV
-    std::cout << "  CV (use \"-t CV\" option to use it)\n";
-    nbDevices ++;
+      std::cout << "  CV (use \"-t CV\" option to use it)\n";
+      nbDevices ++;
 #endif   
-    if (!nbDevices) {
-      std::cout << "  No display is available\n";
+      if (!nbDevices) {
+        std::cout << "  No display is available\n";
+      }
+      return (0);
     }
-    return (0);
-  }
 
-  // Create 2 images
-  vpImage<unsigned char> I1(240, 320), I2(240, 320);
-  I1 = 128;
-  I2 = 255;
+    // Create 2 images
+    vpImage<unsigned char> I1(240, 320), I2(240, 320);
+    I1 = 128;
+    I2 = 255;
 
-  // Create 2 display
-  vpDisplay *d1 = NULL, *d2 = NULL;
+    // Create 2 display
+    vpDisplay *d1 = NULL, *d2 = NULL;
 
-  // Initialize the displays 
-  switch(opt_dtype) {
-  case vpX11:
-    std::cout << "Requested X11 display functionnalities..." << std::endl;
+    // Initialize the displays
+    switch(opt_dtype) {
+    case vpX11:
+      std::cout << "Requested X11 display functionnalities..." << std::endl;
 #if defined VISP_HAVE_X11
-    d1 = new vpDisplayX;
-    d2 = new vpDisplayX;
+      d1 = new vpDisplayX;
+      d2 = new vpDisplayX;
 #else
-    std::cout << "  Sorry, X11 video device is not available.\n";
-    std::cout << "Use \"" << argv[0]
-              << " -l\" to print the list of available devices.\n";
-    return 0;
+      std::cout << "  Sorry, X11 video device is not available.\n";
+      std::cout << "Use \"" << argv[0]
+                << " -l\" to print the list of available devices.\n";
+      return 0;
 #endif
-    break;
-  case vpGTK:
-    std::cout << "Requested GTK display functionnalities..." << std::endl;
+      break;
+    case vpGTK:
+      std::cout << "Requested GTK display functionnalities..." << std::endl;
 #if defined VISP_HAVE_GTK
-    d1 = new vpDisplayGTK;
-    d2 = new vpDisplayGTK;
+      d1 = new vpDisplayGTK;
+      d2 = new vpDisplayGTK;
 #else
-    std::cout << "  Sorry, GTK video device is not available.\n";
-    std::cout << "Use \"" << argv[0]
-              << " -l\" to print the list of available devices.\n";
-    return 0;
+      std::cout << "  Sorry, GTK video device is not available.\n";
+      std::cout << "Use \"" << argv[0]
+                << " -l\" to print the list of available devices.\n";
+      return 0;
 #endif
-    break;
-  case vpGDI:
-    std::cout << "Requested GDI display functionnalities..." << std::endl;
+      break;
+    case vpGDI:
+      std::cout << "Requested GDI display functionnalities..." << std::endl;
 #if defined VISP_HAVE_GDI
-    d1 = new vpDisplayGDI;
-    d2 = new vpDisplayGDI;
+      d1 = new vpDisplayGDI;
+      d2 = new vpDisplayGDI;
 #else
-    std::cout << "  Sorry, GDI video device is not available.\n";
-    std::cout << "Use \"" << argv[0]
-              << " -l\" to print the list of available devices.\n";
-    return 0;
+      std::cout << "  Sorry, GDI video device is not available.\n";
+      std::cout << "Use \"" << argv[0]
+                << " -l\" to print the list of available devices.\n";
+      return 0;
 #endif
-    break;
-  case vpD3D:
-    std::cout << "Requested D3D display functionnalities..." << std::endl;
+      break;
+    case vpD3D:
+      std::cout << "Requested D3D display functionnalities..." << std::endl;
 #if defined VISP_HAVE_D3D9
-    d1 = new vpDisplayD3D;
-    d2 = new vpDisplayD3D;
+      d1 = new vpDisplayD3D;
+      d2 = new vpDisplayD3D;
 #else
-    std::cout << "  Sorry, D3D video device is not available.\n";
-    std::cout << "Use \"" << argv[0]
-              << " -l\" to print the list of available devices.\n";
-    return 0;
+      std::cout << "  Sorry, D3D video device is not available.\n";
+      std::cout << "Use \"" << argv[0]
+                << " -l\" to print the list of available devices.\n";
+      return 0;
 #endif
-    break;
-  case vpCV:
-    std::cout << "Requested OpenCV display functionnalities..." << std::endl;
+      break;
+    case vpCV:
+      std::cout << "Requested OpenCV display functionnalities..." << std::endl;
 #if defined VISP_HAVE_OPENCV
-    d1 = new vpDisplayOpenCV;
-    d2 = new vpDisplayOpenCV;
+      d1 = new vpDisplayOpenCV;
+      d2 = new vpDisplayOpenCV;
 #else
-    std::cout << "  Sorry, OpenCV video device is not available.\n";
-    std::cout << "Use \"" << argv[0]
-              << " -l\" to print the list of available devices.\n";
-    return 0;
+      std::cout << "  Sorry, OpenCV video device is not available.\n";
+      std::cout << "Use \"" << argv[0]
+                << " -l\" to print the list of available devices.\n";
+      return 0;
 #endif
-    break;   
-  }
+      break;
+    }
 
-  if (opt_display){
-    int winx1 = 100, winy1 = 200;
-    d1->init(I1, winx1, winy1, "Display 1");
+    if (opt_display){
+      int winx1 = 100, winy1 = 200;
+      d1->init(I1, winx1, winy1, "Display 1");
 
-    int winx2 = winx1+10+(int)I1.getWidth(), winy2 = winy1;
-    d2->init(I2, winx2, winy2, "Display 2");
+      int winx2 = winx1+10+(int)I1.getWidth(), winy2 = winy1;
+      d2->init(I2, winx2, winy2, "Display 2");
 
-    vpDisplay::display(I1);
-    vpDisplay::display(I2);
+      vpDisplay::display(I1);
+      vpDisplay::display(I2);
 
-    vpDisplay::flush(I1);
-    vpDisplay::flush(I2);
-  }
+      vpDisplay::flush(I1);
+      vpDisplay::flush(I2);
+    }
 
-  std::cout << "A click in display 1 to exit..." << std::endl;
-  if ( opt_click_allowed )
-    vpDisplay::getClick(I1);
+    std::cout << "A click in display 1 to exit..." << std::endl;
+    if ( opt_click_allowed )
+      vpDisplay::getClick(I1);
 
-  delete d1;
-  delete d2;
+    delete d1;
+    delete d2;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 #else
diff --git a/test/device/framegrabber/CMakeLists.txt b/test/device/framegrabber/CMakeLists.txt
index a3cede79..7f89c918 100644
--- a/test/device/framegrabber/CMakeLists.txt
+++ b/test/device/framegrabber/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/device/framegrabber/test1394TwoGrabber.cpp b/test/device/framegrabber/test1394TwoGrabber.cpp
index 9a5dc5df..77ef541b 100644
--- a/test/device/framegrabber/test1394TwoGrabber.cpp
+++ b/test/device/framegrabber/test1394TwoGrabber.cpp
@@ -1,10 +1,10 @@
 
 /****************************************************************************
  *
- * $Id: test1394TwoGrabber.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: test1394TwoGrabber.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/test/device/framegrabber/test1394TwoResetBus.cpp b/test/device/framegrabber/test1394TwoResetBus.cpp
index 02910290..14839c0f 100644
--- a/test/device/framegrabber/test1394TwoResetBus.cpp
+++ b/test/device/framegrabber/test1394TwoResetBus.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: test1394TwoResetBus.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: test1394TwoResetBus.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/test/feature/CMakeLists.txt b/test/feature/CMakeLists.txt
index e9629e67..a12fb14d 100644
--- a/test/feature/CMakeLists.txt
+++ b/test/feature/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/feature/testPoint.cpp b/test/feature/testPoint.cpp
index 39407acc..a16f39cd 100644
--- a/test/feature/testPoint.cpp
+++ b/test/feature/testPoint.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testPoint.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testPoint.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -61,6 +61,10 @@
 #include <stdlib.h>
 #include <stdio.h>
 
+
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
   Print the program options.
@@ -91,15 +95,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -108,7 +112,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -119,114 +123,119 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
-
-  vpHomogeneousMatrix cMo ;
-  cMo[0][3] = 0.1 ;
-  cMo[1][3] = 0.2 ;
-  cMo[2][3] = 2 ;
-
-  vpPoint point ;
-  vpTRACE("set point coordinates in the world  frame ") ;
-  point.setWorldCoordinates(0,0,0) ;
-
-
-  std::cout <<"------------------------------------------------------"<<std::endl ;
-  vpTRACE("test the projection ") ;
-  point.track(cMo) ;
-
-  vpTRACE("coordinates in the world frame ") ;
-  std::cout << point.oP.t() << std::endl ;
-  vpTRACE("coordinates in the camera frame  ") ;
-  std::cout << point.cP.t() << std::endl ;
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  vpTRACE("2D coordinates ") ;
-  std::cout<< point.get_x() << "  " << point.get_y() << std::endl ;
+    vpHomogeneousMatrix cMo ;
+    cMo[0][3] = 0.1 ;
+    cMo[1][3] = 0.2 ;
+    cMo[2][3] = 2 ;
 
-  std::cout <<"------------------------------------------------------"<<std::endl ;
-  vpTRACE("test the interaction matrix ") ;
+    vpPoint point ;
+    vpTRACE("set point coordinates in the world  frame ") ;
+    point.setWorldCoordinates(0,0,0) ;
 
-  vpFeaturePoint p ;
-  vpFeatureBuilder::create(p,point) ;
+    std::cout <<"------------------------------------------------------"<<std::endl ;
+    vpTRACE("test the projection ") ;
+    point.track(cMo) ;
 
-  vpMatrix L ;
-  L = p.interaction() ;
-  std::cout << L << std::endl ;
+    vpTRACE("coordinates in the world frame ") ;
+    std::cout << point.oP.t() << std::endl ;
+    vpTRACE("coordinates in the camera frame  ") ;
+    std::cout << point.cP.t() << std::endl ;
 
-  vpTRACE("test the interaction matrix select") ;
-  vpTRACE("\t only X") ;
-  L = p.interaction(vpFeaturePoint::selectX()) ;
-  std::cout << L << std::endl ;
+    vpTRACE("2D coordinates ") ;
+    std::cout<< point.get_x() << "  " << point.get_y() << std::endl ;
 
-  vpTRACE("\t only Y") ;
-  L = p.interaction(vpFeaturePoint::selectY()) ;
-  std::cout << L << std::endl ;
+    std::cout <<"------------------------------------------------------"<<std::endl ;
+    vpTRACE("test the interaction matrix ") ;
 
-  vpTRACE("\t X & Y") ;
-  L = p.interaction(vpFeaturePoint::selectX() |
-                    vpFeaturePoint::selectY()) ;
-  std::cout << L << std::endl ;
+    vpFeaturePoint p ;
+    vpFeatureBuilder::create(p,point) ;
 
-  vpTRACE("\t selectAll") ;
-  L = p.interaction(vpFeaturePoint::selectAll() ) ;
-  std::cout << L << std::endl ;
+    vpMatrix L ;
+    L = p.interaction() ;
+    std::cout << L << std::endl ;
 
-  std::cout <<"------------------------------------------------------"<<std::endl ;
-  vpTRACE("test the error ") ;
+    vpTRACE("test the interaction matrix select") ;
+    vpTRACE("\t only X") ;
+    L = p.interaction(vpFeaturePoint::selectX()) ;
+    std::cout << L << std::endl ;
 
-  try{
-    vpFeaturePoint pd ;
-    pd.set_x(0) ;
-    pd.set_y(0) ;
+    vpTRACE("\t only Y") ;
+    L = p.interaction(vpFeaturePoint::selectY()) ;
+    std::cout << L << std::endl ;
 
-    pd.print() ; std::cout << std::endl ;
-    vpColVector e ;
-    e = p.error(pd) ;
-    std::cout << e << std::endl ;
+    vpTRACE("\t X & Y") ;
+    L = p.interaction(vpFeaturePoint::selectX() |
+                      vpFeaturePoint::selectY()) ;
+    std::cout << L << std::endl ;
 
-    vpTRACE("test the interaction matrix select") ;
+    vpTRACE("\t selectAll") ;
+    L = p.interaction(vpFeaturePoint::selectAll() ) ;
+    std::cout << L << std::endl ;
+
+    std::cout <<"------------------------------------------------------"<<std::endl ;
+    vpTRACE("test the error ") ;
+
+    try{
+      vpFeaturePoint pd ;
+      pd.set_x(0) ;
+      pd.set_y(0) ;
+
+      pd.print() ; std::cout << std::endl ;
+      vpColVector e ;
+      e = p.error(pd) ;
+      std::cout << e << std::endl ;
+
+      vpTRACE("test the interaction matrix select") ;
+      vpTRACE("\t only X") ;
+      e = p.error(pd,vpFeaturePoint::selectX()) ;
+      std::cout << e << std::endl ;
+
+      vpTRACE("\t only Y") ;
+      e = p.error(pd,vpFeaturePoint::selectY()) ;
+      std::cout << e << std::endl ;
+
+      vpTRACE("\t X & Y") ;
+      e = p.error(pd,vpFeaturePoint::selectX() | vpFeaturePoint::selectY()) ;
+      std::cout << e << std::endl ;
+
+      vpTRACE("\t selectAll") ;
+      e = p.error(pd,vpFeaturePoint::selectAll() ) ;
+      std::cout << e << std::endl ;
+    }
+    catch(vpFeatureException me){ std::cout << me << std::endl ; }
+    catch(vpException me){ std::cout << me << std::endl ; }
+    std::cout <<"------------------------------------------------------"<<std::endl ;
+    vpTRACE("test the  dimension") ;
+    unsigned int dim ;
+    dim = p.getDimension() ;
+    std::cout << "Dimension = " << dim << std::endl ;
+
+    vpTRACE("test the dimension with  select") ;
     vpTRACE("\t only X") ;
-    e = p.error(pd,vpFeaturePoint::selectX()) ;
-    std::cout << e << std::endl ;
+    dim = p.getDimension(vpFeaturePoint::selectX()) ;
+    std::cout << "Dimension = " << dim << std::endl ;
 
     vpTRACE("\t only Y") ;
-    e = p.error(pd,vpFeaturePoint::selectY()) ;
-    std::cout << e << std::endl ;
+    dim = p.getDimension(vpFeaturePoint::selectY()) ;
+    std::cout << "Dimension = " << dim << std::endl ;
 
     vpTRACE("\t X & Y") ;
-    e = p.error(pd,vpFeaturePoint::selectX() | vpFeaturePoint::selectY()) ;
-    std::cout << e << std::endl ;
+    dim = p.getDimension(vpFeaturePoint::selectX() | vpFeaturePoint::selectY()) ;
+    std::cout << "Dimension = " << dim << std::endl ;
 
     vpTRACE("\t selectAll") ;
-    e = p.error(pd,vpFeaturePoint::selectAll() ) ;
-    std::cout << e << std::endl ;
+    dim = p.getDimension(vpFeaturePoint::selectAll() ) ;
+    std::cout << "Dimension = " << dim << std::endl ;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  catch(vpFeatureException me){ std::cout << me << std::endl ; }
-  catch(vpException me){ std::cout << me << std::endl ; }
-  std::cout <<"------------------------------------------------------"<<std::endl ;
-  vpTRACE("test the  dimension") ;
-  unsigned int dim ;
-  dim = p.getDimension() ;
-  std::cout << "Dimension = " << dim << std::endl ;
-
-  vpTRACE("test the dimension with  select") ;
-  vpTRACE("\t only X") ;
-  dim = p.getDimension(vpFeaturePoint::selectX()) ;
-  std::cout << "Dimension = " << dim << std::endl ;
-
-  vpTRACE("\t only Y") ;
-  dim = p.getDimension(vpFeaturePoint::selectY()) ;
-  std::cout << "Dimension = " << dim << std::endl ;
-
-  vpTRACE("\t X & Y") ;
-  dim = p.getDimension(vpFeaturePoint::selectX() | vpFeaturePoint::selectY()) ;
-  std::cout << "Dimension = " << dim << std::endl ;
-
-  vpTRACE("\t selectAll") ;
-  dim = p.getDimension(vpFeaturePoint::selectAll() ) ;
-  std::cout << "Dimension = " << dim << std::endl ;
-
 }
diff --git a/test/homography/CMakeLists.txt b/test/homography/CMakeLists.txt
index 42054ab1..f5aebdc1 100644
--- a/test/homography/CMakeLists.txt
+++ b/test/homography/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/homography/testDisplacement.cpp b/test/homography/testDisplacement.cpp
index c0d9eb27..b23d2df3 100644
--- a/test/homography/testDisplacement.cpp
+++ b/test/homography/testDisplacement.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testDisplacement.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testDisplacement.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -63,6 +63,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
   Print the program options.
@@ -93,15 +96,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -110,7 +113,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -121,131 +124,114 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
-
-  {
-    vpThetaUVector tu(vpMath::rad(90), vpMath::rad(120), vpMath::rad(45)) ;
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-    std::cout << "Initialization " <<std::endl ;
-    // std::cout << tu << std::endl ;
+    {
+      vpThetaUVector tu(vpMath::rad(90), vpMath::rad(120), vpMath::rad(45)) ;
 
+      std::cout << "Initialization " <<std::endl ;
+      // std::cout << tu << std::endl ;
 
-    std::cout << "From vpThetaUVector to vpRotationMatrix " << std::endl ;
-    vpRotationMatrix R(tu)  ;
+      std::cout << "From vpThetaUVector to vpRotationMatrix " << std::endl ;
+      vpRotationMatrix R(tu)  ;
 
+      // pure rotation
+      vpHomogeneousMatrix M ;
+      M.insert(R) ;
 
-    // pure rotation
-    vpHomogeneousMatrix M ;
-    M.insert(R) ;
+      std::cout << "M" <<std::endl <<M << std::endl ;
+      vpPlane p(0,0,1,1) ;
 
+      vpHomography H(M,p) ;
 
+      std::cout << "H" <<std::endl <<H << std::endl ;
 
-    std::cout << "M" <<std::endl <<M << std::endl ;
-    vpPlane p(0,0,1,1) ;
+      vpColVector n ;
+      vpTranslationVector T ;
 
-    vpHomography H(M,p) ;
+      H.computeDisplacement(R,T,n) ;
 
-    vpTRACE(" ") ;
-    std::cout << "H" <<std::endl <<H << std::endl ;
+      std::cout << "R" <<std::endl << R ;
+      std::cout << "T" <<std::endl << T.t() << std::endl;
+      std::cout << "n" <<std::endl << n.t() << std::endl;
+    }
+    std::cout <<"------------------------------------------------------" << std::endl ;
 
+    {
+      vpThetaUVector tu(vpMath::rad(90), vpMath::rad(120), vpMath::rad(45)) ;
 
-    vpTRACE(" ") ;
+      std::cout << "Initialization " << std::endl ;
+      // std::cout << tu << std::endl ;
 
-    vpColVector n ;
-    vpTranslationVector T ;
+      std::cout << "From vpThetaUVector to vpRotationMatrix " << std::endl ;
+      vpRotationMatrix R(tu)  ;
 
-    H.computeDisplacement(R,T,n) ;
+      // pure rotation
+      vpHomogeneousMatrix M ;
+      M.insert(R) ;
 
-    std::cout << "R" <<std::endl << R ;
-    std::cout << "T" <<std::endl << T.t()  ;
-    std::cout << "n" <<std::endl << n.t()  ;
-    vpTRACE(" ") ;
-    vpTRACE(" ") ;
-  }
-  std::cout <<"------------------------------------------------------" << std::endl ;
+      M[0][3] = 0.21 ;
+      M[1][3] = 0.31 ;
+      M[2][3] = 0.5 ;
 
-  {
-    vpThetaUVector tu(vpMath::rad(90), vpMath::rad(120), vpMath::rad(45)) ;
+      std::cout << "M" << std::endl << M << std::endl ;
+      vpPlane p(0,0,1,1) ;
 
-    std::cout << "Initialization " <<std::endl ;
-    // std::cout << tu << std::endl ;
+      vpHomography H(M,p) ;
 
+      std::cout << "H" << std::endl << H << std::endl ;
 
-    std::cout << "From vpThetaUVector to vpRotationMatrix " << std::endl ;
-    vpRotationMatrix R(tu)  ;
+      vpColVector n ;
+      vpTranslationVector T ;
 
+      H.computeDisplacement(R,T,n) ;
 
-    // pure rotation
-    vpHomogeneousMatrix M ;
-    M.insert(R) ;
-
+      std::cout << "R" <<std::endl << R ;
+      std::cout << "T" <<std::endl << T.t() << std::endl;
+      std::cout << "n" <<std::endl << n.t() << std::endl;
+    }
 
-    M[0][3] = 0.21 ;
-    M[1][3] = 0.31 ;
-    M[2][3] = 0.5 ;
+    std::cout <<"------------------------------------------------------" << std::endl ;
+    {
+      vpThetaUVector  tu(vpMath::rad(-190), vpMath::rad(12), vpMath::rad(-45)) ;
 
+      vpRotationMatrix R(tu)  ;
 
-    std::cout << "M" <<std::endl <<M << std::endl ;
-    vpPlane p(0,0,1,1) ;
+      // pure rotation
+      vpHomogeneousMatrix M ;
+      M.insert(R) ;
 
-    vpHomography H(M,p) ;
+      M[0][3] = 0.21 ;
+      M[1][3] =- 0.31 ;
+      M[2][3] = 0.5 ;
 
-    vpTRACE(" ") ;
-    std::cout << "H" <<std::endl <<H << std::endl ;
+      std::cout << "M" << std::endl << M << std::endl ;
+      vpPlane p(0.4,-0.5,0.5,1) ;
 
+      vpHomography H(M,p) ;
 
-    vpTRACE(" ") ;
+      std::cout << "H" << std::endl << H << std::endl ;
 
-    vpColVector n ;
-    vpTranslationVector T ;
+      vpColVector n ;
+      vpTranslationVector T ;
+      H.computeDisplacement(R,T,n) ;
 
-    H.computeDisplacement(R,T,n) ;
+      std::cout << "R" <<std::endl << R ;
+      std::cout << "T" <<std::endl << T.t() << std::endl;
+      std::cout << "n" <<std::endl << n.t() << std::endl;
 
-    std::cout << "R" <<std::endl << R ;
-    std::cout << "T" <<std::endl << T.t()  ;
-    std::cout << "n" <<std::endl << n.t()  ;
-    vpTRACE(" ") ;
-    vpTRACE(" ") ;
+      vpPlane p1(n[0],n[1],n[2],1.0) ;
+      H.buildFrom(R,T,p1) ;
+      std::cout << "H" << std::endl << H << std::endl ;
+    }
+    return 0;
   }
-
-  std::cout <<"------------------------------------------------------" << std::endl ;
-  {
-    vpThetaUVector  tu(vpMath::rad(-190), vpMath::rad(12), vpMath::rad(-45)) ;
-
-    vpRotationMatrix R(tu)  ;
-
-
-    // pure rotation
-    vpHomogeneousMatrix M ;
-    M.insert(R) ;
-
-    M[0][3] = 0.21 ;
-    M[1][3] =- 0.31 ;
-    M[2][3] = 0.5 ;
-
-    std::cout << "M" <<std::endl <<M << std::endl ;
-    vpPlane p(0.4,-0.5,0.5,1) ;
-
-    vpHomography H(M,p) ;
-
-    vpTRACE(" ") ;
-    std::cout << "H" <<std::endl <<H << std::endl ;
-
-    vpTRACE(" ") ;
-    vpColVector n ;
-    vpTranslationVector T ;
-    H.computeDisplacement(R,T,n) ;
-
-    std::cout << "R" <<std::endl << R ;
-    std::cout << "T" <<std::endl << T.t()  ;
-    std::cout << "n" <<std::endl << n.t()  ;
-
-    vpPlane p1(n[0],n[1],n[2],1.0) ;
-    H.buildFrom(R,T,p1) ;
-    std::cout << "H" <<std::endl <<H << std::endl ;
-
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
diff --git a/test/image/CMakeLists.txt b/test/image/CMakeLists.txt
index 90fcb462..a879ba64 100644
--- a/test/image/CMakeLists.txt
+++ b/test/image/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/image/testConversion.cpp b/test/image/testConversion.cpp
index aec83bcf..d1321216 100644
--- a/test/image/testConversion.cpp
+++ b/test/image/testConversion.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testConversion.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: testConversion.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -61,6 +61,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"i:o:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, std::string user);
+
 /*
 
   Print the program options.
@@ -72,8 +75,7 @@
   \param user : Username.
 
  */
-void usage(const char *name, const char *badparam, std::string ipath, 
-	   std::string opath, std::string user)
+void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user)
 {
   fprintf(stdout, "\n\
 Test image conversions.\n\
@@ -120,20 +122,19 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv,
-                std::string &ipath, std::string &opath, std::string user)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, std::string user)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'i': ipath = optarg; break;
-    case 'o': opath = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'o': opath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath, opath, user); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, opath, user); return false; break;
+      usage(argv[0], optarg_, ipath, opath, user); return false; break;
     }
   }
 
@@ -141,7 +142,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, opath, user);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -151,410 +152,415 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
-
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string opt_opath;
-  std::string ipath;
-  std::string opath;
-  std::string filename;
-  std::string username;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Set the default output path
-#ifdef WIN32
-  opt_opath = "C:/temp";
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string opt_opath;
+    std::string ipath;
+    std::string opath;
+    std::string filename;
+    std::string username;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Set the default output path
+#if defined(_WIN32)
+    opt_opath = "C:/temp";
 #else
-  opt_opath = "/tmp";
+    opt_opath = "/tmp";
 #endif
 
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_opath, username) == false) {
-    exit (-1);
-  }
+    // Get the user login name
+    vpIoTools::getUserName(username);
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  if (!opt_opath.empty())
-    opath = opt_opath;
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_opath, username) == false) {
+      exit (-1);
+    }
 
-  // Append to the output path string, the login name of the user
-  opath += vpIoTools::path("/") + username;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+    if (!opt_opath.empty())
+      opath = opt_opath;
+
+    // Append to the output path string, the login name of the user
+    opath += vpIoTools::path("/") + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(opath) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(opath);
+      }
+      catch (...) {
+        usage(argv[0], NULL, ipath, opt_opath, username);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << opath << std::endl;
+        std::cerr << "  Check your -o " << opt_opath << " option " << std::endl;
+        exit(-1);
+      }
+    }
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(opath) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(opath);
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (opt_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-    catch (...) {
+
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
       usage(argv[0], NULL, ipath, opt_opath, username);
       std::cerr << std::endl
                 << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << opath << std::endl;
-      std::cerr << "  Check your -o " << opt_opath << " option " << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
       exit(-1);
     }
-  }
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (opt_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
-    }
-  }
-
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opt_opath, username);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
 
-  // 
-  // Here starts really the test
-  // 
-
-  vpImage<unsigned char> Ig ; // Grey image
-  vpImage<vpRGBa> Ic ; // Color image
-
-  //-------------------- .pgm -> .ppm
-  vpTRACE("Convert a grey image (.pgm) to a color image (.ppm)");
-  // Load a grey image from the disk
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-  vpCTRACE << "Load " <<  filename << std::endl;
-  vpImageIo::read(Ig, filename) ;
-  // Create a color image from the grey
-  vpImageConvert::convert(Ig, Ic);
-  filename = opath +  vpIoTools::path("/Klimt_color.ppm");
-  vpCTRACE << "Write " << filename << std::endl;
-  vpImageIo::write(Ic, filename) ;
-
-  //-------------------- .ppm -> .pgm
-  vpTRACE("Convert a color image (.ppm) to a grey image (.pgm)");
-  // Load a color image from the disk
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-  vpCTRACE << "Load " << filename << std::endl;
-  vpImageIo::read(Ic, filename) ;
-  // Create a grey image from the color
-  vpImageConvert::convert(Ic, Ig);
-  filename = opath +  vpIoTools::path("/Klimt_grey.pgm");
-  vpCTRACE << "Write " << filename << std::endl;
-  vpImageIo::write(Ig, filename) ;
-
-  //-------------------- YUV -> RGB
-  unsigned char y=187, u=10, v=30;
-  unsigned char r, g, b;
-
-  // Convert a YUV pixel value to a RGB value
-  vpImageConvert::YUVToRGB(y, u, v, r, g, b);
-  vpTRACE("y(%d) u(%d) v(%d) = r(%d) g(%d) b(%d)", y, u, v, r, g, b);
+    //
+    // Here starts really the test
+    //
+
+    vpImage<unsigned char> Ig ; // Grey image
+    vpImage<vpRGBa> Ic ; // Color image
+
+    //-------------------- .pgm -> .ppm
+    vpTRACE("Convert a grey image (.pgm) to a color image (.ppm)");
+    // Load a grey image from the disk
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+    vpCTRACE << "Load " <<  filename << std::endl;
+    vpImageIo::read(Ig, filename) ;
+    // Create a color image from the grey
+    vpImageConvert::convert(Ig, Ic);
+    filename = opath +  vpIoTools::path("/Klimt_color.ppm");
+    vpCTRACE << "Write " << filename << std::endl;
+    vpImageIo::write(Ic, filename) ;
+
+    //-------------------- .ppm -> .pgm
+    vpTRACE("Convert a color image (.ppm) to a grey image (.pgm)");
+    // Load a color image from the disk
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
+    vpCTRACE << "Load " << filename << std::endl;
+    vpImageIo::read(Ic, filename) ;
+    // Create a grey image from the color
+    vpImageConvert::convert(Ic, Ig);
+    filename = opath +  vpIoTools::path("/Klimt_grey.pgm");
+    vpCTRACE << "Write " << filename << std::endl;
+    vpImageIo::write(Ig, filename) ;
+
+    //-------------------- YUV -> RGB
+    unsigned char y=187, u=10, v=30;
+    unsigned char r, g, b;
+
+    // Convert a YUV pixel value to a RGB value
+    vpImageConvert::YUVToRGB(y, u, v, r, g, b);
+    vpTRACE("y(%d) u(%d) v(%d) = r(%d) g(%d) b(%d)", y, u, v, r, g, b);
 
 #ifdef VISP_HAVE_OPENCV
-  double t0 = vpTime::measureTimeMs();
-  /////////////////////////
-  // Convert a IplImage to a vpImage<vpRGBa>
-  ////////////////////////
-  IplImage* image = NULL; /*!< The image read / acquired */
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-
-  /* Read the color image */
-
-  vpCTRACE << "Reading the color image with opencv: "<< std::endl
-           << filename << std::endl;
-  if((image = cvLoadImage(filename.c_str(), CV_LOAD_IMAGE_COLOR)) == NULL) {
-    vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
-    return (-1);
-  }
-  vpImageConvert::convert(image, Ic);
-  filename = opath +  vpIoTools::path("/Klimt_color_cv.ppm");
-  /* Save the the current image */
-  vpImageIo::write(Ic, filename) ;
+    double t0 = vpTime::measureTimeMs();
+    /////////////////////////
+    // Convert a IplImage to a vpImage<vpRGBa>
+    ////////////////////////
+    IplImage* image = NULL; /*!< The image read / acquired */
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
+
+    /* Read the color image */
+
+    vpCTRACE << "Reading the color image with opencv: "<< std::endl
+             << filename << std::endl;
+    if((image = cvLoadImage(filename.c_str(), CV_LOAD_IMAGE_COLOR)) == NULL) {
+      vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
+      return (-1);
+    }
+    vpImageConvert::convert(image, Ic);
+    filename = opath +  vpIoTools::path("/Klimt_color_cv.ppm");
+    /* Save the the current image */
+    vpImageIo::write(Ic, filename) ;
 
-  vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
+    vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
 
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
 
-  /* Read the pgm image */
+    /* Read the pgm image */
 
-  vpCTRACE << "Reading the greyscale image with opencv: "<< std::endl
-           << filename << std::endl;
-  if(image!=NULL) cvReleaseImage( &image );
-  if((image = cvLoadImage(filename.c_str(), CV_LOAD_IMAGE_GRAYSCALE)) == NULL) {
-    vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
-    return (-1);
-  }
-  vpImageConvert::convert(image, Ic);
-  filename = opath +  vpIoTools::path("/Klimt_grey_cv.ppm");
-  /* Save the the current image */
-  vpImageIo::write(Ic, filename) ;
-
-  vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
-
-  ///////////////////////////
-  // Convert a IplImage to a vpImage<unsigned char>
-  ////////////////////////////
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-
-  /* Read the color image */
-
-  vpCTRACE << "Reading the color image with opencv: "<< std::endl
-           << filename << std::endl;
-  if(image!=NULL) cvReleaseImage( &image );
-  if((image = cvLoadImage(filename.c_str(), CV_LOAD_IMAGE_COLOR)) == NULL) {
-    vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
-    return (-1);
-  }
-  vpImageConvert::convert(image, Ig);
-  filename = opath +  vpIoTools::path("/Klimt_color_cv.pgm");
-  /* Save the the current image */
-  vpImageIo::write(Ig, filename) ;
+    vpCTRACE << "Reading the greyscale image with opencv: "<< std::endl
+             << filename << std::endl;
+    if(image!=NULL) cvReleaseImage( &image );
+    if((image = cvLoadImage(filename.c_str(), CV_LOAD_IMAGE_GRAYSCALE)) == NULL) {
+      vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
+      return (-1);
+    }
+    vpImageConvert::convert(image, Ic);
+    filename = opath +  vpIoTools::path("/Klimt_grey_cv.ppm");
+    /* Save the the current image */
+    vpImageIo::write(Ic, filename) ;
 
-  vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
+    vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
 
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+    ///////////////////////////
+    // Convert a IplImage to a vpImage<unsigned char>
+    ////////////////////////////
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
 
-  /* Read the pgm image */
+    /* Read the color image */
 
-  vpCTRACE << "Reading the greyscale image with opencv: "<< std::endl
-           << filename << std::endl;
-  if(image!=NULL) cvReleaseImage( &image );
-  if((image = cvLoadImage(filename.c_str(), CV_LOAD_IMAGE_GRAYSCALE)) == NULL) {
-    vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
-    
-    return (-1);
-  }
-  vpImageConvert::convert(image, Ig);
-  filename = opath +  vpIoTools::path("/Klimt_grey_cv.pgm");
-  /* Save the the current image */
-  vpImageIo::write(Ig, filename) ;
-
-  vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
-
-  ////////////////////////////////////
-  // Convert a vpImage<vpRGBa> to a IplImage
-  ////////////////////////////////////
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-
-  /* Read the color image */
-
-  // Load a color image from the disk
-  vpCTRACE << "Load " << filename << std::endl;
-  vpImageIo::read(Ic, filename) ;
-  vpImageConvert::convert(Ic, image);
-  filename = opath +  vpIoTools::path("/Klimt_ipl_color_cv.ppm");
-  /* Save the the current image */
-  vpCTRACE << "Write " << filename << std::endl;
-  if((cvSaveImage(filename.c_str(), image)) == 0) {
-    vpCTRACE<<"Cannot write image: "<< std::endl << filename << std::endl;
+    vpCTRACE << "Reading the color image with opencv: "<< std::endl
+             << filename << std::endl;
     if(image!=NULL) cvReleaseImage( &image );
-    return (-1);
-  }
-  vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
+    if((image = cvLoadImage(filename.c_str(), CV_LOAD_IMAGE_COLOR)) == NULL) {
+      vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
+      return (-1);
+    }
+    vpImageConvert::convert(image, Ig);
+    filename = opath +  vpIoTools::path("/Klimt_color_cv.pgm");
+    /* Save the the current image */
+    vpImageIo::write(Ig, filename) ;
 
-  ////////////////////////////////////////
-  // Convert a IplImage to a vpImage<unsigned char>
-  ////////////////////////////////////////
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+    vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
 
-  /* Read the grey image */
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
 
-  // Load a color image from the disk
-  vpCTRACE << "Load " << filename << std::endl;
-  vpImageIo::read(Ig, filename) ;
-  vpImageConvert::convert(Ig, image);
-  filename = opath +  vpIoTools::path("/Klimt_ipl_grey_cv.pgm");
-  /* Save the the current image */
+    /* Read the pgm image */
 
-  vpCTRACE << "Write " << filename << std::endl;
-  if((cvSaveImage(filename.c_str(), image)) == 0) {
-    vpCTRACE<<"Cannot write image: "<< std::endl << filename << std::endl;
+    vpCTRACE << "Reading the greyscale image with opencv: "<< std::endl
+             << filename << std::endl;
     if(image!=NULL) cvReleaseImage( &image );
-    return (-1);
-  }
-  vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
-
-  if(image!=NULL) cvReleaseImage( &image );
-  double t1 = vpTime::measureTimeMs();
-  std::cout << "Conversion c interface : " << t1 - t0 << " ms" << std::endl;
+    if((image = cvLoadImage(filename.c_str(), CV_LOAD_IMAGE_GRAYSCALE)) == NULL) {
+      vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
 
-  /* ------------------------------------------------------------------------ */
-  /*                  conversion for the new c++ interface                    */
-  /* ------------------------------------------------------------------------ */
+      return (-1);
+    }
+    vpImageConvert::convert(image, Ig);
+    filename = opath +  vpIoTools::path("/Klimt_grey_cv.pgm");
+    /* Save the the current image */
+    vpImageIo::write(Ig, filename) ;
+
+    vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
+
+    ////////////////////////////////////
+    // Convert a vpImage<vpRGBa> to a IplImage
+    ////////////////////////////////////
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
+
+    /* Read the color image */
+
+    // Load a color image from the disk
+    vpCTRACE << "Load " << filename << std::endl;
+    vpImageIo::read(Ic, filename) ;
+    vpImageConvert::convert(Ic, image);
+    filename = opath +  vpIoTools::path("/Klimt_ipl_color_cv.ppm");
+    /* Save the the current image */
+    vpCTRACE << "Write " << filename << std::endl;
+    if((cvSaveImage(filename.c_str(), image)) == 0) {
+      vpCTRACE<<"Cannot write image: "<< std::endl << filename << std::endl;
+      if(image!=NULL) cvReleaseImage( &image );
+      return (-1);
+    }
+    vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
+
+    ////////////////////////////////////////
+    // Convert a IplImage to a vpImage<unsigned char>
+    ////////////////////////////////////////
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+
+    /* Read the grey image */
+
+    // Load a color image from the disk
+    vpCTRACE << "Load " << filename << std::endl;
+    vpImageIo::read(Ig, filename) ;
+    vpImageConvert::convert(Ig, image);
+    filename = opath +  vpIoTools::path("/Klimt_ipl_grey_cv.pgm");
+    /* Save the the current image */
+
+    vpCTRACE << "Write " << filename << std::endl;
+    if((cvSaveImage(filename.c_str(), image)) == 0) {
+      vpCTRACE<<"Cannot write image: "<< std::endl << filename << std::endl;
+      if(image!=NULL) cvReleaseImage( &image );
+      return (-1);
+    }
+    vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
 
-#if VISP_HAVE_OPENCV_VERSION >= 0x020100
-  double t2 = vpTime::measureTimeMs();
-  /////////////////////////
-  // Convert a cv::Mat to a vpImage<vpRGBa>
-  ////////////////////////
-  cv::Mat imageMat;
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-  vpCTRACE << "Reading the color image with c++ interface of opencv: "<< std::endl
-           << filename << std::endl;
-  imageMat = cv::imread(filename, 1);// force to a three channel color image.
-  if(imageMat.data == NULL){
-    vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
-    return -1;
-  }
-  vpImageConvert::convert(imageMat, Ic);
-  filename = opath +  vpIoTools::path("/Klimt_color_cvMat.ppm");
-  /* Save the the current image */
-  vpImageIo::write(Ic, filename) ;
-  vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
-
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-  /* Read the pgm image */
-
-  vpCTRACE << "Reading the greyscale image with opencv: "<< std::endl
-           << filename << std::endl;
-  imageMat = cv::imread(filename, 0);// forced to grayscale.
-  if(imageMat.data == NULL) {
-    vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
-    return (-1);
-  }
-  vpImageConvert::convert(imageMat, Ic);
-  filename = opath +  vpIoTools::path("/Klimt_grey_cvMat.ppm");
-  /* Save the the current image */
-  vpImageIo::write(Ic, filename) ;
-  vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
-
-  ///////////////////////////
-  // Convert a cv::Mat to a vpImage<unsigned char>
-  ////////////////////////////
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-
-  /* Read the color image */
-
-  vpCTRACE << "Reading the color image with opencv: "<< std::endl
-           << filename << std::endl;
-  imageMat = cv::imread(filename, 1);// force to a three channel color image.
-  if(imageMat.data == NULL){
-    vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
-    return -1;
-  }
-  vpImageConvert::convert(imageMat, Ig);
-  filename = opath +  vpIoTools::path("/Klimt_color_cvMat.pgm");
-  /* Save the the current image */
-  vpImageIo::write(Ig, filename) ;
-  vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
-
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-
-  /* Read the pgm image */
-
-  vpCTRACE << "Reading the greyscale image with opencv: "<< std::endl
-           << filename << std::endl;
-  imageMat = cv::imread(filename, 0);
-  if(imageMat.data == NULL){
-    vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
-    return (-1);
-  }
-  vpImageConvert::convert(imageMat, Ig);
-  filename = opath +  vpIoTools::path("/Klimt_grey_cvMat.pgm");
-  /* Save the the current image */
-  vpImageIo::write(Ig, filename) ;
-
-  vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
-
-  ////////////////////////////////////
-  // Convert a vpImage<vpRGBa> to a cv::Mat
-  ////////////////////////////////////
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-
-  /* Read the color image */
-
-  // Load a color image from the disk
-  vpCTRACE << "Load " << filename << std::endl;
-  vpImageIo::read(Ic, filename) ;
-  vpImageConvert::convert(Ic, imageMat);
-  filename = opath +  vpIoTools::path("/Klimt_ipl_color_cvMat.ppm");
-  /* Save the the current image */
-  vpCTRACE << "Write " << filename << std::endl;
-  if(!cv::imwrite(filename, imageMat)){
-    vpCTRACE<<"Cannot write image: "<< std::endl << filename << std::endl;
     if(image!=NULL) cvReleaseImage( &image );
-    return (-1);
-  }
-  vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
-
-  ////////////////////////////////////////
-  // Convert a IplImage to a vpImage<unsigned char>
-  ////////////////////////////////////////
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-
-  /* Read the grey image */
+    double t1 = vpTime::measureTimeMs();
+    std::cout << "Conversion c interface : " << t1 - t0 << " ms" << std::endl;
 
-  // Load a color image from the disk
-  vpCTRACE << "Load " << filename << std::endl;
-  vpImageIo::read(Ig, filename);
-  vpImageConvert::convert(Ig, imageMat);
-  filename = opath +  vpIoTools::path("/Klimt_ipl_grey_cvMat.pgm");
-  /* Save the the current image */
+    /* ------------------------------------------------------------------------ */
+    /*                  conversion for the new c++ interface                    */
+    /* ------------------------------------------------------------------------ */
 
-  vpCTRACE << "Write " << filename << std::endl;
-  if(!cv::imwrite(filename, imageMat)){
-    vpCTRACE<<"Cannot write image: "<< std::endl << filename << std::endl;
-    if(image!=NULL) cvReleaseImage( &image );
-    return (-1);
-  }
-  vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
-  double t3 = vpTime::measureTimeMs();
-  std::cout << "Conversion c++ interface : " << t3 - t2 << " ms" << std::endl;
+#if VISP_HAVE_OPENCV_VERSION >= 0x020100
+    double t2 = vpTime::measureTimeMs();
+    /////////////////////////
+    // Convert a cv::Mat to a vpImage<vpRGBa>
+    ////////////////////////
+    cv::Mat imageMat;
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
+    vpCTRACE << "Reading the color image with c++ interface of opencv: "<< std::endl
+             << filename << std::endl;
+    imageMat = cv::imread(filename, 1);// force to a three channel color image.
+    if(imageMat.data == NULL){
+      vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
+      return -1;
+    }
+    vpImageConvert::convert(imageMat, Ic);
+    filename = opath +  vpIoTools::path("/Klimt_color_cvMat.ppm");
+    /* Save the the current image */
+    vpImageIo::write(Ic, filename) ;
+    vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
+
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+    /* Read the pgm image */
+
+    vpCTRACE << "Reading the greyscale image with opencv: "<< std::endl
+             << filename << std::endl;
+    imageMat = cv::imread(filename, 0);// forced to grayscale.
+    if(imageMat.data == NULL) {
+      vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
+      return (-1);
+    }
+    vpImageConvert::convert(imageMat, Ic);
+    filename = opath +  vpIoTools::path("/Klimt_grey_cvMat.ppm");
+    /* Save the the current image */
+    vpImageIo::write(Ic, filename) ;
+    vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
+
+    ///////////////////////////
+    // Convert a cv::Mat to a vpImage<unsigned char>
+    ////////////////////////////
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
+
+    /* Read the color image */
+
+    vpCTRACE << "Reading the color image with opencv: "<< std::endl
+             << filename << std::endl;
+    imageMat = cv::imread(filename, 1);// force to a three channel color image.
+    if(imageMat.data == NULL){
+      vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
+      return -1;
+    }
+    vpImageConvert::convert(imageMat, Ig);
+    filename = opath +  vpIoTools::path("/Klimt_color_cvMat.pgm");
+    /* Save the the current image */
+    vpImageIo::write(Ig, filename) ;
+    vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
+
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+
+    /* Read the pgm image */
+
+    vpCTRACE << "Reading the greyscale image with opencv: "<< std::endl
+             << filename << std::endl;
+    imageMat = cv::imread(filename, 0);
+    if(imageMat.data == NULL){
+      vpCTRACE<<"Cannot read image: "<< std::endl << filename << std::endl;
+      return (-1);
+    }
+    vpImageConvert::convert(imageMat, Ig);
+    filename = opath +  vpIoTools::path("/Klimt_grey_cvMat.pgm");
+    /* Save the the current image */
+    vpImageIo::write(Ig, filename) ;
+
+    vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
+
+    ////////////////////////////////////
+    // Convert a vpImage<vpRGBa> to a cv::Mat
+    ////////////////////////////////////
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
+
+    /* Read the color image */
+
+    // Load a color image from the disk
+    vpCTRACE << "Load " << filename << std::endl;
+    vpImageIo::read(Ic, filename) ;
+    vpImageConvert::convert(Ic, imageMat);
+    filename = opath +  vpIoTools::path("/Klimt_ipl_color_cvMat.ppm");
+    /* Save the the current image */
+    vpCTRACE << "Write " << filename << std::endl;
+    if(!cv::imwrite(filename, imageMat)){
+      vpCTRACE<<"Cannot write image: "<< std::endl << filename << std::endl;
+      if(image!=NULL) cvReleaseImage( &image );
+      return (-1);
+    }
+    vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
+
+    ////////////////////////////////////////
+    // Convert a IplImage to a vpImage<unsigned char>
+    ////////////////////////////////////////
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+
+    /* Read the grey image */
+
+    // Load a color image from the disk
+    vpCTRACE << "Load " << filename << std::endl;
+    vpImageIo::read(Ig, filename);
+    vpImageConvert::convert(Ig, imageMat);
+    filename = opath +  vpIoTools::path("/Klimt_ipl_grey_cvMat.pgm");
+    /* Save the the current image */
+
+    vpCTRACE << "Write " << filename << std::endl;
+    if(!cv::imwrite(filename, imageMat)){
+      vpCTRACE<<"Cannot write image: "<< std::endl << filename << std::endl;
+      if(image!=NULL) cvReleaseImage( &image );
+      return (-1);
+    }
+    vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
+    double t3 = vpTime::measureTimeMs();
+    std::cout << "Conversion c++ interface : " << t3 - t2 << " ms" << std::endl;
 #endif
 #endif
-  
-  ////////////////////////////////////
-  // Split a vpImage<vpRGBa> to vpImage<unsigned char>
-  ////////////////////////////////////
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-
-  /* Read the color image */
-
-  // Load a color image from the disk
-  vpCTRACE << "Load " << filename << std::endl;
-  vpImageIo::read(Ic, filename) ;
-  vpImage<unsigned char> R,G,B,a;
-  vpImageConvert::split(Ic, &R,NULL,&B); 
-  double begintime  = vpTime::measureTimeMs();
-  for(int i=0; i<1000;i++){
+
+    ////////////////////////////////////
+    // Split a vpImage<vpRGBa> to vpImage<unsigned char>
+    ////////////////////////////////////
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
+
+    /* Read the color image */
+
+    // Load a color image from the disk
+    vpCTRACE << "Load " << filename << std::endl;
+    vpImageIo::read(Ic, filename) ;
+    vpImage<unsigned char> R,G,B,a;
     vpImageConvert::split(Ic, &R,NULL,&B);
+    double begintime  = vpTime::measureTimeMs();
+    for(int i=0; i<1000;i++){
+      vpImageConvert::split(Ic, &R,NULL,&B);
+    }
+    double endtime = vpTime::measureTimeMs();
+
+    std::cout<<"Time for 1000 split (ms): "<< endtime - begintime <<std::endl;
+
+    filename = opath +  vpIoTools::path("/Klimt_RChannel.pgm");
+    /* Save the the current image */
+    vpCTRACE << "Write " << filename << std::endl;
+    vpImageIo::write(R, filename) ;
+    vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
+
+    filename = opath +  vpIoTools::path("/Klimt_BChannel.pgm");
+    /* Save the the current image */
+    vpCTRACE << "Write " << filename << std::endl;
+    vpImageIo::write(B, filename) ;
+    vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-  double endtime = vpTime::measureTimeMs();
-  
-  std::cout<<"Time for 1000 split (ms): "<< endtime - begintime <<std::endl;
-
-  filename = opath +  vpIoTools::path("/Klimt_RChannel.pgm");
-  /* Save the the current image */
-  vpCTRACE << "Write " << filename << std::endl;
-  vpImageIo::write(R, filename) ;
-  vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
-
-  filename = opath +  vpIoTools::path("/Klimt_BChannel.pgm");
-  /* Save the the current image */
-  vpCTRACE << "Write " << filename << std::endl;
-  vpImageIo::write(B, filename) ;
-  vpCTRACE<< "Convert result in "<<std::endl<< filename << std::endl;
-
 }
diff --git a/test/image/testCreateSubImage.cpp b/test/image/testCreateSubImage.cpp
index 44105425..c27d182e 100644
--- a/test/image/testCreateSubImage.cpp
+++ b/test/image/testCreateSubImage.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testCreateSubImage.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: testCreateSubImage.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -62,6 +62,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"i:o:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, std::string user);
+
 /*
 
   Print the program options.
@@ -120,20 +123,19 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv,
-                std::string &ipath, std::string &opath, std::string user)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, std::string user)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'i': ipath = optarg; break;
-    case 'o': opath = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'o': opath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath, opath, user); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, opath, user); return false; break;
+      usage(argv[0], optarg_, ipath, opath, user); return false; break;
     }
   }
 
@@ -141,7 +143,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, opath, user);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -151,112 +153,118 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string opt_opath;
-  std::string ipath;
-  std::string opath;
-  std::string filename;
-  std::string username;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Set the default output path
-#ifdef WIN32
-  opt_opath = "C:/temp";
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string opt_opath;
+    std::string ipath;
+    std::string opath;
+    std::string filename;
+    std::string username;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Set the default output path
+#if defined(_WIN32)
+    opt_opath = "C:/temp";
 #else
-  opt_opath = "/tmp";
+    opt_opath = "/tmp";
 #endif
 
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_opath, username) == false) {
-    exit (-1);
-  }
+    // Get the user login name
+    vpIoTools::getUserName(username);
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  if (!opt_opath.empty())
-    opath = opt_opath;
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_opath, username) == false) {
+      exit (-1);
+    }
 
-  // Append to the output path string, the login name of the user
-  opath += vpIoTools::path("/") + username;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+    if (!opt_opath.empty())
+      opath = opt_opath;
+
+    // Append to the output path string, the login name of the user
+    opath += vpIoTools::path("/") + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(opath) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(opath);
+      }
+      catch (...) {
+        usage(argv[0], NULL, ipath, opt_opath, username);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << opath << std::endl;
+        std::cerr << "  Check your -o " << opt_opath << " option " << std::endl;
+        exit(-1);
+      }
+    }
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(opath) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(opath);
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (opt_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-    catch (...) {
+
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
       usage(argv[0], NULL, ipath, opt_opath, username);
       std::cerr << std::endl
                 << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << opath << std::endl;
-      std::cerr << "  Check your -o " << opt_opath << " option " << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
       exit(-1);
     }
-  }
 
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (opt_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
-    }
+    //
+    // Here starts really the test
+    //
+    vpImage<unsigned char> I; // Input image
+    vpImage<unsigned char> C; // Cropped output image
+
+
+    // Read the input grey image from the disk
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+    std::cout << "Read image: " << filename << std::endl;
+    vpImageIo::read(I, filename) ;
+
+    // Specify the cropping area
+    vpRect crop;
+    crop.setLeft(-10.2);
+    crop.setTop(10.0);
+    crop.setWidth(I.getWidth());
+    crop.setHeight(20.0);
+
+    // Create the cropped image
+    vpImageTools::createSubImage(I, crop, C);
+
+    // Write the cropped image on the disk
+    filename = opath +  vpIoTools::path("/Klimt_crop.pgm");
+    std::cout << "Write cropped image: " << filename << std::endl;
+    vpImageIo::write(C, filename) ;
+    return 0;
   }
-
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opt_opath, username);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-
-  // 
-  // Here starts really the test
-  // 
-  vpImage<unsigned char> I; // Input image
-  vpImage<unsigned char> C; // Cropped output image
-
-
-  // Read the input grey image from the disk
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-  std::cout << "Read image: " << filename << std::endl;
-  vpImageIo::read(I, filename) ;
-
-  // Specify the cropping area
-  vpRect crop;
-  crop.setLeft(-10.2);
-  crop.setTop(10.0);
-  crop.setWidth(I.getWidth());
-  crop.setHeight(20.0);
-
-  // Create the cropped image
-  vpImageTools::createSubImage(I, crop, C);
-
-  // Write the cropped image on the disk
-  filename = opath +  vpIoTools::path("/Klimt_crop.pgm");
-  std::cout << "Write cropped image: " << filename << std::endl;
-  vpImageIo::write(C, filename) ;
-
 }
diff --git a/test/image/testImagePoint.cpp b/test/image/testImagePoint.cpp
index 87cb0b8f..d21b6404 100644
--- a/test/image/testImagePoint.cpp
+++ b/test/image/testImagePoint.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testImagePoint.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testImagePoint.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/test/image/testIoPGM.cpp b/test/image/testIoPGM.cpp
index d094fc6d..8dd1a8bc 100644
--- a/test/image/testIoPGM.cpp
+++ b/test/image/testIoPGM.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testIoPGM.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: testIoPGM.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,6 +58,8 @@
 // List of allowed command line options
 #define GETOPTARGS	"i:o:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, std::string user);
 
 /*
 
@@ -116,20 +118,19 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv,
-                std::string &ipath, std::string &opath, std::string user)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, std::string user)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'i': ipath = optarg; break;
-    case 'o': opath = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'o': opath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath, opath, user); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, opath, user); return false; break;
+      usage(argv[0], optarg_, ipath, opath, user); return false; break;
     }
   }
 
@@ -137,7 +138,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, opath, user);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -147,128 +148,128 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
-
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string opt_opath;
-  std::string ipath;
-  std::string opath;
-  std::string filename;
-  std::string username;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Set the default output path
-#ifdef WIN32
-  opt_opath = "C:/temp";
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string opt_opath;
+    std::string ipath;
+    std::string opath;
+    std::string filename;
+    std::string username;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Set the default output path
+#if defined(_WIN32)
+    opt_opath = "C:/temp";
 #else
-  opt_opath = "/tmp";
+    opt_opath = "/tmp";
 #endif
 
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_opath, username) == false) {
-    exit (-1);
-  }
+    // Get the user login name
+    vpIoTools::getUserName(username);
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  if (!opt_opath.empty())
-    opath = opt_opath;
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_opath, username) == false) {
+      exit (-1);
+    }
 
-  // Append to the output path string, the login name of the user
-  opath += vpIoTools::path("/") + username;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+    if (!opt_opath.empty())
+      opath = opt_opath;
+
+    // Append to the output path string, the login name of the user
+    opath += vpIoTools::path("/") + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(opath) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(opath);
+      }
+      catch (...) {
+        usage(argv[0], NULL, ipath, opt_opath, username);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << opath << std::endl;
+        std::cerr << "  Check your -o " << opt_opath << " option " << std::endl;
+        exit(-1);
+      }
+    }
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(opath) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(opath);
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-    catch (...) {
+
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
       usage(argv[0], NULL, ipath, opt_opath, username);
       std::cerr << std::endl
                 << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << opath << std::endl;
-      std::cerr << "  Check your -o " << opt_opath << " option " << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
       exit(-1);
     }
-  }
 
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
-    }
-  }
+    //
+    // Here starts really the test
+    //
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opt_opath, username);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Create a grey level image
+    vpImage<unsigned char> I ;
 
-  // 
-  // Here starts really the test
-  // 
-
-  // Create a grey level image
-  vpImage<unsigned char> I ;
-
-  // Load a grey image from the disk
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-  std::cout << "Read image: " << filename << std::endl;
-  vpImageIo::read(I, filename);
-  // Write the content of the image on the disk
-  filename = opath +  vpIoTools::path("/Klimt_grey.pgm");
-  std::cout << "Write image: " << filename << std::endl;
-  vpImageIo::write(I, filename) ;
-
-  // Try to load a non existing image (test for exceptions)
-  try
-  {
-    // Load a non existing grey image
-    filename = ipath +  vpIoTools::path("/ViSP-images/image-that-does-not-exist.pgm");
+    // Load a grey image from the disk
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
     std::cout << "Read image: " << filename << std::endl;
-    vpImageIo::read(I, filename) ;
-  }
-  catch(vpImageException e)
-  {
-    vpERROR_TRACE("at main level");
-    std::cout << e << std::endl ;
-  }
-
-  // Try to write an image to a non existing directory
-  try
-  {
-    filename = opath +  vpIoTools::path("/directory-that-does-not-exist/Klimt.pgm");
+    vpImageIo::read(I, filename);
+    // Write the content of the image on the disk
+    filename = opath +  vpIoTools::path("/Klimt_grey.pgm");
     std::cout << "Write image: " << filename << std::endl;
     vpImageIo::write(I, filename) ;
+
+    try {
+      // Try to load a non existing image (test for exceptions)
+      // Load a non existing grey image
+      filename = ipath +  vpIoTools::path("/ViSP-images/image-that-does-not-exist.pgm");
+      std::cout << "Read image: " << filename << std::endl;
+      vpImageIo::read(I, filename) ;
+    }
+    catch(vpException e) {
+      std::cout << "Catch an exception due to a non existing file: " << e << std::endl;
+    }
+
+    try {
+      // Try to write an image to a non existing directory
+      filename = opath +  vpIoTools::path("/directory-that-does-not-exist/Klimt.pgm");
+      std::cout << "Write image: " << filename << std::endl;
+      vpImageIo::write(I, filename) ;
+    }
+    catch(vpException e) {
+      std::cout << "Catch an exception due to a non existing file: " << e << std::endl;
+    }
+    return 0;
   }
-  catch(vpImageException e)
-  {
-    vpERROR_TRACE("at main level");
-    std::cout << e << std::endl ;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
diff --git a/test/image/testIoPPM.cpp b/test/image/testIoPPM.cpp
index 3327e51a..17dc62f1 100644
--- a/test/image/testIoPPM.cpp
+++ b/test/image/testIoPPM.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testIoPPM.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: testIoPPM.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -59,6 +59,8 @@
 // List of allowed command line options
 #define GETOPTARGS	"i:o:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, std::string user);
 
 /*
 
@@ -118,20 +120,19 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv,
-                std::string &ipath, std::string &opath, std::string user)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, std::string user)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'i': ipath = optarg; break;
-    case 'o': opath = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'o': opath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath, opath, user); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, opath, user); return false; break;
+      usage(argv[0], optarg_, ipath, opath, user); return false; break;
     }
   }
 
@@ -139,7 +140,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, opath, user);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -149,170 +150,167 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
-
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string opt_opath;
-  std::string ipath;
-  std::string opath;
-  std::string filename;
-  std::string username;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Set the default output path
-#ifdef WIN32
-  opt_opath = "C:/temp";
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string opt_opath;
+    std::string ipath;
+    std::string opath;
+    std::string filename;
+    std::string username;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Set the default output path
+#if defined(_WIN32)
+    opt_opath = "C:/temp";
 #else
-  opt_opath = "/tmp";
+    opt_opath = "/tmp";
 #endif
 
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_opath, username) == false) {
-    exit (-1);
-  }
+    // Get the user login name
+    vpIoTools::getUserName(username);
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  if (!opt_opath.empty())
-    opath = opt_opath;
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_opath, username) == false) {
+      exit (-1);
+    }
 
-  // Append to the output path string, the login name of the user
-  opath += vpIoTools::path("/") + username;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+    if (!opt_opath.empty())
+      opath = opt_opath;
+
+    // Append to the output path string, the login name of the user
+    opath += vpIoTools::path("/") + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(opath) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(opath);
+      }
+      catch (...) {
+        usage(argv[0], NULL, ipath, opt_opath, username);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << opath << std::endl;
+        std::cerr << "  Check your -o " << opt_opath << " option " << std::endl;
+        exit(-1);
+      }
+    }
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(opath) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(opath);
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-    catch (...) {
+
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
       usage(argv[0], NULL, ipath, opt_opath, username);
       std::cerr << std::endl
                 << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << opath << std::endl;
-      std::cerr << "  Check your -o " << opt_opath << " option " << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
       exit(-1);
     }
-  }
 
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
-    }
-  }
+    //
+    // Here starts really the test
+    //
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opt_opath, username);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    /////////////////////////////////////////////////////////////////////
+    // Create a grey level image
+    vpImage<unsigned char> I ;
 
-  // 
-  // Here starts really the test
-  // 
-
-  /////////////////////////////////////////////////////////////////////
-  // Create a grey level image
-  vpImage<unsigned char> I ;
-
-  // Load a color image from the disk and convert it to a grey level one
-  filename = ipath + vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-  std::cout << "Read image: " << filename << std::endl;
-  vpImageIo::read(I, filename);
-  // Write the content of the image on the disk
-  filename = opath + vpIoTools::path("/Klimt_grey.ppm");
-  std::cout << "Write image: " << filename << std::endl;
-  vpImageIo::write(I, filename) ;
-
-  // Try to load a non existing image (test for exceptions)
-  try
-  {
-    // Load a non existing grey image
-    filename = ipath + vpIoTools::path("/ViSP-images/image-that-does-not-exist.ppm");
+    // Load a color image from the disk and convert it to a grey level one
+    filename = ipath + vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
     std::cout << "Read image: " << filename << std::endl;
-    vpImageIo::read(I, filename) ;
-  }
-  catch(vpImageException e)
-  {
-    vpERROR_TRACE("at main level");
-    std::cout << e << std::endl ;
-  }
-
-  // Try to write an image to a non existing directory
-  try
-  {
-    filename = opath + vpIoTools::path("/directory-that-does-not-exist/Klimt.ppm");
+    vpImageIo::read(I, filename);
+    // Write the content of the image on the disk
+    filename = opath + vpIoTools::path("/Klimt_grey.ppm");
     std::cout << "Write image: " << filename << std::endl;
     vpImageIo::write(I, filename) ;
-  }
-  catch(vpImageException e)
-  {
-    vpERROR_TRACE("at main level");
-    std::cout << e << std::endl ;
-  }
 
-  /////////////////////////////////////////////////////////////////////
-  // Create a color image
-  vpImage<vpRGBa> Irgba ;
-
-  // Load a color image from the disk
-  filename = ipath + vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-  std::cout << "Read image: " << filename << std::endl;
-  vpImageIo::read(Irgba, filename);
-  // Write the content of the color image on the disk
-  filename = opath + vpIoTools::path("/Klimt_color.ppm");
-  std::cout << "Write image: " << filename << std::endl;
-  vpImageIo::write(Irgba, filename) ;
-
-  // Try to load a non existing image (test for exceptions)
-  try
-  {
-    // Load a non existing color image
-    filename = ipath + vpIoTools::path("/ViSP-images/image-that-does-not-exist.ppm");
-    std::cout << "Read image: " << filename << std::endl;
-    vpImageIo::read(Irgba, filename) ;
-  }
-  catch(vpImageException e)
-  {
-    vpERROR_TRACE("at main level");
-    std::cout << e << std::endl ;
-  }
+    // Try to load a non existing image (test for exceptions)
+    try
+    {
+      // Load a non existing grey image
+      filename = ipath + vpIoTools::path("/ViSP-images/image-that-does-not-exist.ppm");
+      std::cout << "Read image: " << filename << std::endl;
+      vpImageIo::read(I, filename) ;
+    }
+    catch(vpImageException e)
+    {
+      vpERROR_TRACE("at main level");
+      std::cout << e << std::endl ;
+    }
 
-  // Try to write a color image to a non existing directory
-  try
-  {
-    filename = opath + vpIoTools::path("/directory-that-does-not-exist/Klimt.ppm");
+    // Try to write an image to a non existing directory
+    try {
+      filename = opath + vpIoTools::path("/directory-that-does-not-exist/Klimt.ppm");
+      std::cout << "Write image: " << filename << std::endl;
+      vpImageIo::write(I, filename) ;
+    }
+    catch(vpException e) {
+      std::cout << "Catch an exception due to a non existing file: " << e << std::endl;
+    }
+
+    /////////////////////////////////////////////////////////////////////
+    // Create a color image
+    vpImage<vpRGBa> Irgba ;
+
+    // Load a color image from the disk
+    filename = ipath + vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
+    std::cout << "Read image: " << filename << std::endl;
+    vpImageIo::read(Irgba, filename);
+    // Write the content of the color image on the disk
+    filename = opath + vpIoTools::path("/Klimt_color.ppm");
     std::cout << "Write image: " << filename << std::endl;
     vpImageIo::write(Irgba, filename) ;
+
+    try {
+      // Try to load a non existing image (test for exceptions)
+      // Load a non existing color image
+      filename = ipath + vpIoTools::path("/ViSP-images/image-that-does-not-exist.ppm");
+      std::cout << "Read image: " << filename << std::endl;
+      vpImageIo::read(Irgba, filename) ;
+    }
+    catch(vpException e) {
+      std::cout << "Catch an exception due to a non existing file: " << e << std::endl;
+    }
+
+    try {
+      // Try to write a color image to a non existing directory
+      filename = opath + vpIoTools::path("/directory-that-does-not-exist/Klimt.ppm");
+      std::cout << "Write image: " << filename << std::endl;
+      vpImageIo::write(Irgba, filename) ;
+    }
+    catch(vpException e) {
+      std::cout << "Catch an exception due to a non existing file: " << e << std::endl;
+    }
+    return 0;
   }
-  catch(vpImageException e)
-  {
-    vpERROR_TRACE("at main level");
-    std::cout << e << std::endl ;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 
diff --git a/test/image/testReadImage.cpp b/test/image/testReadImage.cpp
index 59eb8c45..eb1c363e 100644
--- a/test/image/testReadImage.cpp
+++ b/test/image/testReadImage.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testReadImage.cpp 4314 2013-07-16 17:41:21Z fspindle $
+ * $Id: testReadImage.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -57,6 +57,8 @@
 // List of allowed command line options
 #define GETOPTARGS	"i:p:h"
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string ppath);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath);
 
 /*
 
@@ -112,20 +114,19 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
 */
-bool getOptions(int argc, const char **argv,
-                std::string &ipath, std::string &ppath)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &ppath)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'i': ipath = optarg; break;
-    case 'p': ppath = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'p': ppath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath, ppath); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, ppath); return false; break;
+      usage(argv[0], optarg_, ipath, ppath); return false; break;
     }
   }
 
@@ -133,7 +134,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, ppath);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -143,102 +144,100 @@ bool getOptions(int argc, const char **argv,
 int
 main(int argc, const char ** argv)
 {
-
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string opt_ppath;
-  std::string ipath;
-  std::string ppath;
-  std::string filename;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_ppath) == false) {
-    exit (-1);
-  }
-
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  if (!opt_ppath.empty())
-    ppath = opt_ppath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string opt_ppath;
+    std::string ipath;
+    std::string ppath;
+    std::string filename;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_ppath) == false) {
+      exit (-1);
     }
-  }
 
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+    if (!opt_ppath.empty())
+      ppath = opt_ppath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
+    }
 
-  // 
-  // Here starts really the test
-  // 
 
-  /////////////////////////////////////////////////////////////////////
-  // Create a grey level image
-  //vpImage<vpRGBa> I;
-  vpImage<unsigned char> I;
-  vpImage<vpRGBa> Irgb;
-  
-  try {
-  if (opt_ppath.empty())
-  {
-    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-    vpImageIo::read(I,filename);
-    printf("Read ppm ok\n");
-    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-    vpImageIo::read(I,filename);
-    printf("Read pgm ok\n");
-    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.jpeg");
-    vpImageIo::read(I,filename);
-    printf("Read jpeg ok\n");
-    filename = ipath +  vpIoTools::path("/ViSP-images/mire/mire.jpg");
-    vpImageIo::read(I,filename);
-    printf("Read jpg ok\n");
-    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.png");
-    vpImageIo::read(I,filename);
-    printf("Read png ok\n");
-
-    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
-    vpImageIo::read(Irgb,filename);
-    printf("Read ppm ok\n");
-    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
-    vpImageIo::read(Irgb,filename);
-    printf("Read pgm ok\n");
-    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.jpeg");
-    vpImageIo::read(Irgb,filename);
-    printf("Read jpeg ok\n");
-    filename = ipath +  vpIoTools::path("/ViSP-images/mire/mire.jpg");
-    vpImageIo::read(Irgb,filename);
-    printf("Read jpg ok\n");
-    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.png");
-    vpImageIo::read(Irgb,filename);
-    printf("Read png ok\n");
-  }
-  else
-  {
-    filename = opt_ppath;
-    vpImageIo::read(I,filename);
-    vpTRACE("image read without problem");
-  }
+    //
+    // Here starts really the test
+    //
+
+    /////////////////////////////////////////////////////////////////////
+    // Create a grey level image
+    //vpImage<vpRGBa> I;
+    vpImage<unsigned char> I;
+    vpImage<vpRGBa> Irgb;
+
+    if (opt_ppath.empty())
+    {
+      filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
+      vpImageIo::read(I,filename);
+      printf("Read ppm ok\n");
+      filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+      vpImageIo::read(I,filename);
+      printf("Read pgm ok\n");
+      filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.jpeg");
+      vpImageIo::read(I,filename);
+      printf("Read jpeg ok\n");
+      filename = ipath +  vpIoTools::path("/ViSP-images/mire/mire.jpg");
+      vpImageIo::read(I,filename);
+      printf("Read jpg ok\n");
+      filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.png");
+      vpImageIo::read(I,filename);
+      printf("Read png ok\n");
+
+      filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
+      vpImageIo::read(Irgb,filename);
+      printf("Read ppm ok\n");
+      filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+      vpImageIo::read(Irgb,filename);
+      printf("Read pgm ok\n");
+      filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.jpeg");
+      vpImageIo::read(Irgb,filename);
+      printf("Read jpeg ok\n");
+      filename = ipath +  vpIoTools::path("/ViSP-images/mire/mire.jpg");
+      vpImageIo::read(Irgb,filename);
+      printf("Read jpg ok\n");
+      filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.png");
+      vpImageIo::read(Irgb,filename);
+      printf("Read png ok\n");
+    }
+    else
+    {
+      filename = opt_ppath;
+      vpImageIo::read(I,filename);
+      vpTRACE("image read without problem");
+    }
   }
-  catch(...) {
-    std::cout << "Unsupported image format" << std::endl;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
-
   return 0;
 }
diff --git a/test/image/testUndistortImage.cpp b/test/image/testUndistortImage.cpp
index 6c8001de..73a12efa 100644
--- a/test/image/testUndistortImage.cpp
+++ b/test/image/testUndistortImage.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testUndistortImage.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: testUndistortImage.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -66,6 +66,9 @@
 //#define COLOR
 #define BW
 
+void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user);
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, std::string user);
+
 /*
 
   Print the program options.
@@ -125,20 +128,19 @@ OPTIONS:                                               Default\n\
   \return false if the program has to be stopped, true otherwise.
 
  */
-bool getOptions(int argc, const char **argv,
-                std::string &ipath, std::string &opath, std::string user)
+bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, std::string user)
 {
-  const char *optarg;
+  const char *optarg_;
   int c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'i': ipath = optarg; break;
-    case 'o': opath = optarg; break;
+    case 'i': ipath = optarg_; break;
+    case 'o': opath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath, opath, user); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath, opath, user); return false; break;
+      usage(argv[0], optarg_, ipath, opath, user); return false; break;
     }
   }
 
@@ -146,7 +148,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, ipath, opath, user);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -155,130 +157,137 @@ bool getOptions(int argc, const char **argv,
 
 int main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string opt_opath;
-  std::string ipath;
-  std::string opath;
-  std::string filename;
-  std::string username;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-  // Set the default output path
-#ifdef UNIX
-  opt_opath = "/tmp";
-#elif WIN32
-  opt_opath = "C:\\temp";
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string opt_opath;
+    std::string ipath;
+    std::string opath;
+    std::string filename;
+    std::string username;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+    // Set the default output path
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
+    opt_opath = "/tmp";
+#elif defined(_WIN32)
+    opt_opath = "C:\\temp";
 #endif
 
-  // Get the user login name
-  vpIoTools::getUserName(username);
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath, opt_opath, username) == false) {
-    exit (-1);
-  }
+    // Get the user login name
+    vpIoTools::getUserName(username);
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-  if (!opt_opath.empty())
-    opath = opt_opath;
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath, opt_opath, username) == false) {
+      exit (-1);
+    }
 
-  // Append to the output path string, the login name of the user
-  opath += vpIoTools::path("/") + username;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+    if (!opt_opath.empty())
+      opath = opt_opath;
+
+    // Append to the output path string, the login name of the user
+    opath += vpIoTools::path("/") + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(opath) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(opath);
+      }
+      catch (...) {
+        usage(argv[0], NULL, ipath, opt_opath, username);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << opath << std::endl;
+        std::cerr << "  Check your -o " << opt_opath << " option " << std::endl;
+        exit(-1);
+      }
+    }
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(opath) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(opath);
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (opt_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-    catch (...) {
+
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
       usage(argv[0], NULL, ipath, opt_opath, username);
       std::cerr << std::endl
                 << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << opath << std::endl;
-      std::cerr << "  Check your -o " << opt_opath << " option " << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
       exit(-1);
     }
-  }
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (opt_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
-    }
-  }
-
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath, opt_opath, username);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
 
-  //
-  // Here starts really the test
-  //
+    //
+    // Here starts really the test
+    //
 #if defined BW
-  vpImage<unsigned char> I; // Input image
-  vpImage<unsigned char> U; // undistorted output image
+    vpImage<unsigned char> I; // Input image
+    vpImage<unsigned char> U; // undistorted output image
 #elif defined COLOR
-  vpImage<vpRGBa> I; // Input image
-  vpImage<vpRGBa> U; // undistorted output image
+    vpImage<vpRGBa> I; // Input image
+    vpImage<vpRGBa> U; // undistorted output image
 #endif
-  vpCameraParameters cam;
-  cam.initPersProjWithDistortion(600,600,192,144,-0.17,0.17);
-  // Read the input grey image from the disk
+    vpCameraParameters cam;
+    cam.initPersProjWithDistortion(600,600,192,144,-0.17,0.17);
+    // Read the input grey image from the disk
 #if defined BW
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.pgm");
 #elif defined COLOR
-  filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
+    filename = ipath +  vpIoTools::path("/ViSP-images/Klimt/Klimt.ppm");
 #endif
-  std::cout << "Read image: " << filename << std::endl;
-  vpImageIo::read(I, filename) ;
+    std::cout << "Read image: " << filename << std::endl;
+    vpImageIo::read(I, filename) ;
 
-  std::cout << "Undistortion in process... " << std::endl;
-  vpImageTools::undistort(I, cam, U);
+    std::cout << "Undistortion in process... " << std::endl;
+    vpImageTools::undistort(I, cam, U);
 
-  double begintime = vpTime::measureTimeMs();
+    double begintime = vpTime::measureTimeMs();
 
-  // For the test, to have a significant time measure we repeat the
-  // undistortion 100 times
-  for(unsigned int i=0;i<100;i++)
-    // Create the undistorted image
-    vpImageTools::undistort(I, cam, U);
+    // For the test, to have a significant time measure we repeat the
+    // undistortion 100 times
+    for(unsigned int i=0;i<100;i++)
+      // Create the undistorted image
+      vpImageTools::undistort(I, cam, U);
 
-  double endtime = vpTime::measureTimeMs();
+    double endtime = vpTime::measureTimeMs();
 
-  std::cout<<"Time for 100 undistortion (ms): "<< endtime - begintime
-          << std::endl;
+    std::cout<<"Time for 100 undistortion (ms): "<< endtime - begintime
+            << std::endl;
 
-  // Write the undistorted image on the disk
+    // Write the undistorted image on the disk
 #if defined BW
-  filename = opath +  vpIoTools::path("/Klimt_undistorted.pgm");
+    filename = opath +  vpIoTools::path("/Klimt_undistorted.pgm");
 #elif defined COLOR
-  filename = opath +  vpIoTools::path("/Klimt_undistorted.ppm");
+    filename = opath +  vpIoTools::path("/Klimt_undistorted.ppm");
 #endif
-  std::cout << "Write undistorted image: " << filename << std::endl;
-  vpImageIo::write(U, filename) ;
+    std::cout << "Write undistorted image: " << filename << std::endl;
+    vpImageIo::write(U, filename) ;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
diff --git a/test/key-point/CMakeLists.txt b/test/key-point/CMakeLists.txt
index 8d743b3c..f9921338 100644
--- a/test/key-point/CMakeLists.txt
+++ b/test/key-point/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/key-point/testSurfKeyPoint.cpp b/test/key-point/testSurfKeyPoint.cpp
index 06d33183..8f3dd418 100644
--- a/test/key-point/testSurfKeyPoint.cpp
+++ b/test/key-point/testSurfKeyPoint.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testSurfKeyPoint.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: testSurfKeyPoint.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -71,6 +71,10 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:h"
 
+void usage(const char *name, const char *badparam, std::string ipath);
+bool getOptions(int argc, const char **argv, std::string &ipath,
+                bool &click_allowed, bool &display);
+
 /*!
 
   Print the program options.
@@ -128,18 +132,18 @@ OPTIONS:                                               Default\n\
 bool getOptions(int argc, const char **argv, std::string &ipath,
                 bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
+    case 'i': ipath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath);
+      usage(argv[0], optarg_, ipath);
       return false; break;
     }
   }
@@ -148,7 +152,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
     // standalone param or error
     usage(argv[0], NULL, ipath);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -159,114 +163,114 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string dirname;
-  std::string filenameRef;
-  std::string filenameCur;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath,
-                 opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string dirname;
+    std::string filenameRef;
+    std::string filenameCur;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath,
+                   opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL, ipath);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
+      exit(-1);
+    }
 
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  vpImage<unsigned char> Iref ;
-  vpImage<unsigned char> Icur ;
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    vpImage<unsigned char> Iref ;
+    vpImage<unsigned char> Icur ;
 
-  // Set the path location of the image sequence
-  dirname = ipath +  vpIoTools::path("/ViSP-images/cube/");
+    // Set the path location of the image sequence
+    dirname = ipath +  vpIoTools::path("/ViSP-images/cube/");
 
-  // Build the name of the image file
-  filenameRef = dirname + "image.0000.pgm";
-  filenameCur = dirname + "image.0079.pgm";
+    // Build the name of the image file
+    filenameRef = dirname + "image.0000.pgm";
+    filenameCur = dirname + "image.0079.pgm";
 
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    vpCTRACE << "Load: " << filenameRef << std::endl;
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
+    try{
+      vpCTRACE << "Load: " << filenameRef << std::endl;
 
-    vpImageIo::read(Iref, filenameRef) ;
+      vpImageIo::read(Iref, filenameRef) ;
 
-    vpCTRACE << "Load: " << filenameCur << std::endl;
+      vpCTRACE << "Load: " << filenameCur << std::endl;
 
-    vpImageIo::read(Icur, filenameCur) ;
-  }
-  catch(...)
-  {
-    // an exception is throwned if an exception from readPGM has been catched
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filenameRef << "or" << filenameCur <<std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
+      vpImageIo::read(Icur, filenameCur) ;
+    }
+    catch(...)
+    {
+      // an exception is throwned if an exception from readPGM has been catched
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filenameRef << "or" << filenameCur <<std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
+      exit(-1);
+    }
 
-  // We open a window using either X11, GTK or GDI.
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display[2];
+    vpDisplayX display[2];
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display[2];
+    vpDisplayGTK display[2];
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display[2];
+    vpDisplayGDI display[2];
 #endif
 
-  if (opt_display) {
-    try{
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display[0].init(Iref, 100, 100, "Reference image") ;
       // Display the image
@@ -278,99 +282,97 @@ main(int argc, const char ** argv)
       //Flush the display
       vpDisplay::flush(Iref) ;
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
 
-  vpKeyPointSurf surf;
-  unsigned int nbrRef;
+    vpKeyPointSurf surf;
+    unsigned int nbrRef;
 
-  if (opt_click_allowed && opt_display)
-  {
-    std::cout << "Select a part of the image where the reference points will be computed. This part is a rectangle." << std::endl;
-    std::cout << "Click first on the top left corner and then on the bottom right corner." << std::endl;
-    vpImagePoint corners[2];
-    for (int i=0 ; i < 2 ; i++)
+    if (opt_click_allowed && opt_display)
     {
-      vpDisplay::getClick(Iref, corners[i]);
+      std::cout << "Select a part of the image where the reference points will be computed. This part is a rectangle." << std::endl;
+      std::cout << "Click first on the top left corner and then on the bottom right corner." << std::endl;
+      vpImagePoint corners[2];
+      for (int i=0 ; i < 2 ; i++)
+      {
+        vpDisplay::getClick(Iref, corners[i]);
+      }
+
+      vpDisplay::displayRectangle(Iref, corners[0], corners[1], vpColor::red);
+      vpDisplay::flush(Iref);
+      unsigned int height, width;
+      height = (unsigned int)(corners[1].get_i() - corners[0].get_i());
+      width = (unsigned int)(corners[1].get_j() - corners[0].get_j());
+
+      //Computes the reference points
+      nbrRef = surf.buildReference(Iref, corners[0], height, width);
     }
 
-    vpDisplay::displayRectangle(Iref, corners[0], corners[1], vpColor::red);
-    vpDisplay::flush(Iref);
-    unsigned int height, width;
-    height = (unsigned int)(corners[1].get_i() - corners[0].get_i());
-    width = (unsigned int)(corners[1].get_j() - corners[0].get_j());
-
-    //Computes the reference points
-    nbrRef = surf.buildReference(Iref, corners[0], height, width);
-  }
-
-  else
-  {
-    nbrRef = surf.buildReference(Iref);
-  }
+    else
+    {
+      nbrRef = surf.buildReference(Iref);
+    }
 
-  if(nbrRef < 1)
-  {
-    vpTRACE("No reference point");
-    exit(-1);
-  }
+    if(nbrRef < 1)
+    {
+      vpTRACE("No reference point");
+      exit(-1);
+    }
 
 
-  unsigned int nbrPair;
-  if (opt_display) {
-    display[1].init(Icur, (int)(100+Iref.getWidth()), 100, "Current image") ;
-    // display variable.
-    vpDisplay::display(Icur) ;
-    //Flush the display
-    vpDisplay::flush(Icur) ;
-  }
+    unsigned int nbrPair;
+    if (opt_display) {
+      display[1].init(Icur, (int)(100+Iref.getWidth()), 100, "Current image") ;
+      // display variable.
+      vpDisplay::display(Icur) ;
+      //Flush the display
+      vpDisplay::flush(Icur) ;
+    }
 
-  if (opt_click_allowed && opt_display)
-  {
-    std::cout << "Select a part of the current image where the reference will be search. This part is a rectangle." << std::endl;
-    std::cout << "Click first on the top left corner and then on the bottom right corner." << std::endl;
-    vpImagePoint corners[2];
-    for (int i=0 ; i < 2 ; i++)
+    if (opt_click_allowed && opt_display)
     {
-      vpDisplay::getClick(Icur, corners[i]);
+      std::cout << "Select a part of the current image where the reference will be search. This part is a rectangle." << std::endl;
+      std::cout << "Click first on the top left corner and then on the bottom right corner." << std::endl;
+      vpImagePoint corners[2];
+      for (int i=0 ; i < 2 ; i++)
+      {
+        vpDisplay::getClick(Icur, corners[i]);
+      }
+      vpDisplay::displayRectangle(Icur, corners[0], corners[1], vpColor::green);
+      vpDisplay::flush(Icur);
+      unsigned int height, width;
+      height = (unsigned int)(corners[1].get_i() - corners[0].get_i());
+      width = (unsigned int)(corners[1].get_j() - corners[0].get_j());
+
+      //Computes the reference points
+      nbrPair = surf.matchPoint(Icur, corners[0], height, width);
     }
-    vpDisplay::displayRectangle(Icur, corners[0], corners[1], vpColor::green);
-    vpDisplay::flush(Icur);
-    unsigned int height, width;
-    height = (unsigned int)(corners[1].get_i() - corners[0].get_i());
-    width = (unsigned int)(corners[1].get_j() - corners[0].get_j());
-
-    //Computes the reference points
-    nbrPair = surf.matchPoint(Icur, corners[0], height, width);
-  }
 
-  else
-  {
-    nbrPair = surf.matchPoint(Icur);
-  }
+    else
+    {
+      nbrPair = surf.matchPoint(Icur);
+    }
 
-  if(nbrPair < 1)
-  {
-    vpTRACE("No point matched");
-  }
+    if(nbrPair < 1)
+    {
+      vpTRACE("No point matched");
+    }
 
-  if (opt_display)
-  {
-    surf.display(Iref, Icur, 7);
-    vpDisplay::flush(Iref) ;
-    vpDisplay::flush(Icur) ;
-    if (opt_click_allowed)
+    if (opt_display)
     {
-      std::cout << "A click on the reference image to exit..." << std::endl;
-      vpDisplay::getClick(Iref);
+      surf.display(Iref, Icur, 7);
+      vpDisplay::flush(Iref) ;
+      vpDisplay::flush(Icur) ;
+      if (opt_click_allowed)
+      {
+        std::cout << "A click on the reference image to exit..." << std::endl;
+        vpDisplay::getClick(Iref);
+      }
     }
+    return (0);
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return (1);
   }
-
-  return (0);
 }
 #else
 int
diff --git a/test/math/CMakeLists.txt b/test/math/CMakeLists.txt
index 506d8e6b..ebd2ddd1 100644
--- a/test/math/CMakeLists.txt
+++ b/test/math/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/math/testColvector.cpp b/test/math/testColvector.cpp
index 972acefa..64ccecfc 100644
--- a/test/math/testColvector.cpp
+++ b/test/math/testColvector.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testColvector.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testColvector.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -55,6 +55,8 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
 
 /*!
 
@@ -86,15 +88,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -103,7 +105,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -114,24 +116,30 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
-
-  vpColVector V(4) ;
-  V = 1.0;
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  vpTRACE("------------------------");
-  vpTRACE("call std::cout << V;");
-  std::cout << V << std::endl;
+    vpColVector V(4) ;
+    V = 1.0;
 
-  vpTRACE("------------------------");
-  vpTRACE("call V.normalize();");
-  V.normalize();
+    vpTRACE("------------------------");
+    vpTRACE("call std::cout << V;");
+    std::cout << V << std::endl;
 
-  vpTRACE("------------------------");
-  vpTRACE("call std::cout << V;");
-  std::cout << V << std::endl;
+    vpTRACE("------------------------");
+    vpTRACE("call V.normalize();");
+    V.normalize();
 
+    vpTRACE("------------------------");
+    vpTRACE("call std::cout << V;");
+    std::cout << V << std::endl;
+    return (0);
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return (1);
+  }
 }
diff --git a/test/math/testKalmanAcceleration.cpp b/test/math/testKalmanAcceleration.cpp
index 02afce19..e3ed84c0 100644
--- a/test/math/testKalmanAcceleration.cpp
+++ b/test/math/testKalmanAcceleration.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testKalmanAcceleration.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testKalmanAcceleration.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -53,64 +53,70 @@
 int
 main()
 {
-  unsigned int nsignal = 1; // Number of signal to filter
-  unsigned int niter = 100;
+  try {
+    unsigned int nsignal = 1; // Number of signal to filter
+    unsigned int niter = 100;
 
-  std::string filename = "/tmp/log.dat";
-  std::ofstream flog(filename.c_str());
+    std::string filename = "/tmp/log.dat";
+    std::ofstream flog(filename.c_str());
 
-  vpLinearKalmanFilterInstantiation kalman;
+    vpLinearKalmanFilterInstantiation kalman;
 
-  vpLinearKalmanFilterInstantiation::vpStateModel model;
-  model = vpLinearKalmanFilterInstantiation::stateConstAccWithColoredNoise_MeasureVel;
-  kalman.setStateModel(model);
+    vpLinearKalmanFilterInstantiation::vpStateModel model;
+    model = vpLinearKalmanFilterInstantiation::stateConstAccWithColoredNoise_MeasureVel;
+    kalman.setStateModel(model);
 
-  unsigned int size_state_vector = kalman.getStateSize()*nsignal;
-  unsigned int size_measure_vector = kalman.getMeasureSize()*nsignal;
+    unsigned int size_state_vector = kalman.getStateSize()*nsignal;
+    unsigned int size_measure_vector = kalman.getMeasureSize()*nsignal;
 
-  vpColVector sigma_measure(size_measure_vector);
-  for (unsigned int signal=0; signal < nsignal; signal ++) 
-    sigma_measure = 0.0001;
-  vpColVector sigma_state(size_state_vector);
-  for (unsigned int signal=0; signal < nsignal; signal ++) { 
-    sigma_state[3*signal] = 0.; // not used
-    sigma_state[3*signal+1] = 0.000001;
-    sigma_state[3*signal+2] = 0.000001;
-  }
-  
-  vpColVector velocity_measure(size_measure_vector);
+    vpColVector sigma_measure(size_measure_vector);
+    for (unsigned int signal=0; signal < nsignal; signal ++)
+      sigma_measure = 0.0001;
+    vpColVector sigma_state(size_state_vector);
+    for (unsigned int signal=0; signal < nsignal; signal ++) {
+      sigma_state[3*signal] = 0.; // not used
+      sigma_state[3*signal+1] = 0.000001;
+      sigma_state[3*signal+2] = 0.000001;
+    }
 
-  double rho = 0.9; // correlation
-  double dt = 0.2; // sampling period
+    vpColVector velocity_measure(size_measure_vector);
 
-  for (unsigned int signal=0; signal < nsignal; signal ++) 
-    velocity_measure[signal] = 3+2*signal;
+    double rho = 0.9; // correlation
+    double dt = 0.2; // sampling period
 
-  kalman.verbose(false);
-  kalman.initFilter(nsignal, sigma_state, sigma_measure, rho, dt);
+    for (unsigned int signal=0; signal < nsignal; signal ++)
+      velocity_measure[signal] = 3+2*signal;
 
+    kalman.verbose(false);
+    kalman.initFilter(nsignal, sigma_state, sigma_measure, rho, dt);
 
-  for (unsigned int iter=0; iter <= niter; iter++) {
-    std::cout << "-------- iter " << iter << " ------------" << std::endl;
-    for (unsigned int signal=0; signal < nsignal; signal ++) {
-      velocity_measure[signal] = 3+2*signal 
-          + 0.3*sin(vpMath::rad(360./niter*iter));
-    }
-    std::cout << "measure : " << velocity_measure.t() << std::endl;
 
-    flog << velocity_measure.t();
+    for (unsigned int iter=0; iter <= niter; iter++) {
+      std::cout << "-------- iter " << iter << " ------------" << std::endl;
+      for (unsigned int signal=0; signal < nsignal; signal ++) {
+        velocity_measure[signal] = 3+2*signal
+            + 0.3*sin(vpMath::rad(360./niter*iter));
+      }
+      std::cout << "measure : " << velocity_measure.t() << std::endl;
 
-    //    kalman.prediction();
-    kalman.filter(velocity_measure);
-    flog << kalman.Xest.t();
-    flog << kalman.Xpre.t();
+      flog << velocity_measure.t();
 
-    std::cout << "Xest: " << kalman.Xest.t() << std::endl;
-    std::cout << "Xpre: " << kalman.Xpre.t() << std::endl;
+      //    kalman.prediction();
+      kalman.filter(velocity_measure);
+      flog << kalman.Xest.t();
+      flog << kalman.Xpre.t();
 
-    flog <<  std::endl;
-  }
+      std::cout << "Xest: " << kalman.Xest.t() << std::endl;
+      std::cout << "Xpre: " << kalman.Xpre.t() << std::endl;
+
+      flog <<  std::endl;
+    }
 
-  flog.close();
-  return 0;
+    flog.close();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 0;
+  }
 }
diff --git a/test/math/testKalmanVelocity.cpp b/test/math/testKalmanVelocity.cpp
index e5f3f770..25f5b7c0 100644
--- a/test/math/testKalmanVelocity.cpp
+++ b/test/math/testKalmanVelocity.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testKalmanVelocity.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testKalmanVelocity.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,79 +58,85 @@ typedef enum {
 int
 main()
 {
-  unsigned int nsignal = 2; // Number of signal to filter
-  unsigned int niter = 200;
-  unsigned int size_state_vector = 2*nsignal;
-  unsigned int size_measure_vector = 1*nsignal;
-  //vpMeasureType measure_t = Velocity;
-  vpMeasureType measure_t = Position;
-
-  std::string filename = "/tmp/log.dat";
-  std::ofstream flog(filename.c_str());
-
-  vpLinearKalmanFilterInstantiation kalman;
+  try {
+    unsigned int nsignal = 2; // Number of signal to filter
+    unsigned int niter = 200;
+    unsigned int size_state_vector = 2*nsignal;
+    unsigned int size_measure_vector = 1*nsignal;
+    //vpMeasureType measure_t = Velocity;
+    vpMeasureType measure_t = Position;
+
+    std::string filename = "/tmp/log.dat";
+    std::ofstream flog(filename.c_str());
+
+    vpLinearKalmanFilterInstantiation kalman;
+
+    vpColVector sigma_measure(size_measure_vector);
+    for (unsigned int signal=0; signal < nsignal; signal ++)
+      sigma_measure = 0.000001;
+    vpColVector sigma_state(size_state_vector);
+
+    switch (measure_t) {
+    case Velocity:
+      for (unsigned int signal=0; signal < nsignal; signal ++) {
+        sigma_state[2*signal] = 0.; // not used
+        sigma_state[2*signal+1] = 0.000001;
+      }
+      break;
+    case Position:
+      for (unsigned int signal=0; signal < nsignal; signal ++) {
+        sigma_state[2*signal] = 0.000001;
+        sigma_state[2*signal+1] = 0; // not used
+      }
+      break;
+    }
 
-  vpColVector sigma_measure(size_measure_vector);
-  for (unsigned int signal=0; signal < nsignal; signal ++) 
-    sigma_measure = 0.000001;
-  vpColVector sigma_state(size_state_vector);
+    vpColVector measure(size_measure_vector);
 
-  switch (measure_t) {
-  case Velocity:
     for (unsigned int signal=0; signal < nsignal; signal ++) {
-      sigma_state[2*signal] = 0.; // not used
-      sigma_state[2*signal+1] = 0.000001;
+      measure[signal] = 3+2*signal;
     }
-    break;
-  case Position:
-    for (unsigned int signal=0; signal < nsignal; signal ++) {
-      sigma_state[2*signal] = 0.000001; 
-      sigma_state[2*signal+1] = 0; // not used
-    }
-    break;
-  }
-  
-  vpColVector measure(size_measure_vector);
 
-  for (unsigned int signal=0; signal < nsignal; signal ++) {
-    measure[signal] = 3+2*signal;
-  }
+    kalman.verbose(true);
+
+    vpLinearKalmanFilterInstantiation::vpStateModel model;
+    double dt = 0.04; // Sampling period
+    double rho = 0.5;
+    double dummy = 0; // non used parameter
+    switch (measure_t) {
+    case Velocity:
+      model = vpLinearKalmanFilterInstantiation::stateConstVelWithColoredNoise_MeasureVel;
+      kalman.setStateModel(model);
+      kalman.initFilter(nsignal, sigma_state, sigma_measure, rho, dummy);
+      break;
+    case Position:
+      model = vpLinearKalmanFilterInstantiation::stateConstVel_MeasurePos;
+      kalman.setStateModel(model);
+      kalman.initFilter(nsignal, sigma_state, sigma_measure, dummy, dt);
+      break;
+    }
 
-  kalman.verbose(true);
-
-  vpLinearKalmanFilterInstantiation::vpStateModel model;
-  double dt = 0.04; // Sampling period
-  double rho = 0.5;
-  double dummy = 0; // non used parameter
-  switch (measure_t) {
-  case Velocity:
-    model = vpLinearKalmanFilterInstantiation::stateConstVelWithColoredNoise_MeasureVel;
-    kalman.setStateModel(model);
-    kalman.initFilter(nsignal, sigma_state, sigma_measure, rho, dummy);
-    break;
-  case Position:
-    model = vpLinearKalmanFilterInstantiation::stateConstVel_MeasurePos;
-    kalman.setStateModel(model);
-    kalman.initFilter(nsignal, sigma_state, sigma_measure, dummy, dt);
-    break;
-  }
+    for (unsigned int iter=0; iter <= niter; iter++) {
+      std::cout << "-------- iter " << iter << " ------------" << std::endl;
+      for (unsigned int signal=0; signal < nsignal; signal ++) {
+        measure[signal] = 3+2*signal + 0.3*sin(vpMath::rad(360./niter*iter));
+      }
+      std::cout << "measure : " << measure.t() << std::endl;
 
-  for (unsigned int iter=0; iter <= niter; iter++) {
-    std::cout << "-------- iter " << iter << " ------------" << std::endl;
-    for (unsigned int signal=0; signal < nsignal; signal ++) {
-      measure[signal] = 3+2*signal + 0.3*sin(vpMath::rad(360./niter*iter));
-    }
-    std::cout << "measure : " << measure.t() << std::endl;
+      flog << measure.t();
 
-    flog << measure.t();
+      //    kalman.prediction();
+      kalman.filter(measure);
+      flog << kalman.Xest.t() << std::endl;
 
-    //    kalman.prediction();
-    kalman.filter(measure);
-    flog << kalman.Xest.t() << std::endl;
+      std::cout << "Xest: " << kalman.Xest.t() << std::endl;
+    }
 
-    std::cout << "Xest: " << kalman.Xest.t() << std::endl;
+    flog.close();
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-
-  flog.close();
-  return 0;
 }
diff --git a/test/math/testMatrix.cpp b/test/math/testMatrix.cpp
index e3c392af..619a2936 100644
--- a/test/math/testMatrix.cpp
+++ b/test/math/testMatrix.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testMatrix.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testMatrix.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -60,6 +60,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
   Print the program options.
@@ -90,15 +93,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -107,7 +110,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -118,137 +121,143 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
-
-  vpTRACE("------------------------");
-  vpTRACE("--- TEST PRETTY PRINT---");
-  vpTRACE("------------------------");
-  vpMatrix M ;
-  M.eye(4);
-
-  vpTRACE("call std::cout << M;");
-  std::cout << M << std::endl;
-
-  vpTRACE("call M.print (std::cout, 4);");
-  M.print (std::cout, 4);
-
-  vpTRACE("------------------------");
-  M.resize(3,3) ;
-  M.eye(3);
-  M[1][0]=1.235;
-  M[1][1]=12.345;
-  M[1][2]=.12345;
-  vpTRACE("call std::cout << M;");
-  std::cout << M;
-  vpTRACE("call M.print (std::cout, 6);");
-  M.print (std::cout, 6);
-
-  vpTRACE("------------------------");
-  M[0][0]=-1.235;
-  M[1][0]=-12.235;
-
-  vpTRACE("call std::cout << M;");
-  std::cout << M;
-
-  vpTRACE("call M.print (std::cout, 10);");
-  M.print (std::cout, 10);
-
-  vpTRACE("call M.print (std::cout, 2);");
-  M.print (std::cout, 2);
-
-  vpTRACE("------------------------");
-  M.resize(3,3) ;
-  M.eye(3);
-  M[0][2]=-0.0000000876;
-  vpTRACE("call std::cout << M;");
-  std::cout << M;
-
-  vpTRACE("call M.print (std::cout, 4);");
-  M.print (std::cout, 4);
-  vpTRACE("call M.print (std::cout, 10, \"M\");");
-  M.print (std::cout, 10, "M");
-  vpTRACE("call M.print (std::cout, 20, \"M\");");
-  M.print (std::cout, 20, "M");
-
-
-  vpTRACE("------------------------");
-  vpTRACE("--- TEST RESIZE --------");
-  vpTRACE("------------------------");
-  vpCTRACE  << "5x5" << std::endl;
-  M.resize(5,5,false);
-  vpCTRACE << std::endl<< M;
-  vpCTRACE  << "3x2" << std::endl;
-  M.resize(3,2,false);
-  vpCTRACE <<std::endl<< M;
-  vpCTRACE  << "2x2" << std::endl;
-  M.resize(2,2,false);
-  vpCTRACE << std::endl<<M;
-  vpTRACE("------------------------");
-
-
-  vpVelocityTwistMatrix vMe;
-  vpMatrix A(1,6),B;
-
-  A=1.0;
-  //vMe=1.0;
-  B=A*vMe;
-
-  vpTRACE("------------------------");
-  vpTRACE("--- TEST vpRowVector * vpColVector");
-  vpTRACE("------------------------");
-  vpRowVector r(3);
-  r[0] = 2;
-  r[1] = 3;
-  r[2] = 4;
-
-  vpColVector c(3);
-  c[0] = 1;
-  c[1] = 2;
-  c[2] = -1;
-
-  double rc = r * c;
-
-  r.print(std::cout, 2, "r");
-  c.print(std::cout, 2, "c");
-  std::cout << "r * c = " << rc << std::endl;
-
-  vpTRACE("------------------------");
-  vpTRACE("--- TEST vpRowVector * vpMatrix");
-  vpTRACE("------------------------");
-  M.resize(3,3) ;
-  M.eye(3);
-
-  M[1][0] = 1.5;
-  M[2][0] = 2.3;
-
-  vpRowVector rM = r * M;
-
-  r.print(std::cout, 2, "r");
-  M.print(std::cout, 10, "M");
-  std::cout << "r * M = " << rM << std::endl;
-
-  vpTRACE("------------------------");
-  vpTRACE("--- TEST vpGEMM ");
-  vpTRACE("------------------------");
-  M.resize(3,3) ;
-  M.eye(3);
-  vpMatrix N(3, 3);
-  N[0][0] = 2;
-  N[1][0] = 1.2;
-  N[1][2] = 0.6;
-  N[2][2] = 0.25;
-
-  vpMatrix C(3, 3);
-  C.eye(3);
-  
-  vpMatrix D;
-  
-  //realise the operation D = 2 * M^T * N + 3 C 
-  vpGEMM(M, N, 2, C, 3, D, VP_GEMM_A_T);
-  std::cout << D << std::endl;
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
+    vpTRACE("------------------------");
+    vpTRACE("--- TEST PRETTY PRINT---");
+    vpTRACE("------------------------");
+    vpMatrix M ;
+    M.eye(4);
+
+    vpTRACE("call std::cout << M;");
+    std::cout << M << std::endl;
+
+    vpTRACE("call M.print (std::cout, 4);");
+    M.print (std::cout, 4);
+
+    vpTRACE("------------------------");
+    M.resize(3,3) ;
+    M.eye(3);
+    M[1][0]=1.235;
+    M[1][1]=12.345;
+    M[1][2]=.12345;
+    vpTRACE("call std::cout << M;");
+    std::cout << M;
+    vpTRACE("call M.print (std::cout, 6);");
+    M.print (std::cout, 6);
+
+    vpTRACE("------------------------");
+    M[0][0]=-1.235;
+    M[1][0]=-12.235;
+
+    vpTRACE("call std::cout << M;");
+    std::cout << M;
+
+    vpTRACE("call M.print (std::cout, 10);");
+    M.print (std::cout, 10);
+
+    vpTRACE("call M.print (std::cout, 2);");
+    M.print (std::cout, 2);
+
+    vpTRACE("------------------------");
+    M.resize(3,3) ;
+    M.eye(3);
+    M[0][2]=-0.0000000876;
+    vpTRACE("call std::cout << M;");
+    std::cout << M;
+
+    vpTRACE("call M.print (std::cout, 4);");
+    M.print (std::cout, 4);
+    vpTRACE("call M.print (std::cout, 10, \"M\");");
+    M.print (std::cout, 10, "M");
+    vpTRACE("call M.print (std::cout, 20, \"M\");");
+    M.print (std::cout, 20, "M");
+
+
+    vpTRACE("------------------------");
+    vpTRACE("--- TEST RESIZE --------");
+    vpTRACE("------------------------");
+    vpCTRACE  << "5x5" << std::endl;
+    M.resize(5,5,false);
+    vpCTRACE << std::endl<< M;
+    vpCTRACE  << "3x2" << std::endl;
+    M.resize(3,2,false);
+    vpCTRACE <<std::endl<< M;
+    vpCTRACE  << "2x2" << std::endl;
+    M.resize(2,2,false);
+    vpCTRACE << std::endl<<M;
+    vpTRACE("------------------------");
+
+
+    vpVelocityTwistMatrix vMe;
+    vpMatrix A(1,6),B;
+
+    A=1.0;
+    //vMe=1.0;
+    B=A*vMe;
+
+    vpTRACE("------------------------");
+    vpTRACE("--- TEST vpRowVector * vpColVector");
+    vpTRACE("------------------------");
+    vpRowVector r(3);
+    r[0] = 2;
+    r[1] = 3;
+    r[2] = 4;
+
+    vpColVector c(3);
+    c[0] = 1;
+    c[1] = 2;
+    c[2] = -1;
+
+    double rc = r * c;
+
+    r.print(std::cout, 2, "r");
+    c.print(std::cout, 2, "c");
+    std::cout << "r * c = " << rc << std::endl;
+
+    vpTRACE("------------------------");
+    vpTRACE("--- TEST vpRowVector * vpMatrix");
+    vpTRACE("------------------------");
+    M.resize(3,3) ;
+    M.eye(3);
+
+    M[1][0] = 1.5;
+    M[2][0] = 2.3;
+
+    vpRowVector rM = r * M;
+
+    r.print(std::cout, 2, "r");
+    M.print(std::cout, 10, "M");
+    std::cout << "r * M = " << rM << std::endl;
+
+    vpTRACE("------------------------");
+    vpTRACE("--- TEST vpGEMM ");
+    vpTRACE("------------------------");
+    M.resize(3,3) ;
+    M.eye(3);
+    vpMatrix N(3, 3);
+    N[0][0] = 2;
+    N[1][0] = 1.2;
+    N[1][2] = 0.6;
+    N[2][2] = 0.25;
+
+    vpMatrix C(3, 3);
+    C.eye(3);
+
+    vpMatrix D;
+
+    //realise the operation D = 2 * M^T * N + 3 C
+    vpGEMM(M, N, 2, C, 3, D, VP_GEMM_A_T);
+    std::cout << D << std::endl;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
diff --git a/test/math/testMatrixException.cpp b/test/math/testMatrixException.cpp
index fb81e5b2..d9b8b88d 100644
--- a/test/math/testMatrixException.cpp
+++ b/test/math/testMatrixException.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testMatrixException.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testMatrixException.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -58,6 +58,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
   Print the program options.
@@ -88,15 +91,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -105,7 +108,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -116,39 +119,42 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  vpMatrix M ;
-  vpMatrix M1(2,3) ;
-  vpMatrix M2(3,3) ;
-  vpMatrix M3(2,2) ;
+    vpMatrix M ;
+    vpMatrix M1(2,3) ;
+    vpMatrix M2(3,3) ;
+    vpMatrix M3(2,2) ;
 
-  vpTRACE("test matrix size in multiply") ;
+    vpTRACE("test matrix size in multiply") ;
 
-  try
-  {
-    M = M1*M3 ;
-  }
-  catch (vpMatrixException me)
-  {
-    vpCTRACE ;
-    std::cout << me << std::endl ;
-  }
+    try
+    {
+      M = M1*M3 ;
+    }
+    catch (vpMatrixException me)
+    {
+      std::cout << me << std::endl ;
+    }
 
 
-  vpTRACE("test matrix size in addition") ;
+    vpTRACE("test matrix size in addition") ;
 
-  try
-  {
-    M = M1+M3 ;
+    try
+    {
+      M = M1+M3 ;
+    }
+    catch (vpMatrixException me)
+    {
+      std::cout << me << std::endl ;
+    }
   }
-  catch (vpMatrixException me)
-  {
-    vpCTRACE ;
-    std::cout << me << std::endl ;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-
 }
diff --git a/test/math/testMatrixInverse.cpp b/test/math/testMatrixInverse.cpp
index 708025a9..60510835 100644
--- a/test/math/testMatrixInverse.cpp
+++ b/test/math/testMatrixInverse.cpp
@@ -3,7 +3,7 @@
  * $Id: testSvd.cpp 3857 2012-07-25 11:47:30Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -61,6 +61,14 @@
 // List of allowed command line options
 #define GETOPTARGS	"n:i:pf:r:c:vh"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv,
+                unsigned int& nb_matrices, unsigned int& nb_iterations,
+                bool& use_plot_file, std::string& plotfile,
+                unsigned int& nbrows, unsigned int& nbcols, bool& verbose);
+void writeTime(const char *name, double time);
+vpMatrix makeRandomMatrix(unsigned int nbrows, unsigned int nbcols);
+
 /*!
 
   Print the program options.
@@ -129,36 +137,36 @@ bool getOptions(int argc, const char **argv,
                 bool& use_plot_file, std::string& plotfile,
                 unsigned int& nbrows, unsigned int& nbcols, bool& verbose)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
     case 'n':
-      nb_matrices = (unsigned int)atoi(optarg);
+      nb_matrices = (unsigned int)atoi(optarg_);
       break;
     case 'i':
-      nb_iterations = (unsigned int)atoi(optarg);
+      nb_iterations = (unsigned int)atoi(optarg_);
       break;
     case 'f':
-      plotfile = optarg;
+      plotfile = optarg_;
       use_plot_file = true;
       break;
     case 'p':
       use_plot_file = true;
       break;
     case 'r':
-      nbrows = (unsigned int)atoi(optarg);
+      nbrows = (unsigned int)atoi(optarg_);
       break;
     case 'c':
-      nbcols = (unsigned int)atoi(optarg);
+      nbcols = (unsigned int)atoi(optarg_);
       break;
     case 'v':
       verbose = true;
       break;
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -167,20 +175,20 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
   return true;
 }
 
-void writeTime(const char *name, double time){
+void writeTime(const char *name, double time)
+{
   std::cout << name << " time=" << time << " ms." << std::endl;
 }
 
-
-
-vpMatrix makeRandomMatrix(unsigned int nbrows, unsigned int nbcols){
+vpMatrix makeRandomMatrix(unsigned int nbrows, unsigned int nbcols)
+{
   vpMatrix A;
   A.resize(nbrows,nbcols);
 
@@ -195,113 +203,121 @@ int
 main(int argc, const char ** argv)
 {
 #ifdef VISP_HAVE_LAPACK
-  unsigned int nb_matrices=1000;
-  unsigned int nb_iterations=10;
-  unsigned int nb_rows = 6;
-  unsigned int nb_cols = 6;
-  bool verbose = false;
-  std::string plotfile("plot.txt");
-  bool use_plot_file=false;
-  std::ofstream of;
-
-  double t, qr_time, lu_time,pi_time,chol_time;
-  // Read the command line options
-  if (getOptions(argc, argv, nb_matrices,nb_iterations,use_plot_file,plotfile,nb_rows,nb_cols,verbose) == false) {
-    exit (-1);
-  }
-
-  if(use_plot_file){
-    of.open(plotfile.c_str());
-  }
-
-  for(unsigned int iter=0;iter<nb_iterations;iter++){
-    std::vector<vpMatrix> benchQR;
-    std::vector<vpMatrix> benchLU;
-    std::vector<vpMatrix> benchCholesky;
-    std::vector<vpMatrix> benchPseudoInverse;
-    if(verbose)
-      std::cout << "********* generating matrices for iteration " << iter << "." << std::endl;
-    for(unsigned int i=0;i<nb_matrices;i++){
-      vpMatrix cur;
-      double det=0.;
-      //don't put singular matrices in the benchmark
-      for(cur=makeRandomMatrix(nb_rows,nb_cols);std::abs(det=cur.AtA().det())<.01;cur = makeRandomMatrix(nb_rows,nb_cols))
-        if(verbose){
-          std::cout << "Generated random matrix A*tA=" << std::endl << cur.AtA() << std::endl;
-          std::cout << "generated random matrix not invertibleL: det="<<det<< ". Retrying..." << std::endl;
-        }
-      benchCholesky.push_back(cur);
-      benchQR.push_back(cur);
-      benchLU.push_back(cur);
-      benchPseudoInverse.push_back(cur);
+  try {
+    unsigned int nb_matrices=1000;
+    unsigned int nb_iterations=10;
+    unsigned int nb_rows = 6;
+    unsigned int nb_cols = 6;
+    bool verbose = false;
+    std::string plotfile("plot.txt");
+    bool use_plot_file=false;
+    std::ofstream of;
+
+    double t, qr_time, lu_time,pi_time,chol_time;
+    // Read the command line options
+    if (getOptions(argc, argv, nb_matrices,nb_iterations,use_plot_file,plotfile,nb_rows,nb_cols,verbose) == false) {
+      exit (-1);
     }
 
-    if(verbose)
-      std::cout << "\t Inverting " << benchCholesky[0].AtA().getRows() << "x" << benchCholesky[0].AtA().getCols() << " matrix using cholesky decomposition." << std::endl;
-    t = vpTime::measureTimeMs() ;
-    for(unsigned int i=0;i<nb_matrices;i++){
-      benchCholesky[i]=benchCholesky[i].AtA().inverseByCholesky()*benchCholesky[i].transpose();
-    }
-    chol_time = vpTime::measureTimeMs() - t ;
-
-    if(verbose)
-      std::cout << "\t Inverting " << benchLU[0].AtA().getRows() << "x" << benchLU[0].AtA().getCols() << " matrix using LU decomposition." << std::endl;
-    t = vpTime::measureTimeMs() ;
-    for(unsigned int i=0;i<nb_matrices;i++)
-      benchLU[i] = benchLU[i].AtA().inverseByLU()*benchLU[i].transpose();
-    lu_time = vpTime::measureTimeMs() -t ;
-
-    if(verbose)
-      std::cout << "\t Inverting " << benchQR[0].AtA().getRows() << "x" << benchQR[0].AtA().getCols() << " matrix using QR decomposition." << std::endl;
-    t = vpTime::measureTimeMs() ;
-    for(unsigned int i=0;i<nb_matrices;i++){
-      benchQR[i]=benchQR[i].AtA().inverseByQR()*benchQR[i].transpose();
-    }
-    qr_time = vpTime::measureTimeMs() - t ;
-
-    if(verbose)
-      std::cout << "\t Inverting " << benchPseudoInverse[0].AtA().getRows() << "x" << benchPseudoInverse[0].AtA().getCols() << " matrix while computing pseudo-inverse." << std::endl;
-    t = vpTime::measureTimeMs() ;
-    for(unsigned int i=0;i<nb_matrices;i++){
-      benchPseudoInverse[i]=benchPseudoInverse[i].pseudoInverse();
-    }
-    pi_time = vpTime::measureTimeMs() - t ;
-
-    double avg_err_lu_qr=0.;
-    double avg_err_lu_pi=0.;
-    double avg_err_lu_chol=0.;
-    double avg_err_qr_pi=0.;
-    double avg_err_qr_chol=0.;
-    double avg_err_pi_chol=0.;
-
-    for(unsigned int i=0;i<nb_matrices;i++){
-      avg_err_lu_qr+= (benchQR[i]-benchLU[i]).euclideanNorm();
-      avg_err_lu_pi+= (benchPseudoInverse[i]-benchLU[i]).euclideanNorm();
-      avg_err_qr_pi+= (benchPseudoInverse[i]-benchQR[i]).euclideanNorm();
-      avg_err_qr_chol+= (benchCholesky[i]-benchQR[i]).euclideanNorm();
-      avg_err_lu_chol+= (benchCholesky[i]-benchLU[i]).euclideanNorm();
-      avg_err_pi_chol+= (benchCholesky[i]-benchPseudoInverse[i]).euclideanNorm();
-    }
-
-    avg_err_lu_qr/=nb_matrices;
-    avg_err_lu_pi/=nb_matrices;
-    avg_err_qr_pi/=nb_matrices;
-
     if(use_plot_file){
-      of << iter << "\t" << lu_time << "\t" << qr_time << "\t" << pi_time << "\t" << chol_time << "\t" << avg_err_lu_qr << "\t" << avg_err_qr_pi << "\t" << avg_err_lu_pi << "\t" << avg_err_qr_chol << "\t" << avg_err_lu_chol << "\t" <<  avg_err_pi_chol << std::endl;
+      of.open(plotfile.c_str());
     }
-    if(verbose || !use_plot_file){
-      writeTime("LU",lu_time);
-      writeTime("QR",qr_time);
-      writeTime("Pseudo-inverse",pi_time);
-      writeTime("Cholesky",chol_time);
+
+    for(unsigned int iter=0;iter<nb_iterations;iter++){
+      std::vector<vpMatrix> benchQR;
+      std::vector<vpMatrix> benchLU;
+      std::vector<vpMatrix> benchCholesky;
+      std::vector<vpMatrix> benchPseudoInverse;
+      if(verbose)
+        std::cout << "********* generating matrices for iteration " << iter << "." << std::endl;
+      for(unsigned int i=0;i<nb_matrices;i++){
+        vpMatrix cur;
+        double det=0.;
+        //don't put singular matrices in the benchmark
+        for(cur=makeRandomMatrix(nb_rows,nb_cols);std::abs(det=cur.AtA().det())<.01;cur = makeRandomMatrix(nb_rows,nb_cols))
+          if(verbose){
+            std::cout << "Generated random matrix A*tA=" << std::endl << cur.AtA() << std::endl;
+            std::cout << "generated random matrix not invertibleL: det="<<det<< ". Retrying..." << std::endl;
+          }
+        benchCholesky.push_back(cur);
+        benchQR.push_back(cur);
+        benchLU.push_back(cur);
+        benchPseudoInverse.push_back(cur);
+      }
+
+      if(verbose)
+        std::cout << "\t Inverting " << benchCholesky[0].AtA().getRows() << "x" << benchCholesky[0].AtA().getCols() << " matrix using cholesky decomposition." << std::endl;
+      t = vpTime::measureTimeMs() ;
+      for(unsigned int i=0;i<nb_matrices;i++){
+        benchCholesky[i]=benchCholesky[i].AtA().inverseByCholesky()*benchCholesky[i].transpose();
+      }
+      chol_time = vpTime::measureTimeMs() - t ;
+
+      if(verbose)
+        std::cout << "\t Inverting " << benchLU[0].AtA().getRows() << "x" << benchLU[0].AtA().getCols() << " matrix using LU decomposition." << std::endl;
+      t = vpTime::measureTimeMs() ;
+      for(unsigned int i=0;i<nb_matrices;i++)
+        benchLU[i] = benchLU[i].AtA().inverseByLU()*benchLU[i].transpose();
+      lu_time = vpTime::measureTimeMs() -t ;
+
+      if(verbose)
+        std::cout << "\t Inverting " << benchQR[0].AtA().getRows() << "x" << benchQR[0].AtA().getCols() << " matrix using QR decomposition." << std::endl;
+      t = vpTime::measureTimeMs() ;
+      for(unsigned int i=0;i<nb_matrices;i++){
+        benchQR[i]=benchQR[i].AtA().inverseByQR()*benchQR[i].transpose();
+      }
+      qr_time = vpTime::measureTimeMs() - t ;
+
+      if(verbose)
+        std::cout << "\t Inverting " << benchPseudoInverse[0].AtA().getRows() << "x" << benchPseudoInverse[0].AtA().getCols() << " matrix while computing pseudo-inverse." << std::endl;
+      t = vpTime::measureTimeMs() ;
+      for(unsigned int i=0;i<nb_matrices;i++){
+        benchPseudoInverse[i]=benchPseudoInverse[i].pseudoInverse();
+      }
+      pi_time = vpTime::measureTimeMs() - t ;
+
+      double avg_err_lu_qr=0.;
+      double avg_err_lu_pi=0.;
+      double avg_err_lu_chol=0.;
+      double avg_err_qr_pi=0.;
+      double avg_err_qr_chol=0.;
+      double avg_err_pi_chol=0.;
+
+      for(unsigned int i=0;i<nb_matrices;i++){
+        avg_err_lu_qr+= (benchQR[i]-benchLU[i]).euclideanNorm();
+        avg_err_lu_pi+= (benchPseudoInverse[i]-benchLU[i]).euclideanNorm();
+        avg_err_qr_pi+= (benchPseudoInverse[i]-benchQR[i]).euclideanNorm();
+        avg_err_qr_chol+= (benchCholesky[i]-benchQR[i]).euclideanNorm();
+        avg_err_lu_chol+= (benchCholesky[i]-benchLU[i]).euclideanNorm();
+        avg_err_pi_chol+= (benchCholesky[i]-benchPseudoInverse[i]).euclideanNorm();
+      }
+
+      avg_err_lu_qr/=nb_matrices;
+      avg_err_lu_pi/=nb_matrices;
+      avg_err_qr_pi/=nb_matrices;
+
+      if(use_plot_file){
+        of << iter << "\t" << lu_time << "\t" << qr_time << "\t" << pi_time << "\t" << chol_time << "\t" << avg_err_lu_qr << "\t" << avg_err_qr_pi << "\t" << avg_err_lu_pi << "\t" << avg_err_qr_chol << "\t" << avg_err_lu_chol << "\t" <<  avg_err_pi_chol << std::endl;
+      }
+      if(verbose || !use_plot_file){
+        writeTime("LU",lu_time);
+        writeTime("QR",qr_time);
+        writeTime("Pseudo-inverse",pi_time);
+        writeTime("Cholesky",chol_time);
+      }
     }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
+
 #else
   (void)argc;
   (void)argv;
   std::cout << "You don't have lapack installed" << std::endl;
-#endif
   return 0;
+#endif
 }
 
diff --git a/test/math/testRobust.cpp b/test/math/testRobust.cpp
index 6c3370f9..5bf3cd4d 100644
--- a/test/math/testRobust.cpp
+++ b/test/math/testRobust.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testRobust.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testRobust.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -57,6 +57,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"ho:"
 
+void usage(const char *name, const char *badparam, std::string ofilename);
+bool getOptions(int argc, const char **argv, std::string &ofilename);
+
 /*!
 
   Print the program options.
@@ -107,16 +110,16 @@ OPTIONS:                                              Default\n\
 */
 bool getOptions(int argc, const char **argv, std::string &ofilename)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'o': ofilename = optarg; break;
+    case 'o': ofilename = optarg_; break;
     case 'h': usage(argv[0], NULL, ofilename); return false; break;
 
     default:
-      usage(argv[0], optarg, ofilename);
+      usage(argv[0], optarg_, ofilename);
       return false; break;
     }
   }
@@ -125,7 +128,7 @@ bool getOptions(int argc, const char **argv, std::string &ofilename)
     // standalone param or error
     usage(argv[0], NULL, ofilename);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -137,74 +140,81 @@ bool getOptions(int argc, const char **argv, std::string &ofilename)
 int
 main(int argc, const char ** argv)
 {
-  std::string ofilename;
-  std::string username;
+  try {
+    std::string ofilename;
+    std::string username;
 
-  // Set the default output filename
-#ifdef WIN32
-  ofilename = "C:/temp";
+    // Set the default output filename
+#if defined(_WIN32)
+    ofilename = "C:/temp";
 #else
-  ofilename = "/tmp";
+    ofilename = "/tmp";
 #endif
 
-  // Get the user login name
-  vpIoTools::getUserName(username);
+    // Get the user login name
+    vpIoTools::getUserName(username);
+
+    // Append to the output filename string, the login name of the user
+    ofilename = ofilename + "/" + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(ofilename) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(ofilename);
+      }
+      catch (...) {
+        usage(argv[0], NULL, ofilename);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << ofilename << std::endl;
+        std::cerr << "  Check your -o " << ofilename << " option " << std::endl;
+        exit(-1);
+      }
+    }
 
-  // Append to the output filename string, the login name of the user
-  ofilename = ofilename + "/" + username;
+    // Append to the output filename string, the name of the file
+    ofilename = ofilename + "/w.dat";
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(ofilename) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(ofilename);
+    // Read the command line options
+    if (getOptions(argc, argv, ofilename) == false) {
+      exit (-1);
     }
-    catch (...) {
+
+    double sig = 1 ;
+
+    double w ;
+    std::ofstream f;
+    std::cout << "Create file: " << ofilename << std::endl;
+    f.open(ofilename.c_str());
+    if (f.fail()) {
       usage(argv[0], NULL, ofilename);
       std::cerr << std::endl
                 << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << ofilename << std::endl;
+      std::cerr << "  Cannot create the file: " << ofilename << std::endl;
       std::cerr << "  Check your -o " << ofilename << " option " << std::endl;
       exit(-1);
-    }
-  }
 
-  // Append to the output filename string, the name of the file
-  ofilename = ofilename + "/w.dat";
-
-  // Read the command line options
-  if (getOptions(argc, argv, ofilename) == false) {
-    exit (-1);
-  }
-
-  double sig = 1 ;
-
-  double w ;
-  std::ofstream f;
-  std::cout << "Create file: " << ofilename << std::endl;
-  f.open(ofilename.c_str());
-  if (f == NULL) {
-    usage(argv[0], NULL, ofilename);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot create the file: " << ofilename << std::endl;
-    std::cerr << "  Check your -o " << ofilename << " option " << std::endl;
-    exit(-1);
-
-  }
-  double x = -10 ;
-  while (x<10)
-  {
-    if (fabs(x/sig)<=(4.6851))
-    {
-      w = vpMath::sqr(1-vpMath::sqr(x/(sig*4.6851)));
     }
-    else
+    double x = -10 ;
+    while (x<10)
     {
-      w = 0;
+      if (fabs(x/sig)<=(4.6851))
+      {
+        w = vpMath::sqr(1-vpMath::sqr(x/(sig*4.6851)));
+      }
+      else
+      {
+        w = 0;
+      }
+      f << x <<"  "<<w <<std::endl ;
+      x+= 0.01 ;
     }
-    f << x <<"  "<<w <<std::endl ;
-    x+= 0.01 ;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 
diff --git a/test/math/testRotation.cpp b/test/math/testRotation.cpp
index 9dec934f..d87369fd 100644
--- a/test/math/testRotation.cpp
+++ b/test/math/testRotation.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testRotation.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testRotation.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -59,6 +59,9 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+
 /*!
 
   Print the program options.
@@ -89,15 +92,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -106,7 +109,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -117,90 +120,97 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
-  vpRotationMatrix R;
-  for(int i=-10;i<10;i++){
-    for(int j=-10;j<10;j++){
-      vpThetaUVector tu(vpMath::rad(90+i), vpMath::rad(170+j), vpMath::rad(45)) ;
-      tu.buildFrom(vpRotationMatrix(tu)); //put some coherence into rotation convention
-
-      std::cout << "Initialization " <<std::endl ;
-		  
-      double theta;
-      vpColVector u;
-      tu.extract(theta, u);
-		  
-      std::cout << "theta=" << vpMath::deg(theta) << std::endl ;
-      std::cout << "u=" << u << std::endl ;
-
-      std::cout << "From vpThetaUVector to vpRotationMatrix " << std::endl ;
-      R.buildFrom(tu)  ;
-		  
-      std::cout << "Matrix R" ;
-      if (R.isARotationMatrix()==1) std::cout <<" is a rotation matrix " << std::endl ;
-      else std::cout <<" is not a rotation matrix " << std::endl ;
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
+    vpRotationMatrix R;
+    for(int i=-10;i<10;i++){
+      for(int j=-10;j<10;j++){
+        vpThetaUVector tu(vpMath::rad(90+i), vpMath::rad(170+j), vpMath::rad(45)) ;
+        tu.buildFrom(vpRotationMatrix(tu)); //put some coherence into rotation convention
 
-      std::cout << R << std::endl ;
+        std::cout << "Initialization " <<std::endl ;
+
+        double theta;
+        vpColVector u;
+        tu.extract(theta, u);
+
+        std::cout << "theta=" << vpMath::deg(theta) << std::endl ;
+        std::cout << "u=" << u << std::endl ;
+
+        std::cout << "From vpThetaUVector to vpRotationMatrix " << std::endl ;
+        R.buildFrom(tu)  ;
+
+        std::cout << "Matrix R" ;
+        if (R.isARotationMatrix()==1) std::cout <<" is a rotation matrix " << std::endl ;
+        else std::cout <<" is not a rotation matrix " << std::endl ;
+
+        std::cout << R << std::endl ;
+
+        std::cout << "From vpRotationMatrix to vpQuaternionVector " << std::endl ;
+        vpQuaternionVector q(R);
+        std::cout << q <<std::endl ;
+
+        R.buildFrom(q);
+        std::cout << "From vpQuaternionVector to vpRotationMatrix  " << std::endl ;
+
+        std::cout << "From vpRotationMatrix to vpRxyzVector " << std::endl ;
+        vpRxyzVector RxyzBuildFromR(R) ;
+        std::cout <<  RxyzBuildFromR <<std::endl ;
 
-      std::cout << "From vpRotationMatrix to vpQuaternionVector " << std::endl ;
-      vpQuaternionVector q(R);
-      std::cout << q <<std::endl ;
-
-      R.buildFrom(q);
-      std::cout << "From vpQuaternionVector to vpRotationMatrix  " << std::endl ;
-		  
-      std::cout << "From vpRotationMatrix to vpRxyzVector " << std::endl ;
-      vpRxyzVector RxyzBuildFromR(R) ;
-      std::cout <<  RxyzBuildFromR <<std::endl ;
-		  
-		  
-      std::cout << "From vpRxyzVector to vpThetaUVector " << std::endl ;
-      std::cout << "  use From vpRxyzVector to vpRotationMatrix " << std::endl ;
-      std::cout << "  use From vpRotationMatrix to vpThetaUVector " << std::endl ;
-
-
-      vpThetaUVector tuBuildFromEu ;
-      tuBuildFromEu.buildFrom(R) ;
-
-      std::cout << std::endl ;
-      std::cout <<  "result : should equivalent to the first one " << std::endl ;
-		  
-		  
-      double theta2;
-      vpColVector u2;
-
-      tuBuildFromEu.extract(theta2, u2);
-      std::cout << "theta=" << vpMath::deg(theta2) << std::endl ;
-      std::cout << "u=" << u2 << std::endl ;
-
-      assert(vpMath::abs(theta2-theta)<std::numeric_limits<double>::epsilon()*1e10);
-      assert(vpMath::abs(u[0]-u2[0])<std::numeric_limits<double>::epsilon()*1e10);
-      assert(vpMath::abs(u[1]-u2[1])<std::numeric_limits<double>::epsilon()*1e10);
-      assert(vpMath::abs(u[2]-u2[2])<std::numeric_limits<double>::epsilon()*1e10);
+
+        std::cout << "From vpRxyzVector to vpThetaUVector " << std::endl ;
+        std::cout << "  use From vpRxyzVector to vpRotationMatrix " << std::endl ;
+        std::cout << "  use From vpRotationMatrix to vpThetaUVector " << std::endl ;
+
+
+        vpThetaUVector tuBuildFromEu ;
+        tuBuildFromEu.buildFrom(R) ;
+
+        std::cout << std::endl ;
+        std::cout <<  "result : should equivalent to the first one " << std::endl ;
+
+
+        double theta2;
+        vpColVector u2;
+
+        tuBuildFromEu.extract(theta2, u2);
+        std::cout << "theta=" << vpMath::deg(theta2) << std::endl ;
+        std::cout << "u=" << u2 << std::endl ;
+
+        assert(vpMath::abs(theta2-theta)<std::numeric_limits<double>::epsilon()*1e10);
+        assert(vpMath::abs(u[0]-u2[0])<std::numeric_limits<double>::epsilon()*1e10);
+        assert(vpMath::abs(u[1]-u2[1])<std::numeric_limits<double>::epsilon()*1e10);
+        assert(vpMath::abs(u[2]-u2[2])<std::numeric_limits<double>::epsilon()*1e10);
+      }
+      vpRzyzVector rzyz(vpMath::rad(180), vpMath::rad(120), vpMath::rad(45)) ;
+      std::cout << "Initialization vpRzyzVector " <<std::endl ;
+      std::cout << rzyz << std::endl ;
+      std::cout << "From vpRzyzVector to vpRotationMatrix  " << std::endl ;
+      R.buildFrom(rzyz) ;
+      std::cout << "From vpRotationMatrix to vpRzyzVector " << std::endl ;
+      vpRzyzVector rzyz_final ;
+      rzyz_final.buildFrom(R) ;
+      std::cout << rzyz_final << std::endl ;
+
+
+      vpRzyxVector rzyx(vpMath::rad(180), vpMath::rad(120), vpMath::rad(45)) ;
+      std::cout << "Initialization vpRzyxVector " <<std::endl ;
+      std::cout << rzyx << std::endl ;
+      std::cout << "From vpRzyxVector to vpRotationMatrix  " << std::endl ;
+      R.buildFrom(rzyx) ;
+      std::cout << R << std::endl ;
+      std::cout << "From vpRotationMatrix to vpRzyxVector " << std::endl ;
+      vpRzyxVector rzyx_final ;
+      rzyx_final.buildFrom(R) ;
+      std::cout << rzyx_final << std::endl ;
     }
-    vpRzyzVector rzyz(vpMath::rad(180), vpMath::rad(120), vpMath::rad(45)) ;
-    std::cout << "Initialization vpRzyzVector " <<std::endl ;
-    std::cout << rzyz << std::endl ;
-    std::cout << "From vpRzyzVector to vpRotationMatrix  " << std::endl ;
-    R.buildFrom(rzyz) ;
-    std::cout << "From vpRotationMatrix to vpRzyzVector " << std::endl ;
-    vpRzyzVector rzyz_final ;
-    rzyz_final.buildFrom(R) ;
-    std::cout << rzyz_final << std::endl ;
-
-
-    vpRzyxVector rzyx(vpMath::rad(180), vpMath::rad(120), vpMath::rad(45)) ;
-    std::cout << "Initialization vpRzyxVector " <<std::endl ;
-    std::cout << rzyx << std::endl ;
-    std::cout << "From vpRzyxVector to vpRotationMatrix  " << std::endl ;
-    R.buildFrom(rzyx) ;
-    std::cout << R << std::endl ;
-    std::cout << "From vpRotationMatrix to vpRzyxVector " << std::endl ;
-    vpRzyxVector rzyx_final ;
-    rzyx_final.buildFrom(R) ;
-    std::cout << rzyx_final << std::endl ;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
diff --git a/test/math/testSvd.cpp b/test/math/testSvd.cpp
index c37bc719..5963321e 100644
--- a/test/math/testSvd.cpp
+++ b/test/math/testSvd.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testSvd.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testSvd.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -60,6 +60,13 @@
 // List of allowed command line options
 #define GETOPTARGS	"h"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+bool testSvdOpenCvGSLCoherence(double epsilon);
+#ifdef VISP_HAVE_GSL
+bool testRandom(double epsilon);
+#endif
+
 /*!
 
   Print the program options.
@@ -90,15 +97,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -107,7 +114,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -116,7 +123,6 @@ bool getOptions(int argc, const char **argv)
 #define abs(x) ((x) < 0 ? - (x) : (x))
 #ifdef VISP_HAVE_GSL
 
-
 bool testRandom(double epsilon)
 {
   vpMatrix L0(6,6);
@@ -126,8 +132,6 @@ bool testRandom(double epsilon)
     for  (unsigned int j=0 ; j < L0.getCols() ; j++)
 	    L1[i][j] = L0[i][j] = (double)rand()/(double)RAND_MAX;
 
-	
-
   vpColVector W0(L0.getCols()) ;
   vpMatrix V0(L0.getCols(), L0.getCols()) ;
   vpColVector W1(L1.getCols()) ;
@@ -151,7 +155,8 @@ bool testRandom(double epsilon)
 
 #endif
 
-bool testSvdOpenCvGSLCoherence(double epsilon){
+bool testSvdOpenCvGSLCoherence(double epsilon)
+{
 #if (VISP_HAVE_OPENCV_VERSION >= 0x020101) && defined (VISP_HAVE_GSL) // Require opencv >= 2.1.1
   vpMatrix A;
   vpMatrix vA;
@@ -188,72 +193,78 @@ bool testSvdOpenCvGSLCoherence(double epsilon){
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  unsigned int i,j ;
-  vpMatrix L(60000,6), Ls ;
-  for (i=0 ; i < L.getRows() ; i++)
-    for  (j=0 ; j < L.getCols() ; j++)
-      L[i][j] = 2*i+j + cos((double)(i+j))+((double)(i)) ;
-  //  std::cout << L << std::endl ;
-  Ls = L ;
-  std::cout << "--------------------------------------"<<std::endl ;
+    vpMatrix L(60000,6), Ls ;
+    for (unsigned int i=0 ; i < L.getRows() ; i++)
+      for  (unsigned int j=0 ; j < L.getCols() ; j++)
+        L[i][j] = 2*i+j + cos((double)(i+j))+((double)(i)) ;
+    //  std::cout << L << std::endl ;
+    Ls = L ;
+    std::cout << "--------------------------------------"<<std::endl ;
 
-  vpColVector W(L.getCols()) ;
-  vpMatrix V(L.getCols(), L.getCols()) ;
+    vpColVector W(L.getCols()) ;
+    vpMatrix V(L.getCols(), L.getCols()) ;
 
-  double t = vpTime::measureTimeMs() ;
-  L.svdNr(W,V) ;
-  t = vpTime::measureTimeMs() -t ;
+    double t = vpTime::measureTimeMs() ;
+    L.svdNr(W,V) ;
+    t = vpTime::measureTimeMs() -t ;
 
-  std::cout <<"svdNr Numerical recipes \n time " <<t << std::endl;
-  std::cout << W.t() ;
-  std::cout << "--------------------------------------"<<std::endl ;
+    std::cout <<"svdNr Numerical recipes \n time " <<t << std::endl;
+    std::cout << W.t() ;
+    std::cout << "--------------------------------------"<<std::endl ;
 
 
 #ifdef VISP_HAVE_GSL
-  L = Ls ;
-  t = vpTime::measureTimeMs() ;
-  L.svdGsl(W,V) ;
-  t = vpTime::measureTimeMs() -t ;
-  std::cout <<"svdGsl_mod \n time " <<t << std::endl;
-  std::cout << W.t() ;
-
-  std::cout << "--------------------------------------"<<std::endl ;
-  std::cout << "TESTING RANDOM MATRICES:" ;
-
-  bool ret = true;
-  for(int i=0;i<2000;i++)
-    ret = ret & testRandom(0.00001);
-  if(ret)
-    std:: cout << "Success"<< std:: endl;
-  else
-    std:: cout << "Fail"<< std:: endl;
-
-  std::cout << "--------------------------------------"<<std::endl ;
+    L = Ls ;
+    t = vpTime::measureTimeMs() ;
+    L.svdGsl(W,V) ;
+    t = vpTime::measureTimeMs() -t ;
+    std::cout <<"svdGsl_mod \n time " <<t << std::endl;
+    std::cout << W.t() ;
+
+    std::cout << "--------------------------------------"<<std::endl ;
+    std::cout << "TESTING RANDOM MATRICES:" ;
+
+    bool ret = true;
+    for(unsigned int  i=0;i<2000;i++)
+      ret = ret & testRandom(0.00001);
+    if(ret)
+      std:: cout << "Success"<< std:: endl;
+    else
+      std:: cout << "Fail"<< std:: endl;
+
+    std::cout << "--------------------------------------"<<std::endl ;
 #endif
 
-  std::cout << "--------------------------------------"<<std::endl ;
-  std::cout << "TESTING OPENCV-GSL coherence:" ;
-
-  bool ret2 = true;
-  for(int i=0;i<1;i++)
-    ret2 = ret2 & testSvdOpenCvGSLCoherence(0.00001);
-  if(ret2)
-    std:: cout << "Success"<< std:: endl;
-  else
-    std:: cout << "Fail"<< std:: endl;
-
-  std::cout << "--------------------------------------"<<std::endl ;
-
-  L = Ls ;
-  t = vpTime::measureTimeMs() ;
-  L.svdFlake(W,V) ;
-  t = vpTime::measureTimeMs() -t ;
-  std::cout <<"svdFlake\n time " <<t << std::endl;
-  std::cout << W.t() ;
+    std::cout << "--------------------------------------"<<std::endl ;
+    std::cout << "TESTING OPENCV-GSL coherence:" ;
+
+    bool ret2 = true;
+    for(unsigned int i=0;i<1;i++)
+      ret2 = ret2 & testSvdOpenCvGSLCoherence(0.00001);
+    if(ret2)
+      std:: cout << "Success"<< std:: endl;
+    else
+      std:: cout << "Fail"<< std:: endl;
+
+    std::cout << "--------------------------------------"<<std::endl ;
+
+    L = Ls ;
+    t = vpTime::measureTimeMs() ;
+    L.svdFlake(W,V) ;
+    t = vpTime::measureTimeMs() -t ;
+    std::cout <<"svdFlake\n time " <<t << std::endl;
+    std::cout << W.t() ;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
diff --git a/test/math/testTwistMatrix.cpp b/test/math/testTwistMatrix.cpp
index c061d764..f0cd2dba 100644
--- a/test/math/testTwistMatrix.cpp
+++ b/test/math/testTwistMatrix.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testTwistMatrix.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testTwistMatrix.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -64,6 +64,8 @@
 
 // List of allowed command line options
 #define GETOPTARGS	"h"
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
 
 /*!
 
@@ -95,15 +97,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -112,7 +114,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -123,56 +125,62 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
-
-  vpTRACE("--------------------------");
-  vpTRACE("--- TEST vpVelocityTwistMatrix ---");
-  vpTRACE("--------------------------");
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  // Set the translation
-  vpTranslationVector cte;
-  cte[0] = 1.;
-  cte[1] = 0.5;
-  cte[2] = -1.;
+    vpTRACE("--------------------------");
+    vpTRACE("--- TEST vpVelocityTwistMatrix ---");
+    vpTRACE("--------------------------");
 
-  // Set the rotation
-  vpRxyzVector cre;
-  cre[0] =  M_PI/2.;
-  cre[1] = -M_PI/2.;
-  cre[2] = -M_PI/4.;
+    // Set the translation
+    vpTranslationVector cte;
+    cte[0] = 1.;
+    cte[1] = 0.5;
+    cte[2] = -1.;
 
-  // Build rotation matrix
-  vpRotationMatrix cRe(cre);
+    // Set the rotation
+    vpRxyzVector cre;
+    cre[0] =  M_PI/2.;
+    cre[1] = -M_PI/2.;
+    cre[2] = -M_PI/4.;
 
-  // Build the twist matrix
-  vpVelocityTwistMatrix cVe(cte, cRe);
+    // Build rotation matrix
+    vpRotationMatrix cRe(cre);
 
-  vpTRACE("cVe twist matrix:");
-  cVe.print (std::cout, 6);
+    // Build the twist matrix
+    vpVelocityTwistMatrix cVe(cte, cRe);
 
+    vpTRACE("cVe twist matrix:");
+    cVe.print (std::cout, 6);
 
-  // Set a speed skew
-  vpColVector ev(6);
 
-  ev[0] = 1.;
-  ev[1] = 0.1;
-  ev[2] = -0.5;
-  ev[3] = M_PI/180.;
-  ev[4] = M_PI/18.;
-  ev[5] = M_PI/10.;
+    // Set a speed skew
+    vpColVector ev(6);
 
-  vpTRACE("ev colvector:");
-  ev.print (std::cout, 6);
+    ev[0] = 1.;
+    ev[1] = 0.1;
+    ev[2] = -0.5;
+    ev[3] = M_PI/180.;
+    ev[4] = M_PI/18.;
+    ev[5] = M_PI/10.;
 
-  // Set a speed skew
-  vpColVector cv;
+    vpTRACE("ev colvector:");
+    ev.print (std::cout, 6);
 
-  cv = cVe * ev;
+    // Set a speed skew
+    vpColVector cv;
 
-  vpTRACE("cv = cVe * ev:");
-  cv.print (std::cout, 6);
+    cv = cVe * ev;
 
+    vpTRACE("cv = cVe * ev:");
+    cv.print (std::cout, 6);
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
diff --git a/test/network/CMakeLists.txt b/test/network/CMakeLists.txt
index 40b5481f..f8cace71 100644
--- a/test/network/CMakeLists.txt
+++ b/test/network/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/network/testClient.cpp b/test/network/testClient.cpp
index 0e5a9e92..bdf7eb65 100644
--- a/test/network/testClient.cpp
+++ b/test/network/testClient.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testClient.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testClient.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -50,27 +50,32 @@
 
 int main()
 {
-  std::string servername = "localhost";
-  unsigned int port = 35000;
+  try {
+    std::string servername = "localhost";
+    unsigned int port = 35000;
 
-  vpClient client;
-  client.connectToHostname(servername, port);
-  //client.connectToIP("127.0.0.1",port);
+    vpClient client;
+    client.connectToHostname(servername, port);
+    //client.connectToIP("127.0.0.1",port);
 
-  int val = 0;
+    int val = 0;
 
-  while(1)
-  {
-    if(client.send(&val) != sizeof(int)) //Sending the new value to the first client
-      std::cout << "Error while sending" << std::endl;
-    else
-      std::cout << "Sending : " << val << std::endl;
-    
-    if(client.receive(&val) != sizeof(int)) //Receiving a value from the first client
+    while(1)
+    {
+      if(client.send(&val) != sizeof(int)) //Sending the new value to the first client
+        std::cout << "Error while sending" << std::endl;
+      else
+        std::cout << "Sending : " << val << std::endl;
+
+      if(client.receive(&val) != sizeof(int)) //Receiving a value from the first client
         std::cout << "Error while receiving" << std::endl;
-    else
-      std::cout << "Received : " << val << std::endl;
+      else
+        std::cout << "Received : " << val << std::endl;
+    }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-
-  return 0;
 }
diff --git a/test/network/testServer.cpp b/test/network/testServer.cpp
index 1bb222f2..e71f13b6 100644
--- a/test/network/testServer.cpp
+++ b/test/network/testServer.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testServer.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testServer.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -50,30 +50,35 @@
 
 int main()
 {
-  int port = 35000;
-  vpServer serv(port); //Launch the server on localhost
-  serv.start();
-  
-  bool run = true;
-  int val;
-   
-  while(run){
-    serv.checkForConnections();
-    
-    if(serv.getNumberOfClients() > 0)
-    {
-      if(serv.receive(&val) != sizeof(int)) //Receiving a value from the first client
-         std::cout << "Error while receiving" << std::endl;
-      else
-        std::cout << "Received : " << val << std::endl;
-      
-      val = val+1;
-      if(serv.send(&val) != sizeof(int)) //Sending the new value to the first client
-        std::cout << "Error while sending" << std::endl;
-      else
-        std::cout << "Sending : " << val << std::endl;
+  try {
+    int port = 35000;
+    vpServer serv(port); //Launch the server on localhost
+    serv.start();
+
+    bool run = true;
+    int val;
+
+    while(run){
+      serv.checkForConnections();
+
+      if(serv.getNumberOfClients() > 0)
+      {
+        if(serv.receive(&val) != sizeof(int)) //Receiving a value from the first client
+          std::cout << "Error while receiving" << std::endl;
+        else
+          std::cout << "Received : " << val << std::endl;
+
+        val = val+1;
+        if(serv.send(&val) != sizeof(int)) //Sending the new value to the first client
+          std::cout << "Error while sending" << std::endl;
+        else
+          std::cout << "Sending : " << val << std::endl;
+      }
     }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-
-  return 0;
 }
diff --git a/test/pose/CMakeLists.txt b/test/pose/CMakeLists.txt
index 1343a556..6191d5d6 100644
--- a/test/pose/CMakeLists.txt
+++ b/test/pose/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/pose/testFindMatch.cpp b/test/pose/testFindMatch.cpp
index ea11e5dd..62223fb3 100644
--- a/test/pose/testFindMatch.cpp
+++ b/test/pose/testFindMatch.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testFindMatch.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testFindMatch.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -62,60 +62,66 @@
 int
 main()
 {
+  try {
+    std::cout << "Find Matches using Ransac" << std::endl;
+    unsigned int nb3D = 5;
+    unsigned int nb2D = 5;
+    std::vector<vpPoint> P(nb3D);
+    std::vector<vpPoint> p(nb2D);
+
+    P[0].setWorldCoordinates(-L,-L, 0 ) ;
+    P[1].setWorldCoordinates(L,-L, 0 ) ;
+    P[2].setWorldCoordinates(L,L, 0 ) ;
+    P[3].setWorldCoordinates(-L,L, 0 ) ;
+    P[4].setWorldCoordinates(-0,L/2., L ) ;
+
+    vpHomogeneousMatrix cMo_ref(0, 0.2, 1, vpMath::rad(3), vpMath::rad(-2), vpMath::rad(10)) ;
+
+    for(unsigned int i=0 ; i < nb3D ; i++)
+    {
+      vpPoint pt = P[i];
+      pt.project(cMo_ref);
+      p[i].set_x(pt.get_x());
+      p[i].set_y(pt.get_y());
+    }
+
+    unsigned int ninliers ;
+    std::vector<vpPoint> inliers;
+    double threshold = 1e-6;
+    unsigned int nbInlierToReachConsensus = nb3D;
+
+    vpHomogeneousMatrix cMo ;
+
+    vpPose::findMatch(p,P,nbInlierToReachConsensus,threshold,ninliers,inliers,cMo);
+
+    std::cout << "Inliers: " << std::endl;
+    for (unsigned int i = 0; i < inliers.size() ; i++)
+    {
+      inliers[i].print() ;
+      std::cout << std::endl;
+    }
+
+    std::cout << "cMo :\n" << vpPoseVector(cMo).t() << std::endl << std::endl;
+
+    vpPoseVector pose_ref = vpPoseVector(cMo_ref);
+    vpPoseVector pose_est = vpPoseVector(cMo);
 
-  std::cout << "Find Matches using Ransac" << std::endl;
-  unsigned int nb3D = 5;
-  unsigned int nb2D = 5;
-  std::vector<vpPoint> P(nb3D);
-  std::vector<vpPoint> p(nb2D);
-
-  P[0].setWorldCoordinates(-L,-L, 0 ) ;
-  P[1].setWorldCoordinates(L,-L, 0 ) ;
-  P[2].setWorldCoordinates(L,L, 0 ) ;
-  P[3].setWorldCoordinates(-L,L, 0 ) ;
-  P[4].setWorldCoordinates(-0,L/2., L ) ;
-
-  vpHomogeneousMatrix cMo_ref(0, 0.2, 1, vpMath::rad(3), vpMath::rad(-2), vpMath::rad(10)) ;
-
-  for(unsigned int i=0 ; i < nb3D ; i++)
-  {
-    vpPoint pt = P[i];
-    pt.project(cMo_ref);
-    p[i].set_x(pt.get_x());
-    p[i].set_y(pt.get_y());
-  }
-
-  unsigned int ninliers ;
-  std::vector<vpPoint> inliers;
-  double threshold = 1e-6;
-  unsigned int nbInlierToReachConsensus = nb3D;
-
-  vpHomogeneousMatrix cMo ;
-
-  vpPose::findMatch(p,P,nbInlierToReachConsensus,threshold,ninliers,inliers,cMo);
-
-  std::cout << "Inliers: " << std::endl;
-  for (unsigned int i = 0; i < inliers.size() ; i++)
-  {
-    inliers[i].print() ;
     std::cout << std::endl;
-  }
-
-  std::cout << "cMo :\n" << vpPoseVector(cMo).t() << std::endl << std::endl;
+    std::cout << "reference cMo :\n" << pose_ref.t() << std::endl << std::endl;
+    std::cout << "estimated cMo :\n" << pose_est.t() << std::endl << std::endl;
 
-  vpPoseVector pose_ref = vpPoseVector(cMo_ref);
-  vpPoseVector pose_est = vpPoseVector(cMo);
+    int test_fail = 0;
+    for(unsigned int i=0; i<6; i++) {
+      if (std::fabs(pose_ref[i]-pose_est[i]) > 0.001)
+        test_fail = 1;
+    }
 
-  std::cout << std::endl;
-  std::cout << "reference cMo :\n" << pose_ref.t() << std::endl << std::endl;
-  std::cout << "estimated cMo :\n" << pose_est.t() << std::endl << std::endl;
+    std::cout << "Matching is " << (test_fail ? "badly" : "well") << " performed" << std::endl;
 
-  int test_fail = 0;
-  for(unsigned int i=0; i<6; i++) {
-    if (std::fabs(pose_ref[i]-pose_est[i]) > 0.001)
-      test_fail = 1;
+    return test_fail;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-
-  std::cout << "Matching is " << (test_fail ? "badly" : "well") << " performed" << std::endl;
-  return test_fail;
 }
diff --git a/test/pose/testPose.cpp b/test/pose/testPose.cpp
index 57b1fa8d..00b39226 100644
--- a/test/pose/testPose.cpp
+++ b/test/pose/testPose.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testPose.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testPose.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -66,6 +66,14 @@
   Non-Linear approach.
 
 */
+
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
+void print_pose(const vpHomogeneousMatrix &cMo, const std::string &legend);
+int compare_pose(const vpPose &pose, const vpHomogeneousMatrix &cMo_ref, const vpHomogeneousMatrix &cMo_est,
+                 const std::string &legend);
+
+
 /*!
 
   Print the program options.
@@ -97,15 +105,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -114,7 +122,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -137,7 +145,8 @@ void print_pose(const vpHomogeneousMatrix &cMo, const std::string &legend)
 }
 
 // test if pose is well estimated
-int compare_pose(const vpPose &pose, const vpHomogeneousMatrix &cMo_ref, const vpHomogeneousMatrix &cMo_est, const std::string &legend)
+int compare_pose(const vpPose &pose, const vpHomogeneousMatrix &cMo_ref, const vpHomogeneousMatrix &cMo_est,
+                 const std::string &legend)
 {
   vpPoseVector pose_ref = vpPoseVector(cMo_ref);
   vpPoseVector pose_est = vpPoseVector(cMo_est);
@@ -149,10 +158,16 @@ int compare_pose(const vpPose &pose, const vpHomogeneousMatrix &cMo_ref, const v
     if (std::fabs(pose_ref[i]-pose_est[i]) > 0.001)
       fail = 1;
   }
+
   std::cout << "Based on 3D parameters " << legend << " is " << (fail ? "badly" : "well") << " estimated" << std::endl;
 
   // Test done on the residual
   double r = pose.computeResidual(cMo_est);
+  if (pose.listP.size() < 4) {
+    fail = 1;
+    std::cout << "Not enough point" << std::endl;
+    return fail;
+  }
   r = sqrt(r)/pose.listP.size();
   //std::cout << "Residual on each point (meter): " << r << std::endl;
   fail = (r > 0.1) ? 1 : 0;
@@ -163,97 +178,103 @@ int compare_pose(const vpPose &pose, const vpHomogeneousMatrix &cMo_ref, const v
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  vpPoint P[5]  ;  //  Point to be tracked
-  vpPose pose ;
-  pose.clearPoint() ;
-
-  P[0].setWorldCoordinates(-L,-L, 0 ) ;
-  P[1].setWorldCoordinates(L,-L, 0 ) ;
-  P[2].setWorldCoordinates(L,L, 0 ) ;
-  P[3].setWorldCoordinates(-2*L, 3*L, 0 ) ;
-  P[4].setWorldCoordinates(-L,L, 0.01 ) ;
-  //P[3].setWorldCoordinates(-L,L, 0 ) ;
-
-  int test_fail = 0, fail = 0;
-  vpPoseVector cpo_ref = vpPoseVector(0.01, 0.02, 0.25, vpMath::rad(5), 0,vpMath::rad(10));
-  vpHomogeneousMatrix cMo_ref(cpo_ref) ;
-  vpHomogeneousMatrix cMo ; // will contain the estimated pose
-
-  for(int i=0 ; i < 5 ; i++) {
-    P[i].project(cMo_ref) ;
-    //P[i].print();
-    pose.addPoint(P[i]) ; // and added to the pose computation class
-  }
+    vpPoint P[5]  ;  //  Point to be tracked
+    vpPose pose ;
+    pose.clearPoint() ;
+
+    P[0].setWorldCoordinates(-L,-L, 0 ) ;
+    P[1].setWorldCoordinates(L,-L, 0 ) ;
+    P[2].setWorldCoordinates(L,L, 0 ) ;
+    P[3].setWorldCoordinates(-2*L, 3*L, 0 ) ;
+    P[4].setWorldCoordinates(-L,L, 0.01 ) ;
+    //P[3].setWorldCoordinates(-L,L, 0 ) ;
+
+    int test_fail = 0, fail = 0;
+    vpPoseVector cpo_ref = vpPoseVector(0.01, 0.02, 0.25, vpMath::rad(5), 0,vpMath::rad(10));
+    vpHomogeneousMatrix cMo_ref(cpo_ref) ;
+    vpHomogeneousMatrix cMo ; // will contain the estimated pose
+
+    for(int i=0 ; i < 5 ; i++) {
+      P[i].project(cMo_ref) ;
+      //P[i].print();
+      pose.addPoint(P[i]) ; // and added to the pose computation class
+    }
 
-  // Let's go ...
-  print_pose(cMo_ref, std::string("Reference pose"));  // print the reference pose
+    // Let's go ...
+    print_pose(cMo_ref, std::string("Reference pose"));  // print the reference pose
 
-  std::cout <<"-------------------------------------------------"<<std::endl ;
-  pose.computePose(vpPose::LAGRANGE, cMo) ;
+    std::cout <<"-------------------------------------------------"<<std::endl ;
+    pose.computePose(vpPose::LAGRANGE, cMo) ;
 
-  print_pose(cMo, std::string("Pose estimated by Lagrange"));
-  fail = compare_pose(pose, cMo_ref, cMo, "pose by Lagrange");
-  test_fail |= fail;
+    print_pose(cMo, std::string("Pose estimated by Lagrange"));
+    fail = compare_pose(pose, cMo_ref, cMo, "pose by Lagrange");
+    test_fail |= fail;
 
-  std::cout <<"--------------------------------------------------"<<std::endl ;
-  pose.computePose(vpPose::DEMENTHON, cMo) ;
+    std::cout <<"--------------------------------------------------"<<std::endl ;
+    pose.computePose(vpPose::DEMENTHON, cMo) ;
 
-  print_pose(cMo, std::string("Pose estimated by Dementhon"));
-  fail = compare_pose(pose, cMo_ref, cMo, "pose by Dementhon");
-  test_fail |= fail;
+    print_pose(cMo, std::string("Pose estimated by Dementhon"));
+    fail = compare_pose(pose, cMo_ref, cMo, "pose by Dementhon");
+    test_fail |= fail;
 
-  std::cout <<"--------------------------------------------------"<<std::endl ;
-  pose.setRansacNbInliersToReachConsensus(4);
-  pose.setRansacThreshold(0.01);
-  pose.computePose(vpPose::RANSAC, cMo) ;
+    std::cout <<"--------------------------------------------------"<<std::endl ;
+    pose.setRansacNbInliersToReachConsensus(4);
+    pose.setRansacThreshold(0.01);
+    pose.computePose(vpPose::RANSAC, cMo) ;
 
-  print_pose(cMo, std::string("Pose estimated by Ransac"));
-  fail = compare_pose(pose, cMo_ref, cMo, "pose by Ransac");
-  test_fail |= fail;
+    print_pose(cMo, std::string("Pose estimated by Ransac"));
+    fail = compare_pose(pose, cMo_ref, cMo, "pose by Ransac");
+    test_fail |= fail;
 
-  std::cout <<"--------------------------------------------------"<<std::endl ;
-  pose.computePose(vpPose::LAGRANGE_LOWE, cMo) ;
+    std::cout <<"--------------------------------------------------"<<std::endl ;
+    pose.computePose(vpPose::LAGRANGE_LOWE, cMo) ;
 
-  print_pose(cMo, std::string("Pose estimated by Lagrange than Lowe"));
-  fail = compare_pose(pose, cMo_ref, cMo, "pose by Lagrange than Lowe");
-  test_fail |= fail;
+    print_pose(cMo, std::string("Pose estimated by Lagrange than Lowe"));
+    fail = compare_pose(pose, cMo_ref, cMo, "pose by Lagrange than Lowe");
+    test_fail |= fail;
 
-  std::cout <<"--------------------------------------------------"<<std::endl ;
-  pose.computePose(vpPose::DEMENTHON_LOWE, cMo) ;
+    std::cout <<"--------------------------------------------------"<<std::endl ;
+    pose.computePose(vpPose::DEMENTHON_LOWE, cMo) ;
 
-  print_pose(cMo, std::string("Pose estimated by Dementhon than Lowe"));
-  fail = compare_pose(pose, cMo_ref, cMo, "pose by Dementhon than Lowe");
-  test_fail |= fail;
+    print_pose(cMo, std::string("Pose estimated by Dementhon than Lowe"));
+    fail = compare_pose(pose, cMo_ref, cMo, "pose by Dementhon than Lowe");
+    test_fail |= fail;
 
-  // Now Virtual Visual servoing
+    // Now Virtual Visual servoing
 
-  std::cout <<"--------------------------------------------------"<<std::endl ;
-  pose.computePose(vpPose::VIRTUAL_VS, cMo) ;
+    std::cout <<"--------------------------------------------------"<<std::endl ;
+    pose.computePose(vpPose::VIRTUAL_VS, cMo) ;
 
-  print_pose(cMo, std::string("Pose estimated by VVS"));
-  fail = compare_pose(pose, cMo_ref, cMo, "pose by VVS");
-  test_fail |= fail;
+    print_pose(cMo, std::string("Pose estimated by VVS"));
+    fail = compare_pose(pose, cMo_ref, cMo, "pose by VVS");
+    test_fail |= fail;
 
-  std::cout <<"-------------------------------------------------"<<std::endl ;
-  pose.computePose(vpPose::DEMENTHON_VIRTUAL_VS, cMo) ;
+    std::cout <<"-------------------------------------------------"<<std::endl ;
+    pose.computePose(vpPose::DEMENTHON_VIRTUAL_VS, cMo) ;
 
-  print_pose(cMo, std::string("Pose estimated by Dementhon than by VVS"));
-  fail = compare_pose(pose, cMo_ref, cMo, "pose by Dementhon than by VVS");
-  test_fail |= fail;
+    print_pose(cMo, std::string("Pose estimated by Dementhon than by VVS"));
+    fail = compare_pose(pose, cMo_ref, cMo, "pose by Dementhon than by VVS");
+    test_fail |= fail;
 
-  std::cout <<"-------------------------------------------------"<<std::endl ;
-  pose.computePose(vpPose::LAGRANGE_VIRTUAL_VS, cMo) ;
+    std::cout <<"-------------------------------------------------"<<std::endl ;
+    pose.computePose(vpPose::LAGRANGE_VIRTUAL_VS, cMo) ;
 
-  print_pose(cMo, std::string("Pose estimated by Lagrange than by VVS"));
-  fail = compare_pose(pose, cMo_ref, cMo, "pose by Lagrange than by VVS");
-  test_fail |= fail;
+    print_pose(cMo, std::string("Pose estimated by Lagrange than by VVS"));
+    fail = compare_pose(pose, cMo_ref, cMo, "pose by Lagrange than by VVS");
+    test_fail |= fail;
 
-  std::cout << "\nGlobal pose estimation test " << (test_fail ? "fail" : "is ok") << std::endl;
+    std::cout << "\nGlobal pose estimation test " << (test_fail ? "fail" : "is ok") << std::endl;
 
-  return test_fail;
+    return test_fail;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
diff --git a/test/pose/testPoseFeatures.cpp b/test/pose/testPoseFeatures.cpp
index 1004757d..19d2a598 100644
--- a/test/pose/testPoseFeatures.cpp
+++ b/test/pose/testPoseFeatures.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testPoseFeatures.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testPoseFeatures.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -87,127 +87,130 @@ void vp_createLine(vpFeatureLine &fp,const vpLine &v){
 
 int main()
 {
-  vpImage<unsigned char> I(600,600);
-  
-  vpHomogeneousMatrix cMo_ref(0., 0., 1., vpMath::rad(0), vpMath::rad(0), vpMath::rad(60));
-  vpPoseVector pose_ref = vpPoseVector(cMo_ref);
+  try {
+    vpImage<unsigned char> I(600,600);
 
-  std::cout << "Reference pose used to create the visual features : " << std::endl;
-  std::cout << pose_ref.t() << std::endl;
-  
-  vpPoseFeatures pose;
-  
-  vpPoint pts[6];
+    vpHomogeneousMatrix cMo_ref(0., 0., 1., vpMath::rad(0), vpMath::rad(0), vpMath::rad(60));
+    vpPoseVector pose_ref = vpPoseVector(cMo_ref);
+
+    std::cout << "Reference pose used to create the visual features : " << std::endl;
+    std::cout << pose_ref.t() << std::endl;
+
+    vpPoseFeatures pose;
+
+    vpPoint pts[6];
     
-  double val = 0.25;
-  double val2 = 0.0;
-  
-  //2D Point Feature
-  pts[0].setWorldCoordinates(0.0,-val,val2);
-  pts[1].setWorldCoordinates(0.0,val,val2);
-  pts[2].setWorldCoordinates(-val,val,val2);
-  
-  //Segment Feature
-  pts[3].setWorldCoordinates(-val,-val/2.0,val2);
-  pts[4].setWorldCoordinates(val,val/2.0,val2);
-  
-  //3D point Feature
-  pts[5].setWorldCoordinates(0.0,0.0,-1.5);
-  
-  //Line Feature
-  vpLine line;
-  line.setWorldCoordinates(0.0,1.0,0.0,.0,
-                           0.0,0.0,1.0,0.0);
-  
-  //Vanishing Point Feature
-  vpLine l1;
-  l1.setWorldCoordinates(0.0,1.0,0.2,0.0,
-                         1.0,0.0,0.0,-0.25);
-  
-  vpLine l2;
-  l2.setWorldCoordinates(0.0,1.0,0.2,0.0,
+    double val = 0.25;
+    double val2 = 0.0;
+
+    //2D Point Feature
+    pts[0].setWorldCoordinates(0.0,-val,val2);
+    pts[1].setWorldCoordinates(0.0,val,val2);
+    pts[2].setWorldCoordinates(-val,val,val2);
+
+    //Segment Feature
+    pts[3].setWorldCoordinates(-val,-val/2.0,val2);
+    pts[4].setWorldCoordinates(val,val/2.0,val2);
+
+    //3D point Feature
+    pts[5].setWorldCoordinates(0.0,0.0,-1.5);
+
+    //Line Feature
+    vpLine line;
+    line.setWorldCoordinates(0.0,1.0,0.0,.0,
+                             0.0,0.0,1.0,0.0);
+
+    //Vanishing Point Feature
+    vpLine l1;
+    l1.setWorldCoordinates(0.0,1.0,0.2,0.0,
+                           1.0,0.0,0.0,-0.25);
+
+    vpLine l2;
+    l2.setWorldCoordinates(0.0,1.0,0.2,0.0,
                            -1.0,0.0,0.0,-0.25);
-  
-  //Ellipse Feature
-  vpCircle circle;
-  circle.setWorldCoordinates(0.0, 0.0, 1.0 , 0.0, 0.0, 0.0, 0.25);
-  
-  pts[0].project(cMo_ref);
-  pts[1].project(cMo_ref);
-  pts[2].project(cMo_ref);
-  
-  pts[3].project(cMo_ref);
-  pts[4].project(cMo_ref);
-  
-  pts[5].project(cMo_ref);
-  
-  line.project(cMo_ref);
-  
-  l1.project(cMo_ref);
-  l2.project(cMo_ref);
-  
-  circle.project(cMo_ref);
-  
-  pose.addFeaturePoint(pts[0]);
-//   pose.addFeaturePoint(pts[1]);
-  pose.addFeaturePoint(pts[2]);
-  
-  pose.addFeaturePoint3D(pts[5]);
-  
-  pose.addFeatureVanishingPoint(l1,l2);
-  
-//   pose.addFeatureSegment(pts[3],pts[4]);
-//   
-//   pose.addFeatureLine(line);
-  
-  pose.addFeatureEllipse(circle);
+
+    //Ellipse Feature
+    vpCircle circle;
+    circle.setWorldCoordinates(0.0, 0.0, 1.0 , 0.0, 0.0, 0.0, 0.25);
+
+    pts[0].project(cMo_ref);
+    pts[1].project(cMo_ref);
+    pts[2].project(cMo_ref);
+
+    pts[3].project(cMo_ref);
+    pts[4].project(cMo_ref);
+
+    pts[5].project(cMo_ref);
+
+    line.project(cMo_ref);
+
+    l1.project(cMo_ref);
+    l2.project(cMo_ref);
+
+    circle.project(cMo_ref);
+
+    pose.addFeaturePoint(pts[0]);
+    //   pose.addFeaturePoint(pts[1]);
+    pose.addFeaturePoint(pts[2]);
+
+    pose.addFeaturePoint3D(pts[5]);
+
+    pose.addFeatureVanishingPoint(l1,l2);
+
+    //   pose.addFeatureSegment(pts[3],pts[4]);
+    //
+    //   pose.addFeatureLine(line);
+
+    pose.addFeatureEllipse(circle);
 
 #ifdef VISP_HAVE_CPP11_COMPATIBILITY
-  vpFeaturePoint fp;
-  vpFeatureLine fl;
-  vpFeatureSegment fs;
-  void (*ptr)(vpFeatureSegment&, vpPoint&, vpPoint&) = &vpFeatureBuilder::create;
-  vp_createPointClass cpClass;
-  int (vp_createPointClass::*ptrClass)(vpFeaturePoint&, const vpPoint&) = &vp_createPointClass::vp_createPoint;
-  pose.addSpecificFeature(&cpClass, ptrClass, fp, pts[1]);
-  pose.addSpecificFeature(&vp_createLine, fl, line);
-  pose.addSpecificFeature(ptr, fs, pts[3], pts[4]);
+    vpFeaturePoint fp;
+    vpFeatureLine fl;
+    vpFeatureSegment fs;
+    void (*ptr)(vpFeatureSegment&, vpPoint&, vpPoint&) = &vpFeatureBuilder::create;
+    vp_createPointClass cpClass;
+    int (vp_createPointClass::*ptrClass)(vpFeaturePoint&, const vpPoint&) = &vp_createPointClass::vp_createPoint;
+    pose.addSpecificFeature(&cpClass, ptrClass, fp, pts[1]);
+    pose.addSpecificFeature(&vp_createLine, fl, line);
+    pose.addSpecificFeature(ptr, fs, pts[3], pts[4]);
 #endif
-  
-  pose.setVerbose(true);
-  pose.setLambda(0.6);
-  pose.setVVSIterMax(200);
-  pose.setCovarianceComputation(true);
-  
-  vpHomogeneousMatrix cMo_est(0.4, 0.3, 1.5, vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
-  vpPoseVector pose_est = vpPoseVector(cMo_est);
-  std::cout << "\nPose used as initialisation of the pose computation : " << std::endl;
-  std::cout << pose_est.t() << std::endl;
-  
-  pose.computePose(cMo_est);
-//   pose.computePose(cMo_est, vpPoseFeatures::ROBUST_VIRTUAL_VS);
-  
 
-  std::cout << "\nEstimated pose from visual features : " << std::endl;
-  pose_est.buildFrom(cMo_est);
-  std::cout << pose_est.t() << std::endl;
-  
-  std::cout << "\nResulting covariance (Diag): " << std::endl;
-  vpMatrix covariance = pose.getCovarianceMatrix();
-  std::cout << covariance[0][0] << " " 
-            << covariance[1][1] << " " 
-            << covariance[2][2] << " "
-            << covariance[3][3] << " "
-            << covariance[4][4] << " "
-            << covariance[5][5] << " " << std::endl;
-  
-  int test_fail = 0;
-  for(unsigned int i=0; i<6; i++) {
-    if (std::fabs(pose_ref[i]-pose_est[i]) > 0.001)
-      test_fail = 1;
-  }
+    pose.setVerbose(true);
+    pose.setLambda(0.6);
+    pose.setVVSIterMax(200);
+    pose.setCovarianceComputation(true);
+
+    vpHomogeneousMatrix cMo_est(0.4, 0.3, 1.5, vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
+    vpPoseVector pose_est = vpPoseVector(cMo_est);
+    std::cout << "\nPose used as initialisation of the pose computation : " << std::endl;
+    std::cout << pose_est.t() << std::endl;
 
-  std::cout << "\nPose is " << (test_fail ? "badly" : "well") << " estimated" << std::endl;
+    pose.computePose(cMo_est);
+    //   pose.computePose(cMo_est, vpPoseFeatures::ROBUST_VIRTUAL_VS);
 
-  return test_fail;
+
+    std::cout << "\nEstimated pose from visual features : " << std::endl;
+    pose_est.buildFrom(cMo_est);
+    std::cout << pose_est.t() << std::endl;
+
+    std::cout << "\nResulting covariance (Diag): " << std::endl;
+    vpMatrix covariance = pose.getCovarianceMatrix();
+    std::cout << covariance[0][0] << " " << covariance[1][1] << " "
+              << covariance[2][2] << " " << covariance[3][3] << " "
+              << covariance[4][4] << " " << covariance[5][5] << " " << std::endl;
+
+    int test_fail = 0;
+    for(unsigned int i=0; i<6; i++) {
+      if (std::fabs(pose_ref[i]-pose_est[i]) > 0.001)
+        test_fail = 1;
+    }
+
+    std::cout << "\nPose is " << (test_fail ? "badly" : "well") << " estimated" << std::endl;
+
+    return test_fail;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
diff --git a/test/pose/testPoseRansac.cpp b/test/pose/testPoseRansac.cpp
index 0a8892b3..70e8acca 100644
--- a/test/pose/testPoseRansac.cpp
+++ b/test/pose/testPoseRansac.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testPoseRansac.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testPoseRansac.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -62,6 +62,7 @@
 int
 main()
 {
+  try {
     std::cout << "Pose computation with matched points" << std::endl;
     int size = 8;
     vpPoint *P = new vpPoint [size]  ;  //  Point to be tracked
@@ -81,7 +82,7 @@ main()
 
     vpHomogeneousMatrix cMo_ref(0, 0.2, 1, 0, 0, 0) ;
     for(int i=0 ; i < size ; i++)
-    {      
+    {
       P[i].project(cMo_ref) ;
       P[i].print() ;
       std::cout << std::endl;
@@ -131,4 +132,9 @@ main()
     std::cout << "Pose is " << (test_fail ? "badly" : "well") << " estimated" << std::endl;
     delete [] P;
     return test_fail;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
diff --git a/test/servo-afma4/CMakeLists.txt b/test/servo-afma4/CMakeLists.txt
index ac0fe331..0211f577 100644
--- a/test/servo-afma4/CMakeLists.txt
+++ b/test/servo-afma4/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/servo-afma4/testAfma4.cpp b/test/servo-afma4/testAfma4.cpp
index 1df849ba..03583ed5 100644
--- a/test/servo-afma4/testAfma4.cpp
+++ b/test/servo-afma4/testAfma4.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testAfma4.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testAfma4.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -67,10 +67,9 @@ int main()
 
     return 0;
   }
-  catch(...) {
-    vpERROR_TRACE(" Test failed");
-    return 0;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-
 }
 
diff --git a/test/servo-afma4/testRobotAfma4.cpp b/test/servo-afma4/testRobotAfma4.cpp
index 60f1919e..96a26fff 100644
--- a/test/servo-afma4/testRobotAfma4.cpp
+++ b/test/servo-afma4/testRobotAfma4.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testRobotAfma4.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testRobotAfma4.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -64,14 +64,11 @@ int main()
     vpRobotAfma4 afma4;
 
     std::cout << afma4 << std::endl;
-
-    return 0;
   }
-  catch(...) {
-    vpERROR_TRACE(" Test failed");
-    return 0;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
-
+  return 0;
 }
 #else
 int main()
diff --git a/test/servo-afma6/CMakeLists.txt b/test/servo-afma6/CMakeLists.txt
index 0ccf349f..e445bda2 100644
--- a/test/servo-afma6/CMakeLists.txt
+++ b/test/servo-afma6/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/servo-afma6/testAfma6.cpp b/test/servo-afma6/testAfma6.cpp
index 0c11f6d8..06657867 100644
--- a/test/servo-afma6/testAfma6.cpp
+++ b/test/servo-afma6/testAfma6.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testAfma6.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testAfma6.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -104,10 +104,9 @@ int main()
 
     return 0;
   }
-  catch(...) {
-    vpERROR_TRACE(" Test failed");
-    return 0;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-
 }
 
diff --git a/test/servo-afma6/testRobotAfma6.cpp b/test/servo-afma6/testRobotAfma6.cpp
index 62cd5156..9ac60a27 100644
--- a/test/servo-afma6/testRobotAfma6.cpp
+++ b/test/servo-afma6/testRobotAfma6.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testRobotAfma6.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testRobotAfma6.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -101,14 +101,11 @@ int main()
     std::cout << afma6 << std::endl;
     afma6.getCameraParameters(cam, 640, 480);
     std::cout << cam << std::endl;
-
-    return 0;
   }
-  catch(...) {
-    vpERROR_TRACE(" Test failed");
-    return 0;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
-
+  return 0;
 }
 #else
 int main()
diff --git a/test/servo-afma6/testRobotAfma6Pose.cpp b/test/servo-afma6/testRobotAfma6Pose.cpp
index 2d223720..038212ae 100644
--- a/test/servo-afma6/testRobotAfma6Pose.cpp
+++ b/test/servo-afma6/testRobotAfma6Pose.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testRobotAfma6Pose.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testRobotAfma6Pose.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -223,12 +223,11 @@ int main()
               << vpMath::deg(r[1]) << " "
               << vpMath::deg(r[2]) << " deg" << std::endl << std::endl;
 
-    return 0;
   }
-  catch(...) {
-    std::cout << "Test failed" << std::endl;
-    return 0;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
+  return 0;
 }
 #else
 int main()
diff --git a/test/servo-viper/CMakeLists.txt b/test/servo-viper/CMakeLists.txt
index 8d859e09..9ac4f3bf 100644
--- a/test/servo-viper/CMakeLists.txt
+++ b/test/servo-viper/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/servo-viper/testRobotViper850.cpp b/test/servo-viper/testRobotViper850.cpp
index 48105bcc..cad8251d 100644
--- a/test/servo-viper/testRobotViper850.cpp
+++ b/test/servo-viper/testRobotViper850.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testRobotViper850.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testRobotViper850.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -110,13 +110,11 @@ int main()
               << " " << vpMath::deg(rzyz[1])
               << " " << vpMath::deg(rzyz[2]) << std::endl;
 
-    return 0;
   }
-  catch(...) {
-    vpERROR_TRACE(" Test failed");
-    return 0;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
-
+  return 0;
 }
 #else
 int main()
diff --git a/test/servo-viper/testRobotViper850Pose.cpp b/test/servo-viper/testRobotViper850Pose.cpp
index 223026b2..9748bb89 100644
--- a/test/servo-viper/testRobotViper850Pose.cpp
+++ b/test/servo-viper/testRobotViper850Pose.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testRobotViper850Pose.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testRobotViper850Pose.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -226,12 +226,11 @@ int main()
               << vpMath::deg(r[1]) << " "
               << vpMath::deg(r[2]) << " deg" << std::endl << std::endl;
 
-    return 0;
   }
-  catch(...) {
-    std::cout << "Test failed" << std::endl;
-    return 0;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
+  return 0;
 }
 #else
 int main()
diff --git a/test/servo-viper/testViper850.cpp b/test/servo-viper/testViper850.cpp
index 9a84e287..20c35abb 100644
--- a/test/servo-viper/testViper850.cpp
+++ b/test/servo-viper/testViper850.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testViper850.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testViper850.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -120,9 +120,9 @@ int main()
 
     return 0;
   }
-  catch(...) {
-    vpERROR_TRACE(" Test failed");
-    return 0;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 
diff --git a/test/tools/CMakeLists.txt b/test/tools/CMakeLists.txt
index d309b045..ad1e05ed 100644
--- a/test/tools/CMakeLists.txt
+++ b/test/tools/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/tools/geometry/CMakeLists.txt b/test/tools/geometry/CMakeLists.txt
index ebcd2a82..7ace752d 100644
--- a/test/tools/geometry/CMakeLists.txt
+++ b/test/tools/geometry/CMakeLists.txt
@@ -3,7 +3,7 @@
 # $Id: CMakeLists.txt 2897 2010-11-04 11:17:58Z rtallonn $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/tools/geometry/testPolygon.cpp b/test/tools/geometry/testPolygon.cpp
index a56236fa..d56c5ba7 100755
--- a/test/tools/geometry/testPolygon.cpp
+++ b/test/tools/geometry/testPolygon.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testPolygon.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testPolygon.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -60,6 +60,9 @@
 //! List of allowed command line options
 #define GETOPTARGS	"cdh"
 
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv, bool& opt_display, bool& opt_click);
+
 /*!
 
 Print the program options.
@@ -103,12 +106,11 @@ OPTIONS: \n\
   \param opt_click : activates the mouse click.
   \return false if the program has to be stopped, true otherwise.
 */
-bool getOptions(int argc, const char **argv,
-                bool& opt_display, bool& opt_click)
+bool getOptions(int argc, const char **argv, bool& opt_display, bool& opt_click)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': opt_click = false; break;
@@ -116,7 +118,7 @@ bool getOptions(int argc, const char **argv,
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg); return false; break;
+      usage(argv[0], optarg_); return false; break;
     }
   }
 
@@ -124,7 +126,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -140,111 +142,117 @@ bool getOptions(int argc, const char **argv,
 int 
 main(int argc, const char** argv)
 {
-  bool opt_display = true;
-  bool opt_click = true;
-  vpImage<unsigned char> I(480, 640, 255);
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_display, opt_click) == false) {
-    return (-1);
-  }
+  try {
+    bool opt_display = true;
+    bool opt_click = true;
+    vpImage<unsigned char> I(480, 640, 255);
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_display, opt_click) == false) {
+      return (-1);
+    }
 
-  std::vector <vpImagePoint> vec1;
-  vec1.push_back(vpImagePoint(200, 200));
-  vec1.push_back(vpImagePoint(200, 400));
-  vec1.push_back(vpImagePoint(320, 400));
-  vec1.push_back(vpImagePoint(380, 300));
-  vec1.push_back(vpImagePoint(280, 280));
-  vpPolygon p1;
-  p1.buildFrom(vec1);
-  
-  std::vector <vpImagePoint> vec2;
-  vec2.push_back(vpImagePoint(20, 20));
-  vec2.push_back(vpImagePoint(100, 20));
-  vec2.push_back(vpImagePoint(100, 100));
-  vec2.push_back(vpImagePoint(20, 100));
-  vpPolygon p2(vec2);
-
-
-  std::vector <vpImagePoint> vec3;
-  vec2.push_back(vpImagePoint(250, 250));
-  vec2.push_back(vpImagePoint(150, 250));
-  vec2.push_back(vpImagePoint(250, 250));
-  vpPolygon p3(vec3);
+    std::vector <vpImagePoint> vec1;
+    vec1.push_back(vpImagePoint(200, 200));
+    vec1.push_back(vpImagePoint(200, 400));
+    vec1.push_back(vpImagePoint(320, 400));
+    vec1.push_back(vpImagePoint(380, 300));
+    vec1.push_back(vpImagePoint(280, 280));
+    vpPolygon p1;
+    p1.buildFrom(vec1);
+
+    std::vector <vpImagePoint> vec2;
+    vec2.push_back(vpImagePoint(20, 20));
+    vec2.push_back(vpImagePoint(100, 20));
+    vec2.push_back(vpImagePoint(100, 100));
+    vec2.push_back(vpImagePoint(20, 100));
+    vpPolygon p2(vec2);
+
+
+    std::vector <vpImagePoint> vec3;
+    vec2.push_back(vpImagePoint(250, 250));
+    vec2.push_back(vpImagePoint(150, 250));
+    vec2.push_back(vpImagePoint(250, 250));
+    vpPolygon p3(vec3);
 
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #else
-  opt_display = false;
+    opt_display = false;
 #endif
 
-  std::cout << " Polygon 1 : " << std::endl;
-  std::cout << " area : " << p1.getArea() << std::endl;
-  std::cout << " center : " << p1.getCenter() << std::endl << std::endl;
+    std::cout << " Polygon 1 : " << std::endl;
+    std::cout << " area : " << p1.getArea() << std::endl;
+    std::cout << " center : " << p1.getCenter() << std::endl << std::endl;
 
-  std::cout << " Polygon 2 : " << std::endl;
-  std::cout << " area : " << p2.getArea() << std::endl;
-  std::cout << " center : " << p2.getCenter() << std::endl << std::endl;
+    std::cout << " Polygon 2 : " << std::endl;
+    std::cout << " area : " << p2.getArea() << std::endl;
+    std::cout << " center : " << p2.getCenter() << std::endl << std::endl;
 
-  std::cout << " Polygon 3 : " << std::endl;
-  std::cout << " area : " << p3.getArea() << std::endl;
-  std::cout << " center : " << p3.getCenter() << std::endl;
+    std::cout << " Polygon 3 : " << std::endl;
+    std::cout << " area : " << p3.getArea() << std::endl;
+    std::cout << " center : " << p3.getCenter() << std::endl;
 
 
-  if(opt_display){
+    if(opt_display){
 #if (defined VISP_HAVE_X11) || (defined VISP_HAVE_GTK) || (defined VISP_HAVE_GDI)
-    display.init(I, 10, 10, "Test vpPolygon");
+      display.init(I, 10, 10, "Test vpPolygon");
 #endif
-    vpDisplay::display(I);
-    p1.display(I, vpColor::green, 1);
-    vpDisplay::displayCross(I, p1.getCenter(), 5, vpColor::green);
-    p2.display(I, vpColor::red, 1);
-    vpDisplay::displayCross(I, p2.getCenter(), 5, vpColor::red);
-    p3.display(I, vpColor::blue, 1);
-    vpDisplay::displayCross(I, p3.getCenter(), 5, vpColor::lightBlue);
-    vpDisplay::displayCharString(I, vpImagePoint(10, 10), "Click to finish", vpColor::red);
-    vpDisplay::flush(I);
-
-    if (opt_click)
-      vpDisplay::getClick(I);
-
-
-    vpDisplay::display(I);
-    vpDisplay::displayCharString(I, vpImagePoint(10, 10), "Left click to add a point", vpColor::red);
-    vpDisplay::displayCharString(I, vpImagePoint(20, 10), "Right click to build the polygon", vpColor::red);
-    vpDisplay::flush(I);
-    if (opt_click) {
-      vpPolygon p4;
-      p4.initClick(I);
-      p4.display(I, vpColor::green, 1);
-      std::cout << std::endl;
-      std::cout << " Polygon 4 : " << std::endl;
-      std::cout << " area : " << p4.getArea() << std::endl;
-      std::cout << " center : " << p4.getCenter() << std::endl;
-      std::cout << "Click to continue." << std::endl;
+      vpDisplay::display(I);
+      p1.display(I, vpColor::green, 1);
+      vpDisplay::displayCross(I, p1.getCenter(), 5, vpColor::green);
+      p2.display(I, vpColor::red, 1);
+      vpDisplay::displayCross(I, p2.getCenter(), 5, vpColor::red);
+      p3.display(I, vpColor::blue, 1);
+      vpDisplay::displayCross(I, p3.getCenter(), 5, vpColor::lightBlue);
+      vpDisplay::displayCharString(I, vpImagePoint(10, 10), "Click to finish", vpColor::red);
       vpDisplay::flush(I);
-      vpDisplay::getClick(I);
 
-      vpRect bbox = p4.getBoundingBox();
-      for(unsigned int i= (unsigned int)floor(bbox.getTop()); i<(unsigned int)ceil(bbox.getBottom()); ++i){
-        for(unsigned int j=(unsigned int)floor(bbox.getLeft()); j<(unsigned int)ceil(bbox.getRight()); ++j){
-          if(p4.isInside(vpImagePoint(i, j))){
-            vpDisplay::displayPoint(I, vpImagePoint(i, j), vpColor::orange);
+      if (opt_click)
+        vpDisplay::getClick(I);
+
+
+      vpDisplay::display(I);
+      vpDisplay::displayCharString(I, vpImagePoint(10, 10), "Left click to add a point", vpColor::red);
+      vpDisplay::displayCharString(I, vpImagePoint(20, 10), "Right click to build the polygon", vpColor::red);
+      vpDisplay::flush(I);
+      if (opt_click) {
+        vpPolygon p4;
+        p4.initClick(I);
+        p4.display(I, vpColor::green, 1);
+        std::cout << std::endl;
+        std::cout << " Polygon 4 : " << std::endl;
+        std::cout << " area : " << p4.getArea() << std::endl;
+        std::cout << " center : " << p4.getCenter() << std::endl;
+        std::cout << "Click to continue." << std::endl;
+        vpDisplay::flush(I);
+        vpDisplay::getClick(I);
+
+        vpRect bbox = p4.getBoundingBox();
+        for(unsigned int i= (unsigned int)floor(bbox.getTop()); i<(unsigned int)ceil(bbox.getBottom()); ++i){
+          for(unsigned int j=(unsigned int)floor(bbox.getLeft()); j<(unsigned int)ceil(bbox.getRight()); ++j){
+            if(p4.isInside(vpImagePoint(i, j))){
+              vpDisplay::displayPoint(I, vpImagePoint(i, j), vpColor::orange);
+            }
           }
         }
-      }
-      vpDisplay::flush(I);
-      std::cout << "Click to finish." << std::endl;
+        vpDisplay::flush(I);
+        std::cout << "Click to finish." << std::endl;
 
-      vpDisplay::getClick(I);
+        vpDisplay::getClick(I);
+      }
     }
-  }
 
-  return 0;  
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
 
 
diff --git a/test/tools/time/CMakeLists.txt b/test/tools/time/CMakeLists.txt
index 189f0140..655203e6 100644
--- a/test/tools/time/CMakeLists.txt
+++ b/test/tools/time/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/tools/time/testTime.cpp b/test/tools/time/testTime.cpp
index b9665a1f..259d9e60 100644
--- a/test/tools/time/testTime.cpp
+++ b/test/tools/time/testTime.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testTime.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testTime.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -47,9 +47,9 @@
 
 */
 #include <visp/vpConfig.h>
-#if defined UNIX
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
 #  include <unistd.h>
-#elif defined WIN32
+#elif defined(_WIN32)
 #  include <windows.h>
 #  include <mmsystem.h>
 #  include <winbase.h>
@@ -61,7 +61,8 @@
 #include <visp/vpTime.h>
 #include <visp/vpParseArgv.h>
 
-
+void usage(const char *name, const char *badparam);
+bool getOptions(int argc, const char **argv);
 
 // List of allowed command line options
 #define GETOPTARGS	"h"
@@ -96,15 +97,15 @@ OPTIONS:                                               Default\n\
 */
 bool getOptions(int argc, const char **argv)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'h': usage(argv[0], NULL); return false; break;
 
     default:
-      usage(argv[0], optarg);
+      usage(argv[0], optarg_);
       return false; break;
     }
   }
@@ -113,7 +114,7 @@ bool getOptions(int argc, const char **argv)
     // standalone param or error
     usage(argv[0], NULL);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -124,65 +125,71 @@ bool getOptions(int argc, const char **argv)
 int
 main(int argc, const char ** argv)
 {
-  // Read the command line options
-  if (getOptions(argc, argv) == false) {
-    exit (-1);
-  }
+  try {
+    // Read the command line options
+    if (getOptions(argc, argv) == false) {
+      exit (-1);
+    }
 
-  double v = 0;
+    double v = 0;
 
-  double t0 = vpTime::measureTimeMs();
-  for (int i =0 ; i < 100000; i ++)
-    for (int j =0 ; j < 100; j ++)
-      v = i * 2 / 3. + j;
-  std::cout << "Computed dummy value: " << v << std::endl;
+    double t0 = vpTime::measureTimeMs();
+    for (int i =0 ; i < 100000; i ++)
+      for (int j =0 ; j < 100; j ++)
+        v = i * 2 / 3. + j;
+    std::cout << "Computed dummy value: " << v << std::endl;
 
-  double t1 = vpTime::measureTimeMs();
-  vpTime::wait(t1, 40);
+    double t1 = vpTime::measureTimeMs();
+    vpTime::wait(t1, 40);
 
-  double t2 = vpTime::measureTimeMs();
+    double t2 = vpTime::measureTimeMs();
 
-  // Sleep 10ms
-#if defined UNIX
-  usleep(10*1000);
-#elif defined WIN32
-  Sleep(10);
+    // Sleep 10ms
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
+    usleep(10*1000);
+#elif defined(_WIN32)
+    Sleep(10);
 #endif
 
-  double t3 = vpTime::measureTimeMs();
+    double t3 = vpTime::measureTimeMs();
 
-  // Sleep 2ms
-#if defined UNIX
-  usleep(2*1000);
-#elif defined WIN32
-  Sleep(2);
+    // Sleep 2ms
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
+    usleep(2*1000);
+#elif defined(_WIN32)
+    Sleep(2);
 #endif
-  double t4 = vpTime::measureTimeMs();
+    double t4 = vpTime::measureTimeMs();
 
-  vpTime::wait(t4, 19);
+    vpTime::wait(t4, 19);
 
-  double t5 = vpTime::measureTimeMs();
+    double t5 = vpTime::measureTimeMs();
 
-  vpTime::wait(5);
+    vpTime::wait(5);
 
-  double t6 = vpTime::measureTimeMs();
+    double t6 = vpTime::measureTimeMs();
 
-  vpTime::wait(21);
+    vpTime::wait(21);
 
-  double t7 = vpTime::measureTimeMs();
+    double t7 = vpTime::measureTimeMs();
 
-  vpTime::wait(2);
+    vpTime::wait(2);
 
-  double t8 = vpTime::measureTimeMs();
+    double t8 = vpTime::measureTimeMs();
 
-  std::cout << "t1-t0: computation time: " << t1 - t0 << std::endl;
-  std::cout << "t2-t1: wait(t1, 40 ms): " << t2 - t1 << std::endl;
-  std::cout << "t3-t2: sleep(10 ms): " << t3 - t2 << std::endl;
-  std::cout << "t4-t3: sleep(2 ms): " << t4 - t3 << std::endl;
-  std::cout << "t5-t4: wait(t, 19 ms): " << t5 - t4 << std::endl;
-  std::cout << "t6-t5: wait(5 ms): " << t6 - t5 << std::endl;
-  std::cout << "t7-t6: wait(21 ms): " << t7 - t6 << std::endl;
-  std::cout << "t8-t7: wait(2 ms): " << t8 - t7 << std::endl;
+    std::cout << "t1-t0: computation time: " << t1 - t0 << std::endl;
+    std::cout << "t2-t1: wait(t1, 40 ms): " << t2 - t1 << std::endl;
+    std::cout << "t3-t2: sleep(10 ms): " << t3 - t2 << std::endl;
+    std::cout << "t4-t3: sleep(2 ms): " << t4 - t3 << std::endl;
+    std::cout << "t5-t4: wait(t, 19 ms): " << t5 - t4 << std::endl;
+    std::cout << "t6-t5: wait(5 ms): " << t6 - t5 << std::endl;
+    std::cout << "t7-t6: wait(21 ms): " << t7 - t6 << std::endl;
+    std::cout << "t8-t7: wait(2 ms): " << t8 - t7 << std::endl;
 
-  return 0;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
diff --git a/test/tools/xml/CMakeLists.txt b/test/tools/xml/CMakeLists.txt
index 4a1b57aa..deb112f5 100644
--- a/test/tools/xml/CMakeLists.txt
+++ b/test/tools/xml/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/tools/xml/testXmlParser.cpp b/test/tools/xml/testXmlParser.cpp
index 1d725605..18a1e5ca 100755
--- a/test/tools/xml/testXmlParser.cpp
+++ b/test/tools/xml/testXmlParser.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testXmlParser.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testXmlParser.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -212,6 +212,9 @@ vpExampleDataParser::writeMainClass(xmlNodePtr node)
 // List of allowed command line options
 #define GETOPTARGS	"o:h"
 
+void usage(const char *name, const char *badparam, const std::string& opath, const std::string& user);
+bool getOptions(int argc, const char **argv, std::string &opath, const std::string& user);
+
 /*!
 
 Print the program options.
@@ -225,25 +228,23 @@ Print the program options.
 void usage(const char *name, const char *badparam, const std::string& opath, const std::string& user)
 {
   fprintf(stdout, "\n\
-          Write and read data in a xml file.\n\
+Write and read data in a xml file.\n\
           \n\
-          SYNOPSIS\n\
-          %s [-o <output image path>] [-h]\n						      \
-          ", name);
-
-          fprintf(stdout, "\n\
-                  OPTIONS:                                               Default\n\
-                  -o <output data path>                               %s\n\
-                  Set data output path.\n\
-                  From this directory, creates the \"%s\"\n\
-                  subdirectory depending on the username, where \n\
-                  dataTestXml.xml file is written.\n\
+SYNOPSIS\n\
+  %s [-o <output image path>] [-h]\n", name);
+
+  fprintf(stdout, "\n\
+OPTIONS:                                               Default\n\
+  -o <output data path>                               %s\n\
+     Set data output path.\n\
+     From this directory, creates the \"%s\"\n\
+     subdirectory depending on the username, where \n\
+     dataTestXml.xml file is written.\n\
                   \n\
-                  -h\n\
-                  Print the help.\n\n",
-                  opath.c_str(), user.c_str());
+  -h\n\
+     Print the help.\n\n", opath.c_str(), user.c_str());
 
-      if (badparam) {
+  if (badparam) {
     fprintf(stderr, "ERROR: \n" );
     fprintf(stderr, "\nBad parameter [%s]\n", badparam);
   }
@@ -258,19 +259,18 @@ void usage(const char *name, const char *badparam, const std::string& opath, con
   \param user : Username.
   \return false if the program has to be stopped, true otherwise.
 */
-bool getOptions(int argc, const char **argv,
-                std::string &opath, const std::string& user)
+bool getOptions(int argc, const char **argv, std::string &opath, const std::string& user)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
-    case 'o': opath = optarg; break;
+    case 'o': opath = optarg_; break;
     case 'h': usage(argv[0], NULL, opath, user); return false; break;
 
     default:
-      usage(argv[0], optarg, opath, user); return false; break;
+      usage(argv[0], optarg_, opath, user); return false; break;
     }
   }
 
@@ -278,7 +278,7 @@ bool getOptions(int argc, const char **argv,
     // standalone param or error
     usage(argv[0], NULL, opath, user);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -293,88 +293,93 @@ bool getOptions(int argc, const char **argv,
 
 int main(int argc, const char** argv)
 {
-  std::string opt_opath;
-  std::string opath;
-  std::string filename;
-  std::string username;
-
-  std::cout <<  "-------------------------------------------------------" << std::endl ;
-  std::cout <<  "  testXmlParser.cpp" <<std::endl << std::endl ;
-  std::cout <<  "  writing and readind data using a xml parser" << std::endl ;
-  std::cout <<  "-------------------------------------------------------" << std::endl ;
-  std::cout << std::endl ;
-
-  // Set the default output path
-#ifdef UNIX
-  opt_opath = "/tmp";
-#elif WIN32
-  opt_opath = "C:\\temp";
+  try {
+    std::string opt_opath;
+    std::string opath;
+    std::string filename;
+    std::string username;
+
+    std::cout <<  "-------------------------------------------------------" << std::endl ;
+    std::cout <<  "  testXmlParser.cpp" <<std::endl << std::endl ;
+    std::cout <<  "  writing and readind data using a xml parser" << std::endl ;
+    std::cout <<  "-------------------------------------------------------" << std::endl ;
+    std::cout << std::endl ;
+
+    // Set the default output path
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
+    opt_opath = "/tmp";
+#elif defined(_WIN32)
+    opt_opath = "C:\\temp";
 #endif
 
-  // Get the user login name
-  vpIoTools::getUserName(username);
+    // Get the user login name
+    vpIoTools::getUserName(username);
 
-  // Read the command line options
-  if (getOptions(argc, argv, opt_opath, username) == false) {
-    exit (-1);
-  }
+    // Read the command line options
+    if (getOptions(argc, argv, opt_opath, username) == false) {
+      exit (-1);
+    }
+
+    // Get the option values
+    if (!opt_opath.empty())
+      opath = opt_opath;
+
+    // Append to the output path string, the login name of the user
+    std::string dirname = opath + vpIoTools::path("/") + username;
+
+    // Test if the output path exist. If no try to create it
+    if (vpIoTools::checkDirectory(dirname) == false) {
+      try {
+        // Create the dirname
+        vpIoTools::makeDirectory(dirname);
+      }
+      catch (...) {
+        usage(argv[0], NULL, opath, username);
+        std::cerr << std::endl
+                  << "ERROR:" << std::endl;
+        std::cerr << "  Cannot create " << dirname << std::endl;
+        std::cerr << "  Check your -o " << opath << " option " << std::endl;
+        exit(-1);
+      }
+    }
+
+    filename = dirname + vpIoTools::path("/") + "dataTestXml.xml";
 
-  // Get the option values
-  if (!opt_opath.empty())
-    opath = opt_opath;
+    // Write data using a parser.
+    {
+      vpExampleDataParser parser1;
 
-  // Append to the output path string, the login name of the user
-  std::string dirname = opath + vpIoTools::path("/") + username;
+      // Acquire data from measurments or tests.
+      parser1.setRange(3.5);
+      parser1.setStep(2);
+      parser1.setSizeFilter(5);
+      parser1.setName("cube");
 
-  // Test if the output path exist. If no try to create it
-  if (vpIoTools::checkDirectory(dirname) == false) {
-    try {
-      // Create the dirname
-      vpIoTools::makeDirectory(dirname);
+      std::cout << "Write data to " << filename << std::endl;
+      parser1.save(filename);
     }
-    catch (...) {
-      usage(argv[0], NULL, opath, username);
-      std::cerr << std::endl
-                << "ERROR:" << std::endl;
-      std::cerr << "  Cannot create " << dirname << std::endl;
-      std::cerr << "  Check your -o " << opath << " option " << std::endl;
-      exit(-1);
+
+    // Read data using another parser.
+    {
+      vpExampleDataParser parser2;
+
+      parser2.parse(filename);
+
+      std::cout << "Read from " << filename << std::endl ;
+      std::cout << "Range : " << parser2.getRange() << std::endl;
+      std::cout << "Step : " << parser2.getStep() << std::endl;
+      std::cout << "Filter size : " << parser2.getSizeFilter() << std::endl;
+      std::cout << "name : " << parser2.getName() << std::endl;
     }
-  }
 
-  filename = dirname + vpIoTools::path("/") + "dataTestXml.xml";
-  
-  // Write data using a parser.
-  {
-    vpExampleDataParser parser1;
-
-    // Acquire data from measurments or tests.  
-    parser1.setRange(3.5);
-    parser1.setStep(2);
-    parser1.setSizeFilter(5);
-    parser1.setName("cube");
-    
-    std::cout << "Write data to " << filename << std::endl;
-    parser1.save(filename);
+    // Clean up memory allocated by the xml library
+    vpXmlParser::cleanup();
+    return 0;
   }
-  
-  // Read data using another parser. 
-  {
-    vpExampleDataParser parser2;
-    
-    parser2.parse(filename);
-    
-    std::cout << "Read from " << filename << std::endl ;
-    std::cout << "Range : " << parser2.getRange() << std::endl;
-    std::cout << "Step : " << parser2.getStep() << std::endl;
-    std::cout << "Filter size : " << parser2.getSizeFilter() << std::endl;
-    std::cout << "name : " << parser2.getName() << std::endl;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-
-  // Clean up memory allocated by the xml library
-  vpXmlParser::cleanup();
-
-  return 0;  
 }
 
 #else
diff --git a/test/tracking/CMakeLists.txt b/test/tracking/CMakeLists.txt
index 43a83546..a6170f72 100644
--- a/test/tracking/CMakeLists.txt
+++ b/test/tracking/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/tracking/testTrackDot.cpp b/test/tracking/testTrackDot.cpp
index 1f527e5e..ba8eb0ee 100644
--- a/test/tracking/testTrackDot.cpp
+++ b/test/tracking/testTrackDot.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testTrackDot.cpp 4323 2013-07-18 09:24:01Z fspindle $
+ * $Id: testTrackDot.cpp 4658 2014-02-09 09:50:14Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -55,7 +55,7 @@
 #include <visp/vpDisplayX.h>
 #include <visp/vpDisplayGTK.h>
 #include <visp/vpDisplayGDI.h>
-#include <visp/vpDot.h>
+#include <visp/vpDot2.h>
 #include <visp/vpFeatureEllipse.h>
 #include <visp/vpCameraParameters.h>
 #include <visp/vpFeatureBuilder.h>
@@ -71,6 +71,10 @@
 // List of allowed command line options
 #define GETOPTARGS	"cdi:h"
 
+bool getOptions(int argc, const char **argv, std::string &ipath,
+                bool &click_allowed, bool &display);
+
+void usage(const char *name, const char *badparam, std::string ipath);
 /*!
 
   Print the program options.
@@ -128,18 +132,18 @@ OPTIONS:                                               Default\n\
 bool getOptions(int argc, const char **argv, std::string &ipath,
                 bool &click_allowed, bool &display)
 {
-  const char *optarg;
+  const char *optarg_;
   int	c;
-  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg)) > 1) {
+  while ((c = vpParseArgv::parse(argc, argv, GETOPTARGS, &optarg_)) > 1) {
 
     switch (c) {
     case 'c': click_allowed = false; break;
     case 'd': display = false; break;
-    case 'i': ipath = optarg; break;
+    case 'i': ipath = optarg_; break;
     case 'h': usage(argv[0], NULL, ipath); return false; break;
 
     default:
-      usage(argv[0], optarg, ipath);
+      usage(argv[0], optarg_, ipath);
       return false; break;
     }
   }
@@ -148,7 +152,7 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
     // standalone param or error
     usage(argv[0], NULL, ipath);
     std::cerr << "ERROR: " << std::endl;
-    std::cerr << "  Bad argument " << optarg << std::endl << std::endl;
+    std::cerr << "  Bad argument " << optarg_ << std::endl << std::endl;
     return false;
   }
 
@@ -159,107 +163,107 @@ bool getOptions(int argc, const char **argv, std::string &ipath,
 int
 main(int argc, const char ** argv)
 {
-  std::string env_ipath;
-  std::string opt_ipath;
-  std::string ipath;
-  std::string dirname;
-  std::string filename;
-  bool opt_click_allowed = true;
-  bool opt_display = true;
-
-  // Get the VISP_IMAGE_PATH environment variable value
-  char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
-  if (ptenv != NULL)
-    env_ipath = ptenv;
-
-  // Set the default input path
-  if (! env_ipath.empty())
-    ipath = env_ipath;
-
-
-  // Read the command line options
-  if (getOptions(argc, argv, opt_ipath,
-                 opt_click_allowed, opt_display) == false) {
-    exit (-1);
-  }
+  try {
+    std::string env_ipath;
+    std::string opt_ipath;
+    std::string ipath;
+    std::string dirname;
+    std::string filename;
+    bool opt_click_allowed = true;
+    bool opt_display = true;
+
+    // Get the VISP_IMAGE_PATH environment variable value
+    char *ptenv = getenv("VISP_INPUT_IMAGE_PATH");
+    if (ptenv != NULL)
+      env_ipath = ptenv;
+
+    // Set the default input path
+    if (! env_ipath.empty())
+      ipath = env_ipath;
+
+
+    // Read the command line options
+    if (getOptions(argc, argv, opt_ipath,
+                   opt_click_allowed, opt_display) == false) {
+      exit (-1);
+    }
 
-  // Get the option values
-  if (!opt_ipath.empty())
-    ipath = opt_ipath;
-
-  // Compare ipath and env_ipath. If they differ, we take into account
-  // the input path comming from the command line option
-  if (!opt_ipath.empty() && !env_ipath.empty()) {
-    if (ipath != env_ipath) {
-      std::cout << std::endl
-                << "WARNING: " << std::endl;
-      std::cout << "  Since -i <visp image path=" << ipath << "> "
-                << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
-                << "  we skip the environment variable." << std::endl;
+    // Get the option values
+    if (!opt_ipath.empty())
+      ipath = opt_ipath;
+
+    // Compare ipath and env_ipath. If they differ, we take into account
+    // the input path comming from the command line option
+    if (!opt_ipath.empty() && !env_ipath.empty()) {
+      if (ipath != env_ipath) {
+        std::cout << std::endl
+                  << "WARNING: " << std::endl;
+        std::cout << "  Since -i <visp image path=" << ipath << "> "
+                  << "  is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
+                  << "  we skip the environment variable." << std::endl;
+      }
     }
-  }
 
-  // Test if an input path is set
-  if (opt_ipath.empty() && env_ipath.empty()){
-    usage(argv[0], NULL, ipath);
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
-              << std::endl
-              << "  environment variable to specify the location of the " << std::endl
-              << "  image path where test images are located." << std::endl << std::endl;
-    exit(-1);
-  }
+    // Test if an input path is set
+    if (opt_ipath.empty() && env_ipath.empty()){
+      usage(argv[0], NULL, ipath);
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
+                << std::endl
+                << "  environment variable to specify the location of the " << std::endl
+                << "  image path where test images are located." << std::endl << std::endl;
+      exit(-1);
+    }
 
 
-  // Declare an image, this is a gray level image (unsigned char)
-  // it size is not defined yet, it will be defined when the image will
-  // read on the disk
-  vpImage<unsigned char> I ;
+    // Declare an image, this is a gray level image (unsigned char)
+    // it size is not defined yet, it will be defined when the image will
+    // read on the disk
+    vpImage<unsigned char> I ;
 
-  // Set the path location of the image sequence
-  dirname = ipath +  vpIoTools::path("/ViSP-images/ellipse/");
+    // Set the path location of the image sequence
+    dirname = ipath +  vpIoTools::path("/ViSP-images/ellipse/");
 
-  // Build the name of the image file
-  filename = dirname + "ellipse.pgm";
+    // Build the name of the image file
+    filename = dirname + "ellipse.pgm";
 
-  // Read the PGM image named "filename" on the disk, and put the
-  // bitmap into the image structure I.  I is initialized to the
-  // correct size
-  //
-  // exception readPGM may throw various exception if, for example,
-  // the file does not exist, or if the memory cannot be allocated
-  try{
-    vpCTRACE << "Load: " << filename << std::endl;
+    // Read the PGM image named "filename" on the disk, and put the
+    // bitmap into the image structure I.  I is initialized to the
+    // correct size
+    //
+    // exception readPGM may throw various exception if, for example,
+    // the file does not exist, or if the memory cannot be allocated
+    try{
+      vpCTRACE << "Load: " << filename << std::endl;
 
-    vpImageIo::read(I, filename) ;
-  }
-  catch(...)
-  {
-    // an exception is throwned if an exception from readPGM has been catched
-    // here this will result in the end of the program
-    // Note that another error message has been printed from readPGM
-    // to give more information about the error
-    std::cerr << std::endl
-              << "ERROR:" << std::endl;
-    std::cerr << "  Cannot read " << filename << std::endl;
-    std::cerr << "  Check your -i " << ipath << " option " << std::endl
-              << "  or VISP_INPUT_IMAGE_PATH environment variable."
-              << std::endl;
-    exit(-1);
-  }
+      vpImageIo::read(I, filename) ;
+    }
+    catch(...)
+    {
+      // an exception is throwned if an exception from readPGM has been catched
+      // here this will result in the end of the program
+      // Note that another error message has been printed from readPGM
+      // to give more information about the error
+      std::cerr << std::endl
+                << "ERROR:" << std::endl;
+      std::cerr << "  Cannot read " << filename << std::endl;
+      std::cerr << "  Check your -i " << ipath << " option " << std::endl
+                << "  or VISP_INPUT_IMAGE_PATH environment variable."
+                << std::endl;
+      exit(-1);
+    }
 
-  // We open a window using either X11, GTK or GDI.
+    // We open a window using either X11, GTK or GDI.
 #if defined VISP_HAVE_X11
-  vpDisplayX display;
+    vpDisplayX display;
 #elif defined VISP_HAVE_GTK
-  vpDisplayGTK display;
+    vpDisplayGTK display;
 #elif defined VISP_HAVE_GDI
-  vpDisplayGDI display;
+    vpDisplayGDI display;
 #endif
 
-  if (opt_display) {
-    try{
+    if (opt_display) {
       // Display size is automatically defined by the image (I) size
       display.init(I, 100, 100,"Display...") ;
       // Display the image
@@ -271,38 +275,40 @@ main(int argc, const char ** argv)
       //Flush the display
       vpDisplay::flush(I) ;
     }
-    catch(...)
-    {
-      vpERROR_TRACE("Error while displaying the image") ;
-      exit(-1);
-    }
-  }
 
-  vpDot dot ;
-  dot.setMaxDotSize(0.50); // dot max size = 50% of the image size
-  vpImagePoint ip;
-  ip.set_i( 140 );
-  ip.set_j( 140 );
-  dot.initTracking(I, ip) ;
-  if (opt_display) {
-    dot.setGraphics(true) ;
-  }
-  else {
-    dot.setGraphics(false) ;
-  }
-  dot.setComputeMoments(true) ;
-  dot.track(I) ;
-
-  vpFeatureEllipse e ;
-
-  vpCameraParameters cam ;
-  vpFeatureBuilder::create(e,cam,dot) ;
-  if (opt_display) {
-    e.display(cam, I, vpColor::red) ;
-    if (opt_click_allowed) {
-      std::cout << "A click to exit..." << std::endl;
-      vpDisplay::getClick(I) ;
+    vpDot2 dot ;
+	std::cout << "debut 1\n";
+	//dot.setMaxDotSize(0.50); // dot max size = 50% of the image size
+    vpImagePoint ip;
+    ip.set_i( 140 );
+    ip.set_j( 140 );
+	dot.initTracking(I, ip);
+    if (opt_display) {
+      dot.setGraphics(true) ;
     }
+    else {
+      dot.setGraphics(false) ;
+    }
+	dot.setComputeMoments(true);
+    dot.track(I) ;
+
+    vpFeatureEllipse e ;
+
+    vpCameraParameters cam ;
+    vpFeatureBuilder::create(e,cam,dot) ;
+    if (opt_display) {
+      e.display(cam, I, vpColor::red) ;
+	  vpDisplay::flush(I);
+      if (opt_click_allowed) {
+        std::cout << "A click to exit..." << std::endl;
+        vpDisplay::getClick(I) ;
+      }
+    }
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
 #else
diff --git a/test/visual-feature/CMakeLists.txt b/test/visual-feature/CMakeLists.txt
index 5b1c83e7..f62c16b8 100755
--- a/test/visual-feature/CMakeLists.txt
+++ b/test/visual-feature/CMakeLists.txt
@@ -1,9 +1,9 @@
 #############################################################################
 #
-# $Id: CMakeLists.txt 4056 2013-01-05 13:04:42Z fspindle $
+# $Id: CMakeLists.txt 4574 2014-01-09 08:48:51Z fspindle $
 #
 # This file is part of the ViSP software.
-# Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+# Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
 # 
 # This software is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
diff --git a/test/visual-feature/testFeature.cpp b/test/visual-feature/testFeature.cpp
index c6fe49d0..cd8a2cc8 100644
--- a/test/visual-feature/testFeature.cpp
+++ b/test/visual-feature/testFeature.cpp
@@ -1,9 +1,9 @@
 /****************************************************************************
  *
- * $Id: testFeature.cpp 4056 2013-01-05 13:04:42Z fspindle $
+ * $Id: testFeature.cpp 4574 2014-01-09 08:48:51Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -96,8 +96,8 @@ int main()
     }
     return 0;
   }
-  catch(vpServoException e) {
-    std::cout << e << std::endl;
-    return -1;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
 }
diff --git a/test/visual-feature/testFeatureMoment.cpp b/test/visual-feature/testFeatureMoment.cpp
index fd5f8b52..cfd2ada0 100644
--- a/test/visual-feature/testFeatureMoment.cpp
+++ b/test/visual-feature/testFeatureMoment.cpp
@@ -3,7 +3,7 @@
  * $Id: testFeatureMoment.cpp 3323 2011-09-13 15:23:56Z fnovotny $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  *
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -51,43 +51,36 @@
 #include <iostream>
 
 //initialize scene in the interface
-void initScene();
+void initScene(const vpHomogeneousMatrix& cMo, const vpHomogeneousMatrix& cdMo,
+               vpMomentObject &src, vpMomentObject &dst);
 
-void init(vpHomogeneousMatrix& cMo, vpHomogeneousMatrix& cdMo);
-vpMatrix execute(); //launch the test
-void _planeToABC(vpPlane& pl, double& A,double& B, double& C);
+vpMatrix execute(const vpHomogeneousMatrix& cMo, const vpHomogeneousMatrix& cdMo,
+                 vpMomentObject &src, vpMomentObject &dst); //launch the test
+void planeToABC(const vpPlane& pl, double& A,double& B, double& C);
 int test(double x,double y,double z,double alpha);
 
-//start and destination positioning matrices
-vpHomogeneousMatrix cMo;
-vpHomogeneousMatrix cdMo;
-
-vpServo::vpServoIteractionMatrixType interaction_type; //current or desired
-
-//source and destination objects for moment manipulation
-vpMomentObject src(6);
-vpMomentObject dst(6);
-
-using namespace std;
-
 //Compute a set of parallel positions and check if the matrix is in the right form;
 int main()
 {
-  int sum=0;
-  for(double i=-0.2;i<0.2;i+=0.1){
-    for(double j=-0.2;j<0.2;j+=0.1){
-      for(double k=-vpMath::rad(30);k<vpMath::rad(30);k+=vpMath::rad(10)){
-        for(double l=0.5;l<1.5;l+=0.1){
-          sum+=test(i,j,l,k);
+  try {
+    int sum=0;
+    for(double i=-0.2;i<0.2;i+=0.1){
+      for(double j=-0.2;j<0.2;j+=0.1){
+        for(double k=-vpMath::rad(30);k<vpMath::rad(30);k+=vpMath::rad(10)){
+          for(double l=0.5;l<1.5;l+=0.1){
+            sum+=test(i,j,l,k);
+          }
         }
-      }
 
+      }
     }
+    if(sum<0) return -1;
+    else return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
   }
-
-
-  if(sum<0) return -1;
-  else return 0;
 }
 
 int test(double x,double y,double z,double alpha){
@@ -96,48 +89,51 @@ int test(double x,double y,double z,double alpha){
   //Desired pose
   vpHomogeneousMatrix cdMo(vpHomogeneousMatrix(0.0,0.0,1.0,vpMath::rad(0),vpMath::rad(0),-vpMath::rad(0)));
 
+  //source and destination objects for moment manipulation
+  vpMomentObject src(6);
+  vpMomentObject dst(6);
+
   //init and run the simulation
-  init(cMo,cdMo);
-  vpMatrix mat = execute();
+  initScene(cMo, cdMo, src, dst); //initialize graphical scene (for interface)
+
+  vpMatrix mat = execute(cMo, cdMo, src, dst);
 
-  if(fabs(mat[0][0]-(-1)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[0][1]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[0][2]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[0][0]-(-1)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[0][1]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[0][2]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
 
-  if(fabs(mat[1][0]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[1][1]-(-1)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[1][2]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[1][0]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[1][1]-(-1)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[1][2]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
 
-  if(fabs(mat[2][0]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[2][1]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[2][2]-(-1)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[2][5]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[2][0]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[2][1]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[2][2]-(-1)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[2][5]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
 
-  if(fabs(mat[3][0]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[3][1]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[3][2]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[3][5]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[3][0]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[3][1]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[3][2]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[3][5]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
 
-  if(fabs(mat[4][0]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[4][1]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[4][2]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[4][5]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[4][0]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[4][1]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[4][2]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[4][5]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
 
-  if(fabs(mat[5][0]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[5][1]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[5][2]-(0)) > numeric_limits<double>::epsilon()*1e10) return -1;
-  if(fabs(mat[5][5]-(-1)) > numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[5][0]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[5][1]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[5][2]-(0)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
+  if(fabs(mat[5][5]-(-1)) > std::numeric_limits<double>::epsilon()*1e10) return -1;
 
   return 0;
 }
 
-
-
-
-
-void initScene(){
-  vector<vpPoint> src_pts;
-  vector<vpPoint> dst_pts;
+void initScene(const vpHomogeneousMatrix& cMo, const vpHomogeneousMatrix& cdMo,
+               vpMomentObject &src, vpMomentObject &dst)
+{
+  std::vector<vpPoint> src_pts;
+  std::vector<vpPoint> dst_pts;
 
   double x[5] = { 0.2, 0.2,-0.2,-0.2, 0.2 };
   double y[5] = {-0.1, 0.1, 0.1,-0.1,-0.1 };
@@ -160,21 +156,14 @@ void initScene(){
   }
   dst.setType(vpMomentObject::DENSE_POLYGON);
   dst.fromVector(dst_pts);
-
 }
 
 
-void init(vpHomogeneousMatrix& _cMo, vpHomogeneousMatrix& _cdMo)
+vpMatrix execute(const vpHomogeneousMatrix& cMo, const vpHomogeneousMatrix& cdMo,
+                 vpMomentObject &src, vpMomentObject &dst)
 {
-  cMo = _cMo;
-  cdMo = _cdMo;
-  interaction_type = vpServo::CURRENT;
+  vpServo::vpServoIteractionMatrixType interaction_type = vpServo::CURRENT; ; //current or desired
 
-
-  initScene(); //initialize graphical scene (for interface)
-}
-
-vpMatrix execute(){
   vpServo task;
   task.setServo(vpServo::EYEINHAND_CAMERA);
   //A,B,C parameters of source and destination plane
@@ -186,11 +175,11 @@ vpMatrix execute(){
   vpPlane pl;
   pl.setABCD(0,0,1.0,0);
   pl.changeFrame(cMo);
-  _planeToABC(pl,A,B,C);
+  planeToABC(pl,A,B,C);
 
   pl.setABCD(0,0,1.0,0);
   pl.changeFrame(cdMo);
-  _planeToABC(pl,Ad,Bd,Cd);
+  planeToABC(pl,Ad,Bd,Cd);
 
   //extracting initial position (actually we only care about Zdst)
   vpTranslationVector vec;
@@ -228,8 +217,8 @@ vpMatrix execute(){
 }
 
 
-void _planeToABC(vpPlane& pl, double& A,double& B, double& C){
-
+void planeToABC(const vpPlane& pl, double& A,double& B, double& C)
+{
   A=-pl.getA()/pl.getD();
   B=-pl.getB()/pl.getD();
   C=-pl.getC()/pl.getD();
diff --git a/test/visual-feature/testFeatureSegment.cpp b/test/visual-feature/testFeatureSegment.cpp
index aef937bf..d82915a6 100644
--- a/test/visual-feature/testFeatureSegment.cpp
+++ b/test/visual-feature/testFeatureSegment.cpp
@@ -3,7 +3,7 @@
  * $Id: testFeature.cpp 3530 2012-01-03 10:52:12Z fspindle $
  *
  * This file is part of the ViSP software.
- * Copyright (C) 2005 - 2013 by INRIA. All rights reserved.
+ * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
  * 
  * This software is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -69,19 +69,20 @@
 */
 int main(int argc, const char **argv)
 {  
+  try {
 #if (defined (VISP_HAVE_X11) || defined (VISP_HAVE_GDI))
-  int opt_display = 1;
-  int opt_curves = 1;
+    int opt_display = 1;
+    int opt_curves = 1;
 #endif
-  int opt_normalized = 1;
+    int opt_normalized = 1;
 
-  // Parse the command line to set the variables
-  vpParseArgv::vpArgvInfo argTable[] =
+    // Parse the command line to set the variables
+    vpParseArgv::vpArgvInfo argTable[] =
     {
- #if (defined (VISP_HAVE_X11) || defined (VISP_HAVE_GDI))
+  #if (defined (VISP_HAVE_X11) || defined (VISP_HAVE_GDI))
       {"-d", vpParseArgv::ARGV_CONSTANT, 0, (char *) &opt_display,
        "Disable display and graphics viewer."},
- #endif
+  #endif
       {"-normalized", vpParseArgv::ARGV_INT, (char*) NULL, (char *) &opt_normalized,
        "1 to use normalized features, 0 for non normalized."},
       {"-h", vpParseArgv::ARGV_HELP, (char*) NULL, (char *) NULL,
@@ -89,128 +90,86 @@ int main(int argc, const char **argv)
       {(char*) NULL, vpParseArgv::ARGV_END, (char*) NULL, (char*) NULL, (char*) NULL}
     } ;
 
-  // Read the command line options
-  if(vpParseArgv::parse(&argc, argv, argTable,
-            vpParseArgv::ARGV_NO_LEFTOVERS |
-            vpParseArgv::ARGV_NO_ABBREV |
-            vpParseArgv::ARGV_NO_DEFAULTS)) {
-    return (false);
-  }
+    // Read the command line options
+    if(vpParseArgv::parse(&argc, argv, argTable,
+                          vpParseArgv::ARGV_NO_LEFTOVERS |
+                          vpParseArgv::ARGV_NO_ABBREV |
+                          vpParseArgv::ARGV_NO_DEFAULTS)) {
+      return (false);
+    }
 
-  std::cout << "Used options: " << std::endl;
+    std::cout << "Used options: " << std::endl;
 #if (defined (VISP_HAVE_X11) || defined (VISP_HAVE_GDI))
-  opt_curves = opt_display;
-  std::cout << " - display   : " << opt_display << std::endl;
-  std::cout << " - curves    : " << opt_curves << std::endl;
+    opt_curves = opt_display;
+    std::cout << " - display   : " << opt_display << std::endl;
+    std::cout << " - curves    : " << opt_curves << std::endl;
 #endif
-  std::cout << " - normalized: " << opt_normalized << std::endl;
+    std::cout << " - normalized: " << opt_normalized << std::endl;
 
-  vpCameraParameters cam(640.,480.,320.,240.);
+    vpCameraParameters cam(640.,480.,320.,240.);
 
 #if defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI)
-  vpDisplay *display = NULL;
-  if (opt_display) {
+    vpDisplay *display = NULL;
+    if (opt_display) {
 #if defined(VISP_HAVE_X11)
-    display = new vpDisplayX;
+      display = new vpDisplayX;
 #elif defined VISP_HAVE_GDI
-    display = new vpDisplayGDI;
+      display = new vpDisplayGDI;
 #endif
-  }
+    }
 #endif
-  vpImage<unsigned char> I(480,640,0);
+    vpImage<unsigned char> I(480,640,0);
 
 #if (defined (VISP_HAVE_X11) || defined (VISP_HAVE_GDI))
-  if (opt_display)
-    display->init(I);
+    if (opt_display)
+      display->init(I);
 #endif
 
-  vpHomogeneousMatrix cMo (-0.5, 0.5, 4., vpMath::rad(10), vpMath::rad(20), vpMath::rad(90));
-  vpHomogeneousMatrix cdMo(0., 0., 1., vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
+    vpHomogeneousMatrix cMo (-0.5, 0.5, 4., vpMath::rad(10), vpMath::rad(20), vpMath::rad(90));
+    vpHomogeneousMatrix cdMo(0., 0., 1., vpMath::rad(0), vpMath::rad(0), vpMath::rad(0));
 
-  vpPoint P[4]; // 4 points in the object frame
-  P[0].setWorldCoordinates( .1,  .1, 0.);
-  P[1].setWorldCoordinates(-.1,  .1, 0.);
-  P[2].setWorldCoordinates(-.1, -.1, 0.);
-  P[3].setWorldCoordinates( .1, -.1, 0.);
+    vpPoint P[4]; // 4 points in the object frame
+    P[0].setWorldCoordinates( .1,  .1, 0.);
+    P[1].setWorldCoordinates(-.1,  .1, 0.);
+    P[2].setWorldCoordinates(-.1, -.1, 0.);
+    P[3].setWorldCoordinates( .1, -.1, 0.);
 
-  vpPoint Pd[4]; // 4 points in the desired camera frame
-  for (int i=0; i<4; i++) {
-    Pd[i] = P[i];
-    Pd[i].project(cdMo);
-  }
-  vpPoint Pc[4]; // 4 points in the current camera frame
-  for (int i=0; i<4; i++) {
-    Pc[i] = P[i];
-    Pc[i].project(cMo);
-  }
-  
-  vpFeatureSegment seg_cur[2], seg_des[2]; // Current and desired features
-  for (int i=0; i <2; i++)
-  {
-    if (opt_normalized) {
-      seg_cur[i].setNormalized(true);
-      seg_des[i].setNormalized(true);
+    vpPoint Pd[4]; // 4 points in the desired camera frame
+    for (int i=0; i<4; i++) {
+      Pd[i] = P[i];
+      Pd[i].project(cdMo);
     }
-    else {
-      seg_cur[i].setNormalized(false);
-      seg_des[i].setNormalized(false);
+    vpPoint Pc[4]; // 4 points in the current camera frame
+    for (int i=0; i<4; i++) {
+      Pc[i] = P[i];
+      Pc[i].project(cMo);
     }
-    vpFeatureBuilder::create(seg_cur[i], Pc[i*2], Pc[i*2+1]);
-    vpFeatureBuilder::create(seg_des[i], Pd[i*2], Pd[i*2+1]);
-    seg_cur[i].print();
-    seg_des[i].print();
-  }
-  
-  //define visual servoing task
-  vpServo task;
-  task.setServo(vpServo::EYEINHAND_CAMERA);
-  task.setInteractionMatrixType(vpServo::CURRENT);
-  task.setLambda(1) ;
-
-  for (int i=0; i <2; i++)
-    task.addFeature(seg_cur[i], seg_des[i]);
-  
-#if (defined (VISP_HAVE_X11) || defined(VISP_HAVE_GDI))
-  if (opt_display) {
-    vpDisplay::display(I);
-    for (int i=0; i <2; i++) {
-      seg_cur[i].display(cam, I, vpColor::red);
-      seg_des[i].display(cam, I, vpColor::green);
-      vpDisplay::flush(I);
+
+    vpFeatureSegment seg_cur[2], seg_des[2]; // Current and desired features
+    for (int i=0; i <2; i++)
+    {
+      if (opt_normalized) {
+        seg_cur[i].setNormalized(true);
+        seg_des[i].setNormalized(true);
+      }
+      else {
+        seg_cur[i].setNormalized(false);
+        seg_des[i].setNormalized(false);
+      }
+      vpFeatureBuilder::create(seg_cur[i], Pc[i*2], Pc[i*2+1]);
+      vpFeatureBuilder::create(seg_des[i], Pd[i*2], Pd[i*2+1]);
+      seg_cur[i].print();
+      seg_des[i].print();
     }
-  }
-#endif
-  
-#if (defined (VISP_HAVE_X11) || defined (VISP_HAVE_GDI))
-  vpPlot *graph = NULL;
-  if (opt_curves)
-  {
-    //Create a window (700 by 700) at position (100, 200) with two graphics
-    graph = new vpPlot(2, 500, 500, 700, 10, "Curves...");
-
-    //The first graphic contains 3 curve and the second graphic contains 3 curves
-    graph->initGraph(0,6);
-    graph->initGraph(1,8);
-//     graph->setTitle(0, "Velocities");
-//     graph->setTitle(1, "Error s-s*");
-  }
-#endif
 
-  //param robot
-  vpRobotCamera robot ;
-  float sampling_time = 0.010f ; // Sampling period in seconds
-  robot.setSamplingTime(sampling_time) ;
-  robot.setPosition(cMo) ;
-  int iter=0;
-
-  do{
-    double t = vpTime::measureTimeMs();
-    robot.getPosition(cMo);
-    for (int i=0; i <4; i++)
-      Pc[i].project(cMo);
+    //define visual servoing task
+    vpServo task;
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::CURRENT);
+    task.setLambda(1) ;
 
     for (int i=0; i <2; i++)
-      vpFeatureBuilder::create(seg_cur[i], Pc[i*2], Pc[i*2+1]);
+      task.addFeature(seg_cur[i], seg_des[i]);
 
 #if (defined (VISP_HAVE_X11) || defined(VISP_HAVE_GDI))
     if (opt_display) {
@@ -223,34 +182,82 @@ int main(int argc, const char **argv)
     }
 #endif
 
-    vpColVector v = task.computeControlLaw();
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
-    
 #if (defined (VISP_HAVE_X11) || defined (VISP_HAVE_GDI))
+    vpPlot *graph = NULL;
     if (opt_curves)
     {
-      graph->plot(0, iter, v); // plot velocities applied to the robot
-      graph->plot(1, iter, task.getError()); // plot error vector
+      //Create a window (700 by 700) at position (100, 200) with two graphics
+      graph = new vpPlot(2, 500, 500, 700, 10, "Curves...");
+
+      //The first graphic contains 3 curve and the second graphic contains 3 curves
+      graph->initGraph(0,6);
+      graph->initGraph(1,8);
+      //     graph->setTitle(0, "Velocities");
+      //     graph->setTitle(1, "Error s-s*");
     }
 #endif
 
-    vpTime::wait(t, sampling_time * 1000); // Wait 10 ms    
-    iter ++;
-    
-  } while(( task.getError() ).sumSquare() > 0.0005);
-  
-  // A call to kill() is requested here to destroy properly the current
-  // and desired feature lists.
-  task.kill();
+    //param robot
+    vpRobotCamera robot ;
+    float sampling_time = 0.010f ; // Sampling period in seconds
+    robot.setSamplingTime(sampling_time) ;
+    robot.setPosition(cMo) ;
+    int iter=0;
+
+    do{
+      double t = vpTime::measureTimeMs();
+      robot.getPosition(cMo);
+      for (int i=0; i <4; i++)
+        Pc[i].project(cMo);
+
+      for (int i=0; i <2; i++)
+        vpFeatureBuilder::create(seg_cur[i], Pc[i*2], Pc[i*2+1]);
+
+#if (defined (VISP_HAVE_X11) || defined(VISP_HAVE_GDI))
+      if (opt_display) {
+        vpDisplay::display(I);
+        for (int i=0; i <2; i++) {
+          seg_cur[i].display(cam, I, vpColor::red);
+          seg_des[i].display(cam, I, vpColor::green);
+          vpDisplay::flush(I);
+        }
+      }
+#endif
+
+      vpColVector v = task.computeControlLaw();
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v) ;
+
+#if (defined (VISP_HAVE_X11) || defined (VISP_HAVE_GDI))
+      if (opt_curves)
+      {
+        graph->plot(0, iter, v); // plot velocities applied to the robot
+        graph->plot(1, iter, task.getError()); // plot error vector
+      }
+#endif
+
+      vpTime::wait(t, sampling_time * 1000); // Wait 10 ms
+      iter ++;
+
+    } while(( task.getError() ).sumSquare() > 0.0005);
+
+    // A call to kill() is requested here to destroy properly the current
+    // and desired feature lists.
+    task.kill();
 
 #if (defined (VISP_HAVE_X11) || defined (VISP_HAVE_GDI))
-  if (graph != NULL)
-    delete graph;
+    if (graph != NULL)
+      delete graph;
 #endif
 #if (defined (VISP_HAVE_X11) || defined (VISP_HAVE_GDI))
-  if (opt_display && display != NULL)
-    delete display;
+    if (opt_display && display != NULL)
+      delete display;
 #endif
 
-  std::cout << "final error=" << ( task.getError() ).sumSquare() << std::endl;  
+    std::cout << "final error=" << ( task.getError() ).sumSquare() << std::endl;
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
 }
diff --git a/tutorial/CMakeLists.txt b/tutorial/CMakeLists.txt
index d713a785..e89e18e3 100644
--- a/tutorial/CMakeLists.txt
+++ b/tutorial/CMakeLists.txt
@@ -2,15 +2,18 @@ project(ViSP-tutorial)
 
 cmake_minimum_required(VERSION 2.6)
 
-subdirs(computer-vision)
-subdirs(grabber)
-subdirs(image)
-subdirs(robot/pioneer)
-subdirs(simulator/image)
-subdirs(tracking/blob)
-subdirs(tracking/keypoint)
-subdirs(tracking/model-based/edges)
-subdirs(tracking/model-based/hybrid)
-subdirs(tracking/model-based/keypoint)
-subdirs(tracking/moving-edges)
-subdirs(visual-servo/ibvs)
+add_subdirectory(computer-vision)
+add_subdirectory(grabber)
+add_subdirectory(image)
+add_subdirectory(matching)
+add_subdirectory(robot/pioneer)
+add_subdirectory(simulator/image)
+add_subdirectory(trace)
+add_subdirectory(tracking/blob)
+add_subdirectory(tracking/keypoint)
+add_subdirectory(tracking/model-based/edges)
+add_subdirectory(tracking/model-based/hybrid)
+add_subdirectory(tracking/model-based/keypoint)
+add_subdirectory(tracking/template-tracker)
+add_subdirectory(tracking/moving-edges)
+add_subdirectory(visual-servo/ibvs)
diff --git a/tutorial/computer-vision/CMakeLists.txt b/tutorial/computer-vision/CMakeLists.txt
index 83f990dd..002df71f 100644
--- a/tutorial/computer-vision/CMakeLists.txt
+++ b/tutorial/computer-vision/CMakeLists.txt
@@ -3,20 +3,19 @@ project(tutorial-computer-vision)
 cmake_minimum_required(VERSION 2.6)
 
 find_package(VISP REQUIRED)
-if(VISP_FOUND)
-  include(${VISP_USE_FILE})
-endif(VISP_FOUND)
 
-# build the examples
-add_executable(tutorial-pose-from-points-image tutorial-pose-from-points-image.cpp)
-add_executable(tutorial-pose-from-points-tracking tutorial-pose-from-points-tracking.cpp)
+set(tutorial_cpp
+  tutorial-homography-from-points.cpp
+  tutorial-pose-from-points-image.cpp
+  tutorial-pose-from-points-tracking.cpp)
 
-# copy the data
-get_target_property(target_location tutorial-pose-from-points-image LOCATION)
-get_filename_component(target_location "${target_location}" PATH)
-set(data "${CMAKE_CURRENT_SOURCE_DIR}/square.pgm" )
-add_custom_command(
-  TARGET tutorial-pose-from-points-image
-  POST_BUILD
-  COMMAND ${CMAKE_COMMAND} -E copy "${data}" "${target_location}"
-)
+set(tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/square.pgm" )
+
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
+
+# Copy the data files to the same location than the target
+foreach(data ${tutorial_data})
+  visp_copy_data(tutorial-pose-from-points-image.cpp ${data})
+endforeach()
diff --git a/tutorial/computer-vision/tutorial-homography-from-points.cpp b/tutorial/computer-vision/tutorial-homography-from-points.cpp
new file mode 100644
index 00000000..f4ca29a3
--- /dev/null
+++ b/tutorial/computer-vision/tutorial-homography-from-points.cpp
@@ -0,0 +1,63 @@
+/*! \example tutorial-homography-from-points.cpp */
+#include <visp/vpHomography.h>
+#include <visp/vpMeterPixelConversion.h>
+
+int main()
+{
+  double L = 0.1;
+  std::vector<vpPoint> oP(4);
+  oP[0].setWorldCoordinates( -L,-L,   0);
+  oP[1].setWorldCoordinates(2*L,-L,   0);
+  oP[2].setWorldCoordinates(  L, 3*L, 0);
+  oP[3].setWorldCoordinates( -L, 4*L, 0);
+
+  vpHomogeneousMatrix bMo(0.1, 0, 1,   0, vpMath::rad(15), 0);
+  vpHomogeneousMatrix aMb(0.2, -0.1, 0.1, vpMath::rad(-3), vpMath::rad(20), vpMath::rad(5));
+  vpHomogeneousMatrix aMo = aMb*bMo;
+
+  std::vector<vpPoint> aP(4), bP(4);
+  std::vector<double> xa(4), ya(4), xb(4), yb(4);
+  for(unsigned int i=0 ; i < 4; i++)
+  {
+    oP[i].project(aMo);
+    xa[i] = oP[i].get_x();
+    ya[i] = oP[i].get_y();
+    oP[i].project(bMo);
+    xb[i] = oP[i].get_x();
+    yb[i] = oP[i].get_y();
+  }
+
+  vpHomography aHb ;
+  vpHomography::DLT(xb, yb, xa, ya, aHb, true);
+  std::cout << "Estimated homography using DLT:\n" << aHb/aHb[2][2] << std::endl;
+
+  vpHomography::HLM(xb, yb, xa, ya, true, aHb);
+  std::cout << "Estimated homography using HLM:\n" << aHb/aHb[2][2] << std::endl;
+
+  vpRotationMatrix aRb;
+  vpTranslationVector atb;
+  vpColVector n;
+  aHb.computeDisplacement(aRb, atb, n);
+
+  std::cout << "\nEstimated displacement:"  << std::endl;
+  std::cout << " atb: " << atb.t() << std::endl;
+  vpThetaUVector atub;
+  atub.buildFrom(aRb);
+  std::cout << " athetaub: ";
+  for(unsigned int i=0; i<3; i++)
+    std::cout << vpMath::deg(atub[i]) << " ";
+  std::cout << std::endl;
+  std::cout << " n: " << n.t() << std::endl;
+
+  vpImagePoint iPa, iPb;
+  vpCameraParameters cam;
+  vpMeterPixelConversion::convertPoint(cam, xb[3], yb[3], iPb);
+  vpMeterPixelConversion::convertPoint(cam, xa[3], ya[3], iPa);
+
+  std::cout << "Ground truth: Point 3 in pixels in frame b: " << iPb << std::endl;
+  std::cout << "Ground truth: Point 3 in pixels in frame a: " << iPa << std::endl;
+
+  // Project the position in pixel of point 3 from the homography
+  std::cout << "Estimation from homography: Point 3 in pixels in frame a: "
+            << vpHomography::project(cam, aHb, iPb) << std::endl;
+}
diff --git a/tutorial/computer-vision/tutorial-pose-from-points-image.cpp b/tutorial/computer-vision/tutorial-pose-from-points-image.cpp
index b310f500..2ed43da5 100644
--- a/tutorial/computer-vision/tutorial-pose-from-points-image.cpp
+++ b/tutorial/computer-vision/tutorial-pose-from-points-image.cpp
@@ -6,6 +6,9 @@
 #include <visp/vpPixelMeterConversion.h>
 #include <visp/vpPose.h>
 
+void computePose(std::vector<vpPoint> &point, const std::vector<vpDot2> &dot,
+                 const vpCameraParameters &cam, bool init, vpHomogeneousMatrix &cMo);
+
 void computePose(std::vector<vpPoint> &point, const std::vector<vpDot2> &dot,
                  const vpCameraParameters &cam, bool init, vpHomogeneousMatrix &cMo)
 {
@@ -23,44 +26,49 @@ void computePose(std::vector<vpPoint> &point, const std::vector<vpDot2> &dot,
 
 int main()
 {
-  vpImage<unsigned char> I;
-  vpImageIo::read(I, "square.pgm");
+  try {
+    vpImage<unsigned char> I;
+    vpImageIo::read(I, "square.pgm");
 
 #if defined(VISP_HAVE_X11)
-  vpDisplayX d(I);
+    vpDisplayX d(I);
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI d(I);
+    vpDisplayGDI d(I);
 #endif
 
-  vpCameraParameters cam(840, 840, I.getWidth()/2, I.getHeight()/2);
-  std::vector<vpDot2> dot(4);
-  dot[0].initTracking(I, vpImagePoint(193, 157));
-  dot[1].initTracking(I, vpImagePoint(203, 366));
-  dot[2].initTracking(I, vpImagePoint(313, 402));
-  dot[3].initTracking(I, vpImagePoint(304, 133));
-  std::vector<vpPoint> point(4);
-  point[0].setWorldCoordinates(-0.06, -0.06, 0);
-  point[1].setWorldCoordinates( 0.06, -0.06, 0);
-  point[2].setWorldCoordinates( 0.06,  0.06, 0);
-  point[3].setWorldCoordinates(-0.06,  0.06, 0);
-  vpHomogeneousMatrix cMo;
-  bool init = true;
+    vpCameraParameters cam(840, 840, I.getWidth()/2, I.getHeight()/2);
+    std::vector<vpDot2> dot(4);
+    dot[0].initTracking(I, vpImagePoint(193, 157));
+    dot[1].initTracking(I, vpImagePoint(203, 366));
+    dot[2].initTracking(I, vpImagePoint(313, 402));
+    dot[3].initTracking(I, vpImagePoint(304, 133));
+    std::vector<vpPoint> point(4);
+    point[0].setWorldCoordinates(-0.06, -0.06, 0);
+    point[1].setWorldCoordinates( 0.06, -0.06, 0);
+    point[2].setWorldCoordinates( 0.06,  0.06, 0);
+    point[3].setWorldCoordinates(-0.06,  0.06, 0);
+    vpHomogeneousMatrix cMo;
+    bool init = true;
 
-  while(1){
-    vpImageIo::read(I, "square.pgm");
-    vpDisplay::display(I);
-    for (unsigned int i=0; i < dot.size(); i ++) {
-      dot[i].setGraphics(true);
-      dot[i].track(I);
-    }
-    computePose(point, dot, cam, init, cMo);
-    vpDisplay::displayFrame(I, cMo, cam, 0.05, vpColor::none);
-    vpDisplay::flush(I);
+    while(1){
+      vpImageIo::read(I, "square.pgm");
+      vpDisplay::display(I);
+      for (unsigned int i=0; i < dot.size(); i ++) {
+        dot[i].setGraphics(true);
+        dot[i].track(I);
+      }
+      computePose(point, dot, cam, init, cMo);
+      vpDisplay::displayFrame(I, cMo, cam, 0.05, vpColor::none);
+      vpDisplay::flush(I);
 
-    if (init) init = false; // turn off pose initialisation
+      if (init) init = false; // turn off pose initialisation
 
-    if (vpDisplay::getClick(I, false)) break;
+      if (vpDisplay::getClick(I, false)) break;
 
-    vpTime::wait(40);
+      vpTime::wait(40);
+    }
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
 }
diff --git a/tutorial/computer-vision/tutorial-pose-from-points-tracking.cpp b/tutorial/computer-vision/tutorial-pose-from-points-tracking.cpp
index aa000b87..68cd68c2 100644
--- a/tutorial/computer-vision/tutorial-pose-from-points-tracking.cpp
+++ b/tutorial/computer-vision/tutorial-pose-from-points-tracking.cpp
@@ -7,6 +7,12 @@
 #include <visp/vpPixelMeterConversion.h>
 #include <visp/vpPose.h>
 
+void computePose(std::vector<vpPoint> &point, const std::vector<vpDot2> &dot,
+                 const vpCameraParameters &cam, bool init, vpHomogeneousMatrix &cMo);
+#if defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI)
+void track(vpImage<unsigned char> &I, std::vector<vpDot2> &dot, bool init);
+#endif
+
 void computePose(std::vector<vpPoint> &point, const std::vector<vpDot2> &dot,
                  const vpCameraParameters &cam, bool init, vpHomogeneousMatrix &cMo)
 {
@@ -45,48 +51,52 @@ void track(vpImage<unsigned char> &I, std::vector<vpDot2> &dot, bool init)
 int main()
 {
 #if (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI)) && (defined(VISP_HAVE_DC1394_2) || defined(VISP_HAVE_CMU1394))
-  vpImage<unsigned char> I;
+  try {  vpImage<unsigned char> I;
 
 #if defined(VISP_HAVE_DC1394_2)
-  vp1394TwoGrabber g;
+    vp1394TwoGrabber g;
 #elif defined(VISP_HAVE_CMU1394)
-  vp1394CMUGrabber g;
+    vp1394CMUGrabber g;
 #endif
-  g.open(I);
+    g.open(I);
 
-  // Parameters of our camera
-  vpCameraParameters cam(840, 840, I.getWidth()/2, I.getHeight()/2);
+    // Parameters of our camera
+    vpCameraParameters cam(840, 840, I.getWidth()/2, I.getHeight()/2);
 
-  // The pose container
-  vpHomogeneousMatrix cMo;
+    // The pose container
+    vpHomogeneousMatrix cMo;
 
-  std::vector<vpDot2> dot(4);
-  std::vector<vpPoint> point(4);
-  double L = 0.06;
-  point[0].setWorldCoordinates(-L, -L, 0);
-  point[1].setWorldCoordinates( L, -L, 0);
-  point[2].setWorldCoordinates( L,  L, 0);
-  point[3].setWorldCoordinates(-L,  L, 0);
+    std::vector<vpDot2> dot(4);
+    std::vector<vpPoint> point(4);
+    double L = 0.06;
+    point[0].setWorldCoordinates(-L, -L, 0);
+    point[1].setWorldCoordinates( L, -L, 0);
+    point[2].setWorldCoordinates( L,  L, 0);
+    point[3].setWorldCoordinates(-L,  L, 0);
 
-  bool init = true;
+    bool init = true;
 #if defined(VISP_HAVE_X11)
-  vpDisplayX d(I);
+    vpDisplayX d(I);
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI d(I);
+    vpDisplayGDI d(I);
 #endif
 
-  while(1){
-    // Image Acquisition
-    g.acquire(I);
-    vpDisplay::display(I);
-    track(I, dot, init);
-    computePose(point, dot, cam, init, cMo);
-    vpDisplay::displayFrame(I, cMo, cam, 0.05, vpColor::none, 3);
-    vpDisplay::flush(I);
-    if (init) init = false; // turn off the initialisation specific stuff
+    while(1){
+      // Image Acquisition
+      g.acquire(I);
+      vpDisplay::display(I);
+      track(I, dot, init);
+      computePose(point, dot, cam, init, cMo);
+      vpDisplay::displayFrame(I, cMo, cam, 0.05, vpColor::none, 3);
+      vpDisplay::flush(I);
+      if (init) init = false; // turn off the initialisation specific stuff
 
-    if (vpDisplay::getClick(I, false))
+      if (vpDisplay::getClick(I, false))
         break;
+    }
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
 #endif
 }
diff --git a/tutorial/grabber/CMakeLists.txt b/tutorial/grabber/CMakeLists.txt
index 8c3b9879..ff523884 100644
--- a/tutorial/grabber/CMakeLists.txt
+++ b/tutorial/grabber/CMakeLists.txt
@@ -3,24 +3,24 @@ project(tutorial-grabber)
 cmake_minimum_required(VERSION 2.6)
 
 find_package(VISP REQUIRED)
-if(VISP_FOUND)
-  include(${VISP_USE_FILE})
-endif(VISP_FOUND)
 
-# build the examples
-add_executable(tutorial-grabber-1394 tutorial-grabber-1394.cpp)
-add_executable(tutorial-grabber-CMU1394 tutorial-grabber-CMU1394.cpp)
-add_executable(tutorial-grabber-opencv tutorial-grabber-opencv.cpp)
-add_executable(tutorial-grabber-opencv-bis tutorial-grabber-opencv-bis.cpp)
-add_executable(tutorial-grabber-video tutorial-grabber-video.cpp)
-add_executable(tutorial-grabber-v4l2 tutorial-grabber-v4l2.cpp)
+# set the list of source files
+set(tutorial_cpp
+  tutorial-grabber-1394.cpp
+  tutorial-grabber-1394-writer.cpp
+  tutorial-grabber-CMU1394.cpp
+  tutorial-grabber-opencv.cpp
+  tutorial-grabber-opencv-bis.cpp
+  tutorial-grabber-video.cpp
+  tutorial-grabber-v4l2.cpp)
 
-# copy the data
-get_target_property(target_location tutorial-grabber-video LOCATION)
-get_filename_component(target_location "${target_location}" PATH)
-set(data "${CMAKE_CURRENT_SOURCE_DIR}/video.mpg" )
-add_custom_command(
-  TARGET tutorial-grabber-video
-  POST_BUILD
-  COMMAND ${CMAKE_COMMAND} -E copy "${data}" "${target_location}"
-)
+set(tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/video.mpg")
+
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
+
+# Copy the data files to the same location than the target
+foreach(data ${tutorial_data})
+  visp_copy_data(tutorial-grabber-video.cpp ${data})
+endforeach()
diff --git a/tutorial/grabber/tutorial-grabber-1394-writer.cpp b/tutorial/grabber/tutorial-grabber-1394-writer.cpp
new file mode 100644
index 00000000..d764956e
--- /dev/null
+++ b/tutorial/grabber/tutorial-grabber-1394-writer.cpp
@@ -0,0 +1,62 @@
+/*! \example tutorial-grabber-1394-writer.cpp */
+#include <visp/vp1394TwoGrabber.h>
+#include <visp/vpDisplayX.h>
+#include <visp/vpImage.h>
+#include <visp/vpVideoWriter.h>
+
+int main(int argc, char **)
+{
+#ifdef VISP_HAVE_DC1394_2
+  try {
+    bool save = false;
+    if(argc == 2) {
+      save = true;
+    }
+
+    vpImage<unsigned char> I; // Create a gray level image container
+    bool reset = true; // Enable bus reset during construction (default)
+    vp1394TwoGrabber g(reset); // Create a grabber based on libdc1394-2.x third party lib
+
+    g.setVideoMode(vp1394TwoGrabber::vpVIDEO_MODE_640x480_MONO8);
+    g.setFramerate(vp1394TwoGrabber::vpFRAMERATE_60);
+    g.open(I);
+
+    std::cout << "Image size: " << I.getWidth() << " " << I.getHeight() << std::endl;
+
+#ifdef VISP_HAVE_X11
+    vpDisplayX d(I);
+#else
+    std::cout << "No image viewer is available..." << std::endl;
+#endif
+
+    vpVideoWriter writer;
+    writer.setFileName("./I%04d.pgm");
+    if (save)
+      writer.open(I);
+
+    while(1) {
+      g.acquire(I);
+
+      if (save)
+        writer.saveFrame(I);
+
+      vpDisplay::display(I);
+      vpDisplay::flush(I);
+
+      if (vpDisplay::getClick(I, false))
+        break;
+    }
+
+    if (save)
+      writer.close();
+
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
+#else
+  (void)argc;
+#endif
+
+  return 0;
+}
diff --git a/tutorial/grabber/tutorial-grabber-1394.cpp b/tutorial/grabber/tutorial-grabber-1394.cpp
index 36535bb3..7007b63c 100644
--- a/tutorial/grabber/tutorial-grabber-1394.cpp
+++ b/tutorial/grabber/tutorial-grabber-1394.cpp
@@ -6,28 +6,33 @@
 int main()
 {
 #ifdef VISP_HAVE_DC1394_2
-  vpImage<unsigned char> I; // Create a gray level image container
-  bool reset = true; // Enable bus reset during construction (default)
-  vp1394TwoGrabber g(reset); // Create a grabber based on libdc1394-2.x third party lib
+  try {
+    vpImage<unsigned char> I; // Create a gray level image container
+    bool reset = true; // Enable bus reset during construction (default)
+    vp1394TwoGrabber g(reset); // Create a grabber based on libdc1394-2.x third party lib
 
-  g.setVideoMode(vp1394TwoGrabber::vpVIDEO_MODE_640x480_MONO8);
-  g.setFramerate(vp1394TwoGrabber::vpFRAMERATE_60);
-  g.open(I);
+    g.setVideoMode(vp1394TwoGrabber::vpVIDEO_MODE_640x480_MONO8);
+    g.setFramerate(vp1394TwoGrabber::vpFRAMERATE_60);
+    g.open(I);
 
-  std::cout << "Image size: " << I.getWidth() << " " << I.getHeight() << std::endl;
+    std::cout << "Image size: " << I.getWidth() << " " << I.getHeight() << std::endl;
 
 #ifdef VISP_HAVE_X11
-  vpDisplayX d(I);
+    vpDisplayX d(I);
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  while(1) {
-    g.acquire(I);
-    vpDisplay::display(I);
-    vpDisplay::flush(I);
-    if (vpDisplay::getClick(I, false))
-      break;
+    while(1) {
+      g.acquire(I);
+      vpDisplay::display(I);
+      vpDisplay::flush(I);
+      if (vpDisplay::getClick(I, false))
+        break;
+    }
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
 #endif
 }
diff --git a/tutorial/grabber/tutorial-grabber-CMU1394.cpp b/tutorial/grabber/tutorial-grabber-CMU1394.cpp
index 5b596aea..a7b527da 100644
--- a/tutorial/grabber/tutorial-grabber-CMU1394.cpp
+++ b/tutorial/grabber/tutorial-grabber-CMU1394.cpp
@@ -6,29 +6,34 @@
 int main()
 {
 #ifdef VISP_HAVE_CMU1394
-  vpImage<unsigned char> I;
+  try {
+    vpImage<unsigned char> I;
 
-  vp1394CMUGrabber g;
-  g.setVideoMode(0, 1); // 640x480 MONO8
-  g.setAutoShutter();
-  g.setAutoGain();
-  g.setFramerate(4); // 30 fps
-  g.open(I);
+    vp1394CMUGrabber g;
+    g.setVideoMode(0, 1); // 640x480 MONO8
+    g.setAutoShutter();
+    g.setAutoGain();
+    g.setFramerate(4); // 30 fps
+    g.open(I);
 
-  std::cout << "Image size: " << I.getWidth() << " " << I.getHeight() << std::endl;
+    std::cout << "Image size: " << I.getWidth() << " " << I.getHeight() << std::endl;
 
 #ifdef VISP_HAVE_GDI
-  vpDisplayGDI d(I);
+    vpDisplayGDI d(I);
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  while(1) {
-    g.acquire(I);
-    vpDisplay::display(I);
-    vpDisplay::flush(I);
-    if (vpDisplay::getClick(I, false)) // A click to exit
-      break;
+    while(1) {
+      g.acquire(I);
+      vpDisplay::display(I);
+      vpDisplay::flush(I);
+      if (vpDisplay::getClick(I, false)) // A click to exit
+        break;
+    }
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
 #endif
 }
diff --git a/tutorial/grabber/tutorial-grabber-opencv-bis.cpp b/tutorial/grabber/tutorial-grabber-opencv-bis.cpp
index 334be3ce..626db671 100644
--- a/tutorial/grabber/tutorial-grabber-opencv-bis.cpp
+++ b/tutorial/grabber/tutorial-grabber-opencv-bis.cpp
@@ -14,27 +14,32 @@ int main(int argc, char** argv)
   std::cout << "Use device: " << device << std::endl;
 
 #if defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100)
-  cv::VideoCapture cap(device); // open the default camera
-  if(!cap.isOpened()) { // check if we succeeded
-    std::cout << "Failed to open the camera" << std::endl;
-    return -1;
-  }
-  cv::Mat frame;
-  cap >> frame; // get a new frame from camera
-  std::cout << "Image size: " << frame.rows << " " << frame.cols << std::endl;
-
-  //vpImage<vpRGBa> I; // for color images
-  vpImage<unsigned char> I; // for gray images
-  vpImageConvert::convert(frame, I);
-  vpDisplayOpenCV d(I);
-  for(;;) {
+  try {
+    cv::VideoCapture cap(device); // open the default camera
+    if(!cap.isOpened()) { // check if we succeeded
+      std::cout << "Failed to open the camera" << std::endl;
+      return -1;
+    }
+    cv::Mat frame;
     cap >> frame; // get a new frame from camera
-    // Convert the image in ViSP format and display it
+    std::cout << "Image size: " << frame.rows << " " << frame.cols << std::endl;
+
+    //vpImage<vpRGBa> I; // for color images
+    vpImage<unsigned char> I; // for gray images
     vpImageConvert::convert(frame, I);
-    vpDisplay::display(I);
-    vpDisplay::flush(I);
-    if (vpDisplay::getClick(I, false)) // a click to exit
-      break;
+    vpDisplayOpenCV d(I);
+    for(;;) {
+      cap >> frame; // get a new frame from camera
+      // Convert the image in ViSP format and display it
+      vpImageConvert::convert(frame, I);
+      vpDisplay::display(I);
+      vpDisplay::flush(I);
+      if (vpDisplay::getClick(I, false)) // a click to exit
+        break;
+    }
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
 #endif
 }
diff --git a/tutorial/grabber/tutorial-grabber-opencv.cpp b/tutorial/grabber/tutorial-grabber-opencv.cpp
index 16356f17..05f93700 100644
--- a/tutorial/grabber/tutorial-grabber-opencv.cpp
+++ b/tutorial/grabber/tutorial-grabber-opencv.cpp
@@ -5,20 +5,25 @@
 int main()
 {
 #ifdef VISP_HAVE_OPENCV
-  vpImage<unsigned char> I;
+  try {
+    vpImage<unsigned char> I;
 
-  vpOpenCVGrabber g;
-  g.open(I);
+    vpOpenCVGrabber g;
+    g.open(I);
 
-  std::cout << "Image size: " << I.getWidth() << " " << I.getHeight() << std::endl;
-  vpDisplayOpenCV d(I);
+    std::cout << "Image size: " << I.getWidth() << " " << I.getHeight() << std::endl;
+    vpDisplayOpenCV d(I);
 
-  while(1) {
-    g.acquire(I);
-    vpDisplay::display(I);
-    vpDisplay::flush(I);
-    if (vpDisplay::getClick(I, false))
-      break;
+    while(1) {
+      g.acquire(I);
+      vpDisplay::display(I);
+      vpDisplay::flush(I);
+      if (vpDisplay::getClick(I, false))
+        break;
+    }
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
 #endif
 }
diff --git a/tutorial/grabber/tutorial-grabber-v4l2.cpp b/tutorial/grabber/tutorial-grabber-v4l2.cpp
index a05efe27..ff9087b1 100644
--- a/tutorial/grabber/tutorial-grabber-v4l2.cpp
+++ b/tutorial/grabber/tutorial-grabber-v4l2.cpp
@@ -6,24 +6,29 @@
 int main()
 {
 #ifdef VISP_HAVE_V4L2
-  vpImage<unsigned char> I;
+  try {
+    vpImage<unsigned char> I;
 
-  vpV4l2Grabber g;
-  g.open(I);
+    vpV4l2Grabber g;
+    g.open(I);
 
-  std::cout << "Image size: " << I.getWidth() << " " << I.getHeight() << std::endl;
+    std::cout << "Image size: " << I.getWidth() << " " << I.getHeight() << std::endl;
 
 #ifdef VISP_HAVE_X11
-  vpDisplayX d(I);
+    vpDisplayX d(I);
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  while(1) {
-    g.acquire(I);
-    vpDisplay::display(I);
-    vpDisplay::flush(I);
-    if (vpDisplay::getClick(I, false)) break;
+    while(1) {
+      g.acquire(I);
+      vpDisplay::display(I);
+      vpDisplay::flush(I);
+      if (vpDisplay::getClick(I, false)) break;
+    }
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
 #endif
 }
diff --git a/tutorial/grabber/tutorial-grabber-video.cpp b/tutorial/grabber/tutorial-grabber-video.cpp
index 80b870c1..90982999 100644
--- a/tutorial/grabber/tutorial-grabber-video.cpp
+++ b/tutorial/grabber/tutorial-grabber-video.cpp
@@ -5,28 +5,33 @@
 int main()
 {
 #ifdef VISP_HAVE_FFMPEG
-  vpImage<unsigned char> I;
+  try {
+    vpImage<unsigned char> I;
 
-  vpVideoReader g;
-  g.setFileName("./video.mpg");
-  g.open(I);
+    vpVideoReader g;
+    g.setFileName("./video.mpg");
+    g.open(I);
 
-  std::cout << "video framerate: " << g.getFramerate() << "Hz" << std::endl;
-  std::cout << "video dimension: " << I.getWidth() << " " << I.getHeight() << std::endl;
+    std::cout << "video framerate: " << g.getFramerate() << "Hz" << std::endl;
+    std::cout << "video dimension: " << I.getWidth() << " " << I.getHeight() << std::endl;
 
 #ifdef VISP_HAVE_X11
-  vpDisplayX d(I);
+    vpDisplayX d(I);
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
-  vpDisplay::setTitle(I, "Video grabber");
-  while (! g.end() ) {
-    double t = vpTime::measureTimeMs();
-    g.acquire(I);
-    vpDisplay::display(I);
-    vpDisplay::flush(I);
-    if (vpDisplay::getClick(I, false)) break;
-    vpTime::wait(t, 1000. / g.getFramerate());
+    vpDisplay::setTitle(I, "Video grabber");
+    while (! g.end() ) {
+      double t = vpTime::measureTimeMs();
+      g.acquire(I);
+      vpDisplay::display(I);
+      vpDisplay::flush(I);
+      if (vpDisplay::getClick(I, false)) break;
+      vpTime::wait(t, 1000. / g.getFramerate());
+    }
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
 #endif
 }
diff --git a/tutorial/image/CMakeLists.txt b/tutorial/image/CMakeLists.txt
index a5f0bb85..98cbd463 100644
--- a/tutorial/image/CMakeLists.txt
+++ b/tutorial/image/CMakeLists.txt
@@ -3,29 +3,29 @@ project(tutorial-image)
 cmake_minimum_required(VERSION 2.6)
 
 find_package(VISP REQUIRED)
-if(VISP_FOUND)
-  include(${VISP_USE_FILE})
-endif(VISP_FOUND)
 
-# build the examples
-add_executable(tutorial-image-converter tutorial-image-converter.cpp)
-add_executable(tutorial-image-manipulation tutorial-image-manipulation.cpp)
-add_executable(tutorial-image-reader tutorial-image-reader.cpp)
-add_executable(tutorial-image-viewer tutorial-image-viewer.cpp)
-add_executable(tutorial-undistort tutorial-undistort.cpp)
-add_executable(tutorial-viewer tutorial-viewer.cpp)
+set(tutorial_cpp
+  tutorial-image-converter.cpp
+  tutorial-image-manipulation.cpp
+  tutorial-image-reader.cpp
+  tutorial-image-viewer.cpp
+  tutorial-undistort.cpp
+  tutorial-viewer.cpp
+  tutorial-image-filter.cpp)
 
-# copy the data
-get_target_property(target_location tutorial-image-reader LOCATION)
-get_filename_component(target_location "${target_location}" PATH)
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/lena.bmp" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/lena.ppm" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/chessboard.pgm" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/camera.xml" )
-foreach(data ${data2copy})
-  add_custom_command(
-    TARGET tutorial-image-reader
-    POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy "${data}" "${target_location}"
-  )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/lena.bmp" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/lena.ppm" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/lena.pgm" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/lena.jpeg" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/lena.png" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/chessboard.pgm" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/camera.xml" )
+
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
+
+# Copy the data files to the same location than the target
+foreach(data ${tutorial_data})
+  visp_copy_data(tutorial-image-reader.cpp ${data})
 endforeach()
diff --git a/tutorial/image/lena.jpeg b/tutorial/image/lena.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..3ca83964d5876a3b61a3bbce47436c3308193338
GIT binary patch
literal 11689
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
TdkuS&R#J2+Wd6{_7x@1Gi*yj^

literal 0
HcmV?d00001

diff --git a/tutorial/image/lena.pgm b/tutorial/image/lena.pgm
new file mode 100644
index 00000000..992d1f0a
--- /dev/null
+++ b/tutorial/image/lena.pgm
@@ -0,0 +1,4 @@
+P5
+225 225
+255
+    ŸŸžž¡Ÿœ™˜˜™›¡¤§ª¬¬«ª˜’†td\^bghhijkkklkjikmqswxy{|~€‚‚‚ƒƒƒ‚‚ƒƒ„„„„‡‡‡‡‡‡‡‡††††††††‡†††………„ƒƒƒƒƒƒƒƒ…………………………„„ƒ‚‚€€~}|{{vqkhkt~…–”•œ£¢›’———˜˜™™™šš™™™˜˜˜››››››››»ÑÓÑÙßÜÛtijlqzxxyz{{||yyzz{{{{zzz{|}}~‡yusq… ¨‘   ŸŸžžž¡Ÿœ™˜™š›¢¤§ª¬«ª©˜’…td\]agghijjkklkiijmprwxyz|~‚‚ƒƒƒ‚‚ƒƒ„„„„‡‡‡‡‡‡‡‡……………………††††……„„ƒƒƒƒƒƒƒƒ…………………………„„ƒ‚€}|{{vrlhks|ƒ“’•›¢¢›”˜˜˜˜™™™šššš™™™˜˜››››››››´ÌÔÔ×ÛÜÆŸudhqvxxxyyz{||yyzz{{{{zz{||}~~wsxxtˆ©¸“ŸŸŸŸžžž ž›™˜š›£¥¨ª««©¨—‘„sc[\`gghiijkkkjihjlprwwyz|}~‚‚‚ƒƒ‚‚ƒƒ„„„„††††††††……………………†††………„„ƒƒƒƒƒƒƒƒ…………………………„ƒ‚‚€~}|{wsmjkqyŽ“š ¡œ–™™™ššš››››ššš™™™ššššššššœªÀÓ×ÔÖÜͬbdtytwxxyzz{{yyzz{{{{z{{|}~~ƒwtz€‰‹‚\ŸŸžžŸ›™™›Ÿ¤¦¨ª«©§¦–ƒrbZ[_ggghijjkkjhhiloqvwxz{}~€€‚‚‚‚‚‚ƒƒ„„„„††††††††……………………††………„„„‚‚‚‚‚‚‚‚………………………„„ƒ‚€€€€€€€€€‚€~}||xtokkpuyˆ‹’™žŸœ™šš››œœœœœ›››šššššššššššššŸ³Í×ÑÒÛÕÀ–nbntovwwxyzz{yyzz{{{{{||}~Œ{€rR51žžœœœœš™šœŸ¡¥§©ªª¨¥¤”Ž‚p`YZ^ffghiijjjigghknpvwxy{}~~€€€‚‚‚‚ƒƒ„„„„……………………„„„„„„„„………„„„ƒƒ‚‚‚‚‚‚‚‚……………………„„ƒ‚‚€€€€€€€€€€‚‚€~}||xuqmlmqs‡˜œœœœžžžœœœœ›››ššššššššš™—¦ÁÑÐÒÙÚÔµ‡hekkvvwwxyyzyyzz{{{{||}~€€}‡Š~eG0(0œœ›››œ›š™›ž¡£¦¨©ª©§¤¢“o_XY]ffgghijjihgfgjmovvwy{|}~€€€‚‚‚ƒƒ„„„„……………………„„„„„„„„……„„„ƒƒƒ‚‚‚‚‚‚‚‚……………………„ƒƒ‚€€€ƒ‚€~}|yvrnlllm{ƒ—šœž žžžŸŸŸ œœœ››™™™™™™™™—”œ±ÆÑÕ×ÜÜÍ¥zeekuuvwwxyyyyzz{{{{}}~€€Š‚fG.*7/œœœ›››š›š™™›Ÿ¢¥§¨ªª©¦¢ ’Œ€n^WX\effghiijigfegimouvwyz|}~€€€‚‚ƒƒ„„„„……………………„„„„„„„„……„„ƒƒƒƒ……………………ƒƒƒ‚€€ƒ‚‚€~}}zwtpljiiv€Ž–™šŸ£ŸŸŸŸ  ¡¡žžœœœ™™™™™™™™•”•¡ºÓÚÖÚÛÕ½“ofmtuuvwxxxyyzz{{{{}~~€‚†|^A7.*41œœœ›››šš›š™™›Ÿ£¥¨©ªª¨¥¢Ÿ’Œn^VW[effghiiihgfefilnuvwyz|}~€€€‚‚ƒƒ„„„„……………………ƒƒƒƒƒƒƒƒ…„„„ƒƒƒ‚……………………ƒƒ‚‚€ƒƒ‚~}}zxtpliggs–˜šŸ¤ŸŸ   ¡¡¡žžžœœ™™™™™™™™”•’—³ÔÞÕØ××Ê¥zjottuvvwxxyyzz{{{{~~€‚‚td?*12,13››œœœŸš™›Ÿ¤§¥¥¤£¢¢¡¡•‚qaYZ^acgikjihhgffhknpuvwxz|}}€€€‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒ„„„…………„„„ƒƒ‚‚‚ƒƒƒ‚‚ƒ„„…†‡‡‡ƒƒ‚‚€€€~~~€€~~~zyvspmjity‹“šžŸ¤¤£££¢¢¢  ŸŸžœ™™˜˜˜————žš–²ËÔÙÚÛÜÊŽhqhmqruz{zxwxz}‚{}‡‰|U>++0113-››œœŸ››œ ¤§¥¤¤£¢¡¡¡•‚qaYZ^acgikjihhgffhknpuvwxz|}}€€€‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒ„„„………ƒƒƒƒ‚‚‚ƒ‚‚‚€ƒƒ„„…†‡‡ƒƒ‚‚€€€~~~€€~~~zyvspmkisxŠ“™Ÿ££££¢¢¡¡  ŸŸžœœ™™™˜˜˜——–š˜’•©ÂÑ×ÛÝÜÑ«~ggmtvvwy|{zxwx{~{€ƒ…Œ‹w^F6,174.,4œœœœžžŸžŸ¢¥§¤¤¤£¢¡¡ ”‚paYZ^acgikjihhgffhknpuvwxz|}}€€€€‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒ„„………‚‚‚€€‚‚€€€€‚‚ƒ„„…††ƒƒ‚‚€€€~~~€€~~~zywtpmkjsx€Š’™ž££¢¢¢¡¡¡  Ÿžœœšš™™˜˜˜˜””–•”œ³ËÖÛÞÛØÎ gdkuzxstx|zyxy{~€|‚‡Šƒ`==/(/63..7œœœžžžŸŸŸ ¢¤¦§¤¤£¢¢¡  ”Ž‚p`XZ^acgikjihhgffhknpuvwxz|}}€€€€€‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ„„„…€€€€€~‚‚ƒ„……ƒƒ‚‚€€€~~~€€~~~{ywtqnkjrw‰’˜œž¢¢¢¡¡    ŸŸžœœ››ššš™™™˜”‘”˜“¤¿ÕØÝÛÚÞ¾€eir{zssy|{yxy{~€…ƒ‰€]>0;,#'./285œžžžŸŸ ¢¤¥¦§§¤££¢¡  Ÿ”ށp`XY]acgikjihhgffhknpuvwxz|}}€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ„„„~~}}}~~~}}€€€‚ƒƒ„ƒƒ‚‚€€€~~~€€~~~{zwtqnljqv~ˆ‘—›¡¡¡   ŸŸŸŸžœ›››››ššš™™•‘“˜’Œš¯ÐÑÙÚÙÞÒ©slmwzuv~|{yyy|‡‰‹~\7*/6+%*/.2:6žžžŸŸž¡¤§©©¨§££¢¢¡ ŸŸ“o_XY]acgikjihhgffhknpuvwxz|}}~€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ„„~}}}|||{~~~}}}||~€‚‚ƒƒƒ‚‚€€€~~~€€~~~{zxuqnlkpu~‡–šœ    ŸŸŸžŸžžœ›››œœœ››ššš˜••–“•ÀÉÕØØÝÛÍ‘yjqwuv~}{zyz|‰Z5'+/.*-792/3:žžžŸŸŸž¡¦©«ª¨§££¢¡  ŸŸ“€o_WY\acgikjihhgffhknpuvwxz|}}~~€€€€€€‚‚‚ƒƒƒ„||||{{zz}}}|||{{~~~€‚ƒƒ‚‚€€€~~~€€~~~|zxurolkpu}‡–š›  ŸŸŸžžžžžžœ››šœœ››››››—’”˜•ލÂÓÕÚßÞÝ·kjsqqx}|zyz|zt];')130.3<;2/38žžžŸŸŸž¢§«¬«©§£¢¢¡  ŸŸ“€o_WX\acgikjihhgffhknpuvwxz|}}~~~€€€€€€‚‚ƒƒƒƒ||{{{zzz}}|||{{{}}~€€ƒƒ‚‚€€€~~~€€~~~|{xurolkot}†–™› ŸŸŸžžžžžœ›ššœœ›››Ÿ˜•ž–„–¿ÒÓÞãÞÞÌœmgomlr}|zyz}|[:-,,2;:548502;1ŸŸ ¡¢¤¤¥¨©ªª©§¥¤¡   ŸŸŸŸ•Žk[TW]`bfhjihfgfeegjmottuvxyzz}}}~~~~~~€€€€€ƒ‚‚‚€€}|zxwvwx{}}|zysvz~€‰‡„~~~€€€€~~~yxvurqonpt|„‹’“™™š›œžžŸœœ›››žžœ››šš——–•“’‘‘ƒªÏØ×ÚáåØ¿†aekks~ut}}}„=81+),1498754210/ŸŸ ¡£¤¥¥§§¨¨§¥¤£¡¡   ŸŸŸ•Žk[TW]`bfhjihfgfeegjmptuuwxyzz}}}~~~~~€€€€€‚‚€~~€€~|{zzxy{{yvsqwxz}€‚„…‚‚‚‚|yv€€€€~~~~yxvtrponpt{„‹’“˜™™›œžžœœ››››œ›šš™—–•”“’‘‡»ÐÖÖÛãÛΡsejopswxzƒ‡xb95/++.3788653210/Ÿ ¡¢£¤¥¥¥¥¤££¢¡¡¡¡¡  ŸŸŸ•Žk[TW]`bfhjihfhgeegjnptuvwxyz{}}}~~~~€€€€€€‚‚~}|{}}}|||||~~|xtqtvz~€€~|}}~€€€€~~}}xxvtrponpt{ƒŠ’“——˜™›œœœœ››šššœœ›š™™˜–•”“’‘Œ¢ÁÓÕ×ÞÝÛÅ’jhqnmty~„~`@41.,-27;8764310//  ¡¢£¤¥¦£¢ žžŸ¡¡¡¡   Ÿ•Žk[TW]`bfhjihfhgffgjnpuuvwyz{{}}}~~~€€€€€€~}|{z{{|}~€‚ƒ‚|zutsux~ƒ‡‚€}{|€„‡€€~~}}}xwvtrpnnos{ƒŠ‘“•–—˜™š›œ›››ššš™™›››š™˜˜—•”“’‘Ž‹“®ÊØÛÚááÛ³xdmlsszƒxY=1.-,-05:=765420///  ¡¢¤¥¦¦¡ž›˜—˜›¢¢¡¡¡   •Žk[TW]`bfhjihfhgffhknquvwxyz{{}}}~~~€€€€€€€€€€€‚„†ˆ‹Œ¢¤¨«­­¬«¦œŒ}vvz~~}||{{{€€~~~}}}|wwusqonmosz‚‰Ž‘’””•–—™™š›ššš™™™˜šš™™˜—––““’‘ŽŽ‘ž½ØÞØäàâÍ’kimvz~uV3'.++-/37;>654310../ ¡¢£¤¥¦§Ÿ›–’’”˜›¢¢¢¡¡¡  •Žk[TW]`bfhjihfihgfhkoqvvwxyz{|}}}~~~€€€€‚€€}~€‚„‡‰‰Ž‘”˜›žŸ£¦«¯³´´´Â½´§˜Š~xlqw|~}yw€€~~~}}}||wvusqommnsz‚‰Ž‘’’“”•–—˜˜šš™™˜˜˜˜™™˜——–••’’‘ŽŒŒ‘”¬ÍÚØâÜàÚ³ƒnosyW3$'*+,.148:<55420/.-/¡¡¢£¤¦¦§™“Ž‘•™£¢¢¢¡¡¡ •Žk[TW]`bfhjihfihgghloqvvwxz{||}}}~~~€€€‚‚€€{}€…ŠŽ‘“‘”˜¡¤¦©«¯³µ¶µ´«°¸½»´©¢‚€|zy{}€€~~}}}|||wvusqomlnrz‚‰Ž‘‘‘’“•–——™™™˜˜˜——˜˜——–•””‘‘ŽŒŒ‹Ž‹ž·ÏØßÝÝßѧquq]<(',,,.03678854310.-,/¡¡¢£¥¦§§œ˜‘Œ‹”˜££¢¢¡¡¡¡•Žk[TW]`bfhjihfihggiloqvwwyz{||}}}~~~€€€‚‚‚€€z|†“—š‰‹”™¡£ª¬¯±±°®¬²²²´¸¼Áĸ¨ynox€€€~~}}}|||wvtspomlnry‚‰Ž‘‘’“”•–—™™˜˜˜———˜——–•”””‘ŽŒ‹‹‡†–¥ÂØÝâÝßߍs|]>2/,,1-/2467664431/.-,/šŸ¦««¦Ÿ›•‰…‰Š‘›¦¦¥¤¤£¢¢™‘€kXPRV^`dghhgffghjkmnouuvwxz{{z{{|}~~€z|‚~†u{xyz|}}}~}ƒ‹’–‘’”—šœžŸ§§¨ª«­®¯²³´¶¸º¼¼ÂÇëŠtrxs}ƒ‚ƒ‡‚y}|zywwuusqomlkpt{ƒ‰Ž‘‘’”•––•–˜šš˜–”‘‘‘‘‘‘‘‘ŽŒŒŒ‹”‡…ŒŽ«ÎÕæÑÞäÏ·Ž\B'+76/23345667*06972-+3¡¨¬«¦Ÿš”„z‡Œ“œ¦¦¥¤¤£¢¢™‘€jXPQV\^beffedfghiklnntuvwxyz{z{{|}~~~ƒ}z€}~„w}‡“’Ž‹{‰ŒŒŒ’‘“–™›ž¦§¨ª«­®¯²³´¶¸º¼½ÂÄÆÃ´š{fstƒ‚stƒ~}|{yxwvutsqomkkot{ƒŠŽ‘’‘‘’“”•––—™š™—”’‘‘‘‘‘‘‘‘ŽŽŒŒŒŒ”‰‡ŽŒ‹£ÃÖåÛßßà×—>4)&+12055544444/14431/./¡¥«®¬¥—‘|nv…—¦¦¥¤¤£¢¢˜jXOQUY[_bccbaefgijlmnstuvwxyzzz{|}}~~…y}„‹—˜š˜“Š€zx†‰ˆˆŠŽ‘”–™›œ¤¥§©«®¯°²³µ·¹»¼½Ã¿¾Åɽ¡Šj}‚tp{|p{zzyxwvvttrpnlkjnszƒŠ’“‘‘’’““””—˜™™—”‘ސŽŽŒŒŒ”ŒŒ‘‡–®ÔÙÝãÛàà¡%+-++.287653210630..0233¦©­®ª¢˜’‡pbmƒ’šŸ¦¦¥¤¤£¢¢˜iWNPUVY\_aa`_eefhjklmrstuvwxxzz{{|}}~ƒ}}}z–€ƒ“‹…v|ƒ†„ƒ…ˆ‹ŒŽ‘”–˜š¢¤¦¨«®°±³´µ·¹»¼½Ã¿½ÀÄÆÂ½|pqussvwwvvvvuutsqomkjimqy‚А“•’’’’’’’’–—˜˜–’ŽŒŽŽŽŒŒ“Ž“…‹™ÅÓÙÞÝáËu#-0+).4:97520.-;4-),0457¨«®­§œ‘ŠxcYh‚“› ¦¦¥¤¤£¢¢—Ž~hVNOTVX\_aa_^ddfgijklqqrtuvwwyzz{||}}}y‚v®ut|zwvw{€„v|ƒ„‚‚…ˆ‰‹Ž‘”–— ¢¤¨«¯±³³´¶·º»½¾½ÀÄÆÅÄÄÅÅ¡zjhjqxssssttttsrqomkihkpx‚Š‘•–”““’‘‘“”•–”’ŽŒŽŽŽ’‘“‡ˆŽ©ÏØÙäې*'+..,-16:97520.-;3+*/331-©«¬ª¢–‰eWTh’›¢¦¦¥¤¤£¢¢–Ž}hUMNSXZ]abba`cdefhjkkppqrtuvvyyzz{|}}{wƒ‚x§ljzz{{zxwvx~„…‚€„…‡‰‹Ž‘“”ž £§«¯²´´´¶¸º¼½¾¸º½ÂÆÈÇÆÇÏ»Šhgnmoopqrsstrqpnljhhinw‚‹’–˜•”“’‘ŽŽ’“”’ŽŽŽ‘’Œ”¼ÕäÚ—G42/--0467654210/60,0681)¨©ª¦ySMSjš£¦¦¥¤¤£¢¢•|gULNSZ\`cedcbbcdfgijkoopqstuuyyyz{||}|y~„€llwxyyz{||{†‡ƒ‚„ƒ…‡‰Œ‘’Ÿ¢¦«°³µ´µ¶¸º¼¾¾¸¸º¾ÂÇÊËÆÆÍʤtdpllmoprssqqomkihghmw‹’—™–•”’ŽŒ‡ŠŽ‘“”“’ŽŽŽ’““’¥ÉÏ“D%//00//14733333222/,.7@=. §¨¨£™‹}tHHTl‚Ž™¤¦¦¥¤¤£¢¢•|gTLNR\^beffedbcdegijjoopqrstuxyyz{||}}x……Yps‚}uppu|}‚ˆˆ…‚‚…‚ƒ…ˆ‹Ž‘œž¡¦«°³µ´µ¶¸º¼¾¾ºÁÈÈþ½¿ÃÄÄÆÆ³…Yjklnoqrsqpomkigggmv‹“˜š––”’ŽŒŒ„‡‹“•••ŽŽŽŽŽŽ“˜™—‘£·Š;*7*#*12003701123445**0<F@,1°¬¦Ÿ”hVOLVn„š£§¨©©§¤ ž”Œ{fTLNSZ\_bddcbfeccdgjlopqrstuvxxyyzzzz}z„Ÿornnoprtwz|}‚ƒ„…†‡‡†‡ˆ‰‹ŒŽŽ•𠣤§®³³µ¸¼¾½º¸½ÁÄÄÁ¿ÂŽÇÎÊÎÛ¸tfU^leV|mlmnnliecdkw…–™šš˜—˜˜’ˆƒ€ƒ‰“”•ŒŽ”–’‘‘Š š‡Œ–”“ž v>-0,**-157520(+046520'9@@>, )s¬©¢™ŠvaSPMWn„™¢§¨©©§¤ ž”Œ{fTLNSZ\_bddcbfeccdgjlopqrstuvxyyyzzz{|~ŒŒrnskopruwz|}€‚ƒ„…††‡ˆ‰‹ŒŽŽ’˜Ÿ£¥©°¶±´¶·¹½ÃȾ¼½ÃÊÉÁ¸ÊÀº¶½ÕÝ˽ª`Q[wa|jklmkhecdkw„–™šš˜—˜˜’ˆ{yy~‡”••Ž“•’‘‘‘—’“™™™¢„T3/1-*-/35541.+.1454100=DB5#3\ž¦¤{gYQQNXo„™¢§¨©©§¤ ž”Œ{fTLNSZ\_bddcbfedcegjmopqrstuvyyyzzz{{}„uuitjqrsuxz{|z{}~€‚ƒ„†‡ˆ‰‹ŒŽŽŽ•¢¥ª²¹·»¾½ºº¾ÂÄÅÆÄÀ»¸·Ã¼ÅÕÖÕÜáéà§R[l\sghjkjgdbckw„–™™š˜—˜˜’ˆ€plkr€“•“Ž’”‘Ž‘‘’‘——šŸ —\-'.0.*234541.,013553106HK9(.Z©¢¡™†o]UTSPYp„˜ §¨©©§¤ ž”Œ{fTLNSZ\_bddcbgfddehkmopqrstuvyyzzz{{{…ˆjvfnpssuvxyz{wwy|~‚ƒ†‡ˆ‰‹ŒŽŽ‹’›¡¥«´»Á¿½º¹º¼½ÇÆÃ»µ·ÁÊÔËÒßÛÎÑÞÞàä‰PMiZceghhfcacjw„•˜™›™˜™˜“ˆ€g`[ct†“’‘‘’‘‘‘ŒŠ–œ•š¡˜r;$*,0+766420-,44555432;NI,+Tƒœ¦¡‘}gZWYURZp„Ž—Ÿ§¨©©§¤ ž”Œ{fTLNSZ\_bddcbgfedehkmopqrstuvzzzz{{{|wmtgfwuuvwxxyytvx{~ƒ…†‡ˆ‰‹ŒŽŽ‹’𠥫´»¾¹³³¸¾ÁÁ¼µ°´ÁÏ×ÚÙÓÏÓÕÏÐÙÛààÌYJaT_acefdbacjvƒŽ•˜™›™˜™™“‰€eXLPd{‰‘’‘‘’‘‘•——¢™xB+%)%*2-97531/..65545567FG<3L}—‘¢”ƒp`XY\WT\q„Ž–ž§¨©©§¤ ž”Œ{fTLNSZ\_bddcbgfedfhlnopqrstuvzzz{{|||yxjqqmfzwwwwxxxxtvy|€„†ˆ†‡ˆ‰‹ŒŽŽ“›¡¤©±¸°´º¿À»´®²µ¼ÄÍÔ××ÏÒÐÒÚÕÊÈÜáÞç§WPY[]`cdca`bjvƒŽ”—˜œš˜™™”‰lV@=Ql€ˆŽ‘”’Ž“‘‘’¤L%*0-'-4286310023543359<>T=:Uy’–‰˜–ˆr`WVXZYU]r„•§¨©©§¤ ž”Œ{fTLNSZ\_bddcbhgeefilnopqrstuvzz{{{|||opinnsovxxxxxxwwvwz~ƒ‡Š‹†‡ˆ‰‹ŒŽŽ–¡£§®´©·ÅÄ·«§©¾ÇÑÓÎÊËÎ××ÌÉÑÏÊÑÕÖääéŠZQXZ^abba`biuƒ”—˜œš™š™”ЁuX7.A_v’•“Ž•‘‘’““ ’_0%0/*/578641/025822126<BFTCS|“˜”‹•‘~fUQTWWZV]r„”œ§¨©©§¤ ž”Œ{fTLNSZ\_bddcbhgeefilnopqrstuvz{{{||||fllimwxqyyyxxwwwwx|€…‰ŒŽ†‡ˆ‰‹ŒŽŽ“˜ž¡¢¥¬±®º¾¯›š²ËÒÏÌÍÐÐÍÉÊÏÌÐÙÑËÙÔÏÎÜåÖsCWY\`aa`_biuƒ”—˜œš™šš”Ё|Z3%7Wp|’–”ŽŒ•‘‘‹–˜œž{E*15(%6=9=530.038;10027>EJJRt’—™™Žƒq]TX][WWX]k~™œ¤¦§¨§¥¢ “‡ylZKKT\]^`acdeccdfghiinpsvwwutw‡tr}whoppqrsssvtrqqsvx„}xzƒŠŒŠŒŒŽ‘‡•š§µ³§»® Ÿ¬¾ÊÐÅÈÌÏÐÎËÉÍÍÍÍÌÌÌÌÓÒÙäÛâÇfYFO^WW_Y_jy…Œ’˜œš™˜š›—ކwV6,6H`sŠ”™—”””Ÿ“”žƒF'411113589=0%'3:6..686<JOK\m„“–“ŽžykZUY][VWX]k~™œ¤¥§¨§¥¢ “‡ylZKKT\]^`acdeccdfghiinpsvwwutw€ty{wioppqrsssvtsrrtwy‚}z~…‹‹ˆŒŒŽŽŒŽ• ¨®°Ÿ¨¹ËÓÎÆÉÊËÌÌËÊÉÆÇÉËÎÐÒÓÖÕÖÛÖäá¥MMMOTYZX^ix„Œ’˜š™˜š›—ކxW6+3CXi|…•”‘š‘™•h8()/024666680*,484/2139AHOUm~‘˜”‘–¢j`WV[^ZUWX]k~™œ¤¥§¨§¥¢ “‡ylZKKT\]^`acdeccdfghiinpsvwwutvvw‚€wvkoppqrsssvusrtvy{~ƒ‰‹‰†ŒŒŒŒ~—›Ž›¶¬†›¬ÁËÊÈÌÒÎÌÊÈÈÈÉÉËÌÌÌÍÍÍÎÏÐÎÏÍ×ãÒ£}NAPTPW\gwƒ‹‘˜š™˜š›—ކxX7+/:JYs}Š‘‘ŽŽŽ‘‘‘—–˜|D)(!-0589742001344202/4>@CVlƒœ›–¡¥\XUW\^ZUWX]k~™œ¤¥§§§¤¡Ÿ“‡ylZKKT\]^`acdeccdfghiinpsvwwutvp|ˆ|suloppqrsssvuttuy|~„‰Œ‹ˆ…ŒŒŒ‹‹ŠŠŠŽˆ’§ª™²ÀÌÊÀ¿ÍÜÐÍÉÅÄÅÈÊÎÎÎÍÌËËËÓÖÖØØÖÚÞïÄ…WHOUQYdu‚Š‘˜š™˜š›—ކyY8++1<Hiu…‘ŽŽŒŽ’““œ ‡S-%'&,17;<82.)078410215:<;Ff†‘—𖐑¨¤TSUY]^[XWX]k~™œ£¤¦§¦¤¡Ÿ“‡ylZKKT\]^`acdeccdfghiinpsvwwutwt„†toqmoppqrsssvutuw{‚€„‰ŒŒŠ‡†ŒŒ‹Š‰ˆ‡†”Œš”ŠœºÀÀÁÆÌÏÎÌÍÊÆÃÃÅÈÊÆÇÉËÎÐÒÓÑÑÓÖÚÔÎ×Ýà×—LEXLVbr€Š‘˜žš™˜š›—ކyZ:,*+2:\j~Œ’’’’‹‹‘“”•ŸŸh-'*&2/38<<71-(1::4/147;96@^~‘“‘ŽŽ“›¤©¡TUWZ\]]\WX]k~™œ£¤¦§¦£ Ÿ“‡ylZKKT\]^`acdeccdfghiinpsvwwutxŽ}jllloppqrsssvuuvy~‚…„ˆŒŒ‰‡ˆŠŒŒŠ‰‡…„ƒ…’Ž€Œ°ÅÂÉÆÃÅÈÈÄ¿ÅÅÄÄÅÇÉËÉÊËÌÍÎÏÐÊÅÉÈÍÐÌÕÊÐèÑx;>LS_p‰‘™žš™˜š›—ކx[=/,),2IZr…’“”‰ŠŒŽ‘”•–™„E+.(:358:961.,2872/26=:5;Y‘Ž‹‰š£§§¡XYZ[[\_`WX]k~™œ¢¤¥¦¥£ ž“‡ylZKKT\]^`acdeccdfghiinpsvwwuty—rakhkoppqrsssvuuw{€„‡‰ŒŽ‹†…ŠŒ‹Šˆ…ƒ‚‡|…¤¸·ºÇÊÉÆÀº¸¼À¼¾ÂÆÉÊËËÏÏÎÍÌËÊÊÎË×ÏÌ×ÖÙÛÐÕá¹^2JQ]o~ˆ‘™Ÿš™˜š›—ކw[?3.**/4HczˆŽ‘’ˆ‰‹Ž‘”–˜‡T+&-+-5888764212443014844=Uw•ŠŒ‘™¡¦¦¥¤\]\[Z\`cWX]k~™œ¢¤¥¦¥£ ž“‡ylZKKT\]^`acdeccdfghiinpsvwwutzšj[jejoppqrsssvuvx{†‰ŒŠ„ƒ‹’Œ‹Š‡…‚€u†¦¿½¯²Â¾º¸ºÀþ¶ºÁÇËÍÌËÈÈÊÌÍÏÑÑÉËáÕÇÒÎÊÒéÛÛãžJBP\n}ˆ™Ÿš™˜š›—ކw\@50+*.&:Xr‚Š‡‰‹Ž‘•—˜w.6,&1,<:753333741//269%.JqА‘•ˆœ£¥¥¥¥¨YYYZZZ[[YWZfx‹—œ¡£¥¦¦¤¡Ÿ—Ž}hULNRUX\`bcbbcdefhjkkjrrusqrezÀ‘]ikomlmnpqstuzyyz~„ŠŽ’Œ†„‡Š‹Š‡•Œ|}ypqœ®»¼»¾½¸³½ÆÄ»µºÁÂÃÅÇÊÌÎÏÉÉÊËÌÌÍÍÊËÌÍÎÏÐÑÒÖÑèãÉ›6MZ{}…‘¤’˜œ™š›’„nU;11/+)"3EVjyˆ– £~Ž“‰.-++-27;887766660357:<5+>o‘›”‹†—˜›ž¡¤§¨ŸYYYZZ[[[YWZfx‹—œ¡£¥¦¦¤¡Ÿ—Ž}gTLMRUX\`bcbbccefhikkpmpprumgŸ½ƒ^ifkmlmnpqstuyyz|€„ˆŠ…ˆˆ„€ƒ™ƒ„†ƒvi{ž¾³³¿Àµ³½½¿¾¸³µÀËÄÅÆÇÉÊËÌÉÉÊÊËÌÍÍÊËÌÍÎÏÐÐÆÜ×ÙÝäÀQ@Xf€Œ’›•˜œ™š›’„r^@+-61").7:P‘ÇÍÔÔ¸²Â©Q,,,-036877766655/15:93..0T€–“ŠˆŒš›œž¡£¤¥ŸYYZZZ[[[YWZfx‹—œ¢£¥¦¦¤¡ –}gTKMQUX\`bcbbccdfhijkvhpkovgqÅ·taiaimmmnprstu|}‚€Š„€€„ˆŠ{xwstˆ¡­Â»²¯µ¾Á¾¸¹¹¹¹½ÂÇÆÆÆÆÆÇÇÇÈÉÉÊËËÌÌÊÊËÌÎÏÐÐÍäÛÔÚíØz,S]ˆ”—˜˜œ™š›’„v_E62/..+##\³ÔÒàÉËÇÌÖȝ&(*-13455666555440.6>6'(6Rr”›‹‰—ŸŸŸŸ    ŸZZZZ[[\\YWZfx‹—œ¢¤¦§¦¤¢ •|fSJLPUX\`bcbbbcdfgijkueujkqd‡Ð«ofhbllmnoprtuuvy~‚„„‚€Žˆƒƒ……yrknvˆ¬¼«¹¼´©­½Âºµµµ¹¾ÂÄÄÇÆÆÅÄÃÃÂÇÈÈÉÊËËÌÊÊËÌÍÎÏÐÔÙÓÙÛáݱ1Fg{|—›–˜œ™š›’„x_C631+'aÆàÕȸÌÐÚßààº'&).36542555444331-6@4!*Et‰›™Š„‘¢£¢¡ ŸžœŸZZ[[[\\\YWZfx‹—œ¢¤¦§§¥¢ ”Œ{eRJKOUX\`bcbbbbdeghijoezoigh¥ÈŸrjgfqkmnoqrtuvosz…‡‡†u~‰Œ†€}}kd|¥ªµ·º²±·²¦¨´¼·²±¶¾ÆÊÅÄÄÃÂÁÁÀÇÇÈÈÉÊÊËÉÊËÌÍÎÏÏÈÈÊ××Öâßh9gv}™œ•˜œ™š›’„z`<&(.%&‹ÏÓȵ¸ÙßàéèâêÜX&).36542443332224/6>3&:\Œ’—”‘œ§¥¤¢¡ž›šžZ[[[\\\]YWZfx‹—œ£¤¦¨§¥£¡”‹zdRIJOUX\`bcbbabcefhijjiytlbsÀÀ—rhdiqinnpqstuv~€€€~|{x~†‰†~vqp›°°­¯°¦«²µ¯©ª¯´¶¹º»½ÀÂÀÀÀÁÁÁÁÁÆÆÇÈÈÉÊÊÉÉÊËÍÎÏÏÃËÏÐÍÒßâ´JXr‹—˜—˜œ™š›’„{Q3.!$K¯ÊÞÀ¡ÃêàÙÙÜÜÛçí–(*-1345533222111745847Ux–“•œ¢¤¤£¢ Ÿœ›ž[[[\\\]]YWZfx‹—œ£¥§¨§¥£¡“‹zdQHJNUX\`bcbbabcdfhiiilpwtcƒÍÁ’kacgjhnopqsuvvˆ†‚~{xxw‰„~~€|ri¦°«­³­¤œ«±«­º»±©µÃÈû··»¼½¾ÀÁÂÃÅÆÆÇÈÉÉÉÉÉÊËÌÍÎÏÍÒÒÍÎÓÕÕÙˆSjŒ˜œ˜œ™š›’„sH/1$!\®åˤ¤Ìà×ÔÝÛÓ×ÞÝê¹,,,-036822111000;9515Kq‘˜“ސ˜žŸž¡¡¡ Ÿžžžž[[[\\\]]YWZfx‹—œ£¥§¨¨¦£¡“ŠycQHINUX\`bcbbabcdfgiiknhx{fÒÇ‘bZbcbhnoprsuvw{zxx{€…‰ytsx}®·µ²¯Ÿž³´ª§±¸µ³¶®ºÆÅ¼´¶¼¸¹»½ÀÂÄÅÅÅÆÇÇÈÉÉÈÉÊËÌÍÎÏÒÊÉÏÙÙÕØáÅ\b‹ ˜œ™š›’„fS/'i¶åî²ÐßÙÕÕÒÏÃÑãØåË.-++-27;111100//=<5-6X„ —“’˜œ›˜    ŸŸŸŸ````aabb`^`izŠ•™¡£¦¨¨§¥¤˜~hULMQY[_bdedchgeefilndwhofe²Î²”p^`ijgg_`oyz{|€|su„~Žscs”ª£§ª©¦§ª­¦²½¼²­²¹½´³º¼¶µº³±²¸ÂÉÊÈ÷ÁÍÄ¿ÉÍÄÆÌÓÖÓÊÃÎÎÎÎÎÎÎÎÞÓ¥uuœ¥š–œœ|^>";ŽÚྸÀÌÖÙÕÎÉÀÊÑÏÛÛåÐ)'(.8;72).20*(,10-&-Q›’•™Ÿ ŸŸžžžœœ```aabbba_`jzŠ•™¢¤¦¨©§¥¤˜~hULMQY[_beedchgeefilngyntig¾Í©Žn_bijfhnssruz~|{tr|‰†yЁrkuŒž¤««¤¢­©­±µµ²±³··»¶°¸Å»¥±´¸»¾ÂÆÈÕÀ½ÆÄÃÅÁÈÆÂ½»¼ÀÃÍÍÍÍÍÍÍÍËÕϳ“Ž™– ž’Ž‘†rJJp´ÛÏ·®ÆËÒ××ÓÌÇÅÍÒÐÛÝæÉ((+06864/1320/13/'%:e›—“•™Ÿ Ÿžžžžœœœaaaabbbca_aj{‹–𢤧©©¨¦¤™iULMRY[_ceedcgfedfhlnhytxikÊÉœ†ladjidnz}spvyuxwuv€ˆƒw„pfu‘¡¡œ§’‘§©™ º­®°´·¶²®·¶·º¹³¯®±·½½ºº¿ÅÏÄÅÇÀ¾ÄÇÐÁ²±½ÇÇÃËËËËËËËËÊÐÛÞ‰˜‘¥˜•œ“zfmÕæÍ°²ÅÔÕ×ÖÓÏÊÇÌÒÔÑÚßç¹%*03435642136764,"+R‚›™•—›ž  Ÿžžžœœœœaabbccccb`ak{Œ–›£¥¨ªª©§¥™iVMNRY\`cefedgfedehkmgutuetÑÀlcfjhdttqosyvnsz€€}{zypkv“¤ —–‰šž’“§³±¨«°·¹¶¯©±¶¿À­œ§Àµ¸»º¸¸º½»¾ÆÈÃÂÇÌ´«§±ÃÍǽÈÈÈÈÈÈÈÈÏÊÉÚݱ¡••—žŸ€‹¢ÇÖж±ÆÓÏ×ÕÓÐÍËÉÈÒÖÕÔÙáç¢%-4620384/,06:72)&=p™¡–Ž—™œŸ  žœœ›››bbcccdddcabl|—›¤¦¨ª«ª¨¦š‘€iVMNRZ\`dffedgfddehkmdool_„Ò´‹}mfgjhemfdmsrqsx}‚ƒ{srupw‹¢£•–”›˜Ž—¬­Ÿ«­¯¯®®°²®½½ªž¦³¸¹·´¶¹º¸µ·º½ÃÌÌú¡¬¹ÁÃÃÅÇÅÅÅÅÅÅÅÅÆÊÅÌÙÌ™œ‰–˜‹¨ÅÒѾ¯·ÊÖÖÒÎÌÊÈÇÈÊËÓ×Ö×Ùãäƒ'/662026/*(,3750*7[‰¢ž”’š›ž ¡Ÿžœœœœ››››cccddeeedbcm}˜œ¥§©«¬ª¨§š‘€jVMNSZ]`dffeefedcegjmfkkd[ŸÏªqhgijia_eooio}zz~}vrt‡Š’˜–‘˜œˆ‹¥«šœ±µ°©¢ §³½¼¯¢ «¶µ¬¸´°²¸»·²µÀÁ¾ÃÁ¶°¸¼ÁÃÃÃÆÈÃÃÃÃÃÃÃÃÂÆÂÃÏÕ—‘‘Š›½ÕÕȱ²¿ÒÔÉÆÍÆÆÅÆÇÉËÍÐÕÖÚÚãÞc,0454223*(),14436Px—Ÿ—“–œž ¡¡Ÿ›œœœ›››ššcdddeeefdbdm~Ž˜¥§ª¬¬«©§š‘€jWNOS[]adfgfefeccdgjllmj_\¼Ì¨“†vjfhkmadjnnnt{zttzzux–˜”“—–”¡¡ §«©µ­¤¡¥­²´´ š¬¹´­®±±±³µ··¶°ÂÀ³²³²¸¿¶®±¼ÃÀ¹ÁÁÁÁÁÁÁÁõ·ÀÄ̳œ ´ÌÏÀ¼ÅÅÈÉÉÌÏȽÇÇÉÊËÌÌÌËÑÕÝÛã×G1014662.(+/1248;Hiš—””•žŸ¡¢¡Ÿœ›œœœ›››šš™dddeeeffebdn~Ž™¦§ª¬¬«©¨š’€jWNOS[]adfgfefeccdgjlrpk^_ËÊ©˜‹ykeglohmlip{zqoou{up}“”œšŽ—™’“—ž¥«ª¢™­¦¢ªµ·­¡‘¥´³¯±±­ª¯´´²²·¼³»­ ­»»¾µ²±¶¿ÆÅÃÀÀÀÀÀÀÀÀ½¥³ÂµµÓ¥Ÿ¹Íɽ»ÀÃÊÔÚÔÈÃÈÐËÌÎÐÐÎÌËÇÏÔßÛâÓ740/2882+(/5645;BVy–˜’“•“Ÿ ¢£¢Ÿœšœœœ›››šš™eedddccc`afn{Š˜ ¨ª¬®¯®¬ª”‚kWMMQY[^accbabbccdefffklZ~Ôø–‹|rmlif[qqkv{ttrz{tt~‡ˆ“›‡•ˆ›¡žž£¡›š¬º·®¨Ÿ•«¯±°­¬¯²§«®¯¯´»Â³±°´»À¿¼ÆÀ»¼ÀÁ½·³º¼¶µ»»µ½»·´µ¹ÀÄÏʼ»ÀÇËÇÇÈÈÈÉÉÉÉÐÐÈÈÍÊÀÒÖÐáÙç»+/*(+374/-).9<;ET’›–”šœ˜ŸŸŸŸžž›ddddccbb`afn{Š˜ ¨ª¬®¯­«ª”‚kWMNQY[^bccbabbccdefffjkYÔø™Ž€vrpliaoqjmuxzwr{•’”…“ž‡~ŒŽš–›¢›š°¯¦¦¯«žŸ¬²¬¨«±´°ª·¯©ª±¶´°²¶¹¸µ´¸¼Â¿½¼½½»¸¹­®¿Ã¶®°¯±±¯®µÂͼ½ÀÃÈÌÐÒÇÇÈÈÈÉÉÉÌÉËÑÏĽ¼ÊÍÚÔ×ä/+),263/*-5823Jg‡’—“”›ž™ŸŸŸŸžž›ddcccbbb`afn{Š˜ ¨©¬®®­«ª”‚kWMNRY[_bdcbabbccdefffhjW‡ÓÁ¶ž”‡}yvrniknifq||~|ww‡™›“‹Œ–Œx‰‘šœ““¢­³¬ ˜›¦¯²«¬­­¬¬­¯°¯®¬«¬°²´·º·³°³¶¼½¾¼¸¶·¹±­ª®¹¾µ©®¦£®ÀǾ±³ºÃÍÒÓÑÏÇÈÈÈÉÉÉÊÏÄÈ×ϵ¬¸ÇÌÛÌÏÝS!/-+-2420'2;5'.V€“’•ž ›ŸŸŸŸžžœcccbbaaa`afn{Š˜ §©¬®®­«©”ƒlXNNRY\_bddcbbbccdeffffhVŽÓ¾µ¢™…}wsmdhlit}thu€…–”ŒŠ™ƒn…š˜™š•‰ŽŸ¥žª©ž“›®´­¦«¯­¨§«°£§«ª§©²¹¶²¯±µ·´°¶º¾º³°³¸®³°ª°¸°¦²¾À¹³´¸ÀÅÌÐÑÍÈÄÈÈÈÉÉÉÊÊÏÇÊп¤£·ÃÌÏÏÐÂ,20/./1110*5<2'7g“˜“Ž— ¢žŸŸŸŸžžœbbbaaa```afn{Š˜ §¨«­®¬ª©ž•ƒlXNOSZ\`cddcbbbccdeffgcfS–Ó»³¥“‹‡‚{ul^cpsyyjbzŽ‰‹’‘ƒpž—‹ž›Ž‹˜ž™–œ¤˜—§¯ª¦ª¬§£¦«®ª¦©¤Ÿ¡©¯¯¬­ª©­´·¶³²·º¶°¬¯´·®®·´¥ž¢»¿Àº³µÁÍÍÍÌËÉÆÃÂÈÈÉÉÊÊÊÊÍÏ˼¦š¤´­¸ÃÏß…201210//0.6947Qy™œ“Ž’š ¢¢ŸŸŸŸžžœaaaa```_`afn{Š˜ ¦¨«­­¬ª¨ž•ƒlXNOSZ\`ceecbbbccdeffgaeRžÓ¹²¥Ÿ–‹…}vh^bqxxskv‰•‚†‘˜‚pƒž˜“•‹‹Ž•œœ˜””—™ «°¬¤ §¦¥¦¨¨¨§­ª¥¢¢¢¢¢£¨­®®¯´¹±³³±®¬­®²«¥¢£©µÀƹ°·ÉÔÑÉËÉÅÃÂÄÆÈÉÉÉÊÊÊËËÍÑĨ˜§¨“¿ÊÜA #1353/,.1048=QpŠ–š“’™žž ¥ŸŸŸŸžžaa```___`afn{Š˜ ¦¨ª¬­¬ª¨ž•„mYOOSZ]`ceedcbbccdeffh_dP£Ò·°¥ž—‘†}uddentmmyŠŽŒ„ƒ‰Š…r|•™Š”œ†ƒ’™“–Ÿš‹“£©¡ ª©ŸŸ¥ª¨¢ ¥«¦ªª¤›™ž¤¥©®­««¯³²¯­¬­­«¨¨«¢–ŸºÈůºÇÎÎËËÍÄÂÁ¿ÀÂÅÇÉÉÉÊÊËËËÏÉ´œ›©§–Ÿ·Î¯%$1574.+-1,3<LjŠ–’•’˜¡¢œž§ŸŸŸŸžža```___^`afn{Š˜ ¦¨ª¬­«©¨Ÿ–„mYOOS[]`ceedcbbccdeffh^cO¦Òµ°¤ž—’†|tbjijlcj‡ˆ~}‰~fxŠ†‘Šž•ˆ†” œ“ޤ ¡£ž™¢°¦£¡¢¦¨¦£¥ œœ¡¤¥£°¬¨©­®«§³­¨©®¯ª¤®¥¥µ¿¹®©¼ÀÇËÌÉÅÃÂÂÂÁÀ¿¾¾ÉÉÊÊÊËËËÒÁ¦˜¥´¥ˆœ´®×x)51695-*,1'2AWy—œ‘’œ§¤šœ¨ŸŸŸŸžž````````_bisŒ—ž§©«¬¬«©§¡—…mXNNQX[^accbaccccccccac]UÉʼ­«–—™Š|wmiil€ŽŠ‚„…†y|‚ˆŠŽŽŠˆŽ–œŽ‚•¶›™  š¥ªš˜¤›£©¦§£–†¤»¥¡«¤¢««³¬ ™ªª¨¦£ª˜¡¬¸º¶µ¼ÅÉÈÆÃÁ¾½¼ÃÃÄÅÇÈÉÉÍÊÉËÑÖ××Ò°Ÿ¢­®Ÿ¥ÂÎ:/A('8@5,19:,5Lp™™š›œž ¡¢œœœœœœœœœ`````````cis˜ž§©«­­«©§¡—…mXNNQX[^accbacccccccc_a[TÉË¿±±œ›Œ}wfcmv‚‰ƒ„Œ‚„rŽŽŽŒ‰†…‰——ˆ†•œ–Ÿ‹§«–˜’—ªªŸ¥œ¡Ÿ¡¨¡ª£¥ž“¦«¥›¥˜®©’ž¥œÄ¹®ª±ºÀÂÂÂÁ¿¾½¼»ÃÄÅÆÇÈÉÊËËËËÊÉÇÆÓ‘—¢œ¨–°Þª".,806502::2.6S}—˜’“šš›ž ¡¡œœœœœœœœœ`````````cjt€˜Ÿ§©«­­«©§ —„mXMMQX[^accbacccccccc\^XRÉÍÄ··¥¢Ÿ’ƒ{a_uƒ{ˆ„ˆj{{“Ž“‘‰†…„„œ“†‚¤©¢™§ŸŒœ™Žuzta^¨•¨¦¢¥ ¡ª¯¬—¥¤ª¨¢œ˜–›¤Ï½µ°µÂÉž»»¼¼½½¾¾ÄÅÆÇÈÉÊÊÍÊÆÅÈÎÔØ¥›¦ ’‡to•Àæc2 853/.5=9/0>cŽ’•›œœžŸ  œœœœœœœœ›aaaaaaaaadktŽ™Ÿ¨©¬­­¬©¨ —„lXMMPX[^accbaccccccccZ[UPÊÏɾ·©¥ ““—ƒed|…€€ˆ‡l{t—ŒŒˆ„ƒ„†ˆŠ€Œž¤ž™hqppvu‚¡‡„šŽz\•«£Ÿ¤‘³¢§œŽ“ š’˜§–˜’’¼Ñ³«´ÂÌÏËþ¹º¼¾ÀÂÄÄÅÆÇÈÉÊËÌÌËÎÖÛ×ɽ«™–}b_ev³ÖÍ'#*%2222247744Ox˜‘Ž•žžžŸŸŸœœœœœœœœ››››››››šbbbbbbbbbeku‚š ¨ª¬®®¬ª¨Ÿ–„lWLLPX[^accbaccccccccZ[TNÉÐÌ´«§Ÿ••›šŠom€€zŠ…r|v—‡…†„‚‚†‹Ž€ˆ—œ•|b}…‚zs`\p_ƒ¥§¬pnqˆ©“’šnŠ¢›kXNp›£’žÃ»¢¥»ÄÌËþÀļ½ÀÂÅÈÊËÇÇÈÉÊÌÌÍÌÈÉÔÝÕ½§–`?]dg¬Îá‰!-330035555>eš–”””ŸŸŸŸžžžžœœœœœœœœ››››››››™cccccccccflv‚›¡©ª¬®®¬ª©Ÿ–ƒlWLLPX[^accbacccccccc]]TMÈÏÌö°©ž”’™‰ts~{x€†tzy˜‰Ž~‹~~„‡‹…’ž™„rm‰•‰plpfVSŠ¥¤±ƒxouYc€‹—emM_YsJ>ŽŽ§Â¬“§¶ÅÅÃÁÀÂÆÉÀÁÂÅÇÉËÌÈÈÉÊÌÍÎÎÊÈÊÓ×Ê­”uK[eWv¡²ÞÁ;*".2,8.*29842Qy˜—•›˜¡¡ Ÿžžœœœœœœœœœšššššššš™cccccccccfmwƒ›¡©ª­®®­ª©Ÿ•ƒkVLLOX[^accbacccccccca`UMÇÏ˽¹®‹–€rqxy|{qqxŒ“†„|~€ƒ…††…”‹Œ“Œ}ƒ–qcg\G?@E™˜—€|uxyX_hRNBJT8</@"{»¶˜®ÂËÀ¾½ÀÅÈÈÆÀÀÁÃÅÆÇÈÉÉÊËÌÎÎÏÈÌÏʸ™u\XXb`p‘°Õ×q*.97$5--57217i…™”Œ’¢£¢¡ Ÿœœ››››››››šššššššš˜ddddddddcgmwƒ›¢©«­¯¯­«©Ÿ•ƒkVLLOX[^accbaccccccccdbVMÆÎÊÁÄÀ²„†Žwlmtz€u]s‚‰ŒˆŽ†~}€ƒ††ƒ€}Žš”|r€ŒŠaalnfkiV[}‰Š}{pJC=GjT?V=(2,6,.0M«§ÆÅÈÇÉÆÂ¿¾¿Á¾¿¿ÀÁÂÂÃÉÊÊÌÍÎÏÏЧ„eVW^Oa_ZŒ·ÁÜ¿,2$8,9*-.6;2'/@z‰–”ŒŽœª¤£¢ Ÿœ›››››››››šššššššš˜ggfecbaagiox„›¡¬¬¬¬¬¬¬¬Ÿ™‰oUHJQY\_bddcbddddddddb`ZEÓÏÅÐɨ Œs‚„zuwjtzgt†ˆ‹Š†|zƒƒƒ„†ˆ‰Š† •cw|Ž€s}pu…ˆr?OdR~qUI7?]qEH@W:)5,Dz¼›™¦ÂÔÐĽÃÃÂÁÀÀ¿¿ÁÆÅ¾ÄÌŽͿÂÒÂÊÐȇoVNYcc]Zo}°Á×°--./00110)420'([Ž’•”“—¢«£¢¢¡  ŸŸžžœ›šš››ššš™™™™ggfedcbagiox„›¡¬¬¬¬¬¬¬¬Ÿ™‰oUHJQY\_bddcbdddddddddZ]KxÕÍÉËÇ»™{u‘€€{npqkyŒŽ‰zww††ƒ|wz†‹ƒxkƒŠybƒukWCD>HGZkjdn\p`WW72L:6-&&’¿‚œ«»ÃÃÂÁÁÂÂÁÁÀ¿¿¿ÀÀÁÂÃÂÃÇËÏÎÍØÑ”[RSTWY\_as…©½µÌa%..//001102983,;l’“”–›£©££¢¡  ŸŸžžžœ››š››ššš™™™™hhgfdcbbfiox„š ««««««««Ÿ™‰oUIKRY[_bdcbaccccccccfU`SZÏÑËÀÔ³›{j’ˆŒ{qmjv†‡‡ƒ~|~„†‰‰‰ŠŽ’~l~‡ƒ…quwlSH>6>@<B_loj[e`dp+G/t:2$J°ªuª½Æ½µºÁÁ¿¿¿¿¿¿¿¿Ä¹´¿ÃÂÎØÅÊι°…XhdaZSTc|Žµº¶Üu!00000000/<=?72Xƒ”’‘”𡤥££¢¢¡ ŸŸŸžžœ›››››ššš™™™˜ihgfedccfioxƒš «««««««« š‰pVIKRY[^bccbaccccccccfX_XI·ØÊȽÁ˜€‰€”Žtqqo†‡…€{z}ƒ„‹ƒ|}…Œ‹‡‚]€Œ†‚d^7Q_WG>:2BihvXF%a\^hS?+j=Zª¼xy­¿À»´¶¾Á¿¼½½½¾¾¿¿ÆÂÁÍÊÄÌÈͧlt€a[^^ak}ž¦³»¼Ðz&.>22211000+@<@8<q“–’–Ÿ¦¥¢¤££¢¡  ŸŸŸžœ››››ššš™™™˜jihgfedcehnwƒš «««««««« šŠpVILRXZ^accbaccccccccda^YIŒÛƾȰ±‘ŽŒ„jqy’ŠŒvv}‚~x€‚ˆŒ‰€x}^kWD9ZXN8,046e„n`($9fSMbU(,m0$X¬ tŠÌÃÆ¸®²»¾¿Á¹¹º»½¾¾¿ÆÅ½ÅÄÉÕ¾¶qXmŠŠmntx„–§®ª£­´Æ„&*,>543210//*=7::K‚—–“’™£¨¦¢¤¤£¢¢¡   ŸŸžœœ›››ššš™™™—jjihgfedehnw‚™Ÿªªªªªªªª¡šŠpWJLSXZ^abba`bbbbbbbbcj`ZQgÓÅijɷ¡™ž…wjt€‹“…ysv„€{o|‰‡ƒ‡~iŒbF5GLR83;@7(-€g^8%AZ@YT+<dDj¯žp¢Å¿Ã¼±¯·º¶¹Ã¶·¸º»½¾¿Á»±ÆÍȵtRdgnj›š¦§¨¨§§ª­¾È‰1/.6765320/.0623?cŒ’“”˜ž¤¨§¥¤¤¤£¢¡¡   Ÿžœœ››ššš™™™—kkjhgfeeehmw‚Ž™Ÿªªªªªªªª¡›‹qWJLSXZ]`bba`bbbbbbbbene\VU¼ÉÅÇÀº«››š~nu|ƒ‰}mqv{~€ƒ…t|tgj€–‹bSAGMYM1+:7'#8hnCH'Kh†\ZW&@"PG…µ“x˜Âɸ½¯²¶¹¶³³·³´¶¸º¼¾¿»ÁÅÖ¸ˆg&Q~ete}”³™¢©ª¦¨±»Ô•,4+@%986420.-;11/H~“‹–£¤¥¦¨¥¤¤£¢¡¡¡  ŸŸžœœ››ššš™™™—kkjihffeegmv‚Ž™Ÿªªªªªªªª¡›‹qWJLSWZ]`bba`bbbbbbbbgni]WQ¥ÌÒÅë©¶ šyj€ƒ‚wiv‚‚zuz‚x‡•’€lccmR>GJIG9.4D3$.CgJ@B*_fP|^>ca¡um–Î½ÆÆ±ªµº¶µ¶°¦²³µ·º¼¾¿ÀÎȯY'Uf:pnh“𥍫«©©²Ãϐ'+5452:97520.-D/3.O˜‡—¡¦¤£¦ª¥¥¤£¢¢¡¡  ŸŸžœ››ššš™™™—mlkihfedgdcl|œ¢©©ªª«¬­­Ÿ›ŒsXIHMTW[_abaa``aabccdmnlecLcÉÒÉ˪¡¶¤›W|…x|€sj‚‚€}zyyˆ‹gBSUNRSOPRE/6`D,-6[H158GX8iY,@‘4'–y‰¢¿É¹ºÀµµµµ´³±±¶²°µ¾Ä¾¾½ g;;WnXe‰v|p”’¥¦¬®¸Æ®y)*+-/1348;;6.+06922Hp’†Ž˜£ªª©¨©££££££££ ŸŸŸžžžœœ›šš™˜˜™mlkihfedgcck|Ž›¢©©ª««¬­­Ÿ›ŒsXIHMTW[_abaa``aabcdd^fkfgVUŽÔÐÏ¿ ±»†p~„‚yst…‡…{onz†ƒvvth[LD;NYN=52.Nu/$E^L,;<;A*dW sj)_n‡¬¶ÂÅÀ¹µ´­²·»ºµ®©¹µ³¶¼¿¼¸¾¼¤xSKT\][z‚vi‡—¢©¼Á§_*+,.02448::5.,066/6SvŠ‹„’›¥ª©§¦§££££££££  ŸŸžžžžœœ››š™˜˜™mlkihfedfbbj{›¡©ªª«¬¬­­Ÿ›ŒsXIHMTW[_abaa``abccdd_gkfjdRV¶×Ðɱ°¼rŒ~€‰ru€ƒ„~ury‹ƒ†nijOQ:Q\K0"&/hy$/FWI&;<44&XF#‚pvm]s·Â¿½¿Á¿¹´®±¶¹¸´®ª»¸¶¶¹º¸µ¿Æ·‹]JUckXh…|t™¬±ÊÏ“A!*+,.024567873..152.?d€„€‚˜ ¨ª§¤£¤££££££££  ŸŸŸžžžœœœ›š™™˜˜mlkihfedeaaizŒ™ ªªª«¬­­®Ÿ›ŒsXIHMTW[_abaa`aabcddepnmhjn_LtÔÒÁȺ¥u”zz„xp|†|zy{€}zwwVQVJTQ\WD2'*7le1S2B=9EFIK>]GMui£pr§¹Â¾º»¾¾¸²¶´±®®¯°²¸···¹ºº¹ÁÌÇ¡nRVeqe_p‰•§Ã´l0+4--.0145787641/02401Lv‡}yƒŸ¤ªª¥¡ ¢££££££££   ŸŸŸžžœ›šš™™˜mlkihfedd`_hy‹˜žªª«¬­­®®Ÿ›ŒsXIHMTW[_abaaaabccdeeumkonmhYP¼Û¾ÆÇ¥‹‰vtwot‚ƒ~wrs{‚qtN:CHKCabP=5.1CVZ0AQ)11>?=JH;WPStZ‚x¡³®º¼¾¼¶°ª¨·´¯««­°²³µ¸º¼¾ÀÃÂÈȶ“nWOZk`O„™¯]6((,//023679:630/02342<^ƒ‰yx‰¢§ª©¤  ¢££££££££¡¡   ŸŸŸœœ›š™™—mlkihfedb_^gxŠ—ª««¬­®®¯Ÿ›ŒsXIHMTW[_abaaabbcdeeehfgutgf`Vœã̷θ•{uqmnz€ytx}€|ywƒ}PEG@G6W[L<8-1L:aLK,2..1.)2&#L]JYZ|˜žº­´º·®§¨¬¯°°°°®¬«³¸½¿¿ÁÆËÅÇÉ¿ x\R9Z_?gˆ}‹g1$58-123579;<51,-04438MpІw~’¤§©§¢ ¢¥££££££££¡¡¡   ŸŸžœ›ššš—mlkihfedb^]fw‰–œ««¬¬­®¯¯Ÿ›ŒsXIHMTW[_abaabbbcdeefcjfsvggdY”â×ÁЮwztnw|vpt|‡‰{i\pcVO?11,EPJEF51L*]lS82112+-"1\o_JeŽŸ£¦±¯³´®¥¤«´°¯¯®­­¬¬»ÀÅÅÂÂÇÌÇÇÈÀ£{a[19RNKy~œzL64*&433579;<=4/*+1552@^€‹x‡œ£¦¨¦¢¡¥©££££££££¡¡¡¡  ŸŸžžœ››šš—mlkihfeda^]evˆ–œ««¬¬­®¯¯Ÿ›ŒsXIHMTW[_abaabbccdeffjvhmtjmkKÛÖÛύdy€wt€|mjŠ…ƒ†‡{cNJ3GK=8+0=JHNYE5H(N…Y*362/4+.,HilRt˜–µ»»³ÄÀ¶©ž¦®¸³«¥¤©¯´ÂÇËÉÃÁÅÊȾ¾Ä¶ŽbK> Be@x…’›…N$(4/*3468:<=>4.(*1652EiŠŠzx¢¢¥§¥¢¢§¬££££££££¢¡¡¡   Ÿžžœœ›šš—jjihgeedb^^fw‰–¦¨«­®­«ª¤™‹x^IITVY]acddcgecbcegihmtxwqjdRŸÓÐÒ¹ekxjl~€rp||–ytˆQ"49OB/,*,4OP:]F/Z+1c„X<7%0-$PŽsY™­…¨¸¬¸½Àº°¦¡£ª°±«¤¡¥¯»ÃÃÄÅÆÈÉËËÍÊÈÆ¶•oV?/-CNO›˜§€$3/2/46459?@;7-61+2537Q‚“~{——œž ¡£¤¥¨§¦¤£¡ Ÿ¥¤¢ žœ›šžžžœœ•jjihfeddb^^fw‰–œ¦¨«­®­¬ª¤™‹x^IITWY]adddcgfdbcegicglqrqmj]wØÐÓ˜ljcoyyss|‡‡wty}b0)SG=+%501BIHPG4S0-2ua\WE#(Vtq©©z¶¬½·½¹°¢™­»¬©¥¤©²½ÃÃÄÅÇÈÊËÌÐÎÍʼw]C*+9MJŽ§(303/47559>?;6.30/40/:_‡‘~‘™˜››œžŸ ¡¢¤¤££¢¡¡¡¥¤£¡Ÿžœœžžœœœ•jihgfedda^]fw‰–œ¦¨«®®®¬«¤™‹x^IITWY^adedcgfdccehioopqqqpoiUÍ×Ï{nmooopx€‚wbXZVJN'+c?+'336.5>OCD9O%E<ƒQ!!@Їl™µ¤§…‹±¡»º¸³«¢Ÿ£«²¥¥¦ª°·¿ÃÄÄÆÇÉÊËÌÓÓÑÎé‚eI&&.GFw£©ƒ030315866:>?:5./.46+,BtŽ‡˜œš™™š›œžžŸŸ ¡¡¢¢¥¥¤¢¡ Ÿžœœœ››•iihgfedca^]evˆ–œ§©¬®¯®¬«¤šŒy_JIUWZ^bdeddhfdccehj‡ƒ}wsqqrqV¤àËuku„mbqƒ„}z\QIP<>ND9b5*J+;.24B>:9UIS(_b&15;†€f”µµš¬•™±¢·¼¶­¥§®®£˜Ÿ¢¨¯¶¼ÁÃÅÅÆÈÊËÌÍÒÓÑÎDzŒjP**:D]¤«†:21426977:>>93.-.77'/Q‡’‹‚ŸŸ˜˜™™™ššš™š›ž ¡¢£££¢¡   œœœœ›››š•iihgedcca]\evˆ•›§©¬®¯®­«¥šŒy_JJUXZ^beeedhgecdfhjŠ…~wsrtuvl{ÓÏynyupqz~}…}raU,6&*:f( 3D3<18/-C-5_wg2@{%.y—p‹º©­¤µ•ž®±¹¾µ­¥§¬ªŸ£ª²¹¿ÂÃÅÆÇÉÊÌÍÎÏÑÐÌɺ”mW5,,CJœ­ˆE12547;98:==72..075);d’’ˆ‡š¤¡¡š™™™˜˜˜˜–—˜šœžŸ    ŸŸŸŸœ›››šššš•ihgfedcb`]\euˆ•›¨ª¬¯°¯­¬¥›Œz`KJUX[_cefeehgeddfikyvsppswyxxm®Ó~vvew€yz†‰€[TBA6B",,l(38.G74;-*F&3_P^YUžA'y‹w´±µ²®¿˜™¡±¼Ê±®©¡œ›ž¡¤§­³º¾ÁÃÆÇÈÉËÍÎÎÍÒÐÌÍĝr^B!/%>CН‹O13658=:9;=<60,34300M{’ކޢ¦¡¥œœ›š™˜˜––—˜˜™šššš››œœ››ššš™™™•hhgfeccb`\\du‡”›¨ª­¯°¯­¬¥›z`KKVX[_ceffeigeddfikqqppruwyvvp†ÅŠxqw€zƒŽ€dJK5?U8!)(XB82:J/77/?D'4SEL9&tXOxx­­¥Æ»°¼›¡¯¼Æ¥§¥ž—™£®«¬¯³¸½ÀÃÇÇÉÊÌÍÎÏÐÖÔÐÔϨzeL/.&3Gu±V04779>;9;=;5/+98-+8`Œ‡„”¨¦ ¨  Ÿœ›™™˜——––•””••–—˜™ššššš™™™˜˜•hhgfdcbb`\\du‡”š¨ª­¯°¯®¬¦›z`KKVY[_cfffeigedegikyyxwwvvurpsu¬™tn“Š‚†‹ƒiP1>,Ao()619a-)\=(700W?+7E=J*Qu;¨xsž¨¤µ´¼µ°„²¼¼¬š›žŸ¡¤¨«°°±²¶»ÀÃÇÈÉÊÌÎÏÏÔÛÙÔÚÔ°iP:++*Mf±Ž[04779?<:;=;4.)<;)'>l›‡ƒ„—«¦Ÿª£¢¡Ÿœ›š™˜—–”’‘‘‘’“”•—˜˜šš™™™˜˜˜•eeeddcccd^[bs‡–ž¨ª®°²±°®¡œŽu[LLQXZ_cfggfihfefhkmq~winsmght€ƒi~cz{„ˆ‹{lf.6@&5R#P.3"0I\P$+?8/G98-/<e"X ƒk £Ÿ ¢¶¹Á¾»‚©±®®š™ •œ™¬´©®³¶¶¸¾ÃÁÂÄÆÉËÍÎÐÒÙÚÕϸ”h\?+)*<^ªŸR923;99>CA:300688,0^Аˆ” ¨©¤Ÿ¢¢¢¢££¤¤ Ÿš–“‘ŽŽ””•–——˜˜˜eeedddccc^[bs‡–ž¨ª®°²±°®¡œŽu[LLQXZ_cfggfihfefhkmqyvtxv}y|d`‡wƒ†q‚oP/O?D_E5(19F[YG&-.&QE&[F(MP# !xs`¥« Ÿ¥§±µ¶¼º¢´³£›™Ÿª©ª¤¨ªª¬®±´¹¿ÃÁÂÄÆÈÊÌÍÓÑÓÏÉÊÀ¨mZ?-(*<U¡¨\838>:9>B@9301664-8gŒŽŠ—¢¦¥£¡¡¡¢¢¢£££¢¡ž›˜•“’‘‘‘’’““”•••–eeeedddcc^[bs†–ž¨ª®°²±°®¡œŽu[LLQXZ_cfggfigfeehkmrtpvyotqƒ¦|·Ÿ{|ƒŽf]5@c0$Fx7(1;SNZF5$)<"\7'f1+W57lŽU¹§©ª¡¡­ÃÀ¸¬»³˜ŠŒœ ¢§¥­³»°­«­²¹¾ÀÁÁÃÄÆÈÉÊÑÎÓ×ÔЦjN8-'-?L’´k95?A<:>A?821273/1GtŒ‚Ž¤¢ ¡¤  ¡¡¡¢¢¢¤¢¡žœ™—–““’’’‘‘‘‘“ffeeedddc^[ar†–¨ª®°²±°®¡v\MLRXZ_cfggfhgedegjltrovzoo¸‘ˆ;=Ujm{~„uzL-Hc!/Q{+;:Q8>0,+,5)E:l%II1*N›mǰ¡¹³šœ©Æ·È¼¬tQj}|ˆŽ¢¢¯«°¸³®®²·»¼ÀÁÂÃÄÅÆÆÐÅÅËÌÉ·œlJ5-"'57¾|=6DE><?@=611381,7Yˆ…“¢¥Ÿ›Ÿ¥ŸŸ   ¡¡¡¤£¢ žœ›š•••”””““ŽŽŽŒŒŒfffeeeddb]Zar†•¨ª®°²±°®¢v\MMRXZ_cfggfhfedegjlqtty}y…£¿`5&r²¦€T`N>JcK!%mn-3,@+20/55);HCc7J-6'˜m]¸ª¶¯Â®•£®½ÂÌ©y^\qZ`b^pw” ¯¸¶³±±³¶·ÀÀÁÁÂÂÂÃÈÄÎÓů˜X9+)#*9;qÀ‰E6DG?=??:301481-@j‹„‹˜¤¥ž™ž¥žžžŸŸŸ  £¢¡ Ÿžœ˜˜——––––ŽŽŒ‹Š‰‰Šgfffeeeeb]Zaq…•¨ª®°²±°®¢žw]NMRXZ_cfggfgfdcdgjlmuuv{}‰ ¨g628B‡¥œuCX2;[f)*Bhw0)2>=@E2-+16OROCE=3|ƒd °˜·Àä•®ÁÇǦ~{•˜’}€kL?A]vŠ¥«°°­¬°µÀÀÀÀ¿¿¿¿ÅÁĹ“se^P;/-),7@e»’O3>G@>?>81/26952Jw‹“›££žš¡žžžŸŸ ŸŸžžœšš™™™˜˜˜‘ŽŒŠ‰ˆ†ggfffeeeb\Z`q…•œ¨ª®°²±°®¢žw]NNSXZ_cfggfgfdcdfikgrrr€‡†ˆx.,9‹XXV`CQP=%Fc=€#+-G8DC[=&!*"6Z]7H;'L°a›Éµ¶Å±›¢¹Ç¼„€™ž“ˆ³žˆoUMEEB„”¥ª¦¤¬¶À¿¿¾¾½½¼µš„nQJ[jh\I:0#$2]²–Y07F??@=70.27:99T€‘†~›  Ÿœœœžžœœœœœ›››œœ››šššš”“’‹Š‰ƒgggffeeeb\Y`q…”œ¨ª®°²±°®£žw]NNSXZ_cfggfgfdcdfikaory“¢–ˆ—NtG@‡‘VRM/3bT9;jUsO2N#13gN2*%6)0V<78~‡¶Ÿ±¿ÅÅ–‘·Ç¸‹h{v~vˆd†uch^_Wi›¤ Ÿª·¿¿¾¾½¼»»h`jov‚†caOA;,,BZ«—_.1E?@@=6/-27:<>Y„‚| ŸžŸ Ÿ›››œœššššššššœœ››››–•”‘ŒŠ‰jjihfeddc^RWr‡’¨ª®°²±°¯§œŽz`KJU[]aeggfemRcn]Zfvcup€“˜Ÿ”Ÿº ´ŽriqL7->R|:KUm(?\+1Y*!$O`2'$2*$;4w†j¯´¥­ÇÁ©ÅÃq^_qRScC+he;aiveupy|ˆ—ž§³ÂÀÄÂÀ½¬žƒaiE<<UDGA<7,0EM·r:4E=A9/,/46752IuކŠ  Ÿž››šœœœœœœœœœœ›››ššš˜™™š›œœ˜˜—•‘‰‡…hggedcbba]QVq‡’¨«®±²±°¯§œŽz`KJUY\_ceeddmaf__neZyƒ§›¦£—““ƒˆ‚?0!!XEFˆW2]Wx& FM91Y#'%CdQ.055,, +@œj¦¾§ªØÌï¿´UQXMC=5+9?2*;(,U…z{}ˆ–›œ¥±´¾ÎǷ®fWLA-0/K:AC>95+/DI·‘mA5E>@8/,/46612Q}Œ††  Ÿžœ›ššœœœœœœœœœ›››ššš™˜˜™™šš››‘‘‹‰ˆ‡edcba`_^_[OTp†‘©«®±²²°¯§œŽz`KJUWZ]accbbh`gbb\Z£È£w˜™ƒ¢’J=o6(QdSnjVPaZ~%)J9F1i+6+,Kl])63!( €‰Œ¾¨«¬ÌÅË®ÉÊP;A5&3<;1.5AM9#%a~ƒ~‡”˜™¢¯¶ËÃÎË™hE<1(D--65;>952(-CC¶—eL6E?>70-0454,6`‡Š‡’ Ÿžœ›šš›››››››››››šš™™™——˜˜˜˜˜˜ŽŽŒ‹‹‹‡baa_^]\\\XMSo…‘©«®±²²±¯§œŽz`KJUVX\`bba``Zdb_K\¼ÁП”ªƒ{MU&%2Qt>Qe"RiVat(+D,D/s31,%)YjTK?+"\¡_º£ž·¹ÂǾÿZSC,-)B2/$#5|³hR7:g…~†‘•– ®ÊÐÃÕµR+66JO„]@&848420'-C<²ž_V:G?<60.2442)?p‰‰–˜ŸŸžœ›š™ššššššššššš™™™˜˜——––••””’‘ŽŒ‹‹‹Œ‚aa`_]\[[YUJQn…‘žª¬¯²³²±°§œŽz`KJUWY]accbaa^aU`YaÁ¹¯‘¬d|ˆEC!=:cC4X9':q^k`,)7*5,d@$#2%0;4O05’h’»¤¿²¼ÌÁ¿Å^SK7!5GS69=LxÞ¸—F<^W}}|‚’•¡°ÑÈØÉe,>+/[uˆ™a;-0410/(/E5­¤^[@J?:5003530-N~’‰Œ›žŸŸž›š™™™™™™™™™™™™™™˜˜——–••”’‘‘‘ŽŠ…ƒƒ…†bba`^]\\URHOm„‘žª¬¯²³³±°§œŽz`KJUY\`cefedl^b\fPGªœ¬«••¢’uP)3,^d2*RE936|WyQ+*,.*)Rd5"1/(+644<h†kƝ°Ä¶¹ÄÆÈrb`L8/RgEPHLB~ØÏÄ„Px_pyx~‰•¤´ÊÐҝL;NG4LTŠ«~A0-2000*2I0§§bZGO=8411452.6bˆŽŠ›£Ÿžœ›š™˜™™™™™™™™™˜˜˜————••“’ŽŒ‰†}|ƒ…Œddcba__^SPFMl„‘žª¬°²´³²°§œŽz`KJU]_cfiihgo_h\V8.”nh¯È¦šr770)/RR='<S3I/FC†P&2)3*'Aq>,'128/('&*ƒY™¥“¬¶ÅÃÄÐrsp`a,<YpSHPDYºÐÄ̰imuhusy…Ž–§¹ÑÞ»rlkKaKKP­ |?6-2113.6M-¡©iVMS;7312551-AvއŒ“™¦žžœ›™™˜˜˜˜˜˜˜˜˜˜˜˜——–––•”’ŽŒŠ‰…ƒ~‚‰•¡feecba``RNEMkƒ‘žª¬°²´³²±§œŽz`KJU_aeikkjihjn>7<5{Ÿª´áæ”A/-,;QM;:HEVI\^…SŽU :+5/',U'3'0+)* 0zkzº“·ºÌÃÃˏopyŒ‰zl*]h~aPf°ÒÅÒ½’“q…gqpwƒ—©½àÞ·gu—aO\a”ÀfR*-212408P,žªnSQV:6313651,H‚–˜§žžœš™˜˜˜˜˜˜˜˜˜˜˜˜——––––”“’Š‰ˆ‡…„†˜£ª²kjheb_]\[UHLi¨«¯³¶¶¶µª ‘ePOZ]dhotifs[6+/pt¢¶šÙÛs-J:/J|lP8&GJVOGb…A¤cJ,!83'48/+3:82ZŒ`°§­ÎƸ½zq}}†‹‚ycb}’¤½º¿º®š…zz~~{}‚…ާÁÞݤo^hƒŒ†¥³¨Œ^<9D79/02GG4»zR]L;*64-11+)d…’Ž’•— ™™˜˜————››šš™™™™š™˜–”’‘‘Œ‡‡‰‰…€ƒ‹—¤­±±°¼jigda^\[YTFKh¨«¯³¶¶¶µª ‘ePOZaeflsnp‚6)9Vž–˜š¤É•;02BlLt|`P&)0c7VQQ`€Py~8TC,)(25/-34/,0g“±¨­ÅÅÂËrns€ƒŠ†~xiqxs‚•Ž˜¢®²ª›‹|~‚…¦¿ÛäǤ“‰Œ–ŠnU>8FE89/03GF2Ž»UZJ:+510951=l…Ž‹’—™Ÿ™™˜˜————ššš™™™˜˜š™—•“‘Ž‹‡…†‰Œ’™£®µ··¶¼hgeb_]ZYVQDJg€¨«¯³¶¶¶µª ‘ePOZdfeirqx=3r˜ž‡p€P4<.-pz>"iJ/!1cGeN7hb‹_na331*/1/13-#" d\²«¥ºÄÇÍ}fb|††‰”“Žˆ‘}zzrzu{„’ž¢˜ˆ|~‚„Œ£¼ÏßǪ›Œ€uwiSE@K^H99/14GE/Šº‡YVH8,3-4B55Wx…ˆˆ“›œŸ™™˜˜————™™™˜˜˜——˜˜–”’Ž‹†ƒˆ”Ÿ¦«²¹¾¿½¼½fec`]ZXWSNBGfŽ¨«¯³¶¶¶µª ‘ePOZbeejrns†ƒ‚z€ªˆ_TSLF:235nšaT3"@LSi=ih~‡*/98),,-042'@“xƒ§µ¬ÁÃˉXaƒ‹•˜˜–”•‹‰‹‹€“‘’–š•Š€„€ƒƒŠ ¹ÑàÆ¨š’“‰~xk_XZbL;9/36GB+„¹‘^PF502*5B.4g„…ƒˆ”ž™™˜˜————˜˜˜———––—–•“‘Œˆˆ‡‡‹—§³¶¹½ÀÁÁ¿½½cb`]ZXVUOJ>Ed~Žœ¨«¯³¶¶¶µª ‘ePOZ]cfmrigv›®£…XG@Q`HB10?†‹fwG//FW=xkY;en…UJ?10".++260%)xŠh­¥»·ÅÜ~Mlc‰Ž‘•™šœž“’˜š““—•¨¦¦¨§Œ~‡ƒ‚ƒ‚‡µÎáи« ›‹…|rmnmP=9/58F@'~¸œdKC241*49%5oŒ„ƒŒ–žŸœ™™˜˜——————–––••••”“‘Œ‹†„…Ž®ºÀ¾¿ÀÀÀ¾¼»¾a`^[XUSRLG<Cb}œ¨«¯³¶¶¶µª ‘ePOZ[bgnrgcpu“„r~\:N]K6/HR;]f`HVo6*%Y<4mv\YZbV,#6+/+,45.((Nšc·ººÀÕ¤@Ul|r”˜››¡¥¥¥¤ž—™¤«¥¦§§¢—ˆ}Š…ƒƒ…š±ÉßϹ­¢œŒƒ€yxvnT>9/6:F="y·§iE@/6/.4."?wŽƒ†”™Ÿ›™™˜˜————––•••””””“‘ŒŠ‰…‡Žž±¿ÄÃÁÁÀ¾½»º¹¿_^\YVTRQID9Aa|œ¨«¯³¶¶¶µª ‘ePOZ^cekqjj{rkyvT_}‚H28+A\]pkUBj884/:qm&Ot|IN„Š+F14/+.64,.6|„c ´ÀÁÅ®<X\sw}„”™›šœ£ª´±«¦¥¨­³©««¦“ŠŒ‡„ƒ€ƒ˜¯Ñãѹ®§¦š”‡……{wp_W@8/7;F;u¶¯mA>-6-38'(T„‹œœšš™™˜˜————••”””““““’ŽŒŠ‰ˆˆ’¢´ÀÅÃÀÃÂÀ¾¼¼»»À^][XUSQPGC8@`|œ¨«¯³¶¶¶µª ‘ePOZbdchpnu‰’š²•“‚P?:L>YWS~eccj9%*7:jkbUb†¢€CbN@02/,073+2@›Y„±µ¯ÏÈK;Ovix‡„Ž”šš™›¤¬«©¦©°±¬©¦­²­Ÿ‘‰‡ˆ…„€‚–­ÍâѼ²©¦™˜†€€|€‚tY@8/8<F:r¶³o?=+4+7;%0e‹¢ž™œ™™™˜˜————””””““’’’‘ŽŒŠˆˆŠœ´ÄÈþ»ÅÄÁ¿¾½¾¾À[ZYXVUSSK?7@[{“Ÿª­±´¶¶¶µ© ”ƒhQNXaZgl}”𩉠›jAMW42>H=kUkbg‰o@"3/0.5DXurtdR2PbQ3++1-(7$.‘d®É±ÏÛZ0C\mtx~…ŒŽ’—œ¡¥§©«®°±°¯­³°¬¦Ÿ™”’’Š……ƒ„‘¢ÎáÕí¨œ¥•ƒ~}}{ye<3=:4K4$c­¬‰72)6*;1+B|‡†Œ•ž£¡™“›š™˜—–•”••”““’‘‘Ž‹ˆ…ƒ¯³ºÁÆÈÇÆÇÄÀ½¼¾ÁÃÄXXWUSRQPJ?7@[{“žª¬°´¶¶µ´© ”‚hQNWYf|w|y‚}}Q7;WL@D0GVKSrr‚m8+075(9,8TJBf5#0eq`600(-0,#Xs‚¼­ÍÕ‰/4G`pux~„‹‘–œ¡¤¦ª¬¯²²²°®²°«¥ž˜“‘‘‰„„‚ƒ‘¢ËßÕÅ­§œ¤—†€|ya;3<:5L3(]¬¢E0&509.)L€ˆ†Ž™ ¡ž™–šš™˜—–•”•””“’‘‘‘‰†‡‹³·¼ÂÅÆÅÄÅÃÀ¾¾ÀÄÆÆTTRQONMLI>6?Zz’©«¯³µµ´³©Ÿ“‚gPMWXbmegwy{YNoWaR9:+He]3jƒsUNB?1/0#E,:W8G;0p~b,;2 -52ƒ†^¹°Áĵ,';Meswy~ƒŠŒ•šŸ£¥¬®±³´³±°°®©£œ–’ˆƒƒ‚ ÆÜ×È­§œ¢™’‰…ƒ}y\83;97N2+T¬–—W,&496+(\…‰†‘ž¢ž™˜ššš™˜–•””””“’’‘’‘Œ„€‡–£º¼¿ÂÃÃÂÁÃÂÁÁÂÅÈÊÉPPOMKJIHH=5>Yy‘œ¨ª®²´´³²¨Ÿ’fPMV[eick‚{EZQbaXu:5qi?<qƒdU>A,%%9:2.$-0-VE)7lˆ}‚:%--0WtxÃ¹ÃÆL%4@Rhvyz~ƒ‰‹“™ž¢¤¬®±³´³²°®«§¡š”‡‚‚€ŽŸÀ×ÙÍ®¦¡›”Œˆ†ƒ}wT5299:P1)J¯™f*(3@3)/mŠŠˆ•¢¤œ–˜žš™˜—–•””““’’‘”‘‰€‹£¶ÀÁÁÂÂÁÀÀÁÂÃÄÇÊÌÎÌNNMKIHGFG<4=Xx›§©­°²³²±§ž’€fOLUSgqpmmkaR‚‚qFnPPoeC+KKw]c4@)/<698*4167?5&=hui¯r"&%+%-xj­¾Ä͍38@Rivzz„‡‰’—œ ¢«­¯²³²°¯¬©¤ž˜‘Š…€€~Œ¹ÒÛÒ®¥žžš”ŽŠ‡‚zsL2179=S0#C±‘•r-+3B0)>{‹Œ˜¤£›•™Ÿ™™˜—–•”““’’‘Ž“ކ€„–°ÃÅÄÂÁÀÀÀÁÂÄÆÉÌÍÎÏÍNNMKIHGFF;2<VvŽš¥¨¬¯±²±°¦‘eNKTmgZals|y tV7qsBra2A@B4ib:IC@9&9.89*TK%5$<kzVŒ“t&)&"P“ezÅÇÓÃ/-);<Nftyz…†ˆ‹–›ž¡§©¬®¯®­«©§¢œ•Šˆ‹ƒ~~|}‹œ³ÍÝ×®¥žœ˜“‰†€vnE/068@U/ =ª—}5(4@.,S„Œ“›¢¢œ˜šž™™˜—•”““’‘‘ŽŽ‰‚ƒ¤ºÈÆÄÂÀÀÁÃÄÆÈËÎÏÏÎÍÌPONLKIHGE:2;VvŽ™¥§«®°±°¯¦œdMJT‘qSi‡š—7=*d¤Hqc0(gZ:R…~xZ57=8.1:$*9FM59F}™kE{«0&+x‡h ÅË×c!6?6Iaqwz€†„†Š•šŸ£¥¨ª«ª©§§¥ š”‰†Š‚}}{|Š›®ÉÞÛ¯¤Ÿ›•‹ˆ„|qh?,/58BW."9œ‹@5:,0i‰ŒŒšŸŸœ››™˜—–•”““‘‘Ž‹ƒ~‡œ²ÁÆÆÄÁ¿¿ÂÆÈÊÌÐÒÒÐÍËÊQPOMLJIHE91:Uu™¤§ª®°°¯¯¥œ~dMJSneŒ„ug90o\Q#9Fy]C{p^vBC;02 0'<n]H3L\“°™2V„:!5’suÁÀߘ +>G2E^ovz€‡„†Š”™Ÿ¡£¦¨©¨¦¥§¤Ÿ™“Œˆ…Š‚}}{|‰š¬Çßݯ¤Ÿš“Š‡ƒzne<+/48CX.&7¡Œ”G65,3w‹‹ŒžŸžœ™™˜—–•”“’‘‘ŽŽˆ|Š¥»ÄÄÅÃÀ¾¿ÃÈËÍÏÒÔÓÐÌÉÈQQOLJHFE:6,6Xuˆ˜¨©ª¬®°±²¢œ“_EDQb’}jl{lBKŠgQ[XK8`^?aŠ^‚>!7@87>7\z<@YvˆÈ¦E7b$jiˆÕÚ¤(( 9M@K[iqx„…‡‰”–˜›œž ¢££Ÿ©¢”‡€„‡ƒzqq{‰‘¢¾ÕàÈ—¥–’’Š€lS&(43GKF4&@~¦’œE//0M}‘ŒŽ Ÿž›š˜˜˜˜˜—–••”“”••’‹‰Š‚‰¢¸ÀÃȾ¿ÂÅÉÍÏÑÏÏÏÏÏÏÏÏÎRQOMJHFE;6+3Utˆ™¨©ª¬®°±²«|gTPWVck}€{~o.>j_iaNIWEpgGja”ZU? 21/+*'&]bKMtvtHir<":#3‰mÅÀ´R.*"?`AL\iqx„…†‰Œ“–—››œž ¡¢£ ¤•‚|„‚‡‰‚zzƒ£¼ÕãÌ• •”‘‰‚|eI')43HJF3!5t¥”žT#-+2W„Œ’ Ÿžœ›™˜—˜˜——–•””“”””’‹ˆ‡„ލ¼ÁÂÆ¿ÀÃÆÉÍÏÐÏÏÏÏÏÏÏÏÎRQOMJHFE<6)0Rrˆš¨©ª¬®°±²«|dMFJ\irwt}|YIVVSjWN_TGvATcRŸ}D`%'*/2+#)@;UR‘wVEdB#(*)Ylf‰Ç¥˜$-)"BdBN]jrx~ƒ„†ˆŒ“•—ššœŸ ¡¢¡–•|u…………ƒ€†Œ¤·ÔäÏ“™”–‘ˆƒvX;',34HHG2(e£–žh/)%7hŽ‹˜ŸŸœš™˜—˜˜—––•””’“””’ŽŠˆ„‰™°ÀÃÁÃÁÂÄÇÊÍÏÐÏÏÏÏÏÏÏÏÎRQPMKHGF=6)/Rrˆ›¨©ª¬®°±²¬¢“{[FJ[}qhvpGG_\hoNIR5pd&W=™ƒ2x1*?C7-@@VVnŒeNL#'28–Šsp{ z 0#(JcEP_krx~‚ƒ…‡‹’•–™™šœžŸ ¡¡˜‘–‘wp…„ƒ…‰…~~„¢°ÒâÍ‘“’–‡ƒ~kJ.)/36IFG0$"W¡™šw7&#Ay—ŽŒžžž›™˜—–˜——–•”””‘’““‘‰‡ƒ¥ºÄÄÂÁÄÄÆÈËÍÏÐÐÐÐÐÐÐÐÐÏSRPNKIGF>8,4VuŠœ¨©ª¬®°±²³¦“{aVf~‡g`nxzgO6OYtiJD6CˆO(H‰>€‰,sI2B?+B#'<ZY,0etD!4!„Ÿ¦±¨¡¹¢D(%"#-MkGRalsx}ƒ„‡ŠŽ‘”•—˜™›œžŸ  ˜‘•vo…‰ˆŽ”€ˆš¨ÍÚĐ‘‘”‡‚v]=(*327JDH.-$IœŸ’;$(O‡š¢žœš™—–•——––•”““‘‘’’Œ‰†„˜²ÁÅÅÃÁÇÇÈÊÌÍÏÏÐÐÐÐÐÐÐÐÏSRPNLIHG>;2<^{œ¨©ª¬®°±²­ ’„q_]d\U\gxzcVESZziN=+zrJ>4qRh­M\e22:;V)1,;<'TeO0$''.§¢±·¿µ’K&11&?mJTcmsw}‚ƒ†‰“•–—˜š›žŸŸœ•”zt„…jZeuy~†Ž¡Ç̶‘”‘Š‡€lM4*+629KBI,4(<–¦Œ„A&1_—“£œ›š˜–••——–•””““‘’‘Œˆ…‡¡¼ÅÄÄÅÅÉÊÊËÍÎÎÏÐÐÐÐÐÐÐÐÏSRQNLJHG==8Ehœ¨©ª¬®°±²§ž”‡nRDDH`nblqZ[K[`tM*:QRQ0k\g¨lA{/,ER3 0!"A;v•06!&&B§·ÁªÈ£E&"<4 ;pKVdnsw|€ƒ…‰Œ“”•–—™šœžž¢›“ށz‚wR;H]ekt‚›Áº¦’˜‘Šˆ‡~a?/0,92:K@I+3*0ޮЉK)=m“’Œ—¡œœš™—–•”—––•”““’‘‘‹‡…‹©ÃÇÁÃÇÉËÌÌÍÍÎÎÎÑÑÑÑÑÑÑÑÐTSQOLJHG=?=Kn†‘›¨©ª¬®°±²°§—^FIYefecujOhP[K[W6%rzCXW8~Wrˆ‚=*!3.ek!3! Vw:"=B&7Ds”’³®Áp-)(2;,'M~LWdotw|€‚…ˆŒ’”••—˜š›§ ’…~‚‚z}†{ffxz—¾¯œ“›‘†‡‡|[7-5-:2:K?J*0)'‰´ŠS+Du“Œš œ›š™—•””–––•”““’‘Ž‹‡…Ž­ÇÇ¿ÂÉËÍÍÍÍÎÎÎÎÑÑÑÑÑÑÑÑÐRNKKOOLHFFK[s‹œ¤¦§¨«­°±²¯¥—„gNJSZ_`t…n[=AYKT.dzJZMS9oZZz£Z8!>)ƒ’P#n^.%VWkdir|”Ém' '?F1-+,TxWTdwvtxy‚ƒ…‡Š”•–—™›œœž›˜•’zxƒŒ€t“£±µ§˜”–•„p8+.504;DVGJ750 `´…[!Z‹“”œ›š™˜—––•••”””““”’Œ”ˆ‡£»Ã½¿ÂÅÎÐÐÐÐÐÐÐÐÑÑÑÑÑÑÑÑÒQMJKNOKGDEL^uŒ›¢¦§©«­°±²¯¥—„gNJS\`ekrs-,ZPA"N|;4JNQMuhlVx—]*v›q%P?=GCa_ˆ¸‹gft¾³!'85>E3.+,RvZVewwv{zƒ…‡Š“”•—˜š›œŸžœ™–”’‘††’’‰—¶ÅÌÈ´¡—’Œ……„V321007:GSHH8;2V«‡a0bŽ“”Ÿœ›š™˜—–••••””“““”’ŒŽ“ˆ€‰¤¼Ã¾ÀÃÆÎÐÐÐÐÐÐÐÐÑÑÑÑÑÑÑÑÒPLIJMNJF@CNay™ž¦§©«®°²³¯¥—„gNJSZeabsu,2a@Ibv]'%ARP]rjxQt…‰†15>J€V:EE*@ty†‘®®cd€°ËF+9H%;C71,+Nt_Xfxzz~}‚„‡Š’“”•—˜ššŸž›™–•”’Œ§¹§¥Æ¿Â»«žš“‹ˆˆ{8/65,0;:MOJE9?3KŸˆeGp‘”Ž”ž ››š™˜––•••”””““““’ŒŽ‘†§½Ã¾ÂÆÈÏÐÐÐÐÐÐÐÐÒÒÒÒÒÒÒÒÓOKGHKLIE=BOd{Ž˜›§§©¬®°²³¯¥—„gNJSVf[j‡‹]<?TFu‚^58+FQMYcYua^{p’_=gTbG:Q -i‡—›µÁsW]zËj $>-:8A<4,+Hpd[ew{}‚„‡ŠŒŽ‘’“•—˜˜žž›š˜—–Œ‘µÌ¸¥ÁÆÅº¨žš’‡Š‰^+-37+0?;QKJC:=1#C˜“†c`}”””¡›šš˜—–••””””““’’‘’Ž…ƒ‘ª¾Ã¿ÅÊÊÏÐÐÐÐÐÐÐÐÒÒÒÒÒÒÒÒÓMIFGJJGC=BOd{Ž˜›§¨ª¬®±³³¯¥—„gNJST[g„„‚Y??Fq…>+A:6IFIJTHoWLvpƒu0qmGR ,>H”“¥¯¹¢]]U§v 2-,,64?B7-*Bmh[btz~‚€„†‰ŒŽŽ‘“”––››šš™˜———–—·Ï½¨¿Éƹ¥š—†ˆ€9/0+6/1B?TKHB;6.)?”™ƒ\s…••‘•œŸ›š™˜—–•”””“““’’’‘ŒŒƒ„—®ÀÃÀÈÎÍÏÐÐÐÐÐÐÐÐÒÒÒÒÒÒÒÒÓLHDEHIEB@CNay™ž§¨ª¬¯±³´¯¥—„gNJSUW{“j}f7N\] )NE=A=GEMCjFIszwzM‹Q5275[a†˜¤Ê½lLX†©./)C06 1=G;-*=iiY^px}~€ƒ†‰‹ŒŽ‘“””——–––––•šž¥¿ÒűºÆÅ¹£•‘އh%63)232CDSMDB;4,-8ŒZ~ˆ“–•–šœšš™˜–•”””“““’’’‘Ž‘‹‰†œ²ÁÃÁËÒÏÐÐÐÐÐÐÐÐÐÓÓÓÓÓÓÓÓÔJFCDGHD@DEL^uŒ›¢¨©ª­¯±³´¯¥—„gNJSVo‚f~ZBVho8;>FMH:BKOHD\MMXp}z†.1'lvfll™¤º—ZMv¬:*0E+?%:.;K=.*9giWYku{{€ƒ†ˆ‹Ž‹‹ŒŽ‘’“’’’’““““˜ ¬»Èƾ»ÎÐÄ©’‹‰‡yF*460,53BJQP?D;8--,‚^‚‡–˜——™š™™—–•””“““’’’‘‘‘Šˆ€‡Ÿ´ÃÃÂÎÕÑÐÐÐÐÐÐÐÐÐÓÓÓÓÓÓÓÓÔJFBCFGD@FFK[s‹œ¤¨©ª­¯²³´¯¥—„gNJSUufx~:[CMn88;I;U9NQ\DBKYL5\Œt ^Qv¥—‡–»Æ•Neežs&0&aO7,6-:M>.)6ehUVhrz~y€ƒ…ˆ‹ŽŠŠŒ‘’‘‘‘Ÿ¡¤¥«½Êɯ¶°š‡…Œt.8-68'64BNOS<E;>/,#wœ„d‚…Ž—š˜––š™˜—–•”““““’’’‘‘Œ‘Š‡ˆ¡¶ÃÃÂÏÖÒÐÐÐÐÐÐÐÐÐÓÓÓÓÓÓÓÓÔ?<:=BEC@9EIUu™ª«¬®°²´µ®¨œ€aUQHR`y‹@1,fsC9:N.9ERlc[RV3vP2NqvƒL!lj‡ÉÊÏÒª]MW–•#*09W6%1?8A>E4+5^S^M_mz‚‰€ƒ…‡ŠŒŒ‹Š–Ž}zƒ…ˆ‹Š†ƒŒ{ˆ“™‰…—sp‚Ž20--0456<CCSFSD0D-+(i¦z{Ž‘”—šž˜——–•””“””“’’‘‹’‘Œ†}†¡ºÂÌÑÑÐÑÓÑÑÑÑÑÑÑÑÔÔÔÓÓÓÒÒÖ?<:<ADB?;HMWw‘šŸª«­®±²´µµ²“ylKFn†cSc†C.NGG8E?E=;6YzlkXTJB`^aHwq`ˆŸq›ÆÃϰfbbt·J!1..H>-168@>E5,4]R]L]kx€‡€‚„‡‰‹Œ’ŽŽ‹{dZ^uw{~~|zxjksrƒƒqZcldh‹•u20..0357?A@PIXE-F2*'d£~€Ž‘”—šž˜˜—–••””””“’’‘Œ’‹†}‡¢»ÃÍÒÒÐÑÓÒÒÒÒÒÒÒÒÖÕÕÕÔÔÔÓÖ>:8;@CA>>LR[y’œ¢««­¯±³´µ­­˜~dM\‹sMe}w@;X2*1HEBBJ+[‰onaZi>Un‘SO7JŒ†u«ÎÎÍ|TYl³u&.1.)9D./08@=F7.4ZP[J[hu|‚}~€‚…‡‰Š”’‘kaa[]adfffe^U[axwwntr€|—‹I10///258A=@LL[F-I9)&ZŸ…‡‘“•˜šœ™˜˜—–••”””“’’‘Œ’Š…~‰¥½ÅÏÔÓÑÑÓÒÒÒÒÒÒÒÒ××××ÖÖÕÕÔ<97:?A@<@PW_z‘œ¤«¬­¯±³µµ§˜›…^oˆrVNy’zu?CC<11;DK6\-X–hVdeeb[mv\<9_ˆ…†“ÔÕ¨_an–¥!35,0,0C(-28><F:04WNXGWdpw}{|~€‚…‡‡‘““ƒ|zvxz~ƒ„…Œ„ˆ‹¢¥¤—€Œ’“’m00120/05:=:FKLXF2KB((PšŽŽ’“”–˜š›œ™™˜˜—–••””“’’‘Œ‘Žˆ„~Œ©ÁÈÑÕÔÑÑÓÓÓÓÓÓÓÓÓØØØ×××ÖÖÓ:758=@>;@SZay›¤«¬®°²´µ¶¬—”„t‹ƒCJ^‡…ovI<BR80*=W0_8[£g<[elk[Z8[bjz¤¦ƒkÒ»rho§²F*41.2++@+008=;G<33SKVDT_kqwyy{~€‚„…ˆ€y{|}‚…ˆŠ¨¯¹µÂþ§}ˆŠ“™xD,.242./6<67PLIQF:JK),H•–“••–—™š››šš™˜˜—––””“’’‘‘‡ƒŽ­ÄËÔ×ÕÒÑÒÔÔÔÔÔÔÔÔ××ÖÖÖÕÕÕÑ9646<><9?S[avŠ—£¬­®°²´µ¶ª­šˆˆsN<Js—kp^N?fW-,&AY<SCm§m?O_gnaKCZh‡s–’s‰Ì_€©­g&;1774&,=67,8<:H?63PISAP[flrvwy{~€‚ƒŠŽŽ‡{€…ˆ‹˜£«›¦«ª“›”“[(--363--6>23WKINF?GQ+2C’•——˜˜™šš›››š™˜˜——””“’’‘‘‹…‚€‘°ÇÎÖÙÖÓÒÒÔÔÔÔÔÔÔÔÔÔÓÓÓÒÒÒÐ8535:=;8=R[_r†” ¬­®°²´¶¶¨²Ÿ‹{P6M[‰Š^uIDJ‡H)-0XPHLO…”k_LdEgzj`[]‰’…vÀ¹h{¤Àp"=-6;96)559=/7;9HA83NHQ>MXchntuwy|~€…‹”›”†€~|zz}ƒŠ”…‡’Ž”Ž„qD&-,384-,6@4/VGKQG?CV,8A‘¡•™™™™™ššš›››š™˜˜—””“’’‘Ž‘Š„€“³ÉÑØÛ×ÓÒÒÕÕÕÕÕÕÕÕÐÐÐÏÏÏÎÎÏ7425:<;7;QZ^pƒ‘Ÿ¬­®°²´¶·´Ÿ“…eLIMw–d[zP6JŽ9229oHKPW•{a|PpN>e†d…€f®›’m»ž„©È‹:>4330493@+3?87;8HB93LGP=LVafkttvy{}€ˆ‰ˆ˜€…‚~{z}€‚ƒˆ‰~ˆŒœ–‘~X7)#,495,+6A8-SCOUH<AX.=@£”ššššššššœ››š™™˜˜””“’’‘Ž‘Šƒ€”µËÒÙÛØÓÒÒÕÕÕÕÕÕÕÕÎÎÍÍÍÌÌÌÎ72.06950@X]Yp‹•”¤«±´²±´·­¤˜…gLDJt`b[=:^%,$Fe91IX­‰HyurjA1k‹xnaw•qίšÁ§@*>9863=-/97463@?=;::;;DOA9WSi`glrssuz‡‡ˆ‰‰Š‹‹‰ˆ„€|xuspprw€Œ—žŒŒRH'/,,644>:4:71fHNXI:D]055¥™¡’”žœšœ™šššššššš˜˜–•“’‘Š“Š€}p„ºÑÕÙØÕÔØÜÙØ×ÖÕÔÓÒÐÏÏÎÌËÊÊÑ62.16851F]`]r‹“”¤ª±´²±´·­¤˜…gLDJ–p[dZ8>gu*/(GY66+r¢ˆbZ„zh[ahq€rRppv|ǘ³´J!/;++4<=-/97463<<==<;:9@KG:NM^^fkqttw|‚†‡‡ˆ‰Š‹‹†††…„„ƒƒƒ†‹‘•—˜—Œ•u@I-)/-645=:4972gIOXI<E[364Œ¦™¡’”žœšœ™™™™™™™™™˜—–•“‘Š’‰€|q†¼ÒÖÙØÕÔ×ÛØØ×ÖÕÓÓÒÑÒÒÓÔÔÕÕÑ42015642Ocebu‹’“¤ª±³²±³¶­¤˜…gLDJŽr_`P=LfT00+KJ2<,ˆ¦ƒ€\‹Œpfr\]‹yAvns‰ÚÐÂk(%78/687=-/9746369<??<85>EM9BHOWbhostx………†ˆ‰‹ŒŒ‡ˆŠ“–—œž ¡Ÿ›–“Œ•Q.H2#3/656<94865iJQXH?GV873‹©š¡’”žœšœ™™™™™™™™™——–”’‘Šˆ€{r‹ÀÓ×ÚÙÕÓÖÚØØ×ÖÔÓÒÒÔÔÔÕÕÕÕÕÒ22123443XgigyŠ“¤ª±³²±³¶­¤˜…gLDJwyjWEI]Z:5.,QC.<3g—gtt{“vdeYS{JqR‚†ËËw59;704?=8=-/9746315;@@<73>>K8:HCKY`hnrw†ƒ„…‡‰‹’–›Ÿ£¤«¨£ž™–”““.-B1%52678:85559lKSYHCIQ?91‰­š¡’”žœšœ™˜˜˜˜˜˜˜˜—–•“’ŽŠ‡€ys‘ÄÕØÛÙÔÒÕØØ×ÖÕÔÓÒÑÔÔÒÐÎÌËÊÔ01332234\hij{ˆ”£©°³±°²µ­¤˜…gLDJdwiTEJ_V.8-*UD,98Nƒ]Uzs’xvigO]‡b’@\o­˜/5.51,.0;H=-/97463-28>?<73@9B77K??LS]ejr{ƒ‚„†‰ŒŽ–—š¡¥§©ª¨¥ œ˜•“šY:8-,5669;98634=pLUYGHKLF;/‡°›¡’”žœšœ™————————–•”’‘ŽŠŠ…€wu—É×ÚÜÙÔÑÓ×××ÖÕÔÒÒÑÎÎÎÍÍÍÌÌË.1430025[efj{†‹•£©°²±°²µ­¤˜…gLDJ]oYQI=Tb-92)TG*8@e~o>Vcy‚tu^`i©^Bd–{;>)0073+9H=-/97463-059;:86=99;6KB9<DOX`it|€‚†‰Œš› £¦¨©£§¬®ª¢—‘“:F0/3496;=77713AsMWYGLNFM=-…´›¡’”žœšœ™––––––––•”“’Ž‹‡„€uwÎØÛÝÙÔÑÒÕ×ÖÖÔÓÒÑÑÉÊÌÎÐÒÓÔÌ-154/.26X`ai{„Š—¢©¯²°°²µ­¤˜…gLDJZpK@B3Pp0:>+NG(;4o}q43AZ}…wwq‰rŠuZi]LH>574>8/<==-/97463./2478994<6B5EH;-5BLU`lt}…‰‘–˜›Ÿ£§ª¬£§­°¬£—..E.743;6<?668/2CuNXYFOOBR?,ƒ¶œ¡’”žœšœ™––––––––””“‘ŽŒ‹„ƒ€tx¢ÑÙÜÝÚÔÐÑÔ×ÖÕÔÓÒÑÐÎÍÌËÊÉÈǺ,164/-17U\^gzƒ‰—¢¨¯²°¯²µ­¤˜…gLDJVyH+43Ut2:H-HE'?'f…pDB8cek{„oz‰šiWd><@2/66:*&??=-/97463//0147:<-?7I4?L?$-9EOZgo|~…‰‘‘“—¢¨¬®©©¨¦¡›•‘m.=@/@23<6<@668.2EvNYYFQP@U@+‚¸œ¡’”žœšœ™––––––––”“’‘ŽŒŒ‹ƒ‚€sx¤ÓÚÝÞÚÓÐÐÓÖÖÕÔÓÒÑÐ×ÔÎÇ¿·±®z52/-.158;Yjoz…Ž™§«¯¯­­±µ««‘ƒkD>Bme-*<AYS;18JGE.7*T’€`9SNXtzd‘…Šr©D^oC<+3>4/08K;B.&E7380;71--28=>9??5;HH;504?KPQcfkqx~ƒ†…‹’–˜œ£©žŸ¡ —’Žc4;G?>6489?C:--5DNpTT]QP\SFF2ªž–„ƒŠ’•”““““““““ŽŽ„Šz|o½ÏÜÛÙ×ÕÓÒÑËÑØÚÔÍÏÖÃËÆ°–|X8120.,+*++>Wcer‚‘Ÿ§«¯¯¬­°µª˜˜ƒcC;i›Pƒ:$TU?@<8G?9.3)C¡’sK^6Rr„Zhtqˆž†—Ÿ¡‚1:,9A+8:SA.'G7280:61..28<>9??6:FFH@747::7GKS]is{€ˆ”—™œ£© Ÿœ—Š„€P+5?43362>C:2254CNoTT\QP[SGF5‘¨Ž†~|‚‰ŒŒ‘’“““–•“‘‹Š‚ˆxzp‘¿ÐÚÚØ×ÕÓÒÑÛÓÏÔÓÌÉ˵•iE3-*0211/,(%#?SYXi“¥¦ª®®¬¬°´°˜œ}OLÒqQ”1*8RGCD=C63,/*@‹~˜`PGDh†RY…g‹¨‘it•¢h,+4)/>>BM>-)I8170851//27:<:?>79BDKJJQ[dijvwy{~€‚ƒ‹–™™œ¢§©¦¢™–•”a5-32:==;879;;98BOmTT[ROZRHF9•¥›{usw|‡ˆ‰‹Ž˜—”‘Ž‹ˆ‡ƒ†xxršÅÒØ×ÖÕÔÒÑÑØÏËÑÒÇ·®‹jC+##*0-34653-($:KPPd|¡¥©­­««¯³¬ª€gÓkOb},<$SM=>F?2=*1.Aym”wTG,MnQm–^a šoCJ’­~3 907.KQ;-,K906064200368:;?>98=@QT\gs}ƒ†…†ˆ‰‹ŽŽ“˜™˜šŸ¤¤£¢¤¨®µ¹ÃcL943.267532/+APkTTXSMXQIG>›¡˜wtpnortu{|~€‚„…†‘Ž‹‰ˆ‡…†ywx©ÎØÕÕÔÓÓÒÑÑÐÏÊÅĽ©”_=#%268=A568850*'3DILbyŠ—¤©­­ªª®³§ž—v½ÊPPDSb$-4\G62M;3S.81:€p„{<$9]q–’jcƒ~d>V«£†1>+9DQ7-/N9/50432123567=?=:78<SZepx}€‚wy{ƒ†‰Š“——••™ž“”—ž¨´¾ÅÆÍѸ{G86+@G8.34-?QhTTUTLVOJGD¡œ•ttspooprqqrtuvwx‚ƒ„…††…ƒyu|¶ÖÛÑÑÑÑÑÑÑÑÕÕÈ··¹žyF4*2:>HUNA@>;61,)3ACE\tƒ¤¨¬¬ªª®²§žžÂ¦M@[1xC((ZM63I45a>@2;]yu}€pAHf‹UP^isjkKH›„•!769DR4,1Q:.40222233445>?<<639OZjw~‚…‡‡‡‡††……„Ž’•”“–“˜ ª´¼ÁÈÂÀÔÚ¼Œ[I4,8>65>>RfTTSUJTNKHJ§˜’z|}zvsuwnnnmmmmmrstwy|~~€{rlz¼×ÙÎÏÏÏÐÑÑÑÔÓÈ»¸ª}L0*+7EMRVN_ZRI@830:B<:Ql£§««©©­±¢·µŸe8@=`˜7)6@QAE:,4_VF5K/K‹vi}}ƒ’«uMQ\hY[I~“ŠO´\81$Fb2,3S:-30112344333??<=6/6LYkvyyyzƒ„…†ˆŠ‹‹Œ’‹ŠŒ“˜ ©²¹¾ÁÄÏÉÉýÉʇU135'#/=RdTTQUISMLHN«•ƒ‡Š‡€|}€rqpnljhgijklnoppuog`r»ÒÑÌÌÍÎÏÐÑÑÐÉÁµšqG-248@NUM@X|uhYLB=:BE81Hg~Ž£§««©©­±Á¬£SJWuœD$'&4*MLY,'2WiH9W+-€|d/Kaq€IaeYmpnkw޵jMN:+HEO0,4T:,30013444322@?<>5-5BRhv{|~€|}ƒ…‡ˆŠˆ†ˆ‹‹’©´»¿Á»ÊÅÊÍÉÖÕËÀŽE %(<ScTSPVHRLMHQ®“‰“ˆ‚„‡xvtqmjhgggfffeeele^Vj·ÌÊËËÌÍÏÐÑÑÖÆµšd- 20BLHHRWRX€„ƒxeRGCLA52@\}’Ÿ¥«­¬ª¬¯¯¤‘‡mVv¨p1% .--+Uo-5LvOUa/"3…ЁbW}o5wmo`pŒs{”J8l*>JL)+-O13603.8;B334:49J6=:2EWhov}{t}~€‚…‡‰ŠŽŒ‹‹‘ž¡¥¬²¸½À¿ÀÂÅÈËÍÎË×Û¹o+-=TaQLM@<OCM:_©ˆŽ‹Šˆ‡††„}yurpog`^YWbqssgBX§ËÏÇÌ××ÐÔÕÇ»·¥q5'AUMKKNSWYYU†‰‰ƒvg[UOC50=ZzŸ¥¬®¬«­¯³¡˜„m}o«G&'(.2>UTc/^tC_e48SOgtu€JLE}hqW—ˆ}d…k,R”W0=I.12T78;53.8;B344;7?CA=:0IXfkpz}z~ƒ…ˆ‰ŠŽŒ‹ŒŽ’ž¡¥«±·¼¾¾¿ÁÄÇÊÌÍÈÂÍÚ€A"H-e`CNSHPCH9f©‡‘ŒŠ‰ˆˆ‡„€|xvtsjec^\etwteFb­ÍÎÊÎ×ÖÏÓÔÆ»‘c?*3LWMMORVXXXVŠŠ‹‹‡}ofWI7/:VwŽ ¦¬®­«­°µ™„†£a‹3+(("$-Q€y[Yi…k9MF%5tZ3L„d];HYVješŽ€ŠMV†U*hŠ76C/13U79;53.8;C344<>D=PB9.IYehmx€„†‰Š‹Œ‹Œ’”ž ¥ª°¶º¼¼½ÀÂÅÈÊËÈÍÐÖâÔ‘I+'`E;RHJQC?7q©†”“’‘ŽŒŒŒŠˆ…~{zxqlkfclz}wdOt·ÏÌÏÐ×ÔÍÒÑÁ•Z/.<KRNMQVZ[ZWVY‡‡‰Ž‰{nbQ:.7RuŒ¡§­¯­¬®±²œ‘‹º£`X?=**""8IFq~hV?Q<NUeo4,r^C;@7tJdn‡‹}‡™scž<9–X-<*,.P24614.8;C344:GD>ZO8.AVglpx~~€ƒ…‡Š‹ŒŽŒŒ‘”–ž ¤©®³·¹º»½ÀÃÆÈÉÌÝÚÊÒâÍ¢<4G?9I:JQC76~¦†—–•“’Ž‹‰†ƒ€~wttokrƒ{d]‰ÁÑÌÔÓÖÓËÍȵc7(BWZVOPW_b`[WV\‚„Š“˜“…yp\A05QtŒ¡§®°®­¯²©£•Ú‚yL;@,4483EF1IOD->KW][4? 3=???Ov[N}„w—”2.©‹Gm&7*-.P34714/9<C4557L@F_b;/6Qktvz{y‚„†‰‹ŽŒŒŒ’–™ž £¨¬±´¶¸¹»½ÀÃÅÆÍÏÕØÓÍÒÜ£I)Y78GPMD16Š ŽŠ˜—–”“‘‹‰‡†…‚|{|wqwƒ‡€gmŸÊÓÎØÕ×ÒÈÆ¹ M13OZXY[V^ghb[XX`t|‰—Ÿœ“‹hH36Qu¢¨¯±¯®°²£«’›ØbŽ_".)47;EQP<PF5.>JF3&443K|W2AHKAhkRY‘‡€~tA{¦n8ž@2024V8:=75/9<D4554K>LeqE0.Nmyyzzx‚ƒ…‡ŠŒŽŒŒ‹”™›ž £¦ª®±²µ¶¸»¾ÁÃÄÈÇÍÕÕÏÒÜáŽ3@14BLGE/9”—Œ––•“‘ŽŽŒŠ‰ˆ‡ƒ|uz…ˆ…n~²ÎÕÓÙÖØÓÆ½¦‡E6?UYWYY^fmkbZZ]dYi’œ›™ŒsO78Sx’£©¯±¯®°³¥«˜™»\xS$*/0-B?@<:03=]=6,%0S;0Ey:9KJO>rmNŽˆ|k–jik’2“z%034V8:=750:<D5562CAKmxS1.Nmvux|}ƒ„†ˆ‹‹‹‹•šž ¢¥©¬¯°´µ·¹¼¿ÁÂÅËÌÉÌÖÙÕÝÓ|--35BAF/;šŠ•””“‘ŽŒŒ‹Š‰ˆˆ„€ƒw{…‡Št‹¿ÐÕØÙÖÙÔÅ´•nCCR`]\]Wfmrl`Y\bf@Ur‰”™œŸ“yS99Ty”£©°²°¯±³¬¦™•šfO-*)025-E2.4)%/:pFF;("g>(<Ze><I>LYvVy‚„‘}•h}/±Rr¥+-/Q358250:=D5661;EIuz]12Pkqpu~ƒ„…†‰‹‹‹‹‘–›žž ¢¥¨«®¯³´¶¸»¾ÀÁÇÅËÕÓËÑáÞÝÌ[0)>B=G0=žŠ‰™“’‘ŽŒ‹ŠŒ‹‹Š‰‰ˆˆƒ€„€x{…†Œx“ÅÐÕÜØÖÙÕįŠ_KScdZ]gejqtl^X]eh+F`z“œŸ¨ž‹e01O~£©°²°¯±´¨žœ¹e[A.,.!%@]'4*90-Mq?B@');f/6W<dAA]T<c[ugn‰ ŸP-I“ZÇ*$.%R>;:4,+3?A947/=A\usaB)Dcsxƒƒ„…ˆŠŽŽŽ‘“”•–œž ¢¥¨ª«¯°³¶º½ÀÁÆÇÉÌÏÒÔÕÛÝß½>(7A(B"Rž†‰–““’‘ŽŒŠ‰‰Œz€|ˆ†„Œ¦ÆØÔÊØÜÔÍÈ¡fEUVW[_eilym`[_dfei%8Mm“¤¤¦›j2-I}“£ª°²°¯±´§¦˜Š™}\4!1+-4FG%41/5-Lz;0M3,.RG0NLIcHmbVBXu]†ws¥Ÿh+%wtÄ3%,(R:B66-,3>@8474:?[tve<)Edry€ƒƒ„†ˆŠŒŽŽ‘’”•–œŸ¢¥§©«®°²¶¹½¿ÁÆÇÉÌÏÒÔÕÖÜäÍw)0;*=!ZŸ…ˆ˜““’‘ŽŒ‹Š‰‰‰€|~z”¡µÊÖØÕÕØÑÉ»]HWX[^bgkmrh^Z^dffg )7^“­ª¦šn3)D{–¤ª°²±¯±´¬§š~u`(5'4<F4*28(7+U…49R,,%&RJTS<YRYxmRN_I‘‡~ž…I,"q ×9').Q5K080.3=?74729Galph<)Gdr{‚„…†ˆŠŒŽ’“”•›œž¡¤§©ª­¯±µ¹¼¿ÀÆÇÉÌÏÑÓÔÒÚèÞ¼>%1,3 f „†›““’‘Ž‹Š‰ˆˆ…‚€zz‡— ¬»ÇÏÕÜáÒÓÎħvSO[]`cgkmoga[Z^dfge %/V®­¨žl0(D{”¤ª±³±°²´«ª¡„l‰d$-/(47:200:,3)k‡.7R,&-HXMO7IMKojmDVN‰œ˜‰~*BB\ È+(&5N1S-:303<=537+>XlbfkC)Jer}ƒ‚ƒ†‡‡ˆŠ‹‹ŒŒŽ‘“””š› £¥§©¬®°´·»½¿ÅÇÉËÎÑÓÔÑÙäâàq'-*"tŸ…‡““’‘Œ‹Š‰ˆ‡‡‚‚}x~’¦´¾ÉÑÓÖÜáÓÑÌ»’bPZ_aeilnoo\ZZ\`cfgg$)3UЍ¬­¦‘f+(G{¥«±³±°²µ¯« Ž„{b 8"293/7)/46-0ƒ*Q>@/6B-F1U@cUb^Ka\›ƒ§F/=Vʪ")%;J2U/9723;;427.EapcioF*Nfq€„†ˆˆˆ‰‰ŠŠŠ‹Œ’“”™šœŸ¡¤¦§«¬¯²¶º¼¾ÅÆÈËÎÐÒÔÔÙÙÞá±."+"'€›ŠŠœ““’‘‹‹Š‰ˆ‡†…~ƒ‚|{Ф¸ÆÇËÐÖÙÙØ×ÐÇ®€[Vb`chmoonmUX]`bdfgi$*3Rƒ¡©¯«’d('Gz¥«²´²°²µµ©˜ŸsR 6=?4.61+5-HŽq, @;$L8&<$68BFeXrUXSGv’„j"$IÉi3('@F7R57:44992179O`moxsC*Qgqƒ†ˆ‰‰‰‰‰‰‰‰Š‹ŒŽ‘’“˜™› £¥¦ª«®±µ¸»¼ÅÆÈÊÍÐÒÓÕØÒØÚÜ\#&.ˆ•˜““’‘ŠŠ‰ˆ‡……„~‚€z‚›¹ÊÒÌÉÎÖÛ×Ñ×ͼ™n[_b`dinpoliRZbgfeefg#*I|§®ª”h)#Bx¥«²´²±³µ´¦™‡¢m5,3+=7-2-$4%&8k…e1/..4G1);209(ML\€lK;8†{ d’{Vo¥d')BA=K>4<5487117?[dlx‚uG*Sgq…‡€‰‹ŠŠ‰‰ˆˆ‡ŠŠŒ’’—˜šŸ¢¤¥©ª­°´¸º¼ÄÅÇÊÍÐÒÓÓ×ÕÚàäš) 5—–”““’‘‰‰ˆ‡†…„ƒ~}y‰¬ÌÖØÑÌÏ×Û×ÒÔǬ]^f[^cinpmieT^imjfdea@x§¬§•m+<w”¥«²´²±³¶¬¥¡–f;6>7)"5&27#B†x^5#*6A=7<!39(8CDFwz-<O’‹ edyQ¥¥½&+D?BFD2>6486017<cmp{uO*Thq†ˆ€Š‹‹Š‰‰ˆ‡‡‰Š‹Ž‘’–—™œŸ¢¤¥¨ª¬°´·º»ÄÅÇÊÍÐÒÓÐÖÜßêÞÇ.:‹œš‘““’‘‰‰ˆ†…„ƒƒ€zxŽ·ÓÜÚÕÐÒ×ÛÙÖÐÁ¡pR`iT]bhnolgcVamqmgdd[!*Cv©¬¥”w< ;i—£©°²°¯±³¬¬ …Y.:31.,+,-.,anKhI:--2M118!)O+*O/8uvWPo„œ‹~z¡¡^8*6(S.,7E,6:;6118@Pt€xoyq76Wj|€ŠŠŠŠ‰‰‰ˆˆ‰Š‹ŒŽ•–—šœž ¡§¨«¯³·º¼ÁÂÄÇËÎÐÑÜÜÛàÎߨg J–†”ƒŽŒŒŒŒ‹Šˆ†„‚‚|zwœÃÙÝ×ÌÏÝÛÖ×ÔÍ©€nid_^`dqzp^\f^adggea^U!)As›©¬¥•x=!<i–£©°²°¯±³¨¬ ‚a6D..--./00=?Q<8nY//)2O:&...=F#MF3Q^lttIm‰ ¦žh$7M1B3>9E5799624;CWvyt|p79Yl}Š‚ŠŠŠ‰‰‰ˆˆ‰‰ŠŒŽ”•—™œž ¡¦¨«®³¶¹»ÀÂÄÇÊÍÐÑÖ×ÔÜÑÞÞ‡QŒ–˜˜ŽŒŒŒ‹Šˆ†„ƒ‚}zw€ŸÄÖÖÕËÐÝÛÖÕÐÄ¢~plf`^dfovo_[bacegfb_\S"'=o˜§¬¦—z@#=h•£©°²°¯±³²§“‘†v@>*,.01110_;6$7cZ;,.8E>#+3*@C3GY0)6_‡‡|€k[]v†¦}VRM<>+KO787548AHax~{{m7@]q~‚‰ƒ‹ŠŠŠ‰‰‰ˆ‰‰Š‹ŒŽŽ”•–™›Ÿ ¥§©­±µ¸ºÀÁÃÆÊÍÏÐÑÓÌÖÖÜá´`…’“ޤŽŽŒŒŒŒŠˆ†„ƒ‚~zw„¦ÉÖÑÒÊÑÜÚÕÒʱ•{rpia_ghmqj^Z^effec_\YR#$8i”¥«¨™}C&>h“£©°²°¯±³·¢”‘ˆuB5./1221/-M21/:XSH'8@2=00,$H18\E;1Io~vˆrvH'.V0Plhs†tpd]486437>IPly}|‚ƒf8Ibw…‰†‹‹ŠŠŠ‰‰‰ˆ‰Š‹ŒŽ“”–˜šžŸ£¥¨¬°´·¸¿ÀÃÆÉÌÎÐÒÔÈÒÙ×àÖCp…ˆ›ŽŒŒ‹‰‡…ƒ‚~zz‰­ÑÙÔÎÉÒÜÙÕÎÀˆvsskb`ekolaXZ`hhfc`\YXU#"3c£«©›G)@g‘£©°²°¯±³®¢¦“„^:444320.-,/>>8.XM=.:;(?;1()<0/r.>4/Ou|n|huqM`3E)MCWtclU95129EQWry}~…€\:Rg}€‡ˆˆ‹‹‹‹ŠŠ‰‰ˆˆ‰ŠŒŽŽ’“•—šœžŸ¢£¦ª®²µ·¾¿ÂÅÈËÎÏÖ×ÊÒÚÒÙãxu‹Š’’‘‘‘ŽŽ‹‰‡…„ƒ~|}Œ®ÐÚ×ÉÈÓÛØÔÊ·}qrrjbaakpfXT\eihea^[YY\"$.^‹¡««ž„K,Ag£©°²°¯±³¯¤¥‹_6.751.-/13:C6<,J<7:31-A=+-25)CSH/NJUiyxsjŠKR,:<O=D=$Ii:3.0<KX_sw~…yQ<[lƒ‚‰ˆŠŒŒ‹‹‹ŠŠŠˆˆ‰Š‹ŒŽ‘’”–™›ž ¢¥©­±³µ½¿ÁÄÇÊÍÎÖÖÎÓÙÑÒᤠqŽˆ—‘‘ŽŽ‹Š‡†„ƒ€‚ФÃÑÒÃÇÔÛÖÓÆ®ƒvnpogaa_hi]TWagheb^\[[\`$%*Zˆ «¬Ÿ†M.BfŽ£©°²°¯±³´¨—‹—u8-40+(+2;AH<*75=5<93327?,/6;%\2\@Ej^Rf…t_Ox—bG@,*0D<(>B28A:2,/>P^dqu€‚pF>ap‡ƒ‹‡ŒŒŒŒ‹‹ŠŠŠ‡ˆ‰Š‹Œ‘’“–˜›œŸ¡¤§¬¯²´½¾ÀÃÇÊÌÍÐÐÏÔÚÕÑØÉ?sމ”–‘’‘‘ŽŽŽŒŠˆ†„„„‡…ƒ‘ª¾Ä¾ÆÕÙÕÓçsklkc_bbc[RUbgceb_[Z\^`_%%(W†Ÿ«­ ‡O/Bf£©°²°¯±³­­–“˜9;/*%$*6DM7:0&3CF90;=1'E3,:;5T>Er%7x‹z€ojDKnŒXL`;#98.8785/;2*/?Sagot€€j@?erŠƒŒ‡ŒŒŒ‹‹‹ŠŠ‡ˆˆŠ‹Œ‘“•˜šœž £§«¯²³¼¾ÀÃÆÉÌÍÉÊÏÔÚÚÓÒÝ_yŽ‹‹†Ž’‘‘ŽŽŽŽŒŠˆ†„„ˆ‹†}‚—¬µ¼ÅÕØÔÑÁ£}qjjg`^bf_PIXll_c`\ZZ]`c\%*$%Gz›£  Šc5Gk„Ÿ¥­°¯¯²µ´«›Œ©mLQ.)$7UR>:(/26:E=+7AHD826>3@_:;+fP!Vio€yd96w†Žž,17/47.05-1028EVgqm†xyZ3Xvz‡‹Œ‹ŽŽŽŒŠŠŠŠŠŠŠŠ‘’“•—™››Ÿ ¢¥©¬®¯µºÀÃÃÆÌÒÐÑÒÓÕרØÞ™v”ƒtˆ‰Š‹Ž‘’މ‡‰Œ‘‡‡˜¬ÆØÚÙѰ†nrsl`YZ^`ZOLZkj]\\\\]]^_L%*$%Ey›¤¡¢Œf6Fj„Ÿ¥­°¯¯²µ¬¬›…›oMJ8+"/B?2-&31<4E80A@?;7556+?_+1?YfA$C.U…n=9Jq¸l!44.58013+004<IZjts‚}}uI:Yw{‡‹ŒŒ‹ŽŽŽŒŠŠŠŠŠŠŠŠ‘‘“•—™š›ž ¢¥¨«®¯´ºÀÂÃÆÌÑÐÑÒÓÕÖØØÚ¸~‹saroy{~ƒˆŒ’ˆ†ŠŽ“’Ž’ˆ…’¯ÇÙÙÕË©‚ppmdZW\b[SPWbfdaZ[^__][YE%(%%Avœ¥¤¤l9Eg…ž¥¬°¯¯²µ§¬œŠqNF?*#,230*&82A1B47L@41572,%U5.47jDD8 -X‘/GT]\”.%:0.48210)/17BPaoxv…yg6D^{~‚‡ŠŒŒŒŽŽŽŒŠŠŠŠŠŠŠŠ’”–˜™šŸ¡¤§ª­®³¸¾ÁÂÄÊÐÐÐÑÓÕÖרÔِv^M`Wcfls{ƒˆ‹ˆ‹ŒŠ‡ˆŽ”˜˜Œƒ„•¸ÍÚØÐŸ|ojbZVX]bQMUdia^cX[`cb\TO<&'&%<rž¦¨§•s=Cd…ž¥¬¯¯®±µ¬«›†sOL;&'31382)98=592<OA1,03/)'K"EAEn‚}:DD54D>,qZVh(15-.3640-(05>JYht{u‚€uM1Mi„‡ŠŒŽŽŽŒŠŠŠŠŠŠŠŠ‘“•—˜™œž £¦©¬­±·½ÀÀÃÉÎÏÐÑÓÔÖרÑã©ZRHSGRUZahotw{~‚ƒ‰“œœž–Œ…|‡£ÅÕÞ×˶”vh^TT[_\WGO^kja]`W\cgcYME8&%'%6nŸ¨¬«›zA@a†ž¤¬¯®®±´¶ª›‘xtPV4&-92/3./8>5?13=JB6/,---.#BN=uZs”X;A;?-9;RdX-,1-0112/*)4:FTbnw{p{†]4=Xu„„…‡‰‹ŽŽŽŒŠŠŠŠŠŠŠŠŽ‘”•—˜›œŸ¢¥¨ª¬°µ»¾¾ÁÇÍÏÐÑÒÔÕ××ÔÝÂJQRPEMNPSVXZ[gknqvšŸŸ•Œˆ„‘®ÑÝßÖç†mZPIRbfYJEWgidb_[X^ehcUF<8'$'%1k ©°® ‚E>^†¤«®®®°´»ªš–lvQ\1+06-#$&78>.G.3=BA=5.,/36-F<)kceoœY@2VhRPe38:+41/2.+.,).:BO]jswyosuA,Pgˆˆ††ˆ‹ŽŽŽŽŒŠŠŠŠŠŠŠŠŒŽ’”–—š›ž¡¤§©«®´º¼½ÀÆËÎÏÐÒÓÕÖ×ÙÒÓVSZWORQPNLJIHQTVX]iy…•™—˜›–³×ÝÞѵ“s`IFGR_aVIO`ic]_^X\afg_QA78'#(%.h¡ª³°¤‡G=\‡£«®­­°³¶ª›’[xRX220/,"%5=;7.H30==??:41367D3.'7]ax…mQkX~@4!"49</24*$**)2@IWepuvvumO+5`y‚ŒŠ‡†‡ŠŽ‘ŽŽŽŒŠŠŠŠŠŠŠŠ‹ŒŽ’“•–™š £¦¨ª­²¸»¼¾ÄÊÎÏÐÒÓÕÖ×ÜÓÙzSZb]ZYUQMIED?@>=>HVav‘©³®ž£»ÕØÖŤ}_O;BLRRRTVbed_ZYZZadfd[M>45'"(%,f¢«´²¦ŠI<[‡£«®­­°³®ª›‹MySQ16/,0+4OA>00F8-=<=>=:8652/;17%,aw†‚Š~n`Dm;.84/%/46('()5DM[isvus{j-!Cg†‚Ž‹ˆ†‡ŠŽ‘ŽŽŽŒŠŠŠŠŠŠŠŠ‹Œ‘“”•™šœŸ£¦¨©¬²¸»»¾ÄÉÎÏÐÑÓÕÖÖÝÚÚ™QTjea_[VQLIG540*(/;FVŒ¿Ê¸›£ÆÐÒλ˜oPC2CRPFDSdqf^^ZSU^dffbXJ<318<>>Gd°¸¼§‡V<_— «±²²³¶´³¥†XS7.32(8017094299;D<9:<-@9"1Q/8'.9Yrªl€eQinR1H(+(&)*'$'2<RWdqrntm9;h{„ˆˆ‰Š‹‹ŒŒ‹ŒŒŽŒŒŒ‹Š‰‰ˆŒŽ‘—˜š ¢¤¥­¯²·»¿ÃÄÈÉËÎÑÔÖ×ÐÚ×ÇTaekjihd_XRN<<7-$"*2q±ÆË³–³ÅÛ×̰€Q?BCLSOIM^ngb[TRUZ^ijh]NB<;5STRNSiŒ§¶¼ª]A`€— «±²²³¶³±£~`€S7'/51@3..1851657A?F:A01/ ,.$D;<3..[‚–˜^j`z],/7(/-121.,1=GGjtktztG1.Mq‚ˆˆˆ‰Š‹‹ŒŒ‹ŒŒŽŒ‹ŠŠ‰‰ŒŽ–—šœŸ¢¤¥¬®±¶º¾ÂÃÈÉËÎÑÓÕÖÓרÎkW`jkjifa[UQGE>3($(.„ÂÎŪ™½ÏÒÓ¿ŠV=9:JKJHJTdpb]VQQV]bmhaYPF>89cb^[`rŽ£´¼®•hIc}— «±²²³¶²¯ qk€T6(.62?30.1870110==I4A:,))1/&6F@;/16Wz•˜~JqT:.)-0-%%$$(3BNIcrq|…j?)6Mfz…‰‹ˆˆ‰Š‹‹ŒŒ‹ŒŒŽŽŒ‹‹ŠŠŒŒŽ•—™›ž¡£¤«¬°´¸½ÀÂÇÈÊÍÐÒÔÖÖÑÚØKZgkkkie_ZWSOG;0**-|ÁÒɳªÅÌÍ¿—^6.6;OHADP_joZUOLOWahof[TPI?6?Y[]`i|•§±»±rRe{— «±²²³¶±¬ŸfrS3103,606517:/..*;<?+:F=(74-N&;B6;NDKG\w€Y65.)4,()'%&-;KV^an‚j> .Mkw|‚ƒ}ˆˆ‰Š‹‹ŒŒ‹ŒŒŽŽŒŒ‹‹ŒŒŽ”•—š ¢£¨ª­²¶º¾¿ÆÇÉÌÏÑÓÔÙÍÛà´JTdkklkhd`]YUND<766j²ÍÉÀ¾Ç¼½“aC52;GNE@J]jjeQNJJPZfmle[RMF?:CMV_gp™«®¹± xWgx— «±²²³¶²« bszR03.4.508516?0,.(>H;+5OR(9(>]9+J59MZ<Yq<f}W+--.7('0-+-7DPXmr}yT*%9Hdyz{ƒ‚xˆˆ‰Š‹‹ŒŒ‹ŒŒŽŽŒŒ‹ŒŒŽŽ“”–™œŸ¡¢¦¨«¯´¸»½ÅÆÈÊÍÐÒÓÙÌÛáÎ[P_hikkjgcaZVQMKIGFu±ÊÆÅÄ»¥‹fA58>FNJGJYjncVIIJNV`ipfd]RG@?ACIYips}”§­¶®ŸzZgw— «±²²³¶³ª¤fksO+,*88;37,05C2-1*EWI/8SZ/. B]D=9O.EIB_—jH;d9-)-3',&%'1@PZ_b]R>'#>^`pyy}‡ˆ€ˆˆ‰Š‹‹ŒŒ‹ŒŒŽ‘‘ŽŽ‹‹ŒŒŽ’“•˜›Ÿ¡¤¥©­±¶¹»ÃÅÇÉÌÏÑÒ×ÎÛÞÙ{O[dfhiigec[XUUXYWT´ÏÎȶ—{QL>16FMJIOZgnhYLCGNV^flodc]PC=@E@:RjplrŠ¡¬³©›xZgv— «±²²³¶¶«©nalL&.)99;38,.4G506/MS[.AWWH,+2[A?-`FA;TMu“N7QB0%+/*-))-9HTXWF6()9Pcoty{|€†ˆ†ˆˆ‰Š‹‹ŒŒ‹ŒŒŽ’’‘‘ŽŽ‹‹‹ŒŽŽ‘’”—šœŸ ¢¤§«°´·¹ÃÄÆÈËÎÐÑÓÒÙØÛžPW_adggged`\Z]bc_Zv©ËÌ»–mYCGC>BLLDO\joh[OJAHS_hlmlf`WLC@AC;%Baichƒ¬²¦˜vYgv— «±²²³¶·¬¬tZhJ$6+6220=3.4I61:2SEc'I[Rc29'PJ=Rt645b|˜h-,</"+/,)2.-2893,/1AZgiq~ƒ‚‚‚€‚„ˆˆ‰Š‹‹ŒŒ‹ŒŒŽ“’’‘Š‹‹ŒŽŽ‘’”–™œžŸ¡£¦ª¯³¶¸ÂÃÅÈËÎÐÑÑÔØÓÙµQU\_beffdcea^afgb[n›½·›tXWWHCOXRHCVesq`PKL?IWenomjj_PGEEC@7.<GQ`i}›¤©¦§†`ky•ž©°²³µ¸µ­‡=R+6*13/2:<795V0>1-HRS)>WohK//:o5!=kT@?d|{œb?A$.#(40,--+*/9BMS\gqy~€~~€‚‚††‡‡ˆ‰ŠŠ‹ŒŒŽ‘‘‘‘‘‘‘‘ŽŽŽŽŽŽŽŽ‘’”•˜™›œŸ¡¥ª¯µ¸º»½ÀÃÇËÎÐÐÛÏØÕÕnMV\dhghknadhlnonnt~…|hUNNDOYUJELUekl`MBEL;Nbmv|uiiWD<?C?:-/;DNZbx˜§¬©¨ˆahu•ž©°²³µ¸­¨¥ŽEG'8+2302;<796N@032@\B&2akk^(,L^W8TrA=`ipZ|X1$/:-#(*.48;BLT]ahpv{}~~~€‚‚†††‡ˆ‰‰Š‹‹ŒŽŽ‘‘‘‘‘‘‘‘ŽŽŽŽŽŽŽŽ‘’”•˜™›œŸ¡¥ª¯´·¹º¼¿ÃÇËÎÏÏ×ÐÙÕÔƒISZbfghlpfiloqpontsqlcZRMTWWPIJS]gd^VNHEECTfow{shcTC<?@<581:@HQWp–¯´±®ges•ž©°²³µ¸µ²¬„JI5=+2403;=899BP)23<f0**h^h}.)<sr.>T]5NnqZZ[),(;, 4)2?JQZcjnquy|||{~€‚‚ƒ…††‡ˆ‰‰‰‹‹ŒŽ‘‘‘‘‘‘‘‘‘’”•˜™›œ ¡¥©®²µ·¹»¾ÂÆÉÌÎÎÑÒÛÕÓ¥GNU_eginrnprttsqoqmgb_^^^g`VNLS]eeZNKMMG?O_mrvxocYNA<>=71548;AGKi–»¿¾¹žtgv•ž©°²³µ¸·¯š\9A70,3514<>9:@8R6++Hn*.-fSZG*/pvD&FrH&SfyP;05'.*+@.:KYbipuuwz}~~|{€€‚ƒƒ……†‡‡ˆ‰‰‹‹‹ŒŽŽ‘‘‘‘‘‘‘‘‘’”•˜™›œ ¢¤¨¬°³´¸¹¼ÀÄÈËÌÍÍÓÚÔÒÅOJR\cfiosuvxyxvsqoole`doyqfYSV]bd^RFDJNJD^ktutsi[MF?<=;602665;>BfœÆÊËů„l{•ž©°²³µ¸»¬Y?832-4624=>9=F4EN'#_s.*3eWH„t24>kI>JXs43Y`d5B+-,,088EVcimpsrtx|~~}|€€‚ƒƒƒ„……†‡ˆˆ‰ŠŠ‹ŒŽŽ‘‘‘‘‘‘‘‘’’’’’’’’‘’”•˜™›œ¡¢¤§«®°±¶¸»¾ÃÆÉËÌËÓØÒÒÚfHPZadgmrxy{{zxuspnkggmx€nf]\ac`ZUOHEHMPRlvzvpk_QC?;:;;97B74169=h¥ÉÎÑ˺n•ž©°²³µ¸½¬–uW5-?.5635=?:AI98X-&tj4$8hb>f›E!/WQA;7MdT/R\a^\"$(-3;EO^gkmoqprvz}~~}€€‚ƒƒ„„„…†‡‡ˆˆŠŠ‹‹ŒŽŽ‘‘‘‘‘‘‘‘““““““““‘’”•˜™›œ¡¢¤¦©¬®¯µ¶¹½ÁÅÈÉËÌÒÔÐÑÞ‰IQZ`beinuwy{{zxvskehqxxtgc`adbYQQPMJIOZcw~~tjbTF<977:>BDR82.47;k¯ÅÊÐʾ•l•ž©°²³µ¸¯ªlO3'1.5736>@;EHC1M=8L7.=ka;Q‰g$4Ql5E9SCE+?ccenH&&2;JOXcjmoruuwz}~}|€€‚‚ƒ„„„„……†‡ˆˆ‰ŠŠ‹ŒŽ‘‘‘‘‘‘‘‘””””””””‘’”•˜™›œ¡¢¤¦¨ª¬­³µ¸¼ÀÄÇÈÊÏÑÏÏÑÛ¬LS[_`aeiqswz{{zyvqnt~€xna`_`_[TNSRPMOWeo~ƒ€reZK<76449ALSY81-36;n¶¿ÅÍÆ¾•i|•ž©°²³µ¸®·ŠW@D3$/6746>@;GFL1<KI‚.8>DiV<MU…X_…D'?7^D<01`8q†=0<AOT\florw{{}}{€€‚ƒƒ„„„„……†‡‡ˆ‰ŠŠ‹Œ‘‘‘‘‘‘‘‘””””””””‘’”•˜™›œ¡¢¤¥¨©«¬³´·»¿ÃÆÇÊÒÑÌÎÑÕÂMT\___bfmptx{{{zx{†‡ƒzt`_^[XTQNWTPOT_lu…€paVF654228DR]a,707/2Y¨ÂÉÈÀ¾•i‘œ©²´³³´µ²ƒY?@.%/D#?0FG>F@MA5^i,F1;k[$SAZ‚>P€30.2GMB,.\G9\dGGRT\^bglquwzz{|}~€~~‚ƒ„„ƒ†ˆ‰ˆ†…‡‡ˆŠ‹Œ‘‘‘‘‘‘‘‘’•——–”“––˜™›œžž£§§¥¦ª®¯³·½ÀÂÂÂÈÊÎÑÒÒÑÐ|k][\\`hkqz‚…„{|~ƒ‰‹„wl][UMHJRZZYWTVaq}~xiUC84*-3=IU`fj
\ No newline at end of file
diff --git a/tutorial/image/lena.png b/tutorial/image/lena.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec368fd292ac2acb2a980cac57bb9ef7112b2300
GIT binary patch
literal 80630
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
CyWbrE

literal 0
HcmV?d00001

diff --git a/tutorial/image/tutorial-image-converter.cpp b/tutorial/image/tutorial-image-converter.cpp
index 46ac957c..14b1d0c7 100644
--- a/tutorial/image/tutorial-image-converter.cpp
+++ b/tutorial/image/tutorial-image-converter.cpp
@@ -5,14 +5,19 @@
 int main()
 {
 #if defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100)
-  cv::Mat A;
-  A = cv::imread("lena.bmp", CV_LOAD_IMAGE_GRAYSCALE);
+  try {
+    cv::Mat A;
+    A = cv::imread("lena.bmp", CV_LOAD_IMAGE_GRAYSCALE);
 
-  vpImage<unsigned char> I;
-  vpImageConvert::convert(A, I);
+    vpImage<unsigned char> I;
+    vpImageConvert::convert(A, I);
 
 #  ifdef VISP_HAVE_LIBPNG
-  vpImageIo::write(I, "lena.png"); // Gray
+    vpImageIo::write(I, "lena.png"); // Gray
 #  endif
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
 #endif
 }
diff --git a/tutorial/image/tutorial-image-filter.cpp b/tutorial/image/tutorial-image-filter.cpp
new file mode 100644
index 00000000..7ba75c41
--- /dev/null
+++ b/tutorial/image/tutorial-image-filter.cpp
@@ -0,0 +1,107 @@
+/*! \example tutorial-image-filter.cpp */
+
+#include <visp/vpDisplayD3D.h>
+#include <visp/vpDisplayGDI.h>
+#include <visp/vpDisplayGTK.h>
+#include <visp/vpDisplayX.h>
+#include <visp/vpDisplayOpenCV.h>
+#include <visp/vpImageIo.h>
+#include <visp/vpImageFilter.h>
+
+void display(vpImage<unsigned char> &I, const std::string &title);
+void display(vpImage<double> &D, const std::string &title);
+
+void display(vpImage<unsigned char> &I, const std::string &title)
+{
+#if defined(VISP_HAVE_X11)
+  vpDisplayX d(I);
+#elif defined(VISP_HAVE_OPENCV)
+  vpDisplayOpenCV d(I);
+#elif defined(VISP_HAVE_GTK)
+  vpDisplayGTK d(I);
+#elif defined(VISP_HAVE_GDI)
+  vpDisplayGDI d(I);
+#elif defined(VISP_HAVE_D3D9)
+  vpDisplayD3d d(I);
+#else
+  std::cout << "No image viewer is available..." << std::endl;
+#endif
+
+  vpDisplay::setTitle(I, title.c_str());
+  vpDisplay::display(I);
+  vpDisplay::displayCharString(I, 15,15, "Click to continue...", vpColor::red);
+  vpDisplay::flush(I);
+  vpDisplay::getClick(I);
+}
+
+void display(vpImage<double> &D, const std::string &title)
+{
+  vpImage<unsigned char> I; // Image to display
+  vpImageConvert::convert(D, I);
+  display(I, title);
+}
+
+int main(int argc, char** argv )
+{
+  try {
+    if(argc != 2) {
+      printf( "Usage: %s <image name.[pgm,ppm,jpeg,png,bmp]>\n", argv[0] );
+      return -1;
+    }
+
+    vpImage<unsigned char> I;
+
+    try {
+      vpImageIo::read(I, argv[1]);
+    }
+    catch(...) {
+      std::cout << "Cannot read image \"" << argv[1] << "\"" << std::endl;
+      return -1;
+    }
+
+    display(I, "Original image");
+
+    vpImage<double> F;
+    vpImageFilter::gaussianBlur(I, F);
+    display(F, "Blur (default)");
+
+    vpImageFilter::gaussianBlur(I, F, 7, 2);
+    display(F, "Blur (var=2)");
+
+    vpImage<double> dIx;
+    vpImageFilter::getGradX(I, dIx);
+    display(dIx, "Gradient dIx");
+
+    vpImage<double> dIy;
+    vpImageFilter::getGradY(I, dIy);
+    display(dIy, "Gradient dIy");
+
+
+#if (VISP_HAVE_OPENCV_VERSION >= 0x020100)
+    vpImage<unsigned char> C;
+    vpImageFilter::canny(I, C, 5, 15, 3);
+    display(C, "Canny");
+#endif
+
+    vpMatrix K(3,3); // Sobel kernel along x
+    K[0][0] = 1; K[0][1] = 0; K[0][2] = -1;
+    K[1][0] = 2; K[1][1] = 0; K[1][2] = -2;
+    K[2][0] = 1; K[2][1] = 0; K[2][2] = -1;
+    vpImage<double> Gx;
+    vpImageFilter::filter(I, Gx, K);
+    display(Gx, "Sobel x");
+
+    size_t nlevel = 3;
+    std::vector< vpImage<unsigned char> > pyr(nlevel);
+    pyr[0] = I;
+    for (size_t i=1; i < nlevel; i++) {
+      vpImageFilter::getGaussPyramidal(pyr[i-1], pyr[i]);
+      display(pyr[i], "Pyramid");
+    }
+    return 0;
+  }
+  catch(vpException &e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+    return 1;
+  }
+}
diff --git a/tutorial/image/tutorial-image-manipulation.cpp b/tutorial/image/tutorial-image-manipulation.cpp
index 9847ff05..fe230a72 100644
--- a/tutorial/image/tutorial-image-manipulation.cpp
+++ b/tutorial/image/tutorial-image-manipulation.cpp
@@ -3,23 +3,28 @@
 
 int main()
 {
-  vpImage<unsigned char> gray_image(240, 320);
-  vpImage<vpRGBa> color_image(240, 320);
+  try {
+    vpImage<unsigned char> gray_image(240, 320);
+    vpImage<vpRGBa> color_image(240, 320);
 
-  gray_image = 128;
-  vpRGBa color(255, 0, 0);
-  color_image = color;
+    gray_image = 128;
+    vpRGBa color(255, 0, 0);
+    color_image = color;
 
-  unsigned int igray_max = gray_image.getHeight() - 1;
-  unsigned int jgray_max = gray_image.getWidth() - 1;
-  std::cout << "Gray  image, last pixel intensity: "
-            <<  (int)gray_image[igray_max][jgray_max] << std::endl;
+    unsigned int igray_max = gray_image.getHeight() - 1;
+    unsigned int jgray_max = gray_image.getWidth() - 1;
+    std::cout << "Gray  image, last pixel intensity: "
+              <<  (int)gray_image[igray_max][jgray_max] << std::endl;
 
-  unsigned int icolor_max = color_image.getHeight() - 1;
-  unsigned int jcolor_max = color_image.getWidth() - 1;
-  std::cout << "Color image, last pixel RGB components: "
-            << (int)color_image[icolor_max][jcolor_max].R << " "
-            << (int)color_image[icolor_max][jcolor_max].G << " "
-            << (int)color_image[icolor_max][jcolor_max].B
-            << std::endl;
+    unsigned int icolor_max = color_image.getHeight() - 1;
+    unsigned int jcolor_max = color_image.getWidth() - 1;
+    std::cout << "Color image, last pixel RGB components: "
+              << (int)color_image[icolor_max][jcolor_max].R << " "
+              << (int)color_image[icolor_max][jcolor_max].G << " "
+              << (int)color_image[icolor_max][jcolor_max].B
+              << std::endl;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
 }
diff --git a/tutorial/image/tutorial-image-reader.cpp b/tutorial/image/tutorial-image-reader.cpp
index ab0caf23..bd0ff9d6 100644
--- a/tutorial/image/tutorial-image-reader.cpp
+++ b/tutorial/image/tutorial-image-reader.cpp
@@ -8,6 +8,9 @@ int main()
     vpImageIo::read(I, "lena.jpg");
     vpImageIo::write(I, "lena.png");
   }
+  catch(vpException e) {
+    std::cout << e.getMessage() << std::endl;
+  }
   catch(...) {
     std::cout << "Unsupported image format" << std::endl;
   }
diff --git a/tutorial/image/tutorial-image-viewer.cpp b/tutorial/image/tutorial-image-viewer.cpp
index 9bade45c..bc6ce276 100644
--- a/tutorial/image/tutorial-image-viewer.cpp
+++ b/tutorial/image/tutorial-image-viewer.cpp
@@ -6,32 +6,37 @@
 
 int main()
 {
-  vpImage<vpRGBa> I;
-  vpImageIo::read(I, "lena.ppm");
+  try {
+    vpImage<vpRGBa> I;
+    vpImageIo::read(I, "lena.ppm");
 
 #if defined(VISP_HAVE_X11)
-  vpDisplayX d(I);
+    vpDisplayX d(I);
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI d(I);
+    vpDisplayGDI d(I);
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
-  vpDisplay::setTitle(I, "Lena");
-  vpDisplay::display(I);
+    vpDisplay::setTitle(I, "Lena");
+    vpDisplay::display(I);
 
-  vpDisplay::displayRectangle(I, vpImagePoint(90,90), 70, 90, vpColor::red, false, 2);
-  vpDisplay::flush(I);
+    vpDisplay::displayRectangle(I, vpImagePoint(90,90), 70, 90, vpColor::red, false, 2);
+    vpDisplay::flush(I);
 
-  vpImage<vpRGBa> O;
-  vpDisplay::getImage(I, O);
+    vpImage<vpRGBa> O;
+    vpDisplay::getImage(I, O);
 
-  try {
-    vpImageIo::write(I, "lena-out.jpg");
-    vpImageIo::write(O, "lena-out-with-overlay.jpg");
+    try {
+      vpImageIo::write(I, "lena-out.jpg");
+      vpImageIo::write(O, "lena-out-with-overlay.jpg2");
+    }
+    catch(...) {
+      std::cout << "Cannot write the image: unsupported format..." << std::endl;
+    }
+
+    vpDisplay::getClick(I);
   }
-  catch(...) {
-    std::cout << "Cannot write the image: unsupported format..." << std::endl;
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
-
-  vpDisplay::getClick(I);
 }
diff --git a/tutorial/image/tutorial-undistort.cpp b/tutorial/image/tutorial-undistort.cpp
index 410a30d7..7964119f 100644
--- a/tutorial/image/tutorial-undistort.cpp
+++ b/tutorial/image/tutorial-undistort.cpp
@@ -5,26 +5,31 @@
 
 int main()
 {
-  vpImage<unsigned char> I;
-  vpImageIo::read(I, "chessboard.pgm");
+  try {
+    vpImage<unsigned char> I;
+    vpImageIo::read(I, "chessboard.pgm");
 
-  vpCameraParameters cam;
+    vpCameraParameters cam;
 #ifdef VISP_HAVE_XML2
-  vpXmlParserCamera p;
-  vpCameraParameters::vpCameraParametersProjType projModel;
-  projModel = vpCameraParameters::perspectiveProjWithDistortion;
-  if (p.parse(cam, "camera.xml", "Camera", projModel, I.getWidth(), I.getHeight()) != vpXmlParserCamera::SEQUENCE_OK) {
-    std::cout << "Cannot found parameters for camera named \"Camera\"" << std::endl;
-  }
+    vpXmlParserCamera p;
+    vpCameraParameters::vpCameraParametersProjType projModel;
+    projModel = vpCameraParameters::perspectiveProjWithDistortion;
+    if (p.parse(cam, "camera.xml", "Camera", projModel, I.getWidth(), I.getHeight()) != vpXmlParserCamera::SEQUENCE_OK) {
+      std::cout << "Cannot found parameters for camera named \"Camera\"" << std::endl;
+    }
 #else
-  cam.initPersProjWithDistortion(582.7, 580.6, 326.6, 215.0, -0.3372, 0.4021);
+    cam.initPersProjWithDistortion(582.7, 580.6, 326.6, 215.0, -0.3372, 0.4021);
 #endif
 
-  std::cout << cam << std::endl;
+    std::cout << cam << std::endl;
 
-  vpImage<unsigned char> Iud;
-  vpImageTools::undistort(I, cam, Iud);
-  vpImageIo::write(Iud, "chessboard-undistort.pgm");
+    vpImage<unsigned char> Iud;
+    vpImageTools::undistort(I, cam, Iud);
+    vpImageIo::write(Iud, "chessboard-undistort.pgm");
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
 
   return 0;
 }
diff --git a/tutorial/image/tutorial-viewer.cpp b/tutorial/image/tutorial-viewer.cpp
index ae58d7b8..de619c59 100644
--- a/tutorial/image/tutorial-viewer.cpp
+++ b/tutorial/image/tutorial-viewer.cpp
@@ -6,7 +6,7 @@
 #include <visp/vpDisplayOpenCV.h>
 #include <visp/vpImageIo.h>
 
-int main(int argc, char** argv )
+int main(int argc, char** argv)
 {
   if(argc != 2) {
     printf( "Usage: %s <image name.[pgm,ppm,jpeg,png,tiff,bmp,ras,jp2]>\n", argv[0] );
@@ -23,22 +23,27 @@ int main(int argc, char** argv )
     return -1;
   }
 
+  try {
 #if defined(VISP_HAVE_X11)
-  vpDisplayX d(I);
+    vpDisplayX d(I);
 #elif defined(VISP_HAVE_OPENCV)
-  vpDisplayOpenCV d(I);
+    vpDisplayOpenCV d(I);
 #elif defined(VISP_HAVE_GTK)
-  vpDisplayGTK d(I);
+    vpDisplayGTK d(I);
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI d(I);
+    vpDisplayGDI d(I);
 #elif defined(VISP_HAVE_D3D9)
-  vpDisplayD3d d(I);
+    vpDisplayD3d d(I);
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
-  vpDisplay::setTitle(I, "My image");
-  vpDisplay::display(I);
-  vpDisplay::flush(I);
-  std::cout << "A click to quit..." << std::endl;
-  vpDisplay::getClick(I);
+    vpDisplay::setTitle(I, "My image");
+    vpDisplay::display(I);
+    vpDisplay::flush(I);
+    std::cout << "A click to quit..." << std::endl;
+    vpDisplay::getClick(I);
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
 }
diff --git a/tutorial/matching/CMakeLists.txt b/tutorial/matching/CMakeLists.txt
new file mode 100644
index 00000000..08d5b176
--- /dev/null
+++ b/tutorial/matching/CMakeLists.txt
@@ -0,0 +1,21 @@
+project(tutorial-matching-keypoint)
+
+cmake_minimum_required(VERSION 2.6)
+
+find_package(VISP REQUIRED)
+
+# set the list of source files
+set(tutorial_cpp
+  tutorial-matching-surf.cpp
+  tutorial-matching-surf-homography.cpp)
+
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/video-postcard.mpeg" )
+
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
+
+# Copy the data files to the same location than the target
+foreach(data ${tutorial_data})
+  visp_copy_data(tutorial-matching-surf.cpp ${data})
+endforeach()
diff --git a/tutorial/matching/tutorial-matching-surf-homography.cpp b/tutorial/matching/tutorial-matching-surf-homography.cpp
new file mode 100644
index 00000000..aa052bd8
--- /dev/null
+++ b/tutorial/matching/tutorial-matching-surf-homography.cpp
@@ -0,0 +1,117 @@
+/*! \example tutorial-matching-surf-homography.cpp */
+#include <visp/vpDisplayOpenCV.h>
+#include <visp/vpHomography.h>
+#include <visp/vpKeyPointSurf.h>
+#include <visp/vpPixelMeterConversion.h>
+#include <visp/vpVideoReader.h>
+
+int main(int argc, const char **argv)
+{  
+#if defined(VISP_HAVE_OPENCV_NONFREE) && defined(VISP_HAVE_FFMPEG)
+  int method = 0;
+
+  if (argc > 1)
+    method = atoi(argv[1]);
+
+  if (method == 0)
+    std::cout << "Uses Ransac to estimate the homography" << std::endl;
+  else
+    std::cout << "Uses a robust scheme to estimate the homography" << std::endl;
+
+  vpImage<unsigned char> I;
+
+  vpVideoReader reader;
+  reader.setFileName("video-postcard.mpeg");
+  reader.acquire(I);
+
+  vpKeyPointSurf surf;
+  surf.buildReference(I);
+
+  vpImage<unsigned char> Idisp;
+  Idisp.resize(I.getHeight(), 2*I.getWidth());
+  Idisp.insert(I, vpImagePoint(0, 0));
+  Idisp.insert(I, vpImagePoint(0, I.getWidth()));
+
+  vpDisplayOpenCV d(Idisp, 0, 0, "Homography from matched Surf keypoints") ;
+  vpDisplay::display(Idisp);
+  vpDisplay::flush(Idisp);
+
+  vpImagePoint corner_ref[4];
+  corner_ref[0].set_ij(115,  64);
+  corner_ref[1].set_ij( 83, 253);
+  corner_ref[2].set_ij(282, 307);
+  corner_ref[3].set_ij(330,  72);
+  for (unsigned int i=0; i<4; i++) {
+    vpDisplay::displayCross(Idisp, corner_ref[i], 12, vpColor::red);
+  }
+  vpDisplay::flush(Idisp);
+
+  vpCameraParameters cam(840, 840, I.getWidth()/2, I.getHeight()/2);
+
+  vpHomography curHref;
+
+  while ( ! reader.end() )
+  {
+    reader.acquire(I);
+    Idisp.insert(I, vpImagePoint(0, I.getWidth()));
+    vpDisplay::display(Idisp);
+    vpDisplay::displayLine(Idisp, vpImagePoint(0, I.getWidth()), vpImagePoint(I.getHeight(), I.getWidth()), vpColor::white, 2);
+
+    unsigned int nbMatch = surf.matchPoint(I);
+
+    std::vector<vpImagePoint> iPref(nbMatch), iPcur(nbMatch); // Coordinates in pixels (for display only)
+    std::vector<double> mPref_x(nbMatch), mPref_y(nbMatch);
+    std::vector<double> mPcur_x(nbMatch), mPcur_y(nbMatch);
+    std::vector<bool> inliers(nbMatch);
+
+    for (unsigned int i = 0; i < nbMatch; i++) {
+      vpImagePoint matched_ref, matched_cur;
+      surf.getMatchedPoints(i, matched_ref, matched_cur);
+      vpPixelMeterConversion::convertPoint(cam, matched_ref, mPref_x[i], mPref_y[i]);
+      vpPixelMeterConversion::convertPoint(cam, matched_cur, mPcur_x[i], mPcur_y[i]);
+
+      // Store the image coordinates in pixel of the matched points
+      iPref[i] = matched_ref;
+      iPcur[i] = matched_cur;
+    }
+
+    double residual;
+    if (method == 0)
+      vpHomography::ransac(mPref_x, mPref_y, mPcur_x, mPcur_y, curHref, inliers, residual,
+                           mPref_x.size()/2, 2.0/cam.get_px(), true);
+    else
+      vpHomography::robust(mPref_x, mPref_y, mPcur_x, mPcur_y, curHref, inliers, residual,
+                           0.4, 4, true);
+
+    vpImagePoint corner_cur[4];
+    for (int i=0; i< 4; i++) {
+      corner_cur[i] = vpHomography::project(cam, curHref, corner_ref[i]);
+    }
+
+    vpImagePoint offset(0, I.getWidth());
+    for (int i=0; i< 4; i++) {
+      vpDisplay::displayLine(Idisp,
+                             corner_cur[i]       + offset,
+                             corner_cur[(i+1)%4] + offset,
+                             vpColor::blue, 3);
+    }
+
+    for (unsigned int i = 0; i < nbMatch; i++) {
+      if(inliers[i] == true)
+        vpDisplay::displayLine(Idisp, iPref[i], iPcur[i] + offset, vpColor::green);
+      else
+        vpDisplay::displayLine(Idisp, iPref[i], iPcur[i] + offset, vpColor::red);
+    }
+
+    vpDisplay::flush(Idisp);
+
+    if (vpDisplay::getClick(Idisp, false))
+      break;
+  }
+
+  vpDisplay::getClick(Idisp);
+#else
+  (void)argc; (void)argv;
+#endif
+  return 0;
+}
diff --git a/tutorial/matching/tutorial-matching-surf.cpp b/tutorial/matching/tutorial-matching-surf.cpp
new file mode 100755
index 00000000..24770384
--- /dev/null
+++ b/tutorial/matching/tutorial-matching-surf.cpp
@@ -0,0 +1,53 @@
+/*! \example tutorial-matching-surf.cpp */
+#include <visp/vpKeyPointSurf.h>
+#include <visp/vpDisplayOpenCV.h>
+#include <visp/vpVideoReader.h>
+
+int main()
+{  
+#if defined(VISP_HAVE_OPENCV_NONFREE) && defined(VISP_HAVE_FFMPEG)
+  vpImage<unsigned char> I;
+
+  vpVideoReader reader;
+  reader.setFileName("video-postcard.mpeg");
+  reader.acquire(I);
+
+  vpKeyPointSurf surf;
+  surf.buildReference(I);
+
+  vpImage<unsigned char> Idisp;
+  Idisp.resize(I.getHeight(), 2*I.getWidth());
+  Idisp.insert(I, vpImagePoint(0, 0));
+  Idisp.insert(I, vpImagePoint(0, I.getWidth()));
+
+  vpDisplayOpenCV d(Idisp, 0, 0, "Matching surf keypoints") ;
+  vpDisplay::display(Idisp);
+  vpDisplay::flush(Idisp);
+
+  while ( ! reader.end() )
+  {
+    reader.acquire(I);
+    Idisp.insert(I, vpImagePoint(0, I.getWidth()));
+
+    vpDisplay::display(Idisp);
+    vpDisplay::displayLine(Idisp, vpImagePoint(0, I.getWidth()), vpImagePoint(I.getHeight(), I.getWidth()), vpColor::white, 2);
+
+    int nbMatch = surf.matchPoint(I);
+
+    vpImagePoint iPref, iPcur;
+    for (int i = 0; i < nbMatch; i++)
+    {
+      surf.getMatchedPoints(i, iPref, iPcur);
+      vpDisplay::displayLine(Idisp, iPref, iPcur + vpImagePoint(0, I.getWidth()), vpColor::green);
+    }
+    vpDisplay::flush(Idisp);
+
+    if (vpDisplay::getClick(Idisp, false))
+      break;
+  }
+
+  vpDisplay::getClick(Idisp);
+#endif
+
+  return 0;
+}
diff --git a/tutorial/matching/video-postcard.mpeg b/tutorial/matching/video-postcard.mpeg
new file mode 100644
index 0000000000000000000000000000000000000000..21fca4da9ab753228612066dac3ce24272eff30d
GIT binary patch
literal 899326
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%0A(#961>8p1dj$M1)>Fc>!I6&@RIbPC;UM4
zT%UPKp}INbegeMs#ATh%A@gxH&(gRq08~0Ek@NvI3itMi&IAXn#d2cenx7}<qT9Ea
zqkntPa?x(>b`y;!QdTN<scMx#fa~x5$rb9ojrbi*6RJ{;YfIn#cO}4s^1e*C0{B`g
z`@1#L+4TmyCFe5YNl<gP=w5$S<-ep6By#pHL?V6fWTK^4HG|dPUl!Tj<;oa@Rvfwl
zw<Dv)H|tWgp7lGz6}o%_2)uu1ca<<5%{1}|M5~q<*5oSREiISOfQ1hl2G-YqB9~D8
z4h+kMc>x4Q@0H;#xcVVdRDc7CHLL8!Ad3&yx%2_FD~7s$$U9tUOf=hzhiJ~frrXAa
zE#<v!pAC6iS0Mu}796?dHmKfaXZLbs8o4A`d^kqgxfk`{a)1e}$~&m$sv-^TkiT~4
zNYGLRT(F~oo|1honvpo4^Vye@DS;&KZWbFWLoXn|Jw#!cRnchVw?oGb9RBH8IHTDi
zF8zcf_aBfHOuudY5jiZ%KP(naZ1cDljkR!j)yQ0QS0zI4^InDr7sQ*{J(6Uf>TvZ>
zLkIA}6>$HQGH{8cQ=|X;qwCf6+>d#=-Hkx(>#`fn@X2)KaEY{>9)wHWSqM<I-BR<q
z!u_~|j3UhSf%Ck|lc*Ch`w3TW&amSvqGbjZIMUYpZV>-sO>TK_1vAP%eUu~mbeAB}
zubmd*gpm3r%a~G3P{KKF<+aEhHUaI1TD<KeADcU%VxVi|xhR(^a`s;IVv~Tt8_1&;
z>$hX-tGsTIo0A;kk1L>kDabUJz(dSbLiX_6Yj%<YD#ROG)%4v$<;4V1Mt|~bU?PHT
zUny=FkjaO5PRO_U$nps|A{55qdJvCCg6mqpXk;UqvU~Hkac|ZNx|b(1=&CMGUqI~O
zYh7Oc=^nHvMDa}ODJ~LC?tk$7rY0Vw<?Gf=n;s9baXk92U+9=C;NR7okuZQKLCc~c
z7vE0h^>=&zStp~}W>^Rn)3H|j?zL7VsBm%CX8RQw#M{YgOf?HsnHKx31qQLTH1=1L
zNHb`oLQTa=X|W{ME_?zP5TE|_pv(_sdjxS9W6iSnK6_UeD}Rkn%0&xFxO7Eo{<HO1
z|1S^BE3jIiR_06e?##;2$U=}M75ZI_`kMxMT|&L>&}!4qHiP;4Hx2iZ-~4$P0u@u%
z>wh9U9{LH695s-4m+=*cjZJ&BZ1<x2-jdO(_O%d1zqw&=K>5=PM3WU;xf92=VAY<(
z9-)8?i1&Iu$#s`%bTT7DI;Yl0M!VQM*M*4Qh_2tITynsg|B3ILKXG!&8EP1~?G3NO
zns#jG-LxmG=#O|7Vomye`ToqXjA(kpI5V1X5w@YRd1aI>4)&riY9EpF{6*10GmPD9
zWm&c(J}J}4p8bA%=d*=ws(5eqC5^O9axNMz;1iqj#INw+>OQi&Z<JFN`?PFtIK=%n
zt|PriD)HIg?+)_#7ZUXH+GpA44MOU9PJnry5ZPLe314)ZBpLb&0wA)9LFy&q@sn<O
zIV|p#Ltt=u%YCJgt0iM&1m(46T9Yh9asesGn`oi<w_73aFodJ1KLlSN{v~;LDZ2OD
zZObhL#IqK*bW8CE%TVfj(n?1Yu6rs_s!ty795eQWXfpFD2mw#Q$$Il6aED&GXeVF8
z-~fp%N!|JG?j<)86gJR{rrZ7fc*_q!4x-K~5GqDaiVdsrbx&HRQE(b9E=?e*we@{&
z>-mELKU1NMhgSGHa`^1PtK3zm?0GUOIANpY*a7#$1)~PQ=Lb!Cm^0oN+Mng3)X0>z
zkUI)a2s-f{eBC{_3(CiJ;!m-WM04-T?3Simc`*>!VL-}h?Jb|cFG;82W{&0Izp?mo
zuJ|By+^U$~?yE0;LKx%(`<xkT-cPh#NN$S*(ZZ*$uqe2=$DCB#{So=Sm&!iU_k92c
z-&-bHEISs-90WKnVVgvOgoUc-^wkGY{jjOAb^Q*&T8B=mHz>_xai0#FOaZ8=F?OH#
zpJQRrk+q@Y4tEf)(_5dQDyJHsF_5=q0k97<Qn32JoMbabnm6mxKSS(&Nh34wzmz4|
z1@nwo05&DapCxvvA;it3)F!eT7xvo3qV0?_b@PN^Z{@O=#zq9tkMtn(j2NmpwcM!-
zYjUF{@m#}n*2PbuSke5MROHuh4=gw5ZeN{<=aHXjT*8;P^xyYNbQX!$cJ1qa4{WLB
zs_MD2qw3KL>i_VSO{<Ale{ur}=d7sSnLjsK)hIHJkwjDL%Q&t1g1u1~KhR7*qoudx
z`$&z>H|xaJE@phCXKdH7RETPZYkx;x7B8^tQV@Tor!U4m-GF4|qCCCNGs?*%pNqlQ
zb_?k3^fBnGc<uqkHMWy8xh+(kjnw$cOk}sdps#}9<m~`WnaSM<si(yR%lfBSri_U|
z*W=4fMfNR|0QUcOB@Km+*pZc3Rt0Je6@-eN{C3q0>r!%1AK?)11RejxHJ8Sg%duJS
z*F2+$W+yYCW5M0JBki%y07By4fqU^4Cr*(+ul~i-0d`z~*t(Y*Er@{FJ7+})2+>NM
z!B^5$0z#TQ3ugY~H}EyarHB`UUL@5XI9&+9#DC8=sLo$Bvokj`7TAOZ))K$KFUPgL
zY|ff!oU05J*<}KcGWo0Ru$UpHzpRY=gn%DN7&|$<BbuG%*vQ?Z0o3JhbN2_~($mob
z^Wp)ij>|cANVJn0N1j?p+0AZLFyFB%@*7xDe1M&DIQAzQC_^#EuSSbzX&aG$hX`X$
zu2mLv{FG38=rU18A;icEi#lg|b*ABfO~I2o+2MR5_^HT|r`s^-_fKU1J#V(`8;OIf
zN_C|!GGCIQrs=k-35Cu+8Je#*a?xro&ijr7n>hI?X4MQcWVgL_Q#VIpC|*W=s}tD1
zXMEd!xFsTJ4{^PH2XeP;QtYF5%fBZf(U<(Tf78_<f@-HztboFXtK{O<v%Z`&RmN*q
z-awq*7Pr5mM}1lJJw_tQ$qTEGL%}}dXnO#ykDq{Zyo_uWEh+L}&jOT_iZUu!Mx!|h
z{$}%)jk^Q}j$zRlcd<6+SOrJGU6~JCGq|{$B7bcZe&W9-f$WLvPQ_%kS*Dfay<cS_
z$E*pccx*#DrA+l6zI>)chB<rc4RmZ?n`lnA>k;|DT-cERQun7NtZDC6{K)U{EduEm
zyXu`3AW}{{Y-!dLEaUjxPDaZQ`+T<I2+wGVnT!GUGL9&yeqxa5uo&V^9|_td96HjC
zRy!dM2M|#HgM9~`EgR3W(a5gfd#Nd&<RwQLpNaWee9do$yi5_KPZ`9urN@#ET<X^y
z+1GEngf;uOujJ+)b@Czi717LbHO;k=t8gZ*_Rabam(!IaAn?m+_a6bB<{pg;0*c%;
zG0kcll&GUlTo+JZcyI0OFk+OQI%fzyTfnEcmrqFz-Ml(dOi&JG$$2#1%ss$5RoR5=
z^*Su>`VHs0v#r|k6Z!2EY<6#A??+@7dsi03Idj!TBIrtLigSi$1lDB2zDfJ@mOS)=
zK*$qMz`ejae@GAVH!XLs2k?Tw>~KLvd@<|q`IY)q<V5KApL`9}eI+#FY*s09zMhav
zP0Tw9p8Ju#OAv5UQh}~2`gr@6$yuKVw$k{SpkY;w=Wea~jBCXNrmna1<<nCu<9vo^
z>`=JyhR-;~>mP1%Ju~fnDCQ3&35#dgUeHkvm!@f2IDib7pYp1zDqE5~JON)nQs|$@
zm^9b;m$%g64=e5^2TR`jJE~->t201Aq_!lH=DPA0{)X}k$blb7Z760AuJC~I_vCzV
zb<>_?n`W&uQBwy*({HLy*0+mS5m56Ch|}?SwVF$Djys)964dBY-R`@J&0RNRcUjIS
z{`ji5@W<Es@?!fgKE<dQLWwVvRZ}|5EUI4V0f4pA@;S|x^}?02r4AV<`0|dg!*fm?
z@(eAvAd4nGxGsCEBqm?K?Hh};yM(NOcf3s)-VnL3iRMyRv&O&3aE_u?V@lc=Donvw
zfUVIV-yiylNHm>tY(-zP-PFccl@B+N&wHFh$V|@3KxJwFs;-f|p(AZ90R+PM?4X(|
zwY#hu*M(@vUaI!~*H7&irJQbDf&y!f&%75e;eLE9c7NSXG<Sd_6IGq~vQ|Fz{=!!W
zeS2Kj-%UDFSOH+!dq2@LHGDUmvOQ^#vokakmk~1E*uymuvg9>E|M`Mme>Zecg`D3x
zIb2?Zvccnis<mMc0kFZNpSpvkM`Uw`hrIH(TJUw>0wtGZ+)GBhGa$}^pSQ11<NJww
zA&y45sB(?tbLo$Vmae_w8hr!U6MMy!!@Zcn^_P0Dmx$(v_HeO-ImlOES;~ym8VMS5
z<x#@7)nCk;w+_THS^owg_t)GYY(q{#Xv9B9j@<fP;2W3jKl~|u2cytS7S{pfUuv%g
z>U%B8lnmX+eLUFN?Q#F?`qRy>_{ynyYS%1j^ws#&G?m_3N1*M6XfGY*7P*k5gK*)L
zgijXUb)^6zb>+m2vUL71uy|D-xwIZ>_}P5$u&x0QfqwLy4EowP*>l-x<RA_KakAZ>
zpR$5KZd4B4OD-n7t#x43o+EtYf$&v_u9ZO^=JaH2sRl`K5O@FD+o7bEJvK@vhx0y@
z8Pj+YgMd&u{YTzW!&L680MQojpUBw}Z!>~Yii;t&G-~~IlPZ$DwL`$X$@b@&JK=%2
zOue4wy~A#_S&}BCg|9g(X<5Zc?G4_qNP<3DRNGemk#NP+=0d<O!8(lt0loU5kjb1L
za7PKO(vOA0J-=~jOQZ1v^|^LvpBmMpC)F~2%gPjj#XKujQ>JauoOlkXZT8Tt;qCVH
z@tF&edQsJci`(tP<)vz8&(n7}sTiJCpTPyz=zQTaV>>VggA@H%lDTNMAoskB7B>ce
z^bD@TAP$=u+NK}K#FFcwKui*s*y0}}@_PI5Zs9jSd{uV_I=H@yYc?V)7v<D_Y0!rF
z*SFJgRVnQd*L{##8luvIP>-_mysfyFLxO_#4jwelJ7;Aa$;xtA;Nl0obB2?<u^-|d
z$6OCN%9Zq6AH`Kr{p=l<m9Q4t0xOj*7}j6IQYm!=-sd$}_$C^?R1ihl>ziHf5F0;v
zfxHO+Sf#@&E6>grIuj&jk(ji@KYw5F-~W&Rfq198K{T4YtM7WwXFrjeW5k+KV>GMu
zwkm`&cAUcJZ{q8B+wAB6Bzjs!{~uXr9uMXB{{NXQBSMo<V;PM~WGN&K24yQn%D$_F
zkaaAXVQe2;wj|lN?915qog$T;v9DztV~pL{ez*7I``_<B58UTm_gSuU?(1CV^^}+R
z{TR3>)H#E<dyxL++bS={2N3WwetqP1yXqujfuQL70nsxym7oEw3;h0hCYAl|lmpb|
zq}{1+=Co6}G&!$yJvU4z=dFHx<dfeS@}p?Zzy{^O2X*$5OO$bj<M&0HO)|jVaVEj$
z^TVjtmlxJ*op*uw#Djy3&&e7~7|H?QK{}6zkyq{8zfCps$Xl7pPC;E#lW4}7F`3`{
z&7_cAYY0TQ)6gL{P{~>?*KJ0k!{Bs18+yTgbz1PSq<!%~_SnBcIby0o=HIm%yvh}X
zBg*zG5<$dnti-iF7$xV%igM*%1HAsd5X#l^!hH($s{pWeJKmdrqG76ke2e$3^v|fI
zK;XQ}od2KFcRVzW|NNl*FL{>WlE%-RkEm@sS8VT2OEbNGC8ELkeGq+jTHcAA1|0(e
zApxN*8S#78!n<tnscq$yRsL42sk|$fM)GgKn>)Sx-@<Hh12yq)!6NXTS9b*st)Ys!
zw5)OW)tq@SUM|vUN%O5gQ}a0=cwLpVbzd(|+)r9B<`KX+e^)Z-X7xqMmVa(vsCK%`
zk<X^O-O8A51{~S2_H1{dfj!rbb@=a2k1+fF-MAtH?L$`!s#r-)m~m!re0y58xZwGN
zkHIyDPIXB=8WBt3y-z2-`IQV&+<&;EsF>}wPD$n7p$a-hY!g!Cpy)F51Q}QbQBwYq
zk*hAdX~P}*FI#RTzhw5F&--*=0t+>dqa>={nN|sdRI+Vmh!|b_AnGu9b#MFdEfC#U
z|HU};6PEd^Q^}SBY)bLVsxKRXICtWG^)i4H{5S7NYP4m)q-50!IB^j|qX1toqfr%B
zZ9(DCn%eeaUAMzW4`-0RR0o%h3Ap6_$Q4R0ZO>hw0aDREoMywmm7pJVXOsRg2G_)C
z`j^@GS<isBpDMRMV^glb`qZG8C9A_ga?h`JjtxVcQQE<rAlertpK91yW$s<=vHl83
z!ou-3v1NW~#|z;ufl5ZSi`f$ekFLM_a#Oe)@We9qbdedxJ$YYZ8vrcltL-tXrkodl
zV!3jhC6!~gJR?Yb>~xnn13PZeUI|NGUq^Grcc>OUvA**N&D78F;YF6{d6ynwCnMC%
zzYJ`QJaR0EnN~>t{&`WRxPT%y>5<W65V=;SL*K5u2PJK|QOAA|Um-823AN;^e+eVe
z-&fs20nxyAH`MznZC%q-#vm&v;N%0?O@(G#WOwe8>w<v2)6&!9@x(=V;~js%&2)TS
z)YPK}F-`u|Y(ww?;|K)$|3o2RrU&r1I=P1uB$;Gt9rmgON+=rRtC4@2-FqaJ{c<f*
zE2-|^sQqrr$ZX}m87dlCE)=`T5}9=eDDE6AOt38U>84AWtajSpisQ<vL@aTm``Mcg
z_PYfphymwuIo>eQaxA(#R_ib9tF+0s|JZge@E{G$<bNdXY_{@uL3vv4EADbA;Ankt
zxjXBmeFfcby_RJW`7mERIw-9?nmy2d>4dC@=~Ntn2K?PZ6<a>|_0IS8nSeDd7j~*r
z5mrmPs@I2c==pJ=TPBoJyH+`>LC|jcz*6``mQ&;9x)U4ki+|+&&pTg^;94=5@fBTd
zA&sT<;eGhy7N8J1nE!hx?VC{}H!BdG7}Q`t4;3yG=Uq-}9>Ji8w^64`hvbXkzaZJv
zO}Lu_{$%SKQe>MT-)Px7Oyxnu<vBc^+Wt+-XVF$%ypl0!4U|X^3;2c&L`vjYzmT<f
zYql*qpQ`iv;8(R{-}}^0@<*$Cryj0-VQ`1iU48&XE;-@jBcpd}SkxM4B;}RtGidt-
z9q{iz^f&~zRl8cpAb9^~v8;HLRKbP&nLEFloJ!<z%qQmX4oB<L{Uzd?{pN$OZ;%t?
zgx8Hsh_TP#+ia*Pyyh@)dp_edeOLo4ly{vCu!;fZ%_Gfwk+<FDTREa<i3LVAO^qXW
z!F^5urTgaJ!aNG}h~C4cqZUIzM9u}#@7Zh4ZPq|S#-WBSW8=pvIRLpUzr0<V2T6-?
zhTKYF#RhrR1hTknHc<9?E-Z~rQrl#2?Bm<w@&y&uV}r+9NWy8)Y3mWl90R%n!nVkC
zT5a$&Z<wF%GS0@FW{%UC^T32%nfcC9LEPtRz@n$|(yEA1SvqxjGcrG@`;@Ps&Z>M>
zWGN<donTJ$GxK*&lmNbu<Rk4w8R}IcR;fR&M<=_43y&Y^haT&6)iL7R3zkuHN2(@)
z8_oYxaw9C-mzM$C7-5)U3Aq02{_Cq-fl71tSw#bNMCEV%sy!dW5GQAg{kn7#D^G0h
zr1`c!AKoLFVp~w|ivy{}`F!<&xS6xI0pd@m63SDl<F%#K5OdIGxua>EfxeP|aZ~Wn
zAEglJZNWdFk$KF+Vv-yDX$_Cs$?r<N19x|mHNCPi-ey`eVnK|{(jO3D2@}k>Y}spr
z=(jne*O82OQ%EqLIjKKp`**yjXDxNQ&t1wV0`}bVal61r1M0h?K&PupPd<&8jqHxi
zU)g7O-)e4`W#}YmUxwTk4K$&m5*)#<$b%G6-BO`Abx=28@Y-|q?!PJP53M>&T<{OE
zF4)joRGoKp8c_EISVuvw#^JD8vUj36ac!zQb#j1Avci?IG>_1z9|z8i0^*vYV9S$_
zDUHGPXp`Fo!>0T0Znc5K6LkVJ8>wc%2i)i+KI$v+f2M9(TOxawGj@$7E`&em0{-dm
zgSHQyGb9x%n-7uOEUfsmmt}_eHVDizi=<2kf3f|9y%Ain!#ALLDF_eodFDu5N|`pj
ziyZC}|K{=F`%E9l47rkUzyrniC|OV36C<rl{aYs9-_3ba{DQxoNKtV9-r&Qr4wKVk
zwaWKGRT_Ib=t&lyeGIa|0tz+!*4Pd-8+&ERBhcayL#0x}^lu_jO8@TZL0^jCJ4u>B
zjppTof(_1x_L!D38HLA+=G-x{K8rBTq!zfp*lCNJ%oPY7<UTI?p>GMu;q<wwWc!uS
z_oke0OW}^MK+vtimc5q#)4krA+a$Mveed~;Kl~x5-EI4xi^xD{2_DEE_+kq{#bN-l
z=Rk{#e=D{sIdYl|3E)YvV3mvMEq$OnAnIvXHVczLtFY|t)&pJs{F7PELU}`60C*?%
z&>GLw%*#-3+)QWI!^UG9XEdh;<L|KlAi9(2xDv;fH+h~C_YWJn`Q;}eHR$CR&`47!
zk4q)u-T<i{8E>c92Q&jKtnH31UUq+iZrVX{M16N>Mt{>`4Lr-Z(;`djb4)<TflI)%
zT9L)Yt!)0ir^QV5g_WIV%R;RuVYVI?jkv1a7?*`P4zs=F#JD5WDVEqmoN$lGAz*I>
zDb3$IkyWm>+Z4w3Jo(Bzvsc@&QBX)0cicz+e9~5sq_%<PKj^Mo^oTDwKR*lDa*^xR
zMm+bU^brHBBeGZQ_xgH_BM;O8J*39wxD&)nAK?4rb1P;%)mG!Lt%P7}|IWx?V$Lj+
zu%y6XF{;IihVyjvE{M6?tBuH#OE>EK=EQNZ1rqlmg{g5!!ImZ41pahGpwoBY1_}i4
z@cNPsp46;2Dw8ZJXdb{<kFT>d49I^GT3SYa-!hZG1DhJ$Yfe%6OXTmpe0>YN4VVXo
zwTZAfQePX|_s)jBUcndFxwg?Fz0MbjvQjtTpei5A1`%q}L2OpvI|SRGRM*IsVfbjW
z;{z&v-^!?8&lk4x8C9$|A!g#=ZbzK^b<9SN&B%~cYJMRQg0poy$mcQh6Dz0@5}0{c
zvih@DK_aB@xz1LLx}v*UsLAy2xz?c>8Q~mN=<Bnlx&&)0V}};QTb6xa&j{(F$S>AU
z6?dmKdS!3XKW8e?P*o7CJplPY3-t&CU%sm98Caz_6L(54`nuCSF_-WwMNvz1a0BEu
zk3Jc9b>FDOR0l_$r9t8G-CSW&@aOtt(8!95$&4Yn_7BuydxU&c1EHqkXuO<{lQiq7
zEZ@#_B-mj79)!k-W+RgPQU-RX;b)e0ab(&w)Bmva3gBAL8c6@w$JM>}q~tn&T;z0o
z&Aj#FDuEl(MG)Q9hwbJVTWn87eNRZA{_bw!R1JgNbcZR{Q5gF#?X`&h+?ojj4V?1j
zI?@yNf$pjIn}tsu9^Z2`rg@Af@&AFC^)8S%!Jq9;`~RwM_SKn{EkpEr{RGFz{@?#w
z{Vv1W%@jA#k2kifo0sfQd;N=Nx~d`Vg|??SK+Mj0$$b&LgtKv`qE7esu~Tkjx(=qi
zUWB6F+c*o@{B;@`^2Hi7H8@z5y5+aX63`;i+(n<@b#Mfp8kl^OMiiKt281lH5l~JX
zJZ9G(E#LwN$AE)QA8+<oAjqW>;t|7N8}~hsC+NiMh*xLEk(sZ)c@sM|(~AfVntG86
zF~f)-lU=uPChqcYh*`Zs(Kb0CSc^CgXj67rTe0yQ%k~i^{ZyA-&72k96CZ}cZS+px
z%0DmusUx`8#+Jj+4r0Qp5#w|0<j#yJ9i5rgHBN7RbcM@%+Ve%fP9jp97FpSRqDz<^
zs4Z=v`y&c))!t)ivQLKGF|Gx0D4PP4Ut0gT!QEya0*(01BkZuu)#)5#W8Og&dVFbF
zuw#bY{9UVB;)$1nIAZXmJwp=lpOyv(tYiDxo!W&3!6HaJR>1w00~IaNu&k}zq#vcK
zfU4CLMHmy!c}-9r#Cfs)BN~|jH}pvx9__#CJ?$7Qw9~)PUfj4xpzyNd<eIfWn{b~m
zo`8`go-3{%hYlo{`b}_A40(&);tlZ>T*w3JX2X_K^su-2XUaR<RLwG5OrYy=7b4!!
zs8^Q=@lTx`o>T((X>EIQXj;Jxj(2939Wv;3rk}_O^GjBz%buQg=W^aflD^cF)O2PX
zysVol&<7=63K9V$o)yBYpGaGm=rh+Fg43P2#+%n$P^A|?;FqB01$E6#IN3Ve^p3-m
zz4uuW<>Vztw3TcaV^a<*&Uk3RgZZ`E#S6vbD;#59R*uGSh=~|;^Xvt3*Fy18FQC=)
zK4SfEgTPc>vDYS&?OFYqL04eywk1YX<6tSCf=Sl`fOd>LFoeU44=1MWBCS(B`DI0I
zt3t0EHN9<fRV~AA-UN?5Puyc^t0^FZ-{?P^*jUAcP+(L;*HgzBdq8ac<U@eI&Z(2C
zNwXt$H#*}MAk{18>((n(GI#$M8*WIW9$lhCNIN7Tt}B*R&qzmtMowRc*Leq-WEJn}
z6Y~2xQ`)4LRRf;x1;^fDO#=+P3TwAhzEiuH2rX_3skimRo1U+$FUfljsXhprI`K;(
zeR5#J$v3&P)I21+e>)s;G+d`@ful>~DiW7xW!#U*#ti-EPA%M@Zh>PbPniM$r3*|s
zk_l)Q{5HE=t(8gesi@fbMzVln$Dvo_^Mbu|lFH2+a0On7u_oWk(OkN|!#~;48P^q?
z=XiIVXNmbnq0I(CGaK0dk>jij>bE_#HF9o3;(1XPd=CM0VX%(<<y-rrZN<D_a8z=M
zC}<I!b^Oh!UhITcZ36IJi7tpvlj~U>>eZtrdkeEyCppQV{$4@N%AhgM==<I@q+3K5
z#-<5{k8hN+$L5}wiEL^JbXtcZh$)uSHFVwLD^ut}1xv1r7iy<N_Kw+oJTR*D$2d={
zLvwS-p+K9%+N}BMVRLiH21IXK$+j^|ibfAzbJ32$EXUoQD*KFRC0Woc8_v@3Q%Om&
zPP2yC<YSv-&#PMc98v<9&joAyOtVl3e?N0@w8+?8fnxlkp);|8-LW=6N=CX*1zhnx
z&u>yzVJx~Hofps8JmdMP<$<T;ngNouM5lyxuHFv=b+gtRv;u7O`CB!V=Q<NN0*s7y
zdgie!PPp)yjC&`ZC|1H&iw&sfr0?K&{UOK(T8KRTwqw$;&Wbv{SQBX}f5<=m^A2)e
z<hZl5*E_<4Sm|VildkKZzsA`lFjbiv^q<HaH>|CQu~P93F{r^m?W);d46xs0sNa~q
zI<u{_UC>zgw0?bk9(#hFSyW9p1<hkd=?KT`6~C9!gHr8&or*4UgX6A_u9^*TbSC#p
z-I2`#lZD8=<cD~Jj>F~_dPna%?>$eRkovqtnbutdi9LWJnW1?Gy)b$Dh4$JtLiryp
z-cxa@pycAQo4Yl{oePi+^y<IamG#PN%uqZ9TnL_;*hY~y`An8?P#hOB?(?^w4Q3u#
zyC!Q0K|ZW@*9o;glOdRM?hy<wsB3#F!7tYRw!6-UH4-Q5cf8%ZPP!2<txUE8d9oEB
z{Ba#96FKhK*O`%hxCmHRDi>f983N;V#P)M^jL#5E$T)Opy*hY+ysun!Z2Ia3-PCYn
z4?W)c8~FRwv()H9QKFB>K9PUwr}Z5W^U-eoDQHtCI)i!QJ})_%TRF(gAexUzu7O2=
zBLo=(X7a+?-!#?uI-Zz6ly*J!fwa0GK+}lFfl*?p&S_Jq=nUUg0EzIyG}Ub%;3blO
z?!gKUgGV^s#Vi!v?{8i|M-18XHr8nF!^&>q0u-7z@5OYqWfnJ_Cp;VP3)VRa8od2G
z1zgml3tTe^!)!Sg2n;^MGbSYJUj`pbjw?rqBUe~jYAFAE=sh&?)hr^X!jo4&K33D(
zRk<(UzAstRmz%DS>h%$j55?JNhMZg3qA7U}&6%qJF1?&dCxbwQ)5EhBtI`+#f7(f~
z)IY1=+tw>bKD~Lv*(-aL!Q*1tU0fNk*K|8PF@6`GY=^a3bsH$)eYZ4Thc+HquM({!
z=;=|am*{rUDU~melQrWN_4Kr+SDlN2g3rMQ`=|bcu}24gC1(L(a{fow{g?eNcL}7(
zA^$fJec5+1`dBDxTDMM9B5LfsSW}8zMHb?^Tt(;#^eJaoRkllK6>vW<>e=w8;wYKk
zicWxyqs$k?I}Xs<{jLBt(7@*EN&x&)*8QZF4ndNbK9_zy-#&th|C*nTDI)hIN1-Z6
z_~NKtxeDZ+;BPETpEjrQUIh*^wA<U&;*n_H2hW4cXeawt3cK0ik6%xs1)tW0@jV-U
zrp8ZK8YJg<_`jTNbD$ntnB3)W7-g5t!AC2+HDS=#S}PxcThL)_YS-ot$E-!WX7{iW
z*)Myk1$QWOlF^SB#sQ#`Fw4fo8ZyOd%hq!+PTP<3wrua(s;8`1Z)PWOk@bAi&EF+Q
zI_)W_H7S+u?3ZUfK?h43vgZqQb?4HQ7edYLxEV5j+ce%DO2P1>z#FWE`x=Db$#gM=
z02*~yvq@>w)q{9+MANk@4=Q_|@9yebEoeC%nc+(Jg9&J5cy(&0feZBUzIR?R@{_1r
z{oXgqwj@9sHztwL#ZktxL3}`!^e{OmPeXYntx7>wsKvYSNGt7&nh`qZ&k7h{=h8o9
zU=0?OZn$^e)$~J=UPl)lp-a$_=+a`sTAhJL-NOo=L>kRJlfL!=BvaR2i=$4w7nSNM
zjyHEm?;PO&>dnQPxuSBJiimm?KUTcP4(VzA{;o-=(Xxn~A#z<eE|10zumJ*-QxE4A
zgBqIf6`NY7!amn{xUbl53yoO${t_@F1k(KhWm-nhF5vwsYo)uzAIN<$GaT>B?%Zqc
zjx3_ofBn^-ljwc8_gCyvgGx?&^mJ0Pw@`OyWSmR?HWsP0tfU2q`&frcn^WZkp{j@t
z)ZNP#%V^kL4hBubPrU+3fC&sRxoF>hcYsin1w?bru<iY@x_m{QRL!RIyPt04yb|1#
zJ#us8>~5?L6EObvV4as4bdJ!16i+2KZ#e(#Z<yVUiylp>yy%cHy;7w>?VII!*bd;0
z1_9)|R=3P|S0IK7(d3QCYGYr13@}KeTy`8+p3At++UZ+BYvE!YuI}xk@{&1v>G9t+
zKhA4sd-L<K@{|vXT6P~aa#Ad-Md299pO3!);^g$7x5(d%?Hulp>Q^<P*H{HSeXh)R
zU4LF9*S2$X9%H=&KF8oHM9F`}kS2-jmHf<`Rss{<+uwlq0%r?HAw{E*7JyE)C<M;h
zXU9bP7s>HpEk^#N(X0fHn2bP7*I8q&kd-fQQJp+uGUtV%ji?E8ZFVTR9PiR<$cXo%
zaJ*Qdef?vrq?296;7jWe_E{zbKx_rb9;`i!qg4P5XXN@{Dr6MSl%@YFu{#Ujc2DFF
zk(O`e%C9w{)U`+lEcrV$9SYlh-F00rmOZNMi9ydf&MNQUA83>Kf@S_xOXE}nV#rS8
zrnH(zppPt|iWT8=GUWgfX+IyEuU{W&4Dvzq!8*0JXF5hzJM^zf#e=XcO|p1PYYYP4
zI`Y;t=3ex3EZm4ROEKf2$q>Gn)cdh9EFyE=5y@}nXSmgtUA{8(i(K2fuyPBq7C;pR
zZG=!d_CpnQDpg-t!8L-~e;``9N)ErcC0z{t!H|<Go6uE-7YMd3C(8pZx3R(Ro__MD
zL=;<7EK6@LT=hz`dHLtDo!kK}UFJek&&bUv-45TckVJbN{m2tqYgIiUj8l=@ZX?fw
zW5u_mQBjGvx&~7<p=#IU2jmXT5ZAY{#+h--EFplb)cM4xgHCsJ!u1nSrA3^aG?^K~
zEJ0}nG5cLud6^HGV2X&ltOcQKqUk@8-wUut=iONIuR3n+4MO76qvQ&9d;6`WU^YW;
z$7{mRvS?oy=;q5`WoQ`<qy1p39~7vzg!6Goci-B8Q`#n#pt*E}k}ybTWcJblc=Jiu
zK1zajdo$@EsRhy>8GK(5SI5*uv%0HAiAy@yMaGPSsJqZCRZ|MEeH|Z^UY>XoXfRKB
zTHDVXBi{luaKgu!r1UmHy3ZULGYl2e2wh2F%@BqzDhF3RiTFm<FCbNtSW>)#0wW47
zW&8`)tX>!OD58+#2@51SCjN0(OxM*pP20tD`z?p>66Vmv(6{;EoegkNFuy@!+=Br9
zLxhKc%te7%`-)LfsR4ABit#iY!o{`{hlFDbu{$+~+t`$Hu~rU)$d3&>D$|bI*zKEu
zEkLYOaxnkxE@J^x#oD+^?X+c9x_j@|40xQ~0Vh(K7<osUt{<e_EC9{=3>MXXj_{d%
zL+|nGCm+<yG-r<K(-SdaUvR{o3wu4KPaQpfd~L`MQ4F5=-xmp{wZGg-{1aGi$Sny*
zdi-h5g5m}6Bez-XEqhwWhoHBLE#jc#Z*gH_$y?WBdM*VPMwH&))D(^llF3q_8HD_n
zwC?zpg?n6knP%#GnZ{$Y+jrCfSXo%(m*d;qx@(-|1;!RLpZ2C1+`(sA<zQ*-aq?ut
zQneLgV$tq5uR_inKsiyNkKkM%`sC|F{C%x-^~DEOM4fNx`76!1r#@@aWAOB`fmxw7
z6+e(?4XasWnetRg68t5_aBOOfBo<oJWkUH$z`)24{4z;7C5iqdiQqEaR7%&#RI0Nl
zZw4Cv4gyzL1@yQW9?g2f_SqIQ*Wxvoh4>_cOCG}MqS4fX<!AD@S<m{L6`;A?_n+(U
z(^mFdnYoxt{}~(ksPOUR8^v$E6YaCW*Wi_n)y7Q!v>U$gQ`aSP)zcxUn6(yc``qEU
z+{Dgq`)As7AF&dl2L6FY)4!S(+HnxtgKC;0wx4_5-!1p_YtrsKZMoiaF71I;bX!}?
zUv|~`2N#;`7GD0DbIR;^>YKDR_jFM{>b2-7rZ0AUASFiLRUp;CRO%O<5g-la@gfV%
zwCKnk#1*o)97B@%ZrYBJMEw|xz?m?VwS=4(FwnfD6zdg2Ime6Y)%S2Qd(wOkpHN7o
z=#}GaT(Jo<S}XtMOagSFln*GwwE20AvhQB|{EdA6(O538nn=c4eP&TRBsajXn^cU0
zI(Ve9&)?m;!t;bYxL-Jv*W(gt#zaH-6P%A=059_JNDE~B_7;@{wld-54Ewh#z#YK*
zG1+Rc$}N!`wuMfES(<`pKh5D!7$X{e`*Ad3P1Tu{Z9o$a8u_ig@YzCk`6xQ4eU;~m
z5D+w7E4s9+g0r<(ppTv}YI+qsf?VXEc?EjVaO}qJ!&*ZhjodG#?3MUmg_!o``rcwO
z%ePZ({7VEFkBc89;<<k;OB*ZuU0hpuC71I3%zK{!i0shJ!7-L?^TO=*$n}9Qw|g|o
zmpo^k*S6rgdWmT)Ry>}wgws7uYQqD!$>F1d30xDD$446EB%Q|cI;~*Z<6@BNg4k>a
zNF0Y1(m9Q&1Tm-2<BYsG(+V)sG-1zt|JvVH5GC}-@TF+B8O`KO1Q|jn(Uri*Mr7Y}
zo{DLLEiYnXRsv@O8nB%H$K)Ty!`Q?p_BG|QN+XW<H^)tjzr=m*H!bi^GY<dY>J(|?
zv^ma-Fh|IU7q?Pbr6aa-jj<$~ha0&EYI4#-{Sue8Pceu&dpCeNln^u+8Sz{6!u-52
zTSv-<&aOS#SrX3UEw|)wZy&j&@Gdnsm9a_nM~ZUwrv$L)xs;bthHu#I{O&Fo%Kl>W
zScTmVRE?-e9a~rMA42ZMv!+bEDuG3uyM*`j-R$^bWF@N48oXEWAVXO8*FuNU%A@vT
z%<3hL;27f)U(83Gj}OusLLo>Mw*=e@ca}xH=!o}uFh_~bz=!l#OHrZ%TL3Eov{1%(
z#n<Vo(}-5sWCU`s1UBv2K1XN_*%ft3*-wVrH<F|uoI5yom1h6Q_4Q!T$aUZ%cgPLk
zb`K&V-{_G73}^jRHX(w)7B&I{8G_SQFAZFyy%LI&6H|Hy;#UE;O5h?(>4Cq!IOp@(
zuOx`V!O-Ja0^Vvbk7nR#z#g{@S6$}0mzpFjbjJk}b?r{r{tMCx2Tw2?G%KPp_4B~6
zC6NsdI-cDz9b5`vZK736wQuNyE$@eUwzyI*VmDa<UX~X0W$V7sL@FcyOt$H4T5ea0
z=&wyz4NgWW{;{QY{9=b%Yn!EMAM3SUPD|X*kLiBMkB54%?e0d@_}grS<7~woWo{vX
z#sIiPiIkyHjcjSOJTOp;I`#+ckVlM+RS_oBPP{xeDKyeF6E+#IJ0BXZgWetZcG%K!
z54TK~uCnaPP8o?z(&G&d))r^)StW1fzWc7L(Ec)@Y+vVu)j#bhf+yK2tkwO{$@tu@
z1y)X0mz2A2d8{l1;AI_Af=PX8_dwJWZ;sh}+D@cQf#=xN3QZgmXX^u+Z?Q&)2HavX
z?WfFHJV#fxz|2f|Y1Gw|6@LUOu0omkC!AinDl}6{Gc)8W{ZJLN;J>^hadUmk^tgw=
z=a#@pnM$T}mpTo<n^JDJy4$#9Ff7x5p_!+v?z#woZhphPtQ9V1F*VM^pl>H9bA9RZ
z|9br}LozhoVdi7CM+!{0$FfS<+HJ53Q3cKhHNY%NI7QMf|APTit)?DK3oNBIbo=8k
z_HiRnd}6dY%*chsI#}q}^$VPB{~%%8*lU*oHr9iRg-DMuI+LK7h^mA33`dNtu}VdP
z1w`rK`r(>Mc!%#5`?!!AAkdlLn5`h8t=f$9xrGAlw$Sf2pSy!;tE|3fUf-|~>5q?x
z{ca2}qiaDmlNhA9r`f%_?qHBxzpXdwHPoeAuo#?;d&d<JJ*xn?z_w;ToQsWAlYghz
zhaFC*=-z6}h_khneimfvw2@^xiOdWkG|29U(HSHT3v1KdA*#(5iYf3;_Y+aCXRn@3
z4GtJ8odW`2NxTYL3NA6ZGZARiut1O<%1N4+MGZ<nrL`}-WPj8~OQSEH%F;OZT-&>1
zMnQ#C4GD~hi1S$oAJM4KNJr%gu}U2X&(pGdF+>?7w{UWiI-6{OyTEyY1_T;U>l-wx
zX6Lj<eb{Y1!hDjyj=KC|X<o=NiAdP`xq&Ty<0UnMvw@1469bC(D{P_R&4gEcEQNS5
zwk>3@nN5~P!eJqcF}QD2Bst*VMF-nj4g(KUX#=vOmO?wM0)OSiv75T^{odFtjsC4e
zP1T6<q?@zAs{tURoJG|T?E-FB-I`EE<AzgPHqRCn#;VapE>~JQ15@r?!Jm|i6Z;rz
z<M|A_Bl;+e+&pvb!tAy6MfOZQ?n3ciXvhX}{3c6q9Ho6;wvE;Rd2()<L7xaj<0mIl
zgqbI6QPxP%>EwY-n_OvWhDZ)Kk7L+=R6PzADJe8K3m@ZXODnKxQ`^D~NDcnoSD^I!
z&$&spG$_Y%-y9%9A8cSQqvKNdU1{zI-ldraV~^;cFPK|^xSU2j^SVkBZ*yLuQJ-%s
zB%AZYEW;W*^q;~*2ogVMc~n6xg`rkkH^!2W6+4WUmF1Vu=$Zi4C`Fx1d{SFAS4iXl
z$c)xqOHL=ozH`4QQvO}(@ST8??K7OH_C})3h(OFbV*LGGCu!qz#J>orPsWFjera$c
z2Y!Wnahl}k?P+lR#KULY>=zwmR}Baa%gI+Pt9M$TKgV#e+h{HFxM4(`zY>ezC`;+d
zGOHM3Qm=?Cd{>;)m72$JYX(;tBxj&^eDgIwZxsS(6(uyaihU;QAg<0%(+&8eETKKv
z8}Mkl7VjRY;NiIjLTLnFcSs8tFsITA4jI1O6bCj<f4#)Vr4Mw++7=wvfYphz!R+wY
z!&o-*H96Q-`M-?=KsYK#_rK$BSy+h$#FF$nytscw;%pqali3<`eD!|2S{`*h^(;m0
zZ7^HxH4BW^6G}p)v0(yc3k-LbP5s-8YND^T&>S9cyRP~dpU^BPv!&DE<6eoa(+YVw
z`*)60*i=IjW)f)h*C3V={UeDAwoHkM_Gnx;qu=*pujCl=s^3EATkBsFfl!NH(7*|$
zzw~l4Mq2a$#L7<&;SO=9^e<${DiPXb!$hV}z#Rzj7v!T6Zpg#pUAiX|if%IkN|ZZ^
z;wKx-0v=kICY+)<+Q`x<eu&Tsk9bFmc%bbQL>fy`c@luEde%VcFT_&XX7_<khQUzH
z<gpap2`&kjxsiSjU>!%XF$lD-^SGWMy1|yyxuSazwoE$J8GRiJBd~HNnb*+AZ5-&T
za<WZN*m1)dg7+FcTvb?bR$k$}Lh`(=)5wFZ>G=or;3JQ)QPr;>(yH0K+WcqXih50V
z=a?bW9+1+uF5i)fhv`p@X+=c9$$x?tUdhrJ&3pE3Ie0J?6(59_p*MLzb-mCQxB~Z>
zey;oz4u!^y8lt%jXkfQAtpy|=GW)30{Hj^o8qH|%o5j1;HC{0p(qAFFR-Bx-r#Gb`
zQOq~M1&F_1P)FiSF$)jR+Yk03=-((Qa8~$kAVHknYkI-K9TF2<n!yLO0T<T=F}Ab=
z3vrJEnz_F;w`e97Y4%fXRgE@X5!!nxDv0hT5$Iz=Y0HpCto^1(uv5+t+z7AGUSv7n
zCi=)&$OC=UJ~t%2ALgY7EkyBnZCthOhmmR^QPC9om2SQceRR%&22xw8F>~Fd(s!zh
zAj4<y*Bk?$ik(G8YAZER{+`#P+(jW2B+6%oE%(2wg#2;esEq^lFx9{M9n?)z{q%bW
zh0Ux(K|XkI>k2)29Z0YQHn^J25j0Lq9TZ1w{7w{qI8G+`enbBThSLk+Z$^vBz0PK8
zatv(8`|g%JAj^89bk?0H^m5OE_XQA2oes0%pK}Y&r!gJ@OZH^{rCkkV8mAeXIdQTd
z1}-`Ue^ZGC)scKRLOKn5?l~Hb^;#dQUqOC3{s_PVSwV|Z`%$mO{(3y_V@lh2U{j*4
zSl|h@^F@zC>E3?i*t^df!~^Qt=Y6xcakY;%0|S77I?^#AZ1~W*`=w4C2s4fnaN}u>
z_FfCkuktMm3XG-kZ<w}XSxqW8kmc}(XrH61VZLDB<W<a)q<tA1@}O;wrn9|=Pk*At
zht*P@wJ~6MS?Gjs<qJsqBQHChnM9{=pNz_wCJRosyh3#D(OOP4A6(GAX8GyT*_s3Z
zlzu*utErQy?zfmkGO6kU!@M~k#S-APNJ%I3qXsNE+^zKw9aPP(-SHaqYN7u`u(UxT
zpQ9`Hwd=hcaA*eqf4I6qS^Z$hUPGkNPr_-5VFvogSGbSBlTs;#YR4DZ;cN~7rmA8R
z$qAWmyROL!%mzaioIDf2(##N%Pwv2|G>-AIW6)%FR`51*ar1gV@?U4`U`z%xX>Mt(
zfF=$FUgH$vH!@?yS$a#Z37E0*+oLpmKZ0Hfw|`dRH#o?c-T&afi)6Ema>V>NUtYU}
z<R8-z*q8k^?OBqWYPF^jT)JTr`zwjL|LpJsKq(D0-v6nEim#F>#7bBy=?l#~)#&Fv
zsgV|9gbK?f+a&eHyf@L>_?l|BfhF*_r9ZXPtT>o2cA9hazH=x$&e*v0+pY>gBKZ@9
zy63OAU6Y!qkxq4|7>7e5Q`mj>wK+S+xVs>`6D)Ah2%`n3CS#H`3LHE3S1sJjFEjSu
zkv~J0k?HRc@D*t^)x1m&03!V`ZEr6ebMJ!m>1-gB)JKt$%l&)xxPU*TrcsRSMok|~
zX_j~Ze4#0|_FwuX5eIto+MYe_s{X~Y4*mUK`)RN?NQXKwV!lRt{b9k8jNa>UXJAVE
zbSr9c;=mbEDdD$k>#j=+mIVhi00@+NdRPPeQ0WV0Q#|_(m>*O3*;fv#UY!1~f4R_4
zJQmXJ91~#vFSJ7S+T`q*c-pfk&Zy_lUoc+I%wYXkU}=qv-VKcm&jg-5hcM0h#;ZcK
zJf9ZPnO2g2L6A1U!orm`&95tDC1J3hBhJcAEmusWD6LeD4QZ3t#UbL`mh0wg{BilV
z?<=OW>S+*lkG_?Bcp<K)dF`OTdt2~-?eg+3tT!*LqFG;L_SuCw7pEQZD&NAyus#%$
zXcJW#zhI~nq{%4zzfFZT;CX<)#3V!;bjP@I_0o(f-%*z8fNYME^XHs0ZJX%7AO0FX
zQ2?Uiv)`sws6StNyw9D?x|YxUbEj)}Bp--i00q$Tw>q|G=F#}YBhZ2uG0sBgyA2+%
z3(9GVm65jMtd=-J_Nb`usHGPfOZUQ%e6_MUf-f1ObfdMuasGJA8!Yh5-%wlSo8o_I
zh4lQkimK)MfY`l@IBCP$D}t+hV4*Nha{8y%UqZYPkGAvfUG>q|Z;b8V#a}5kobVLa
z*NPS3TS)tH29kmxj1-GmDP5aQ{d#eo-P3-Bev&*Ebus#TRU4`5sg|yWpCdoXeTcm2
zOwX(cllA)zJj1~M)X<3J!uQYA#?9dVqqXL3xB~qzLb$0$!kFo5esKBI#fbK7B_pdB
zNo&+B(HGIn{tNcql$#<~Mf?_k=g%WL_R6!2UbYk7)S>!Ea?o*uHI7ZW7?2!jP2FUq
zwGX6BEU2A(jsh`HN3wpbN_o0%Oo*J!1$k;E(|47ze!aCOv?Paq64NQ)AtRuBSMPD%
zt7yt2R$k`kNlNeZff^Y3Eoz(>UJe$C9F88o5@OjIAwTe$jb9}}%)vER6zETV-CWD3
z1qkuqwT3FhC;GQT7O4{Z<w%zDidp;Fgo)d0Q}4ZQRFy7?_n&19G4a1~hV@*v-(gno
z5e>2JTOe|h-<9L_GDOx35Bn`!TP8vG|8xe=PJ<*g1<G#o%{0PgZlue>+fAYN)unca
z1~;>B*nWc}WZz!d{s^QAW+A#}fnqQ4dvig%x&sX2a{i9DvPW;Y@h9pll?7>{%doLq
zBV@cvkJ$gB8oY6J)DPf)(`%y9Vz0Ha9|NNzQ;2y*aWeDU`)*sGKK;A;`0~dVpgd;&
zH_PI!-kPOFZ|bP1pV5PTnm6Xs!m7td`nTScY9`$ui&20?^V;gntL^@}@7XwD^sZin
zbSOT?JDFGO_1-v)Zv!ZW1=04oKCdct_Va;*$z$sN1<*Oo<_6%rdREEv+^PK63(Y5r
zNdO%9k|Xvs@-OkSLJ0~GL38$4_V5M$Jl#9t)}+zGL!MgKPd&7Je<aLz3)26)!;$i^
z1)DJ7VEF@0Sc(kz%1+nm!Yz8z9-*%nLb;-J_yxx*HWj4p^QB&LQ><?pIrX^OdCYP?
z`H$wypGgsbRjmAK{1KBMmk4fy>D%LJhu6Cg?|pxFM8<;CSn%6&YefGe=aJdK1+F>%
z#W+L5G0h)kHe(IzmSdONOl~A@QAcJ#CWiX<D~&ApHj&%kHLTiX&xZd+fbOyjvF{6`
zyXhgH)6_}O>bf|~q6Ts%&T?0?Jr&7A8w(g7-P^Q%Qak?OIr`-AMxBj%@gbXLOZ^FM
z#I5%BD3z$!I@P7^kZXKpJgY;K|7?0g5rI)g18kWu9b|-vwKvKZMtbA0+gSAkQZBA+
z`e(yeDgAeMyD$p5uZA4HMO2le>;HW~Oh4A*ZT)Rr<mF}S9;V|lU|g-AC_R)T43u{X
z;g`Z>Z%bjyIK0P}rJLeA!TX+=e0$BiLExEbrjDJzGk0zJjyX!_hhOpzs&e3HhNVjV
zdGFX8QRKf^E{kSFUEZXB+Tnfu5O?SIXY+#%(e{9)#Bgihtd?9(wJocVd!#KBv&`St
z1R%I(7L_@rS&NBx_QRaM2Q#I2GuBQ8b^0=>)+)LVVA$OyV|N|0_lz2c&DL>p#g+N$
z4q+t9_lXIk;+|B~-v9jDWrSa<%#zys0#4G6#))~M%RE+$9@gG^12<w1el-rS(YyQ{
z&i~1EdT|*-uops%)s25>cvg7g6PprTuB6vN{~YZD{zjuF91bx&Sy`@kUfL=(imS*2
zAmhJGI|@@ZD$a6M+0R-<`>%sgs)|A7&XUec&%=Cv9XAtxQ*@zfoo2e;^v{uBnvZ>&
zNZXo~SPW@us4crTHCgjhb5?TYK^<{TXxz}-rXkk8C?@g4e`Hk-fUUHh)V>k&I$bMS
z^!8%?He~oZ(Fj9ao-iTV7p_kjVkx#wyX?h;H^i9x3KG@Y26DTcFTG}{G%`{#pS%p^
zRE<u@@qnLs1B^q!j{)DQh_=e1-Oo5H$f!t8xTxND8T@ebO2Lz0f<uqb=!JZ81~$<+
zhR}2<eV9Ec?TSs=!mqa2+UgX{yu}~8i8$4@x``=wdKWy(JL|VI_|pn!V09_mULWj9
zzx=Y+&NQTVXq~0%{+kGMfG;taU3<SNL!WdkvNW-5GUftKqPY!iDp)V=1wt_`titbW
z@ENy-aaN%2nFM3}=ly>%=0LFk4l4Pcf0O28_3Ryw#v9=~)V<1644I0^nlO;5%M`Vd
z<1-_d4L8QDkJ*J;Vv4tNR7Ycs$6b}0_1S?8kwN2}w1Q-7<dp5sr&QH5PXt4>Rn*fR
z6`!`-c{ik1PVso>|2YsO<(q9X)}s@5#PrJX_tOdn+-TJ6mJ?<)n)PP%S%b{huwi>2
zSj&&9ZHo=YDypo;jU-offzr76=SPX*+sdWCLNSC&(wFx2oc?=RY0f>z?^~>17}ia!
z(O1Pck1*uc5(z=^mRmm6{d(4QXmVlyuHKaQa<cpy5c7IpWgOiw(=&~8ckR%oQMXFa
z{SROYfZBXa9kQE@n3}#s<E!l-7_EP~>Y8dgNU}>|f14^`l+tg1@bkAQXw&;$L{;<l
z1kray^VAPN%!aR5gI*FaxOr&%q-dO-ZMI%gPr%4w2TX~xt5T_ZH1oIwFr5dWrjbp(
z2L|&Uxb}q03AdBJE3MjVp-9osncv+Xc!EJ4_c7mITiN~+$!9pRXQ)|e`m8`x$)I}N
z?1L<F%xSuS;}E;|BwG<@<wlgTJxR%){**kG#4Qb!%?sG>eQ2oTV6j)6AS3F~jY6OD
zr(GTM*%Sc6OQVn~`C-@OXHq=iE+LYfJ5_2gNh!#LsuOyu3jjNROcMEWXQ|lWY<)WQ
zCKCKA#N?QtA;&{0XN5k|iUDW&>^6UIPfHDoDSPr<hU`y1ph6H>@BcC&{KWn*0|N1P
z@Lgt8^f#r>OaK}c&(ycAwZIVi;EC4!O*zT!kIJw0GKU!|5Q0p?Re#aEH7`;SpOzvm
z`PD)n0D5gTL$xxNs-=Lywr*ae34la$()QbYmP34(?XlY?8T^ft^c<-59AZ%2{@cTY
zr5T;A{CKOx&U{Hg0FuoxuLxD(*qv>|+tr^5HOaQQ|5T`02bFL0U$%pPQL<Ll!!ut@
zgK$@Qp!4kY&_+m!M_9t@!(Y4!FMu2Q@iwk|@8q1)w}Ue;_Xj9nll`!AMM)!}K*`{#
zec_w@<M3u7TMHdtstPZn4I@5N$-mQ9<gHutGWnTRa-_TU4=5Y&zD?SH@*%VcIms-9
z;PbAX7tu&SW-V5uVBps^;VlE>&dAp)kqn^^58`$+M<@W?>GcGo3ZkN3rF4Y#S<!<R
zwb;>vsHbH&QGvGrJI?S>6QRXJe(X_SwCXJHZd=#M@ggb}fVZGSSm^J-HFE1!J6>?;
zK}2-&qulyTt_gctumMN(f{y@95^Bin7Uh4zCDrGO%JNgpcI)kbRSs~_+TKtQE7A_w
ztf4-81{|)33Pq}gJ|rK$>>SAAjppF|kV|#`!wej*Hu#^1tGC?={z|?3?UiW#OMU9y
zkBGBgr$@*|2fz^Fd90GkSN?lOL@4r&#g)*9KvTaQK(sxU(1?9ix~*C@g@vmx#r;}J
z?FD00<Ig8n<QFT*XRau_0?qs0UJsi~b<JW0L;+S&pKSmmG^-i5TSdAfvtTNSs1#2v
z$`Cb|s-1<n^-oYO7^oP6co*#P+Hbo%+Gx(@x{Khy&1THrQ_%@KWa_qK!A6L>7Q|IH
zDN-9N1PGl+H93eSbPj2|d#E7lwRQy6mO~Yf>WdGwwpY{|l&{@C7}k`5Yb1!!2j>7q
zGa%&fnooG3PuH-FFQVD=qnf-oRPQ|dpgPaSi4|INdB1o^+UID=(Am;I7gYZ87iP8|
zTyzjPX!9m<FQig+FzXsr%^SPJ<vmopRFq#Fl#h%`{3DQpJv1xQbQ{7xdGSA`vtB#T
zulr*=AWV4TpU%Bl59-Z<AVAaBcq9MICGR12o8U_eJ>MekgxQ}4teA7-+-_tyCtSbU
zLThXl5QXpoqqnx=Pw6910ah-}f~E}Hg2TIF6R9tctMB1hZT_j>kIWx>r!_BlzG16(
z&kUA#T&dHr%4Xsu>0cHJ*IRwZ6b8tD%)HL`8UhSqM4$q$-CqEXS>j*XPuwQyJ;B$J
z8S|D>e7Yw(ThF7olC*n^gr(}nPVH!3+;Xp9<OUCcuQ-B^`pD0+20RzNH?njizFi*(
zsUOyqpHdwOU3N7@gj<V78&EDgrw9OpfLtlR@M5335l*Z0g3S|y4StS>or!KSAy5(N
zB_EZqt-w`2qf!u`Yt(geZjb4JyFHhVwW<g3pXNp6m$6y-+{GF!2s+&bFP3_@gwdV3
zMgJ?H*3Oq@m)1~)$XL#4Ayo06(JC-@>b2(XMqdt?G1c84#;~s*<GoZBhfdM(S3s^)
zKrdr)rOE2qyuX0>{$d)KM^=g5*UQ}VQ#?;*;W#W-_s=DaM%|sc?N-X}SD}?%TNZ|k
z^>6W|5p9d|R{`0_sJdTVD(!g~{5ZRg>S+3+mUqC}eA&#8ENA$EXmf}y&No?#>l{Ub
zhrTIa&6q{ALoFoQ^3RqjW&|qcM-(85Y-c&1??L_W85s7MEjLAPPfpaI*rkCyr4-Mm
zW1V99q&Jqo%xQkrFQY)4UpzI3HBq}dbY`W5VecWVuWL9$_@)PL1fjKS0R!67=STKd
z=U9Nne}PdJ#Dq{(nfmqP^*WNBebFV5v%pLN;rE=yi&8n9GzsH&Z-*AVDKXQtBmhDS
z%C@<>gInkKT00>pZ`V=sYvBh$4CjP-FLl?W=RK%0iJdT&7A~cL<ft25P!MEmC)WY2
z3)=AaId3H4^g+HrJZSUgP}8K<58<trkHy|kXn<%L#d@~&bXGp}VfZ17Za2$iP3YXZ
z&(@j<4%K{a`N&cbXsr2-<zFBk)l<9a0Q<HK1p`!jD42cyc@mE;ynQh{f!}+F&P=EN
zpJp-IOkB23Pjr)5xQeedSvsFadS7iq$~%3B0$5g|513*9O(IqVDw&@lR2qxOReAwr
z*&P~hU=6K7o*4e0TihH<O-dW!wZL0%U*r1xABJ;zZcb`z)T=uYt1rTnLaZK30J6Js
zS(GEuN0bTxBPY6x-b|4EgVjEE#qQTP>J8iVA$hDn=9|bKN5FO0unHnMseftI#ywBi
z&2ZvpuHqsBmHD!DRQr`6)3=H3RnOC>jV;bJ0fsDaudg&;^;~p46GehYJzJzV?%|l>
z5r7E4nhEsv<4>v@gCCkTn_lt3ipQ>C9QO}Za+1W#<Zc~W6PK~V6Zayr^t`n*)$eyF
z9OX5P_@D|#Ep^UTbtnRr_7yJmK}p}l+E;Y|D9-{bnxeOrH8DGAroKH>%q_Y*d^`1t
zB=zp%pM>c?&ZnH*AgRXIK386F<)-$zZUfPmd?zM9%ovo?sQTkK^=$ee?vFZ#m!6}`
z6_&$n!sW&b-ehMb_zc`A+Ey*_1`Pmd`FbP}Q1vB5V?l^@xSD~$SXEQLPaT>5e=m2+
z<TA~j=x1Ux)aEFJ!54aOI2R}z;r}`5kjTz~&%xOk?mF;s%!P@0`vb2^+{jV!XKPsf
za=p<l-)G)zq?mWu1lmV7WN8e78eq6OLJrMtb_FV9L!b)FU%BQe=^Np=$3=C?>D$?6
zg8Lt~0YdDRu^7$fM~z!xJ85(?2cZ;*wYKo;G_Hv$J(M$>)V}mJnYD5m-2`$gg0bp`
zyBKZI)b}u<#0OOyD?cOh%$8S;1mh022|Yn38>0OznIh0RowJ?9Wdy2tsRj87SVHaN
zgmiLd6z*02UahiLAsKf+GO`;LsB*r`YuaRonP<0;Uv$qLa<8WJF<Z1tJ03*XA|LbV
z`^^1u2r|6yzidD+jVc<5T$*^$sdSj7boewMipl-8jXHQJL`svW<At-DY(n*HAj5+U
z)wT$uO1aznI#|7bn!vi{xf$>%7CRDNS*G^!9JSdRu!|jm%9i4~wH%WNwRlf>##HeR
zswqa&8K5-n(VjTu=aA4M{b@G7Xsi-(H|H21u6?StH>J6cUP|VsFWyD$2c!6n_(7J>
zne7wL;e9Wn%@{xq+W5uX5U<tXimkN~RW{WbS@bP9bG#M@8!x+wMr6RiN1$E~1S)-7
z;AI;ks_Nym!o8F@v+h{?S`%@ts$P|sk2MB^Db&;|(7*vxpcxL}Vh>~gcq<Z;Fe>$Z
zW=$b;d;h$DHTmKF7929LdoQMH*ll7V<CZ!b+`05|!|xA4O)KGUsDj-l^w~<ti9jXh
z3xsBS9PvQaj06)g@0txK_;Z?tJWqmV-capDw({`7kV=e>UX6)@MDy)U79eoG4c@lT
zp(#p*ywvE+gdHNO?|fSIMp^OQU+mdv%{sIya*<Sj|J=jv)@_Ts(}=d$_D|eMZUO9P
zeSHOi$_V-{=&_&RsvKBt_&$re<64dh&p=n<e6U}!<866L{UxdIKMR=TvH<a25x0VI
zg*-Qs0xJ7cxbRHu;In%3uu+u+aPmGUW;KUu`?lmzsf8u)ZU5ciJ(68#w58z<#%edM
zSj>&U;awW!3!uuY2vjvxxq)X<E)Ht(wmZSCl_SJr@3&Ci+oK{8sf4_@69MnEZVn#n
z4lWZ_+R$YdyB~MKN1A@5Pc2yQASfQl)X7wykP6N@6#s0qM18Kaq+{2U3mM8c%72K&
z%c2ZM{-DdX+sGImZO!Ik)m8Cfp{%b!y)Xm{uj}l3@K#b2X#!O<khJk-Y?!-4Tu~yv
z4dKAq*hTUyI$a`HQu6zyvZute0Sn@uLn<uG^|_nR@6Fb~jn(_Xn)V6=)4I`E7~-vc
z+A*Y*?=yZ_Ot{ydj@FwsDL2^t{g<v4t-1NJz*s1&&h2b{<wBrZyUp`O(hsc{fqd27
zG0AYd5!K2kMH80`Oo~ajgxKxk?@b6{OEToLJ7ywn^7p6n+^8m_n`kq%<Z<!uJSPGm
zDe<oQpI3JJJ<KiQf=;<Pvpo`dFl-&9V>hCdRVPL0DVR_h-poHr1M1^OpxVD{i$ee{
z@E}Uwp+4ku{gdp$@Q+QaT1{xE;OXr-E&AiU_wmnJSF9$kL_Q>4(&n@uT<_GuM<erc
z?DI}-fr(|$Kd>^@FVnG{>{=rP=-3r#w_(R)UFBXBcj{mbkMg|h&#K}<pvLm&2HaMW
z?|>Kx%dooZKf4{XSQHgpR7|@Hc*a;Zd_o4@X2rFljr@^?S28;FJ^5OwpL?^c<chZh
z>lb+rqhYJfw--H2Vf|%UjW>kRCN=3B7#g8^+3~bh?4`(&Kb7nGcvQZT;O>8(i5Gz)
z+*>#q(p&6L4G#V$Pfd5X9(Jpocn`O+XGz$F=Ht7M^G?j=1I^}d0Jo2>FS03)>?t~u
zG@n$B>Uim0)f*)~3#+oj_j8Og7W`9rd4#|k-qZcr{%_bq@Ac1N@;HeRZx2^=e?06R
zEjqpj97?a|`*iQJW?)Uq&N>qW{{L>e3q242-?~v!T{o4S?|QRpJB8IP?)_lKop4*t
z^c1a^-AqH@uIxgR!Fzr-FFd#tvRi;+&ItuZvptlneyk=;jQQvO$cAsg%G7lwKZOzb
zr2oo2ucTtdeRZWyV?R%kv`@hQ(+JhoF?hsJ4eOpCVKHUgpI`Af`roomn$B!j__y65
z{By+0W)T*4T2Mtog;<^+v*GPm<I}#h!OyIHXBK##R;VsN8IgYfiuRPuc$ZA}|0C<H
zqoVwxem{UPgv5x1APf#lmr6MfLr5vzT}p~HLk}P!gNTTf(kUe&4a3k%OLv!aci)HK
zz4!g+b-9+VHM7ro&UsGF+57X|#a}h2$r$vFI~A2#Um5?~*nDh9{-ZQItlio^EAY<N
zj>=@N7`+EzNXY%dL)3Y0_=7I(12N~+?7;6)sz4;~y{fMZCs>8b0iH-JzWE<V4>zEd
zV~##a?U{6sinx>;Z|WrC_BJMy{)Ohtmz6EpS#mizH<BvzihYso;%4+<70!1lZY${)
zmg-O>(UA}K2Moa6Xgi{g-Lsu$Ui`xMuLm6TT=MxH_+pJU`e<#0+~&Ph<TRF@1~r+1
z?-FyPUCT;pcKE(F#Y`m)d%I!tDql2f!ZDmld?P6CLHkHizSs{3;=dM?j2Wu&Z!Y6W
zxX~VLDi)(<)38^cgsqs6sPz^fHort9C3b&y9Thso6~X(%1E&$eNp2>LVrJr@7m1**
z-Z;4m2{SVX>`A!-MER0u)Q)NlvTNQY#wCfL*j-_-zyyw<cAjL7b{Q>fl%9_ZGe;hq
zP~c_gmM#YFYT;%8X8zBULdF${FdxV+A)C#c8&-&!M4_;`CMOiv*Xrfu$s+chV>FL9
zjo_o_o*#zHnqU3bfw#GRDRH4T?AcY@(P7T+j738+sH_dcu1?4ExJ%6q{%CBnHI}Q$
zo&C-+Ip<9Wl5^FN&X&Jj%06|Z6CBW89q@=>=l+$48%AlzZo}t?yEn>2GNYrqi8g#p
zRQitqxvSnlRer#bf_txoT#A`uDn^Y*Y(6VxeGYkzw7qC;aJ&B9ly+r%O-%u(<rDja
z8=;x4qy|t1BA1u5CAPs(>h8epGg<7(QNO#`K+13QGaEYPgCD>p8fGc0EHMEnnv$zR
z^2Cxcvr79ra^Tuj%CGnPBlEjlJMwN7)pE|a4eyHw?_L=F_CdLu>>$V7)$J2HqSygD
zDsHoKgqXdS$701bwsmHQLbHt8>9_Mq)}Q`~r6YIezig{s;u>DQaha7mdf)<sQf%_f
z(s<NOH$b?;WYTA=k4{7yuR4Avk2|LXGwA2vD!M%8T-kXb|29gqO<!YV{m`di1(h;o
zGYn)@w_kU!w)ZA81+4FI1;nt+b;W_97~HVHD@qmB@LQJ_?q2;__o>V}28Ko-mK(jR
zG5&>%d?QXbXjN7*y;L+>a&tPN=6<b<z`7POIRtAxi=-Wnm1w-8NqAiBG}7~v;5=j>
z_KNh$spU?>+}lAuM{m8&cCkB~Ly%=-?c@>rwIhlKpoqI%0eqC`;pJpKpQ+guk-O;p
zYvPKj&c$xg^)UPKF}HKvF#p6)ieK%vK7QQxy!LOGu>S=h(r^V-J%3xo@G~A;+mAI$
zF)7nO7Ka%)*ew4vvGOc$I7h`@OS-1m*twls{#y#$vR_I`vI7AX(sBjDf6}gMmW{`u
z%1f3fb;cLYlb4F7p5q3}^e<ml%~Y!Stfx%Pm$ThG9v%1V{@IJz>?zkxE#KJnqw51A
zw-KcRZr47)EZyU<g_D@|ujNBqi>bhO>A8ZlzW81aV4tDup3!2*H`WHXD$q|BPJaCA
z*xKcXP9E#lEhScExAOc1zI~4?(2#k0iQgv4b!d6lHf1EnJ0ErSHS6zmVgZh#oNfJ>
zw{UZ?TDjoALB+srkv@y{w9#|dE7#tdn0n@J^rle3-JvddM0s^ctgft_vAfXZHE#;M
z<mQOO$Q9@~j5@s>u6HQeJUqR4S?4@Avh-ftq0>9oS?s%=^)#=q2c3}Kz(8!wzY*T&
zK03=g=yLN>!1O*>aCx31ddmPEHL-z(K66gFqOw$4f_2Tjbn@|Yk1Eh!5J#0ynVAS}
zRx;k{Kv|6;mcIG}hD=;RJDbc)8N5&RrMA$eJjmaZC^sy+aCJh&y8OI+viRI>d2e`|
zTW<t~bvri-zB!*Tb1Rk^G9f$T_v)s`oa<(gKe1?se62$Cc;2zqdau?@FP1+=e1%Bk
zDs=GsO(h__|4&-|&pjhUa<1!#t#X&2YXyi9G-obE#HLcry$}!qV&c<cj(;oonxn;Z
z7gN|eEF52T_+<r!Lj6QBcc|mPW)q7K`4a&#SVtLY=B=#_b;K#~cvYmQuZ6W}7q9gv
zH~J3N`1p=&<p34qGt8bA=ec#{B`Ihrdl#qJE@)W{1sxihX`M)xmpdJzHNA59;v??{
z#?BaR-IE<|Du|*p%&$I14xyN|f_2_%8FYRbFjB~`&<H+%8LSz=oLu9zE&&uwz~K94
zjz-C{($2x@>k51(q@QlB)-{c4?WgW)-u?qxv_s)Aoz*?cfZQ_g2l9NdUrxKRP3rlE
zDcyn=!8LgX$0_dRCbDYV%YCkyGQrbUis;R7Obp<Q5gSQ_6(upr)kHpl(6nkLxD7K+
zN1))jid7$<{QE<iKF<Qwev4r~&qd31LK@Ael_bPm#iYy^0VLJy_?I`L#oUH_kj{k?
zVjh)^yc=*HbT;B8yuUJ}G3qW?!yF0Rv(8?~)wPus)dm2ke63Qcv>^-1e8Op;7HhQ5
z+azKv;kehf9$2=!{BxmxL|W?EV@!q#lcXS~%-VN7<fiF_3{~gY$Hfy5EVNGFO05>r
zJfXD_h#fCw0{4@Bm7jTXE8kfALTl$Awa*%I+9#Jpr?T_YQzvb%XW2-cenL1rdoR2q
zMM=Lo|LZDA*~C_X+ntw8D6C>ooCtn4;aNTaf)3L(0QC?tc;g&0AI7E$Lk9{*2)4%W
zBU`L0>!r_a=FUW&n>VuwfcqrvX$Q<<HvEc?x@nmvO{W7c3LY6!xD1i@Kp()**au7;
zFW_D<6I@DCPhhTbMZp|Zyvg(68Rm%0K_sB%)#TtawMy6xl@&eH$W7;AL+6g&R1Icm
zXCO<6dB7I?@cOaF_^|+T8+CNt^ci<R$N7E*<lxKp+<M?HjSum$cNM|di)}!JN{PBC
zp|~m>Mt3gb4R0%d{VzrLW$MnE-Xk}|Ql9%?7o^n=@4p9soAZLubn42F%9h!^Ey>`U
z8%4dFAW6<I&_u&kujNA{GUtE5$!Ree^hONPnl}<3#EiIdH&#6%?V9;qva>%KMVQ%h
z=7*tAXg4uyb#kNGcxkhYxC<`UrdW_TsqPBYA8cX|KN8T)fp3~ip)Qo&D^hZF=LKIj
z*@tHYuArVj@N1A6@I(!*63mzc*yfcmC@~`=^71qUMFDX!M+}jAe6||HTx+rquNyV>
z+rNdJ+7v?C;ps)l812a1Wq>A=a}SbfTo$_-2_y{3a4l<@;DOs%@tjWMk-nqT1fi*g
z^oOE|P$l2#{T6B4c^03C#52Q^Fc77cq2=7AKR9z`&hi_7WRK`jCAw%o!kFE^xS67i
z^nBizAn2IUKg!?(=s1KULNDf6egyIQo3ZaA?eV3Rh<G9CcX8j<6+j_J4E8Ot=(E-*
zWyC|>$Nm&gHXCe-S(Uf)8)T2~FPx@2&(X<q7H-3MFGiBh-Sn>F&xy-POAprODk$t&
zBR3g7|CI2_(+ci3_s)=cRfxQxksA_@Oncx&=LU|<d#bB6KZvR+9(_+zJ^^)i{GMeJ
zQ`c0Kr8DqK*sK?5GbzIsTPZb3aShX}N?UKEktAt-KL-lD`w4q>Y#mUQvYi#=K!Y9y
zf%>d?(T;2MU54^-)f@@%S0t~P%qM|GXHlY&WA6BUatYFJvv~f$B!>dVw<ZrbzkxHF
z+fP)(C_;F>1R^JW1x1P8KF>S3?^^ph80A>#NL6l$a3QPzTshWwaINC3Mvd2j{C<|q
zOZ-vla&l*7LT~=H(0<;uC%h;L(mptImiD-RJLi1i#r75o!fs^Jlwp~84(~nW+9r4~
zZ1k%3tSC?k1hfW#zak!MTK)h?jID9j!J~2^r<}8(GY!df9{$K7lnq=3uEH{KSu}Nk
z+Jd#vgGYYjrsDB7M8R{~Q1sCVSRu${&}P!}mJUJj%i#R?2$}ml_>cFxK2<nm-O4i9
zj7g487a*6ImG~Df%0Us&;o)9Bi$WBk9OPVd!+BlN!s@kVgD%$JA!hD2zjosc%BLmx
zlaGRxbn0PJKS=TEQj9jf5k>ABRIi1Y5X!l17h@M>wUZkS6x-m~$O4A9ai$Bs5w4ik
zS)eHZ3uY<Tc~7q2ON{c9Oo-qE$Z%VSu4jxw5&Co8L-|mfk5tyA>kMq>&-o@;i2+uD
z1S`+tO#r^`f~_3zc(|G!K&>am+V&YdH0QeM-@Y84R4?q$C^)j7-MROf?rpSh*Megy
zNSIPf(6MeZ+=t8k&(w@&6YqhIzhHTta6%^$2oE>VdqPy%CewEWLMsmHo)paU+<$ZG
z_G#~yY=Hmf2F!DIfxk(#2HBRUk+X)73GVq=uZ^AMgGUsf&dH^I3nRfc7`e=d@}&aJ
zA!k_e&3qWoM!jits8F-YJhjnjAk`wdTd{t3Pxh;2#%>RAx2;;yUD5txaog6<iDB$V
z)y|_$#uPqP(D<10nKX}G9Gx2iHDhVq`dEb$_9C3d?>?NpdDs=Z=*SfEx%N0qzXzsJ
z+118%U4;!D@=ZM2@{pD&DfAzXD9tSc%fgzLd(Xzo&`I*&SNiS-^&q}PZ)Sb;2Of=r
z0htJ-gAxUn&z0HyfUW+#5gG}o2}`x>`IIuj%DSRz055DJBjOIh^LJf>0j9pJj@!3l
zz6Kcldh>ZwzkR*4XVV~wgg{lkuc;x3(ce)wq+-v%gGmL*&GmHg{Zs={pO0Yt=xu6}
zT0(h*Bm?M6rLOht<y7}wF(7VpC`lSfeSYtk?)St@*ZnC=|92S=1xWASI_<!xr!bjG
z^lYxDX<t+u6bd<hCihWvhn05q#8OJj|Ev5)gUhk7e3N9e#6OmtP`?1Dhd*0E$|?^b
z&Es}|lK;9>ih!4?U{1LPtUSB*d(Om_J)I}d23bUj+_Cp|3vDY}%qYN*n0Y7@Z>JIz
zNd2%0o_-)ktWFdR1R9LBmQT!a2re;B<8R?hTswSL@KKIci)hgPBp^yYg?u_IlF=&v
zn-y<^SuVz{m4X77k&ZAMojBdm^emf?@mvci5|swxS2LzXiQKx!fr!n3L#TNNeV(Kt
z5pcnWkS}(t`SV>CY&3~?frU*wU4-K0OaCZ+3Iu2BIax>een;z1&oW5%=I^WkuZNPM
zE~wiKHGrEu+eWM}6xazM)0&FD<OxrhGEJW|`O-V0CzjJ-AOtmSP!_SQ96jW-TI^{U
zp3b)oR!G5D4!OUH29+K3A(I-<{@xlC*=}N<p(wLoAz4)?de0h^18!}X6Q_Kk-T<gK
zl?Y6w(3=OSwr-EHxdix&KhEgZMQ6y@B@MSZZP*a%avOYR=W6bc=F}bob>P_{_UFPM
zO=Sqq_5G9L{VMGwvdKX87<3!8>)}R<t=e7GRdP|ORD3Nowt)G?d|$HmbcIMK(Hc}I
zIcsa|Mk8$xKZkv+yW3#D=ES_|LsZi0NWt<3bg!zIf`9i{NYpID2<}f<K!#TrcFG{y
z48O4%@N`LE-b^NdTT7cy?UwQ}n&)UNLl}urWJv3p(DSi#^*zA~B&k)zNxd;$w~wH4
z^{dJ2Vse|kLyKQz$wH`K|Dsa9>#xoH1jtX9J;-(MgT?N`uT<oE{{x;1-}CaKyBy&@
zT~Lp8-h;b%le8+szL5^|W<Q_{{(jVxN(X^J7(%N_!;+*L!&RDUjwlzaai1!9m*FU+
z;fep!m7#=iDxkqJ+8Yk)IBN0-w1(b;YL2w1`1Zxp#;+ReS(rG+DR8Ndu5b;)DdW5S
zfh+6S)CZ8{`!cv46lfUgV4j17`g{sDI=BIa0B)_2DK)2z)(=x$VtsCD#tdiG&u!ue
zbw?PYmcgy+m-qZ-=gCWS6!rv{KC^e?C1p6C5dK=o2(OeQjbZY8)>gsk)F5kF{}cA`
zJ&Ea4m|SwpJb8BTD*{Jd6mfk>b58_IM|0cpepxL@_|s>tQUOIdFUl<I;ETaIcdHj^
zR;2z2+^ic5q4c@=_w3W73d@$)K45k#W{Zo^`+Y(566?~Yd3cwQ&3lW^2=iI{>0ukG
ztm$3`DUzN187MuQSi!r11v%O26;U{V(De;a7tN`Hd;4Y?Z`c&nRgf$R=4Sr|5Vju^
z#d+Lk^k{)NOmV5aBJ^D>Y}n&O>q7B(9<_molH&hzJImJmn~Q{7wK}m6?bB{!mPR!|
zDR54Dli?xZm(Wf9SMz`aBBNkj+U9jpBtx!l>%!_QX?04Uf>Dsg67``&$ZYjyu_}ZA
zv+^<e@OMdO2c9MIq}Z}u$>ruCifFz*o+V})OFQ8{4x-r5wID?-7BkRP<N={zqKqbZ
zK2Pw>-xoPX??Mq&OQ2x636bAPM@Zm~2-NOS+cxuU(jw_uxNb%zHDi5{Cm9sp(xp;7
zuLhsmY2GRnN=NGpzL;CjzQSMqjA8G7*ZR4ea{JX|c%C?ud_SytMyX!MAu*NN-<_H3
zG?4DP<Ai+rg3Dz2%WIZ(KO!nTf3Ymn1q_v+W4=MZ8B5As(==vQ5I(az?6E6>^pAxC
zk&muV@P9ksa->QiBZ!P`pPi#6IJJ^0T5e!!U~bI`vrg(_Z#jV@$Hr~0Sfv$ywX7Wj
z$srrum_^asEQ1YF`_ZOnOrD4LLZ;iK@mJ8x5&rP9w`4{oFXu$gK8Mo)XY%QN3cyj3
z1?6}ycMk+K^DZOIomGK}B2(7@^qd|MYCrV@dLPbeuy8-eV5W@<EI>I+S-?-H3f8eF
zkk>@4?2gn@G*^dv{sE7wea@Q@C5-&$@X-6+U+eoIB0xP%N2o0l(gT}b5=7W+xG=CW
z{#|)@>#)8lVI}1goVt1YeZF6S49JN?58vb;Nx;xqH?D&gO%}3#86w~+nNY~=f-6A;
zQm4C22od9pbScV#uKIqkbFogaBSDOPA(HN^w8!8<<|e*<>TK5OUJ90bk}c<x)=c3P
zU(mY&vu{9*C!gq^s;5cZpPrM-AZ%gu=5Yi~i>_#GlVW!A$4z}Cg2zwsDL-kVN;OO#
z?`Rc$u>xdgCRn3k>~a(%RkQb0z>MyuYD3VQt^v@s{GVgKmq40|^u%k3*;wt&7aRK%
z{~A^k$>H!Pj+$8M4cX+hmi6)+QJL~mGI=9G*}6{+jN|%rBxK*zGPXvs=1%w!iVDjx
z?cgtuzFWsiRyaU7czpH(iX7Fua=#J9;gVfu8OU(|UgUsV$j&90Tg=n~&u13?u?`X#
zOw&=qH89OZPRPJ{Ux>RkQyy~lu~N{`MH}xjJ}+2bA2mmHK6-nW;7LZq)CSpSJfEMa
zQiLdiTnV7_LS#drI-U3eDBP?dhOO2A?3e?|O7X@Lbl-S(Rs`g&Oy|Dn#Fd)nM5`Jm
z?Lyk<hyfpA29|{JG98UJESh3KCrR$!68F2Zm~MK4mhrZ7tEB4vG}nL)taSvtoV0;u
zKViXsp*7z`7=^ckwGRO|WjPKNBq4~~S$P4*Q9=v1*cI-wVPe|=_sN+cCG|aTshG!b
zysQd;D;wtsBFbw_svsTIn>Zlr<P+8p(JMkyHRtwo*-+)^nfA)w!{hdm+6HI?GW57w
zDs&T^M8$7TAg_1FcFb2fa2Ss4OZ0B+YmRe3{K30m>-#1_iRrDtWh}G+y>-ut2<nG-
zNoo^AHd5=j@}9|a0TUUARV7Pnl94mO#t}*tXus)+s8jUHn36LdT_7%2qY8b7JRTxs
z@&<BoI-UUS1!%YU=sp*QFblOepE1QpX1x`Ol5z6j1}1~Q-?%{kMi}tUjeX346O`6m
ztF5AZG3Dm>PoBklLWJWYm|wpbU=x>k9oBvBi-q|MfRe?&gdv!h!EvQi+LS7=WoTQR
z>P^Vg5IG)@=eu5NLVb2-=Nt|Vxt@1_@uKlIXg1@)JI|<-`#6kB1PIzvz%wJwWh#bq
zQskk3fFlM3eoad>cM{?H1+2dP!%+wg@^mwO>`xB)Ezx~_Tuh<-I;ZbAk&9&pR2e+;
zH?(oL;R%5&V!|?^47KHw)m)TdO%z)dH48P+qYRJm&eUc@Zd0w?IEVq_EvLRIYldaI
zx>q^%&^nCb*j<xAl%lhujqly`QKF-!;|lW1)w?-eY%KE{5T|SOUxXi#hW3J{HyeTg
z-zK~94kgQJ;?l(F9TxS!sq4~?CgE8h5uLI=w>Yi%nEZg;Fn48>PrsNg8h8S-aRS2E
zm)q8&?M=!p3RmW0rp~a>hS0ZL1f@}_rXa>q+RD(KwCO2b=3fH&xaKTni!D4?AG?cB
zFgO)W2H!S>*?hhmH^|}YR)@;fIh6#wJ)(|bKqvu)iK*-rOS@$Y^(<6uJ18oR>h|{T
zohsGPAhnUI_k<Dz3ez$rKGq5KNY+q-NMw;CSnW>r2a~3>KaGy_E)csrY70R_r4qe(
zhyRWIdyJ5is7KB`rp#JdN@h<~SdB^%?T+i?OrU-|)F#0%KzezsEX+EJEOe0(%Mp<w
zwV5rslOT<Fe;;-n8lA&67C}lHVxW)Wv+cn<XpkBnPSgZutREuqKGE{ShMw!A<1Y`E
zo7!l@p9m7Hn{V0N(P$74_$=o3sUHCaM-|Oyz3*TRi?~bY{c<NG9`7<k0NkrhhqtX#
zAJzKjv$f%IF#xZsb^0&u=#`0fPUbWSfzW<Wyh2R6F{OfX^|`81rqBkcN!L@vI|6-t
zkrZM>udQwIr>!8$H?0C;MS{Ou<^0JrwwD$9@af#5i-BLq%=ew(V?XGK>$}0!OTy_0
zU}ON89PsmA%o|Gg^yuR>tU3PgyV<uhj8YBZC8G4=SBUo{i|Z=v2uH?m3-R#2aviJB
z(EEJl>4IZY$xv^CANB7hHDR!><C9S?(l5~MS@A)+crsk7^PRb!gi*G1v5odC7yQ(H
zyYGqMm%aDPlpXGx%LK#_PCR`v=R#fZea_3wREo4rE<{2+{0;wH6KCpa!S|1Mpp?Z>
zlamNR=`#6mO+RXPssjq{Evuy>-zS3XE`Uw}Z8-{Z6}`!O_6oo<m(;`x62f-Aweh^S
zPK==Z%)~5HW<Q_BNP@JrJP!N|Ywqf=#<dC!1+Dli2OCYpKNI|#=Y?!C!wVuerM(<Q
zM_htl6d@tR_FPve)o;l+fmVzR$eMb$j<EMd((Hcc8W%#fG9gbj9{>S&!o!f+ds2Mg
zP*Yv35>JAS^xySno!7IHhOVcs^eC`>I`TIXWyEa)11M`hAj82Hk61YZSf!r`Yi$5W
zgb<K}c9)|M)U#tJU)q%NcKB!7<`ColTj@S5TBQI3BG<$V>Gke4M2;o%QB!X+u#+%x
z`i{{<GfXM@ZO!`PpNCagQnE;zTQ6DQHVKN!ty^u+AJ0iJHvGQc4QX-5HIJo@Ievin
zmKKxC7$p_wJUd`pZTZZ^MD_$hp5#ZG6|!<w$0ZnGH-kw;K51(?KP{#*+lwZUkJyHr
zNjPIFcea^{7L<E$7uLcPHMwY!eLo~4gva9FWx&LCEkc7OfUW@$yXM^0iN3d!eS>zf
zHhr{AjvH03$`x-0&5Q3DRrz$$f&Sv5F8FEzdC@w-r81bI47LWQp~i4T{5?p?6(P-n
zoOp0oj>+wtk#Vo-^@%2dfx=`HqCq^Ev|{WiPQc?EoX+olfADu^>5y_<fC?1hd{~gF
zL>7Pi9@0k?;f~#JPUpx`yO&C5z}ljGi`C&>#t(lR>n;Ilf)zP-gK23RV(W%y*5Oas
z1?8|WUuSIo(wmQeI^Aj=F7<Mx<`0RmB-IJ>N;;9lE$6*=Tco(Ofr;P(%d=;+f<{12
z8&%Hh1LZpRWeRrHg#3nQ-{37q<2m3y<PnC{AC3`8VVr9<>5hS^k`*D|<Fx_Z!Nho%
z^Xl0@s`(Yaz;I-vqsc9L<uWU915#KhpvZ~V;u>sZNk>t8X0~kbG^07K58n43G@R2Z
z?QwgE!UI(*nCQ9)2o4^<NZsA9*(@+~>11cJK@n?BJno3G{!Fp_YCd2D!u!4VM+88l
z^|9Q|Kkf?T_?(Yz+aZ5VzD?=BE@#~4pBs9>Lt*f*N<)8!dQJEW`~WgbFdF73EUGCf
zOo~f?R0K^uKdEFQ95!g$+`zkJ)V0_}Y83Xx=l;O+Et4aG^4F$m&*)Sc7`!%18*;N*
zmTP!g_aZfo&a$yJp|EYf=yj_m&qwq|$Vw95i3C%lb~o3}j~;-;Yx^_ir1k--?6i4*
zf}vbm*RK|1h#tpJg&NiFl(K3u)1X8hedy2;V{%-_#O%F!pslfaAhL*MAuFN|&r$0H
zf8ElC$T<H*n;^0`hwJJ-6fFI+eDk#+!AU>pTzW5>i@huZvvc?je)`eh_jp%MdKcX3
z8IC<^5+sl(a>~Pfqzv7A{{>|CWx;;GRW`xxdpDDvf5tpvhK1+$;}CszyTp~b2LoOe
z)(I3a<F<%<%q6JuaOz^rc_|5=BiM0WdQR0*6G~eDzN2?nwq?mcB!U9-xM@XH0^rLd
znVI25i}D|l@t_OhnGpi<>jt;vYb^;WfJ)Y5(zx}-;aLU?&<!BG|IOoFp_nr<u<b^q
zk<ygBxDPHVb|VoNYuw3K5upX!T0f}(v;s*=L;-7jn34T(tW2TA883dG{F7p7kxQ<E
z$PmZG%qZ2p1eRolFB;l<&Xl%sMpFMtsT06(LAEikJRX5JqH)umm2uTiHXX{6V<JPW
z-!#7DN_;=`3bS$|ERX%m(!50IhTC%lD!Ik#ZN!wC{c?73IAj$b8&iUO1{Z_Kf39>;
z$l4ncVzDz|(R9_*Zak+o3=3S%n_Rkqc?e+_UQro+p5vw5L^N(s^5{L43a0E=sxRw?
zw)U1Q$~pfAtWoyo+P4p<Bdc$jldav0jGYs_@w*ejDk7w24@b*RGgp7IRf&&T`*8K;
zA}(yXysK}Q@dV^Ct7*?Ma><3{dLPtOqgH%t;;3{oRz)NQ0An!gWnMx3tx@*QNEeoT
zHrGoX_&H_0oYTk_7TFKrYKx+_YXax7AC8QC!VIxuNj4e%tI;*d0((xU&2KcwGg5&v
zh+);rYMPS{scD)!LmKnQ;htZGDc*;TN4^?Ayv)g;EZe(KcFbX>gk<6}z4*GuJP@%V
zu~T$aiwuA<2`o4}-I+3foD=1_+Ou@so@Fu$xZo)Qws*H&@;}<%PyT#QX3hCA{L_-J
zpf>D>$Jc%y-)hJR`XDg2Nf9W36b5+MQxtG5zGmMCcm+$(Rk*K<%|VR$118(`WBV^{
z4G|@W#@lf8N1QPe+%RLt06T8?WTq%avHIo;i410R%TXy$Sv>{q>#j5kpBrNRjUE;;
z-VZTa-8i-F8xh%0&4IuD+A$b^^r|{(KKGSOK9DGYam8Ner$BCUByG<%L9TH@j6YD;
zZCKEXa%P+O^MQ4JpZl>%jp6({X*y?{C~S6F&c4l~mkalWbI|-WM;qrGty@2azPx?(
z_1&r%k-D-jU`@{I&T{#|!2Pm36F0({J)pzAY3OU*o3)wbCCKm%&Cf5qslA#%<=2|j
zY3_WyReo0e|H5j68{2V6qpx+>FUGyIB76^ZPW{pDmo6X^zvL@Wq=YMBM$xtl;Y5%C
zWjCv70rOL?>n^Y(UdYUS@|0`KrH>1v9|<%Zu0_mV%{M$lcAwE$URi@i#k+apDh5>q
zLemZ}#=f-?{kl)EzAX+q!%MotmVQ3dGG{d8YLWGhr9bDR{wcG$>N-(TnmMe}zf$ra
zq(uocqV2R&rp&%_vqKw#R~vQ`E@#(3u<i4i%^1;3QVe%sPhs^LX`*D;h5B!m!iv(c
z<GSO4F{4#Jw{^PaJ;UW;w0X9{%??Nf3v{~V3;WO$hC8Ei8>XKVD0aHu&+{a-?I_!(
zJV+5m9rKV@`YknTDEiJ%I~$LnD!eY!r@WH<htHIm9I+5U8cNQaZ|grV00h=@Fy7x<
ztRKtC-0F0ZZ;)VeIP(|k?&rN8U~!pZYm=F!f5)Mn6JnKX!CT*H=FI<QqkMiu{Qc28
ztG2MD&h7umm^-kbOy;dCJx46m$r#7~H*M;3Lg+A&xX#OTFxS-MIGbllg4ezGCckr&
zl@>-F`#dQh;1${S!0OnEV0Pn5`hc(xnd-KixkC-mOXO;f`s_8Oqgv(rD~W8`U+;XC
zigImbF})^QnSXR;wiX;!^ufidZ_0Ce4nF)tPnqE5WM}-Xw@nSA)txM-Qa=;+Ph{%V
zX7jT~-eI2~_pV>a$m*j$R~aY#HRAGVGQ1`20aOG~ZHYbpLYe4a_TFzhamhPNo!8BS
zsN-*XM9`=106EtMHzTW~DI)&)NP#kBloM<FVRBnH^lS!wTvuV2-C^+P%_?%deuJp|
zXM-(iX?b<O?)P(x!YF-*;#i<~fM*kQ2iITHs9!p1{4L9i2&><r=sY9M<(o;ow8`_#
z4)-m4?^5`MJ#+f-(RQEq%pF7bKYpE7CVAVH5`xJl-Y?@)GS~ilMYODQzaT;(+l|8_
zI!>S?ipuM{uX^>?Kcex|Xx+T|dO|yyP}gYEN}uv4V#7&Xt+rZQbw-;>;|2~r*}v#M
zU1u3xQ<fOVWjH)z`>#AYSa9P~oN|%hw#yMZtUe#mZtv8xEILemTJJ%ifWn;bz`Okp
zf7D$uz16uC%09!g>aTBy)sL9inS_iz%<hf%tpyqg&}&s<>+PE-7U(0}^RbGK%Tbkx
z5Cfm`$tnVa<-Q@h${9b*dfge+&TpGP7s5AS``r*f9o^|cu+G2r>*sos>-e5BS%Pj+
z>!#-Kz9W0Zbvh7G>^)esZ6dUM`&!OqzrMA`c-<{O8@_d{TW}tmcjY;^b9?RlXz+}*
zQpW>6<zgG6r`MiKm!&m^OTRc9+SANe))0Dsb5#g1Ycau^)0BPQhkgfq=p*H_rOfW(
zm_d&et7+o~3%@uwq~93)SZ8`zEUJL>@R-^KK7CLlSDq4EoZ^)P6^&8!*gcNd>zWR{
z8I+8$mh8q6l58P~r&T!Wq7y)2-RN4r!pqC|$VU9+c)0y2LGOBqP~{}WJwKyp+5c=y
zJ8P<Z>M8<G@$340tgOZ^nc!vix(ajvgr>4@_jbQue}J5Nd9&Z#hXw6SssD@ry}NCD
z?R7?0QS%OaGID`ekY~TnkCG~^745uA@_UYj{;oe8x!7JN>>^mR8{ZO+x#u|DMr%I3
zKAzMdRIe*n-xs%ko-ESkDwAv+dT<lf!~_d8q&pnu`<Jk!@I2+0$QI7n12d6O02}ig
z1bhv=oApEB8C@zfH!&qKc7WI8s=o!bRLHj18RxCU)-<6L{Jwr8xA#(-y}i+YiVY~-
z9y;pW#jOehMFX&!F?7^*eF>l`W3Iah@@<zg*d0<v4kGk(|0)uk!29{8U9xL&fM5su
z5V1ngIYY(JNyGXVbo3;JfaSU0NOomTxC-W)?E8Tw{B$Krellj2JECehb8_PUo@wy^
zKb!VH>b$UI?7nT#^K>+atBlLH1GQE8kIM!Nt{oGj%0teT86$wwt~vX&$3}f?aQ5GG
z00Pw`KEArS|KAyhmAX!ZYvoMrZWcm%)?F**t()X<4_HIpbGf{~X^g<$fc~go5cBP*
zKZ5?Fb!*Mtuoii5YgZeHGSE~4nCGqi<%(|yeGBp*U+58PR>JO=Ba$r;$;$?dV!z<g
z0NLjJ)^iIuEJUCI6i)JKvL|b@Ct`Oi(+r|>{NK;~TQFBKO{W8j2+Vgv=MErcYjr<$
zRQqzW+k`sFa<b<?>ZjjiroX)CdGSNPT%EK+Vp`ji;0sVUA*^q>HB*0NJtN;i9@=*5
zkjV=0aO4mpii9MVWWRw`@x=Zj#Hwb>?UhR-fip>+a=Vw7Ciy>H+W$FQoe%uAcbx@F
zA%e{q9<;H4S9$1sQWbujo#KUO!Ox!Tc`dbCU0;lM`6yZCNwO92m;LKi-iwt#0!Ubi
z&5s2Qf4~+D6Z_IlkC3sLlxAxGm$iI}E7WNK4-`(j-WI?1mayOh9qk9so&im0)?I%U
z)StNL8I2anw1LQ)(PqkI7nz0_aklrKIR*L1FbpUWhelSNxgsMmnbbE!pBR|x2LVEy
z<EzZZl7o?5S<etfi82vhCP($$6OGH$bgPS{?WcVoG<u-w(HV>o)9<74J||2nkG}RG
zu0u517gn2i=`e-&<XLYXl?0ZI%q4W*??Ietb0up;^%VW}eXb<Bvgv)S)9U#4`rMU_
zl%S*o+Elcrina0g9AJ)_KLKqJ)l54uz)m?B>aSS!-TMbGR-SEV(-}T#Y|SY6`F6_m
zlb1zSkin{Z8y6l*d;%cC5c@r1LlQuR0EYD;OYj#h$;!Aq(B;bm6|iy7w-)?}t05Z+
zWMGk{K*jwBs)p}FeW-{0OrD7sUsx0MhZuUs+0P;fz7TiS=tnQ*{zC-&3uSj51irj#
zF!7E2Sz~c9vU+4hnc0~PyfBw5utwX>W(9y(K`6>h8Ji7gkiPMY#rjmivU#rV!7Rky
zWy*H}sv5*BAO~zE6qv;@=X&+~eXfLpKgJ)>Lpf$((`6JE2OSc06A9qelUL*hX>=Xr
zz{dwT&LXIC04e6DSsFcvzh-3zM4FXi-%d5rAJqfWIfGh9vKZj7&*~6NvEqNyHn(A&
zL4zBenM?}Ko_y#{(S<b4%r^e%5g+$x^mJs=obU69#sNY6^SM0LuPDUzqc=1QtDCL?
zA{_s+ll|PCDr>nGa+fbDvX=u_|Cwa>>n#J#B8RP@9(XeQWoJjNLp1Kadba#s!KH^)
zU2pmOVfA2C*C-ER5HZ)52Iz=&+OynSuA|1FznDSes^LjJWyVH=ytK3o%Qw&Hi`fBn
zJ;dok$IUpP00<*a8EJL0+-k(0o<p>EYkx8l@Rp2b7rHcNUvHl2f{&W|ge8VbAD1`0
zb4EIWjj)uVcI_{sIa~ZaU;chAY2g0knsIV7k-_iEJR|4x;_@)Q>LyQYl%_3}1o(J=
zs=~1#<N7oqltnsD!OF=a%*uV?v-f06VDnf5nCO)_xm|+?!AghC7tOPsp|AKKN=br}
z=zoN=nTa+O(;6Kv3_fTRdHWP3SBCiFzv=L4L=41iplO#yfoCB;cjp}H3*o#P<r`=e
zEPr~&I>4X0rnp#o(=JK?x=_p6#bnZ`C+;t2mrNL_?e009ZPp6x{ig9JDsGauX7y)g
zov|t?GKY*+GB}(jBusv4`do*_eIYSY>?G>N`;c*tjXI!EEq*4@B`-z1==~Oei)2IZ
z1}#fdi*X|prv0rHFPi}^tZGFrh;LyEcXyEDk+&{(Biy3T&B~vz><5$kjIZmtt6X-n
zBk)L6tfWjr0aT-M6+5UCx$JWn&ZC8e#RMBf95xzuh==?-#b(9)%s=>~l~99~1=S{k
zglrEK?7EfWxw1ts?)gM;S?p3q)JrUhk1_vq+GRckgzSqPKy`t+v6BR;c^c<<1yFmi
zIuOc6b!ra7J3P4waR!j8qF{p6GMRw0)#Y>8OsY^8?ykLsGw;;F<%$|Zx0OwIPy=7R
zWZ3ogZ~y-NMhxi9b}H>O;Fe_qVfEi3p%mGoY;=!R<JIh-tr|;}rDKa^33y@GOFhnw
zB8}>+)zt_2nP;x(^7pPkfa>nRkeQ5jPaBZ1MlBp?&j~W+sNV2Wc{aa%#>)Tf6jY(b
zJ(Q&In&p${n;%`s{%7XEa?B%#H@bf4W@V<if2FzKBi;r?==+KKcrauG1p=s4nV?xZ
zC!zD6-qml73wxPhlI%CT2LN+S@PO#emvzKoPWa2EYvvh$Y-4K!GT7MBgQ)iqgZluY
z;IHMGP$7;^;R~y$tmsM2QwO}E>ahU$nNE(lmX-%f2dJpDvOi5gB6_~<n&}JB7Jy1l
zcE~SM^Hd>>OaCS&a;*PLn}mzp7WIzgxG0f$EhV{>0bYM;N+F?0?_oa=jV!XRu%{!W
z_mP3d%Hw~bfAe8y_PGrY9#;SX{>gnDmD9obuid*o=KkFHwTrBT=X!vp@|QcsA6N{A
zC4*!F3Q7FB19BY{w0x8U3*ZC=3Vx=7b%90wkIoPgXb8X4orUdGhJl_lyrBbhCBcJ(
z{T}2r;eUG#08V8JqJWf$fyb4AV3yp#6(gDq`%Amvn;rvu!_$h?%N}eGlG>N@$Hn|@
zI(JjS>@#Zb7voG~h-=Bg%F~Zoyg0l9@fB2sCxcd&97XmSUKS#o*ACd7u1Fzd+2__k
z_uN2IHIagvFit|_m?ShscFGD-SvG&I5-A{0N<%0Mq!>wkT0Kh6pTTK+fd1Q5z(wOr
zIB*%sA4$uOJIU|Cb0y%mAMz%SgafV6xFpoLihwBip%HtAyHF}#IBX`p;OF0)*-8g1
zHe`FYO6Xj#<QqYeeE~C37_3A_$@eh}f4`7Fv@u;ruj1yRfXj5enF2$X$OW}(9M%^;
zg+jJ~P3Ri;V?$G!GR8R|BiCW$%)v8{MdSRI3Rv$ooJHNI%7Xo$*IHZpz<-AefQ>57
zbs<ZsT5;OF8+aTC8cwlmZS0+Yl*LjtaaiaoTdkhEB!;C{Df4dqT($#G`8#{h#5TJp
zJ(s_W3$(W}&$23cFgaLz%|cl?&_vFwbOqL50mphUiGEZ_0g2Tqe6DNCy=uML@c<?&
zCpXCEMUE#BHH#|%CZr6mRwg3*Uq6D0dP_I;{QKgP#1mYr1aS43Wx|^FPd%>p_Nu*K
zWnGNQ@{YIO@)Tzer{~;WK`CY@?0{k>W3#F(m2RM8-EyM4X=`$UFZ!TBClRXcgFFps
z%54B@1Zb!V)oMRGUDPdUU1aD{1uS-XyisKK_STNf0n@9^HaO|X+~9S%Z&Xn)CFhl#
zw8FuAUw?1KQ{CG|?~zZw?_o6Y&!6_@sh{ou%L%p0u0RB*{t@Vmz1wbVq%S(_koxBa
z1#qcvCY%gb9|bA|K&U_34lkkyo^za)9RlKBJ?yVac;FKiWryxFFAq{j33qmflSJ1i
z(JclCfp#lk*ZrO&>55gImGxIx2XKG%zWA@<;mBN-4I=m1xVN6b@oqWxnjyMQLNLU@
z?Hy19fIj_2Qs&gbLNI`eXDyr}U^VwpwB5Cm8*%Q2x0%Jt0-bQZWpgo0Csj1SkMTh!
zthJc%wJ)yQHM+Ep>*7s4J!dgVy>F7K@40*uBB?z#w~ODO3e~t|Qdy?X$X%Xj=5+Wk
z76<^JnhV+o7_#R2;2|yQlqpzN6H{dNM8mp*@!57dxd_hR4~SW*yD$>>QmL_t0(lY|
zJG#=LK{aPuyVRimlw<~rqmi}n>@$MO-Y@wZ;G?6XG6IDac<ezje4^aMTwzsv3e<m-
zK!BN*kmz5O0Q&te{poY)%PZ;CT$P1C6PnUxtD2R|k-&gsu>Fg~OF~@j0HWw}wMPMk
zZl0Aq6ys-5pIfaO&z4WAYvr<2HndLIQdTWz(3NkBY=~H!R}~y6>d2@eywy>K(PbMq
zenb%d|7M#iUs??GP5R<u%k>r=Xye(UGtr$^{fQNymii9PZj~IBVa4cdS#RzX0i-F8
zv&@SoT8mtD?-rjVLu|=2BXAqb0dD9vyEJ`{*H6ltTy`UsJ1YmC2CPdEc`u?4XWm;k
zXK@0qwBn}hkX*Si8UatntkmF-NI&PS;n<|AqoqX)&VJ?;S*6GG57k%Q`<;(B0&<><
z3UQH<0fx7@Q7r51ec%jds3OPH<i(GHTx40#Abr%F&l%FhM6&vi+^KxS9&$cjVh`vj
z%L{+wlis`3^0fEm%`!p=7&}?7NewQ>Dsum5ZaXkbwBwC4;jo)FxnET${?UtKm)@de
z;GcX&$;z|pUwL;r0@ueS?;ML25Zp{3A}%A=3{8C*mLx)J2h#P6jc3kl^>i&YK9A+p
ztUdA&hu`@$#nQ7<mlKZo=A(1$rM;yFkexh$C77$`O{xWJFBhjP2}0Px`Ny7oX}8MK
z*ex4FT2_>2&>=6m=BrO)DvHyub`Et|Ixw{9h#;@%z>uj|rhqvyw{nia8sn|A1eunI
zxB}T2gH6LqCC%O7A<Z;Rizw=To`e=V^KCP}pj>zitz-m2y6c;`n|etA#zJU$PpE(A
z@Z)slgaLb!U++5iwKx`Db7_p4&~6R0r5Yci?aUmKtH19v-{%<LHvNY;ZRP9RGM7jR
zpa6h?iv5!dq_OCo7OkqYJSAH1vQu~PllogxZPZg@xc=?=@H}yW@rc{zK1SW>1>ErO
zvA2les&*T<sv=-c#uf17W55&<C!@Jl!OwifeI<3z5r^yNd=`D4pIS``#?xDPf0RYF
z_>$F8?-#XOy*oGJC_WDKdNW+|4KTmWtr7=tJ!OU$q3?zaE4`BRklZs8%=)KBDz6M`
z6LXz<68M(Nj<AL?+?11(Gq9U?OwMhd1oQCyu-IcJHC7|?qSvQVn3Sgvq1I2*%iCQt
zzQ_ib`F2^?Zhv%Uc~o_&KuEgi_2~O_pUr8i8(>ZW09DSE6YAr~%RbI?Mt=B$`%`8u
zqzXwhHbSopRkg0}JCd^(Z`-Lk-#*(G4ujdr#IP57#|n;r^?9>&(_@reSu95{-^rD`
zcwfIfKBEyEPHsMj@;)(KYVt+rZt3x}FXUf8`@MTvx0!2ao@}jPdUO3l#brdal_{i?
zU^jkMCOwiL)61VKGtswFb;Y*t4R6hRv*@H{8K*ARk;4D|Bx-H{>x7r@TFUE<Jt@E#
z!qswc_ElBCV7i_sHxXwsxav7#vJOOrMJa|A@LY|!!?s%s&_<6sHPMNG0r9)(AY-%t
zGL_unp6{)Bp;>j6jV<h5H8--qK5oO+)@U2q5gq+0-zZ9Q8w^XHd>353wkKSM6W*Qp
z{ix>VHV(j^IKgG%-QLM68LTWz2H6XNZWpM;s`aI2!mui96X{X<amNuQhp(OkF?K(V
zaa)W^<BJh-UCqUS@!cCr2yJiY1lceACL0l;KAU4AUas!CH8tcZT)I`TbPOc#oQ^&m
zt}~1%&&<3T2Q=KT2inBh6ofi8rnRo66&P3d>J*|pGAr!5hdY%V`tAFt>s88*nQZpX
z>Y+v$g-_cL{SL?Dp6cC99)Ncu&1jr@Ro>(9Qe-w?-P^0+v?5pRtkR@r>R<nFX5)6D
zwWOEZ&$k6L_X^mv1`bl9T)MH01wU^dmX0e>54<UcLk=5h)W2QwL{^j*oiDrR$HVbr
zDk@@)dh8W!&^U_HlT}gU7n?j9&JBPOJ@;!5+ssm5Ka+=<NuJqR9VhFd!|?nH;~BQ$
z{-XRD_3He;XbY{ftpiNG`#75CX3f9H6`b8H11uMne`|2Y^+sN}wLRbUq?%RQIEKS>
zqjx3eNb71brR;0@;qf7_88w@qxf||_x={I9z?gw6=+{K#N_EX(>!UFm<hBU!wEStw
zR$>iyNdMweGiu1*WZO#r;_Rj6*)cZvrc(eu%A9u3*f{>rK#LL5VK~NEzh}9&ykP%j
zyO@?%e6rSv=0F14qWxaQ$6Kq~6BFpSL8GH#@;yqtwkmo5$(R9{R3oRkiUW2a_f?$9
zqi(<B^13o0Me(1DN1KbM?d?YKW1QZW>lU%QBacvqGjf{KG)|Z0WhI9HU8Zr{^u|(-
zqtEsC(5}O%!Kp_@9W&?NCi&gk4()|DyFOP|i}~&aXfZeY(n1rR0-LGMcZ)as2Ea>I
zA@Xc&ChLlda4BcAVGh@dNg{D2t4N1>sa3YMqq9rHf|p1?J&R>e{alNirj~Nx%~D@q
z&tic8m*4#eY<j>Syebg!>zjW;AeHNrn@=LH|DS9VqkVN!&b~(&wEr>Y7X!k(Mb}F<
z9P*l9g+A=Ab<`ZhIWkD51IXgwlnjWNw4KPc7-k_9F(rGoy_jkO;1^}}g-lZ<9qTx0
zJgmj@fa%3+KB;h7Om(n&v>(Lzc_F2oN0?wR4a9t0h;yE&T=2P!8l4bl&MqCtLFg|!
z%Aj6MF^r$M#W1jI2lGoVtc)49P-`5GDLw$SPt^J4!}OKNr(wSZjUyn=kc<}nG6Tv_
zuX$woiGhdPmJcHbA{$!|J^@MNGk$0FQ2`CZXDn-v$b8NFhAva4HPbj5Hb3{fKPjD0
zHp#V*?ty#?<V|l|v!G1;b0EEtVW2En+Hg13^)-)sSbrp~*~@fZ<xJ~M$Q#MuigqwQ
z)ip2cFbFjh!90%;p}KV#xQYL1i~jG07xO$~9InQ&->mdu`m&L9u!FQny4!#}hjTQN
z7h<+bJqK}77X(xY(x_KlWiUAA$F!VGX~3sm_aM$-CE_r$Pt1{YoOBs2x>>+y4D18y
zu$DJKTcyvW4TFICovDF<dY~}`jCH_$SM>`V%tt0-B~Kl;XmiN`YaL)DSb&(G$jP*}
z=w_M%^iA5qpfIe(6}E;czGCkl*AkQg6h-MU#VA%fOu0w@V_HGj;1k%A@P}+nH4yy2
zXj<bD_Ew0265`UI{FsjO#ix(+eCpA=bewXZWI8-Nt|3mENWnhZI{sHkOqHwYZXX??
zAZuj^9JWx7Fs%v;6Hbu*+($=|#WcT5%N+6tLi@CzUkUQol?`Z7rVI}15e7l^U8Mm@
z*4dI;G&EWaGp)^KFfuE^L%tzT=OfGFJh&m0ZZQtbpM~_P(Q(uum|;DXsZ~In>YspI
zh|_V<pC(vS`k+pbOibU(?mDJ;=kj0>0(raZ<>Vr*yGfS?;}hddgIKI8Q9>-E-7{r=
z%4m?J_0h5HW&p4CV>}t~VEnJF!=f`PKgo2jc*Lv2x)~stYC5zE^G_t~U&wjuTRX^`
zZmhyGrhLXD5ycSjng`({(>Tv3C5WjyaIx-VZ_)LWGgPLgoaaOJ<wj(*7!JY#2PKUP
zgGbos-T@&P50p@5WtWcSU_Dc&gDGd5K8#|}{hOhnOzyaS9uye&S~9_{ed&Dn-@*KV
z!I-_Rq7>3{^I8cRhh)<}$PC?#5|1#w>I07!eH`WYlN<-g>&R?iYFr7lO6z5^VSWL+
zH~O`MfB?+CR3xo2WDS^sg<mk$WgJy0z;OB?4C_=|dgN<G8V6d5Pfl$KcD^MuisA_d
z!SO_GTK+a_5rY)*@+4jsr=;_zqxl3(@f>LuzxIV5Is21>qog7sz8~V^I6w_x`G;5W
zK_D(rI|u_xXfY|Whkr|*X(u6FBx{KV?cDl(Uy&QE*FZ@UZ1DhZ9Cq0Ok|0zN6(}y0
z$mPIGB~}pq-aO>dr45X6-)a!CzmPohC~}g3ik=qVv|rWcI1tByXMLAM!WIfaFXU`8
zTQIg5X8cKz)*aLiEyGmH$o0eK^88WEA=0|m<u@}UA{@s1CcR2pSG;clP^tow$h?^6
z^IcX4gl!j^;vdr%$$eXqHuR(DW{@^K$Tp;f!@3{HhdtOae7#GX7bY7?%K@d!ycuCc
zjH6s%*p(p8Uou+s)_^p6X1PlAVU({_SAdamGkZ*4NE>DWv+Kjh4GBtr0YJ1>qA%Q;
z6vT6zU@mvAk8WkIvNlbE6eRJ%m7Lm&1FwOYRP>wwN!XEuX&tzpBA?^dEx|;3U7cEW
zkgFocd}LtWu2g6r-Nr|dIsTo$x98SMqd}NktK#pVo(LT#PR@D$0U{6$UHgNo=XxC=
zuG_62vO^5<HLTJ&A#|f0cvK``d{?PeRS6`>sfhha{SPO%zYJ<5LA<`;zlKQrx0tT|
zy!We(T??5y8ulye-pVF;xy3-M?uBXfT;#wI#H#X#Lu&NxT`L-hrAc3F<1<F?dSLBS
zzgdt`pu15drUEMX3e`%+_>K)v6nO~_WX`X)>5NoqIBpYVGaS~z7Q(_BI;8cwUrC&V
zMSF2(K%7ZMR5xWYRcMCKje~R$O977--M6Z1T(B1FJfP>uJ;X63KCCJbvxOI{kk^86
z;N{Uv8}_Hrw-^Sq*2-WS=lkfGa+s*o;($;8dnI7TQ6C#}$eVJC_+;3!bw6P70+>Y{
zK7AfxMudt79%1)<!KCpT2Qob)Oe^LtEr5g#7L-}XweOw|;%R(@sa=#w;xU7mDJiW2
zYmUf%`jxuw3%fF>m*+rJo0?VC9z6&5roSb4Nix0VF9PZ%P^JIy-u$S#fx@4OTEbQ8
z_lMYvf0$b6?VdqCXEVWc#;;LdCp+osIl$(8id!>04SB`4{qIrvEBfC>I{j-g9)_}J
zSdO>gJDW+jh_f0Ik(196-wU}Y&IwCkHjPjBPqltawCDz1lb4|Povb_2o6~uA@94!7
zL7Ah+0+kN&oXv1t*Mp_{v0!}#e9Wu8d43D7K+S^h`LBT`7g&yEVJ*I1axErhAY&;|
z@vT+7&A!VbI7pk2)_)S}r4j>q1BEK#_0gL8^aAS=GMQak_cV2148|h{>!e7_ZZUig
zmDALlcRUHx355s1kg(?FKSa`c!jw-N;IQF0*8kLiC}9gB<^&*W*42zY4DwcpP}(qK
zVL?93Xh^;Zw#3mbANHYfA)O7j$aJBj^dBZn%s5u&7xV{6o~aIOyn<Iq*l*^?hBDy{
zB7xGn;S9i*w<+%t_V7g1)!iB)vjZZf>x6jXyaez+HCXOP0(<)hl|EWHa{Nh_7<)Ga
zmHOD^I-hK{ZQ<#K8<d1}MQZFqW*T%t>fiE#u~!Lim?P~X%2|T^aTk^6TG<CYLlG`V
zq6@I8=40Xq)Si#ePENv>K2QaceDlcQVrnr`y-h5c3TFeUo4krRx&sk>Co>%Vdf#VP
z;_hwE|3lVS2Q>ADZEqmbF>3T+sDv~~GY~dFMOsNoNeStYn1V1ErJ{h;=rHJRnSeBc
z(lw+@y5T+k-tYVV`TpLX=WORZ=ee)@y6)$?9eYJIpL*k;{16fo51k~lVylA}Ui&lP
z{or=aSNLixpZ2;1^ifnEb9sXYp7I&>BTYw|AHc&dvu4LzsABGcXH2wiOzKIInwPAp
zc!Q1-eqgkJc&9hT6HM+ZxD!OHeocN;VR^?YtF=iG0t~O}G}Ym!Ruo+-GT>K+p4;~C
z1yBA`seyio^TV39(Y~zh<as#19jH^HAur_V-NZaaRMh+0WL75d81|+2^e?RwLt_k<
z6lF*oh%^u6RHw=M_nhzTJ7O7~ePd7&6R%bRb_m%*oU?7{kq&+Mcj~N}6kwMW&*94Z
z3I8q1fnbCGVT;BEp}JB@G<=HTo!cw>*#sed+c_XE!G)Rr3peEKQ=F*pfccrJAWinU
zXSR@ZRAt0Mwg~5fz=fBnKQ{4>2RC5b_aYsdUjRhVl7j9;dHBQ=!VD2yv>(JsPuX}e
z3*v7zmU`HVDFeqn(_=k7yKkuu9OCnocAW{TrIgUO=yHk87UAJn-*_D#Eu-U_|Bi2=
z1yj~?yQ-9!-W`m&euJCei0t;$Lzsi;PUeP8S^GMg6|A}=B}HnTJMgY|2in>y52{QK
z_YtT|(u@GD5Yv%bzEjc4cu1xEPMOzJDtwT{>JbbF8oQ%FWB(4s!}B%*#LA$$kD35K
zCvGM#rOVlMry55kV0+878<KUIz@;?pX0ZZ7!K>{mZbY8$_pHRIryNzi+)F(eXF=5W
zH5sW}Wx#a;rBMFLX6PXw-twKWoZQ|ME0&gr#>7_N>~Dpz5SRb>dhM*L65K^TNc^>n
zT=Ww!4B|$j;)|x^cAvlHQj<o^O~(w5lA&wWZX}HsLp-Mji3xo)Cds{%i)X<`Yu!Z(
zogZUy$*M%*LJ;(yB4O6hX?jPR-?!Y<gdtE(n)c^&4SIIFy(2<0AA)w63#oJlMqqbf
z@h>$swh}8*c;1l8DoU0$`PcjMaaeYU>$W2(H=NjtA=h*p8c0VpDA26pRDiV1&yz2F
zis~BbFYw340tR1Mr|@n9D#D)~VwXhX*Z_$71rkEq$-(41%nhl~s6hmLQF75B5NN_G
z`n~sM+m1P^BfBy57|C>w>Vm=2sM|X6CR2jxMXw_@asfVFpo$k*a_l;HM+{M2?(K!&
z3T^)N=<@jqJaI`iy(xL%)3`^9HrznGrC?uaT|{P*VN>RHzW0j2N8%aslRQp<;5|&u
z*S@(5@f4CLf?p6stcMl~FH<W~9nK=@QUKEGm(LVQDRe=d;D~VKScc~!D_~t7w1ABp
zBMRdlJ0JxYrZ-!fw9gk%R=7iM>2Q)Qvv-b4(bb)~=SmdanWtbq?CXz3p2wBw>M~KQ
z-6?Q!3y=#iVa*mzBq4L8Zd0m_^}=ZKS8~4knn2R3OZEO|!g|KzKca6kw;_R=R`OK0
z_;y>h?@!V4<=6xl(y3@&BZ)xIUPn(4kk67hg9JeQw?G2-=}o9g+frV!VChIzsK`{P
z$kUQp5<k?e?m#QAb5qJP>fAy<HD<Y&2mUjOhH;0ZS#m*(<acS)e^!F9@3!d3f8@~A
zljLS|v9OnGp2AOBt;CWedtL-crCvRIEOc#-?PfbY*o5q7-Ay7P9<<@LR)v05>gikW
zN76fG%uy>LM$!6-T@U$dU`zAqWFbMQR`Fd<;ezZ%0W!b){uu1*rwRo-5aDzUJ!Sbg
zOf5EAMzM%GNYb@(A5*b~A=;&*Zq<78pl+s?BJly$eYpm_<skhnm-+;j2p|epddV@@
z0b4@2?qXZM5vKNOKsWmEF#z(#lIIGQ_m49nUZ}b8{v1Jg4?A^Okp`yLi8&&j8o<Mz
zu`y&r%A61@dAX3t?=$cbvOWrdkMKW%6A^>|0uT;}=*esTjpp8{Pvr~hwsU|>=A|>K
zI?EU~aX>okE4;nadVdE~<?Q~ykd2akrHWML7;m2M?2I(OOg0R}0ecl{^<gK{Tv{p@
z^^xr5&KLmH?e*FHkFgXI$?_Pv=koCLR<Qat?(0G%eiU0EW>?HT1`oK9nlAt(<w7%O
z9NUq`?}=r+m$Q&xW*5H;^zSg|<+?w1MpL1^L4glh4!&Ra-nY%zL$iX=I8LUNG~n)X
zUVq-HuD~uvQbZMcBy5E!yQ-EbW9K8qTi^u2DZwmM)?ufHOtG0C?$B(Tf;MvZ=i@lV
z7*#zH%Sek-hKQU`W}auySg7v1JE=IfS2IAYvfZglh;ZDuK%H-gPQ*T1JL-S$VmPhn
zdRwQp0}W7Nd8tbm!~!l-yDt{;x{x&I_3Nqqmn!V<!|pHW^&iHh|HW^l_Z}2cfiaBz
z;4GOOD<sHG^VpXY;%$ZJaXLpiIACbdT<<`>3G84)km18_H$O;UAvIAtr38F?mOVqi
zUA=nJRi=*x`zG8*<l(#yB%}*0M@H1ja%tn1gJ|pm8#8)FQ|p&J+~drE|Bw&czXgSO
z6;o@(&H2IyC<>q=-#*&LVoI6vA4hK0VquWyd%a;~QGdsDfee(Uz!7~KmMuaPX&9JY
zjR8ckyRQWm5xnQ9VyGtW36&Q?MD_{u2u&`kU7$h_c+tBdMTDoQ$Ur4&>!Gb%@TKsF
z;i%3|PO|D4R4l_HLL7RBIzRj$gr{O(0kSMVOr4I#CI=keI(Uj4Q$$5b^8qmbIv%KX
zK(#j)AYQG&;XR+dzslQYh2xETAcD>EHr_H4@bg-*1F$SKDYk^iK_Xiu^tTp}<`H=S
zw*YVq>l0}oSdzxS2izBBv=3y?c%MlSK6VOC#~XvJh)X$3p;y+@Uyamfi^)WrP0FC(
zz%Q-r<c>-=M`aoBB7xGs31kE==Nz@KBB|nZmtV-9<HfWH_@myX&Jjn1)-Af<2{UkD
z8>1?-t1}a8f%v)U-TA%nUJN{XZ+v4Bgl@c+z)drLpNg0@ogiAyX2j$1E3@trPsAvC
z=8YPSR;8<K$>iIXf(z082<N85S>K`Uz4zmrqKXt1n2aV&rA?Hs6}SIZ?;aid5F~&c
zXW+ALqbpH>-mVJN-(en!2Xa!q9LS4S)&#UL_@%$+wu@OUb{Q{4->nTR@dp=!Tu2_M
zY(xCOY(P8Jl~9P+oPtLFnh_RhY$UfZft8P>+<`KEjIWVaL@^PBtX67I!DN?LNaLxX
zC$9(P<Cc)-O5ToXwgx^NL8#Y5$%Yo!j<K>r-Xs$FK6Ua$*&-BK(b@6NT!q*OVQ-7<
zYED{$(3e7h!k9k+bcpUS#ZY1oC=HZksIV4`kuyZZ{I!LPNay<cOQE`9%sKx77i#v^
zVZSFVemP}tpj@dUae|RZ^Ov3NJ9=wM9?Zzj;4F1oOl{|&VFRa(KbFGTDGyT}vV9$@
zRdTlv;u-dOP>VAuTeJtnY^4ec|I0OHRtYjDvx1DY$uPtJ@RDH@0E+3sTY!5RP5K%1
z`ns?8xnOxb#9vc|HDQqM!KMvAspFqa-wcqQI25l*-Y)(tnOOg==T@C)4<?wkdIElu
zMl9t#g0}Tm)km--v$q~$>Z5Q9Hz#O6-6LztT<gLz0xq-a|1iE94?(zyCO+>L1O3AX
zj#!_LUN!C8^a*zP@V*Tdx&*WfG3+m_(PtJUz$0rztbw#FTuyKlxM12{S^w6FH0Eex
zsIC3mLNx*Jpv@^K=?%!>1Jpl_=<@kds64zY>d7<Q`!#!x9jMq7S#$qK(jBP~yQ`dq
zCK`sq92=o`A4xNz`+P`qf<TI{hqu@YHm;ayMWC>o6XLbN-<@j#UvMYR&e{70Ux<@V
z%td9^Cy_07j{`A#%!g<R!HzdQRqPuDa)ubL+ZZ(PM$)jarrc*&1wiL*f$Y!TT=2Pi
z1cMAf-_`R=dAxB5lR|yp@#s`IFjxh6!duF1Gp`6jMc%zi-p7X8m@0>v#J&SsY4|w~
zjOIb>FnEgKz}8~rty+0s2_UYUnFWs6W`-LSXtek}qCDA+a^OIiJ&_ynD|DeFMHr=x
zG^T#l^dYDdw1SgJU|`UV>=Cl3b#D#zYQ;H;QM`Yv+kf1#aSMKUQ&yZ);LIg-?f2jy
z$s7w~05ykd*Ke_Fj#J<{Ch((`Rz{FAsFnhhLMC+Wd%}<WeY%L+&>`qIP!||zb0Vs9
zmrTZc0s0xlB)*tq@fnPBLW*5~D!~S6Enw}q9yB%IDp8J><;Pvm!ij5=-OI~Ov>d<I
z99zxQh}vm|6`+%^wdG1QizY@gJp&Db{jc8xiz5d)BM5KPTgJ~wo)r^OC4qcN=rZ2g
z(7nM1adH#QQL9K0p=sZ;JXE3ZpTd`1@gXh2+_WkpRA4mtQd`qrMznU_#ERVC%8I0x
zn8=YN@@;Fi?jd3woeVCe0*o!@C=y>av#~v((lD~6<uwik1rnE1foMR~^l|rZdj3qL
zqDR2@L3coIMBWi-^he^{w^8A<)us(E6`4Qvqo0C&`-#ij>CdEZ2Wix|;jUjB9Hc~h
ztKQ54=ZeU9?Tv%PK;FdkR!psiKwg%#d)?+uvq~~{kxyP08yr^P(((mBx{1Jg*O$UH
zv}&`F+<Q%Z>$=s9Tb&gZ`VM~tYnc=UeO-<pK3I&Vo|x{z$(9uhKls?z8~pOebRc~D
z)=L!@x?}te8x5X3O)7D+Y+Z+`YReiTGD^^Ekdfz)Jnk<e>8<t88#~8TaKxXDuHI=r
z9TiuqL>-XhbU(f>@Q{vNX&j=u4&uMTEjn!_Nc5Dx-m4kY1QZ0>tAZ-8eV-rSFq6WM
z(0AV_UBRC6sfE_(RInUAr|JfkQhazBBtLW}h3a*S*dVnz9*wTcUBT)#w#spQE36Vp
zKf;t|4HQbco(G<Un+A!%mo}H|HxRUAFEym$3$Zkq3(_?hv)uv35L5zFru595#fO>q
z4M8Y1rAYl7|D+=}y}U1uh_3xNlg{5{Y<yqNdEq7wMiAi=i5#YJRqI^AQu?Pa{4EHS
zu^wWU3G%sya#d?Yg~g1p?W`+`#C76LSJoWDQR$<C^`m0ZNYkySp;_4i{~cDKWnZn-
zFgS#1VCv>}a#8WCgtJUs8?X-q)meK9%oBuQuoZYF1*UeyK1X*O;?X;k?vdS#fa4q0
zQ|#}Ml|cz0G6l3FkwO}1b|2)ZcA{c74I<JKBj!G%Bi8+irpEZY-SEfeg4@Kz#E4Y{
z2K8Zy@n^yl9S=0Ij@OYRj9@fP8bk$h&AF7gl4b`w2*Qg+7+)_G`ba`gOec^)98>z{
z$^^{?vitEe_a_TAnl@Tgf;^h?Okk~+%=nMg)V2A>=Z2_4k~#S~9`H-4*QuUEhnGJ=
zrQlAGKQV}%SzPHV7`>=Vl9xLk@t5x#L8Kp4OR91mcl|>7X0lC$HXHEOR!4WythX7}
z!V1qf*PI}ZBp}>%G`9wSGE2DI3tN0+ayh*ucS@<}9Ur(z0`ahfbTa5%O81c+TsT0g
znRF=>=z|T!N&rm=upy0eegdHd^Ps?iBj7i;ATfRSI0^G4SkznH<MJ^S5`-pgRZzMi
zan<W;%mngfA;lgUG3bR|m+?3lf)4PYWvHp!Wgg{%j&|!2AxfK!m^z@Lg=GmyokYxv
z%A9;U?#;=>E{<eQ*U_H30~VOk7=%h#^9nK<)yaeqM1+oVqI25R0m{AbpkxzV@<AJ$
z*6oOeOB9`A=oB)=Vj<R+?j&-R*0Iue2tvYBrve$b(t>F)wE;a0usB1RV?Us2X5UpD
zV<87J*?@lxYw(`@L(a{qzOZvtLfzwQHWeNS7tU-UKi?c{?@*2sh;@ql3OrS=JG#^x
z72yiO8*{-y2u%6FeNmrK4NR#>vY?<tq;V~lW<SpHKRtqueeLKk1Ls+M7{Dp@M9;)o
zS3Y0Crg*Mo1SHtnh}g@MvOk>i%-&%p8HPayH+l?F9TK->deCK^x_bnnWEb&*zV9j>
zyhsx-Bb?6PdkXBFk$B6uAf%-xdDsSy=9mX$B1K~H8-$^2<-g{`Z4~jGE(^q`;tn3{
z{FBSq!Yl#*i*BvFL9D_l(<*zH{hlMJ>)N$mVtPkMMgbnQ*iDz1q&9dBqe=xJQVBq;
zT&1i5LOmB1t)2m2q>Y7(1nOl)Yi<GL=-VvTTbm+0p~r>T^7nQO<ZjiDHeuqceE27o
zpUzX_Iy64Sr}8wS-eiO^#2jc+Kd@H`rY8=`_v3`PM@4D-+(&cDU8ttLl)hS8wa>g%
z#y`2o!wWv?VSS&91q2oN-x$;e$WsekOGVjR-SpEkwDxTIWg%O9UHy?2Gy(*)SrLde
zM6J?B{UsFg;!W&1XC7Ja3GB|bOu)PMDrv<%eC3`4*K#@6g3%ZibTS-(oFHCXLn8zI
zV!>o@n2kHo*}@Vh`^-V8^!AUhI)Q|}JzK=?`&1CgyPPPRCWu!?u#EK@)=P;7jyE0?
zfo+v&RXHYq1#o)sYrT&1Q{`v`tCcT6x=*AVZ|s~0{MGveMDIe*hZVy>k`=2H_xK-P
zpve*A$Wqi2AA-ubAVk$U<6pk{r?5fT*GdSA9vj{YtShbR@HRXfXGW}6z7jwKoM&oz
zY(q^3djRQ)Y$R*S5Y^tlKkp5wPL(9cXT`(~wS`!PvVD69ElQMTh*=lLbP(Y8M47G@
zyNf1!NktU4rLCj!=r>4{%!(1_nJrTJ?!mpQf%{0~Ji##X!rPqZs7e0*EFUZ81qu*B
z`Ge(@gCVM4Rg_icc2)-R!^6jG{-DX+{jc!pn^ec<xwyW+BaNUA;`1m-xKQA|9jFYI
z`kb3hm~PB84HF2T82NnVgDJfyiy(Z2XjG1ID)scuZ$WP6g0xpc$~<MgP5_4!q$T|Q
z7uwiT=|;fdb+w0%*9nJ{c}JLXF&ncywf^@}$)lj%8@S#;>pF6lBfd9qq1aot9K^>U
zqZoBQtp~S*x~Al#ZvELVC&NF4*e3M!xMo;UK3IBJxs?wXjm7>G40BOk-^7_s59Y4l
z5Md!M%Ng}Qs|T5?{@}404}@PB%zIH=t9_&f?oiAvxwJ8AyEiLBWJvRF{ZfpyByx|R
z@DaY;S)-Uv@7=`v(F=2p3`?BxGDImQi9v@OX>6JiH_5i}3+Z^-y^J)?=<d$9gg@+T
zVs`F2g?Ad~Q)CrH8dUdgqbLkfX&m)#Oj_+gZt0EcjZtn3<y`SK_JQ^RH`sGjT`HJ5
zXa~HHdKs@?(BHqaaSHF)cMHwlNj&eurr4|wmlsWVZ}b5AS;3YFZRME$B7G35|9P>H
z4^0Ph@jon2&%Q?cNP6l=q)HUTTH6N^l^+TC6QGXW+8f%%D}2)9fIgYt)J#whI&o_c
zsN8-hr`o`)aJ+fE>WAVxEGyWstXiE*#aOKh8)2Q0&d&5qz1Ks(AR)S7zH8hRv~@<t
zU^*VOF4@HoOdZ(@()bg9B~uiQNHr2#?cQRBH=h4$Je~JFBKJ*EtFIhe1>Z6h;^P_i
z;6@?wiVY-a|INC}kD##@ASzczP^r~=t8*tV4X|K~ND{+tfa^3>%VcRxoghA-$8W}n
zqtI@~bO7-ovv3}`s)<bmq{x3nKG0Fe7&yA{f1W5*7)SjB&5TZ#;Tk`Pdp`X(eEt-E
zi7{>Io^g?(ggJm3lkbDa{Yjg?z-us7ekq4aqgrDf5f+N+5RWml;gWQ<+G7C^=Dyk9
zWtS7%T-%R|JlcT-5gDfM8rE~pq(Vmsh2ZZ<(-PW%cp4n+5lLpYND!o`0`s!B%0E3E
zX?#|e5k~Xa8gfQ5s6-HP=`W^!Y|td|cM-tm;`{ozeA$QWh;D$@dAg|<SJ08lXji1i
zT>FrG#}{FL=M+deEZu(AEJY%X*0DQ1n5w=i;*Z>dv;_b|7&)%j-g&n)NCR(t%KKj9
ziZ&-kaphmF0R#KG?}*}9(OkgG9p=wVDR=P{j&3_pvK_P5OXo<u7ApR_>}Xv6gJUeK
zTTanf;7W@IM*tW6SLEN-ftR16wjs8ZgFmLb7<jR-dJR$ex|I3Hj%$(?p9Z(ey-_E+
z*Hj|FcQ5};t6b|tTYYxz0Uk4;T?qVl|Al}?Q`kfxoBJ=>(uXg?cW!Qk4l!4L(WLqD
zn#)uyq%s062^thP|ETNdDT%jWd-AH4QbpqKv;bWksW1te{+&3tSm_~g8FYCyFkz5L
zAEtK~^X=;V<uhuKI0)ZZ5)HwKLPEs%S9v11_j5>R{*;n(vqfa6J)qc7ue|Y*&E!V;
zaBRp9be<A`-9#0;PAZUfYpd(rth{BSJM3p;v63#s!rvXSySalz67=LGH>FDliRflD
zZ@C^{ozU+qY<!+S#poz{qjo7ls^CKB2po>dhWfJ<xa+$0S2D}LZ`iA9?6__`Vv6y{
z>i>M(<M~r&0mvNI`0yJ|rO}*`p%9PTim{~PMfJ&j$bz}OY@y53wDexw!t3G7>)Aro
zdSmA1Zt}EyzC9_I;^CYG5y`LDVN5~QUi>W(+gp4K=a#OdtPrnigC;7!V|mwx5{0%C
zFhN+2ux^{8H@-te{o!~8D{{3^C(jx{@YAb&JOovwa@;3(cC+4LmP>ij=JujEW#+~*
zrqq{7Td{3eKAtlF+XQ@JTPrEwqirAPb8F055G1O0*eCHmTS#vYveKSi0<q<|6*r{+
z!JAd@UtD2iU)w-Ly4*^Qe+i5{is0(w*r?|afwvaojule5hL}m;2yo;TJ-5e{FDdAf
z?ym(3M*<ze&)bU{^=g>Fz@L)uN>n3|u!K-zGfp~@raOQ-dXX=|-jIwx{uf|m2N`5(
zgMZY|k=62m^p>UyFjcRusJlBa3N*=7vNR&zqcyTcqRpakRIO6C9R7@WQ1Y7UgDk-L
z3LoB(aaW>tt^L|nDDJn)-r|eexLfs{==tp**S>{a5x;>h7816fvVmfVb%(JxK}FY~
zC7OW0h5kLFtgI>Y5R@S6WV}CD{|9YDOcZ}B!U{s5-g>|jk<_s}+_`;~UQur&+7W@i
z32GICDDU9iH_1T)VCfs&m671dU%Au<*GdH8=YJi+u&w(%AdS|=+)|=ahP)IKp6{W)
z4e9;az$QIM4Kf8s1<_q?mVWuv0~)!`^Hu62`xI&O&_F*Yqr-zrRKd->*{japYBNR2
z%Vv0brz2KqY>$RpgT`xdUd}ml<KIhLLYW%B{CcQt`ED#|3*H?+5oRePp_h5U@QKA}
z8{+(R%-h_ld&Evym3KUTO&UI@F3m^U7JCM9N<qMT<m2#xw-<|W%}Ue^13=Cp>*#HM
zUAIkcYy}`72Pg)OXrdxZ(zO)IfOoe>EuG-G+erVpiYz)2fSPlj)&Z)GpKQ651<sDK
zQQ{f~dyxjhFM=gq8ne`q#`Ap(X98~U`02Z+k1}gbhM3J7IAB`MIXsyq72l^_X5jPp
zrQ}uO6%dJc2?P;XVwt3`T;7z+x?()!S$dOX6<x-<<HitkQ;6~b4JX&l!X=?7$g|0)
zsFRNlwj=PD)_Tlz<DGXc6?<TL9-9z{G!@)toqS|84I*xcIcvf_##!>9I$0@On9d8b
zkm(g4H~pc^Tl~L8%f!A$hVh}{Ds%@3li;iF84f`~m?oArXF77I**;Ru5$oFPPBKKP
z969v85%uo(3|aS@tF~`AsvRzFk#6#QmZb+%F&CsSP?S($hc|Z#=CmK&@LX9Sh_cY2
zVdxD~lxG;dBt^Cg7uq?aob?&USnQWjJH6fkh)*s>!cXG2j?QZ9@*zXAztPE9rIDPK
zd7G7W_j88!t{vtVnP)5=y2D{BbQw1W?$#X+F+b^}lxB~2<ywl*1{4CZer81UgT*!P
z!WXE$jOkYd5eIFzw&x4k<KJ6{vxN%m4MQX^Z?Wnm75?aUNrybO{rJb<HfcI*x6ia_
z*1>2AZ{qQ3#d^rWKrLk^9K8n@j#UV>x!1#|!b_1O(BhA^vsEp`t#NoHTHn7z5OI@?
zmRu?MSS%Xk7NHjlacN51(XY1WL;1gq3)|@4Qpy$yPUf@YKs@F5EogsrAu(EwDNQRo
zAKRbT6W6-DE$N62^Sv{ZzH>(UU{J=TVEFP`)DW{|L$%{FoBIsqvdgz$R1fZ?0S8z;
z_h<^H3@9VKI^$C}*4LMj=50issK1r63xyYla<3YjoR0w&BlP!s65W~hVEK_*EN(U-
zKpsB8Fu`iy%&Ecty?5N5ASCpXB=uWi*!V1ET#&uV8z{?*&#RB!au(Tcv5HQ>CrNuI
zdwbuVE|k_{NdtrIVAlH@UO*})p=|Bhe3l};<Tf>ijU5?OT!2^bv;cvHU9vhy)`tYf
zKuUoryA)qqxS%mRCWS#frrHZRv+5_EQj@<Cgn~+7sgBaiYohhp|Kv1g_O<OM8U36w
z4JIlbM{Kyk-194~yeb+=4{<2dicq@Rp<_Bh$nL;?ME`<=-`me0OS(YfIJn7?q<f4d
zb+BZb|A2Sg(9SA@GF?f~#uYF`4laxXJ9*61@l{#dj^BVra9TR#S-(DRPx9lY`cogI
z`MIH=xVsh?Jaz9m!0UQE4fM)fNjo1yO!6ONm1^7foAi_nkMC!TSf>TzdOE>fTjOUG
z(IfLi%uJbF>X^HA{wu*J*-jDim8kS7L*=b**^^Voir!ZZLh|r-SsGP>?XEY|9_Pb`
z;J=0_^o=QzNcp0;4m^nkyxo>&&yNeXc;>P9X~X$jwh-)n#dnAETNXF7D-`g?_jlt{
z|9DMBQ5_GjY?Vyn&HUPvGhtWeOo=UwSCyzvNueOId;PbPt-OsD03Ky}y5cxERRQyJ
zOEwcqZu=f$SGJ5IGmT6o-N>swRhIK$_M5zF(cLRbN!KBaJNrr`-{=_ACkX9tz1Svx
zlBDxKlU>z7=olN5(QG|*U%9u1w)Th#mF$g5vez}YO!HiH;O@+Fz?<BQEKak*C6d-2
zf9d@O%@zt5*t_4+P?zAqDb|<R1o1H0yYIzb6z6L`UOplMZx7nygr%fpq@P7gyH;#9
z5kwl3<ZSFUmmF#PJ}L+V0kT@+r(hb}&Ziqz=8#!RKz~_G%dzn;QudEAM}6?nwS)jK
zi=sw!jloy=xJH}#srd5X&JHumFDcDq=%QkcGjWF*#`*p`O7$o;-bn)>6?pA)4rQYA
zO=+Tb{smbm``R@X=RHojvo?F+VRu9u9}9=t7EK)j`QQ7(4ck!3OQE2;bPr~;`1m&6
ztGy%*y&-1xvXS;*YT+tv9?XuyHaFLtgTzJ|ATICXp1=eibPRvF-;+2TjyLnFN%E7p
zk)|G2D7%8?cjJ2$!%X<3p4JVc?WD62QpkNi@3FEF|H@3pVQ2CD^A41K$;G2GC{3=g
zWhz~(f(hc%rSxaXRU*RkCT%-x1<PqoeK$72gGeFn@9GLr1W}mb4J(n<AVXX~I!V!k
z(yhDabf)H1ND3w!AWb73b1u))WpwPSaZ4NW@LvJM7&=>43){!RGUJw4kY}m4?Rg&_
z`nrRaYxt1;7l42m788wVpa0-JyTdJsDVOpXJA$jZy#Fpc-!b%H8E<^GV{qGko#8r5
zO%I<lu=efGY3_F`lVOrfO3BPf@Fq&{{~m_%?hvoOtM!q11aYxVlh0g&tsKh>r`-3)
zW|noHa_$b~KNW~edF?@*E#we#5virQb^Sa_?VMlaM%MIkEtaasT2xtOYx}l*JPhhG
zNrE@O+Z`V|%Fo5IkRM#p0%#k5)<Vns1BG3(u2IOU0i=do%*H8}zBuSiIA`wwvBUgz
z!xwWQ8PXqw<?u$8Pq0gzHkv!_pKWIgkyDN^-ut%jjpq=6|K7{C{F85#Bz^{ci3il0
zx^8&`@lB16<zZoaD=1J$_v_mqWwO*zF>OwW)9)#f@QdX&D;~J=*b3H~f&u(BYuL~1
z6amcRvDuFMTGi>YbqOn5_Qwh`7hApmvT(}ipQkD3@o#mpu&=)b*-_n!J^3hSlP#?N
z=eB>zj-DB3INo8S8&lQmoYk;}iiVEPX=3V9T#6C)xL}qSNE5Mzq8NW4Tc>_F-rQ_>
zL-~|}uoeWASIHRWSiZ~O-dl>koKAu~D`y#8^AL=b2&uvwORaGJ8c6j}8VGb91S+ve
zm;CkzDilt6g~yJI92!wcONUGk>r?9&`vxo_4-+S)P`%GkC$lTT<v&I?OvWiN)!ll8
zxz_}$5ZN|5yD!;7J}wnGWlbwyA61gl8Vj+{5$ooV@(EaVFBACFStF|aIr>y`amhAc
z)nG*8;Sr-Cyjw=5<nD1XpZwntEMnUH-YL9)b}^IN;NjuL0TIgq4W=yK3}XKiXXA<I
zWT@?hLY}q}@;mLQ-m`kRmk)>mgqwE>Pto_+tFIBEf(eCKWyFniN%|3a4lnm>ORA|z
zb6@M7Wez4aDb5rvPKbkCgE+#Cp~bR2Z*#_nqfDHcW3jZ5bM~uJdHfC_#o2}$ukh|G
zvlcoHS@gcM5vn;W%1Y>K;TyItn{{(%9D=gjnj<*<H$*iSQZ=&Tm+_`CW?LLX_bZm5
zjC)D=w%8sR#O@hyC(D;HADN&jK{A$Uts!Q)zFKp9v*!`4=)>1CZ{Llls4%nihs_&T
zTL?uSYi~c<V=TEB;*aKm^?-Uvm7e((5Q}U}i^bzce60l?KV3n*YEOfDQk#|PxGX0L
zTBy!%tI3)lL)JTKc5H#_PkY~ySqu}&@)A-Oi5kdIaIj98tf(*m+sQYgY8;e!49x@r
z$=MrVO^B)An-GsUr^hFz_Hu=8ol*bEP^|3hIjJjI-T7Lai2x!T^x#U@Xt(dogg8(W
zK3ZJF?k(FZwEM|4qT&=!C2JxVn8a!fQ6)j^*sF@cQLlxeDIgP78rv*7q~uhqBRK8w
zTL6&AdT5F-Q|G9?QF_Ub0rFfYj;x1%M@>N)LLI4~hzj@E30e|ba~UWbCI=FX0|C=W
z8hV7#$>l7WIjCk5piz6P_DJuZvBQ2H&T5E?z<*s4oc63OL_CY?>t-o2bqU>kjb>ES
ztLa&t_NVZ!yszxBK_BwHwEq=QSRWmCafEt|xTJCac-xoqR1=%l@>U*}`tUeEj>{KQ
z+Og27n}7A`Ve&6O1a&zw9pWW%X~5F?ozh|&uQJoLLZ83G{K;Uog=M3s;P~n^Qm=*<
zQ#Y;t2G{Eb$-iNxJohzknG#cx5}V)s3d&T*fHdiCtQA{~+P|MtX=q)>EH~-ZxtiX>
z8QDp$6BZIO1cll6Lt#f(Uvz^?4qy2K2;UZPJ7~7Ioy(0MTr&d}Ws6+KZ4TIc+<DOS
z<<y}v(){G_{NS;f<MuJe8@O8;`8^x*3fDf7o(2!CwzvUENhEIHB^<J{W^2`94~5u`
zr-`sOOYkLgsslx$d(J)_)~6}=?Py1Q(iZBj!+T<^+q3Fh_Y8_GWuvM?8^kUk&pH+w
zq6#+4t6}-$$NP}Nf|czF_%96(dD+kiH}@>Q+d}53_Q_3Rognq(1Y26i0$dox=~sr_
zGh@t`2Zq;z_fhR>6CsTuIdTQ4ip|q~RQ##<HUo2AsEcy%R!O!n8odJB;YvA_U5T@6
zM17L=s5D+a<+o4rTiVk8Z_Tl>Z`|(EPR|smiFa@VYVv1m21LfJE52IPVxwHf44)*e
zV%}zzv$T9inva>DF0HwWn$IGX0^#ks8&6prmy>VoX+gC%HfG?RtQCT>%|_Yf?<L~q
zJ($y7n`!g!9WUNq*%xo7Tn>h~PHWdwEwslBs?}V$_{e@(23TTPxQ6_+E$&W(Kj#d*
zf6d5xcjMw)wwNo&mOQ+JVd2tZiIaBRmi8YGtNLL-e_O2k#$E*l4ED3fYRzSq22=6f
zk7*u&GwqxM1szMwJJ9Q?A5bqZevEXD&B>`AQef%^Yzxx|dYB|R2O@jC8d1HmeJ8#7
zkH@;)6x)N9t@|LhR2-MW*zLrTyD?M2630NCk+?3ZJao2iPd3s&wT$MnB?whmU)>#u
zX1_{ZGzf8y0Tivy8eeR@T8Iy{ZX0T=!-q89>fuFcnsiIV`Fcq8oErj&{VLv$Yqzu@
z!okA$7%SA{wK`anb&gcO{2&jXzbU8dQi>R{&?78d`8Z;gwC0Z=$>UjZ?>~2?f2hV(
zGzh%sx)M<P$m;eA5x*c&L5V3B7viX;$zT4``MsP*8E>xiB2ue4#F`%KB9amm1#xj>
zf*7B8PKAhdgO(L!hL}~2+dNJZUkoqyZaqbP4SKfXe$qL=mQpS;{ao#(45qHLfg)bK
zR~q(bXT)d|;yUZr^K(0l5Fy@`5b_1UO|LW%SvQ})^tw$i5K&Qm3MZH^BdDHrI;>G}
zUSkCQ?#Wo!W<`p+$961w=nQGLAzYi&i16wkR7k(>2ZcEJ*?nRs?Ogo+<h4Nx#6uO2
zs#cK7FLu9@Z6^r1|Mnrb-G4MIuv%fO_^%j-oqeMwcqEA9xBSzL;~%<7Aw$d_e>7?R
zo7p_)_bC0bypp12#qUQH%{ycwpW0(;FZv5MAD$gI-#JIcCT>eE`}#Yy7naHaXH-5o
znwufqrg7r$fLeho$yMKte2BE_z~3?F(MD9^@4omQ{lxR2(Bp0%vyC9s@5z>>$G(1{
zM{(X<jXIGQ`ki=lDIQ$D2R3SqM@K?`O`8_j4~2!gVJO?BX(fA>K?Ap1Y^0}R=vg6+
zT1jYZ)J;}B<~kuS<O_`9tVc}H<8BG~&@7n*kHVW781-bMZdDy1guaq$yjfT8(%)m_
zo8;$#bi}${1PbWKM!LQqUy(WQJa<8*k3WNEm2L#=DNij1uxb>;=kDSi{p?T_oeoh=
z4=`00-J6|2Alh%2#I_Ui5Py!b+EAo&-yu!1eYYQB{;)Sm9^P;FNicE&_cce+t3jd?
z)e9N_wmQ5sCc?YY>u8P&+nrU5(e{-Wd6A;NYKAoN_!<)D(^xn*16$a$iX+$vm8$5x
z(#_H%_{Lud0TdDqZK^a3KfJ$UmDXH~eM-GO{#q}oTI?w9EOuLGx4KstU}j^>Zpgb`
zl_7K{r4=m<e<<@K;B&K)wT0xmwdb8;b=A|_-l&c<;r6VAsU!H%P~Teo`kmfW_(J{f
z7gB+7)?z+*dkdg~$|tiXKcpntyLi(5ypx0e7Mzd}N%`^&lK+GKS83DAJqrU?h+Rc$
zZMINaEG&H#I^BY)GWeoHG`c*_2dk5RYzt(VJk`p5&1-Aen)O#H9#Dz8{b~C*yvbUO
zlK|W#o&HGO0_74T;y?5hLdC`+MB8yvp1(NK`ojQ9xP75?!8R@kR`~kk&_A%p!M^EX
zYLNOa`y$m}m>^XBSB)~dyf16xB3r1&tUJU$TSq*9by_W3_#Va3nzRTM#TLnnH&-RW
zBsIvcR>&9TDxzN2p4#6Jrj_UQWjf6k)*%Z8+M%2a8Plb04a~56Wx$8+moZqEWyR^+
z%Af8|iwMF;c|J(XT|FM@>$Ok2%=5Alez80hl!nB9e#k)@jVWET4OjD`f=bY@*<T{%
zy;0w9-%${C-`76Ncv>`@4srXMmtbeVY!{b3U=&?@j}1PsVKITZaW2Rj(7!b@iPJ)T
zpIeDNUYK}v$oIW218~Y7*Z#9Yw$Y(`-tQ-oDVO?&AbgKf!i~OEi7<Ih*(4z-5@@5G
zNxAmk{F-{NN8HZX&6sse*@*K6C+|MBugMVG$(g4js#r3!GEnaoZCtyboti8952|nE
z4(^V&qKLwtNxoMy4boI{QP3?u6{a&Dx(1ZqEvbx#460a0E4cY*YGn?71#0b<EG$xX
zD-13M{P3p=JVD3UYoC=)*!VU445GKS{v30Cu-7|<Ps;W$e`SrJ6PWhj5eG~LvBBkI
zE5iJKj(%%PL!})<P%5*Nw{ro%5m?o_LA~}MR7Fs;Hm+|s5tYSl!j+kZJI2C4hQGX+
z+a4h-L@WT+xxIc;kEF+&2ifD@;(skIN@fy7lsQ!5Hz&7o_R61kMmi6gF%{JpHQTXa
zd6Q`f(OnvfoC6sTfXmNJQ|J_*RhzGSKAtiPaqVR7RIyjSER1pB5R7L10EJk&$yhBc
zbuS#fDyw{qe~mYu<T24>**uaD^R@i5=Kl6Gfawo7TxCMUYlhVA(H$1VWz3J>SFyv?
z9GiiCO~%LSIL37+-ypcfrOtD(_MZU3$-dFBWS!Z$<JvhSde+O~g36{L?_`I?VZGu9
zryC@)McjsN>{2l$Wqo+Tzl5nsJ9PGSkd7ihTOOIF+=SRFE37u3?KypnxQ#bo@6New
zW1MG8QOBEa9@qLTcb`(2R>Vg<;9ka5Zzin-lIqn>x(J3LI;2p2vFB?ne(n#eXXlFQ
zoF)-dQ4rgUv4aP1u9Ph7BK<?eBWW<@_>zXpItkxR#LD^j^ZUTgUQzi(kU1D}6`BZ#
z*;~m#><%}}_PdRgMGeABi}}KrfHP(%8bfJUR0F-onUWVRyhvjydtaxrE&D{i907O6
zWg|mWZ+s@{u(EVS^~T8BnmPl-xj7^yAw!f_IyG-#DyT?tV}T$%-MJKbaX(+VMLzB#
z9tbHdSF|G*%kFB1)`|9O$4FFUx0oTLeN<Xdr#P^5%jFh`3riAxql&wkkS@!Tc=HXq
zFIso%2w7*rsD(ZNXUL0&8z6cLrl&KJ<~mYw@==pD6w&N0`;sL)7Vu?@4n+=IS8-nV
z_N-QqsXaD0!LYwYb<xLx30Bd(!#vPpx1`WJzkwh>%YC7-Q>cf4FYC<mpS0+{%Sum*
zi&I>|M!Ggn`N&8z^k;iAapeJ|-;)~Mutt?oxaxJWpo{vJQ}{BzX?i8BW%e+l`|N-=
zF6hHl7uHZzo+v-~*Pe&r#%+H-i7w!9qLjQ+@?z)t*wi!4ZzHl}SO>|RuP{moq-85_
zA!jIF3-$8F(5~&<ILN+4x++}g(tZGUPp?l>dZSF&PF{f=Q`TO`9OI_@F{t-*$MF~5
zRCb8RPn(^}vl{E}2n$Xv;AIiq*!rvPFnJ-q_V-Kx*jgPFzBizM^U7Y1xRy86mHpcz
zx!5-^&g^NEmTc|GtxcnV{ZIe$5r@-=OK;VX2{puvr!JQEl^2*i>9;ps881P|hoiRW
zeppVtVLvVw;@rKd1yl$|eyLQRoChFdYIsrJy{)QYyG)4d&!&{;ez1>eH-)?&W;QRe
zL!Q-l>TbivW8c>puVCeZPI(5mrSE@uQB0<)H{g$Dxe1&RENxAfm#jNWoukjl$reUw
zTnl+>mdcS{52SPOVeylR^tV2eZWED5fHYv8T5~sph>K;*ht_qL3{x(7xYTpi<>t6>
z>w(-A#5RqO>lS>(vA5?emAe1zQqUzKHZFeM6=FMoJIBY5fh$Qb;xx2ZffZsKqp|F`
zFx3(Ev70%_&kJbsjzTZ=#V@c6X_;GHY5Xv|fY?d^-R}e<@SESHx@aMgXUF$C7YO!t
zVy8ESGf07irCiKIKGUsdE!CSlKq>2Q{~e&t6b!=@_<R&h6(vZ$VC=mD(olWzY^#fE
zdDly${{6{V;0&42nr{U8(6sqOmW2kSiOz`$7q^n}c4Mux8jc7+jo%;k+6BNe<5JV|
z%~3V|X(K%vGc+=#3xu;p{w}O%#DN?1TFxb|uD*QtyWXrcAV{j&4+Uk)1Se-QPgbP0
zKzz2R8-EzJ2kZ&-{S5N+p~O_P*;}pIMIU>=0P}~A@5z-hn>(%0MqJ%yQ5?(h%YNJh
zagO=cBB8MJ$;dHw)*9y=u^0)^OvxdUa^pwJI?de|`1}5<BS4{ZIlZzM*Gnb!zAN3M
z#LM<rOnEmMB0a@g?`%V%2?iU$l*TQ)jOcgL4v9YqvnMmcRMe%vNWGh4`@QW~i*B)u
zk<SVicDp&H!Zq`aKp$tP0q(gu>Xqu_KbrgQWAj5H9Z?DYo6Ueg|DPQS?~A*iv(lSH
zX5MGl&AeCVIjl5a&YtzT{X1~#+q&qZhJie9E(|~Y=)XEpBDm_Htz#7Ku;3-j(;5?v
zyzWX3jqfOtM3xw(zz;^+3I4#Bhyg$0fP2oxt~s?#f}cD%?*urP_!zwetvx{glt-_=
z#npU%Uy$E#6KE>J^CJ3dLGw3nI56xQuVty*z^8)2s&CYWGN{((vY;nZJAZy{e?4Vz
za`Ia%&TuyU{hm9+b|;X2FrwNtLkIT<7)Ap4zuwBH3=9VPF+BaYYCc^5N6rGXlh<Yu
zStNVo$fnTJA?pY@%lq%=U*~;+nwW3;IW@89Cz?62Iq_sO;L}ed4F=7<&q=}tZol$h
zAcu1qfNzrWKJH$T!mZ06$S+R#>QAi~IZe~&teXWx1q<{O0E3v@+)a_U^>M&g$>7nB
zUtu_(G#0bi>A1}#l_F;nT5pd<gEpNK>c=h(LBVEKUeJGLQsi)Ker2sqkfmQ(&qKRc
zRQ^2pUz06UG?|y2pdgSE4W@MvBy&bnoe}7>g`9X4nX!oJiQ9q>G`yJ}{H-+y%s>He
zOQek{y+^&cBQv$9?^{Luh&bTm58v%`%9cSnH1!p@=4#%={A<l$^MV4VwNgJH<LHC#
z_Ih(*EG2KSx6U1{0#v);^ys^(lPitced0mz#_#RX%}`<K?eWpGO;L@y&HTLwI?)f@
zhV?apK~(TC(+su`?gkfuAlQRYqR$Oi_lB;lPOkRM8m2`zV(l+}kGg-@-J11@6baSA
zRRcq)c{OD+D});&jzqthUp(;YdHd^ht>8n&c3vy3t53{j)WN4Z2(NJVqy2b+0;AHu
zzz`Z<o8h@tnP-;`G6x$yKAG!tpjGQ$?aWh}R^re>*t2sDJcxFCpDOe!zb3Ta_h)1w
z$pfdm1XrU^SH+b-f)3>;{x$h6*)1EWoU-&x7z3uHg}=^g+phB53Y@;m$-B67iP<$1
z4Lv3H)hW4Cf6-$(k=B)94zy<$9Mv~J$Xl$Z1;)_9@vEP?>WiB~rYAzbkhX$99*y#L
z9XGu&4f$vsJfVGNYX)PK>^p8AWe+_jexSd2*7RCiyZU$D)%&jp!R@R6o)CoBX71wq
z--D{}?$Y&7f?JGiLP8&VK8p?T{qX7q^~C0`tL<08qkY8hnbn`WA?`jdpMgR2yf$5;
z(dNUWB?EPVS7VgCnUg=9%qM>c8eK$cw|MrQmfT$5HB0w&&m36awQT<z1dL&TxBD2x
zFOOWd7@5ZZE*bYa32w3IuhnWcA>vhg?MO~utH$QEgLC8Ve~@?(x<WkRlWXSpHS?5c
z{erBlr6jt>xJ5RYjvJVX5#H`C*e+_Bn(^mC8{Yn<s-fH5Ysh0(@Zt}Z6)~vX!?L8R
z<bvxKXt#6s@u!kQ^_CUy<=yQIimL6eufBw=PXBXCVuHV3IK5kOqWtV*&jp``+osRe
zew5tR6SR-~Ws>doFYx3gy8dXza6RAR+3FrR(R*ul-zNhwAq7tO{j*tXcUix@(@_r<
z&P>nz@$6h;bgN~KYICx<JXF~^bB4rnBY-}1<<Yy6L%a2FN+o_~%}Gx(M@v=&FF2SO
z3da0MBU^!KpztuEJBqU((k@#be>r?obyj}oO6~LX?M6%B;+>!0w`>;3m?&L1mmG5{
zucZ5IggG3zrLP*5o`TPT(Jb(==i60YTj@`YN(Qc47dDb+3cVM1n$|}{%N9O22mcB<
z;w@=@xBdIjNv2?^B5p?5Z&h`p>1N9;($psrn1GeHs~X<cTX1`MrisL)r^ffn_)S5}
z5Oe7K?-rkiA1B4@tIVBOrc5@o?xklwtB#rSvn@!<*@D@5J5`&v%bOrz4mNoBsu0)N
zBa!7E_d!-2i<p+7-LI8Rp)IPLq7QfP+3#guRb7G*XeZJ7XFl86!f!7~z2$*%?7)v7
zEt%N3+8|DKUOICBo&PjAtwE-0+U@iZF>v)po_De&plvj8A8|0wHkuw%+<Rs8Bxzvn
z;OdLv*@nnRBNbqhf8N5Y0*4kyqM4p2O=p9&U+z6?%+DBqF7orLE0guv-qmi)oZ-P|
zX796&bo&dV_eZAZSLfX0d>JdJVgH^ZCosYOkE8UGOl#ky_j_M0Wex)2{XhF>MrVez
z6}4-$zv$GD-Zl#@$U0oT^0^{=cSXGPg1Q(D3<WHL{a?%~Hr+|x+a4wV{iO$JYW=IH
zKGQPO=k`TpH#!tCOSJi^=8CDq^6!q(Uf3l5-qq8&lk_>Cn#<j5;PdAV>#8Mjt%X?H
zf3tx=|F?<s|1$(;8>my;EvQv5Iv8a#h$+@IVoT8JLC(5b#|?beP%E<e*}weYYjM08
zP}%jR31}XjuE+TFSp5wHkDSD^{qT*-we&}bRIR|hZ=x*G4bO@gy0n1n5V61VMid-r
z!aPw<KDbXsQi%9_m60(h+*kuS*CF%YhXbTP0Tm*6&vE^rNTOzPk!K^87h(!C8U9J;
zHE=V-{|Kg$2j_49DGy=vd}9c|{i$@qxqQ^;HLF$Tvy5Wk3dC&IlC)gKz@hBt+P^gN
zrFQ(I?>^!+(Kc7l`2`qzw0V}E(JC5#TA5HvjG@Ams{PKr({^CWFU6_D)%EiYWB54v
zZz&O&rij<>ub%-YLnG(eqeYqN+Jf&oYmWzk#-d)e2Zpb<C47qi`7~c+Yx}&~%T)Df
zJ-qWLO<8mzlUKrt_pZtDiz2b%UPau`>hLkazmw0j3o?amS9gjTTqi!|>r?!hiVDtj
zC_OtWNEtZ%#M^!9m)rB7`x*(GlAK2@XCumZPO5I8)Cg&6A~Ev9iKasxo}eQZU$+0v
zA!PuAt33-EfQ10whT}`mYcrrahv0+HIH;}%V(6}=(y7C)VKD50ekAZ`gGr{Ah}Lr(
z3m@{m>)o9-eZ(E(`A(anf#loYQ^4#7XalX3NLbZ@NJz%J@~UME22>dj>(it$nV!Y-
z8LJ_p=6#nTR<K!CZ;^qKLZMiSn8pQk3@KC4y}?JZ9Nu<_RMJ#05`%#QGu_x-r5axQ
z@;S=Y%l9Fm%aqPxru&W!czqa;a(hwa=@YNKr%YaY`>QNSy^fJb|67|+%C`QKW)tRD
zoa?}2a{{rOb(r+H|1`fwpCVfKDCjgOCrRAc|H<&k^~JKPp%y<n*?>`h#s&-Gd%r+k
zpkVc{(`|pf8GqN}P7<`1LPp^b@7hOVvov6z6BC#9eZk%_A3=(WO>4jmmDp705a>kg
z4|}La;Gdsi#3GH5zkg{y&Qu@TU)7w4FuvRaZUz~fReD*U)rG{2jS;8m3-WIbhZP=y
zl(o12)D9T0j0D8x>;RRF0whL*KC?HH+dS2#<Z0rY!mW<w3}e#=2!>QRqLI_g=|<IW
z3)>k5;C;nMGsSNTu6<ib^IxY0=iLx79?8@;CpJZ7<MGF+V1f{XJWUJD*E?a2k7{1I
z95Z=7r{>*wa_s1{C2fw#aJUiheh~Oo<ZOdaxa%|q6;Ij0jF?ix$}{6ZYBzVvm~1Zt
zQKvTuE@D%q+z#TK<fGw4=m=0A=##|;1rhAxJ^DonnJOrSNDB4pLiWi%@q>-)kB9eU
zX`$@qUOv+otkKN=<~SZFFOcJNO618sMrbH45mD=Pms@O_HvUv-I|0R3@Q7@}w=__Q
z+rW!vWJ>sRxc~gO*ZsunCv-thq^x51+WvrOdBZK9lX@KaHcV(_Y{k>YGq{Mf&J%6l
z2^}K{f3WsABFihD%$wjUr7e=^KDgV<#Oa_Egn|e)kc{_Rdqi5|)Q`y!RXa}Jd%MHE
zwf@h2wsFU?AmD#fu!nbitgvPlY%?5OK|ma;E90a;$62o@=^Q~yRu1BFhmw8;#b9cB
z5gh7G1%{}m@PLAvfFG^I1MG1T*T9JOZ35^Ik4V6rFxS&d-kI&WLRsP|jdvfmzS^cS
z6HS_f-!M<+Ju!K;8lYo+o_E*!Ck9XEUwY?0b>1rtGjI8?Ueq}^$8N`J)tj7m;?0B)
zM@{5mB&HvKDsZv}r$K||Kifv_PW&7iRe+BV80<*ImXS!EVg7+LN_P0mY9H>{&C+o_
z=5r$E$Hmf!Geia=V-2DS94NDDu&z>dD!No;a&NYwsd~eRlqJUcqN{27)HujYo1U{J
zG6k<Qy--W!NAt%DyIfQ4i(CeAriS`Os%L2P=EV{5sc`+=^Bg7jRpB=G=%zu;8zRdM
zkxifKzSO@Mlc%VL1&rlmK1BFqP%x7jJN-Azlqm$&MUyckC&^tSMXP$v3Q6=caJObf
zmm$+Vdn@1<Q?aM?itzoUVY3ubO36UR=d7y7z#}O!rH`COpWCCAs*X6p-C_u*yA~Pp
zC!p?U#;odd%w|7U5WiI<2I-oA?APRRvvzZE34wxLM`yX(rdQS8&i4!Iy(_X3DW?b<
zi2Ci6Pcl|a5D60Dgxs`Mi=5D7@J);Qw$#+7ORASOTF#)+F`E;Yvr!tv#8r$mzU3wX
zqsiGA@{W{-$Hav@0mkHA@u2?h_8c3@S@00zobsQ~FEtw?ohJvPA&^vv%tgJj<DG*I
z?XPT;#sKU6f5<xXcqrfR|Ie5h5ks~TMx#=aB#OaA*@~znWLJ`8H-^SAwl`9i$da|}
z>&VVn#!{4hUj}2TEQ7HR#`3#;9*^H&-+w*a=UnHy=UVRTysq;^Mr7-01gf9iN6ND{
zods$Ew<k=w3hTCsx2t+=jScG&vG@<ak^(nq)^1ub+oM#i*0d~8A1pH9ZSixGF9_}M
zqctQ(7^`*T%;QLdUz7fsJ`NQdul#=vFl^UE4y`laCx635)w*9|t2Q#&uJL3b&Zi(|
zzaSc&*HPfl2|7BcB%pzu=Xm11k)&NCuB;NWebQ&{wzw1oTV0D*fK+M@n{nxTthjOv
zctMbB+;wSVr1Y06PB7`@jG+}H7*s;XcZrRuth(^}`5KjgOmrYr%B%tpJJ>-;|1aSV
zr<fo6<l-5{FDHzc*Cycal_C^3MVY4{jNSO8YijKBhrA`AQy>2;{(0vkgd{5(^mAV!
zFbNu57;o3zstjOF*9`VFD%wt4jZFUov46g=HFW2#$RFqP*RJ>Z0Y%Q_IRusM>unRk
z->xYg{P>xkTz`71^Jx3_G&`3i)Z=LR4Zldw-2r$5E2qG%XFf|_S1e^j&08sSDnk1^
zjATfw=~ZHR1lo={aV_=Ns<%qq@^hOrsE>S(q>b0J-{h%ND4G*%DgN&`3FnS0)&1|C
z3-5@#y8nxB7l-BBrsnU9;Jr^=yGb(h=-2v>1Zh{|FgAw@2ua>~=)-kgUILHP9K+|K
z=L_22OS_*6Uky3ly}$&E-P8YxKVd7VLG=9`_&5Xbxio%eK(v1A)4{nN#w9dMo><9`
zFwWucg<)+rxB2yy$yXjg$Tu&EK`G~<dO@E~PPHB_)_s8N;(bcapP6T_OmZO!nQa1~
z!&_dU67fEOD#ox48Y9?{a5rC1J2)Xcp^vuu=TmgQSZ0#tQ#}l$MCYex-jcPlG$SqZ
zFET5L$QmS&SYoe66+M!6*DafR>&ze*3w{8&H?|4zrniKr8vZo9el>HO6vtJey8kr2
z?iFN%e#3D=gVYFa2_Pl_tDLUxP6PCBmJ5a4j{C^5QpxZS-?JoOpY6(jt-9+~Y_{KT
z`nsAwaYdWgo1}Hh#cp2dgte~UI7lZ6?%j4hGR3pZb5Yf4o}KU|2=DTS={iP6vYc|0
z6cikFZ3(jY{Ff#q&<KQeNmfA(uW8DD1@}Nd1zTJaKI1@>mT=TdgW1_TTFM3)yNCLM
zk6vpDhC~XMR;3i@W@l7SrU^8zdK$ppShE%4RB8lUJj0l~><e`^YJY<>zy~|W=Mw-k
zxxzviR^L2-=|ky^q_9c^)Z**VM5w*Cu-Z9g{Lox}$)nb$4@0}aI^n+nYsX90TS^5G
ztk$z!=t-wUAs|jB!fW<S{Gqco=-gxj_~eUUbZ_QjQ>J-Tr#xg=BPxYgNvdUf>Z~@p
zug{->Nbr~{Q2!vR_OJ4f*SAv=M?0$v%~OKrKN{C!6Yqs^alEo5j(|sm{gb8^Xn&?}
zh=_ApiL=(fJag5=Ves6nLy^leGYEV3thXWe+oIQ@*M3-Z$~=_<CwIwnykg?_039Ok
zS5zD?$N(hy`_J0+n3t`pkNG*{ZCaW8m#aSXrn#baBzy<G)uJ=|rJN9rcb7OQEU1Nl
zL_E9bqHno{=ne~}cepM2`i2#(O@n)lpM9^3El`?$S~>`7R<`zN#d_9}!6|$)bnOIg
zIRJ0RtZB0Ecl(ySj(|Ps^-IYJu8Wg1ckoJniAS_@N{3sEreB*u6v2``+ZcZ}&Y>aj
zIes~_xs30{uv}$ZZ-%z4XJYNTtZrFKuJspKb;?(R<298>5LIsy--Cg3|7*THl@rE1
z5CLZ`mzNSZaYllZm!CqJ(w8NLP?Hx<7L8YF|D?dMAN)pRm9L%7s<#bCMCEomGF|lw
zg}4$4j^P)V=is{^oJ-vGIuuiMOZUWr`#J8|fHoZYdqJtbsq8MD^ZMxbi=Uf#Tepl8
z{fO`wW|HT%aX-=4KlAfmW1SeIRnF`W-<$ji*yu9V@UqQt<RS>-Im4Ro;78{6pXKe%
zvak1ksieba=fc7IQS|KPXASX^*w&lH@k+^<4wBqWsg5zo4z&YvRXagZf-Q|Y$tS21
zQkkNg#b>92bk4u&H>Z(sUj+!8_Z*i+TTlGEardSI9@en=0BzH$D#oP7njm;9!!xnY
zug6{3A;lpXTl<GfIyVt_Z)t-QAH?{gUfD~sqfHxHElHWYuk`tehh?sEb0+xHc2w5g
znU3xRbBa=iAS6!jl;|K(iK|QTtnuK>QEB?0y|drrAvw$To>2GHE>pOTSN<w=*r6Q5
z3EtYjoCFl6TiIwzdjrsp*B-@w6>nk2j$Bxic4wkaia76hjp#Tm^MI=L6-bb<F=b$Z
zL>+~KX7DyA#iStr$gbc5wT1#I87`E~$+{?%?PDQMHG8KpY~WqVI&T(zP{|JWErasp
ztUmYB+7b1Yr{F&VcE+cHPT)Hi7g&UNU@hr91h-sTcbBI+UQLoWTL#CZUo?#n9~JCR
zSWLoIG+n5=PT^XuLT%5+OFb$%FZd{N#|s{54ct(x1ejd>+t8f}Hsl80)E#==YZJ08
z?ZtEm9@qP<Xzud88NZx;>2<OrX$Qr<?6rgP<rd|Xq&d$&<t6GO=9q5vhe&f+U!=i$
zE3sMtDRD)wY*!wsK$>3Vu;eUC4*va-m>_h&=Tu>Rj*f74S-mjN)Ktz!95$rb2aoe2
zp?b_RR==N)^BA`jY&1M%PkDqVjsyE?Efx=o3=@~9>2~6&CksIU+I1{y=A!aW{==WG
z&1pd7{DLUL(g2!vF9J|hA;W^q)}%iQNirt&OeIHyrN&&CR{G^#3qE=WN(no(u|yhd
z7xP)1zMujyPGz_d`|Nd%J*Aon(!^&`r>eBLiSL6|?vBNK+ah<45ulaQ>&^>>ms)>5
zC)v1dS_*O2OV0Nf776u0E5HXK$b-}6qwi)d8$cL`ZSel<97r2u+)^lXnY97$#3rf@
z`5sqx{U=GbAu6r(oBNyv$^NXh2=|V`G7p3c)ag(joP;#sUba+A0%4t+0Dxv5=+M4<
zkoo5GBr6us;soigc+`1;w!wSL;+z67Ch14GW!V|o(WKTCa?cJBIKV+J;ipOMI^06v
z`A-A@EcAaqdpW?nwS|35t=fb9Yc)*3#w$A5Q-ZAA+UU_c{b$}QHepk*BIhGEDD_Q*
z=vbe_eh>S<{9Tk-co5I*HF?fp6H~WyC)rzA)h<XaXK1B(nhLyG<+SQa9DnO+dTCea
z>)o^|*xL<+#uzSJJW=@DyN;UKVAa0XCaEsb6bah<mKN=iUS*Qm8A<Xa<XJech&O~f
z#zc*mqKC<dsobnf|4Ic0^4^E1B44?uWIvpiI1~WYAQ5M=qc7T8sK&E1%KK8VphOkK
zu(RxlC-HXc-M5h6;LK2I32SdY+b9BS*`_MJHk8}?0uVlcL?&8MH}4b!<#{4-9U;Z;
zq^u+qc0SBuU5+&*(xtNHsgOol62u57<@FXRtem3Sf6h*xc{RX4ZJK|aq!?ts6M}yU
zhk<7ZQRkYNXr2M0IT79}wxE*33+~EOFi}Bfvoh7bG{G@FwqO<6iYZP1w&As(5-6^<
zxQ!ob1{xX^(H)6Hh<xg0=1305Dd+icda+W9yO=CMxXuwSj}-lDMBI7mT%4n2s@72K
zu7QU}8mtSb{tT}hk@h_Zzh%EG<j(5}ef<6OMu?v|B$mRTBjNG7-zlKQemCLQmZ_S=
zHnYn0^5Ey55c3vxyYv}ZsXnjb08Q0l`G2HI(5<21)Z<zItRSj^>L0FT5i-K8q#lqB
zy%*BUPmfYUIE(o{g*>#E-!iLk^UGm*Q&#;2cI&Cb3OGhcfSVAR6+i>%<6?jBwF$fx
zeJJU&z3GtsqqzvXi!>ExeUxvH$4axO&3NlJRB?sOPV+*jx-X^}J5RZksNvG7?yEZy
z*5;iX>fF;K?h?u#hQT~jqBTks?7dBA_pf7JTW9gg@vi9(UcKK64qg=PzZK=MkeS>~
zRkWFG=ENgI=^I&aS?dJC^uH!i!Ir<2&d_ddSr6oP@B^Wq$1K}^Z5wAmUdqd252X|9
zq;U<d-T?MqoH9_|dRGZIDNnEQMBlxpz&tn?D*iy&C*imo01om`hxnaWGRc)TI$GS^
zmejj6d6vlh$xH0FxQ1PCk?z!6I}SnBthSeJTC|`;OT2pF5kpDO!3T5PW%AJNfsnq!
zTijp&80k}5xTjAc+Gb~mv2BsAQ&h~hUhwlW{~T8KV3R79|Gr<vmQCu4F{`dL%@*aP
zs8zn+b>@&7>yYBA3I$G1X0Oi(u=WLNz<rJCKyEj|ZTBnJPf1vTTsh75St3E}Jo5Q7
zC?x~3$}_%m!8$XJU%VkEWqZN*IuJiuLuLwRbThx;)=mS5I7KeK-$krm3}SBnl?=s&
zAj#7{k9<A`6h!0gZbS-K>?%J_a|F{vCJ(`7RcgmuN&tG?+NB=)5!Tb;`j3(?s~(UO
z^t*Q5U9ZJt=B)<ZmisHc)YM(A9&{%jy+OhOTPT)Nvo$d_`}*%{^N^8`@@6!Y+#?RB
zKgRy8er=qsz)bs6J&;+?E=j$I!zn8M*8_11*Uo+9QOAk5AGr%h^ul{A>iix(6?ikQ
zgycnuns{@j!eT^-bwx!gNJP81#jhTYhhJSP%bxaZ*Q=lcS^0dMYVG=U_`E|nWMW$w
zBNANbvsgVbT?E4XUFg4`^>aXRCP~f~Ep-CqLFgLDOAv04xKVL|>VQYZLao94v1RKm
z)5DD}c&Ua&&=BOY;O@1EFF@b`()f3<K62veWCD2uAt`+074YHtj3V|L$(izd-TjhT
znTrT8m-FOI5sf2Ht};Ai;b(C9-NMYzNrS^|0co7GK@-h<R`l;POjDWBg(Hy5hT)KB
zKq(~rAuuYXS&F@WM+Dp7-&tc1Z83s`t+E)Vd|%_I;D65rV#j%TiQ=!ZZiO${N;oQ}
zU>AclC_k8Y<|B9rGhc6fM;$754>T~pFa!X$UR)fyOqrB@AqYYe1!mlB6Ij16CU8bE
zY8fTP)dO|yLXCNzDnJ$O>>4)Ba4gB2di2hyja7v}HV~(T{b_HOKIn$TQXV7uU<lRW
zj-=I71W)H2Hx(4U+&b2s4?4MadJ-Q*L%nXc1o}i67!F5g3U7XyYdq5IzpW4a8q&vS
zWF4}mDgr%1`1>cp?pE|lKJGLzhg#;fZqQy|v?|?&gySYya)?;D@J9HQkB6?}mYHr#
z&<j|bzP_5=5as;Fu`d4m@s#T}916~PxE}%X0x_Bie@?rfe?cM1h5TWkw5$$n`D^|+
zI_*GWV$QE>`bL*S`XA5fo(&ta=2=b|dWwi{po(l=>rX(awwoouMzlkTljLebk2jT%
z4&mII!psj~Wrq?^(gg3tIjJ$>mb>}5#b7myGudO^7+FXTIvZ%CwX76*85J%Q1IKE8
zZ$fyT-j?M>NTUzMT8vnpNw$wcL>KO=X+}D|3xYOpk$~O+SjUsUEbfppZXM<K9?^o;
zW@jV?YQ6fQYtpj<zJv1Iet6KUhUn?${aL*CONhx;z0kh6B&ls~xiU$KZCH4)ukCBD
zkbqeyE0PDCOR`W#2H5Ixsy*(>xn^t3Xr3zGHEd8C=?}U)+5W3@D%(`xY=}Uoibiu(
zpz)Yecn%WbR(Lxo$DI%Kd+ZOZeE+12sxuIXovgEPxPU_yCrJ&d<iS~g!YIu9cI<18
z>u!PsDPE~VI0(&#S8Rx4Zf$wo3HrU!75^Bu&D@kn4+&^aJJcu}ak{OcB3JpxYFjPV
zQZV_)^VLO>YhPV|m>h~niji#C#Vi1+tYyNc=nwNDc}|s^DfHCKoGtc~=R>4H{}2hj
zoRIHpkza?~0=S);B!ON6f&M=V+5bF`DjxU?7(t}xh@W4MLoyZ!UeQaa8tpIC0xq`#
z#_(lojrKPM`T$SlF1_E}O{GG!6Wtk1v8cms?k_O<X*nf00oypaIS^om3GsE5Qy|Sm
zj*Vs{A+gAlTOwmoJ=i?=NJGp1By;wJ`j-N1*1=+M4$f_$mx6Wv!Vyz`B0)3e`lF7x
zSB8Vke+QHf(f~UU#8)KGAL+aPx5x4%LtZ(W{A>QNJ~0A2++O2cx3#{Kd%w{k6Se4Y
z`D}5DhoMr<36N_?Y4)5qeHduh<?{mqsreO+*Sems#X1AlP9PpxJnZG`QXaVIoV4(P
z{c4`U)%o8#gO}ciKEt`^<2Gr@W{~OzByJ1BX;}3NgJulzOeVW!o>0)XDjzVutWm9M
z-f$6e{L#paXx3Y4K;E01yJd@e@@aHyK%+hPc54Ko>u?2ZGnya0%}CJybuDENt60-_
zrv|s7NPBY5H3H4uT~zgEp=Q{kPGLFkBqv~r1+mdwR6)-P7!%%NY4iRuy%{{}-?g-}
zch~3LQr{o?Sb>wzMt!wwp>C#PYt3IXlvzKm2s`|*zuudejaw9p!O{!p!^0M+H?EZ9
zu7@H_Q}4Or<Sws=q4qG12284XA`$sVaokQ@lzH{sA>8$Mzu*&^^-gXNA8ZGkDQskV
zeWrgwq-jP@Z?oCuHdgc>|1tm~v*x(cfx)d)cWQu7x{R9&Z+W9vPWBkYWfDix?OQ3E
z1lP&h73u~d!p&=<-v|BC!stbW`*8C8`;BJhQj0HQ_y@9$>BkK^iI_&_1@buz>rl<E
zF1_~&)?dq|oGO1uVNhs5j=5p}#?k(PA_9UrBHIys3jPih5*LURJ-}F<V(R$s%2qn=
z3SG|$V_KR$tQRM&OCMBF0?e`@yk_)j0*pV9`|nz!6=@b`cNC&&O5Pe-b&K?)9$5AP
z_tNkuKsRwzvA0rFl)ORcs;irj3cK1foM+gF!zfW{8N@3ymW$nHfE&OdJEErmjlvD6
zE@{8Boik2GKVU4NDYXQTiHk??%KRB@WrLLo<)MmIXsPH@it$E4`EZIuM}@ayriV8X
z4;TR8&Hr8&W&QbOXYs_fu5D#`t8&gsj^b^zI8JzjK_}d+!S1vtyU&@?=oIpVUmm8Y
ze(!G`4!t!zzlbK)G^fY{MmP|2R-2=@GjRW1lgV|zKm6dRn-6_I(jccR%zwUQVN8-B
z(a9LSR3dKJyG!?QtQqrl5iFaXxc{coL62CcK!5VYH2Gf*m7YzbRVLr@1T1nQ0)+1;
z7H;hhjVl&Z4-I*E9Mpl|9;IS->DRlUX<$Ff(U#9<T74aJ!_KOr?>^<DPxgd|FApHV
z9!{RXZPA0D4Pn%DiGSnVdm|7Nu5suJjQi*vFuBGXn>~+~eT{jTC=d97AzC6<;>5?h
zX0ACH-rqFdgCL32%HhL+#m>7nBGZDxp4HUqIMWS=81QSwIlvRpnWtPza!c>kY!Hi_
z_%QcRzwTc$NC*L#Wee*osW^x38tZu!U>J}kbgyLP6w;G*4v?vJuC3Ygr-Cg~EVquR
z`QOSp2W0C~4?QUR#Ek7>q<t#pf0I%6NM2tYT4b9pXA>$&Ro;qoksU3~3N=$~33a=r
zJq1_=IL_3JR~e<^UI%@16es&{z3Y1FZoc&%zx%(@O&aJEiMGypbZf_z&}5Q`{;NAR
zeW~c=V6&mm5@j1%oplb{A<=_Q$e}$<Jz(rKK+i>YIiSmh+6jtCSe6f_$QQldyfS~V
zwbjQ)n{?`Gyl&q5^)b4HT03)*LI)jwxiOA&aPm<5OS;q0K+H}}z;v6vG??7KTU5QU
zl_{BwUS0ujIcVeU^d^&^3p;aI0$u>g1EvlKL=$t^(x*rfL8d0(LGBA^amzj?<zt>Z
zGhmA4M>6Q~5BlB03Utq5w%*y5w#sdM*9y^=vu13vEp*!<38G!3BQ`NKu@y@SsyI-<
z+<*R-+)o2<p)6&H-bWKnX@Da@5rH90R?JSQXAx@6ZjvX4X;1&vuIxG)Ql@U;Ir?cH
z1-piHI%ZgrCPkH#&KG`&>E9gduRp3gB(BGCU-vN^8dsaZVrw=6%@&i0g*kNHIZKfy
zskYdy)j@Qn)!+{NiD3gf-poF$g4t9fn+5`$@*!IOPTahR&NLgX!pM=a{j~beTa4jm
z;=$G&#v<9f#q`J)<Et1t1yHrc?h}G-4SRnYb`uY`7{F+v9AVIzbt?nJtk9k76ZoNu
z`7tabAb*31@apecsa9hUCg~I7{K6KelF@S>c|OO99YA!UyW&u@^6qI(w(EDk3Sac^
znz_0=!1RC7yXvDO057OTrrKH%X{#$`nIw;jt|_?LxyhxJt+LjtaOAcz{dp^&`!Y^x
zmMJ}7sf~`iP9fH0OUWd<5pScYtJH6<Q-X&35;MyEuez#JTeR2l>_w@TvUtF=0043&
zbS&Bq8{#kw+P>KYWp+Y2!-zpBs{ggM+efWeJ`M?(TTf;;M`V{5EdVXZQV|>Zgma*o
z=!o8xsu!l{9{<l!EXKq(%8}+)oL^`&LAyQ?JaL4?LG@oYT^tQdDcBuO4w{f760`re
zD4#hVNA<!(gL~g73?iW`ib1Py&?Q8Gh8pf~(UY}P`D?K9VbK0=PXm-N#gnf0s@zmB
zyQ=XvW?)@;LK!;Rut6*oUmG@FmFm_b+~Gl&OTB5ALd|#DTA1{|ass)5$Gq2W3FyT`
zD>So0FqmyRdXw*A!nj@)5b{|>Q*6*PTeEI$I>xYmPuN0aVMnilrdLm35b?GaoK$M&
zWJi0*XGW@?FUB_lqcLwbdW(*s&#pA*PwC=Og}E3DNmjF!SahW{l@Mt*TuBrgdbWlf
zoBw!^Sc(~<h?+{#G8q6c)O%ITePd_Q2lP8NkKlM|C8ei|aop*GV$+q2niQP(PN-f{
zgQD-Q+~6d}?a&*txQ$^W-Zt}EMl&XOx{jo%Z*W6NjI57U+<C-{?cl=x8C;c_o$y4(
zavsgS0fXL(V3NDN*?@81iT-NfJ3WEIC0pQ7p<D0%b1Rnu90Bm_*{GGWgo*J(<$fBW
zJ_T#$t(e^{%$}cGXK_H=ZzpDtR_@W(I|3F~rp}rj689N}*>H?r96B4|$YXX~P9HId
zMVcOv2jo<YhOY2XKZ95zu8g@^OR`0`9j=5n6B)#s{e@Cv!PHtZroVdya4H0ho~WXP
z=y&xW2Df5s4ycsY@k+)p#i?F+l!tKhFkxbFa;4)#L+S)2dBVZgyo=BM^HRas%BJTk
z+6jlP`WcdCSd0?JJTRnmtsF5*a1)6K6Cs3Pp*+UI+_vr;;$(h}cU73)9lY)FU=>ER
zbgd*rBX==4$%RrMPXD5M%bPXZ81!7kapR6ATG$w^hP{I;OCI0p2ee(vKVl~BaE%Tu
zI=**mGL=ap0P%MrUDeW&)^Uj7%<Aav6@;4@P#y@ueVsgnE$V=M6L}oH8G&42gcsgq
zWY<#hO4+?k75Uj6EOC0C2FEM52ylabM6i_6y@H*@4Q;IKx)HkSL2@Cy`)|6{7TbYd
zZy*vIy2VBW8))Xf?hPBLmCiZz(#p!Ob|Qm8JSaa>WH5^JOlc2<-#M<d(RF>@cbpAI
zZ(%@Qy0k9*-~J;dl^U#Kb;{J)afglM3Dl*DOO}9N5cvPlwgtDN4R2}J%xQ@yOW#_=
z8YHdoY2A0LPf?bA_xLeC`&R2PEPe}<-a8h>>-H#B(+qJn+4y%vQ3>@FHGNc2$s9pi
zX^W%iz04mh9}>!kl@_4(x<8vO`l5@!Oc*|NLcdwsJ>J1G2`awM>7BVMr=1}#zLVhI
zPR~HybDRHS+i^&XbRTG+|E(<^-Mv#|)dK*!dwE@h`vAeMu+qXQ5g)<NIEjQqIXi<c
z=LxeFY>nqJ!aIX27_bTvR7}_7v6d3}zDX8Mj4<3B$WV8dYDAsYQ#vx!orG&$PngI(
z(PdRX_VUtHg8=T;6W{uT?v&3s{80CsV*K7#oU&+s?5?`o)5CW&b)tc;qQ~RygkXD3
zAJx7v)v~@tAJ(je>pwhue=fp7bQxe!zsNm-6VcG|FVf1aKEf^;tXLMxhsGd)HAU&2
zO=pHl4_Z8RqcGS=ibpIv%QORyS+<=_uu(4hG~LZ{Y@Asz>7`?V^x4iPNgj$<dv)Z!
zl-3VJC+XSygwln7-Z|to!-Z`e*hZXQd;3;ARXNp)<EPsNw@X>bNg0_U&yjX!Q-#8+
zWQhc~@^Ms9KS$IQRe}0hfAE}^mbZe12{kW+tNH`rhefa!`E;--QcvkWC8Z6^vpW7F
z7YRw^Q>$b*I^N9NKaJmb2BP(x);r{zgvR$~k|eV~&6Ql+OM_b&vFGl1?SyeVp5rK1
zn@*Mh(uv4M>E2m~(kezQYx)AfQpn(e?ZNdfSeUk*XaA&MDF`@(3bwTu-&2wh(Ayk0
zSToHW;!yU_%r6gkgf2Er6+buOaCK5vt?hcZc6lnMb_eapEl`Spy8)p3R4mE%@{i)D
z%ie8KokBc9>b*4uUBMIn@07@iL8hpkTI9aW2K{xiO;?-vyL*8+i4?3{<Iu_At`t4E
zo@O2(MRDm@0UE%1&i~vS<%XZ!fX>Q!H28=9FWc^9_&w#HAgL2~cD2Gv5Hlb?v6-{h
z2yy0Z@qU`6EKBN9-9dEGkeYoa{l}Q2ysDtHU*Gtnxw?t*w0NunhNNyKi@VwV74=aM
z$o%&LNpl&7!Jf@r_{X}r_Q3wb&;|pax{kkQYX+1EoJ8v9<2m%CV0TKRf#zcx2FYyz
z0TTX)K9_j3pBqpqgT0$_O`yx5r0)Wrjl&>N+NX0fSC|>Y59Siqm%Wsj(;&pepm3IA
zaE~rOm;}XaoZu7%c_Y_H16HB(O8tdBl1Zwe97E?L*gd3u7#oJz4=!f_mbo^b9)Fst
z_urL!1sAxF=*~`{b2AFN1D^i!pDs1{tr?wbIAnzwV%){an%w1mNep-%Tz*kYb~kB|
zv%YDm$|kvmwb2Pwvm5nIc{2}HpqFhW8&Vvtgla1bsuQcG4GL=x0xTZOs&@uSt5xl>
zkAN821X2F89JAdaMdpn|+qW%ICEp+OFD;=sKh~S-W=CXtO);gn8_YW)L64Y>LK_W)
zkir<%?P@aBg3r*W9V!j3!z+yUf<*8P9oeEZ)@l-jv{3U<w|xFu-~H(`&7hvNHGNS|
zHLVDTtw#MD!IaEgJzb(qp&^W4KFkQxS|WK`x3mXFP|_);b_v6=rz%6XO%WE~Bv)TV
z1OT|xZV2tWVYN#!6;Nk)fiw7AzbW5I8g`RM9`DK71yP}^Z{7gO?7Dpc&g$13P6@+4
z-1B=rG3iR`{&^>i_E7Ov8i_5BgU#kZCo3$;eQ5L7pnR*K7F~9FJ#ho;jW!?Ga!vc&
zV}za%_L1uQM`9eUMyD|xTJEc87sEhnCsdx6B0tIF!S(e4g?WQ|O`8#~ZxtON`|ZA6
z?w=*u*rqYYTP+^1HxZn3M|8F|Tm%<lakO%a2lc$bw!@~YV@aOTZKKAZ9Zwgh1lye4
z2*Q>rpYIDOz4Q9Bi+0BejkkB=`9M>*!|Ki-Zm2NhdH63OB7%TYdb*rT)He(_;#?hp
z7fG^rts?rwRl0P~BSB$iDLF_+%h;2J;Hwcs6E}1IOwT!|3BKRVREjqbi@YS_P%>AR
zTbR9kSxt&Ob8<X@4axQaj^$*-L!$y{pW@DXH5atcqc;50W<QpU5o+a=-O?r7bxXF1
zc;6S!HfGroKsM+2qm4tb(TxhF>R(IJiW;tcL`6y;_<;6yBPDi2LI-eS@#GFXKhqhe
z*h`zuUp7F@MqKzarA*dhqN&#^>scB-CWliWd<dR)bVu|RbzCPwb|S#!Ka1Ae?>r^8
z*-GCs#v$^_&z^D5$fEb`^SV!8xR4BF@G^~nEX68HjG{^TCb$a=?C*|kEt-=#@xOy1
zPC-=4=GQg-7Ne_!eGPR7uCsqA16R#gVSmkAgH&Ye{R@kPFTgbLT@QXj$J~@=PH{9G
zIb~n5lmvfUUw${MlNhP)*CzW-%dCMW3Uaz=dIS1O_3H?$Wv1sTo9y%%)e+Jy&ks&@
zD}_6t?Te1a_blrFDYQ)8@@`gXlw&?jdeI;j9U_3ko`>iuTZDr4{`>l0yuc}rGiL&j
zLoJVH+;jr*qi<%-sz4*uec1|UX%pDXH?!{^Rg6O^(sSU#Z2m~Uq^0t=Li^Aehs%$(
zC`b<JGkBIAhqVKExXK`O6=rkd<AU@b4r?Ehobs3CNCQSO{ya*E(D~YWx2?lIHRQZ!
zs4tt*f(!L11j&0E-d(m~dH$7%#FWejeh_l_RNF7Ys2<5z?&x%m>6+k15@h#7J!DFN
z@{*x6Xf0X78A?wcF<7@+Pa!)AXP4GWi0w$UOBt*h_?>$bup*qC$Sn%IbQmBJQLT(0
z@f`zXtyZ9U2{GeM&Dymar`v^);LL7A9BV}qFCE<e%y0C}r!OrjNLnT|%uMXa|4-T~
zzdEn8Z|z#fhlyf1*qf={V_qM>*+_E7p26<eb;7Z?naEdGZ~N|dhn<Ung1`~=s&Mg5
z_c`U-uZ|aYzR83Rd5Q5p>x?P^MRQB4*WqjSh7oKH@73l$eZ{mjS6E&1eJ?)dE+T}S
z{-!HG&zUz(o(#6w*a?}BIO_vz*j_`*cU<c35av!3P@Nk!m2Wek$i4S8*q9BeAP4_!
zRbIbEvtBWv!M<BMip-H6r{E(7%QM~%NAXnfLI3dp<r1uWmS>ZLYV={xGTq4Dc7~<@
zqNhN1I=!2xI9E(L9@i@^4x^G!DFiDn!R__IIddH%l13XO>TYDxyw5G5;;m?Ye|)G4
z3d`DYhQuPyJc3N%)%mVwPocm->us^Tf0U-yh6aLHJEzaDQWHxqIWZUhg|W$yoz6JL
z;ey9}8Xup&B_eeQF={T7Zl5NJP{zQUkoz7JY;|8|r!hU$`2f2gZQQ6oD`KNV*vD}<
z@xBtDj^7!eiYdD_J0EPh2h^)D&H3oFSl>c+Ss~ZA^UOM7)wW2k+fiwXRO6NGc4^Kj
zetm}jm*?T1+XP&v>08?14EJJ7&^ez<QC0J9nO{4|;V&R0-b}js?ysR*uNj?knE3h$
zWtYZ(skYX5mJLvw-y4w7n1}K|Ri$02XaP{yh-n%lA|3_KfXFk*g6>T7EOE6`;8-G=
zbgdE+OD5r-ow)Aog%nNYzBbbQ*X&c&XNTk#lWw<D+|2gfQ~7r7!dAU$sCsSxfC2*K
zdoo@jB%sK}iYp!n?6hF1GHI>2JgCz$uL)P-8IQ|Y@(9+3Rj<OeQ$}-RpCe41$Ddx>
z=C;~ApQY*xluX7OsWcR^Tt5mZq*+f@k^fw5&a`>%dRn*G8YHM^f3&eL!_zIqbjz*K
zR!BL<p*sM2)Fj#Ff;{ZZ<S7D{qBc)hA?<baY^|!WUG0ck+HJ3q1jAzJ%*+Xh_LyEY
zGlls<z1YW;{%F<Ft)<pv<`(v79pD6^RN?A98VRlfG@0id8{D_+g--ZyyY2`~@!hjC
zl8v`*3zsV$m`xIFtOR+uuH)U22fv1!?PwvwG43xfslzz4oDV!UG^nq3bicn>ex;o9
zx}{j;^8G008vHU1?7edzF8lkmfbGUKLaY`0Y_aKSmD#f69p;4rNAXdXUFdg|k6esq
zJv@{?LLGsg@B1Kvq_c{bU7T^wG@pgC;gNXz?uu1ZDv;{wn;z<2qpzLP6;ruW$dhuY
z7Vz1-jU{$GU~0?6_WdeV5^n=Fo_9IccJK<KiobampsXbUbOG}-4<qR4Hv-1C={ebw
z<HdP_`NV&a2ZrnoVaV3IvIFbBeJ3lt{8*cqH#Tlf326%{^~l-AAMVCntFx+BkiW<>
z2jux=#{~+FrHZ42o_Or{iY@Qp6=9H?q0dvwM%&ZwUI8j6@2RZaV1IHXYOiX^oF<t0
z(>fA-F#O9|QN+jXS1&*3uCjH4fBDBb-zGra;gBuj3n}BjB$V9{bk|ynm<&DV`<F8U
zQk*{{qUj&!&DvwICL=~MTbgk>&EwTHEGUe17Hs~=hiP~U9$=z6j*!WIXF@Tx#%sfN
z8-cZ=NpB&Sy@q-_F&#-gi6g?Sq1)s(>AxD~nOi^0&?dIh@jx0CI3EJ^XNJO(8VaYQ
z_}Q}j`VmSlu|`pU!TB?nKPp<J7uG{Aho0r86~irLWKUeTZ<%l32?sCT58;AhQd~d}
z8Qq|5QS)XOreE7=8lvT~hi=)J8k|c^N8EVwDmY)9?W4h5$Rj|sL-sot0r5x#*}`EW
zYIW6cHL9G7#x{P(Aj*9a!C4O-DM9bIk@LHaPOTiGI7@>_8uVbJ#JaBEk9(j!?1U-d
z`}jL}JM4%;Qvtg4J3rY4`QV#!W)`f1QotO=;{4TvtX1q<+ro&}5q-F0$}8Yzx%6Fn
z&OdPMAzQ$|hE*a^bGTweg7Y;?WlOVxBy#5`YsB#k38-H3II>nQh278xW*T#PaaH?2
zZ<~Yg6fp4nYnyGQKrE?Uz&n5u<P9R~5t);u9aW(ByEK9<xb5-E*oRFkw|0Z4a<tIp
z{@oS3**Z(ED>D6-RgzLeP$!b0#VP_R&Kl3kjgZS^63sEF6opCcfz}Um@0JI(*XwkO
zs5aD!Ycl6`*X{Vrf|v0a?2U)k=Wp+aaa-xJ*}q-CA}=LvlsKL?#UPSf?`n=|&TuAi
zke!}>eh7Re?ws>TXnCUCFa-(Qt*EnoP%);CQj+3D^~JACUS^C`xkHW*kOj^O{1RLa
z?ZL4kZ#Bw#dgs5LI*)0A_M1;}TJGT1mCVeiU(BYRwGc6wJ4qZ@MS%;z%geBkO_$1Y
zlCMbVc@48}U?Nm}4ymAtwRRvTUsB76Ez58D-$Jw#rewq6*c5ir2XJ4Z%no(DjXgMd
z>A_bvNHMhX5bGJjtI?3sE3B_!PTFDq9Y6p+vJHJLb0GOoJz3}^FF{|2QW2D!RNvqk
z@Zi2PthtCC5+y>OQM&A&`M&(DH_49sn%=LO0_gUtJSre%BjnQ(0UVQC;NV~N?F3{8
zeQ{@|_2*d!oi^wm5GSBxsi}$05&p~^8sQ6&?p~uS|4a3nx)aDe_6SCF6h+T6Tc`oj
zZ{Wl%pP{<Sah_i6rb!aA2tET+s;k9v|9f1KD*lk?tE9s^6Ti)p$o4WP+wiKGeF#7S
za@y_@M3PvBhGjeQ{rxkc_7Ahd@h@{AVdSLmZ;3&KNuYZ5NihofEGrYgGj4L+bR+NZ
z64+hJ{vTwAC2k!=1ZN0?&+Q7bvzM#LRZNgXc2bB}pL)OhC_WnN0c}oeuyK@cn;n*-
ze6d1-R=R_^3wK%MB}CP*x^JXe&6bpuBAA^yi#A%%GAjc+$zY3@+N&&;J(b5lU_iD)
z%u6hpCEmjvOPBNj@ezAnp#7Jfv)5MUqUS36n3vcBTPN54*f|@a*JPB)d+BXaUtRe7
z<xTa52F96-sXM3A&Ni2U<jeL_rn#98T~c_sG<AL>Cie$<R&J5wPtDI>pKV)H3Xz&^
zvFQG)2~`npHD8^odhZ-o*BS0p2kN5vI_5y>Yh$uAC#K*{pK%~B?~|(>PIfHd!zA1~
zcwgMacKQ)+X$r3Uns}X^$V)8Uz)#wjw_wfHzW<q@Qs8_Xx5a*1N|gET)axTgy|7Xa
zd3O@L>C6>SzPwXvec_wj9z=WOrIfJmQ(TLgx32L2?qUH#mETG3ywLM8K`Ae>9?t>o
ztZ*yY0f~fE5<|YT&~L1IgJ&s9N;=c@6ixi!Jw7Z1ZvyHVRbz~oo`=km{w^VzZjL!B
zA*bLLZGjBDFRUT>RYYt*=x}^W(5&!F>9s1DDPKt3w!9AH@|3&=KB$-S*`wc`kB9L3
z)L-MFgt-Kdfg94NXmfW3!RS1Cz7YJS5n~BZ<*I!IC$GSWJT2x+#%n)SZW7;E3YxH1
zHh~Oi(g!Yr{jZ&${xMP}>`dKS=DzeO5>@~q|8wnzg$}QcnT%iB2vl;$(Ox8(LKf=?
zpdn>~hp3b@3_orw00Le&AWmtZ8o9gjGl~)v^s?qY0;@=39fRol`TALAlkXJON6_I8
z=6*_B&#7--VKQyQMDdQdxDB=dn)Q5=W}L4`Ys=2Bmu}aa<W?SoA905WtO|ArT@nk8
zaY^Zy2ZRV%^>gxoNWxc$<zK~^3wJuYp8+hOn(TGcf2dquk?17^z#4!W?z3tF)ki=2
zikt#Lgl&U=QihoyzOoQwtxzo+nR>(flDHJ%=#}PSKdxIk1FrP;<4J>Q^{mm0&wx%m
z)fDEs{%1#FO;G-M(a}%M<J-xr`LM?*@Gc8&$!_|Q^Ha!yu-=kb(^T-S4M6@x{^u=4
zhw;8uIX>_PG%9ULo3!}Udodc>=wodTzE8f3xG9nP_Ftg+^m_U=-7x_S<cIVQbvBrU
z8g6mk3B?IXZ6`QK!YQwUIqO>~s>37+&<t4##U>8gJ9xy{iH-4uP2Y_`=wVOx3W~wt
z-W4Smm$*TF!rodZ7-ds{S~hi}yp{VQehCR0+ZZ#OgK@LN?b;?zikp=FV^-~v25}H(
zWcQh)PSbsV<CQ8HXL>k9cNERHl~(7KJ_;gts<{1&Djx|Gmjpzrq^vLA8D-jj=}8uk
zngRj>1SX{SKGVV$>f~8yYYI^FMp$(!-yx4JQ03h7o<u{XOA55PB1CIE{A6i&vSIbF
z{^khrNjF$5>UR^z#DRT~Hrp4nVjyJz>U1~m0&dPySj`l|n6yp<;L_NTs9=-23g>C-
zbl9zpz(y;>x*`RV8FmEZBF+9ydB6ErUxB=YGKL=dN9*nk$G+>YUKTv=<Zv-`t<eKQ
z-APR0tjl;k<Bfe^HU^wlbl0xwTX1q?{r%I$2(Mu@71_!a1V~7YftXmA1NNOHsqnhr
zOwz8vVj>CcsU7a1f*k<itXh88tyr5a{2sj+U&Y*W{1yQn$ylFV@!9^h&WGLV=UR;P
zqQq>2EqJ8p3W2XzSK;lPQyyKOrl@Tx@TL=Iy~<q@4yy-=Jhk+s;5#@;Q;`B39}FqE
zLrl)OMFgucu1UjaGf$;D1G}+bWL39Csa`_B$458cE3%WUH!t{a6gt24Wb6rR4&sT2
zmr?!k-+O01yRR#gWa`@p?mt-l2chF#;H|3s?iWRLzYz%mY>E=6F5>WOV=q5=--~JT
zgch!Vv^4dmyJ<y4irs}~mz?l*r~RK=P!z$d=Tw@4-AzvxXO3%CQ+GlF?Z;8v%*j{?
zNim%LBX)#op0yhbvO~7Tp0ET02Z8@jp#(&Qs)C4W8Mh4cRu!*Qh0gXny2PNFBj+wQ
zCQLt$nBQ(v+puRk+dln21r8G;Q1WzZ{_D$1A<x<kloTeU@=GMmG^1R<MbB0SE#79X
zBjDVP10@&#i+Vn)_o~vdUA2?T6YvZ{_?HPkUNsKA&;RP(i$vOk=l*36BCZm6x7yYb
zF^Z~1QH2<jhcE7zJ&(P~5lcOZt!B|*c0(L5F((kU;%(Okwc0UX3Uu8igEK0Lu>unY
z1HFo2!}qn8vieQiC)0Zz;CkPd!k_fBFC8DLGb36ExwWrLG!YVFk&5;&pFN2gi>|Y!
ze&?<U(>)qCaNOFZ+zV4HE4u$mv-J6;-(69!M}J?@0iI+*RAc9*alss-d#7Ac7bR9-
zp?>#G?@75$fBU7pa>3D1ZQja=9+b@XYb@?(@mO@6{!7~@vA}~+G2BTlg_-kp|6Muz
z^zXvfrH3!)j#L9dPP@Msi%kBC_~q+_rtAI<>vj31owgD(_WA4sbjfAlK~^!08ljhd
z#?`CODpTUdV|PAk?)<Hz{=AJ{-wi}--`Kf6o?pL1GH#oOnbx4*Hq4_Y4yifodN0Rr
zXek^|$|n&u0?;}Ex#4KGfB&r~=DyssNBVa0Tvk7V3HzpTUdyh?tehTlYAgEq0(a82
zKG9L(V&Z?_Ry>BbE>?HB>*cJ|{MK_5Y>rK_iMd5?{XIQA7xO88C~E1G`#XsQf}vvg
z=lUV@cGJIib9EhBYq~WC)Mc}BJt($gE7)qdHE+mz!XoZch7}3002E|6X?gVWXilFv
z){C86KoPJ<pw}FDh{JZ7Suz28$ar1RxjdQZTTy~T*yU<p`7;GPbxO>t3hrv4-<EVB
zHulNJeV{HYd&^6<V#1w&o3}JGlp<34T`U3nyy4b0vA#n+Mb4eL3v(kOz>^#Zzk87k
z_DctxgwkBp!Brb%ws&3ry(MET%Dv>e?(nu+!^o*D{qfQ(f7gDDtS7%~D_!RSp5sIW
z{*jBm-(1A4eDTtT1Kmva;o#=((aqWLhUvI{vqL6-67*jlFJuZ9WHt=m1iir!>W;J;
z>F9V1F%YL?yLn=LMk;RmrlXq4p?Ze4TUMb2jOfEwgdLKzr922S=tLgJ1w;7DaO$Sa
z!L>)KZ`L!Q7Du0RGo#iU9u^{>W*a2z)y657TzmMcf4^X%or0IDnUwn(rglys{mD(>
zVJ<{tY?Q>gNE~J%R(oQl^l)G7i}15{E%B12+d@Qd!y_zc&(N#^d$^@6Aa3Gw02(U%
zlO4GDaOJtlvD$|l5#T`l7oGbe^Wk(x$?g1sfjUaNnh6b8K6+S|Z%=-MH-1%<>!t7~
zzjAbFsQV+%KCeMp_=$<VTUljpuJ7%-_a$!uGpEIR-l{B}c(YKz-(NVWocU1Z;a(4W
zE*A5*D9*IzWC?Z0F)yps?g@4seX9&bURkVmY+4$xr}tCqO%^Nx13bXx|BKKIo84uZ
z6cxG5A@vfJyy0Qhx#H{<<1di;WbfizLdYH4Z*sEJQsB(~6TdricJqIKR?d8%ME``k
z;)Z+LtzrBmc|HfQ#d~avxu`ljpeQcmUG?qn9{W^0d_0@P-#sk2{YLY>c;id^a#!&d
z>eXi{5tYj;`9%ANFB8Z9jJ00W*e)D;{~dG4vvg?I`ey{N#)oKD61K|I-#O%4YrjAz
zQyi2C1|RooiHUhWpPK#fAcx7p`O(*l(LZY&4EwHCHkh}XCZmdo1Y4tnA?_lAicH4w
zOXdf3BHW8N8<!uuI@xQNnt6GTk(1PejITFHpPi^2JDMEU_02>N#66r+4~gkc)=ReA
zE5iRKKX1>^uD|B-<S35W;@whhB5ibAza20qfM`lNtFIHV9V9if%6LK^$+t*ZFFPv2
zhP^T~XE@yf+4+>=7<WR-FZL^A-fYxmnhiH!Ute+CwV>l(mnFYCGNYURt1jB*Ny|Ur
z$=yEgwlj#JRxgouJ%#J=A5?uz&5_2$?ewC)r2Ir}t+<DO;Go}~xE+jd$%Wxx<(zYv
zaP!Ao2B*os^T-8H)j~;eW8%ca8d!c`b=R>@_beia7#UWKd)~ugzbVl^M?IJ?aqmuF
z?sqUkN7oJ?dHv89+1QNJ*&1$q#39*GRtDXEvr%+)X}5gkbC9vQPgG&tvaO!qs=>44
zXax~JzRFz<pkG`V7%NtAI+&s^_izEV0{Sj^9GNWmZn7BGbdA-y?JyjCNoUFBDY<h3
zoeW|jbtzO~SpSy_VBs84GXx{JkxE}!9uhX7p$E+gPW`m+eP4{0Ac{^~-*CiXi}_R=
zpiGLkP!*wOc+R3O??5g2GRMTl2rfzTj3K4ba5up%obpsREhp4O9@_E_gBKwImW2>O
z&AaBB-&W|x_IK{6ThxHJ%(fv4Cd=1-xE$*|p>(Pud@*4+YTNJ#p-e7V*usKVjx>!c
zz8GeXvP64Hw5I&+r<Zzv0!#@bg37x*DXN3@+jhPl7njN{e7$`AZ6=)F(aZOW#(McS
zH7croeO$YTU3)vhYz*<y%A??+3b^)!Z?og5Gr7O_G=13D3G+~lWF{?$2P__!mY}^f
zQSjMRO|9Ryz$8mjKGBNLK0iDx`h}91r5!BQ`(8T8ob;W-CGJ{ijgkMoKPtgpsTM1B
zx<`A^+@fZuAD58$MO^iGy##^(Ph|;&hhn;*n&F#?+Y*B}761&H3{P}da1lT*J`>QJ
z&TZN7M)}i^1@2RR<5;Wv-!3T^BV|LPl>E1qBfl8ES2)goJ4i)1$caSpT1VeKzG}#X
zusS&w{dge_eT7>~KD}@A!*~9Z+x2<gmHLMRYt)R_Iq#)$h}B+R|J^H!??z*OxF+P<
zx@HLM4jS6U%uWDhAu4qR{#QH#p}3&cqBH*PE6~2HK@OUPyElNOcYgW#>!@xW{Svmn
zb1BMY83-{^0+yg)pa;Jjvl)`Xr_4VPRRaC3yqPJ2h<vD74<M`ju{rd*D_Za6kx}p9
z+*;S?{Ex@;353n$z`N;tv%s}wLA56~fuEyZZ>i_tgn^9ZZ{0RsJ&~~|D4^8C|4LD~
z#(Yq>xodaA_HsH|s|it7qiTq14OoczZ5w5fyZhI+c|j=_^+D_*kR+XO9n{|l9ei%)
z|03uS;D;G8Xp*ba2OWrirMfOqhG=9wDeY>li21t44}Diz+NtWYiM4X&0_dI_hl8x3
z$Gd-vKXPkMuGRK|_*eujrh&h`gcR6Lukrd+oWuU)1<kXZnd*Q)0y*D3C7;2p_L%YM
ziKoc4IRQla&-llMtCMgRG4K-KRRAl%R$3_bBnBs_5!~{GeQsZ-@(FaWFPC+$CUqr!
z;qDu?C#-u)xpV)!k->scf4Q6xJt9>+wy+_ZD!Ew9$o=a!#X!OMwA&;BrG?j<=by}y
zBurcTJOKu6q#j(CJEZFUjR(qztKZ9T$R{^=kJ)u+GTafDTb_SOL4-e%^$d;32HxjO
zu5kOg$HhQbKoQDiA4Cx0_khwQqPyxYhF9OI-spVEb1xUx<bN3%w_+t|upwuN4Vc5<
zsq{k4w$>H74=njpYrqFLBeI!0S%I6a5!oAyrGIfl`eV6s2ZXWgK`jY|H(vkSVIh=z
z5;8qQ8_kBw;JD$%%_)L}m+C)3-_oFoB(I5pY?b1vx1e)*Ftf^+R{T};+BQFnw=Hbu
zPhRpZ;yAPSa#NRGe<%E!UHtL&%zJtFOM&X5)rSKKnuF*k(jgf_D7tB0{X7uGNrdu@
zmCRReC$uOv-+uY&+Gft?7eu7lmP<^dmw$gZdD`1s-jAob@L&z9&Gbenx~UD&d0)87
zWjk{hzf3seh+@O5M^~Ltdo)#b2<@AagNagZv47xkB;_<pJDVvLjPF;ZFWyC10lD$+
zwcJCMoB4kPo*vkk$V8grgf)!yzA3}ax&5N}+Qxw1(*;@t=xLdsh8_SnNVR*@?;#`w
zByz>N1#|zb8#|fEY)g^su9`P_f2E2wvWkG2hD5+yL@V{xgOF{g|H%_xI$DnfX+`NU
zE1+`S=M>*a1O01?3y!{@pB|x8CA^FChB+(qQuHpSuC`A<1$?n1s`F$TC&SYhJe4^<
zs0(G7bMv#WBwZUl{WIO5E6*!tcdH;_#>$%Tz9q<P6|@~x((=y!=I17zr<VWN#GY@P
z=I}P`^ziq#CP8E_o1x0}JL;d-*orqhQ&Ge9Ik*HhmU3L@eYlst+hvAq=L0~=aFfAz
z|HV@3L-oGn`Q;P>71pomsrKZ7X5`b^g*|0}oS15VEj&BL>tuJ3o++~bo2R}>nfrR7
zxevrcfG2?Fx3Ax*#Zy!ukw}hoe#FxF>^B<vq_iXJZ=ExWA@<yu`SI2QpE@w=Tjh42
z*uvlN0yBoy{GKO6HiHAm3n@$2=v@RHb0AQuYp5^W{A@Xo(6`|ab8vv?dg^lS+-}dF
z&3T2SKo1)7z--ed=FmJd_rDaYn}?VdKf@7@>z@s~^8YklrmjYK4O&Rp*A;bV)vFHL
z2Hd?em%5UX2H56ApuWazrnfvfUFv~Ioio^dvffbWlOGS2ynfS?e?<Q$_0<c2uC!w+
zka1-=hNUB0Qz3#$N3GuR6@Pd3<6IbhjqRflSjZ(?rg>g;N&4=Y5YU~5q&v|EIY$4*
zj>C$9%<SSv#UQ!Was5iZ7+!f+%|f+3N2}A`{@zn4|Bz1|(_*Pg5c-V|BgV+xpy&}G
z4JU6dP6;F3UF^b|eIeJR0s@%Sd9yoR`RhPInT{;C{mEP<Ts-_nPss5q1w-s*e*q>o
z;0Gs%E*d!8Mu84r(7cK?U@_|Pu#krQvt?CM;uBSa)`4+r=R$>?vmyWmPCPw%xAK=J
zI8VQDH~&5t)mW$_Yk+)4qdr_fD`{g|xqyHI<19oEzB!w1ZXTUXgO5%d6m$c5BkSu5
z>GO=chWFwoVdV&5lsLV4lF(7HzB$RTD8HZrG>8j<Din-3^InxPL&!_e>=k|hpdY<o
zM?9eMqwFh-;oRoj@3mJ^<Ll=Y0*V0imDgNyMC<V|7f`AK3Wwc4x`^LP@j8^wF}O23
z>1MF0S|3t2p4e++&)pL?qaL!kKPN#*U)mlxUP!nRs9Nc#dh4Mf8Sv{$N9ZdLSH|oJ
z<^2n@#%mtMDAcg|_?G7L6uZ7{CjKRqEUW6Xq+oCxbHzINErcN%$Na1^MnEWtBw`U(
z(<7k2Z}4=Z<6w)q<(+Rcjg&uoGNPWkoej7-jX-^mNreADvfex%>hFsmpE0&9!z4>G
zMx&C6p+XuA%23%u$X*G_PIe|srY7V~RQ7$#mVGCRkbSAaj5WKlZ)5qre16~WU*EsX
z!{fg0x%b@d+;h+Kc|=Rj1<%e}&s1-jDOP-0XH4>LEMA&FL?$o%;R7-L=a#y6@GuJ2
z?DjsdQHbXu*|eZgCFg3g7}H3y62yM7K?xnA=RfbU4u`GeLmRZ2%jTC>v4^K~kPC_Z
z-j%gz`gMR0@bQ|38ar0zeN3{Lsc9Ur4%5GppmIsRBk%{PKl*U~{sl@H5wnAm+_+9x
zGzW$%7bBVk)dqURd$6%#VS1Y>yn1?pcy#t6`3UYQi#r{Vb3p6M`k=N9tq(ckJ|@pI
zdQRj8`f%$zW(u;}Xq@$Ei2vO@>^-)F)U2-9gbymmKVRCHk(+B-vUd5$ul7};z(N70
z6$a{Pdp1>vk5Yo)adHTne`Z}5PnUe6vb1Q$nw=DwYuFuXVbf2UFu1mZ+CxBVn@1*U
z9|RTD2wQyI!e!Iq0(ya#a3iseuxr1ACO6N+EDv(M=XOH%J+9HrlGP|~th>d19+8;b
zqcXKTZ>N8Bi**14Z@|ce5z}s890>^MUgwhDHS6`4{@aqqu&dWI9?W|(mc`9dw%9P_
z@Rx^HWDU(<G3?K60_5-rb84iv%qHHu!Y)r)u}^U&yF)N01EeohtC7c-Fl7ArfmUrt
zCv3<;3GL(U7}(2e?hFG&?4_QgtZ1+2;K=7S{ZU5-(mhNR1Np(P@x!5~isVINE4ekN
zDDT$CBLSXFDz8V#3&Wj?IfKD@>_F<sACBC@EyhQCJ2n1_vvw1U=Jso-RZ`rcFh#{=
zjnT6`9Mlj`TPXC<>)Av2=J=a;$l$Trd%aAC<9?{@9ewLl5q!ezR(RJ^roO3ABjM?&
zqMr?4Mj*M44@dik%ivBJk%8maB>y^Y-|&>;yhgh6IVOYHwkU_yN^Jh0foA=}b<k=7
z2IgdWqr4``e<$mB7~v1{(B8LDy3uGo(6fy?e2)i&oJSV>BmR0=?kDTh7I^lD?DKcx
z7xVn*leKr4M78B3-)?2n9#YyB9GD)~-^JU%@)C%weEt1jdGS(hQ86?(uup|nBf{|b
zk#<9#$<np@q90a+$Igol+|o1)5BUi|06!8t!kgLUt{aPDF~te(pD>UHOupxNR~rYc
z;rg2Hur#t|R+}wjlD8nWCUjD?q$&eysKMjDSQ=^|5q(r&si`gM(2?%cPTR?*73C$5
zf;#f{?z}kB$K|gvo?0^(kl2=nhh>!K_&(j0A($0<ax3{kzFBzPX6j(059(vGzc3}u
zu6~QCo%zhSy4OIO9QJr2uIeDv#M44as?kY%M+I16qa8~E9%DJ38`&`xlbYHac{@Yr
z1N2WjAb`XUG~G$-a??R0KLqv-jtyqlqX&V9y(H~xif$t6<!*z>IPwqDjB@#hPi7L=
z>hfyC4FNHgckC=mc3-j*K04j~vKbtazslO6&+B&;o4jpU_Szuu#f#5HSZ;la+Pl+B
zBOHnC{_{imSbm|TjX8B*UIQ00sf2CFU#;v&(o6PZX&CZM-Rex#-=scWt}2nCS>P43
z4ocYuDSxqtxhHBCA--Fv(Yyoj$GIWDJYn-SUVZS;wgrC?=`hrMNmbK7Y<w03h!I3$
zM^AW`<^6BTuy@HIKP2~h?8E&zCGz$SUM@Fp)fHBAI+YBsry%rxZ+}nWH+T$~5{HYJ
z%{GHd<mtMJX=I{g_a7}8+nP1h7k+n`Ls=g9lM%XSkIwpIv(@uVKK^eL1A+f9D(*Gx
z|DfVf6_3?o`=0p#e3)NmzwCBWOwjMBY1Fh{ZC`WtCZK6_D6{Jw?mXN|Ev45M6M|#E
zf7FaCU9n!x?AIVH;o6sp%3BHVGo>C{qgY<Pe)|8@#G<ON>%M70>#n-qjLF0>%bS}i
zdp{@eG~SLgQH#lxKm1tmV<z#zUBCKmZA77}5+H>hRgbQ-8OeBjP3YgU#2wc~=t{2k
zlg|7&QGK58W)51Jmv$aS>gC?M-CoP)DtGGHVL+Kd>bMvpaBLx>9xE;*_QJCgWEu-X
z!d_eXMX+^mtc-$i6iPngD~bq|W<))-tCz~)vWxgMf0ZBCk;n^wwZan_vj<osdjC;R
zOs%PLCg=(^926+bgsS*2YV&^Y%b+25Z$=JLhmXSK{JaYN5p<>5gYvzf--JdTGdiF7
zTx&1_N;9KE79x}-^fQd_fAEJ{k}LEm6}!fY7){f>YP$!I%@xWWg-Ppi$kU7d8C1w@
zzZO)pnxkz&<kHr+-Gn9WI73m#&t?~A#t6lKpQ(x7Nb2kSyOnoZGYhI(K8(~```DXD
zt<a?Yr0yi0>Jeg`H#l0J9~+bT?}#i>6K$;MX&7l#7Y~$YMVT>99Gm&h))v%Xp+2IS
zlOCy+2)jBx(PtjZH4=Rm|K`_u?!OiFB2lL*XS?S2B`ZT<L-~s~4o7u6Sz{P3yiYw*
z9&U>hwIh5(Xf9x>>H`vmwTeZ<#vWpBBSg`Az-R1$kSfKvhHBqkO_Rne2XP2{55czv
zGc#}H<yZ0%FSKy~`TloeXc%vEFB1=xhoVB(`|aD-ea0M1GB)-t#$5pd<HX1rn{rqY
z72Et3^pfaPFB|Mzs6BPFx$n&-l(5Bwmwe!%SAj!~u|?h-z@ifw_<3C(HRM}BIb3OQ
zOh_(|s~oFz|60Fs2dJOp8sKuqM!T)JnvK<u&}Qk6LaaxW?dfmz%=+h13P-0-YL<OS
zCJE6|Go~?#h%2XE=R{Sr->(Sv>>O7=n$P|EY7Z?QZZ*stpdhN()42J?=HahlJ504m
zwWI6C!)Qz30~jj!VG^{OEB78P*YOd_lp3$jy`C1Z`0+_2Z9yvk<IV1*r7MAjJFDgj
z4~^>TlhjDASAoyYqFS8iC$lr7y-lL~wJ6rRq&$Ch)$&`{Y`<3cY2mG(k=n$iiLNj7
z0=6KJ%`W|`wEpi@8W$?qnCX}J_U}47N@b??2)az^D8&26cj*(q6u{3H|M@xP9}@Y(
z3L2EhG&8eYeRS7V+wQ3%?1FWl80nV~P{TP?uqm&Pq2I?5lcc=cLnkTH_2pIpt_PLo
z`FXq3v}*27^IH91m3pq#r}DV3J<<OX{BQ7^xl>R1Q~(9>EATOR`_l2p9UqT|RrB!!
zL&_SeO<WL1G5OC?v-ZJ(NdM_f;6Vj_lp!d3po^ZB(*)J;Pn$+9j`t0DSLA1Wt4ydN
z75rDbMCtSV`?vp!9#EVY6|y2GY;@#ZP;{$&W;`?6Vl&ZSkhZ99Pn=sn@KL`~x`nbk
zjymL4?;eY-ud5HpJAF~$yY{4A{#Es@?((_3y0~nuXjg5FaUiW@u`b~La7I$B=4$3I
zG0%*dgwr$UJTMp96)t5|Yn$<?QKFZA+exp;trplgQoao=Q^bv}tB2J~k0Vy&8ceEB
zmm~i*>$G-7iQU5Se&bz{vf&q`BKyQR8>*8_5!Wm8e*53c74@0u__*4!j8j+Xg=^Ly
z_J`vnDl<oyNTw%`$<aRbhVOjPjurm-<)i(^`{U6oi}!c(sK<!sJtaIZ$4;GI0w^Nx
zgTJHbjHkW0@4P{|$3RVf2RUuYx~PXV;xyt@<QiKbMj<3?9S^^<OBz01_i$8bWns(L
z#K$M(U#s?UbxWz8j}LZ7l4g6lZ3avpSfo>)1!T>~Bx&M-!h)#IH(GGF!b%qj#l%+u
z7Pq@=DE8amJ#x1j)O+UsC4xGl9iyz}<F540aZTjizh4)3Wh`oYwHx>pMEC!oJubYF
z+cX#-hxgp;N7nYu`^f)&I6ZZZd$28KzW=-~_v`;S;thh1a*r3sI==3y%$4gdWnNu@
zndJRm%-Okvg>h#-S_HgK=EzDz?`%(*I1_B-Q@w`(GNk{rJE3rBa70kc84ygzKW<V`
zy6^F6e}V7CT20<!p`ahR#H{?HcOdamY4hT&!RN`{A%8-{qDJ<tePPe-?R+lV#i^Al
z>4@CEZIdjMT8?6a$!I~6o+|PWwGdr7e6E&$s~4yl!tdkx9Prnv<%RRv0v@=B$ZSs!
zVo{!b@gx6N+s2m4iPTa%j{i3Q>IrR#x1**h_Zr@o@Fa>Fc)Dx_&v+ehXx^Pi0_=EO
z+YQwQMJ%5eSIu;(7ViZkVUL+J<;sQLHvvNE`4u?$6_6-jZ+)M*dv(Yw3LnC;gmex-
zXQM+3X_*h1$yM0RFa!C`Uk+QomMeh&j5RFs=}#s#0-?}@)NGict~s3-Uaf>Jnrm4s
zl6~v9wBjjmrubX$vtM5Ib+-o%L;knwc8+tylCb!9FXYr(jjo&}>DOS1^-_Mw)Ah~3
zKQMf^Fw&}Q-RA<3dHD-Do1taF%4M1BUinQG4PUzlDq0*RJTz_haI+gt<QH5@65kfP
zcIKGhHhb1*u5W}!eO*nVY0c4SgipGdJ9IcTK9yqQYF}`^iz{wC3FEV{<$t-J_koIT
zhr<H|%-yZWl7^7oG}GORNcjR>75&Svxcb(IL<~L8)%O<%oLCXq=b0QCIDxH<C#TH=
z$Xd%Xq;RiFlU`ao7Q43C*(kPZC}cCNds9;%EqmqysWXICSjPsR{tUHfUvE-O7dA?^
zk^l1#5(^_3)Qjwu`OhWUwC;IqTa>TDZ)3uXb&EB)ujfN^X+4(HKOX*Y$*=xcYJ1?$
z^}zPsV$OkkYA*(PeJhtw#ZWLZ`~1@>(bG|4;`c)oIH{NZm@ew*#6&jl4h}|XC#?4#
zX>Y8~m9KJPGzJvw$8aC)mVOqmNjrU{);M!|+Y4N6pOEs%3UDtUpLiSDdJ1KMJCymQ
zTay=4@{(NB#kiC2*dExYMrsf75gE+CFcw6}2&yEt=V12`7m6m`^U_7*6c8H6&&?DP
zRfn&as|{xLz5ZW{9cKO?dCj^bb^?$GWmi2MmOW_ZO$*;=^?Kw_Al4K$a&L^sE#7Xh
zova_2_TloOD{wSAtz#tTMKboO|D}{vx;v~JS66~#G6e6l)VG-=wSsOj>3NDa`?jww
z+{roc?T@kr9DwARiS#Fzm_%<O^xxjK^+~(dYJ|4QgVwk5EoRSI8P00cE@;zqx9_io
z)1`@V$+|np0;)R0j}76tf!flkBGOx{kz@z0KjshyIO@wF2i4zUhT?;Z4Jtm3p}%$M
z4te0-Tlr(SoE4{xCG%m+Z$dW$57BbLVJGiur$UsB2AyH9LQHLXYiA%vcQO+gi1IE>
zc#lBqcel;%c7v0iTBsycdyCAxn<>1-w0%n#zLZ*WNxDH1s=Md4wzhO~<rzPtk6J?q
z3rnqbbk^hJ_LdK}*8>mRZ-qT!X57ifF1!!-bb_)pGMU}stTt>#g_6B;h;Gdz^R#F~
zRM@CbK1nSoO?q$VbMwz3go#YLsJj#<@kyE(@9lSK9tdM|c0q&&7Ww{m-$6Loh5L4T
zV!q^M^asryQtsC(uN*)V0CFW_&D6M@x$oTT-M1LK#hD+i55C=!1?}W@X4u~?Ug9f>
z^KO!;Z16g0$lo7OIdaTuye?v4U;9Ee=a~DcpH<uzaV*?hePK^`kI~9c&#2X{4gc-o
zb;_<F=vHIZMmVI+k!~V&Kx~um5VEfP@29$lN0hj!`|2Zi`gB41)?$tjb$(}9MYfuS
zD&^to%rm;B>H(00`x?KJVr@0(pdeSiz@bFX)?it95F+>YmP;?&<j6E@`cnMe+&hW@
z>8>-3zXn@>^NTgdJAk%VuFd#y6()3S+CbcHNNps<>x+sJTJYi^Kr;?>mX-gPV5C{_
zR^)>XU*(SQ1`d|`mMJO!&`2I+YubRt<+%_F=n?`fbl|-;sk}2lh6$>T)G0j7<}Lg~
zC&rT|4?aA3Tk9ft$nBtNMPxISW^{fE;_Ey+ArRrh${Xw3Nq7?pw*L4bY*euHr{sGv
zj@!TdJS+Za*)BBPi)v~INo^zq+&F!JnEOF!cHtN3jD(aO&)+YD8%mtX8OV9-&=o0-
zFc;^D%NhFv%xtiM8}TLGVwQ!HfJH_1Z(ZzvbEKXZ>B}CyDn7ZeM{XUbU1H<MzV}xQ
z-g}qWvdq2~ZaEG(#6x}uoN43@K<z!h4{4rZ@!p!s7E-!Vxrz|<9$_LCGpy}@{#H7=
zIo<zf^@{qLbfdTSzeKL0O|P#_tVs*noAfW#lOTFZkCiL5ndMzlEpMDbh`EuByMhbi
ze|x7O%toR0Qz>ib)mdv^YOifh^RKLNhW1dud#nP;B9_Le>9U&YY10U33e=tmw_JS{
zLh|xR`u>#$`}*w*?9@HYe&O@<T>XyMpCAW>1}6T(-CV$N`b1cw;#-}Ya?2F3nY7nm
z1pWnby|EjWuJ+x~HArdAo30D4E#ISM>gBO*(|9M&>hsEINAbru=hd|?F6r)dJPe23
zL;K^lP%9IH&3%j{m$Sm--40=`OPAZ=P@y&{>v)d~u-vUAtx#~*`^MIJtc*d%Kvuq^
z5PS&nZ1KES4KPm}<v|Wo$fUqtIki95edSlzIf2$fF9hwNzbk7B8`mRzCl>7t0dBku
zwTK(Zj>40?Hs_%r@=*Jo?=wO~@2{9Z2{+*4XceE-xIAGgU2-z{iH;{eZ#O|cIn7R4
z*wa$rp4y!=mxazMvA6O;mI6f3wlOWN_d5jI-a(CCS$r0VQD3+h;!j9^C-SZ_oVmX`
zPlxUM{C^q`PR=(4s6k@WbYcYU9cN~~s#_e3LF^!R;ctR0j*CsCf`5fRmu=9R5QLxY
zkH`==VKWA+;HoP(wC?@9zSbbedRF<stv?k=>C56bcGcvushtMXdnpEB;U!J7SHFg8
z842jzKlqa5ub3Nh@B96}v@nfF=jK@GK(3?vbAAY$GpTRScAbDUri{H@vO6T`uF}zI
zA8$w+u@$*j(V@>ViD~Y5$CbSW9Y1g2U@-4z@P0J<iCIZ8WVGwvepr7^l>w;3EVoG-
zKNQ{oEqS<t&P)F-qDu19KyyIzqhnETH^Hn4*70hl8L!p{_qA^zK!Dl-0L`~a4uF$6
z?>6<Z18Wj!gJz&O*t)bG&XS4E)b#8N=Yrl#tLFdU$>lZGECA|Pt^Z(ohx6u38ir8v
z?AzX%hrBq@L^izW<Z}3({~n)@@RJJUCKTP}oYsAN?|gAftODNuqXe;eBLO;UnnCUR
ziMV**D$}aklxf&`O1`r8iSwC<tNWkBh#<Je`>x4a=(viF$iU-v8w=XkKrFcF?A5DK
zqrosqK>;glQ}J10PEmTbi{3LLAJat6F-~lgzu(WyeLxPNOVze`4n7(zrh$*7dx+5F
z*Ce`g2tREZB*MGd*?6SRU7lSx#N-fia8@PVlArQDi3RM}H{lvts+wBjT=h=bZ4Lsk
zybGr+O)4SGNs@lMXvoz>&Z~?S2{;XB;`UdENu5c~JwRcc{F|0}vb17vz^JpBfn%1d
z1nKR;PHIMqPZVlHm2QU1Cfd!{9+e1gytPD4Wl3rN$MvTA+GI1G0AnyUh!YYNVuzFE
z8E1Z?=5e{pnHL?KeN}ykrFNK+6I?nK8eNo>p8mdmu$u`8W=}#W-N;@=PI>fArEo}e
z9N0UpRWZI%Vb#LhxXLOqN!F5?geTeEtmtChg(87e$blR|6Z{6tTmUP6lPf8REHWA(
ztg_e9h_3;=YqPxn_WkrA0?;?LuaJEKVRkyp0R8EZ3aze49xc!Q*THb6#~(ob(mOry
z`-G7lulih2^Fy?#w?3>tX<evex{!=~#2O^Ip;)t6E;!kA2f<S5{U4rj<Il!r0DJ_V
z$@t8~HRmdwd9w#&SPO6oZ)|COCI7zrQXcZh!2Wid+ZClAhVZZcK0*`_0{jO;oCY9p
zO)?cOEZ!9yWyO&E%1^QyaM1Bg?*VeC2VW!HrKFD{*-p`8kYwi#dA0iR$wv-ZF0Z$c
zBnAA8{|>hwTN2P6fQq)5-B#f}Tu?4l*F<y+7fikq9$xuhW^|FfpT}4F2bDoNonj1k
z3rZ*WRn*g)o?#2uUS-x_6F~2S`i+3-&J%qvLZTyNX_;w++|pjz&ewRnAfNS&ZLZmh
z>isVgA39>-!_Cs5<SIh)!@aX*TAz?^5EElpx(Of-bo5JB!9&0Dq=Pe6o>#YG-hP)@
zW1apuj|PAIHJz&~_-|3(4cf=EndT2It&zowsDCR@p>h>jUI(!)o(6jWWVCI@YwmgH
zp)UiCIMT!fy?cF4NM8%5q<Cul*0>)%MmQ|Nif%Wpj7?m{2)GM#$Y+Lp1zXpBPxV`|
z`MlA#K206y@|532+Ea?>v2GH3tzVcNRCl18Aa`C+1GU{u{(gQnK9B`roAgozZ~tN~
zcP&S)wCeAm@+b7%qek&nZLqsb>$K2$({T;@t9?vng4KpUbdJ1dm=j+)vy0+Qe4jG(
zdccc9n4X`WfdIzlTf;4BP#_Mz!*!P***w;&@=s(eLqIzy&Td?rDs*Q8@wXd+u<J<}
z-Q%b}3x`dIm<{?!Un#!75HF}z`Q<yj>QRJVgEP%LJzUa?w^M1DR{S4(-OOa@^uFmo
zBxyWRRZf7e^B)aU>Q~lv-%vjM=~lo`=iHzKmEu*kluWqQ$b<KkxB5|EnLcRa0|ijO
zwr*Bw3&Sowvn~odR>cRNDYt5AMM;zF$8~u`OcI3Jam%LD6Hv!)jzB@i6%vwHVE~c`
z{Z?!=jpPXHCl7%9l-_<vO8?FPxc$tiI%div=zr)q&;c9>>(t-f23JL3Q_eqjGV7M5
zIVJKzjMH%z<%f(VeHVH?<}M(QWB{cAq_W6IQtiG1NWMz9?qZjggyaG-dpAN<T)8C{
z{~qp%l)AdqgB+6h+V)*yqg%%?byc8O02*R32~kq)PuQGowg1b;@iZk98YwdBU#1G<
zQ%0(ie?4d7$XW4&q)BH&o`9ANVQnh&=uv#C4m-LkCs7UxIu1cC@A+}NyF-Kl=GYm(
z+l08JD+2ymQywalkL>1Jjht(>39)@2*oyiYYVTF@VX2|d!;+`1JoUg|AxnkYwy$B<
zAofB(0)VYj6>!6M3%C}|*fQ#SFj0i~+t8bYwfF~0ieaN}ARxH@qB}rF&BE>7tlV=)
z!dKr9=r(|@sa1S>xlPplX`RU@;N_~DwHU}De9ieH2VrNdP1ARnn+aS4^CPW@o{`tb
z?EbuCHL^a~n}(cMq)ZDzXPG)>lO0;=uvL+E8_2ZFpu@LH@X<#q4KI<BO}8DVWI@N^
zjI_%Xc#N|<{C2n;c}lVhAl#IQWqP5nRNCbZncS(+s`b8b0p!9`Kb5KblRS%HXjQk5
zw8LXUT2036Bf&8kAq&98pu85=_%3+SA<!%N8D9kE7>QvS6hi%*$T?y#pQ873YB+a|
zyat^&6&sx`6rx-L^S$+*l-g*s;1{-V;n`IZ%ZWTaCIKGViv9G&g^jiOO64P6p0la)
z>EX3@bf9C<>i%$%-;|V6eNfolWyq2fWcAZI=NyK<Rk(k2;ntl3Bh|rer(xx{eP=N{
z453QWq2|t}!<3YH70hvoHs}C*)4T;_E#SSrTN_J%@z%Oa@i%Ga#?U|ePpod0*dqY0
z$H`a5ueovn?Ct1`7bF+&&p__rW-^~o26?kqWYsvQ^29SVcX$!)l8&62DxUpNYr#)H
zb`XkA_hyV`l9=-iX*Do$=BWa?1wM~Cry6>j5lJ!yuv2X}Qh-qOY)N*2Pu{Ps*JD+f
zq1#<db8jRGQ`BsKy4+96V|PaT?hEGdw;pg1iW_gpqR(QQ#%l>5<}uyP1Fx$i%GQ{6
zqT7I*;Haf<FR-i0j%MYkKx9#?^c$C$#If=dHMUH>+2oVEnVuME!_$an_Z?5XH;ahw
zu*&9?a4XFrhHk$=QKBsrmgcPY+s2kD#&zR|7l6oIpY-6Uk75*3(Gx3@X?lT`gqk<y
zMI!v@rK~HvW8Hb77}AR$ch0PzgV<}+j~Zc*aWXJeVi<)K1VBp&vGH*XdtxorO!GD9
z1cxPcWeUMGzKQf;Y3^$&teOjpy3#=Jpat5I#g5uFsb-qDOoz5mEnU;(YiS_=GjRYX
z0TILE1*qT@fU~L6wtaQ)2td?bfLT)U$3HaCKVSvIA7QJ9Re*K73EIGr)qctXp#3g)
z>ys~BOf)i_A*^pgy4;Q*YtU%hA)<wFShxSeEr{*M!ueIo3C=JAkE3(RT7mV`Fn#A>
ziJ*B5Ngkyz;;`Y}$0MLc;3;N}fxmLjG+4)n@Y+dEI<rklCpK?1nSqzCftJCoLY)pp
zRs-bTJp(T4)Dw5BUUu;*I7}=~=#FLtCoT-!={T$<vjfXif|Iww9r=#e!<d>!%48L0
zSn-&~;tBSYui(}RYy!ld<R_T=u*h35B9%88bih#$q=epUu>|@J;BVS=>IMGVu%w6U
z)-b)qBEPS2NukGsCOP5tTL@^~Y##Qwg(NhZ>nu?FgJs0@VRvv|P(j6cPD_50gRH6e
z<cLT&H}r|SDzt)D<!)E1p;hY|R{6HSKnzmhcy70BTetA#?N@q3N~+_j&Q*!_3@FgQ
zW6b-Yl-jCZcF^nqTbQJuimyYMDn}+|L}gw>7UDamRJ^coU|Y4my-LP{HVP^XK%NgC
z>w)*GaAQp}k(KLMZrBrsUGg-3%wJGBv+*+>lH7!sx#FeEf9&!tb(5ohW?=@jcWT1{
zK%3_K#=oa7?bV8BUWf&DuN7~?u6;Jer|2zU`8(1JbNgx&iaiQog@2S%IMRbx#+%nG
z3cz2rsa#aTp8qn~U68IFN_NeCfFysHW_X9UcDk;zr##jfsKYLFUe%TTV~TVvN+_>;
zGdU9PhY|MG40#}slTf?n@{?o=`GnPhedP`SlT7+Q7&`DPm_71h>M$=OX%W^jdpTFz
z{pX~Rt7@<RfSlX`W@%23WjZP0y?dVZQGy7BLzz2*fz&E{m9gBr>1L)v9bY)qVEKl(
z=h`9$93vi71Q;Prr%XQpm}cZ39JEjp(ZftUGtcBXh&cfl@BIb#kMWXJGzwCwk-F{o
zG^|WucuW(LamEJb<iK>dKt?xQGT9$LV(v4<C+2^Qw}0U32cD%OJ50Le*+*NQx4V!-
zgHt)^y$?3rHZSRI?*s9qdsCNGV?kH|xc(y4A}TgoE%J-~LCBr-7js?TldK-R9Wec(
zj31LXh>sCKFa;L=E53-Z!*apucKi5`wPWe_c7)o@H{=20)?}UN^tXLW=d{aB)IMBc
zX@o>p?0rHB={&0cFCu(SV8E={>`c<qdf9qhxth|8&{~U@`Q$7P{izh7zW~;TJnC{*
zJm%%UgthUfVJb#)wwxo+o|iXJ)JT6Z3t`RcdlZKsK`FFu*0+mg<KU`<R6yP5Z@;Tw
zb|rZ!zRn+07QSPNL?2&HIj?`2y0oGMZ<)0O&#s;0hPCgm-_%kIE-0K?q~pX(D?f^F
zXZ<L>N4G?QrHQFDXvn$?3)0a5(k(k*B}~r!DMvp>XSQ?>y0bwA`7C854_O0WyR^%l
z6=Vl_fN$R$<5|%os2o1UQQssCnDm}i6X3D6Wsi?dQlFU1nanq1!1V%G^}SdNx&b#p
zl`nz?AFwkJ@}QN24{leUCIyk};bM3U9NaGi<?pebb{@do{A2bQa6EX=lybl0W~-6J
z#0})2kRQE-RYXm?N}~0aa-8ThlOv^<`n((nx9K?5q$`;TyKAWr!zB3$AqUl-bdpRZ
zU9SkS3C!4n!cwL8F956X?>I~OyAYBiOQaXmPO>DlB}dbI7Y1^J`@ZKKXoA>}(O*_J
z+^k4%vVl#4;3nnx8K%2=D?yh02IZUwaJwp|E{qO;{$oOVVFp%++%IpL6Y1L&Fj)O+
zjPNHJ)&Gnar9gE)__QQ5aa(kPmW{&Jw5-SoPG$3g4o2rtJaCqla2Z+JSovbQIQGTA
zPab%GU!!0KAmT#aqqcqODae3p`CCMYF<C9-#<oQhChmeP3=b#+MEC#VaA-4!3t^;x
zEl$~;)zyagzTHlSZp$Apa3@3mDS6^z$EZ0XLbp?B)WlfRh`+HO-3LeiPTzg#kY=v*
z%bljZs@cl7>ESSq_G6inuM4!U9_$jMcYk7N-GXKoFFK22hU5_4UeHg<M&rgvP*&s;
z@G+3oRQ|ObvfE>*iw9$-XrNvAK~}#-aGPG29SEEv&7N@-ROn|jEUnGclN=>k=e*KO
z*v@+R!d3FF;{V`)^vG<5I&KfG!-XKOhKBG021k$Qf@Xu)yF_j7=P?9breFas(RZug
z+G>;w=x5_XJTv=dr4=vRPz-VD-QEM6r@CN35-!Jk4>3o(KT_qdh9ur?KbOf~PNnG7
zdGvCu*2>{c{Ab4pv1WtbJ+}+ZKGu&bd-K@*%$qS`(OrGvb!pb$J=prR9!8|;k-`1W
zX!rPwd2`cx;yXG&%;9Erhc6-nqMY`JM4dXws}0q0e!emT2}dt_5(75S2aED^?=r8+
z({2FYGa;+D2Oj}oD8017#RqI=`{l>AN4tB@K2%yiDW-ZZkK57nPo7BtKz61xmW>4n
zPxT{jP>pob$DI?f1GA@ZYRt$055_KW3*CQ-WqsBtYKk1nX*;X*>u`HT&-RBU(DAO0
z)Dqm_Tg|MnH97Y4+_>mTrcpjH$PbinzZuan1*$lM^k>qCMJ4qJi*|<%b?$HGG#I}2
z&^x9bZJb>9Jix?K%xY>|Q1b8BeZ_a}hYbICNPSTvT#s`!7*L1S`i6`T{g!<Wkfxq%
z0xDxcw$6>CmG-|@LHp7D^>w?q+P=i${w^ioaX9(Y7d3GFOzFi5EwhL0^zCv3jaR?W
zW4Mn@cT;bRF=q3N{>(rl#zD`Zr$w}fEkD_6uqP3FdLv{-2B4z;?hf+J4rT##f`tWf
z7DsbO+x{<1Enl~SIEpH<za~abcK19V{@Oh97kQYFi6xXBf{&y&3r&8X?|=9rK4xxW
z(O-H)d<p8jG6B@chSV$Utj9I%e{#(#Dj8^~Ja(lt)gHS^rw;EwcT0CFuTPF&pi8dz
z2V6#RC)|OtkcFigj}fW{5%bg|@0aUoSJ{zng`d~LbrQOY-}+ypZuc)GCmK^uynE)1
z?W3vsC31-rGm6LfShGi_;EJ7&Nik{3b`oGLl_@GB|2pwEKo@F)fNG#fLWZw!soi;}
zf(kN3or`Ogq__I(1pTV#SVWys65QBW3=lLO8XU{|F_s?{@j)jb%TVCa{s#WcFkL4_
z=|xfCQuGhhAOK_`G}f|wT9fUQ6<<CYu6JuXZ~Co!ZYg=LzJ1`k_>!mRlg(S`)k9iV
z^(hS}t_~2+f!z1h`FN#W@o3v&&UwlAL~j3xvV=K7gWZ={mKJ8OL31GXl*cQE5=Sgq
zNgf>_bja8y`SbG;6Sc|R`xOB@{~7-Azo~G9L|gb&fBw4$R0*WUSmgTPcd%k-@p&+p
za*PBp$j~blrV-JmmGw2lHI3s8CL9Ty73V~0!)^6;HtNYv{^ARp69B49JDYm*!N>cj
zdkhRnWQzI};ATp^Nzt7>EFXWYSQGMZ4^uk9imt!lxzyNMdj#P<AusKe^zHgoH5At_
z2CykXJbU~)Q+F;nJc1m!g>e*(Y1%od)4T^_K{QH^=fji2hBiHF{<A-TfV0B0ay80Z
z#`_~w^{nF<$$i6pPickDBhN$ZtzNUp&Rpcul#~DA`mM)xos~sEEab~$F73jTdihnB
zy84A~a&p26dBJ6Z!!G&4DL{Y=V1X_Bub{a*n_|{qv_I0B^q)aZ%}jS0G03X^kz<bk
z@iXRrsCi?Lg5Fu#&aiifre6a)OG}5(WPR0uzhZzk_U@mUohSvWdv^ZbrC2;$ydPMY
zoFbqERDBM}z&m*iW-$|_QFn(QO(0r*E9Vc`Cx6TvbkHc9bi&jmOZX@!+WBj1<bT$!
zKW5hQV;Kwge1$$(g7`Mr<PAvsg0M3;xQ!m9vyE`6%N^1hD{G59S&A2rmMJIvzXB;^
zsCXaL@%lz#LYe0N2rx{WQ~t;BsC;U<X}0|Gs4dV4fK)XfT7bF{wdktgrd4zJJ-6Jy
z@epqT4}8w;X`&&3@bs6%1_F$bh|%HL#D#2ScN%qbb+@IW5kocGF89aQRzx=i?0U>O
zvjH66Tj-5?DnR#K?P;c6qStUh-Lb~1%rokrjy&)hlAkN1yxF}<@je>qWk<)=OKln4
zq#8<1Hwg~duW=L#kDgF9<yOav8hdIpJx7b?b_2V2sey3}W;?sD)K_R^v)$x+MgBs+
z$9A*STJ*u5r$xx)m-7avaZJ3(Rx)-q>UdZIH@90*u%wOgXVBZi0aT}2Ez}`UcWtx&
zmxLayEUmLJfy~X+S$QRXL(9Kk``F6h{tBS&_%Rel#29@fyXcS{rWuf5_&4->VRAxG
z%eAG?bDO8b#RqWSM$dbwee!pwv1S8VYvO3NNEQD3TM+;y=VUKatb3!=DxjMaEC787
z9oN*vENoNmkCTeFM<|*#A_GA3N&`jQ@AcINy21vf8?~8piquBx(``zkR5v*DbmKXX
zY_0kf>FK<+J9x0vJ$2bnt|*Du{bYPxVSF6hzAH+t2G~?9ifZgAy8lKELES4VW;E;<
zV=~pp9!R}P*iPCu`$i44aoP4H6`9Hv**F8#p_D|wA7=fV+0<8utFf!AC-o;7hrfcS
zAt3--Dj6R-M)g0zIMt7pQzplctACx4RRK&!VZS$JvqW3Cs|fO;Dp9jegiM42q^IR_
z-J^$zTccq=?k;_dx;8t0Tzl-f55AB+!Is~%S}`|{H5-naE^Nf?zbajgQxX`dtU?`b
z)=fEi-cJDpUO;vxXCeG?4e+1VeeRK2)^^k<+V+AAbw83hGGZ})*_KRk&tCKwuGH4P
z9a*jEw={*w)#lSe`_0EKv}Kb$X(A(ut@eJk+xA6q%r)k27B!yE9Ms*BSH-tHMURHP
zJhgk*q(Oinfa>%QX7!UlEI0N*Eu*nTM#xMN<8ZS!dp^%PC6CmdEV$}kR8R%XZ0c=0
z?1}%Z2icvx`X6AMG<d(Ooh>XJEsS>R|70*ib+2DqUnP5b?7;*36$<N3Nvpu17lpaU
zCwZUU0wlqaEtbv(f95_<H^KG(ASbs5l09Ne#ZP)B4axvYJou~V<O_kND~g?Qp0fZo
zuj~GwU4u)zC*2K^-2Pj^uK=EP(?jZ<)RjiLBUF9J9s`iqHGnIBt1~}&e1QZW8lR);
z`k2%bcoh@9ThHqsLGgf0fYj8fy60wLOPs`R>Me8A{6_zGD{i;<vD8>Ng<7rc#V)$D
za~yEVzTxqL2#Jcckf&uO?Wz}^U{_r$tIR}u2<}?nv=#4F+G(vO^nha^`^hS_47VZA
zBN08v@a#%L)ZhVfV1gT+%<g>ZLNC1vp5Qt;nIHha%g?<7EY4FMSAm#qPXB^H+9#)%
z%<{;SP36<(fw@Gfuv(n#uSO0+`LW{)$KZgcEiqEfYha>^2><<dJ&=*`ZOijrPnIbz
zv~MSaj2x-VP}4a?z^uvwF)&*q`<Xh<E687iHbGlvK_f6Lb9P>l-j}$Z1w>k@2B9kH
zum0tMQe8C_BlwnZ12*C%?nf_4&bHO`)rwXlxbJD2*y}un3o=B$bsoWFfx(vYGY<&W
zleOo0x_e&{N)PX3`gf&O5UR3l50M|RNYWR9p@FMMFlU>Hle<4cTa8RLG65g9ZJyPZ
z7cquNe6!BO%P;B-hq*?jmhjvlC(jS47?Giy50Qg*bitmIzd||ETaAKSHIe9Nde|(?
zYZo4VDIeGqwA76dwT1{nxnixJ*D~E7>`xWbqtF4?l<`|s*o*Z=Vm*{lb^O8bU7DEF
z1GQEqKyh?jW%eq2{;&h&tRnHpl$c(db5+$IQ7~eWm=|ocM@)L(=d#v8s6s_-VXw3r
zQTijc_<zIPltqbHc~gz=X<{CIA$JqMT$(3FRAgC1EFrW@>u{0r%qcaPg-z>u;^%<G
zT`DZA&y-P@_gtRr!HvyAWSZFJ92xXhACKbT-3tQg3<GXc;(=d?le%tUtwyhq18X&+
zaX4F|9NH)a16Ow8G0;4h1ewP~SoQH@pPO-fCZAVpHC52@&r0n^Biq#bj^8%x^S9n3
zo*R%yqF;#A+4Xo4Kdi3~Vv&<&Fy+B@-dk&dQ@*(293s?T%EbA=+6nelw{h!HpIe%k
zjSP$&348Lz=JtHWPjMHXBHlr6fkv36z23=uSEoESis!}<6U!HNn9Kg)`o0dKx?TXI
z7(Ktv%Y@MKJLiBDOJvRqQ!(w_`kSkKoky6a+XKG~{U2}y!d3m}PqOy!^j6~&o%#Gk
zHA3ka=Cga?!v339({ui!C0Tt_XzRX~`FG+|VluMRPid@aPY>1$U~U|5%&{W6KU$4s
zO;tau@eH<m5urbEHUqU4uNMi`YC3+dWdg4VRgRHM7Cx6<S`e5tagE#Qe<RYPW8l2{
zxG>DSjy?|^Q(SkR+>eQ$t)}K{mwvOSi3woEHQMy9m++pCyBEOpK4Jyth9U+h09|a`
z9%w0)-6O_xq)S%Wu2mAM(BW$Daosa~HQmAW0`tTe@;j376Lf&{ZkVZAR~9oXp~^G;
zyw)ESx{AmgrjBEgAubV$OLXPxq1ez?Q*y*VH4iWDQWaB<EI49b7K?0KMn%DS++x;w
z>bp|Qy1Lrbo^!*j<U0@uQUu`Y#b^Y-i?>#uLQCd6Yddf+!@XYje6vpRXf-t+gyT@}
zfVa~CuX4pF>>PyZuGjp?%9M6u1cLo$M9^<SbqrN4y(Qv*I;ZFAo34)WSMB4yUUC69
zAVc`JTEIAmcwn8sM|`7(4obr!TPh9Ye*Ee+Q867aP1YcboJl*x6}F`LSuCr)A$;p;
zyBprOV8x-Fy3UJe@gipRz^oh*Dt(aYDYPSZI_&^{j~D@=3MO}@hV4DaB4-RHeCnle
zKg|??C^Hup)2p5YKU~l7oNl)dzXz~qQWt7*4ordoX;NhN!!Zmdtkv`px0+nMDo6Tc
z9}jMz_u!S)I*(5{M|zmjCi3e#ufTWz+c9UABR%zT-CizR0!!Z2lfA$rBCDr9@M3SZ
zl<xRX#ndG|B|x7ho9h~?V(KNgX``_J;cit9F}X6mA=_dhUByVUEuF*Rdh3I0uqWcC
z4l<AD=G4=~M5hO~`3V7jxZlUAv=h~AJrr_^!|Nqhs^b9J_B-Nj5?n+B0ekT-pfZd0
z37MF%GKKbpX3t&K@LtZ7U?Eh8Hk*s&C#yaeX?>iZ;_gh<a(kL4ohELq`&V7oj6){j
z3Ucxyr*|l8P=zV3Is0dVO$7E7)yBXzNcx=f8<r2u;w_K8W7nx946@DO!p+26M+=9z
zoKKfcw3ZPn+bTw59*W0u1Fc4>jGtWAyP1$;k~JuiP(1|9t#9)9J+3S6MWAYGogXgb
zRrb_00@&_q9PSar6mCpry*jZa>OHCPm{s}_ohG(PV#9_!mK7jWf4uuXTi+Zx9lB`6
zNpVrtt?o3%bp&=H=z_TpK17MnC^3Wbw65?7gnU4XcSBQZuPd>EB-k&3?+h#Y>+pdz
zK+DA{AS=9ZA8&6Dq3mGx95cui>~mi>gVj@5pOFs4&)NU2-Pgr<N}_gZB!P_{B*WJF
z0hL52ZgYhWbRJ|EIU5HHC<+|wI2&f)Cd3KK0ry(Xh)kX2Uj++6zDIz2Ep-`@M=5;b
zB97eiU|qIDKBK6F*IxP{O9<$@vgFr`{NNM}+kG>>3<+o-FSWvG5mBxL`5@Y4Nypib
zXONGylWy}O>gGjQ2yAKd3ZB>it8lNk29tKuOhW#`B--e4qysb8N7PAcOXm~ujjpdW
zEGc3-4gCV4_3TcXnBp;g@IN<E*i!{WJ;w_;>?zSqP!5;)7}+%c+_tLQ11W}R!)fx;
zn(2mt(WTrKcMup90tTq>RTi*!GQSl}UjMB<g|@oH|J0v9iWlzw^l94w8reMP&>h+R
zQovmW7=K2t(Fe+DVxQdEARnyy3<;$gQ=(xlyM%8PHQQV7rqH*O1eVe0t><0qyzrDB
zL6tWii7+?OHr$tppI{)8C3W2+_vykhp?Y@^KS@^1F~z-6<m-qW|F%HkbmU_M;Tdef
zx0xm5+wEHGYh`4RwD-0LHd5$~W;~vuiT_;7!^iiB7(i!1va0lwjAQDp7KKjTy-hmO
z*P7o>lGm;9ta$X5v!ImcRtA?rO(D8M*ZJgBEGpPQUUX-F(F^r5SJP!kf{MX^eI?JW
zikDAw^39#oiiyd#C2mgw5>hxGGJSZB?be_N-2_v>zoeO=9%KuyvnY@Zt#X}rJ{SyQ
z2bfR)#H!|A<pgy>R3!U5?_(xGe=j7Z<h)na{&^ne|L`@4MF}pnVcDlRcn<UdJYm&@
zxr+M!{$T=Cxi3+dHzS1=Z~2J%BBSMsAp!R^Dk!hUQ<Zf4_Jx0hipv67&>+sE6zRK6
zI1+M5_GYe;r=xcKzvZ<%w{0AA$^gX6d-UtDq&{Wbn{0;|g$aJ$YbEQvtdCFBU~|}W
zwnRm}=CnTEB`{<QZwawv`{fIoQ}}Z?z|Gu}Q&9>CX}hX>%R0S$k-pWGqU5!oO1S`Y
zwzr0+VY~NL)r9NWfX(Yha{YClc-(a!tVeu$EG~Wayp{@~_-6T;K7~lzo1ffqNu}u$
zx5J52xF|AAhEc_+O)a!<y$y)^{O5;#J(zX?xRE`LOIALa@nPRB5~`joK>y6P9p?~Z
zrgCFk7hq5IZbHK`?NPjlJt>O;6tb1Od)<?m2z&a2gir&HraqtZFc2`$n7ICSM|dpa
zro>Hk2nPyCv5Q)^UtUdxsBK6C8}WYayY$_(a6*-ozE<mlOF!RO+(33#q$dhiMR*al
z>!As<rW{^GxRj)E$%XDWOKwlZ97hQei!W|a803BGaCx^T8O^VP-|Rs^SD7c62qP8O
z{Nh_cvR&X*W>^zDy)7|~|AQ@&U})T{-3{YYF}l32zo0G+>uWgT0Fl*i(*Z}3`ew$P
z@X>6BF3<_*FTCV~2hED8trSU6JJ{$<({=fVh-j}W;zrI)`Rt^wxNMsCp9h(sDth`}
zb_@$$uF>xkG6<@~X~~e$+YNTQnjyyaG`g)0S3G}_Svw#p-0c^htwi!uP_4`7q(9)#
z%6QDt-YZjFmDAl2_)XC%z92rQ78Yi~=$3LkM2PkCRd%}6t9N!LAk0M4gXt=LmMfPf
z{(kcRDVD(#)Sn>D_NU;>pAT1qcH5Ux$Q}H+oJ_bO__`=Mrb1vSv~&l9?AR8)M-;#J
z5ZOIwi<^>grjz6YA@HVmyOu-E$I7g}j`S$yN!mWqQS>E)<Ssg2g`7RFMt`VHs7E*s
zzJgC38R>I=by?@-8sR#^{Kf=7LF+BDuOEt;;$CCI1}??4xv1)SL`{j|;`!iQzmIQU
zflY}8d=E|LJzsj)^TxAvU7pX%TeM^uYDBh4tI>Fj2Z!z4jZfRVKn~Ze_0{KuPee^x
zuP@q0QlHI>__{~=`skM$K6hMj1cvK;IG&Ow7Vum1H<6gN{}JZqmO^7{`^KQBVl=+C
zsFwLYy}^sfidDF>Xu~Ba=S5^&O8wIT&*}W1eZkB%UNb?D)CMMVfgDOAWu3?K$VTT7
zm!9u+5}^Q?FJ^L}ic6u2SwL_A3B7)OL_0AJ9WdRhGppk>0)D;DgL|;r*HwNX8FmBN
z5g`{fp`iOhSe8Kij7^TXk)R2qppk=_BDX6;K_0J}>6%i6@%+pqHEh4`y#N^&F@l5e
zmKyZV5M_SkDV>ECSfL^S`JU3D%YNBflh$h5{y_izalvKqo5w#MIrhq*tW^<vL0e#w
z(ha^Dp<a~Ka`>@}UuP0%EkuW5LXWeF1CNpbMZ1MkOS^TSHMPpPNBTblwKHB8rhjfr
ze2r(vJMycaWD{HXTQx2+GJ;t2BHYjmmi+k37x4<}ydNM1gYSD>??Sw<Gq7LUoRSdT
z3F3pK!Ppv%FUp@(nBCzb0<U7#Abv)!Gt8r}Z~C!{eY$fuQ|{m!KUd#hLw)+a%DGlE
z`d%i*v)tE}<k;xyEsaY4xyZ~jGP>G2_Uv@Il<<Z~%U%8QyZiojlRiYEc+lFX?k=d8
z5uC{x9H4z7Np>=^M}TkN%%J;e_}sdbKxpVuQ{Jkc;Kj#ZJRZ4M(EHzdd>-<L=-o85
zUTeFGvHeI8(*h_y8gzX@_2oyha^ap(fX<mWAA*^E;iIh<IqIv3oMnjv$-P!n!LMUx
z=M#fc#-Gi%8cBy|x5dL4eO#DYjXN#6N^_PbwHy@pwta2_>HDzbYElM4)6pM_Am6$L
z`goz(_^XTJn&0Om+Mc-MVwareukZJ2ukZUHrvw%QTebz7YA|t;>%59KS%c&D?||J(
zJB_F6s|sg8vkNb$Q+n?qEUg}9Ujx(1Y!i#*b#dW=jrq1Xq{$^<Ki@6Gg%*PrZFGVs
zs6)&|AU#^&?b<ye->dXnNZYCVWs0pvDS5*G;}ST-H7`PVvy%Q1$4Z6SSHie>wzQu<
z>2_miH5zp@P^sV`ygsJ~m<Co)L=Ub`mz2pKd$03wM((<$iE7f(>m|z&s@n1_4+Kc>
z_Ptbag<8tdHiIjlQ_>Bl#A-<AO^J%ojhSi^^1D%c`qzV7_X@F0oKMijqLo*o8RE((
zK}sobE|7kZ^lFo4BVEQ%I<G#@5O5Gd8IS7YHIU|4YHGcRh&74m<At1w9KXC0cHstK
z=--{a#$6lNXiIz<62LGXdXL}Og8n(_V(yRa=Pl_UVOGowO5-0N-T{-&gnYNNJ6~*N
zhJ0LdNh+J|#ym*;;@SmE_!IL9!}t6l0e`dzb(VMryc}H$f3#8#+x^BZ9{&FxS;|}E
z!R-)BrU^N^i7Qv|f4)_X-9}dBtucWvf||e}Mlk-?<-`cK2O8jiIc)SCZJ=lB-FL4n
z%hILUgV>Q0_t-$JO*w2_O&VZtX3!dw%|(T#W<Q2!>%3C*pzB})o6-f&Um5+u5Ktcc
z?fnZ4T@=q-%+MN321^E^GaxvA;lqqnL)U*+wpQN49BoTpkQB~0DWC2tG2$;?c@up@
zAm&3)|M@oh*~#X0-Wh_D2pjm%xoiHvyfWk>tw~MNY;1QF&nL&fY7ziF2Mt0Vjxj0m
zeF%Oumez9p{^<FQYW^wE4{%-R+n3ToYVx>k^(M25qa`IR(2OMA3>%;N#msxEiksJf
zefrkDb7FK&SLyzHVNhXmyFrJsi8a{UlKZteP{yfSsQ_jRngD~?l&-Tk@#7PUSpwb9
zEvhOqjVZxF&ve*s{-=I+W$7FQ)OEII6$ISwy+OIk0!}rT-+-0ApPUf#?=jk{Z=LK-
zi{mn4lc&VuHmjp(%>p*&V;W~N$ow6D-}musykX?I(CGBZkL3za;>mB$8zyW4eLS69
z?jTkrORy0`>lpoqJ<QxNXjzgin)TY3NLZkX`s%oa$H2*tL68EtUnzy{e(GDvhVSC%
zUx>6CDY6J)u01Wof?ozop^*PP&>>#`0<^hR{b5!WMxnS;X{@W}`H$}ruxD}cua>~i
zZc(aNG#Uj`O1E(DL2}uw9N9G1NG+Z!Vz4PXe1B5+X$17mYC#&>TGTs7Y9vyd9LyKd
z$8-IUKJ@xO#GX5M8k&vg;`|<tQ4!f!l})Iw4LG`Ubrr#*=*Fw81&7(kEJ3r|WFmhT
z9|#GTsu(X&8D7rmeZqcz#!QU=r<)@7aq#7Lx|}6jB8ywq7dcyEz~J&a&-GPzKD2f6
z1Yn=voGs`6n-*riL>A%r-^s(mwZN{Q|FZ86Qw|P^b|DjPZ`8vzHQSrlc`j^DycmMF
z_Z=?#;a-0&u9Bl3&K%*^VLUgCW(O{l6aMXC<E_sSzTFZ@5b%J)IKH)Yt-zj6-^m#}
z;hvtCBEw<MmP5tw{C-M!IS<6ON|_D2<K9oG5+CO_xC~whvnA$07(ohG_-E6(sEiDt
zD_0pF?^<%a<~Sl4fgT1aOrF7WofB4hd>4)3NA_O77%Gvvx0i{Ij%%|`XTSIJ5Tl!W
z#X}Gdv%Wfu5I9D}YEJJ}pVhd`T@&C!LQXMToSQugwdD-ft-X|SN#o$**)s(9OnC-f
zUIGiKHAIuH^~MwI^#>)dm4M046+kb<bjAPsYVH}KXLXO-cB)czAS(DJ$KadEuxIoW
z%y_F7Ff+KxUE?x-n>5G|%Ar3DiQ#;A5j5Yx)XNpTTdi~pSo)z8-9O&bT*%w0cxEtU
z;{m8OmLD`@3B`9F1*?YK{@n-jZczrY{>qGjxPz7%n=Y#P@jrT*1R0O_|6Kuk0_p;P
zIzv!mY!dk+8Nb)c*~|$(`}(AWCT8}}>@xS845v{=MB6wg)65M^=$Pb}N9;;em`@Ww
zi1(ZZn=%Ju$`^kAvN!ojm?r)pyheDUr^<EEb&$hbOWsRtZxBuHNxbh46NA4_@PW+l
z{C_NccRZW@_kJR_7(s19P}Ck3dxxS{^=WCf_GlloVzdp?)(EkwQJWflI;_^NnTpy<
zTOJgNy_FI(-~03Yet&tr;+4Ga+_}&DoO4~*xemxO{dwbMj(+f0rJ7`+J)T7+;om0}
z(8cb?jWzN*9{d~>(k>as``}D6Nf;I+`R=+Ng(8lfuJ-2T7@dfHR{-;-USUKXuu?pg
zmFj?^(&O=i<02fc$<k73&gccxgHC60t3L>N^Jc;5kXzwFFkHudMtBt+=nAOg5Zr&{
z9`RFA4z>IY^4kDSgYEVgnfsNid0GT>Z(qejosj)0clK+@rE>M2dB&NPVPUiL%**jC
zn@#w5^CaHEjf#=|w3pV8dR`$0s5!|d*jO&!Efi*BQx8F|e@|5}(6xBtl9Dw&USITu
z;G|>s5xsM)B`CBZ%#{KFr7N$55HCLK`94jk6s`q6@<rH*&<vc{zlO?w;fq0K-{>Hf
zehh=thTg7R29_YJ+zsY6?eY3*H~GwX2=^(Z=0tDu`}LH9{TPEUxv;>8R&mrJs%C!t
zb(cvzV{q}#7b{8*%uP-k=IK)MC+S6}-pj{RuMjJwp3<OawmttU^s50^=^7XYdrpd*
zpyK`uK^CsHgXZ6*5)>$K;P|BL=(|B9(TX1sB)Vo!-TQG3abdtYP<Z+B{sZh1^2RSj
zkA$hP%FJ>s&%v2nHc9R*92d$ij3OW0daQ>Skio`iBm`Mj&V}Q1DNc0u?raGAc`7Vu
zU#_2dT0s^wsAwTys(@wS^Pw-+qK!H;6xn^2n_z&S1t~Fs2ATC~ZT|OCxl0o4Z^m(x
zd!8KMZZzu2SPq%(@gTVvw^}+}LooDTxK$$y^$AW;LMI{eTz|wQOf%Gg0mQ}$j`ydr
zntq?7h1kbxfH0{97vZd+Z0WiOuFqnmL=R_)e`SDNY+c+Sf|ytzF56^P3<Zsvybfk$
zOQrbF+<DssIfK-FyTOs^A-J!RP{+pzp_iz;p>O!psaQB8{1P?)wkq)1dst%C`KO;?
zEhl8-UqhhpLUs9(Ew8`T{IEG?#x*@ZVfY9Ng@E`#1?e{|#lTM2#4<VZB~yOU{q{07
zG-ZD$o3wt{<Q@*>1<rx^(}RS|u$#=0ec%Mu^SJEVL7#ir9I(qJDCi?Slk`=gnUU!A
z1N!z=IZ2`O{T(MGP!CpzriosZ{h2t`;Cf+K%)&iCBJ)kuH{-63-IQ}pCTUrzh3CcB
zLDt|@x<x%BR_HZ)1MPlEp0IhH<!w&~w$5UI-S7ff*zfW0)B`atl^a)qGR1896=L*i
zU3gDrGzK-OAkUD9Ixt}BbOA+zD0z9bt}TaO2QywiuPy`;R5^P7m$#~)fX;F|i`n`-
zL+YN?=8_b4ewty#yRLuc;s@ZhfTX=iqeL2xS-%lDS6&ku)pNANWAOOEJ&E+7QB4am
z-(`5v#ivt%3S3aMDtdF>2G>;FbXFg1k3JGIt&ni1Q1F82midb1$FUkE+)??zbx<k$
zab{i;T&oMVnx^4+`F(l&NSEe&Cxa;%hyz~ZY1-0PdkjK>qs+>)D|N~{0aq6#eEn>N
zW8wy2UL2`gD(Bj^LbwyAbAlQC^+I2Vf=?->=3dvdz3<<TtNR-272AXO3>n7NtOtS*
zLLbrTvS~nk@b{(|P{M>XQh&)A;J+-ElwelG-6Q;8R}SS`&55eCz<mti@JS}BkMVHG
zQI7Vg#6JnRPmvN|TcXE<<KXa%oikL@#Y~8bl@I1Ukr>)Tl6SCtoP~&w7{QaSkmR3O
zPY58DUumCbHPt2KYNnG*@TK2hT35pY7ll6|uilR<tg6DGK2XL7V|D$T{;&uSmDQ0H
zr6JHxKJ11PB8sHQp4_eI4|@BY_ZYM`>slrLON;@yZmTzI02N{-q({q#XSZG(PVj5~
z<55H4R(h?}g#TE~m&q3^$%z;7G=R(leK#x1F+*jw@1H8d$A%Fx^TpwJO?VP^72K?b
zbbZ6eZBWaBZ8q?3i8{Io7P|(Ts2No)X!tvUk3SyQM>M&Im0BWsuevA0Lm>v%V7Dka
z2GpgQBOQDYsOncTJv|zK<N#4(pj8<aaJ(wbwgU@&4RNBgEv0+S;G%TxyS(*|vJwOw
z9|;NLj&bNL=9U*%BGhR&;@VTd-$Ix#KTG<}Je|@kDs@?$KGgK5Q*3fH1@C$AHj1+T
zaWVB3n*Q~NYLl$=(~CVG12+hW3#2RUa!KYwf;aOHZSY1vSOYRj+XecoQyJ6;i`s?h
zZ@$ytbg9?)C#H|jYISH>GX>XT%n2!Gcr8a~;F4CgtQtYQonam?Ti^u-t3?|b5X2aX
z4P)SVwb!fopVvZ36~JL=bB*Bi87CUq#D={Bigdp9<(<Ob&k|bp0kCSZQeN$QlH#|$
z{4V-2XV5p@6k>sKW-)+aOH*r~ul?v*&D^elaYw7FjKE<*kajMHS>wb6$m8`PvlZ#Y
zF<xOn%PKqbq`PWO|D6;4d&Dp!uCA>uu*0f7SY|xEy2|W-D7mH7lgOZiyuGGdIyZ%P
zDR}-FhP}1f)<5BuXFACf_VT`05WUlXeBq|vq_VxyfYUZqS|Ws^l^ch0+OnD$X*F@M
zxziS<IXzYbcljqI9@iXaK>oQ)IULYR1Ris~bw@3k*_-}l(w`I%E5lW?N}%6jMEiNT
ziIZAnnUX-oFd}dNQmLG82wQ02KT@j673U4O=E5SO7Ecjg6qD<J6M3v$Ycd`V7hX3X
z&-9C5L6EEN@sP^BZs(e6tm0XG-sIjS+ejH}H@e#Ks&KjpmB9xmjBHe(AJ)|oBf2*+
zQBt;!0*U@Ah~=FkI@>g=>Z*s_(p8PJq)RYQ=u;6tZtf60cR}V@*MSui$FmS6i#S1%
z@HPxwV2oFNa#DrLlKczjxd|J>wHYu0*5dP84or`#Ig*}YX<0x|An#`P!h73Hw@T&j
ztGysNg`1}FKo;7F-H3H*1{ZgA)1du}%s;LjLswYL&7w*bMd=NIUQ38RX*#I6MZfuV
zCtW#qbMP5&SoXK5#}H6xdh#A`r{UuVOBpNIE<uq^dG(!&tTd4t3?A)t-%?lc<iIQZ
zNqN}l*McE97qQSUk>B6Yl&9d@ZP_|ip{w34F50YLDnEHE?w`5IJyejg565$teM9tG
z3X2r2y@3UhZDQ;RPL)otyS>HA>uTGhzoqg|2fh2-<nHNfkOia|vdhr*?g?-3-v&n4
zK_8jvUv{48;W|nJla+$<z+cmP8Pe7bjQGGVY<)hO8Al&Xg|lHU-&Ir8Wde%-e!E9t
z7e0h^BjjW>hbw*OL_ByZrK~8~0JpY!8YTsBm`|401V^+5eD6K%>NRnkwfswc<fl!H
z&!6ByT+^pqP@13NNRnM<M8Pnw=~>yZp8wVFlo&&qt-Lt)1l4K|#xx%7JgcU_6OZ(L
z!P5E*U^M`BC4~Hi7%}KK&r3vUigzxeMurAd;83G!wwwi>!ciMYA)@Q}n8DVc>idsx
zpZlA}g)u<W`E&KrckZgC@y!)Yz|^-hnj_9(wbjq&6yTnz`wvn-*<tL*m{<Nm5Cv9j
z@2NXf1&#4MetY0)ufDv(T=LHUzdDDFYrQZ^i#>B}7I<_y&2XQ#PDp=`*USAIluyJp
zH^=qJYE)G{8iYa5M{qSe^(lG<n$z?9h>TJko?r9n@>N@-;P{)NK5jAbV?55g^;Ods
zJNdJ$^#VKB%NO=|VHb?frhn<rvH75@mR@<xvF!0UA93=6bG~0mYRNmqdp6nP@VD31
z#o1LDeY3(YtxZj0Pz#_dXCPBLq_g1jxL*o~2DB(NR#VJF%ea~o%f&%q(!ijmnA>SQ
zN<6ddj4(^DX=yu!u+hw-wBavcj|A$mnjl}kQ!Fu?$Q@nT#0dP-B7nw!7gFayXKrDB
zFC+aboI%P5A4Rg1VK{%WsX<Rm5PB}Zi4`QduysNH^cY;H;o!@<4#o~mLVu@aN|`w4
zcPfjaYxre|tixvi7%IKWI%Yae_-nnB*+2<o009Y$gS5a?a<md3J)mO0kLP9o&V+E#
zy6|DOK%?LqDDxMf2```%g=V##*Nl0`5uD+m&b-cjrUp^)6k`no222_??h|O^_%Tlh
zyh##dfE5N2)F8H<SNH_1j5zrq9$qu|16v&+2OyE>3>%=H-EVyk3@%#62a&g7O%1L=
zyvrOk3_y)&2GfM9K|riv_6q|yKK{-pcQ~w%ia}o2uhDeUiLztaK%rLFH08Bws<8(<
z9l8Zcn#nLF`sh&(ZqO}oxG2?I+I!e&QC(6cS)e@QUjzk()du+hL{+R2O*z<BP;5Mb
zRd6@|h5S78Gk`(34*Db9X<#gfUv*1ZXcdZb4ef*`&|q(Z67xD0j5ulBIzvVs_&TKp
z2HkL1u`EFCRRw<L!fp_PRiP<){jD!T)Gj{$n)iT9Mvgucu0xbR!2;PgwV$qB@*|bi
zR;kT>y_kV8dc_$0OsPir<qM`arb}h~#OvVXI~vunCo*t4ewbU@L^z%u#PP_5(cpua
zXe@s^%|~fX(k;ou-tV9s4glT+Nr~<9kscbL1*(7Z<K2rw7Jy2X2b6P_PS1kVtRavE
zTgBSh$tQn2oKkZyAE+QZLqP*r2f<irI@(`#>H4gy3CzWeAf~S_w%MI%D^}Jsmv0F+
z+6jX|edWTJj#YsYhVt9ZNyNJyO?^OzCbF6N%%~q@e$9-1)?*`_UX)E!SuQ4nq-bxp
zu&?YI&zC>!QOmn!2>Aolkr>dyCv^+LtlrB_m%mnk<`iVWd7b8+%#O*hHY2XS-GB1C
z@peoec{0l1x}+bV#U)IA&S-QVq*3=@Mi=rLGt}hZbC%qbpI{#4*rk3wm32kW{7t6I
zh50ofr;yv=my&!!&QnwO&;gA==&Pn)J{2te%HN;@SKrW=yN=3CL^76U9C2UbxkYWY
z3%{FDst}MgV-2}E9Hf^xAdZ6SzXNb`w)+*Qz7K~gbiTt=#+Itpfhv*h%#mD7E&6zC
z+N;}5_$ADz2Qu7yy)ii3X4YdpL?wR}pAfnF#8YSs$~`tRvuT5?t#`et(bq%}5;hAB
zo-BX`bwfKv3?tfX`tJunm|`$-xD|=W*_qT+pelF&fjZJ7x|UBA6QzipY8+WTGyfUq
zvvaLC3em6D8t&SA&smMuyU9EBsrsXDCw7ZBQ&;iKece7TJEUP>Hl-_wo*G>431RGl
zWAwJB9nT}8^iQXhMm6$ajvH&Q0Xri=NY6I9-joR1XIEO_aMpKK=DFp_!yE)7;!DH0
zV1b+4wWAv6+3?OJ_&!NNR^D~dJos$R1HZ5MKDP~iR)<0Teg=ZxV04}^8r0E1%`5+G
z2M9sgU3v*Z!g?DNbqEl;G%gTZ+Ijw1P!VV*hYkW8<v)4EqaP5=3_^oeb0AnKHY6s!
zah>zX0PGsh5tRt;2s8m1eFy-@vxo@b@J--wwy(wfASYv1Fj$%IDkI~UOZnQ$*&fk+
z5YV^yXT|(rTfWy2&Ig_nak<h_BVAQ~Njo@R2JAzl-X?S)q%J{%J`7%`%!ycCdQ^wh
z@d~>9s|rj3D?@2^X@uymxhR2~7&&i!wUN*kfInWu-bXfdcIbm9UO@(h7~B+JgEE2O
zff#ULJ-=f4K&#APBf;(GhkOI@Y>q1cD^6#i3TmPuy)X!c04J8u9Q`ITDof_i5J>y-
zuKx3nGp__P2Cg~dJ`+X_Xi`}X;Mi%9E-0$=jR|3qlzRP3!0ttdEf@!|;#g>B=ymWE
zd!<CqEg1-lq%5PO-rIwHD$BthuL~3)a+SbJmq67TKK?uD0*<a_wAx$VU>r9H4dGtQ
zFhE}ys}%mm-@$THv$~3Zonr;YLRC4iAup8Jm9L2#W4$!qiO|1YgQ2lNt@8LqVT~Gd
zmeq|&=7Kfg<Onx$8qG5#$(zSKd;Z&Tl30Uv5sU{A%R*JLm*@_P!9T^);8)jB5+!*_
zS6d0rLd;ksC>+9xWyiVLbBt<AqjfWBL6@PIxl}9+O+<%3ioW*!_drxD@Y_Q{28T{-
z5P^2#1w`ep9}E-C(P@B8|Iu4{7pn+nWNKy?RnB_9d-{(6I2Wq+`(%TDZ;v-0JUoMp
zcyDVSA$7#XhhO{OIloF%!-A*$&VG9Rw$Y85jg?Nm43I2%Osztq?AI>jhPU)9$9s*E
z=PybXc3Muk3g#`S@~&fmi<rjD-#8$3&(^R=Cq9^1(1*D_`WMk_w`<gs9PcQf<Q!%F
zu`I;Iag%)aZF1?HXONQh>UM>esK!Wlm>LBS;Z5#-lNEN{JO@{9txsO=bnZqdc)k@g
z9lQ7R-BUYfPX0Hoo&v+`G|D`Y`b{}+Tk<H{k^tB_J8S$3F>)uB7bWJja3G%I^QOob
zP~&B-ijHO`8^)ifS9Ar^SW<d%HTAns^Wd|-q^f@VYV0uc>;#FVfOa3w6K{nMB_aD8
zwF8gqspGq7RPwr#9zW)B8eq>gG3gE{L-cMDSyG&Nv|<k(-^TeW&oQbXdfs~9Q>yta
zT$IA&2TPJNxkGOK!e6fnD;r^t^DX~R^~S-qA*QqaICU2L^ipdZ{WdQwm>i;-kTS<0
z41PO20=P20<27mbx=<XAjG){UTmTer)kiGPh%saJp0fR_Qc6IT@2KH`)8oy*qByMl
z;+L@7B*Pxh?Fo$DWH)B&X@Bf8AD{#30Cer~0G&LH4s#&-mC9B9odP!t?zk;%QxJ8b
zg*#_ERZin!Iel|n@FYG`XcW?U9esX8*mqORWCS?~j)MLO%2>38Pwamygzva8f^OG<
zQl!~K+eRUQTv;?AE*^nf_q&Wp@>q^Qql-@Z4O*Zs!cA8Q0MQA`VFqTX0BU*C=Mrdw
z;ejlD2J=$H%<qhb5c!#bbYm#EW@uz}E*{r-2{69;88Z6aY~19|>iP}D7x8O&5#`q?
z+-M)c;fY;PK&hNhS0P`HGh{~J#Bm~(rg;2BZ?sd%W^;A;GGephk88C2_}KBcKxrex
zCBnUCT^8fja$Q;K-c=uP9pvee!9LMY?6v$?exp)_g(B|*)3YsG(34w(7UD|wkH0}+
zt(!^ta!IgIp5){?HJ^(#o+p2{444hjAT;=~U%Z%x{x50#6BmQCV!l9?>zCh2+QgVR
zm)bDh618mk<>fBeEP!88VsTTD)HH2!QubVu@n*0W%bh+`h~asf!iKBcDTtNpL+_a}
z5I*61ZC}pbn=C3-5NmfId7_oe9Q<atKG97s?7mb2t~O87_aC0mKQ>#u_m-49F@1Q*
zqnM!-K46Apg$3C5QukNR5X|F;mr(CGI`On|!t!jDAfT=KO5en33S-pfIL)T7T(&yY
z?&*rQaAa!-D$*|({lRqh>?_-$>N%3np*oXiQ-B1~%u>;X^2g0|@i4{9_u)t>KMj!V
zB-orDCx`!oUTj1%t0d3v)$(wJh3;9~x72DS6}>gn+IMA#x!w(hpa-T##8FeyzA!~t
zHY`vtcX*?MV=#ipYntFhRUzhhG@X4<O6y?B4)}5DKlla4wXq~ryUW&%uzs#jJsacY
z(45+vu;H({y$j%l(w^0;c&Af6rda+tt5nE$WA<}EuQ7C@LVUBgYwEc2MJ9rd+TaB!
z`{WHbtBqUdwS`;&j-B)<X~N4smDc{X(dy7E#4u5b!oK&FuR^~^{%}PB@pbmvsAs$X
zm6Z0s)QxyH&$eJe(}k0}nj%Hb{guMW+4;c@;rL}55U)Q-(t)<{x3kCFt-aQQ9S0zd
zV2!AX#7tCM1@0qwl+NI?BO`->t+J>Uo!@Huam2R{HH5;A^bC4*-BT|eC)BH(Xiz89
zg5Ys_s&wKP!ImGWF<$qmf=ufqb0r2J>37M`-iZR@nq!P;83Cq-nocb$Xyqz??&`VH
zM`g}@ClD>6^l~N%q(o;I>t+xrh->K7vRqMT5>xV*nIe9Xq~DH47Y5Zy&@#_Ja~=Y5
zc11=w{cc8aCa6bS|Gw>Lz0_q<)n>(fMT<_Q-i&XHUbu$KyF<HtQqLw`uB2dF;H~X`
z(sadk{I%93oS3Zv)EMq>+k4f70oTYXmVUyO;EUb&FjsqZf2Op(dzuuLqxLFYu!K%8
zB%&%A($F{6z-<Px<KbgI`=k+~1ZCO!`cx_PA09rdM;6LuxXey1dAWs3JOBxT9v2+@
z>zvtSy09e#=8M0Rd28-aJQmM1G}$AIP$>0bt$)<IZ?hOt!O98|r+csl3%-$wYlbrt
zoLV}conY<3worYImoupTzX5HTG$@jWhR<E(Hm)P0WA^g7*>oNt;gF{3erVyDbm9@c
zRAqu9)Un+cHoBvwy;U*SvEFOEY*>hx|G~H6M0e1%c||{3FefzDdH@M1^jN1_t9~Z;
za9{mV;iMuwOg?Z-Utz*EpH?g4RpNwuN-Jrc#(rrpd)<Mq<33R%2kvoCMHpNi<EJdT
zN}2HwUFzH8(Q-7Q99hi4uNP6C-JD9+PQlffugK<dFW+)_JQ|d1D2E=5DQv>iHCXEo
z3Bz*{%?FUdZN)KSU9t~8S6n|t{YLp_LB}m_`igmHxw8-sSdl&)yNF8W7(6FY_it)E
zQyf4(LQi+h0yE0pQwLUz#4ct??<h3*aQI>07%$v6=wPrv{77@cmtCU=5Dc%gBoDrC
zdPTd!#1ac9$(4I6^Wgf`v>?DjV~zb=8ml-!i^R#bA>R6mvL0%etfe@r&2q^ISouB1
z)BL+Wepi40mFq_6^V(%#f^@6Fk6^4smNGTimi_RTESLt3>J5?WJP}`xNEUf>*DG*`
z`%l$QJa7{ZZS3FJdoJnU<0u>q>osH!>qihAj#K}UpDoOl<?b5o^EI~z=pL?^QFkN-
zupXkPvzN9LKrG*){K>Qa=(kt7MCd6vo-l4OwZr2+$$1|a=qrx<b=<x~nq{SF6^WE0
zI0FK;FIZOl#!ZWr__m6_zdr}@?ix|K-(c<fj$WFeaHcR`$;%#+a?XBguf?L<EWP~0
zad?9nqdvxsnS9e{sMOTw#(Uh842~>2Um^{1KE}Eo$?6eT@wUwUr)BhtI8ocu9*Z6(
z%LxEv<aXJr<v5X`)h}q^tS8BvVhIGLP|+c*JS$aeZ}}10fZe?8cMN+TeI<|DFP|Jd
z-v@zn$(rG)sN0=ZnRHaCjE%XJ3L9b+EF`c~`bN6L%T#3Lyw<GAeG|f+?Ur!-d$DqG
zetry_)_odGgY+I>(!FbVgKhz1<W%-`phg~f-cSUjz0{t^YkQHwhg<?CPJp215$rXp
z|3(_GjD?9~Lg*?5Bcg{m?*nLk4Q^1Rac?9g;`3e{Uerkx$VOZe06J{kOa3%B_;UXy
z0x{ujC+ak;^xIU#q-+uM;>)h4fd~fR#`M=`{w#3p)O)h4d(TG*sv*yXPx%1)mA+x+
z@TUE+bEIpbj9EaDzZsWFd!N@fL<64}B8zc3=RG%8-G@H(-T6i_6nUZNk{!4M3-of?
zkF%sMxl)RRstfX??0b?1h``*y>9d{F-GAUyr}NE@89AX;!eU-rIG(>%yXg#7;jFVT
z|1d9vzi-bUxujeK#H6Nkh_0ZNEJi_>zjaaPLtQ4I2ri(PUXN<z`TIKg$!^!vp893y
zUVv3oC0X1fT^p=b9{Qae-1fP{TNvieszdSryUN%;GFVm6)KY|;jBDs^aM;FF?@fBA
zSP$%&L{X)5P;p;3BE7jTsXQ+kE!42m7%F<3GR89n4`J6_n#rtS#*4pid>9!!_@6+O
zi)*7}oybzLM)dm^qD_|B9h{3JIATU7mibXyvyeEG!IIWJ&H$2vxby`^Z!?O^#P!)l
zN^k9YkTMUn=jp2uJu3fE>Eo%FLkJTxa*RiP@<cpzjat<sO=_HZd~n{;&24~dO5{||
z(h}xxr@G!;yOTIJCzLS~j=zO@$^z$Js_QG%y)vDm!f+^M;)q;`^I<hEV^)`nYIGgl
ztQ^37n%1Z)&zcH9FN>`XVW~6=>LwDLB{)D`pqLAD2Lwp;#*WOVbwDt|F)xsn9Vox2
z_xl8~2nggd%Yk&2iK{sndyRVWfX~G7;QzhQ^#A`hU;9j7CRi$W!`~Q6tfc$N1KNZb
z<@;QM4nk%Oacu|djTt~GB*euesx7VEEHGh3%RUG~^G{1$RnQc|!!X|EtHy?qJ)8j!
z6fIH7@VD(HTJ}CL6NctF>{|C}8bYyu)c<F_*mH&ztgd`o3&-+i$m<#i2mR8~yt16B
zA8w3y;f68PaLtr!<As4R)`!oWrX)A6^8W5C&;i8u$HHr+iOPJg$#@3=D_{{7_58sY
z?{XL9pi>dl3E>d-y)G8ZBaj?wt##1n6;ZoK=IZD%<J6^3oc1e3EIVUd=l%1N^pQPr
z#v)Trvxf1ra!-<QH81l&3816wLvUrUslr8nr0vppxUZ%Z4;5IdqJ-Rtf+>~ePm89p
zKM=#GO=fc<G$&9=a!vJoeqsANnU?O-vidV%aK;r|)BRI@-H<XkYCEGdWBUAt#1+Kw
z^x?+l<B#WuI^r?wQtEd<(J%h-pBV@0PQUb`b{)MdB7?GB4O<<yf9d;ui(>P^CuMH*
z%)k58kauX5M-D-1Vo#!hT1+E7XxAeu6Y+x2l5Xgfg1@C}DV)5w^>SDxuW?T33XVxr
z2dMe(o2lzQ#K2iErsZ~d?X+3fqe|uLb7vwK&7-EgFmr6hGnJ=7ro%`*|0?{wLG9q;
z?GLWM6gK;~E*%0wY{7%WsUx+2AH|9^R-F4xi;oHC1pb#exVbibXC$<)5HE7=8}4eH
z`A#D-Xkb2JSS7LNF8}qB6Jq0Nf2j9zI9_v#^<r5%g?_sYURH4W7Unu^AL{IciW6E0
zR+Vxu2wV%%mRb1mK?C5Fn|^E&OrFM}j<=pO=(I6a@4&n-lGg)_hXgKJSI`(JBnW35
zPMYFsHe=*V;tqQ%2D80?-7IMzX#o&>uIYUErFP%R{E4ko<xJt$Mm035`n0T2kwa!Y
z9;|CGc4XcZrp{=g>bWzhf}qS}=}~1^uR9!I@r)h0!PW^H5MLEU>ASZiJo=Y&I9>#H
z5CL<`0B5>i<cexv7MJ_zat?dIV(tR%RD$X-c!-))Cpi4*u$)*8C^hg(a!*lOsbYa;
zjQ}G&AGF7&1kDno6*TY>jZ{{~+CoaHN&%BEV3Cp8mB2&3h%FN92ame5tWg=Rj2hFj
zkAgx48>OLQL{VS}>^FN^k6j8y;gB#2L_o>gYfwuA=I6@Ve;WZ$zMIty6ubHA<*Pz8
ziel7xl_tg|{lPWPg8NpWTOf*ZFP4x~#`H9;8ZBVFlqlfnjlJ+qqevH!6nnV<+zup2
zPa}1HfHPaP{NJV7(lgqj=wILUi@*4DkKg$B3UzbyNxKT-Y!djV3`L3I-Y%D=9^0=`
z;7g@~s{$y+-L6g!bA2b9Z#`IVD?Q^e+es_RBPqTDzQT9VBLT*uLyJxwQ^d{|xR|L^
zB=!wJ^6g~3PP7fFdOug7TG_#$KVO9(766^mE>x#mv0lr(puBKCmXmnsG!`^>cq)X^
z4}AHq53enI7%?*H+T>-sut-_)j_hsqsZ8XbFu>KsEDHssOt$p~uOiQ~g5a>Kt6#x@
zw6Stgsdw`qsY)pCV8yDkVA?8m=fVr<x!-6vQnYluY$#_@Wl=AGJk2%TiB%QQLady1
zbVvHd=&C%9_?fdw96zV(LN5uAPv-+#2<oi=@9O5sD7eyG(RgIi&@vuZ-zukh^OiAn
z^o$}UzLnebE`)3LUi<%4kQ>T|E}{88e=^#_B7LgR2P#3LNkHbA4M=iDqgfe|iuOTy
ziQ7O8h~91(_C=+%uOhj~?eaRE{PvPxf-dlstO2Auir{2fZl?T^Z0Z{ZFH1jdSXhq(
zn+lQ?6zh(H7JXDy3*8d)mfVrQ#ox9ZpfX9>IeTNq5@+wi)UF8E4oki?sm~`Jpt8&`
zXVUBLM?1}9#>msCvyL!hPZmJu@jkC*wH7~P{p_>jtC&!cnN_@Y`^<us2=!e7kO4!2
z8SDhbfeD|-=KMweIuUeN;)la1fz8g+j|cS-^Py8W&&PAEOiy#tlqJqbr~by(%&4Jf
z!eTx6N>0ZYp^$U0qW{{rOI#azJ9~PU$&3@0O5-JI-v(~uK1sCnkg_rF0x?hMgERGR
z3Ll1;I34Tqtq9M%_H|!I>tVR8GJ|S)RJDr^^tU5Paj1;l3BL|F^!CQ7FwFOA5i*E-
zc&eo~)lA^HJF&PcL4foTRWy5~YFqwCJpZX>OZs~9I>6rM36R%b2<<0cGVWMbvpc*`
z0nRPPt?Ua?I|f))!Q^JTTBzeJ6qw@D9Ny@)f9qcvPCkxi)->0bHbId<4xl-#8u(xH
zrc!4M{)k$El?+43?@pU!niyYQD&p_PBmV~BwT^&{T?RYeK_Gb7u-b~z;AojS|L;p!
zUaU5&GkEH8XNEHW)|<$|KytmEL(d?t?F@{gFHfJLm(Wl4FDwa}d1Yn3lvOA%H5kS>
z)g}my${Flb!PO67UNeO}3B}YFWe~=9>RNM&o$lf-0F6|yeC(F=D{pgBR(Zm@o7;8q
zp}*RgP<V+l4}4p5ui^`PBc_|ZloKgGGn_xR!K9lgYT_WUeIpQ8{0>QNTDTwIW8Zu>
zv^RR1cvqxB$Piao&=WMhHJqp1+Rh9U6RSO)KTc-6)ysmb2N)$x|7O{n)aa$c#M(#i
z^Nu35l0V6kcdPLECCwu@8sRoY-iCTIrjPDk$O?;Ow1)=52~GyYP<OrvmWX(OS_W4|
z<$1CxIo(LQ;LEbsnZ&1z%{(6dhjlVAoiQPb>Y6ir_Dm#BUqreO&)<?4FKSSi*3y#m
zjdn&#73$t*>Ck<jeT-MtGbxb0>grQ<$B+DVkLp#TM=Oml+O-hF#^q8A^n?HnZxXto
zo|UAo;-7hOK54hd!`1GRpXmP}Ry<uL>DycW)0DhJxBQF9o2bsTDtpnLlAqsV;&F2q
zj5e+&;oC^oM|KIgrVqU(d<+M=1BRQ^b}dHw-bmZJBDB06PmaVm5B-X4*+m)OZMIm+
z%@+(`S|$Aev6tDoV#nYU&8|_`H;%*am%Uw5^ZhGXZ6Lh_hwV)Z+f+><zR;~b0cLA-
zWNeC&`VDvju72V;3e-<a+*TtC#53M-X4_Yp8qeC+LyStS%shQN{zg!Bg*hbz88xwK
zhR1w9?8o?`;)1NcSA~(*eq=>WbtJH(^?RBN5fcGMx%X`1x)hQUsYOX#+-L4fA8@zS
z%n&AyQAN;6Gj+P?myOeByfz<$MLq%A18;`$%KVD5p!J2IB?dNJ?YC)_BehwfhWnd3
z6rdqlzN!-VlLRL?M9wyls$Re~9#8mAE3!=V@uiW03C?r>1urx4*7Gc1Sc<*oNAt>X
zd`f-Q-Wbg$Ce;1wuY%<5nJfPrlH=jpz^KZMXyGKP#&wk}b8QN8_V##~T<*2QOd>kq
zq;)1K+cG%g9*;(y)ukko=mR4A^Qf&U7_U~?AT2@~&--O(D&}E`VlYBMZ*!`7uB$Hm
zIVLJ1XEJ?kqRj*KfrircoFrycH61Z=MOSn9{!LU&ik9Y!>nsDM@C)+SQA-hxu{~bS
z_N3OJz`^9X1l(}ifLd57mB|qJO)L|9%2PXf67fk>e0q6FoG;wu!x%Ab8fa(U?7Yo#
zVQ$t{YnKyoeH|^t&$FSE$^8l=8{>Sve2Fkuas`#u-<80KzlCPI^U8joRm<yKTg;Ra
zkj|A821qv6W-(~4me8=7<=!u;&&ryItOlmvhH4?cC;EEK3fFdoRd}oUG)X1S`2!L_
z`obWRPN4U6;_=9syk;ZWSt$X!#=r0CZ>@#s2{L{#UGi}82JH=V-=0T5zh1mBEg4T<
z1_p%r3Lz8j$t9AFraJ2$oTmq(wkKi_?s~D{YTE;HwS8PIgMWFjl5NlQifV=%F2Oup
zW#905tD#kj1TY+f#rf?FmxHQft|0p6vQj$KOpw0k(LN>6>|;KR9+X=D?hJ)%nw8U-
z%55Y+-Yi?1aT$CnLav(AAONC8X;Vd2Rl$*DfyA{He%iCbwo9<0g{dAAP>{Aiex;4P
zMtyS>;(f-xFWpwjzQ<$w#$7002zJ48T|1)Ik!D`$C3S0J2<F!!?0jBVHZAwi$U1d%
z&X=56CY-Yn#A92YbWS8(rMtAhVuTVjsS}iuy_>d{(Gt$-TLMTG%A)e3m1jn;8ri=W
z`zKhm@a0*XcJd|RvC-FFD=nq+PxQ|px)0^bk3Muzz}wjSUSTwyb(RLi9zVzy!q2se
z?W=a;f@RYBH*_Y`seP6z!#$<);aq(l`_P5Go=3L%9J<MS!*dsDv<{h*kLeNL#XgUB
zM2L{tZSR_4K6InNed1-sURyKtLA;kb0_MnAXOlWd$D!r1yR64wUcp)Gp1uN(r^v=Z
zf3@pOPu=UA(>$_br?P4^jc$?Ky8>XY8V_bG&JP`gO1WOBh7F^uv8j=`x><hAS>TT0
zyTSIrSE4RIga5#~ts{V83T@ZRZgiX<p1ji6LniO}{TMpl_C>w8B|KDWPt*wF$<xzf
zS~D8yDOGUS<7|3;K76LTn)=dTncT|xw04X~yHYsI6<F(ez*kKz<*0LvyMmY>+V7Z2
zVQ)0$JD3jfp9p9bPMrU52P`j;kp=pD$W)@IN=~1~?8U&CM`3bzseD)u@_2@#?U%a0
z%}Kk&->brX89|DgS(&g<PA;#_G~SK9PoMxK0<gN&MaREvvm-B`OiCF~#JIe16po$O
zgn6cypItIp;#15s*(*r>WERo89eWd%D#YS;Rro@qOYJyU?Ax}xTpvE*<T2IYa612K
zo?&HF?#aTaj~ReVwQrZZX;f{m`e!+5ew|i%@uq%}b$0K#fTW;jO7$#YO|b4BshE1o
z>Zpb5*Yu7=;hO7rlLuYXivt`6dyl_o3<PKPUbEzDpH`ksg862O38(IGCq}eO8DlG1
zC0L#*LX|aEkc7LQ-sf3WVuEF5^4+A&t+dgkFC5}6OaZ6BJo;DPDaRWf{3oHd3uBW~
z?@!?-=mWH5eir~bo83R7Y^N24Zu$vj7fAE(4avw0Dymx~<LW+Q`Y;pIQANu{05|_O
z{pTSjX>>8$UJw>Es<wRo)6{o$TVGjEMsd5&RFCZ|hDb+(qB<peYmQ!UU-fIhk1t+|
zhzHmQDkmH6)7R~s?NH--?cZ0G9)g1FFRHnv0%M9`u5A5grorOW8H<u{*PP7)o2cpU
zdmriJnxdPZ7xhTBMr8V|du%`R4%)k0l+%Y#9KOYQz+WGHTvkCXqE2PeFEn>v8-lr<
zy-!u}o}GQ5hGtQug=e9^-cn`IL8TW3<XTrR30P_l3t>V-1?J)Q^F6mdsRP>0xdN+b
z#V<N6vPm#0qfj!NACK>}Y+eekVQn@&D0u)kQu9+#>}k>@37O+Bqg!_z%V6T@8PFTH
zp&pYI>H%FIlQE6hPxx1AWmEJfDmi)k_?4HL#GyOG_(HkYx*CS_mNlab1s^XfL+Kha
zGM&FZLesuNPRbRNFYwteb5rm}eu$Ta2FH=t8ox%>eHoKJ4S5U4Zla<uWwg&0(Ov)a
zhN=7RxMW6MQM^_{Kzq<IpuV$bEHZnUVy!U~nM`>V#x(P<{BeE(Nlx%^{X}x*7~0dE
zs@(2NB%V$G!667vHmg&Ks)9%zZ|#*h$A?I`sp5qhuC`{vf19WSZ{IpXqO?7IPdS5r
zX`KJQQKo|;EWH)dI5%v2z1emav}<HnAZwOFwmtU;zJ*n0K@AB*Wi^#L;cQV&KZRA@
zXv#py`DHdqiREF|^Im(2=(9buu&irCbz8$s{oUa)#(o`xlV9ui0q)LgTc?L{bf{_Y
zgYUf`rwn#XBNK3#`%&1b@{sy@Y%oLD{`;&j+(o5w5C@QJ`M5Sb&QCpk+BHwUuqUIv
zMZQ%lMjYYlpR=vNuYbCr6tSPyRhW?<r}5;p#q9i&5y*@d6wcXdYTC>!Nd|_g8Y0)-
z=VPfPOQAOn<j`|szmnTuKmcwP43i6U+CBrDCYhZ5Xl~!y=%wJV7-c;r1nk5Vn!I%Q
z&VP2@e*kIXL~WJHQ5=7{R~4%pLC$OXl2$60c-(rh#(kWrWAgR>oY-X7FW1)}(T#xL
zxKrHPvA7u3U0<_LO_u?#Vvx0I0@#rxO%b)?cfB^EVhGT8U2$d?XVo)5g@IEjV(e&~
zyKPSPiG-x2%2Vd-ZOhwU!(%)K{T$bNKj_M-iN#5$K%Z5p7EVA3FE9H2$9Rx;>st8j
z7&Rn~URq_eTk@f`xQ}(hg>Vh%-=|tC&x_R_wuh#i*WH`!52*VMXd+E-IBRu2u)dqf
zpM1$Is^&e>;5BTb39oBzT%67z(;+aF`_lAWc!F~$&X7)si}GQN$5bpLuWqI*STt*}
zdQY$V?4yVTy*;##$)yS}9u_*7Yk#US6Ut>hT_T@_na%iKzx^5J+S{<Pf~%m}EbQ6`
z%}aRS$@I_|_6F`Ul8_%uZdpx>6?s6f&)Rc0Dp5V};9`17_&WfP@>#5fX;ZfQ{mY&d
z!`f}bS1TVmqX9-MsenQxlWwV&I6OX>x;CK4p7H(L;ws)Hvjg+4SetcsNstbmP8X$e
zVuUn>!Mu5o#hw<;Bg^uq-aHp_FCXlgj}v&jk^qBw>O4qRw2%5ZIywBXR9RZThB-;f
zKKiwHC@{#Pekaf-B$snE`&=92DLk_f=T+R*Dz~u56P&2ceei{zRwMA0RMHNWKk<d6
zoT^wNu5RYT_T!1c<n>1pT;G6RG+9>v{3R?%ka}|0Z(<CicJO{-^!8MDAuiNY33xi2
zCRFu<|AOw+nJ-?8NG~tGug+-LXVcvbYzo@G3+3w_oE9%T>N#lLyVrz?+)g(z2V6;}
zq#@g}>e7J(S=Kb@)C94)%TI~l{N4p490%j!Ousc19?!$yF=Jx>z<N#RMsdFYHdeV*
z!8a@F$3Vs8=gIw&xvhPDd#hZT(;Wa%7T$9X-9%SOi#_HG8)vcSng?3i1sIQ>B%6Rg
zyn@WZl_I3Y1W}|6^>i){Q9vX_mts<vfDF7|{;8eN!>Ax<meF&$3SG=3URQDN^r1)6
zM#R_A)u3&&3Xc%Lio$YoQJ<78LJeVj*}Jq1&OaBPt6bJh;)1!CB@Wf+C6>ror`IPG
z_eN63(M$WKqCh0`b8Rf{J0|~y^bC$0N`3r(EnUfAo`S!rPueRxfJ;cZDt|q<5D_+f
zU3Li;?9s%|UfNA}5@sCo@KSx`RU24P2U*yCp|{53Lde&yxBb-LlcR9ud@t6-$wGN^
z`6Ig_Cp>XvZ{>?`1wgNojc8PZznEkpLkGWVL~yR3E)zc#NgA^P&k=2HV(h?yh5Fqy
zS+k@$bR&W#&VaZa$WOTITF%LH9yrH2IF+S1Hkv8f@dSCBFD3Ibf~eTkjS21$B$!A}
zM;uAnde3I20eMpSg0G)#m&)pDoQaS|2NfK1=v|fs$Xj`XpmfPYy~H)a?~`k>1+8S^
za*y<vGft?C&cM^{hvjIk{U9<aF8H_8nU=Jif9MVsP|)AF@7o^;x5~UPyi0abcAO5=
zR$!;DTKanfCbE@Bea6XpaZBE(ap%{kk<Nyt#W#|4R`JpKL7jTfj5%Y(1k)-a4!<sF
z|5G3+6$02A32T&V?1)U&pXCR;9xz#-{j^=Bt(^{9HgS}DcdUQ5f{&Y`P5z)4P#e&j
zNP*z^z5)#Rv$k@y-b(6&mJ8oZ9-mdx2~^<e*fsOJ0gd7W2fz++UQYU%_1#eKUi)(V
zfX;zgNyoJxvxcNnIq}M{t-f80@Bm}~WNCDy0dWpb`S($`sx}3$3%;_#MV`JW$m$)J
zXPPqMbB$BnTMWl*i2u=FSpkd*l8VxbEqA6qbCh({tB~aLZLMQBPs=Imm`tc=$^mA>
zSaZ%z2UUBw<ogd^lgMWSD(wA{S7)M1gAZs~&e#Y}Uq>28cK4UB8CVaPw?jhD<xgd9
zI`<)iR#x$v4Fakc8vU$jNsLCHdy8>HvFU7%6RN%r?&GVPv@saC?ro%Q!z_MXS$ZWP
zCbv{UZ&_*FC(}2;fh30{H%^|27Dpe*0@@yxL5_V<)p9oHse&J)Xwjb{43~YCubl%{
z1b-p7w>>O8%KWpJ*(WT$zA~;X6S=AqlbtvJC$G8JOoXo;+jR6V6N9R|4^$pm^NACj
z6we;*?wGuds+p%m)!p)0ZQO1Ul1)X(1wCu^eUmEKysnz+b9IofAW?fXzydDD7KUp&
z&Q8`|Rk_(#-%%OSFo=lZ?eI^@2^!-SEV&%SVKXb-)^l-NOJ<ThGZw`2S#sHa!Gy7_
zgBmG5zICb}T5(6KamB>R@92g;ez7*uLj~D$mqTX66OG3;cTBgR-Q-j)?0|oh=}Yya
zp00Qj9BqjDK?V=w&j!h3My*Pw82>nH!D$f;s!+)-wJ+Htou;I-Vbh1QwTt^7c`CrQ
z30*Z#irklEv~h2uXnRriUHFpcBzmsnYI}pNpPBMk@*(-FK2($Bc<%H<1&ImIIbzSl
zZw_W7dXoMpFydz%nWOfU<%LNR`LoJAq4%xj9Y*?KJjhx9$Nzfs=e_y5ONM&Nszoks
zO7FmeBd_)Gpx;_Y#9}=9%%k4zF^o(6oz>Xyj*xc{?^rt<;UVh<Uy3t<x<9@wr|eue
zZF1-Ax$U+zhIw_yd+YZP-#Om8sgHW0i~>Lb<vuG;kJPvOwmy;)E}kTiyk+=qmc?wS
z5x6mHq^w`k{zbVR#57T)q%%_e1*ip>LCKYPKY<j`d!edqQxHV)-i&!;YAm$8-Gmo(
z|E-mIBFz|jdm~$Vae3p!<6T=XtW-hKlRPxBz$8%^oV(gLAJwcS9yaN7IL4zAWNGdA
z`AwtsT{It&n0|DM?EMVG`VmF(F!zH{Ya+W!JfowO1lsN*=q+J2aY@Ya2V@n06IA>~
zIdcsY<^MNwT;daLKs!A9%8e<;)pH_0%y;oaVy1Q;uEtEV`S@iGOO>sWM(4}767k>{
zW^xP4JVrLt%`J4VKl+_0{jAvfKIkp}Nqez_T2=*wkzJIOcqmc?A^f!cIIatt%rQi6
zv{sC~8pPA5=w?XVQ<9C;4i=F1y+(|)*Us1VA~=zfwDHBfhR1WcnIcsIM-=fiX|8nh
z$o^jlGHtt;EqiHNej}3`nwgM&d`zxzeCtRgIP@J0_br=Yl6udHY!zoxl_IVJ+FSWv
zj!Cef)Z@{V;~MMZ=cevKK-w_cSK`EWRrOQMYk8ioY;*L-Zr_+t5OqqOsv(!J_5^Z_
z@yzS^?Ve!Xsd^#pwCn!*fsPW4gL>ndZlnKrqB_i<{s}IjhM9IhI6Wi^!u+4Ter_fe
zsEzosqShy)|2udr_h?%m2)frwVtW%`$-z`b{>cv|Gx5kZfoo`XTs_q=s<P>Qq2Q~^
z6%GbsSqZ$XgFI4JEWQtbI!w%`;=9$tjjC=Eq4Gaw0@pExoLRmesNUhlBAN>qsifYu
zSgD{Y?OX;X$68*b?d)@={b+61(n2%AoU}bX#UGnQAc2ON4z~MqpkisJetbeEf1Uhr
zT1#Gywca_63{ye$4oyMyR<^^@>V4iDD)~?uIA8d>B!7cta~h8==gWiQz-{Z;yVWlH
z500Oz1lJZT7K!tY4+odZ)9+?3EsO&QUEHoLG_Yh}C8$gfaDZxE@d^oFnay)`UrmkC
zB=7MQ=r+wv0VFT;pt}aSc(VG3L7r5JbGwMIivEBf%r}1)<G(Vx)v#?c>RWNwu7mt2
z?ms1-AlFt9?sjm`$9Nm6i>}I0K+`=YANj^$qKT8awRYppOW#7#{G3yBA}@;h1T4`t
z09O0tUi)T!n_&5DZsrx4)wSu?!ZOi(B}r;9LN5Jf_g!{%P`H%F4iYI@|JLtHg6UjQ
zsa*PWK~HwM4Kkl7sD5qu^VCbT$hn<T1<}9VgU7QQ2lmWXBR;9zR0FED4$?@_efe*Z
zGbq72Er7Arlm;K5lC6eSTWWXBR!53Dz^@%@KlBNk1-B3VER|<IhCDvaT{c#28cHmE
zqSca=fMi-@gTWp;cquOHE6B_;dj-2-C#o?c@rdZbJIXTtlgq&18{hDR^K832>9v2+
zobU0S0%_}0&Pc$UFaMUT074smMBD~%SMWW{tr-uETie-P9^=(No>O=K0~c%TUfUf>
z_LBM{m+2qA?FP)DN1ipz^r>sBIKL<Dw1!b4Z$5I?pVUH(ff*fcX~`%`cX?Sg4I;Ii
zdRFP$y|#`4k;_=q5AL)B%i_v`^<?4Sdp$ANZt&?`K};fj=gJ@2rI@_-AAXT_QV@|I
z<GBPcP0iHso)&C=g&^<b$~Uf4=mP`udmOg4v}HPU!uM>Aj^+R_9_Xw-YyW+v>&#uu
zjKNm;CN>_^N^4WTY{$xvs6iyp2g=w-%bkHar4QD)nHwN#Sz^x~fM98H<R7!FeDQoX
zpC3XW%lAPW=5xE}k!dBtG1Q=UXQFT*&cIR;>OzsaxZCR60n~#Xx6~2+MU8W3RY;=u
z*?C_YqXA)2e`Vl{TuP~2)+fJZdH2b=lGy#5I#Z7f_8ACHd|lEu+um9-fZ@l;(B9H^
z{tJ;Jq)0u`9rLLcJ|(+nL2w>!ccRX7*6GFiH$S-N!2;4}e`s2cT5qpTxsJ-P<}zfI
zDoIj)N}1gCr_vq;S2+->m&&RQfECUSzPc$XgUGz@QiYJBdXj01g=4;@Wm<~)De^&w
zBzO73!$lu_Om3?;5^j}cvC0nT5E2RN7d7ztp@$fe_6j&&8TuAYE3(pD9O|4g5Qc`K
z1})C+>v|KM44nlJ33o*Qj>hC`cj?ZQnz^jC4^k{r!tpoDjkP+oBogaqzl2{{8t@v$
zpFE?JX$h=H$f2R;Ti^QQP9s-02HZ=PSjY|w+-5hjzZ3wCktLw08M*c)>L)zeQFfk9
z!nol)e+1?MQ2LaQPdp;_r4oJ>{H>{RnEeJUCrfaQ`aZ2$N>2ZP9p9T_v}d&$RvnYb
z4;2r`OO}Q1oM@7YJ00&Grp&xn)jK<<E7RiwApJgchfs)WN@?V=aBl>|wH{#LdF$tp
zc$Z*E{uR$Mf#ojQsqef0QQSgYTSCMtjCv<#`_uKLpNZa18azGGCQjD&Wn3jqgXa#R
zxL?Zmj#KY6>c^NkZcX@dB#o>gU{%xl7`5dRDQ~g{U?~+{E^9ALCxylsmPSUjgGJ)s
zw-5<;=DAha!5GsZyWq!rjOG${|BUg%(y15X7Wrk3`!cjfP@db{0IC4?S5~4tG}7Z3
zL7I9g6`802cn8ts&dyl7?PT%i6ocVqs}8~OL&u&4yv^+4xr;s^O{=UHuue9Pnss33
zx6baHmj7w=jcyd+IN)`^n^u>N3MRsyYlRzeZb)6vOeBZSd;yq)d!}Zj`<NMrwHtTK
zo3?}!?J5Zl{rybKqh;-6YAyue2^AzmT84481&sD#>!K(+x7h71@>IXQT#-yfUeY>Y
z6|W=lVH$^XwY;lnzmz1{_wUUPK8_6~3f^~dC~Ybdx7PJ`s(FId;8)Ds@a=`xcR;5*
z>mRmrMepoSNLYexT*QP%xNt7^=r{=m`@5I?=$3U3!{>(cX8JhpCv``JJCT{2?~im|
zz+A;}7DZ$<vQJ`@QlxIdVjnRIvEW{uh#HwSr6b(Q6igUyuy`{(Cr_V%-^r~noRF?b
zEAndyRY7!z6Uwx=H_9ZNMw)V{sk15e_OZV1<nP0fG#<8q(T>DYdUQl1GA<#3JD+Ph
zcksFSTMutQHMh9;B62%uVAn$b)PHz3#*SZ~$}K6gw&n|T4L!{ox61rli{cE~GqZ-Z
zbQy<dF@TtQZl~Z)hvFND5Dsj?ah#u39gAzxyGcAhgflR0l=6WJ|D<K#@m0G(%X0I7
z<K^z?LSNHLkK&BP$B&qgnHKDMumyQ)s7}S)yYAmjBuCD@j9DSNv$=LMMFqbQBb2OY
z{TqaYlqKJyMjLVanxE56pN*O($_4+omxW(Y>Y~<+DOcuP_-;Z^NuvRL?NJEp?R6Ez
zbii1X{n&+#;IyPwwlIFNAV*Ko<)?kH4r(x3{89d&)pAFSzvkZJIut_ta&Kka7n_<T
z4D;}rU@^OW5)WN~s|rH7PKBz{Q|tHnOXWO}+k;iFXHLl`_F2gsoIy>LgUrPD`wRVm
zWrJqXnfG7FkzPF;k$)sX-YeGb4D0Ch2Epv)JpjR$7u<K|S{;0To2^pQw>Q{*YU%`#
z(ErXg4w|(rIW9`vn2G0+RP2B!axqwjy4vwX@%<lJ?;X`t^Mwm1B1MoUQj9c%ic~8i
zEr8M#=^{uMMWojdS^z21q=|q?mnJpz7CO9CsnQ|zUP5R|AVBWn_kDleyB2Ff!kL-9
zXZGwVd!Of-aVjCP6?19$b5uTC&+a+q|9KAvUF1^n=|JA=q}gg+U4P|6s#;rm!XA6>
z@>|p!oBbhU-;<|mRlz1>OgKQJV<o#<652f5ci>_`iK+uAMKM>rD;aa;(I}S1i_<w5
z%g*=YL;QaE<I5HQrGL87L6i`3D0fMPHjnqV$+GegJ2u`WZ&F3Pa_Wmnv^}G$P|Q<1
zNJxm_xt_j+;Mc*r8AznkkZzkFUxO}Qm&hTpB@C`Bxndpna1+)YSDyfHD~V$tY&Tn{
zeM0PfYd4^3BE|jZ{qd=?4|^)K&F62#8acgD9A@Qa{`~Wq6@Y@^_9C4|<AlSeXrcN!
z6^{SveFq>xyu^Twh}V7goNA?%Uo$S*<}~*MZ={Y3r&cN3U-E4qf2K^?PQ@2D<`|#e
zal_EJ1IedRgDP?ZQBzvMr~Pexp~hda^Fpkg(F0X%z9BXGmRkMR>xJ<*$dfZ&Nu59I
z>h)U!-W`{+TR&(|k1Zeh@$GbV+2da=GBIfLjxjyP&zIRI3_|*YSzqVQb|4a)o?|A6
zIL=S<nD%yq494+tMXr=@e46#~-9EQ6TBW``@>WbKRoT9F*0ywV0}n3>Zo4I6{CUA+
z@vE}VQ@-|hefx8l8zerj0N4cv&&Q)v=J<;32YR=gJ$?)CHmP?h$?YgTcUoh~mKP}X
zP)7Ha3e|K%>_bWiQ+|{_6fR9eqHl^$PCMO9(FlL8SEi{HQgzDbI~|p)yj;vC@@8XQ
z!>5=X9J+oxWkxBaCM~`a{@z4tKX!Dij}0r!{|m<R(EIdnCR9XgjB@hVM_Zi?YAN#4
z+^2;{;Fv<dSIm5ViC&7EZs~|PCbPk*0;?g{^REpWynNRc!{%~}@x;?VBWY)VxL)`2
zRo_em{dZLW7?zey;AlB)X*fCQTYDWmF-|UYrP~4UY5tO~suCD8Oh5X#<&vW&%U!HW
zMuZ2LT^z=qv}KS#a(cF_)hJ)L&jd&OoCpV_ca!jGyyPUG+~MpK*_SyMNvycGDgZG>
zhJTefw0Bjh-|OJB7)Md#7EEBxawDX6{{@?D6SIQ1xse0k(5)uEMmIiXR|eZ5_G@B{
zGY%a(xfW$Fa;7hzH}vrU4<&bn({lKR5ilvZH=zFhsIOqrkKJu#mZ)ZD=!iATWa!K1
zGf0*?cg(a?2QIJFw<Pnw_N+T#3P<2Aa*=`V3DGaNuC~cawQx9)pQ_6;hG)iOhW6U(
z6<dPd*GB3?zS5tacg+j)a0aeQ6<_}S^^52bJ5|O#ar%e9{p*ItOGmmpj<B{@^$`3D
zMg~$mb&--mlGi76AF2M$j2c;s=mE}>_FI-Rjw_aWBxIVh)cv%!Bj)J#7<81Zg8uZ!
zs{_P8!l!HZJqAnHmv>(W>yPY9K!ACz`pH(E`Es3B)!*CA63n$J#87vuTCetZBH!Om
zm+Wcv44|E5IPtw5jA2yg75B8*F2dN{EIaY3;x2nzxvz9aTo|I-vztiG>B3CFhNoMb
z%189gLLvtdYtq+0BD{w2fv!3b+e0%WrtRx}BfB`VBXVA_GJm-KxY|H+K8^6#spie3
zz?!|pM-|p?kLGh7+K`e2A-qHAiCLhx55$X$^3Dgh4+kO&D(4Rw{hh)>N&>GU%m01i
z=KTC8y$NlB_2mLb;AL+xyR2#B{$#Dr><BuxFEyHb8y=#8FVFBk9~gdDO+RuA{oH;3
z;rira;7XPK7CW<bU}1|VM;Te_YMPzDx=PV~NK6_d(6uISO_tX)&2a;v)QlNQr#aqr
zy!AiIT<CyEL*DBx*qa|>v|GvP5$Cr#U|dpm@lj*Hg%#Vc_Z=fA{YGfFZgh6C<yd}D
zOCJ<f`4|;aDRuY|r@`?}iszB!Tk+t3=aCVlS_pLEenwNzjsk(?ly4BMh3RX{8%-fQ
z)`TaQ1}(2(i&tM<XEOaOqeUYmJ}23qKK#`?GI@d+{w0x%^C+sb*_`X<GasGy+ht{@
z4#7#(q|0ZC)&S_V16S0{1YXrU{$V7;mr26uV9bz`vZ3u3a3~#0yA@l*5_6|8XAzym
zGkokHtnlHKXz5dItN7&$zkTLXvRK`9jQbnSv>#iXf|P%vr;kd2kdwN`C!Mr!CjyhL
z#+{qjUcX<Q_b1E=NdU2gJNNc-X%pYkb`0IFyzTUZgS1o)Ku6RL*Y^+!IkG-2Lp16$
z);Oa5+lk*#6#dCc3r?gO%wAN;b?>DcxVp<OXdr>%)(fvdc=+(Qo7I^AJQBlp%Ogj+
zm$O$xYW?c;BK?$9Mt8qG?(~U#EGuSyPuo)|Vp`#ykbvxVv+Ap;VQgRPD*3CBLr2n6
zjD$lS+tQ*408jNedEt%vy($u6s1Ltg9;BR2A+?YetY9S4_<6U?@WyrQ<C}Aqzn`&_
zA^|upxAitj!c*DW3DLws(=P0)CwtRmw^Sa$Ltd>6x4zod=H{MW+!%ZORZCXr5%7Y5
ztXY4&ryDC;F8*<K&*l)lggfs<_?=t#)O};?b!sdj(~)0a(Y{M|is@~WtR=cCe%;t=
zyVh}&@$0tO9OY|$`?sop$Q86SG#ki%01K#2R-EBC8^AAzJA3pv*Y%URO06*^{F8o2
zxSu{X=f6z!Ew%W$o|H5fWyMyma{FuYKp4~Yj+K#TY|7od-&9vVYa_5k??1Nd>Lvh2
z#Ekv1JBB-0qK=w#@WnavWa!=uWBT3@8>nj(^{6pty9A}Yv#%sh*S_icSOixS9%6vl
zu6rni`#K<xW()qSlwpxQnF?KW^WCd({ppb$z`3#daZ~n1<{y*)Aq9Xy{|^fkgqQ@6
zH|{<f-!*OU_R8Tb2e=oE+AJ{=YYvGPt$Aq#$NUq?1dCvw^72}E?^9F)oO$Te1q)B(
zuSV72e<BUuBvfqi=9NkHfw}{9VYo+aGYky(IoijT93w!0i@5|rGi~JwJ?bwTsIBd-
zlb1*h9<ykGPFl7QR#KFIlV|hFX}$ivn61Ye3ycGlA1zDyaRZ*F&|TD*YrB_aL{AU5
z_WOU7!&KOcjoo<sgPVamDIkIC*76d^W6TLRG)Hr0Z4%dZLBr)TGVoVD=h#omNaf_}
zky9sUfl0PQbgCGP)6N^61WS8-7^-DgzxC?4R_`@0)6mhL*Pn8Z>YTBgD)T_4mmxZ(
zd~LZ!<+1QRtV5b>+fv7vK0>20tEg_{mCq63AEBwUuHNKq!<hmtBUrY+d2pQPPrqz^
z@Sm~7I{aWwi**elwN|2r(P;=a9)48&GENw7DI5Ie=A*O=?m0?`e@bP;2gESrOF`+=
z|HdGWx?`RjuXM^f6I9b+d}Fj4P&KU7xNq@s|NLg#`x*#3)Zb#!;LZX8k%va-md|1<
z(q{6fB9FATa}nY~U2%OWm<RI>GA_mSWa9^ZosPd6UB)%yz2OoM1eZ3t8!p<Uf}Ct#
z%SjBT#3A>kHvIql^k$|DhPd2vJ90S&>li`669m&(BmE)>ZUA|Xqi!dgCx}FJL`%49
zs{!mqauFX17MViZ40<I|Pq-Xsup1ErWnwO~d1{3Nxx0Eunw(DvF_*?h<A1!d`|u=n
zy-|TgJ(Y`Pg&GoIAjLP=;A1&rNT>~SKP>1RH)KVm&hDUIVo`<$uoD+)4mqmbe*+-|
zRSQP>_w^4nNzJmgs6A}``9^<4vD4=$qufp%Yp(HjqR|XMm$mNWN-Ta_Yn^ZH!<?_K
zq=Ug+*Z~csecSj}<nTYCRO@0LZ03~mm+4}cMf%&KuIW@EC#)KcIhC=8`-s+syR(~?
zQPi5?AiW9t`)?5l5@`Q?rGp^>S!8W^Se~1Lk=fw^o#&ibabfJ5LLMY##SvhR@bD~4
zuaN3Hy2r!NMh*DUxWIu<lEIP?U-1Pq$`wd!vJ}g^czEuYQE~uwBd8v<U%!p)I~sEj
zGBl=S;t&2O?<slgFG5?TJ{69>H|*N0;+OsrbhGZ@cF6Ws^10&{ILGluOsB^`KhG<?
zG~X%b)(+x2ov+9;vLFvYFYe#IQrh&xgjP$s%jNs9$8vU%H{0#rf<?C{R~x}^8w<Ck
zo;~(G<uhHtR38nLA&p2bLa#uN>by;`vls;80F9F3VyN@oRq*21Av=QhX>-w)7?-pg
zK865?%SscvaC=mc`*8JCa{eT&#|+Si7Se_=ww$d$xHY;Kg$_=ToGPRq6}NIgqIaWj
z1iPZmZ0GZee<8+3305XWG~bG5y&AVWxQ`A}rqs30+K7++=uGf`5bro$Vw8iFeapOP
z`Kp;pw?9n8&7CL+8F_@ag<O_5ZzxN9TS|*A7^oXA$NHR*u<_@MccNyt9#z#gKevf<
zdP;VxcI!%M!&Z@fU|VZjjj>*J&i$#UDoi0`8adM{I8vR-;i^v!?DU|}+yP<8DK;kw
z$W8}ovn89Rc)N$c>z`-XdS!fa@+eL02AtoUTJCW%m09+>8;c6Q8N*}X!q={vl(UJh
zYl33hRqKvwaDQ-YMlh1@xZAP4%2F3JcxDQRD`5jq8&6Ju>vDPc<)c|{Q;Vj@^88kO
zL3S4tkyktF<33z!;AG9L10+s-2-(HipvwDEL!-DA48e(e7mLNBJ>IG}wUwM$E+7zk
zy^oKKokz!bSo#kxjP@#|z2Fb9*@Ra%xcsLpWPdXJxxhm#_q`qiom?MH?qbf*n>gdg
z-FxK(AM9oGC(7s|p)ZgrS@-FpahE4ap;S%e&rzWZN_3pwGP?CwBWeZv)1Q0#?U^=A
zuNE}5p=aj{0<gKhmc}!=2v0&&+Z%UX@2G%+$qB~am%D4RSibR%qXWioISQUDa)31S
zkTwUD)VCU!DOQ9BVg!kgLk!PWNf12J#b0HMWpHrKR;*w!8rbT81%zz1)RTc%*;}-t
z)wl!EdG@in9R$Ma{-oq0y)PDgYT*H_-V*bB1Oi@iYk)Qi)rpd-BRX}ME=<7BFcWon
z1f_A~DVN$^1amsjG6SSNZIWusK15trfwtG|QPCfB`$lxi<C;(}z>FG>B>i85ZQliK
z1UKbkG#dQ+D{>`_+}%__Eg2GKH;o?aIm=mqmhO0&lHdPZhJUmp82C{wjx)-X;0Juq
zrd(WIB$6fGuZ0;T{(^i<?e4!vZ+c>`BpbW^Nm=gi^vbp)2<QFZH?gQoyga5Sog7pl
zi<DIf&9@f~uhLOOvyeHX=OIs_i30rM*FI2y!0_3{5-HUT|MNiBX5Wvh63#JWPHbd6
zyQBN=NCgdCc$%sGRJmEUb+_s1d?DA;+Il0aQ|Tpw%ML=80ek1%Mi*0TCWc0V5qfrQ
z!L!2&2nPfUcAtReA-1r;AKiwv_qo-Yi#A>UCv4Jn!GgtjbLBIUsEdRjiZ-4MCp^I&
zMxG+==8zJO)QIf`g3nKi(f1vOd$_|;0^VVAzzA_=8cRK6b%U3JnC5%->z)MfXNqn!
zSjmmIBUQdN3v!MWUf_F!$<hc`FH|A9d)llhT{tLQ#;g^@myJ2EV$!H_m9b{m$PW8g
z65RH<oWVcPn7s5NV~y-+Joo-D_1)_L-J7g-B$}~d#;fUk6@A=+LHdm~3VP+$rqNUn
zCe8&E08uA+BrVDbvM36j+eNhr#4TYd;tr9*fI3W&_MeGw?>3wzAs97i;wt@=rhI28
zRO_ZfkeCVrIQvNyj|@45F}S|~BkxC~J?19e`@R~<$+r9B){nz{q~J&HF8sAsyVAG-
z5!#x^kWtVWwvJ6>nXcFo8NdX9k=<9<+d4ovI*m_9A%+nwS#!9p%I=_g<@y6soe|&&
zOA1a~i|fy~Nb>4}%~sT=bC~hUpoy!+jYd4Lw-?&d87}OR8Pdypi?K))m_Aj@>VacF
zq)<|^ucg=Oys2A`aM;F=m!9x=y`osH6hBHsG@6O{y@Rh_HKX7`9vIK2M?+rK#eT}z
z<D~G?bVnX6{>Re1(vPCz1p~xOZI(}>Y=xto_n&e2p0|X6?0ru1qy9l1T*f8xGHtd{
z<u+uq=L<*GiQH4ByZn0XdxO-vSa4j7h0a23Ar*p%@G%_w<iq;utxkEy6MRsIzAGT@
zHAs6hh14Y`UAqdZScO-^Gt>krCv2KN{r$LPQLIbXit(sJaSEnnbB$pKerOo$2Se+4
z&a)e1f0f@7R*z~V|0t*>D}&Cr##OUo==GdOE4wC0a*u*ZjS1Mdbp$iOU{2Y6PbpM2
znb61cPeMnxDV(C+ysA^0xyC0R`q8hHzaImiVPNjM<Fi*m6u$KoQ=~^^vnM(K(9X#J
zQQ|?`vsf8WpKO)tj)OE@s?E5^;^5>ON`g!7$5&IcE4HVS%|R3KS3mz`7*<b7Fgo2l
zfT80NSH1CElwPM@<1Po5toNQtGwA(Io##=lS@~76eRr1(E}Eg(B9)Lzw$7+EPIiqd
zF}sOuApAK3fuDa4kgEM{8j?I-hV919yx&*Q!x3sC<tufjV;A&5K%ZTQv}d&F{2eY%
zj6G6g5^}gQiUr$EFr)q|%7*i)hTvfbssu{oVfTk@<|4PZ+5bwXF?gC)S#NKHM_OAc
zEBl4dof}V$ycUt~)j!+I$Z>aZfCOGjF^jV2ZN)iSBOgi&_HkLxu$r2H*WX;iNtj>3
zgE0ps-z6>+N1MjIR4cgI5e7ImCg`0YxmJ)^)nJjO{J0fA0fDSn_p>pXFMti$<Tk^0
zNnvy-=OTYBY0Tot<FYq}RMYt)vhoar@eyV)9T-4k5sXD9(D^MAu@@Y7dax}?&dWvn
z$337P1axGDv`4i8<Z8r_y5nVonrSucxPdcmnV4O@B%>cSYc{Yro=m@AwS`IR$UQ=t
z`R+-J!cI!xS;u`FyIWlaYYd!wwKuw!&tkf#Bgz=U-aiZNMlg3B#fAA7llSawDtpmh
zB@p8QJmKTXaggyr+f(S=eJuaGgoBb>EC3ashb?wjHs%%^g@8W%41m}e_eCJQcMrMX
z2^^9eE-N#qHEAY84*{Aw^%Tq|Cb6f6>dkZrG2&u$*nst5+Soh7&&s9R(rBeIjeFB(
zg9r0uCicV9mhHaGcxCa^HPyXpc(t(?$?O(9ySr7+R06`^?DoqWHVXPnOfj_Fti;?-
z3wl>=(s~=Vh3Rb3JJ}_dc}I&O2zw>ex~GDNL)Ui8%bsX75apY6K=@s};MqBL7YEL|
zOD2_MFg+%pog>FPBY1p^&(Hs&H*pNS1&uhstaiyE!x`hmoKcNaM>-S_Blv>WjUCcn
z5o*%X$wM1b&FHX4wM{XZzfz7)tnx+JhAi{~CK~Oq(>;zLnERr^=Kzr>4~b#?WXs-&
z@G5PFfCo%AcoHJHQxGyp&s#vM(Y(4XN`^jB&)w_5bVduEk5hh*@=bv6f$+_izP^-`
zeqv4Ke3-fZ=AcC2>z!w=ypgWg7ahnoX=bub?NoZEqApuA*Lf&|FfwiF5JN8C=&OY$
zP3Qd0qNxqdPeRANvEAdY)64oVB{>yq0P#5>?X|c9bVL<)o9e46W=5%rp8(JCb)8z|
zvy~QQReOy0i<nl$5vlQ_zjT<HgzRy*G!Tpt;A|MLTW6An1Es$4Sp&ukBvbVchx8^I
z%Mf)dU?)0QpeOkdzIc#C2?XPHWz3b;%X1XzD+=2^nCF@Ez;p8WelU(~Y(k@Fn+w2M
zJSM}GL7zc(p5*t4_lSXiZtT>iqKV$Sx^260z^ol3ANxh5h?36dKY(rmU3f$8abpSg
z9096JLNo(P+<>%Km+TOhCJJ(^LHGs4^4~Osfp3%35f&;Z`>k;ti#^A76AYXd#SW7t
zfw7p}Dpj66c6K0t2`2A2Zjredf(%gP8Y;~K^7a-#;5|>Nw1X=I`|8xHS$L?)ro1)o
z1v{U0$w4-y<8FAFR4$eRA%L+wp!n1!8)J>nt(OFC?oN{cAA^ZSVX>_n2V9{3Gu4o<
zbM<_t#DWm;TZ&ib;B5*iW`skUnbHP8pqHG6na$<i*v9f)SUm*No`@M=RYpmngRNw1
zU{!NT#at%+3t|WSSN2Bn!pQMs$?X8dR%Nj9++<kUgMy~g;$1Xx{uVr!ld1%_NvPmP
zqZS5{esF|qqg~7{==|v>8I8uCs<q}-9Y%|G`Ei;GqnmbpPkD-&eU}Z<X}g{JjPoQ?
ze=Q0JHQw?yQyRNVX6O<xU(=8%jPfqT?j8d~vdjqNZew|;@mWeUx3LG|^|brzkASo{
z0q??Ccku03BUi9qi=K(cxKlL|88n&TMj#+wexeXUn>J%Gb1pTyYid|tV^Qz-1j5I4
zif{@&XSAOsqTwv@qs^%li|?7AuUi4>K?ZD_ns5qQB#ZtxHw~b5&tc}sj*v1j!YK?}
zmVA%?RZ~}QQ#maI8kmG9eSXw#N=+#f)C4>Zv`FO$&P~-|d@~Nrqm8o(`04J}h15R%
z^98y0Cqe|bRxMIAtO$;P(42scpk$w7pYAMU&bj7t2sB4ILkRdTf6EwQ*wXQ2I+Yb+
z#lOeBWmoHeJ5@fiNehb(xmvtY`4efCf|*8P+HqpO3+;Pj1)LUPjkyHhcwoUp5I)k?
zbD3;Yx!D31o#uMdY~d;8v~PREkE*OfRl%l#>|aRJjw8jb{4vA~q)nT?{lvt319Nf~
zV@7J6JezxE6eoDLO7X&B&2!hQW&_nru=FyvJKH8Tc&T7@&$<4ooRa(i;kh8~>8uDT
zOO^%JthN>Aj7wY7GpnHCoyyj1<GGcVqa1hLxx76HS)_Q^GKvqg34l1s<X>Wk@6O*s
zVDd{KktOI;ucmS|K>CXIm|*lXMT}n|jHWbm&Yh$E7xZT3M5`N7+wi%8u4>=e^K(vg
zQ$1|E_k3aepxidx_jBTNVNFO=x8q|!dV&;sbKxHt-E<C40d`$2x)r`GyE%L82zAYE
zDm~)+@jxA$Amg@;z6DLjZD~<Jc5X=T-5<jAMkFuv=>c{JtLt~NyN!Kjd@eKBk4=-E
z(3LrctwBxaCKwCV$O~$qo&ia4(Nj!VC6TIHb$)=1*MJ&<`_5YfHg>tVKqqPGaMW(=
zm5vlM7!QD-3BLW3xarHUu*d$1RQy+kYy6{E<2ldA6EBX5UJ%zDnOeF1Q&W3{b#B)@
ziCM#ao~JX}Ro&Bflv<yj50y8`-F5h{Oho3C3t?m5%&Fc{&vtjKB$U=j0bMU=VJ?7s
za93BBja^MPSjhlwE`uqmK{J&;RUesN<_Lpnp;$I@wzr_uAchSyKv58AoczDhs{F$9
z|MOcy##JQa&+|R7U%K0lHl0cs{~WF>Q3DVnvpp_y&LpoLSI-2RVd%FL83AUU|5}l^
zo*fl)xw^N%S)b_Hnt5Z#UG1Kv^toNDhv$`oR+!=jv+^yD&tcC!HVRVsbB8y=WP<;-
z@&o_Yj$vct`=!fW{f!Hf@>}TBxJE7@&?QJpYkk-Kv_se#WA2YVY2)A(=awf216f{b
zc9@qR2Sk|jexzDTds*dig!N?#crZvnqToEkG1vVU&V{m#O4kYUOG+WdNoFV3GAPE?
zuOXQ+Sx|wiPS|XLq;{i2Z=eYZh*YL>mLhNdkF~SBFnde9ML#2lC~#*eB0IdXH2I24
zjoGY8L2EnXFrY$_w^61dh#UHCSVA)-k=i?o$F=&lvu_0RZlL#Qi)%nbA#GMv%;}hy
z_4{QGA<C$$nRBlMA6_?So{jk5Yqggl7C})8`u|ad9QJGf$nls__*UmTl`4bMSW*e6
z#CvyEQ7HwtYtyZL7f7xa8Q3#ABr~l`5*dFTKg1#VPi+>DRCHn*4MzI)vt=bCGS}hF
zOCOYs6#dsKkK_PVC?V@%&y75nlymm32d)hmOM7W#i$Mh_4+c(Pi37q~JFp*mfTp`N
zE==-2pM6uP+zi;Z1Tb8_Y9_7yF`>m>_7-|~9FONDdNGN}slJ;l{OewzIiDv*&<UCt
z<4^hI@cE78kER<NKl(Ldw5nx{@#rI066+`Z;6T;Ayyc$v&43J45TCWruqeBGBOzJ*
z$J!q1+S83^BX+^+T+#*J%=Tl!ts+Fm^nGc$U>V@3&9AQFVvEIH%}^lCi!_>NJy4yK
zK0ndq;V~=kY%+<9U-hnl4Y!OS?{aBCK8I5dK#0J}UNJXqTk=;_u9}(}vx=zG;k>QY
z|9+Q6X7e#C(`P?WgWg-qX83kN0!IyzsmKOCYIU|gaSxLpn|%}7HD(Oe8K`9Yh1M6X
z+)zG29!TT(9=7Z3{tB2OHJU@+*yE}1{|d67_c6=&P?L8g=lfAt-($`gNmx`!(BMCX
zt*Ap2&u=<ElNQ7}y~&4VKT!)*<gM{oi#?CL@N_f~jEcJNpahbkNp9uT{c8F~f?hL2
zZ|=mR<jYvz<0hG!^pejY9+usOMRoUYykBIw9{)T2(M&-hOqDPcKkesDZSjy?B)_1U
zStP70>_q(2dST9MgIU8nQhpXM&xR!5<TSJ`b*h%tC_XP-gGfpaPy{T9uPSFnTJ)o#
zEr*GJYc;Q?1Cm^U$eg{%{Jl#xbUlb*mgq8r^)erFc;&Gj@X}{$LRx!XU$)y!nCCU$
z&c@pLsu}Z_X7FG3clOu0;=wcVU?wlqvG!QML~0IU;q`uJ;E$JP-19U?-(K;ge*({s
zh_|)*Q6<!Pf%dko{LC`YbbPf;T>yH4T;x;Yv6-{$&&W&<P?$V={tj5PT#lNFO-TX(
zmMVL~rE$`ey|(uB8ihWbM?J+g3$R~HlLf(4)H8@573{RXaTIyeqmR;LQF?zz>d{ns
zzOOXQ23uS8NB0q+6fFc6Ix=(eB9U1|YO(HzPtO~>`ajf%CmU=X>t8G)&5&Q_PqgFL
z04R?}z3c4U@Y4+=XAob}uXpazphut^evJ1mF#MSh!?9P>&i~MrFzERuQhwu>3QNLW
z3%UpT2!f%v19X}dNI~IzS86Bu18-kh2`2D|F{`#mm*e#5MN1-lf^<BG;yuA<of&I0
z`c?_+^ZCB+A%^WFJez2$@6?(c=S(CkGuD~5;7^*^Y(6RP-2Y-U=peAzA?_ca!>LP0
zxy-EpbygWDRO}St;NsOU@>G|8@_f<`>a?6*H$G(dVRks)dIlSf;urlX(5d|42Xq&*
zPH58r-IRNRw!wPJ0%Tm9`iz%<iYRkE(2VBsJ9(nQA{+a6-dmV-U?OAA)-1F}$5e{P
zPkrywxaxJ&>Om-TNVP`gW{t2UQ5uOiLk_$oOoYdD%Ac=&(Gy`u<Y&c;zdy{~_blJM
z5cMhq7T-q^)al0aLa|*R*0%BPJkwzqUeysipdnk4_95#)1TdSs@2fInfFu44RTU7h
z6_<@gePg2DlNbnXK^&A$q)2LBmS!1rt$;j{V7Cl1mhBz5%%H^~54t2YUjnY7iwYQc
zTnKV;h?C_CGT<BIavN&bhp&lEIek!LdHb)~idzzVB#!6uX{g;1Ow-Uu5_x-9*>7s>
zWgz}1B0U6_@aUmt%@Tl6&Aa<@L2EF4y?0%7&iRgbmbdK~hS?#^BgX21Qs!Q1HdNpW
z;7>7W-l2nZG;F9DQ@RW>)t)j2dj^>ehbHCx2tNy_*HrP~vy<^1WK_j^s4BjVvYBVV
z>U|X^$fz*FrEcZDUYDS?<ujmf7$C4bwi~~f<`=Zs7<Sy^!y1m5e<NWSx+aixMXF-J
zqD*z%9zf*u_WSp{C6<r8FKtolbkI#CE7$vRXNC}|2~D93t_cEPCGPHQ*W#|fc=jsA
ziXuh`Z2s>@PzjuDFB#i$e^;gZ71iMno#c%A5b$=;ezNo1oF?Gnma)YI;umqEy~K$t
zbn^dspvzYTPVRT7le6-52<+`|yNZA~Ez^Ad@6+>3uP3_#9f_@j8f+?T>_J>!^b*aI
z<xmak2Vi(b=aRrHX~lrlJSFP6wvYq;F(%$Gk?gi+T-Sb6p2F5X-fP*mVq#F4p`IP5
zFXyStylVVT)<~0^LWK%ZFUZFN>~;4(#8GzEaQf}!inZER50x+$t4mL&7pVJTL^e3{
zimEG><}&+p2|Yo|rte4QfnH;Tz{>W1wE8VS$~#z5(7v|Xkcs6pbW?0>MMW@H6q4+g
zRo=kHBclT{+g0Qz6v+}i!73bq+hW6++TX9vKT~mS52UHKeUPpQdLGypYD2-xcCB_g
z{d08kb&s5U8lj@<r3nU;F>?AH?}URdG7;CLjW}*jf9QU;;}8sT^0L=@Y5od#xXKV6
z858ss!9ndO!A~>XPHEGa{ZvGMKI#}mf&bpc@mQAUoJtcM8E12sBjD@GjpK~=OHUpz
z3vmr-EpIJfk)z_wvn^C7bbpvNgS-yJyKN76x%BbNUy6<q<WI6@gQGd-gJ|$EzXPk{
zf|+-o3Da;<l0JkbQ#tBpJdosn4)XQ>sZd}a!rlyHcE#1c=pOv#vpN_)@Q8N2CW_I2
zcWAsX+cbABN0{N?@dy_P=rtw?taRoLD{G>>3AA-I+P43)VK!nM|D#ih$NO~zy6yfK
zh}QUC%V^}kFbSu7%QQ`XDwkv!<iZU+1ZX>O_$U84J{_@ksp)?}vA6yCO_v&DhtiLb
z#F|q$A5HjW%lxIn$FmzJ{SPFi_iwkJ)gLi}<|8OLK>u)i>~Djfz2T*qQ#Ns=H@_E7
z%)^3HMw%@cs=TRj^mmgfzv#`OI)DtQLunFjdZOfsTyQh2QI6{cDn!$p;^gA6!VG~m
zd&#}4(0PGo+`AsoU|(GstZj7QfohgQF4GYzh@4qmfpQd^o$uL3qF)J^y`z)XkHH0$
zY|8Sy(uTIG+dH*v71_OZ|I@4fQGb@o&)91q>Jmgkk1UD+pZ}1QrZL@U>U8I5rqV2v
zY0BvREc}eV6Lj)#In@<)?KNl?aS1Y4!Td#;{HI$D$@Pe3#qwPMNn*G)i))_8$iVDo
z#j>piVW_(OS#SM3gBdS=rc-|Y`EVs>&=~zoHxDt~x;vpJJ3*aLLJGOKjk*SbwG5}8
z3%%cy2BOth+?2ETyP9ucsuot|wFnj7l0^j|Y#bg(&4zBA=hVK!p+NDFsZ}XAs&g1X
z;fh_r)p7FNH|>1>ayT-++;0bG_~ptNY!)P%IvNHpbZ1<dTt)=`x;xeh&VTDMna4v%
zd9IjZ9{D!l5B1k5n=sx-zlcnX{wOEO5B)!=P#*{BKc{$&%01_u_28z^o7kFVrBux&
z((*MwX;{={{@_q1vkR3U+}ig81ZRQ3YKDe(DT~yo06^U<j_hLhcVX`P$i1b?!?8Mc
zH%Izgd?*>S=d?|+eSB}FXo5k$`a9|&>Z(#tJC`<I0W(#a-QW^wb<@ysr7i85Pou3c
zg>~CY!5hu*ERIY`RU8j|FI{uqyB*yyNyo3RW3|f=!d{v2z)#F4sd!aEl9936ef^{<
zxKAr#<2t>`zi$DVuN(Y-U!@=&4uW^^3XKKZQAp<dX`KJNL%0rsp`CU!{u)0$J-9cW
zjQTBnKizG55bf!y=gm8nYWD|@=cX1tq<U2s`pYU_TEt57c$-(0KgetCk1s7n9n}MH
z`ClQWb8|mK?`gdBH@WW~i-@Lz17XYS>VbdUl44QwqTjn@h+m>jLFZujnXOOwO~2c%
zrX64M<U6Kp1!`E97cWQDVWfrW<=-GpUffD(uCaFaO_@777nE&!D@lLS&%>;wz9!#!
zF8|a1_~QxiRv7h7_Xv?@YD8C8n)i#}BCurY=OP8Pu<31(__vT~x*`GXBG{$lzhC@7
z<|3&SzbWzZ4J`+~x>(SD{BPvka|d^QZ}7agdhQwR#b~htUNSLxiu<<iO)gFw1%1`B
zJ9Cftl_ujyIH+;?dNq;!EeIS$UFpyC?szk?cNqj@=Hv2Wx+VpJb399<G#%BKW(bmd
zl;8`c3CWy-#$<Mh*Eq4!&2uT`6P3X<0&=4DoBSq&5V_}2L+?Q;kO%kO_w4nqN@eh@
z`5G$i9W?4ET{`KocZOoUE8L^`2}KFLL&;XdqfKE^@X<+u{cRPpcL<KuUs?njCWihR
zogBQHKN~nl*@}vOb34L^vGKaa0bh$Ipa~lUR$yCtU=jBD*>;hVC7*)63EIAk4aEvN
zVYlmAcsMo|RT+14qiK+5j*0#G3zYQIB76-@lj6%wLG*odRhCTorBu8E;CqioR{d*U
zNdb9TNfW<t+2P2{e8KP7hHZHky(xqo42VG*-V7n}<yOx(eC@r>mv)QOYOVws)==ZL
zPuofF9O>_eLaxEl+?-H$ZxGdRkp!i2<zuK=Tz)WcxW}5irvD+$3i5-e&hetWH`IJe
z3g)@4T#N)e1coAsN_$kuyi9r)#r$6M{a*4HZ{=p^on|+FIZ<5_K+EeP$>J5PKuqTG
zWqJ>J<~_KDn}?VnX_~%tInvv({HENY4H;zIeJ093_kdk~gv?8%O6UtRCaO1u`d4Jw
z3wDo9Q!1-A`3*m9tB|K{SkR<?cn$B!SWFHNc^LT4ZwI(A1)r@U5IhD)4L7Xhjz`r<
z)NRdD->M}}@v&XQaTIbO%mVi;)l&M>QSJjX5C?TToz2yHA~mjHHk}VN>_7X@7WU!)
ziwSW6ZeZ+#X&WjsZ1!?&z@o57`#0N+cRR}(ewJ#dFs^%wYh0cOog6%r!Bgu<wBhsD
z3Eq7SnfK?p750S{{ZZ~Ny*xZ#U5}L#?e??_sI?ZxQz@SHPALsO@I8IjJ1@#=_0Ygu
zi3cV*{eFkWreUd=Q+})pJc?FU{Y3~;PNJUee+)XYsi6(Tyc;>O4dfODpE@!%Wafkt
zaJRt!%x@P+U4F4ZHC02s$Hw<>H)oEQ(X7d;2FAtgAni_X2ANiFl++d2{YV5x=EhAb
zJ82#FenD69EGGP{Lg*lKLl%4ne00c#dXKAtuYrcWfHy<Dk!y+6O!pV$xchGE)td7X
zlLgPYZl>Q*zdc`IFDDy17RPy6bYk&d1S2cF+4w<dyRtEWk@OIY(><gRn$QS|VVm<C
zbADp0Ub(}Z&R{`pNchFq{QL)*;@4E^)8sK*$%9tEZNcM*9W97tAbRF@!n$MT)Eg{3
zjiWbdhA540)A|?6?34$5s{|KplU|M5wNp$?&nSdE9B=u35lVzWV2wg`#89+%&Bvrg
z-;Q18_xBl|?sN`@e6jjm;BaNU(r@|Fdbr2X*YHq66|}SYQ6n$x7anxZZ{5hm9Dw=>
zr0TFRk9+^uEZcZ#fgdvjJKI2-xKbP=Tt=x4-?Cb5fzj)sC~474><udnmzcs=m6tyw
zv9zq9o+2FCdT(1W{glTc-8#)!5|f!}Myf8Pe<vMETaP35uBZ6WHq3J=7_o|N!!<+?
zMrkf)#7zins2Bb!s_YW`<1on^Qf?t7)umM1i%&FI9kNKv=D)>cH~n|9Jj^sDSAWBI
z*_mv&2DqMWVL-k-g2#pWamF~Qw2W~_e)+MQ3^y!P4crWw`!wC~H_olF`I{gkw>mmj
z!O)tQyX9>XcZE%o*WX700V`=<&l~*=W!9L}S3(=jl%C=@p<2uO6kD<k#pO{UrEEQ?
zYD#IonsjFC>!IFL&}ld2ib6&7RsVE$OiNiXMm7bwW^dQoDbXYfa$Y3#a6(|SQfXl8
zBp=zM-g4QHlBxqEceI}kGH9-$fmv+&TTq3piQ`5{^$=klejaS~oVt@%ciU{EG?2Jr
zvdDW-F9?Po7PBKzNQBY5ve5STgKsFds-y2sNN+X5K%3lxP-DPNiOtYQG;H}V!iPF-
z1$i-Dt_6hLv>EU+c&iO%2HZeWwiOZS-|t1krzz5ZyHb$yp0r|TxNTVlhb5n+@Yp3Q
z`Pq21bG&<|wjZRRx{yR|nu6m8_9@2~`zkI#gSPrd*S$JF8RCCGWdq(4m=5j<GW}!<
zlA!$O)hq})FqmYU{ZygQ^n6$P+X2n^!Fx^I389AKPxCrFXGn|XFPEJpT?j6z+;5u|
z(N)?`qx2NEex$q4*M|D(ykg?9Sw@d_2YJw<rA7HopHb|{J;yiZDVqlDnlIkIeE(S}
zxZoHR#gIzHLvHM<?h1c~p8C`LhstdxM9fOMi+V80{w@!-Nvo>@?k#lMvKVwzJ0VpR
zMtJZwf+5Hh1}+42;D*4ae1U7`?Uut+YeM94M^L*q8`2C}g=BUJx@n`t;aN06K@@$2
zS5kdrhh?WryXlim?eHvs3z22>hq7(wagdyBwb>skt#La|B20REJq2Dl1F~Ye?-%L^
zV{FLc_`)fAf+|InNE(gTgiAxuz-NbM#yIg1zm=VbT5Ki$@Lh0TsU&yl_=;U~3zNQa
z)`C{~pI&=8w<o0SRChX5Acg+csw6`bzy$7EDh}*1ukJi6q;J6ivV%ZrWYR_0sqzam
zi~PmJ01JlAA6B~-QJ0B2)5H#4?rmlA{<(}i?)*N#_nD7(CgW+tzEMWpO~>;e+0xp=
zPQerCAJv*JK*>vjLFp-%1+4=m?SA(x_q=fZ@9SgRKtVRewzNB24?otu=zz)lA20>;
zLBIWu`P`!zjp2Xp{7NyV1Sm@(Sofl3QCCoOz$hfI{{3LJcKp(h^+V-A=%SIo2Ca4I
z%Y5lr6xXtHr12P(JAwKz1t!=nJ>(``uk{Tmep#^o5q;OG*!XRXgspKWRDk{?+t`Yd
zyWGrI9?8LDRW%FaMAeBXLywg_%8k}447GF7SNd%D&HMbq-G#Oi7kX0)c?b8fPP_Zw
zzrFtB>z}e^<t#Sm4OUfQclIEWMql&!!Bl!reA&^jsih<L7y-{u`OeV(eM=32mlpz1
z3Ase?8$8t18nP;!Q|@E8j3yS0+LG+k>&E@LESFVp?iXe!aliaHrfgOJSNy(myRn@r
zy?Q`1P?TD*mQg-+>{sSe?DuXN{@%6ax#7`C)2HzT<8LsK96=H0<%k^tm^!{<-%3B~
zwFg^tmgnSkpdgK4E&X7exMH`7v>|sOEQ$4q_c)WSyLz#{fbh;F>Empd*o);<lb2S7
zt}Eg%t>TqDAQ_Sjt{kP$CxFsd1Ou0k1Q=B|_Py#x{QBg&cmKlZ>eiwv8OMFEjH?xa
zv(F={4r|Aa?Ki7sL|?Au*BX9T{5Bh#bHHleAM)<OMXnvKkj3vV$*!}pM%2r~b2V_H
zSUgq1_<12E!RMACb$wZj0;o9FncA0};5H1TJ1R}rH+opuWtHpQ-mlJc!J0lrh8Q-K
z&y-=LgTI>r_0b6?yt6XmdaIXpknpLjc_j7c&F)+ia;3S*42iL3PBXgBT%X%Ra!yxG
z%f)46yf>w~r_65pT~rKJr+w7z<@jf1uYp>w3I^hiP|m6;wKBJt=Pfz+&5kd%Q|-wj
z@(v1Pb4oCK{QcuY*4l+@8PdhmlaRh*>xwn)_Lnc~>|^`He+bI~RnQ9>v(p!ud>0Up
z!xuL6$j2$GsYr}B$-XQz8eQIc9IltT=b4=UYued9B)d#i9DPR^D8wN2aal(6Y-~2L
zGR>~1M4GQP<ADD)Iu^<5lUvfr4(2BmxM#Rs*YNY`oFfZ9bRZ^<;~%D;A4F)H@+o;M
zebZ>HsjleELEfS>H6HsU$AdY2rmt7laOanXdYKYFVRkmwS=D+8mel^T=IEk5M!}#q
zhw#-}aYc)N+9)rY?<Lpx+Hm2g{{GpG5V4v?UL4Qd&flhPeOLF6wV;2??x(B_7IVuy
z#Dh_m!Y3(WukT-eP<`v1iP@IVR9%70Qq=e<T<`k<yt4Z-rn^3-C|+%#5n-5jF)&Pm
zfmt&A%41<ME7ED!Cpb!bnPBSStIH2YirAFcHm?k7$4Dcp2iepsDj%*W=I7N<8LB$y
z#pc(FHJaS#^8;#N25J!3t5ogt@E}s5;IG<BG^ty3Zyt;6)L}kT4wqP#z~c)tg*%J_
zG}I)m`lnBR)9b|vSL*%BuNA*g_L^W|>2zP*$XMC-EXqd8kIQeTs(@^aL6n-*JIPf3
z*bewCF?9V)=L@=ae{i<0m!7emjM54=dl%DtVW})a=4+m!;;VK0c6{^H@852wyim-P
zV5|7G_}Jj%+DVW^K4a<BDB5^7IYnS~CANOU(kO0dZR^4ot_zuK-~6s^H)SU#(k-3K
zYya#XaiIn|Lwb-%{%!v`MOd$LJpK8fy@UJK|F%?N3Hkf`4!23F2vq-mGf<pWFsNh5
z+A_t>^JN@1d%s^f%+KQWK8y~(Ww#?zSdWp+)$TrN@bw|t<n1?B4tO9W`ESqKZ<ZI_
z0SdDTSvc*&UuwIKB+d3td3hG;6}fq;A}aGfoi@%P3f$@@EtRsZ6HK#a?L>-Ie_XW3
zE*Mxcci#&=I%+c$H!9JDc!MRul??AxtqoO~!t*_9ITMP@`;2{O$32I?Ykvkxa9nh)
zmGGPiwg6FwvfFX{UPp3OEVr`WcStd+PEAfonkn9KYP#d4_+z@VSnXmoZwT2$6c>N*
z8#Os0*pGJiBz4p+r=6^vgL`G{jEdG`^F5Gbc2*7W?+3+on;5r*nEi{z9wHc&Rf5@x
z-+5`Mn<8m7?zyE`QSCX^>oGhw7PmT@fW`m`pWi)1L=kUm@o#|wHw6RBt5aOym1Ox*
z*be3f|I<R<B-PuNl^C0%;%N-$D9L!c7@Itoklp9ebf@e>eNG{ZP6Nc#%6CG2BMrsX
zJ%?r9McSTeroW6`vHKNkdNM0TzGGcuTQarx#j$0x8*w0@5ZC{VizKRJYPd;oMxJcx
zRpHUGsDYIRz2dU7tt-PxMxiTSM<*zFM6rSIWUOAog-vk_S;W*GS=b~V^T(cGD@l6y
z@9W)lnC%`j)w_$YOS2J*UGXp}))Smcd<;Ad0_*+X!APhF^|f0?JyB{5+0u%f0CK)j
zrJLl3QDq>)vzjgNTbO0#B@1^=+A9Tp{-GzS8x>vxH2(`NUjKCcn?h&Rk8g?`K%qx;
z%Lg-WI;*Z{Dc;Bu00NS$fr^gDQFa0<VG_XI6VUV}C?dZ>+Ora%q;XKol2CQpe99cC
z82BT<iQQ)eNOpGz9#n!xn+n}4UvXMdd!1P9p*<2WFI~9r5!b8D@>6j<6GI&V6{`HN
zl6zB|UqP!&iJ1wgmjb$@+9erf3`7CKp1=C=D-D}D&Y=x$InwDBkUr?Fq6aQq=$0lq
zl%Ov#0EwyA03c3G4PjW4`MSTo4Lc;&^l@9>+6gK@_2W$5#o%3rP7iH*YCpXGi5duc
z2CXcU;WBm6dbbJ#whjK^JAN@=cmAK!d_aI~X%eChjW#+~FAy0?`bF}KD0-9n*0(NA
zdNXsqQh+)niwXCkCo0|5iX)t|e-joYz!COfFUwqj@-NU3B~(T$&|H{PFfZD>=dDak
zHuSDcX%G-w+zwcqqdAQC9UW$z;~oI5hkNx6|Dhf~aTm>_Oh!VqAF|P<j3Do|#;~#U
zMCH;{FotA)Rb1fsUr$FHt;J_<Xg>+bUfKXyKCk;*@~B_m3(33=dlHhxZU!_<1(k`(
zGQanq08MDL8bLRR?S^XiTAGn2+8b4OVw@UP{j)~5UYB7^IA<jPWv|PCm>7>bK&HUk
z2+I=KU{<*wl?!w)TAO-+T}brJK^eod6IZ}iR`_Vb<S$H&8tP8a{^1_>Pz~Z9eg)&)
zbDH-!Q6rt;X>nh6=M1~LkJ<gj9$C=9z>iUfB|X?eZ{$r<&dgyncr-eqLrRPW@_!|r
z<gKN8tZMI<`vDcwKxJ?dPyvclzPS4Y&~RLQ**s&Oc;WkzXKH{ibeX<NahhUP!C3r+
zVNf-(L;^%FV)d``kjLH$BGE@!=+LqCZ{WJAv8IWXU9qzG<fZ)sX|0327!OO`p4q4Z
z!05hde+3N2CGHK<S{vxGHIf|A>=j^QbT5|=6pid7)&B(Kt*oVKl>W|fF~0)gtYU0h
z;#}(Vi0E{}$UpxO9J{=iCK4=E2y(Dr(_z`M^}N(9>nL?i?mLK&B4L9H&!E$=-4?>^
zuRN!$(=$+A(It449~V_1SJS)>$WefAe4^e6*Et)P%v(!~(*zo)g~GlW&+kn^qv0Zd
zYe!!VNS|R|R~<^8TI=A8pLB)$O1|X`EkTc$Fmg6efF1>3cD!u{nv$h314WA*=e}#E
zSfBjR+AL1j#Px2YHqS%2T6V<--awO^>H{~5%1^^L+4N_MdKgt@ZUL967oAK8h5fLi
z36r2%msaFGULjknN|RPp2c&cHcL}lCEqX1^JKLh8`C_y@-{xIIg?$`owy2oEjZPhP
z^xW5<eS<#P^sx7+MdhCYKY8Z`1No^Q=bIjDCq_WsSD~<&k~f3r(3Z7P<eR<2fdHl3
z>)}^MHDnjYW}_G~_i%vy02B*h@;=EgG9B9PM<FWaZ`}~#+x;(EWUFc*@E!z2#qzPP
zvmhw8*-DW4X?B&o(^=)H-i`(?KW#k}`3Cv3RRoxgE}fHKqcYpIem#!?X2=`lA7C^c
zH+^4^{7*%CXtMK~WORKa9#6dc-NjTFkKg;yma*{f*33w7k1vw&Am76-TDQlg+Xb$p
zGa!91Alo1J`q<(%SqPss59q-Fg;ns;FJ1(`>SyEVa^qJ-YD%w}-{FmIeS_a`<O-bd
z?w(QL4fh@(2Ocq`?A1%tgB-kD)BL<BxqH1<*RuW3p#~U+YO$Xj<nwcsz{3srUSAHl
zN2?P&EYVIk556I5&uVxbBk<urdIoTMzMJfgS6WSPfKcw!Yw~;`#^1cvjh_UfKs@rC
zKqgUIN(_CiCTTM_ZIP8()RC?L7vUV155!7SE%|$C-vIJ5@;&c~j_K`{uz>Drs7j!!
zpr$MuaQ<!cfE+1*+4CGc`i^%NOV?<Jz@S#hGpZz(--t$#hyI#`QY6?a+T}fn$E0f(
z4CGVQ6wL@nva;;PEFml&b@rddmD4%j+1FN%P5BZHGSK$*QL<T<CI_s5#^-p2zf88v
z2?HZEJ59}W&xDWr5~(56kHFxN-jvR6s`mQ$<NJz(^XU6^2Y&>6Ge#n|`~~uwrjpK3
zJ%GeaP*`<~YsSdHZvpC_-T@(k>DS@8xyUBmyb5`a+1J9)4!k0?+eTP8+#gx~Ur;0R
zIpEef3B$-^(eK@9%_p_GYJD0r*4ZAPbstZaFy__f+3O?&H8VqDO{~wooilz5Tru?I
zvWYvikX_Nhyd6<C#w1HRB5Iqh|Fz}GP8EHEy(RQ%@7V1&vzfN9Qx4pt9t_`Xtc{NL
z{_m17K4wHC`=sYs*T)a;ouA`!yfD0xN2*K1UreEEP*|JD%A?Ps&}i?%#)@WG_Hydz
zxJ$Z({Z#YOmks&Jo~VlDnyqP3;7;Ao2aW6TP5($f@mM}cW~Upzb5F<RJfu1w%W8T}
z#z4=|gBewKmUq5+v14K3dlAH)X+`;8-jTt^$o@gE^RY>QWwhN>01gyb+$R1yGj>$l
zQ*06JBKY5}y84((g&PNn=cfFDNqYuOdqP*>K;q#Ew%xeKHC>!~N;Cf;;SFhl4cih3
zasUh_A86t_6xPTpzqFCc^N<P}ogh7OK!`%<KAJxIvQDCC+2_q$>_?{GFpWkusmu#E
z+3X?6mY3N6UcMKlX1Q#o?;#m7JozD_A@>SDvj}ccx?p1V%HBDNZ&=+F7ht#JT({cx
zTgJ4KD7l&MaP-`Yd}-H0*L$;ZYw5yDS@~#dlNkT$>H2%<I!L1aGmSe@uEOSSZmIt_
z)qAP6)o-Vc+Dkf~;xD*8f%)U)1KRogsy|c})zbS-VGVxH{JQ&(fYg)ZeQ9-LSSqML
z)$oMf%FeEKX)_I&8q1e9^iJ|oJ!hy3E!m*3at9Vy^@I=gins3PGgj@r$?o6uC>}`9
zx2e-5-c9wbBWhmV1rlT(`CHuL9_6hxWUj-~)?vq2id;$xCgcKu^pU(Z5<}It+9C1)
z+S4QmxHy#6|6DdZ6ju79H>*dp2FMpWvr{{w9Gx9+hFxOcLB6RL!etzib?=KypXeHT
z7|iE8EV6^AaRHW7z2+jB?X5)(EXW{JOKr5LTux>Ftn#Sz%$epz=Wsw_9RZD@gRIOd
zs+*TNs1O*0+@oA#ed(JsjGEeMNDSfc7X{UAhB-&->av6@^$T!hqPPG2)}G$PYHbZw
zw2s17p`VpnuXb|UtJ^A~NwXpGalzA;x*GAC`(mbcmUU@s%3K-;7oBqh3Pa<>Sq~on
zwE$xK$j@Q+)(&gB7`;(sWRuN)ZW?ZS8-Bps%suU8`q5^yanpmWY~U`iO(bl9kkSWd
z)U%uU#8Gd-MlsVkl1W=W%1$d`<_}OW1PbeQVF=dF@qx>7epC#sFS3QjqwCI4L*ia0
zZGtFRzQ_3%x;R%?HknK8n7OF_J>i{!J9q~jdZafbd8SJ;g^Qf0c>jrdHP9eGo(6ob
z{6A!UX*`r|`1XvkMMe@L+cSz%C=n)x$`;v*WEo2&vM*z43{!}btwP!NHAePz5Ks1f
z8B6xvVC*xD<-I-c`~STk{-5T{T<3M2*L~mDa-PR=oa>oGq)dZDVbaZ?DL@ZbV2E+q
zT-`f8-=94&daeAFbLpsH8FN#tXU`m-dwOp71g*-5SGEoC3x0N-j47*7Mw=jFlXv0N
z!Wo0wykQfVNngxHULcT`72V0J%N`W)Gn_^q9R@zc?P)|~9^q2Br<l(A;e{b)sxlY5
zCVJ9kDWS|Rc`>K<n;69j|Gd29je1M+g4SO8%E>>vyfs-_<(mwHr_qQ+{nKdR*rTJ^
ztY!Xgm{Lo7Lt@BgPd`(lYjDq3^la7OgCRDWYHM6~EeEBx?pz8?2DZfooh@LG&N}6f
z16ZA@T)=8K^;Y;08z%p=EZabWY=$<tS+%Zz+`O8VwXj6E>C-n{W{%Ue0Ic!D5Z$wj
zY6{C6Zds(}<`+6JvAf5)nodMbE4wNmBj=y2HPu8>zg-kX^jH@)sN~P>rOR@|uP0EK
zr~w|*bUy)gQ#t$y3!3|w=bAU~VVH`a=R3{pQXNxPg{I)ZcZ2{s0fGM)Q&_ZIEvoO5
zE#kqFB@ely(AcCprca?=MKfk_;mk=I(aa}k?FZeuUGz8H;wxfSx|2e0=#f{pqyA<R
zR9+Euf6%XQ`U_=zQUU%95j72Of0{@y=XSqJy>fg&j;C$=O-P1mtnhYHm3&s8^(&)D
zhtJF5NDbq&J2@>7fKm_FdZvGQ-Xm}xnfyAYkN>zfLa10w@T1ckH|@F>q2gPim6>uZ
zk1KpX0S)Lxs}v+tttC6%3x0Feq~>z>mR@^IidE?@d{+G@)9tGssUVkI2g9#wGJkdy
zqZieU>!baURt!rc{iYB_#t5<P2j;9Dx%X?2O=B@`6Wa@L1S-?ItONKn5Jr<09u>G$
z3e*YsYnB-i=JvH-_*;C`wpH<R!dD#U>gUh-QA)rc8AVM4hCUFAJ3KxUbM2PvsQv{z
zrgg&`Rc_i^hBw-u>Ij?qJ(co#0{r!yXf=Dwn-1U5?rqFfIkv$k5vMHGwFFk!1i>fS
z{>y~NP@DafaNo73@jhK|nu>rHOrp)?T;T^RZp10Gz2m~SRnr?F$)7~rP{)MRo|*Ai
zKesXyXY=Bx**A%!cbw4jb!R&yv#1$QBHQEYTcJn|wYIyNsBM5En8Jhf1tMo9g=4Xg
zB`11B+OoB8Xln2KIAj*{H=XG_p1<iEuzwkKsRAv5;WYel>ub9}BC<@PVB|jb{Mz<g
zHv7G`%&YU0Ulj}XB}~Jg^8-y-L<3iTDi*KKPw<;W8yhM3AcqIz(rhc-aLA!d(WI4V
zjW<NMs0QGlP#|0*ePg})Rvd7H_W5bdDLm>=+*ceIfS)#zP`4|^PZoUC0o=X+yWu4*
zLy|W!Mq^^q|JnwMvnD?)q2JB<*3+};V7-ZPV;ymHyQ!A8pClBp2%9JiVX=^tAb}H4
zI_rCRf#8%YKeW8GZGw2(pplZBM>ZPE8hUI!89iiu<X4OQ>UK7mv*;6I;Op?hx5=<P
zjJcW_F&rquAfzwK-xL+XA?z+1shMM1L$)-y{qy`#e(vMCZB3buFD7J#4rk49<GWw}
zGr}espvNDf@)fmMixU~E-zl%LYopo={99ju;`yrYqm?qTJ$lW|DR0#FY~U9~o9yNv
zP;;+co!_q0k~(hPB~IuvZ)6vaotCLdJT5L*%as#*j9MfMd_iqwo_%QSqJC_vEK$qU
zg+ABA`Qo>duLxp=NUii+7ku$@9`qHwm0XhKSqT}F(mEi#V`5|hw7DeOjLWTJy;c}1
zuC<Esea|73qROM>A0*%MJtUmVxBAlIhEW{kI%ewoK0Z@)?r5uBfI;e2zB%oW)%dBk
z)kEl5dMg`GY39aLG73$Md381pj+?I{58iz2$g1df^Z9F02{osyntJwo&Td<zokLf+
zqL?^tq$toIU%XNrd*kWKfw<Y8-QzNc|K<n?H{qoFTzaBz$i#j7I{5lAe4?k#vv@^}
zw3K-7muEsI;R~j~i*z43T=VsaI?icU@n84^2svdSJm#w-2>7ou_EnCaK4@*Njq<F=
zHb=Nz`>$x?Q=~(Dp;=Ad>*t%m2!VK0hJwz`ClSS`g>fG6@gb*)%u{tvqGEK#$<BUB
zMv~l9au2=@F|0*u-$vPszW~~B-+WaV8jguEQ+TXUR&$yt{w0=-Kc2>%-d{1aIV2A+
zme<B3agTof@FVwkZ<sHo>X)B2;}H%0r|R0{xy)<r+s-KQy0yBE@h{%<W_4?Le`n28
z_;XUM*{ab*hsxQ^T@h_AQqihBJ%o=9+3X|zH<Lw3&hEZnGNSj^s75k-{TMNUtj4po
z1_&~JpV*&Ye?x9_&&AlD&vP;--hZRAwmm=TW`wR@G&?{qly&^~IQT@H^E2*|ZW=g+
zPMP(ulSkj~n3-wif34|pL#`bPjTa2ob(@~Oar`&!yG>S+i7h6WHS?3LuGrVF=IeL0
zO9~BJZhc+%(8;{}1ydW(cE|^70R9aE{|~hNy~O`O+k2|j#+FGLwtXD&Iz|Hqf6VjL
zel3Sd!)|8vEf0p)!mf8g(`G$X?3Q;6a=O&ALNZWg<7@2-k-ukqLoyWkbIPvgeA*bA
zEUzXY=O68K5T%h?g=PI*lljq$K$IwLTxD0~)r3WrF3>#<4?4nOXtg&_0U@TLZ1PWg
zOv{TkpW+pn*{$JPoHqk1?V3zdk-jzj_jug5lX#41g!K&oY$Bwk*2l?TS>qe>^*O-=
zEn$4P#JujY<Fj^MwbT(=-IRA09ub~WtNs>J8EO-6bQp6R=nTTs^6Po4Pvqh6+!kZ>
zoWT?iaL1jpY(thH{jkG?H|eA7%Q_h<5$#Dnn|P@_h0^qXSft;8-iBv}?IEn{@X-{8
zFoelFEUXa4*-djl<#ddv)nCxffAnUV9A&#Zc83!&R#gauieS6mXA3JWkHV#h&}PH8
z72e0<ksD*I_;g%~5GKl5&cKh*PpXdZQTWA?RaC)WF<{4Bo?kX)Kduo%?r*~VGE6`i
zC@!Gj`Cb+|keo3@XusHlJM90w9*-(ZQB;31er+Gg?X)3zcIKnwX%PSUqjt|9ntpxX
z=3Z3z)}`QESyQHO*R5_nT<v=~^teYJomK}1?pXev9<WIin8~PU_xsnBqI|UZV4*Oj
z@Y}28t{=e<;4i!xhMBpK*s8vDs^_)`zwk629`(|!JzlhiJZ>6?8&vd_b#`R#e%`hz
z8;%*A2KuJw@m$>br%fj2@e<Ks^3Agu>s50OXE{q<=JmC}PT_!pBgFSaQ7E3716~qQ
zQDx9FykxGp@^P3f{_s!GW7lDh{&IZMVb0Mjpf)4xpQM9Q<$|k-$dWg|1poBy3G!*&
zSAOBMWw;#oDk57$dF0cb(Of>@j|$vsgF!dgOn%-v<dcC9oehM6$CIRPz9ZD&Nw6>b
z6RWxFTM%nJlRf-ODB_<FqkJu@!N_ddEzVBm(w^oWp_X?YPT2NQVVAjvSMb}qtS=I6
zTY{d@7k)3q>{dmhUv9D>ud4`XN3k<_e|mWA#2o&S{PuXC&>F$#+_bXiRhaqo82!x5
z7uOzl_O%1Jc2kiT2d?DRmPwT1uz+Jb@S-}ziH~sJ-Mc5Rb=y$74-lak_wK%WL#Y*X
z=QPQ++#=`8YU6(F^#QeaZLwY*Xb|=(OU>O2sq7);)iQ>ay0fT*1v#40;%^G2)N;}N
z(oJ-K8_rN|2oZb*0I2>$lK4r|snOf3zl0HDVN>PHo$XOwR5lc?32s`u>d0ogCRY^Z
zVAaa51dQ$+58}gQ=pY=Rk!Y~nE`@{-=Vni#mU^ka#$NR|O*wgC26eTI?dW%%Ja2Sa
zviovoJc*;VcVzkNPhN?SpOmxP{<Z9<-@*UZg~+SEpk5XVUY4=CB7NMj&3V+z6(^{G
z3t^4kgr2+d1&)PXqJ5vHesPNR+7gpJ1=+z1O+LL!wI9xEiTVt74tuU!3}P7OLvt&J
z!j?rhy5Z@$r!+VK=@g-LI6n275cRL}@^s}mGtbs=o6wsLmpj<=m?KeB7(4=3(;wWM
z$Y#0JBwi}#NfEdpF-8R!6uw-r1w3Tp*|AVyPKw-!zjq8388{d+e?6sUZjD~^s(^f#
z&wn=&XKyU6kp4jLNTpaNd?09QL+|!h$V@-T;WBL$RwZBZ1g430KL3*QjtwX!R0wfZ
z@LSY|x62}{>_7(S`TN(_A6U9#{@nzpfVTalL@sGuDhVJIPCC7_3S$OGsvllYt+ag;
zNgIrH5H|mDxgqTzE|4<nSTP7Z^K_x|d@~4hE-SGFijTz@j*abvM22>UCsFM;$NU}j
z1-vZjQx5IP<}cTQ$mZl#Bb@9<hDnsdjy|Fo`v0KuNj14$vkKwiFpXej1o$W9=8T%&
z?y;bUPT!@7WK16UTzP*X{m&NUjySz%wc%1wr|^UfY-;D)73jBH$nl?yYR!6w@)&9&
zTIr2#Q89y}w!#F>)aDk03u8;?hye-uS?=MlMr#K<L3bsXtoIfaPrr3|gnHJanB<@)
zWNu$KEggnM`r8C4AKKSK;~A^_8`igly3Y$joQD{Uc$(I~^wbp5|3Yv$50DC}xN6Gp
z6oCfdnVi2;qo&s7<xPRJTmCk*?eoU033bH9QdhAHQxMXRUIT)1-$4ok=mXgD{VmTF
zhVK`!*T2&gybAdatObu|Z^;$Skn8nbR%QR7%inN0uK(dBUJ~wsXc-B=6g$5njSH-K
z*?Ic$F`<ZFmx5WsyI7rWyDn;r?ibJpML<Pd|6ZNCfn8?M3r0b~IjP_-Ujy;j9^BVm
zmn%7;zH#@G^vWM$U-OF|@xpho_J&^k*1qV;BZl4@E?;q45&WRtK8gNwb#fD_Fv$gQ
zhJ~m6?=ohZXT;qoP3*!UG@By-N+P+oVX#<X`|i0|U!{%jo78td@Agz(SXyC!RM1oq
z_v};Vmf>bqKxHD#V3#8xcTjdPPyNgB7Q1m@QYF0$(OTXB%v`&CJ-|1l*BFbaowLe4
z@gP)73Vn?AZ7tU>S7*|%Ms#PV4z>U*;G){Q&mdc>)Yvz9fXB2HQKI@s7a>qmc$SfY
zUa2kOHW13Fwr?Q%G`QLKyn&WF29HZAtC|gnLJiVn5zIl)<{d3~#3zIoM3|r-hr90l
z#09LK=V)X<Wqu(IVj+n<VHjTTqM@acYR1?7YLIULR8Nk6-^yYAz)0lPp}C+&aaz2w
zQ*~JuI@L|X2?z<vLM63Ni@)ohPtf}nba5*1a#TV>!<DH&i_|O44H6&T3(|NhGD$rX
zd;O%N9Z*QP@V1~R&ov(H86QI53;y7m?bJk#LY2R9Q=723%la*WJ|KxA{vp_$9eY0w
z&06Z@+7}fNP-o`Oh_&~<4j(N7q(;2yy^Qko;3TW}1te27tiQcCYfhLbxjzMpiy}!M
zeU#@=AicH9BR(Lz2Peu!0`mgk>Pw^yp_MjUoC207c3yuz3y!UYdATjanX+o?S*!F#
z36lVJd&gFE6vp6mO4*Z)fymuJ@Q13}K9p3g^5^|G0Zjj;Rl|jjwqe`cko|Ws!yhJS
zxpwQ)SEiem$JAdN73>L3N$lm&NO~qWSq&GH7Y{~@ev+MJ>ApNxcYg@*8n|TkQ~xIV
ze);_P?}kFK)yKvS`_8}=x1i*(X@vY7$+E%foAU-li8X5?da$z;jx~=1qt>4OQnhlc
z;?BJZS$PR^Vf#EhdjA?G0rLHpEWOvjz>6bCAsyiBIH11%;>{1kVi=6OYy4BvpY_WM
zHd?(8YJYU`Hj5IRFaNp<9dYE2k%`fVmWa%+B`e<-n!=fCcy;o38)aIPSxYrp%kA7Z
zxu(>nn$jEAAjWuyJ-_S7L-LYCl!3`zD^aGhWR3rz#{km4+@ubu=aDu@n!P^!SvVqn
z_7*1Z7&$Sk-bc?=&x)8TUT4dX_WV38=X!BePN2c-p_*1~Ah81MLAx$`{ESz+FIaYq
zcH6b$iL@0#@}l(vKaYoh`b2c|RpU|s&bQ5<H~v0z3=Iz%X=ElaQ2-JzkZpPqNdfPz
zfwox#kvf8n&o}zzB6U5$6M1XeY+mpbR%Zl4l7efAyg{C3EzsRN3$n5C>_vD(J`xnd
z2Om_+Zp(A>(b?BB4yPwm$CXq$oYC6r3}cfXIq)e|L4n@znWBaFkuZ3-Wd=SVEJ=fr
zBR@VkX9x@7eYG2_H{x?K_Gpm*Mz$=1AiY9*yGyftE7AGWS5|W8RXsSgE^rf?sz+g*
zoXBJbjlqK5t{uDng|vNVR6~J_0p7mL3(yJZ6LPoOUSe>|PuMce*}`Mfg*sxn2Lz$s
zkL`y<vq|`D=D^7y6v&kkuY`ywSG%l~Dp_!)FPfL0B-@JISIwSuSq{Jioo(O%#J<M!
zV5NGFdV~NsZe0qWNZ~Ua-EZ~fVk=-H@riD1E<?VDVj|cb(Z<un**~sttuFheZ>!&b
zD7()1vBeWei!h?m`d%MT&e>CCihy?=AP0a182J$g{GfYbb@O`CAU|ciu8XM!XcuvC
zQRy{=>vUWSYa&k2luAgWwH9|Y7Rs6Hu69q=Ljd4650CtAXaLTxA3OhQ-7&=mbos{f
zkUv7o-gLtwyl@w;i3E9r5Ru=;<i<_rG=+5z9%4T6uKh?g)(+hjWUwZp%yV{V0`T|s
zP9?T$>2ugXuKkc--}i-71swW#eJw)g<uT?LZz<Oso~>t-Iyn#clkK$yymvu`TNJGu
zvE8k1jDCo387hHYWkDv|ta!`k?Yx(iev#ZWXy0AF6X1PO-iU@=Td1hPWg8{b9B=cZ
zh}ew?9J?A8>(J*zO4zCxA$GGt!I}GfzRTk_ant$ASOat6|Mpt|X#c0BBHF1Wi@)EO
z>KzKT3YcX{<NwpFX+xrGroj8sJkAT8`YtmNI+OX+C0rXIE3=plUAAawxf7R&Rp83=
zfW5SbfzNspOA#yS31PlXLpCOhV%E!A@%PN!DHrbr?*!XBthrE_S)ja=C#p=}uPW_i
z-zoQf8^SewN3*Hm_+_Qu%+9UNAcTvwuTwi~^q)J`C)^Dkfp>X)ey4v^@jh18<u*PU
z9hrIE^|xW)mX){ezI$an)1BFwMMsD57l%D`6Z0@v!~y&7ILUp`X;%=|Rd%Lj>Tjz-
zvk3(Qas?eS)yKiW341<WY|cNpn$eq({8{>RXP0RqJp{FRvR44mmbf4mr^P<x_pTLq
zPyqD4#*&{`bKrQ?l`8N}HRRVMPs9u6!u`v6aTL0TI6}Pz6z9*L#&QU`xmsSjV1^KI
zjP2p~uB0OzS(Ljz{T<wBy^|$vW7gv*JA0d1VtN^yPxTLEgv7{fSuf@^++&b%@tJ=s
zXCFA7r&pJ%2Zv4FofQ-7UyNpz?XZdB=Rl7DnYIhL54;k6<vk!b$CN{&Xoh=pE-RiG
z)HOa+lB#DM{s{JR`1_W?(>E(^wz>cW&XYuCwYC7(O{!th3}ms|u`k>7i$aM7CS7A1
zkv~e;d|<(U_GtlN{KAK~XY{UG$=lTfqRrD7k||F43Izr7;yzdR3*pUZ-UZIY`Y^#k
z8;4MlsSi^Yyk@RV*dc~-Qvp6h^(f1G-F?jz3iZjORmyjW`uJuODbrX8WX{URIystb
z>j67%D)=!^;clRRTHp*@(M4^u249fqGpylN3h5_B(SxJwuy-SlJ~H4Yw;2yo4IAFE
z;(NfTrDUu>9Z-&1lMh;lg?xwDssM=h4JKf@f9BkfUtzVBL+s%)tc}oH2LWCHko>$7
zE1}ULz9H=io4GOAAKOA96KOW*0bE}b$zwprXH`V`%4*&Ga`NraHO5H*L9-7|aE&ce
zQKQ;e*)4*Pw}co!qp7y^U)9De3K)>G9!epR0Xzpms%4X)rqiuvXJ;#h7A0k^9m~l4
z$=Pfsj?3hoyo(+#@yZ|NQaQUs!N&y+0uPA1-y!4vms~kPvwT@~f3AzWZV`&*m+2zE
z1`~Vi>p#9rKb<*Z*d>>_WPO%A;y^3evkDmQ>E`{WNhevjEz83L3Ms-ToivobOY@Ax
z{krBY&_l$<GVU`U0i1sKl(^RZl3Hqv=>7P%El%D6IJ^%K%(b6%EsDc;*1cEyE5KOK
zS*)<-BE(#;{EME_Yhp&B|1wusA}jt@WZ<Z69!R~6n{BebyehoY)^(1l+zE1h`BDQ@
z+zHo1A<$YDGh*l8s8p}UG=+XgtBoG!xDkU57a>NtUJ^wuPr#S4m$kq}K)SwZ*Ox;)
zc@jJbp@bk#)WW5fA<LqKf0?71iWN#8q&`1jU|#^&th7wshOQ0>E+=~q;NFoyD9p=g
zzz=TVYuXY8N(Xlf$H7``g2hcyqu;prFve8Y`g7!+bDO>}-I{sr_qg9a7Xr}gTk;+%
z_258|V;t<2u@I|w08?F-@^XYjk4<=Z-QOZ1D7#O~${=DiLxm|iZb&#yO2Bbc_1zU4
z3;$?n*^U&$wRgE*E1XkxTOtp|F3e~#mA)2B*^~yIOm4B!TqIN;a-?ugzQqm#1kL_}
zS_NGe4-Xff8o7o*@Lz)STo(9MGmSI>hsEno&kXTEG;3(`1TcnVuHRX94@>#b(0EPq
z_IZeCz?owJY`+^-j=ZvV9FS8-POnPs<GkC$er|XqN;~NYe7r8C+L^yQ*BU!RSU@YS
zT`MHh{ooM?AD38A=YMT?<NwjsH6XndOHPv}WwM6MGXdO5x`+Qfd`VY;MHF8*&8N(I
zz%5wc9J_M;g&*icsAHnw-J6pxAA`nw5bzVo4cAB%E<(T%JU*fvE!RkL=o;d6-7FIF
zJ=c$u*H^+9)jRx!tOU$CQKDw7a99?nlLql5G?&iOWt92KBCs>P2}l8)0HFN+ZlfL?
zCm~A$+GkZX@X5YPfSeeZ?8}3b^~LO&EwJawV@N5K2)}viqQ@D(;d=<xG1;zhzso|h
zJVD@s<2~>ECpMrH_-F<k9G%9ilHUWrAmCSIAaQ_2v5~Offjll0(Fe7q);!)k6p125
zHD9LAZn8Mbzhf}lrnR=4emMHwTAAr1xfBA(Ptgla{`)fwxbH44QvlhuP`re~Hr5~H
z<vZqy1qKYj_D4evKS;h-Z@O_-bDr<8G(UiZZh+XrDRd2r^%m5b2Zp7eL|IcZjb)gy
z$a}?@Vp;lMi%JqTcCdph_cHGrbBMy%uRUsw{q;m(^<K=%%rqo~UN2+0!<p|vi>i*@
zdf59}nz>f4@+5=3b9K8Mm-mN7XNCy@45tnJN{G5fcZnX1VbYLa0=X8Fvz%;80HOTY
z#J<n^VPE;PSxBZnT$uExeDpQfltpf*NNEGhT?&^rK;Pju-U$!kO5$J>1l$0y`$VsU
zrp$A4#tCvO6T#k}R2_e0c(2ymk24ISGTYzh!1s9>L|MyA;erCZ9i=w49H8z4hCZIr
z%hnLe04^j%J-@a=1{<^!T>2L0!ccU6F4(Nim8PkA>cT(D%(D<UyU*NEQ;LAuG>?*G
z+@V!L)Ql@VQ;luBLu>CDlWUga9K0`12YWx65wBb2l_Vft;)Vj3M=PWMDhG-()uk#M
zhr~8-nY}0VLM2>W`_h7*ZBkVt8Ft3+r|>jiM(oq7C5s;fHAv%?8Qsp_Bml`jydn2!
zHi<o%POo=Tq6-fDbC*+;_d&F6u(CPmaB@gDXNK^G&7+<4bmJF0Bb%qYvN{97?h^tz
zl<Y<;Di0?ygpmI=KraKZ8G}uspNw5-TJP&VEe0DL7v3Cn*cHT0TbxprSFvv#e7&C|
zDB8JR%^u452OaOR6D4Ya##jGc?pSny+_bShKYgDS?*UJqhM`A1h6;Xc-UXd^`bgeM
zz4Yg67C`=bZOU>%VxDm&Ri@zyY#(53pv-n=&nq$2&iYRCPadXu0PcXm{|np?t66y(
zaDXPt%tRkL3iVl=>|~C<{+lvMUD@krEr>OWB3iQ*erlBmTGPO&D-44R=dyA>QCA*{
zED4bdpw!ELNH(KA1I|MtDMO{wvr4->qy4F5s@w%knLGZ~RGnJU;n}$!0y}0`=V~`3
zNS?Q&b?z>rt~eby##Ae#Itrpl-8paNGjIIR2ykx5)7}1dob}%AJJ5y}Rz5KFl=Ut#
zNBh|uEv<xn+~j0Om9shK6hev#{ww>Kh%3Yg8Qh>_N}V5a2(V@z`>MNrcA2JwVRk>y
zvlsnc<Eb&0Z;Ez*_T7>D=E53PyfsIL^%U>@U85<tMSQhXw?7e$Y1iEiSkXYbeLc%y
z(!(k+UQ-rjz4lk-9{Cj3RTTFcL`=~GY#$`2l;;BGMwt}yG5#RA?!OQ{1FXjBFeF!w
zp{F~o9aYVfH>7yfNIl)4k}w{kui{40r0&y1<laCMw{*vwr=u1?2aGV6gZ>YtB^f?R
z2VXpdKfV{;WgGgdGrazGmWGIHpQNT&JtP?>ba)ZuH{iL>PUzrg2^=W@olH3(YVBKt
zi}3giJ4<AogJoV9QFi!zu|-Tq@$Hvn<g=>R_fMD5*&+9Szuzm`WR);f%%Ly(B2zc)
zmG7-^3Md4ISDzMW<W<O<WumJL)w>6RJ;z?n9r)I{{TF?M{Z85q?<E{Ac4YU<hxSZq
zFi4aXKx*rE)#`hhB~Spt4bS9sej0L7DT<dziJo+H!$LAJ2qJOXNG!4eU6dvqH})b|
zm&L#KbPvQ<_a3TCBdH@@bvTJSVZxACED|Y_HKCz;HU-SEBcbQlss=w~%CSB5B1v93
zIcX&rVt&{inw)Ca^&NpHPR+^}zI*FP^>X%a5joE%pL+IxchLida7eg+Bo~t7^4GhI
zpCu!olI6T!Ws{I9OT;QwQXC9F^tkS8@>v4)Jgk~MW1hdK@Qv1%PlFupPc*UG9@Ou>
zDdb}&)>PpC`pMds(45o$9ILF)wA*~(olY7ej2J1aHMA%6{T9zlr)1?fK7fLul`sZ%
zajLk2AVbmw%(B3a1^ZcTOZCV8)DARIk6utPM*Vx4WV`*;G2+`b;`49wv6YVZI^-(y
zv&ZtHcR4ht#QpZZ&5!{SwUI7h017(<V+5CO=sHxNE@@8rs($B_<u9fPvo)T-=CzpW
z;8OE~He=mCNkxRRc@@maTVG>~`KhbRj603CB6QzTy7fzw6h`v@p!~fT`muS{@cChG
zlGWG3Q~rfxRNa0lZeYE_?zQ8}s~_#6aHP7s^LZ@LDJyIzAWi!A(Sl{Y0&Dp#Dyfca
z817VpI$q4!x0a1BQf%Y}5wm#YX{1)I|DpW$hfRz>e>q5#rN;{ijThX1G=U6<B)r|1
zMKH>LZ6?D^rWQ66-cjTL$kIz4NE1kP-oCo^okbQ%+2rV(2y<W4utedh@=EkGMcaJj
zaj;yiw*F7rNIpjU`~;nlVVlr@`FFERpHl`75}V%|<tpyd4aeS-i4>m(MtT7jm|JeS
zL{=|BaNA{`!s~yctF`wPu{ojV$`*3gQXf__<mW2vKG%BQ&OE$(-rKWgFR!o&BTPyG
zuZ!31^+b3a-vdZ^fQP%)M(#WRrD54%rr{$_qPcewJBVUwsabh=SiPqUuiuD@VVBR;
zPL(g%v6{T(m)$aQx^WYn;lhfG&X4$Ih*uI%vK@%h&b&d8Cq39b6fzuHNq#TlTgCq>
zplO8{80<w@b4iAW&C15(TPuLLYBE3RVA8Y_`t;%#guvVU^(P(mEj46J?CG@!&lS-8
zrZm(`1)Q3K_wm?;Mh5vO5O_Hi(1dQ_n>5-Wm}}thJJ+BqTbF!&`>OuSyt2cZBVfoo
z<>562H>CUR-R-}4iER)r$gx86tX1qa9M9j2+u3;$nUm;SsVy=FtTB&b&t(kliq^mN
zTOuT>RN>`cDY91lM|HRa>k#B_HV(Z*%ESl}%oBy=G`_4%t-W*EoE7_ItoBd1QmQYf
zm?U+1fzM^T8!b6=W0A}2Na%0eCbuTXnyKS)anG1MaE2kR8D^Dd6$@%K#Xi~3r3eYt
z)K-zr6HhQBxIMcHIs(B;VZxK}cD#FD+aGo7a|19(9I&AT4$)%6fh*l(z#6um>rcw=
z2(F6W)nTeH+JrIOf)kG*>JnHV7lv3${tMJ8$5X>8&tu{;{KN${M2amvok5i2aCpyB
za^;pG+lHn*vBK+xkQU&l+>fN);Yy$nP8dKW`QjskphcHxBEs;|FD2q5yb=vj#7q-0
z44!&a%rZ4I^2r1-lt0&~U$cXgW!MgSrgc2gKi6<KV`$&HtC}?0xXGHAfxaJXP;G4@
z-)}eEcM-761#8A-VSrD{*>i{BwL`^C#`^8nQ^((4J8AumOMXP^p?e<V=~PcJP69xE
zucr)8m5q_qAj28BZ@bsaJjIP_pGDL9V2_<Krc5~v3}5cq>USB|<nrQ^TEb4&&@SbN
z`@X@zXph$hvge3YCcY}}>_5#1hyW@yBTqig4EY0^p$OR2CLQ4*xcSfo13F2r1psnK
ztbi(GJ;7Wk7>T}LeE_Z6i9z*%u^_uM``obRpJR{ERUY_JUB0{}145Eg%`tPmy9o01
z{+^BDCbtpIG?!7?_~eEpQA0^G+W&q?X*DTT=6K<FTCo(LER@13u|A!X?7#F^r<w{r
z_L-PG@B&l-Yfkq4+=nfP{CyG0mS<}j53D(TB=2w~jNqt9Q7Xt=abJVi-=|VOdK?Ss
zN0SL8Pl}g$qQnt3dzqo)(6j?s3fIjsnZ&)p1JTtAZF7KxOt!Ay-l&>V+<D`;%$fq&
zyaH>kfOy?^d*Oj7&D|I$>7*Af;G=F-JhYi&{6>XMb&HH%94M$AE0(G)n_BqWahj@M
zvrBJ4fhUU-0ZCqx4PH&e9eF@9Pdto}I*mY0kR3wN^`Kmj7~lI?z&<amxd=*_axG62
zhdrr_!FY8g#(UIT<Ld5CmKzOBYlp;?ZB+D7?H$)|#Dc<lTE{bt7cuao6s{}!N2|ao
z!Dk$ZVjct|H!7;vH`uKvSM64Y4-U_to+6*nk+t=e&idek1!nnpVXD^$>=WZP#wVA@
zCWqWsJcmRkYDpdUk0_A09WNO6{iBIhNAS$#4B|1$Yf2}TOa&jEHsqNngl{Aijg#v_
zTTibgW_KI)HvlI2VeJcl1^cgc9`UM_R-yZTOtXlag$(w<=te%ih6D2X@hiiVC`<i~
z=4VEr_KRFkCL`_iJJ?gDdicA3ENyWfPGhbv^@d87EOotFaQ9ugHLi$Vm$Pu)r7&n_
zcVa>^jQG#a6d;=aVWj+j3_%AvL-9V}R=P^sP5bl#wZJ}(vOkS;H~i%HdNAV2t3Q~R
zerC2X3~nTqtd=#8x4qlZTg$LxGcj!`kBd<M^w9su*6#j)m=GGCQmQwSuP^YWD4O~+
zXmqda@00uw{hTXJIC((Y0Yw(Du}$`Pn+~98`FDEwTa}TpTjDL7he$X<tvKqlitDpR
zzaEX1)!?V>(%6GszQVjHGjv{lURV*nn)IwvC7VCyZ1w@UyWBL7mpA!W6zlvVjCM0&
zH}i_{Erz0x`hld&sY2#dpb38Hx3qS;9rH$BB;Nl|c9Q>>jUR{81{91;L~5!O?3VCb
za3=qunt0Tuz#i#?+C2YamTh+NN|bibf1c3tppn5>d*Vi~Gmw)Ixzq`r1HE-`J`Mn6
zaJt}E2x!A$U^iHOP6(Q#v|ZPed|_6(Oj5;az4zYVsH0VWfgB%U*o>dKaxR;ASri`M
zaq=$Ubfq>{KxL*r<dgCXtsYxZf;fDtY@dd>_7McQM90%>aGftGsBf_CP&DGrbXDE?
zkZ)X@@F>il#{qMhh<ruiVE#$6CCW?Qf~TS~KwcJg)RcEY1;{oz9%pJ;h38L(&0W35
zSAz<AA)VavfM8oTV4hXeRyw$G@yf$o>$vunmZlXh!NjboN2C%#phtQh5{z>NA4?pt
zJK=b?KEz&7Qdu}~uA)vaG}<{JJcM%~rbWKl-Wl4!tJc{2Zg{kWg3R2}RyRbJTM%Wi
z)%@19aTcMBznTv`>QxKBay=+7pnI-G*UxEt==aUL`RPSFRj2Uul~vVuTbEwOt38C3
zbz&3%E|8HM^z0cj@T?;Z{_#&37+VBnTMxJmM=t`P;nBRB{jWXWL*@3WBiBkC<veN@
zA=285*I)30_{`tnU-P<rw7;x_Aa5r}S&7Ag4Rz#?D|rQx5A8BevEub=QzGzO@{s+R
z2$A0IWRy4XAhtZV4^9pI&K5I99)c%Efi3r(xN=USGuD*r&F(JVzeMaUVmcVo6(KS}
zE6^1DwCmUbvv_+>08kQeBLA9jdLYtl$?!lZ66$|K7@c-cL}TsT*5foUrS@Hp@NH`S
z$6YZyw$gN16o5UT`eDDF-|bfd=ZlXQhkV0>fcJ0{Rp{ZkrJwItks$t-P0O!5bE;dC
z<Lr^2;~~T4((O8niVbXA^idTcc%~wqf#PaGyjuSe7K3acqe5yDQrVg)pNtgUSw$xQ
zQm#LFd>?k=&JUii+gT`bVQ>q(%BI{gq1gbjxA7XfA<j?}XE?<sG8`K`y<?Fh&kdsA
zzwXpQfwF=o5y<k_L-IR*wW3)ZY^1DgN>ttfwi;YO$^ZL0EZ;Qv1?%$R>@r3Q&=aWX
zFWd@xVAw}<c#k3~fMKc&Tro}o2F%1$_cS`QpLhIXQ?wSjRVBP^O*``h#U{oxEZQeg
zDbzR4Lvm3mrYqrfshk-+ZBe)<bIaEkhqif;4~@J7qQQk!^v{vDf7Q~eZ)nfXs{M7=
z>6DcRq0$8(o~C_i<fV~h0x=AC^|zgWmO`s`JwOouf`977Edqaan&(M!j4J5Lm|y2(
zb0Ond4Z4~63#^M5_hY1dF%<H$fdsYi2)o4(nk}q$oNU^_r7WwYTcC>7+v;S1SdKLQ
z<~PTJa2OLHDl-KL8T#z#?XB=vbF*1`rQ{(`exEtV%rl7!`r;@WzdVGrg(o3?^lhHp
z3@O433aF0tAWft<P${C=1J&{UQaTO**DOj-gfE!wEbM&P_K-Y|5njI*4*5EL?%rRG
zfWRN0XK^mi7^Lj3-s-hFrF7FiY+=(W@05q?_$BK|Zc%cYda(8kX6_x;3+p_un~B}f
zFfL!watfu(z%zwsfMlhwo$1~qkNJ>!BVhLW@5!ipNoO}+K+x`MsTM}#mGV>G{x*4x
zn!eBsn<bT0j*s<eKus5T1&L1kvltn+Z3o3QPgI(+Z#3AWQ<hI$X%H(dx|b=F+F@)O
zgv!xZsEYw}pLO$l3}qV09bq-n4+Fk6HY+iP$3U?Vc&lLFDY;?UZN)z5Psz7w)H)Z)
z-|-ihRf|UX<Gg>z%K1gReAU9kvxk36S*e;UNx#8(h)+p(gZH-X0X&Q9A+Jm&V5}@x
zVDifcn)f2{$b~QJW7p_R>ON)nU3VSC$n1ugo)=)VTx<0h(#nn_e+g{QthO${Dr*|+
zb(J{plCo=i1KeuA0=E_)D>dXZUOuwM++eeG-7BE&^YZx=UTz!l8JxLhJC`QCt8JiY
z3eAjH4Pnql?ZBEyAs!q$6xD3%tFuT3l&30|jv%0Jl9fsxG1%l&#KY1h?AUZY2qT~T
zHU;>6MNAQWQa8u%CA=0fzx@wFgPHpf1TXKFu`HZv5CiH?Tzj?2Ii<+L_t(n;JaLI(
z{59(Ph&L~^K3FaEhm*YA`w_YUG2TB!`UY?vRdpV_DIdbubn-naW<*YT31-E!ZeqFD
z?ow6pC@xSo8n{A_*$BLW*qEWmpLR_wfjcX2wnI4`hX(oBa1Hq*v@qYA33ec(ass(-
zU`tog8(EXj0AiidyEvLd|82)Vg3jdHIg!5o)SfUvxz(GSFHX+y?44lc*^{gA(RVrj
zQ%o_WJTCY6Ps;<Zq(8kFva$4|0s>^6ce9dMax>DFfuOxIX9T(MIZbJD=4D$i^a0li
z-nB940>}?W^Xg**L<!tT@SJ9MfV{^)pHr=OzpcqKef4Q|XXM>)71v+i<!<V{;8t^f
zfA#Whr==W7-%W%pql*-W<1xLU-Q%XWG-@C>Vauy%&#n-{R=|aC{Lx8KU=4X$kA!96
z?7iFyPO)%SkwWWDp)_ygc3=H1yO9^5&EA6&7A`cjLnenFEAZ#~*7PliUQ^kriK~Sa
z#N&DcE4D9^`G`}ew5@#Har_lho_c3Skyij(9|+$8<?lCIwLE|L{^?(k?j6BDAnChS
zAzb@l^H~#nCan4M&c>~1tiRV>r)lGZU2!H?F2ksqPUUdkSHsiX#`mrd6hv-PsI?qk
z%>cTu99q|@hJAe|8rM^o;r#@IGow2CF*E?v3uM%bS9T->=uMjE(r(FxgA+I$qS;sK
zjdI5D`Ew6u2;QZ(s6&-fb&$`w@>;TdqA8_m_#bCaEAW=|E?ZxZ+TU5jQ#LHN+c{fn
z=O6#6>o5A?X4Q6cb@#q$b@$%C3l>pm>*ak7c5MHB%VF^Fo(*gH>tMBr_F%Jph%18K
z_x2Xs2XjlqQJRAbmR!?%7dH;2p7;=2r==y3)_k|Ck!NFM<7tB#Gjm&Zy7*pF!8hgZ
zKdOZH6=%jTC`neY?0=pV)N-_T;Jg!ji|*a#vExtH-LNYZ*2|x1?NpDzUr0aJau7$b
z$xX`50It&(v$>R<t>LcQC*Z+UYxH6caV8ItrdvB#aY;3t&o|@_1$Di@cJbqdcc7Er
z5}1-yxoy5?sd{*H0nZx|O?hNpYA=gL&0<pza4K<rpH7+<580zLf5GCcpbvrjZ^pwp
z7!v)&33qO%3jzZNlI2ZT>R9~vSVlsh(86xr4=rzAh7O!u!4w_<rKElM<q?pW&rO1I
z;0~LjRkT5H?Ss(MIo$g>rQy1HCGZfA@vIxmUUSf@3zXKpJDf&VyeXtlkkMEwdTxDN
zO7^2D!Pz;r!D;ly`?;W|pU^Rhff!Mtk6%U*;OJsGy^G-JjoV$*lw_aZ7Ce(ay_*7N
z4XlFDm(oCus>i(ygf)D#{Ruz8g&8=z%2Fr!eZigAMUOxyq`)OEl#4F%w*}w?kQ>MI
zExUXSyxH!c5`6b}x=PEqkV-QeUo*YWp?NRt6Fx-dQP}&9mZ-Vg@tcS^a#`7KwNLYZ
zT)GiQ_@Bo?N-d}4u19k*qFvsuk@{SAKT_^SRCEx~V+b~X5!RfUju7%JZrU@vGQyX|
z6h#tJzKkGaeFZ?n;DQ}nc(M)3J&Fbg4=Dl$1Ej=%yG|VCw}|PjNj%_oWV7s|?`xut
zO9iS<y;Pg*U5-HDK~kINSN7FHu=dc}9d)*geYvD;n0hcGB7f{R5i4LW1@HP{MZ#dh
z-8^1~iHt8IJQciZ!z62f>ZRwY+4Jw_jJp;amH0ZluTL;q71X+xef@I%F~9E2J!(bS
z(REM57YtFsYn;lqvcG*e2cvImvstvf!G_)5NfR#L7h%ro&>IF6mS*n<H(>!u(I37;
zDO}^i(&Mgzo`;C!a`J?2GUmehh<hK0Nw;%7+t@7x#?}&@Q}xsRu7Cgs|4VSgX5yWy
zio>ATW?&oX8uTE5>FXb@Zve79sQi}&<*(B02)*am<6j^S9XM&mM}suNrKqEu0j)Ce
z?{XsiH9l(wt1(aWss$@a*4$2sdSDuG>904##R9QMx7nEmAH|$VjtW+AG1e_H{P}YQ
zT`A`I>bNOnyG28v!|QD<uLr6arA=PMGmPY`27qa<ijvt=a+1*zA&}|(MaM}`2qnT{
zSfx}u2SNqp*{9umoMn}kF+kSi0)sBGo72H<#fHjM?hrKT3OCr0qQDK(3?04*F@M|y
zyaQ6)MJ*dS9=t=}hdQF!EIS+NyA*E4-Bo6r=_4%p%mccs)0h&aFwpRk(3CibzdlFW
zHRLqS(l^0S+aePsw=oQZnM=q3F5;y+S2KN7Q^DWq`wR?Y(=;o;NkFdkQqDB-#BG{2
zg@@a6xNX0(k6_!+ul(7dZrY^>-1?Z1U=1U5gTGaZvpWDkB00+W%F~h|k>AC4C~(Th
zJzvJ#yyf;Vb4Rq2okD22U4tT47Jmsv;#a}iKPp%X`W>>bEFX4u&IXd)_=hQ@Sq}r-
zH>k}o(2uxStK|$Yh+W=dBQ%SnduZ6;G0xOlJ`mJOdKX58#3pU>)o!s>OfyuBm^>rf
zH7$InPm%L!Pe}Gv)*EgE<$8vJc$Cp&Isv;}{vr)mOn-IGk%n0-s<4A_gMw-C_vzYo
zGY?!?)1AF}NYG-jO<QmJ{VpL3qUuZR-%IOsLE~3z>gG~-8u-S9)VoAs6Y+G-FCgQd
zi#gM*|8y}_dO+?^UJ_vFxCH)p-72I^VN+yi_#tFQ#v51?2LXS8gm%wVLau&?q!@Jo
zK(=;H^E`a%!+B&uwJAoWx!ckgu?R(L)icHnwDuZM8S56oV}NfG#nS0_W~E@G!Z{IM
zKLC}TW?=0>Y`7vo8%N;GG-b#*9~vk%!>1|pD}}pL<=#$%OgNqwzR#Y*-AJx9dC<#K
z4+^UbNT>aA2i}+AK~92PSJ}{Sa7-m9@Ue}ZK+Hk?U{tb0x3oUwMaSV>&ns5!YgOsB
zjV6*^oZ#;QS4r1<)R5SQ;gEK`^nXIE+*d?@)tz)8p+%9ya3YuNJ3gPK2ZpcN=TeB8
zqR^!A_Y(F>;<5f|w8C5tE%AnBmc1URj7=WCn~det`K6!P*>Nu4T@mnoz4U2T3D*|x
z+a5rs0CNku23iz)sDl?R!P)W123(K`@x=ghQ4##EjQ~RXOy8{;<9g%WL0J@f;*oCY
z+4cHUx!UXCrY?QUX@29H@Jr(G`*iO*tc#`BnF87f7_5)KE_Qj}wpDzzk}V{1%L8Jf
zb-|G%MLc}<eZeFo*Q;p6_nKj+59dAL$pD$`zE#Sy#PJV(6ZahHF<4W4RCW?;_IjZG
z6I$IXwVTp+<J`xk3F^0=IF7XvS`($yq~NS+EG4&->68%l%2R=8n*dvR;)pO)MBRI<
z6z=iYAHUIxi6NjNEWV)6wk*yT=Sw-D?7pBuh{>clJD+brD#PRk+<we8>r+_BRice0
zs5Q*8qyE!pE;dWU-&lX&->KxLkl0p$`HT5USCQlaUO42(Y){wN*!ME%(>@~g%{n@}
zO9|f_^9OYU9sp_V;YMiXQVXv*>*23K%#Jv$#r}msiEX?l){d^71Kk6MshYp@B!7fN
zdKBfGmsUowug6jMrHK3WQIC7ir?UOA$OiyVAHC^a=})+fZ@2Z}y*=Q4cMMl9j(!K-
z`?!tsi2}0QOTFF(TM(d-+T=jP=d#}<tbQk<GqDArCBCSsscLRS^Z6E?ENY;wfx1)=
z=82PVXh`h5n&cs$!?^44$GaB!-Avxpa%}q%bLpSB(NfHstPu@-{Rb9+oUF5*?dCvw
zdmJ;eYIQ77BXG9@AOoy>Q%gbqY|e|y>Q4xXSNQyfM_5Z7zb^){mX_%<NaEl@<`?#U
zi^Zumo6I~~XTyP8;p5;<;;(7GCR`e7SHLd{*mwDS)%*DO6OBct9+2&stEE1xgzL-y
z7Tbvy2y>I3dICP~E7k6eFL_J=bx$^>UI;ZBRZ#m)^5eKWRLl>#o31cMYdijU@apw<
z&bF*`wCpol_NXu}gyiJDDNyn<g>!P2*0qQswh|RZLZKP}FZix7%3P|C6*N)vl}}Vn
z$ft9BqKp_&lE&+@rv5R9g0?5OT9nm^rX%Vh(EhFxw_927b8#<&9;QQ)X}lbFSved!
zk1CICgG*r)kn1_aavOOrg>~D1fg%$kQ-YP+_y@hzMU_}w6A1x6dUH$yXK*piQ)`-1
zEKUzLVo>8WINS3pG3C(UD6Mk!C>uDLJsrDle21i2?aCtvNE3f9uXtaIN=Ge=0m<>Z
zcv@RsYBy*bXIrM^CTQM(VPE(GIwA8hXtF!o?lq_~<0k=^&eGcsN_;whtkS;^Nnecd
z>|wL)-VcdUt$s85JWO^(MRA2(%di#6;MoP<25y5dXFXDzsae+%eJP6?%;k@!LIYOz
zZG+qK1a#~LK`3sF65Imr=&{3LDTp->@Stk7lD-p{KlrChB8Vl^tT!K~mS7j_ljB=6
z>3D^mgdUPhq6GbR#s-JgF7y$ajrb)G?MHHwK`8W)m`fp-?~`m1vsqtNKv9~ZkI=dl
z61N{kr^YSdvzYgv&K`*7f018>&<}Dox$kBw1Ki`$0}}-|a!qyJV0D>qtw2X3e=V<2
zfo@#vgAu@Y8X+B9=}5P)oWWuOf)gH-kFIG?X_Up;#;j^tO7eMM)5v~c^&6`3kS>E)
zSo7DVYG#jfoU{Qn8$Yb}WFQggSil5C2qXP0(q&gfX!+?4dXH-HT1y4*=7;It#a{3Q
zR@1uf>i8&?3@TFK{Z1N(<_FAfgzgVCU3bL$v$O?}-G1OZzhy7+OU#eN5c5O*ak_l6
zi7?StLP(Tp7C$sB6m1vRix0_U0vNUhKcRW3TX*+r<A9cQuv*2RHR6ai(Oa4Ei|=*~
zl=2gVIBXhUSE)PwXuad0@_u$Mw25laD9l{IR7+GdF^>O7EK_SPGk9kRab6{A9`mF1
zo>JAB2lTM=yr|w7R>_#3cL3IJX#Wz&_!<SbPOKl@iNv`da&lWq$Ew8&CUO*&)xE#b
zXZ?1RW{klCXvqLG3FruQ)4Uf0=MX%&m#`@<xSHbFnCSU68A1U~q1P6&iqTrF&h$uW
zk!FlY;-#=RuLVc%mfW{jFIAq~wm%neb}D6rnZ7f8=zT-7yUNEyBz$u9yI_=c;sdCC
zS)0w*!tv*jXU^m)B<TQqXjjED-I$)=Ia3{qyerS)Fz~puI^R)pOoO^+efR5az}7jT
z){03?&<i;<Q=7bv<iGPnS_vyFn&?v%XidI5OmLfJ!pwnIFt5KUyymYG#!D+#043os
z_k}aQC%qu{O0Ad!CicWrG30BLO-67=$CC&Zw>xKZ!~|<5W=R)V4O`9sW8<68`zW1L
z=ZnvEo_J%9$HxupC02zR>xNFX|60*RO|P+FA!46himz7O2{_<F4(0RLBA@~9Ki4NW
z+o`M<Ab+U#-|BJq(;%~#Q3=)poie`|M*gk&zfyNXD3o(tqszqPH*cJJMvs?4B`hz4
zaf`&U16(?t$2C+tSev@)JLQy3<PCWtx4F7kn$0{FWa|~~<-R`fPL_^POx25#i|-&f
zln%!&JF7CDh4jx0S(a74hOg=;q_s(Zo_v-;U*TrI%sRGKKM`n~45~ia(9es-`(!T@
zD-vFP4Jp66`{<j*@6WiBScejSE!XEnzVMGPg^XS&y}%nzsQ=9ZOtJ{+Itk#o3lI|d
zc0X56119pLem>%U%_WNVvrXK;LB3S|`r(t+vC(k76Me^A2?_X<t@15VS1(@eN8VcB
zz5o`Wu&=4|GR5|{B92$^xECTv$Tk9_m9cl4H(!0{&a0WWSvLP4MVS_yj<}7c%t)b@
zuVu%7uY-K7{jLIHE2oKi(@UmzG_`Jr(<&*}li<21z0X01U8}@ycUz){N#ZrNmL##K
zi#EF-m_R^ptgyfW1!$3v?KZhhfpTJeiagN(lb{b7FJj*&@i#zJ>vxp48w^_;#O*~O
z=BEwPrrPx*w3a63BZ4demq8tul7vjA);9SWPL%4$zR)%ZHlvRfl3g4(chi*F{Z0T4
zdJA5f3+5L_-qB4FO&9!k_uV#fdW<=zoVQ6%+f@I;ycV`I@W2IFfJ;XfmB(mIEfo<K
zjWUxjuQT!5fC_5qzYnjV`$qgGpufPBbt^Wa-{|_Jn;26m@!Wkw@-NQ2RLuhQsxC=$
zt8pd34jU|}$qXNBt|b*8cRUo7&1fUC^6%CuW#6CUMBG9$mx{Vz1-dN0v`ZJOKMzNo
zKD+_376`l2amy{w=>QS+Gx;m!?FcG##axJ(;R4vZ2>Z7%vuUsD7;jDtSUX8JTZq#+
zNkkCtUp$e=ns7fg?8nmYU0VFSH*nbWdeRHj--SCwxIS(1pAc<1c+>jr>^o)$<`~Xy
zv3H8B8Qs@(j&0G1OK-b^<jYM<)VWmJWKqnr;42bjbThi=7gwJxk=HbvfcD=TM^=Q+
zwV%DFmw==w9N*w?u1sYaR;XY5=%==cI-yk$(W(C1*2gn2`n=@D4FRhiiY*`BDA}se
z%)%4=EI73CiBKZ>U!9?<KS~l|_+6bU^ZSYmy$1Goc19JC_wVkjtbCs4)+p|{H`%6F
z_r*FA=!pZ?<X+^LK~(%ApDgNATD{xYh?3|LO!MY_{|m8XBJW>iHl(%nytIB9i3lJ~
zV29iMH&w=gnnwhOg%gwRp?E;UMdl5g&ByU)`miqCg6eqP<Rm7z0Wi%83!2lk=Be8w
z5_^n^Hyz^R^buo=V~1neisTS|E-hD50jRsPULf(Ls{g=;EroiVY`?fST5liQWAgKH
z5^8+Ee{$qZWdO)K=XCJTzeOGbn0wRtoeKRabJ}j)m;u$fM_&zBe02)dJo%oand0Vp
ziU}Ua6@UQ7ht_p03RFGrKd)L{XPZDiLG~Pw{TqihzghqmFT(=-_Wlo9Zypcz`@N6P
zAX~OcX6*EAvBX%j457>*$zGO_C6OrmmSu_<Mn+NgF!o-ReHUUF*(VCwN7=GX_Wk?p
z{rUa(`-^$t>7KdIea^YAbKU3ssJ~V_rE{;?(|7*w$y(Xb#7%e*<?-T2Me}~*wC<a5
z6_nVwCxzxZc|UG62jtud4y(`pBNNIrK9v_VRC2_9<Ld47zcwGhr}3TtP1)8=x4k&H
zz5m(w<ePN*cJiUf<NeK@;5Ltm+xrMj8}3kA;iIXtI~FV3&aX=}NLDhLD6ye~&1MZk
z&0X_<Th0$eNcjYHf1LO+T-><!Lo%K6_G=he@BZu?1V10syk=1~ceGmAcY^j(IC&aS
z|MThFuo9W7WTTp&#c9$vmN(W3{|>hR&^~a$QUB-3iR#alsYmB%HIsGe-yi93yp=Tn
zWudfq`_Au%iRBMRA~!TfS1gis`;X?2L_D_d`FT99nA+%X@cSqF68xti$PadJGJ3ie
z`6pn4=Y5GxNy$}@rr+)QV@va1XOeH+EV;OF^rPg-->C;RN63jk9~+W;8zla%K<NDM
zd@~MT5mPIffc?qDpzxcSHTyI0omEW5k#%2heqO(=_tv0>fQLfj>#XmqzuvvS^VWUp
z2R7W}^CacQKf4h=Pi^$2ypa*uC^t%<u&Z%i3ELl3S|58qz2t{Sr3dNf|M<II{#*6R
z#W!8|f=+3Pm}b0A|5lQ*ib~eBFltKswy6H^3|5Fkr@2o~rg7l+RcB+ta_+z7)k2uv
z|9yo(j81m{{e*Dx|6LCkuuD$gZ4AMXQx|7p4piC@u8y}A_!SCJ;OY)@xH4APEs{+z
z3Y^@<^bMTqla_LuA1MTL8bH0W!Ni&@Hezr~;d=O2!8$<4dYlju=^^ZQ4(5JeILR4p
zb)4i{i6Q3;zk;97(ZQ95*by*jo9rc1pjVMW2bk@!<;ACEpdZ4#3HoRouw~)Dua=P%
zT-87t*o;1n-xVC+vLJ$p!{ls$9rh${>EQ`rd9WL7kXB}-&w?u}UWC)&!cjUhFvnMU
zXz*>(2~>0>1>#@jg<!hWonTJ8l1=~(USSqUvL4j^#1H&()yXB<MB2TAi*LqZdg{$W
zb71c4geV$9K)d7g3<YjaIU>%XZ36l9NHzsSG+b36*@P->NXX~FmDj4<y+TN2neqcO
zc(AzbC}y&0OO*-+8y{NcPzud4|Hi&K9J<nQWs3+3u1s$iZ4*Vyp}_%~QX0_WCt?av
zrJgY1zX9#yv_Sk>{J;YKY@DOCZ4s@21}~$<(BS3o0}60e8Zsh!_@o@#EK&L)zw5t!
zq!*}H%)@l)$iaa%U4l8L^RooZ=Ud#9Jj@HqtP#xTnhAK#oj=%#Dy2gJ_adCWn20oe
zsfUMg=I#-t0}3d;Re)6Bz)!SIz`upR%EQElp<YqoocZD*n3Ss;ITVC?z%v@Iy#ArJ
z7}_S!wHE&>(h(^M3r1U-nI;C}Ek9pT#?>wr<SSx2^1^KZshAh)j!3>+i^VYeecfOI
zm}8>K(Pc^C*QH2IXHYR!%2Y)I1{aP4N0vDz8t>xGX5Wb95RvMD5CT_93;tjCNd^H5
zcTq?P21i*~fq84daJBVpxfEM31OsJK5m%>^GlZ)h@}fmzA{M!ez=ruOnN%qg&<r_s
z<J2)JYG4bwI-{S_-+<re^za&I@w@nhI7LjCYb)@DmQPQVQc_|sh{SX$J|s%%WEQz&
zItToCs8R#_#tZl~F_W?ON#IASSFmsqo};!hRLBIOE}^iCx5y=FegnvO9T*&Nw<EwD
zlY&)>@X_6$?<-=8DH_j<d@)^D6#?W`kzQuJFhQY>WZCC&{?HJ#ljb}&TpgkS+!FM@
zi3u0DYo`Q;Xd3?(C_!qcN(mUv1@gfh<?=8%Cxdq|glOF+C$6g7BF}+}6oJV_<LdNu
zfL`$CJl@N+k!(h?(a2ab?!=2K=9Fq^Dq>=Vgl1s(7u>D`zfnaYj>v!GW7;KjaCN72
z)#Wwk1M#wdlGqR}J2R7LNDFJ;bn7m2BWB{}C5SKG*$jhQcOd4_v};^YUQP5p{kw0m
z^boF%4*UHi2oKkgVx|28eicQ%v{4I5?LW7^VveOFI^-13m>?F1+zp;$A)8PWSw@K2
zTeFi-`$VMtG=)e+ig0Ixmd<Ztf{-uPBUuJgd~s#7jDeMym)tW#F#F~E!menWNO1o(
z2s(lIgh@GE>1G^&ysoGLkU}J2&h21B%ql|6|1|<+6d2A$<Y79$!4MMcy!dxXphfau
zSkMIzp;*Vi!wQ}dUO)DiLR2Jc&d?^V)c4_M0BKU}3~8Z9LQ|cTc}J--cl|zdH10!A
zLsFGrn4g8%oPz8<q#+io_<9;&L(V`R5_I*lOtFkueo^WfKxWjjF1?H1aaY)gV<$$7
z5o??q!TRO9Wy&4;5lP^v3!-((^n;0mT@HjDaz%>j!r5piZh|t&@WmW3KrTW0*9F~0
zOtEy+ym^TO*qz3l%PnmFf%wgK$k_{=iJrIhA*}SuR#(nhPqRIfFhTs(f@0a^jx_Qi
ztPsT(93)<3)wox=mn!28;fJ_l(UAM*+4NdMqSGY%6=&vNVG6=Q3nfl+7s{VWW#rEH
z!yIBV-@Ro2c_9UlR_goy`sIN^2&S`}7e4?kvgf0Fk$rphMiH;I-!ylY-8l5CEMtqB
z%xT<buTA;qj!5H$flho<zA*5cJ-14YWW$-8s_*}A>xf7UIF_!{^c6z*)mjeB`{kl8
zu1<tQ@+HhilAsfXt6&CQR6<~VG0Zy}{H61pi~k$%$RzOd{lAyGg`kt8c)=Bgor+<O
zGRi!MoVdE?d=VX>UHGaAuFBP|Qyr5_M#|{o%8HH_!tnmM+MTnIHaf(SSZu?i9R^65
z^IHHooRDC~zpj3m19K1z$;BAmd48wk1a{wpCCur-Hi6NeQ_o(O`O^6lScpkwxIdO3
zlEEOV#v;w)fOvOJ_N{?`o7Htk<o+G(eL4tR&=m=~ym)W9XWM65Zc$(X*>alUW49Qd
zIUVZH2A2n^fl(%s6>>i^=_Wh>+&M0G$XDhk&l@qTE*j>W3LfUSF3<A)=XG!X0j?$y
zK3Y8p#u`k19;V`2F*E*2i8;jX6eAbSX-&ev<#Z>yRQx8L3E~gG{N6i&6j;Rf?~H1T
zd(q$z^%OB_3TEI*J<p4$J73%%iD{D%9^$~2>7#e?wtAldDYq~o-bM^z2DJI8d`<$c
zj+x|+`IOhsjF+!;t^McnnFYqK{0oTJHeK=jupwM|2(T{$b0GQ&nfMstN>R^f>Rs|g
zWVn!#9zLp@_+9|!&9K`6wAJJ!#pBAF8+W1CcRdzZb}}KCy4a~ynSRp*TpeS9lTX*{
zj^Z@nC$p}BovF3eJD`Q{;$zQrlN*p)h6~?JZ;mT(RL|pAoW*lKoygW{`O-mnx#@M1
zOj%c}arF@pdn@KoynN;Da>Ch+kV`VcWs=#9qKHI@;yGwil=l;|2k0j_Orf#L^n$YH
zn2iL!*q$|2Hif7++bh4XJ$-M9U&@Al3%04k8v&MG&}SH4Wx{^<!*dDWczrR$BSfQ5
zQfa&b{f{*!Z$U?$xArMuVzRMIT@UqAOi4r)p5y9tjyzLtOh0yxnF({Uf3t_7W)j%H
zr#LLdWG_n23D8T6=MBMB38(tvYH4|Z)EGoK5h4x6x}CC|lcqP$0KMNpgpb(F_q0xE
z;Dd8e(+z<YFStbCO9nLPZ)a!OVfX*C3;E8Q9l^X7LPkwL0dqO6MWGxx@IojvrkV;M
zRd&()_O<wEKD|Mb<@330b4-bwuG2%9{lcwm8XR%vBC41ur5?0N{0aQlOtX;$X5XhJ
zQT~Mk7J&uj0?NsN4W=Y5x)mU4FG$M4d348g@p+iGg>~=`x|G+|zQu)L-sY5{ULlm7
zrr&Joqyf_-PY8q_BnlY*<f@hm-q<Wrgxtm&Tc&?I3c}KTVAkSzC5LE>biRJ(-A|x9
z%s=Rig^qPmhW>m{lRGA@JeHh)ZiqKh^!0Hd{!CI|O%D3w)I9O&4hk57jxc+2l*tzG
zCrnjv3@gepWQ#}UoZeqc<g%n+XWF~!%;-^r2-51|<&6q?hXM{D#?Zb?Tzj%i&KDw+
zEq+Btj}OorOT^?v_9Y~I(^?hw)8c`Emyr<(^(^_KrhTxrn=R51&r>>QneVL{u&pX!
zf90p35wI`^7OhhuFZw&jk)A@&bWK0i@<6PwFMeqx3dE6~XGo2SGGf{FwD{^-FE(}a
z$3IucEJ8<_*#z#Dez(#x8uo)YLW|K-j4bJI`4gGYc3QmH2UxZU6c0E;?S4Queais5
zsi{_<wc*4qT-7uuL>6jzDWRqI39HsePp>P`lw}(H#)}Jia-k=(ex>xL+zpm3m#@tq
z=<!_I_94o+vL_}i{|v5to0LU0wjVxOAxbZDroWf2TLW{H59MY`A8^ffkjO}V=-9KX
z{-+*wW6vgJ$eoJcDWV}H_|aDK{2G~Fh*KR_nUQFlmAK~%70-#%CJ2sP6AwmQg+8W@
zC}pN8FQ#=DZDaRRm=#R9w08ePTjn-CY{a~9b1JS<#E`MI?Nn*U5U_3Omt%G?5glrk
zFrfW2Ay$EfCFbn<K)eh)%#(&tBg?d^n!tJYuLx@ZZ3`k-L>BN2ODZ;g0%$9rb5I|3
zOj}RRQb90^h~yu75K)aM*<{;Z#FYn^h(m0c?O~+JkGhk3P(}t(R!&?KTJa(5QR$$i
zO$=Z4SZ#eL+NL`%vhu!?wn4O!N3A&~(aQTT_OIdk*WZD({4E)htri%%=<Inlbax-l
zr%Twg(ldv+G2b6Q`aXyoWaBISQ3gpV{Xy5iiJ8RGwfta)GV`>&I*Ab-Q=wZmQC_9<
zyqrj|z9SOk$t@Ol|Gx=Y274B52;xkPy;;Inr#M{G0At>{ydlvSUyCkfbH;hUzSINF
zruSsUw;0o#+Oy-;E<Qga;s|kvG)6*tK3Qp@ZphkmlW|3m9wsdmG{%-;=&@RQB>J8^
zbb(QwH41A<&%kb^*c;tKH_e1qT1`lp4Buos2Q_9wPg*)bO<gp_lX1$Ttl-wtmuIAI
zq(wAw;A*D0%6@*kbuO<de;|r6`1ZRh@tL?PlJ#F}g}rb0=647uX@9d7+!ytHF^zV@
z>F3vzakXPxjro7ETc`C^&x4scLnePCzk<@w3X<JA<9(@H&}WYyJRN%*wbPGty%;6N
zIotqM)v`~sW(veNW4_<g!Bre7d&CjrhiC{+d`$uV1ZJOkN--RlP=puQJtmvsSqmu$
z;dhVM)y*;Qf4a{W4b3Bg*{h;{$~G9Xhd!8UM+Tzj+ZN_s@$t2O9dhtO2_lMsz?Ctj
zhVcWlpQ4c<vhvw#O*d=&hnG$ZEc|Dt8*a!0b3VKRc?4p#Ug3ggLt<#F!k7VEEw#8O
zyM!A9_L<jht26{NRQo+Jo92(^#Ffu%4h=Y?ZAK3{(pW)MNSkJ^fJCr-j*_QkvnoKI
z!4N$lo_mz?z4P@>Z-rZzI;N|VF`uvM{)@9o8%Y|#-1VDFNtI_B$It&au#4v#B#(<S
zk$QN|e2(&<rOam(*$TzGlb&<+f71X)6ZkU+5(y7k@>=a5L-o1d(mnOQ8mxyYh3mDa
zx<NS?#<*`T3dNts)vKag$n?zDWjPh@Vhyd|xUgONm6UsSSc~Dp&=wyofciwY<Pz2u
zYGr?)HO%1B@0a8Yr-H91ByB`YU%BW*MK(gl<>;BU#MpiT4@nhWddy2-^ZGIt4psv+
z2JFO{TrYAPD|`J4eRv&W2${a{VwZ<5D#}}*0S3tM@?I3ZDDy`OYsLt%yH5IMAB<|E
za(;xAox1pK3D;l}>zSPWWPCRJ-qia*d}`35#n&8qdC-$ofJyw=WDoR)LKGxZ%54o1
ztVLH26IFJQLoD+8B6RQ|^yVtcsFfcUfw{DFT~U1nAHw=NA~^~?B+8C~Zq{faOqG%&
z1E$NJ!F~y)nFaGa;r`A@qajc;%9|9p8f9VmzN6G>B2ebp53~Q;(6Z2od7nfhP>Y&D
zY=epdkt?mA9uNghflXkMn<|+^gMYmBQwBt7M$at};Or@0T%jL`hp+N&$=YCgcsPoV
zeL=|jGPlQ90BtiwuJlE~ybL{r7IMX9(U^`_2RI!Uu5`4&(Uq=68&Y24T$daNael^3
z*T#UhV+N<6bN++*CXFHA&hiaTY*XN4XTG&r-ZH^No#l_X`@z=1`TSmsJE&7%z;7^!
zvbFe8%FjyXLT#+8pHi?3NxY*Xo3tG^22#sV=pZa8R@+JTKO!_p4su&X?192~W7N|E
z$RW{1lidI_V!)>L;KJt*jA}mb1`@t~jkypenVn+EcOj|o60r4B|Ln0trWp5XFhq;d
z=Z_xGIY$><jnoG-=|kgt=q+c_Jm<m_n17;{J-sLL6us#wmfQjFKu#}VM=tuLC^4uO
zo3Z|lXLYW6p?Av$4B4PRRnbF^6!NQ6BwJ{<S%_juz3P<p8L*$cJ$*JW_P#*rSt+(>
zMn6nKnCMP%)IH0S%2=i#1|svb@6!<H_0d-KTCAN~%24^IXOJGAEM4>$fB`U9X`T@@
zw{8Fa%oO|O;kDkQ$9f>GA&iR3<N^I-?MI`UoP;$R1#W11B;H(LO_lOI2k&K%ro0Wo
z^cmu%XLzU#m^QwbQRx+5zQY`jV>F!A79FLU3paDomb5v^h@6RjT>1Ll_lm7VWQYdt
zg)*)}*Nvml2J?)PFS~$G$`0lKCm>`OSgbGFcbUz;1hfm~3L;=mQoB15visn#yvkXh
z=y$~nT!DL4POaYO6eU^F)H_^3FC;5yRFFJpMT5_O$z{f;SKjU?w~<}(>?7uAtu-C+
z8O%>fSj8SXI(z)sa#=tW#FyFrEI3UV*XWfGNP!*1%h;~~(v0`Fw*Qk#8gm}jM%y~X
z++S7u(~}4>yne${OeokUp|!kx+Cb_JRi^g>qY5XoOhV%FOgb$<FPq)?<@FXY7-mP&
zv)$4g<~>)?B09oQywwRAE>u%Ir02zdiM?iJp~WCRxXu=ut;qV9ik#AG_y&+b{(^XV
zp$MXR`~55Ui?>SQ{2(3j5az9^5lKO;Xz@ltMi>^`js{jdv8;O9^q#Iq0eckqClC2y
zA=o2a`Js(6Vga~gU5RNv3_-MJ2WBtU&T+#W-0&N&e!{>!>H&(?1DrKYy`+|Yia?|y
zjfaJVJ_FMJ=DpF1=leuJ4u~^HSd7&b<|vh=t*bQyk{sKyGvLZ*HgksTaODH)w`KQH
zWVB6iu>1c(XAXg-FbXGaGJOUN8A^ObeoTo(DUN)G_Jp=bv}K^Uq%+ga`tM*m`yoFj
zHzu8h16LK=$dl&5c$Fx{E+j0H-Ix0YE)UEtuhzV&QZq2Z)k*@w=>mFqK1;l?vyy{%
zC5EJI7=l`FL5MRlwD3F{7fp=5I-{k?Aj`xCZdm;}J{_@CDpJRQ*YeC?Dwpd5zWj{}
z6K2D|9>S)j-NMf;`$UURV9dP;-+j6i%dW+j&_#a^%PZ=nai}a~)dGj8wQ#mPHer)x
zY)@3t(<jPg>XxuW9zaG?kAEreZu7ro{n2tNn=kP+B&fxo4l<bd+!&(->=6u(7rC(9
zf9;uB*{3g^OEgJ%mecS+WormRg0e8nGJL_RT{?S{{%S&eKHeNN?fs<ZD{BTD+(((C
z-d+si2KhyQ9S$9FJxhmGGW!)in33t*BKXXhH&IIgGLUA%#^xy8#!D7?34?{*gDf;j
zve3oogwr%c`53vrrc+%xS}q%%jg<8-PtFtuc0eklOb;YY&)d**31NlL-dxc4r?a9W
zU%u0{g79;-$U}M*L|%I&uwpfI$Js)o)iGPuVWWO5Y}aJ7GtTIgMM0cfh>$LyJb&B9
zH0zs2i@1gm*DJobrcP)OGaL3x%bPz<DnA;z=+|2WunWqppBG&(UQ`LdRkTEMz%K<%
zE1cKAXo3*g4H$XG{lX;r1m+X?nO!8i8Rq51`cl9LKst<0dk7^N<w^qG3%e#8tL~W0
z)FaOPvodHKm3@_k4-uT(xbg~zH%u`dXe&jV0`z$Ht{@0Rs5uDMSRzvCt%@J>E4c8h
z33D$KxWd3l%dF$Sn87LVr?g&CSw7Q|DD`3D)ZppDR!3=n5gj+D_|#$8qv`@ya|f8$
z$i7L-gaRMT+bq>b)>o+;SH%s-KPytlWR1^?PfAJWhZCjB`-nxLf^jsOWaB{A+Tten
zd}Ie*TV!vYt5yA8EhD<Mlp}&ChPQi>p*<=|?4AOY(O#UF?jtN1B7%J(dI?%~?Zvr^
zi8tHN^?kz%L9QCMY5AXG!Ai0%+E@O>@;?_jfY>viY<-e*0TVH(D35w6(+rV|*OXaf
zah-mEeg`t3$ciO%pMl<xRy!X{MsDn&L4a$oSQ!P$NHfrS;`^rh;Ke+yv4szk1#vT=
zR~2I4=dR1LZP7Yh*M@wnrEbl~M7G+q#H7f6Dh%H{A#5kGwHVOZv*~}q-mVuK{Rtdk
zFKN-q4se~-*JEQ9Ps$g|PaB7{xZS{VevSMD3H!>Q`4ymF6E%R8Mw+r-p2782J=BBB
zu}DZ|lkS5YQ`DgWW?vKpSJ?aX*=(mTacyv4575;W`1*Ys1?gmZ2&Up8*w&UhCw=Vz
z2gI9;37IV(8P_jDG&{~hNtm5Zv@E+PJqeNm>5T6F&F04@_E&ubQp<P|i(<Qk;<_bX
zZs!wuwPjjOs<%>$vrQN5KJf=?%!cK|I?{ijr*nh&@|xBd>YE*Z`I*Ns&B)7|fb}(H
zX(YDzww>wo{Ezcoa&L;8?s_xKAFBazwPa>~NS8Mt`I^_wM{q=P?n0$|SWWZXejr}R
z>^ex~^P(-E%AOT3$*A~v+nF(6Z^F<Q^H+-<V$aXZtc56(Z6<Vj>^2mCg9bzVBcWJI
z(efK_GtTipoRIILqB`x)qgX9E@0Ke!;bW{TumDDTru?@vwW$d%{D%_nW3pwhIm@7Q
ze_7qg8)$`%S#Y%oCdwJO7U5U8wG1*&gg%NtO@V|*7$=q{u0A)yHJolUSwDIT+5=Vz
zihHaYwr)`ZkvVq;TSTEDMvUhRVBFt7GcuuVJg>ks7-IdZ%`xvrqi>#Y;BX}CSxvk;
zN87wf?0K|xz6YkZh;W;uF9egYFIy`tV|EH{b=B70oh<VEJO(su+5HD+W_-u^xXC2T
z5R_04<u(t@i_{k8?k{vb1k)DX(pHqO1GF^}_Dsfa33<T_Nb9QFi}AS96+@Jxq7d=l
ziQ^LZqhQ=lN$SugSx#h6yFET!P-DT>w!LFlPWA$;7}vAP=8aXUNRAxxi-Fzyr!|1-
zW_F@4AjRszUBzzBdBqFfgV05B`2f<d2`OHcEjkfwLuQ|VHYci6I%nq1m@~j4G}`f@
zAp=c#kH*X>WpLS@scKVJ0xQ8b!a}_|!x9TNlc>ZjKuFPTT2~<5{tTK2!{Sk=Zhk!o
z;R(PN-~YzT@ikIb{5t!&B>KF%a0hb5cxlUJ>~-T)MN^Lp=2ua`60|Oab1#Z^tcWW;
z<~9L~1u&3}GzCbmn;^shdENiHQ?N{Oo*AF%)fQk50*SVpQi+p21~<f0_SC%k8f*kW
z5at%NIOEeOuenZt>X{78gOBB&$XNV*Kg@d#0#AsF5^Z#;y)(_2*8_sCK#-f=5hA24
zo;I8DS%Z209%#KFbW862X<Qju2swFG{d=mxry_jHNR8V2jNhex8We=Gv)L(381Env
zDR}>uvhn!lkqI1u;D|jA)};4BATobOn|<i4#AHEz;XFKiMCtSWV`NEiJ_%mTY{NA`
z2?@?s2=9&ET}aI7qrhc-4T+P{r*Wlc0o9_uT0tk07Py%(fh8KZzsR)`UVOCl^ha$!
zc95W)%#viCQ_clf_99baX|RMhgqa4<oozlcH#5-}fw^rW_|cYaR3XD58%*E2P|LWF
zI?o~Ioy=g-g8OD4l_>SA6z6}skX7g!A(@IS<(6WNvKRi-c8-Iu^gnQVXv)8r;6CbK
zaDc(5`Jf<s(jr^VWzW&2<q&>+1*%GhRQElPfcRb~we)|hS)8M7w1O23X1r_?WBa=S
zQY*-IPM#5!8{EhgKV=h!Yj}8xjfHo!Q)?=bitN`fxFo$B>zkzS0rRK4FH`(jdVL)S
zvA`xU!4OaNuziVXrdAJo`h?D&<&Vz`z*T>VnbUvnXqKrZbfZOjw$xl(?vc(4%oB2u
zK7vx0<K^svx+s$v+noks?ipqewjLXJ6!2abY3<~vzmcM1fGG>fd0C<V{6M_qXGWUw
zne%t3qwOSHd!Bg8FZuRUcfJANFK%XCIS=!$jCyYAXsmggOuE+$Wp)vdva{Fx(>W{)
zRk7!V66E^pLuM!l1dmfr`n#f+&axqx5}FI);7C^p=8z6^+6h#Rr|oTG$cK!+4h1GX
zcwWz1e2T4xT1CqO2)SO72DhqIHxJifF4Lbm9Dj=WP45ejEZ}2X-#w#g4w%po@^$Ms
ziybzkNjJgVJPvt@kV9pQja0<65ps*C21Z=*$lYD%-C6sdT0C?!cF0$@=pO}qM&Qr(
zq3_+A0w-Th6fn2X1`2cM9pt+I;7ZFhSbYeCtWl<9l6AG#d*}8CyI{H1)!EIxM&z=)
z2+Y}L9+y}gBO>#KArK#B?8{-i?_^GchZQ`hC3)`RFYWUUW1>yIPXaA{{o39y$N?^I
z41WTPkWQ|Xak+JoVVwA@5;y2u2AOR(s9mEz2L)dG5|A=k)Whd8CR*u<>B9LFQ!bmm
zz2!fGa%a?*U4gkV(%be0X6L=l%9v3cQT{lh{!H}Ly$^0}R3v2V@+##wBme6Vh?LVo
zU(z`dX{wYMx6;awOE@VxW;^aP1E$>30!XP89~f2ot1JHjlRngv6Qc55TmRaaXA$-e
zeG3PG^!zs3As#BP_ppn!g1YfpCO4*dw2UA4bHkw|L5~J0tx+df4W0xLPSRVcNbG63
z&-T(ONq1Jh>3qz?{77PS|5TSa<-lzU8Z%g3%?FS=FkFRBq@&C??Ad46wI10K{LkA-
zK~-hhu&L^PD;iEMzcB9#u`32;y*l%+z^d1zW{pz%ixwIT&gLe&mrU@WvrYrXB<@{R
zza>IWuwRM)gR5I;wD;{%t7NyqL}XCpyzX)k!@tnDS^;VA?;ImxK{azNmuEodk%H%L
zs8Tu!DCCCS|GiV#ma`rzaM{OEN+4t3C%j*q@R+RIAUFy16o4WxWsrPU`(np=tcIaV
z2|CLgMu9DY{%0TDpnb?^xxgtQsB|WhrO)~F(^wpswIzl0Ykz-EbOd9#fS0xLJWQ}K
zVg`ml(1zCUQ2fm?y>Hhoi)uYTXZxfffu53u{9us-NnqLr)AGfU`lf<p!&)%pH~2WQ
z!4-c;p$hT#y;_>D?Jz8;1<9bfeMy}24++@L=7e${;cj7%8x6Z~Ww%(-Rxc!Aepu_o
z@5=1@K0#nv_=#y>?(q}QYD|-Gb)a|u_pvL2*iPpxt`4L<emVT#E`YxNe=l8?IX~QB
zlVi#UE0nfa{v<}NY&WL0r+<YnUKC#qZ{%`iw3i)wdFf5W)(TeSHI}oR_p2`0>t#y`
zc54Fcwwt@jM?{8|HK=pQrz{1~7m#dL)i4bUr+t7DqI9N#C(dJJXSPvIbdV~20)FU*
z-0YF<4aLXND}P6OaJ8$sx#f-U3o!;Cb{FvCy=iQc5etW47*~H}lKSp+&RizU%W^yF
z(1PN$yYDUpb574Xbpm^4Y)NFpblB1{v^zSa>Y#1#N+Reyjo8C+Nq|~xP^8g;{^#V+
z3jC?2=2kd+*4>l2HEw|UbkDkY{6}HmR3g!cf`G-zel-lF`sR+$;VNpi_Wck2<o7g$
zZsKY$79YtLDa=d)UGb=B8jRn!AO=@nXg3rxTil0xw*s?2tk+zgjLX@N5(GKr3nAg|
zDj2ocz<0s53;0`QzxGAq(}lbHF_{yk3;0&ZSS?GNU|8dW&qeeeE$m-kPF)2%{>OrR
z49Hnq{!bGC*2*!PL9QJn>u+VEAauGR&1>}iD<q8WzOc49-Bno7L*FxyO8N_QVn?gM
zfF;zG5vP(&I#0R>BnOt#c}ir)%Di}V&7R?*{qqN$)84>gkBprqRF7p(G`mNAe|mty
zp6`%8Gs7R(4Bzmkyd19AqxWRn1;W2Rf|EQf6WFyJ-{ht7pD!fci<mY~B}hYqD;1%;
zED<ahzLhd>t!aIAd3od#SkiP-gKIuxNmt4i%V2c)rMpB5@_~U_#SQ&vM1hktN_}o0
zIQ(kQaG~W4qgc%CAbW<qAIz8B#h!IHeI~ymf@!7-)RkE)C}#V43lH`If8(uPE&h7;
zij9zfLk_eZ8mkEzs`BOwXZZyAQ2yg}_pZ^$iR)CZ?hw*0K5K1wpFF65i>M|XF*cBF
zzJ8S#Iu7$Sv``#*oMR1imu0<=l3O?W#S)FSK}2lkK9$ei-M|g`KL*P(O%7>d@g_;(
zagK^CmuU#)6JaKaIR4ss724)C3Y<aFAI6qnUifF#z6fvOx!^EmK#iCV>N=0Mad=0_
z)aT)dCUk57QqJY^xw4tJnpC|kz4(ES+`8yn&tD8;e*iOWo9|~Aj0#+E<zB~FP1gp@
zE-1R_*N7HUK=Q%<l@53W{-mIZWgp>Om+YoUHdJlmIY-wX-@DtmDvyPEdE)2xE)e=V
zz@aCxn|H-$hVFub7rDT%hN3;vQ^sHcw~po~7>Xjbp{@RO6<C}J5eN%3@9ZF1lG~1#
zhx}qtYO$QS+Q7pOvkxdHzo4kY3*aq<n*p1!p-sPmc6R_+$Exf?##6-XR2YBTYhXV=
zT~5krn&tJ)xN@%WZ9*-6eGxLmdN$CFZp%?i5R1+Inty6?DrM91xgutF6_Q6UJ;GKS
zAZl>|Qpq4t-M%e|RSRxZKBl*J!8OZ+X66*h%}uHn{i&_R(q>NTEj`(zThm<f<6f}e
z#m~Yacj)0J7>7sOkytTEPmTSLvp*O9<7|zKU0+24G*8CqbJ8|U4t4ES0Z?YPn^PCk
z?m<O99c(2QNspne>w^}L{Wvw^zsS09sS>4{e|of)F0x3TH<%!kY{){gTknmNeNJK0
zxBO`cF3p;Vx-r>Wwh4nVvnLsIxN5=A3=PX6!A*DG3^}3iHY<)uM}_dfS9HA@Fzx%i
z_3F9GV6^J7(X`bV8F<g@L$X@g)u+xWp84D$(ptRRHWiJwQhK>JGjM&v;8NUtMG6IO
zdkqzRI;U&(*OF7F2?9|*tb2IpS$Dk3)-Imah|B%%wD2Iu3i?0k>wwgj)Ed)id3F0&
zin1$>m}Kv3(MuOo)3P2n>w;I+0qPsAbHa#dlWi^(Fw<omt1?{_O7Q61oC@1BaG@Yr
zCR1qU%d@U-Z(yz+i%|~2@qeDj;i{J?F6L+Aya2u|0hq_zKd3u*lrrySYV*Kcmizov
zhfe%t$dS%SV6ICACFzsKp<4VCnE5i$T6D7ePVyg}2p9OX9EO0#T?+5>(>iX3*>|j8
zdv$esxs8mrJPB(nia7K>7<8dhrTn5ruFLMr#d~OspfR8B%wH9}<7IaFbcbYAG}`ju
zcdei1(s_fQ7FJ~l4zCTNhA&SEfuO5nUBS#uN^;+dIz0)H_iFalTzd8ejc;qJ5|MIc
zmg@^%$H;tFyp7bpg3}9($j8|ReyXFCd~yAo*}+jW%>Z2G(U024k9v05GuiUx8!_#E
z7cw#Kzjo*R?TGTxB+G!2@1!_rqlmN6wO0uFw*_MDJ1b{QBLz6*s7UGLN+swTIMHM#
z>1rIV+&^R_6qOu7y&@oZu(8m_4hG(`thR81B7tp*d8nh>2J`N#$6;%l`C3o^H7~dk
ziMM*x?O7pZuMF;!E3i0ju5eg%SVn>0n`Ic3&|T8-c}l?c&HqQb%hvNzM>SrF>HSrx
z37m!Eqp%;opRO33JOltU^PkU37zbQ=aqDlo4*^%IIJu(m+hJZ?b!;)1F~i{%{3K(u
zZ}q<UYSVo8lu!+>+Hx=~+RhHfrhM(OV=Gm<$xpsG=~LOzUM~keR;3f4-t6L_*k-6=
zxv!-6$yw#?uLb<&z7_IdZI1k}xkJZZgnS$;s5YQ43n!7o?$>%z;GQ=|43z&oh(|zU
zEy03;=b8bRzlIRMYE~mAD*b`H5Gend7p9E+ieQ`4<zB&OEti~k`lGvOPMWN^x;}ZK
zq<uB{xF{u{>y!o$eao`XwQZCCl|B&y%kIkhBh(PG{uN!Yu&GU)MfDW+oY_1K^YVi8
zx)v$8&y$_Rz2UX^+mBJ2N73yz`y%aV%P+m!y(Sux9mhIRV3BLPZLB?IurF!O@1K&V
zdQ~!ugAm38eGW)z=z4Abo}FEA-NoOQ*zAu{C0z@eyi8UO#Iw=t4*is`en+eRhpVXY
z@p+*?@wW=m<Zp$tF(vH!V(Ochh_?4!-e`jAyRe?mMClmmOw->@f?xx<6_VLSP_EaL
zY$s>_n5wJ0>@#Dm<FZDTdJPHIectkyL|UFV;d_!93{X+gF}dLlv`9BzRo@V%mT?T}
z*~;_j_{`BsLeGGO2vKStR=nHiWb$Tw!{K<u9MhuNgt|I5yZCMDil$I9%*E@o?h>l+
z`Ocm3a8zbH>8`R+#P3<vIo+_?O_5mzw9SLNgCFZ_3f-%-$pN5iU$UNaAnjokDoy9Z
ziP8;e^_mWCRhldVV0zfr?~--yd^Km%z5c~IPz&j?cdngcNSl%ol+1Xdnvw<cd7!ee
z78U+H`=q!z^)6^7tk+TxZQQ0-QPJ}cvgf;Tb#+I+Ec!=`Ax)ulw>Vt!5?`Da=20^z
z69fc23_OV7dnFv1KUVCzIN{(0*FY3>ToDjwZu?zqf>1r|avvBgABKnRj^N|G61)aQ
z#$J3OJEy~(#~L0a&huC*nnt%hcB4w)pjmFm%=76Uu^HjYk}4KHcT&2#qUAhb9?hZ)
z9ti81WSG~>p%b@|D&sI3+`MdPDi}r#-k$vDgLnm&B~u52DpiXDXz<zxp*$<I>0jQu
zV|wP&Z;{PPPlS3jfIp*;y3!Bh2OSg_l|KRB2|_c^Q@-x><vQ!mTEJYIXT-Ecw{t$+
zzjGhc+bqu-^UGR6Qv)FPzR_)c7dtIaj2qRaO1&gYp?M$lFgUd*<{Ze*Qjw^!ZEiGo
z?UHbFrcS1APxdntgy3I4LF8pW_kj~(@T0`3otzZhbV@@$$}(7O%AvqT3gybeat&xl
zNJ{@fLoBXRSt*w1#Ls6oP8gZ7wE}ZeZ4PBWZe>evrWXAHuXAhq%ZBnK{K~x55RLi1
zzJM1ZSEBAcY*?NjJT3u+L5Uf*ntpuRJvRPUSzswrW!9@7`tipf^ZxS0w=T(Q!re;1
z%*goMm-P+K)RE(LD3ypjAGaK;mNMj=nKMe1+JS!PC>s3THjeVv6{ZrUMPwJ>{0LkU
zF3Rkiu>+>3hIF#qY>bpntAsMFz<k8l4)3ZRadsG7F@m`j_`?+B`~KD!2&8%;MEnM3
za|aGQF!D7*Fdv`cTg?Hn<pI7YIw$eCa>CBqZb%{Ln)3L@%#Yk?(p_3n55t8CZR&x?
zspZiKs#M9AWF~UxkNRjlc&GAdYJ2+id#Fr-<=W)qF$IuYn=KOm+RPhfyzg5fzln+B
zt3#c)a{8^fms%kL^Wr-E5vVa*X~Y9_651oqmdh5(Bd^+ooLRk(sh&kmt%>bb25z@X
z?BHs1ryHvSf6oFFox9IqZbzy=H3itz(1-n0q)YaOxGteJ`G0aaK7nOTG$X+>=A@qu
zOnMIH`q_s7zZRMayrF(U?g3}P7=NgeSs-5Qcz#exo-baEtSlD{w56f!G8`w}`;?y1
z0Z18+!0_@>PnSWV^hBbxjg(DrMK!@bCM8@67<92Sw|ztir*%ae+L1|CrskWS7UQVQ
zl)1uy38J*t=9Icx-5Gas7R)QeP{o%qoXlBZ(%lwqGL?b^sIMK)e^Jv2#P@v0lvAag
z#<orujKOti*7rQ?bTSFJa)qt5P3D_*)ST{+vK4u-mM7&nZYwuBeKh=CM-y!mUa5c@
zYkxd}OVGWm#EC1NaEeQJCm)?!BNJj?PCNpmWfT5!HOZ=8L}tsx032xm440@0iFB04
zYIbW}6$>fb2f8^&jrnJ%E6>Qjq4aiS!CaKhOs3qYOhQ)D>@q=$|3vOm=1|wb0qC)#
z{v+9Rg&j>VX-4-T()gPFK+<$cT}I?=wH0xCk8GwEi>n=f{c(18`I34fM+hb>eXUX`
z`6s>i+=6LsE&l4QeUf%K8FS-;Ke4P^1Z4Tjsa~r9Qyw~8a|Pzb(x$q>?oL$9YU;M>
z#+6R>G>yuCczWym@Cgmh_;|EWY`}tYS16x<>a?OSCTXSO!eBvYLeRj?tuS8$lQ~d@
zGp{=I;NIz>!{oSK5G%*k&I?nE6V!_Q&K|Z(VP0GeY?J7-uoZfmDQ`JWf#=$^<5AH&
z_MAk25d%qpveQa8canus^KmiMK>;m0QC%8RAJ=a~(1y6$ZVhC<x^lO(ewhi}<V48u
zaLZs$NXGhqgfG9qikg%&3-1)$TmZMhtE~6HoXJw)(R!^~j@RgLBPJr>gA|*(Pd}3g
zjwWw4aC<UZXtDO&E7fQc=rf(EZx7a7E-0|pBro7aignQB=i7HrZ(KA0#bhOFE`(9@
z(Y+<t2VVq{Kv!Ld*<s(~Lc^{;As$aPnActdOVrp-f6+?x-~|`e^&-54!+#-2wkpZ1
z+pDz|u_oYKWb|X|c`^~qR+Z*{uSuvA<hj0==Z}hnHr%RP4qUt;MzWfEaF3{Yk`eN8
zzd};XM<gBQBR|zBvZ@(WJr_!DRC}<u4%VFloTj~p1$S*_jnqMPYG~$gqktqJH*|8w
zGYVH)xiRjmY}h+D;^L1Tyn_U~QO%b79uz{T+<Dc#)|`fIJCI$y)?KLbaC}5cJWK1{
z3viD4Qcr<cZ~v6>>$s0IZ(YC)<yBqf6gXk=R|FwS6O1y-VKsrv<ZT#7i&VPWM}A-^
z%aHpoF+VgrQ2_K>X*6cT4sA6;?8y_b#lq9M2ZhclgI?0NnkL>}0%rC(-?|mkCW^}i
z7x3=lKiN7YvU{iAM}T~N*H=_l+}g|BnfXk^Q`L(7FlSp|>v9glj5Ir_$Y82QF|PiU
z;Abohc}#<+pBx-T-WuQV6LG)vvLyo(?>+b6it!(ZeNflazS8+KwtJ3pOh%@T9%3?X
z7@M<*`7MQhlZf94X;VE0hS$Eg&XkiE%l+pDYwSWa7w~2*oI>PN!QtE8UcQK4T*dw{
zQIxVi<W)<iAW(#BL;TBKv(aC&8e$5a`oSb7Wx#Ux_s8H=o4_Lc={XGNk5S`gfUq6#
zzcF_L0$@g)uUmpgFpd1KlDBBa)zzFx+Kq0jkB&T<_zh+}uL}4WXKycl-*#mS0Hs2A
z)&ooYHPQ2?R3!VT$M30J6nwtX#(zk50_LV3j(1S^?cFQX-bMj^I`;h9f>XFyftVrR
zSX|X|6v6nju1{-jDjCciHKw$sR(%iOUMc&wGOCZOjSlnRw3>Qv!I!c2U18Ru9c>d9
z6}B6qVYknA#h|0-jWT}`p8dqwmd^lnA)-0Tsu^v=eBe{`riwA!@$F@j6UgWaF|koy
zPaKR_g%D$4m}%O31Lr+cpu}E(ve)zMJ+7K1Ab_+l-~4T*;uUbE8drWryOFV6*#*x;
zRpdR_kE@O9U$;P=p0AEs2>%(M`y4C<jM$u65_BIUs05YHFojd4Z`Y33hwoz)gZ7G3
zht^;o<*-Sp!_chf8oK!jD06D@r=1k167%M*-*9h81=iwEAI^<r8HU3UcQ@FG!=Uiu
zen!8x(P0SR&vYl*6nwho0g9Z-rfMEq{zmWv4WV#WBVA%kc4*#%eZvQkiXR`LhCSzQ
zepr7BWT7tKyRA88R^CZDP{NhJTP|W(yP`Ro>bbU2PDMVh+xrBghnFmb-6vVyh%56V
zzgr&(aF81f1vSIfEE@4X8^!&P%e+E<fpW0qF^;IE(AK#l$D#tCcfhcH4uz+|q<Qp_
z!os%y0eA-|wO>B9yl=d-K_-*fF&mAxUfbD=)aKZG!KdqBt}E~&73TcVWXf!=yZf1#
zYU`iV3aCa*iJ?>EfR7L+G(D4(D23DW<0Ti2_B~PR7Wz5~P?DxTv1$1Gw9X`_wo(5T
zwgd%MAzQ^0?=%m+r{8%KrEhe_`ydcL1O)Ps9c{JSd0w7SIJR8RfvcNn=O{cnzopQO
z{oz5C&N^ppH>)5>S>Sb+Cx8IFYRRc@=*Vjs^d!Q~MoF3!_K4{)7Zfo6c=YMuvN9{~
zo38@=tux7z_wWSnqp?p<x%CYz9D^%6>Dv1)cPqmx>Pzj$;&y-%&=;~cbxr$hJ=;yy
zO~2|%VDA3ov@;XBs+B+wJvdB2qU;b|Y(427@R<5A8su($c$o)|dUKU5G*a156i8Ox
zet$1`hj%|TA_rC5`HP}$rtCA02{>6uiuXcevOLgLsxAK2-+>AQ7D?|+^w1EhvwYgK
ze``BT5>_QcC*0d6fmY=!Z$k<;S<`bi)YOYqE&;O{?#fOZ>H&Sbvk&(Q7x2*{lWOV7
zMQ=yPq;B)Y_k(h+^o*jDb{72kk4;gd;IQeNO76!|%SEg9XR<lL5|}3ciQd`^!#)v4
zZX%LhB;vQR2y5!7?=q<Qd2x15w~73Om@(~d7vJTI5C5L@C&DXd$OoSN{@i)ggcp2@
z{YH|S#1oF>P5x&TxXuG_EnK_{)is0s88KRkd9~ckQ`dtuiyZv@P6*~PCQkERFjK)*
zXo%>V?Z99TLv@+Dr75Z-M`X&q(pf<I)w`JG4-?s%&OYLY>$Q0Ck@mp))&Q?fjXQrR
z2&N{=wLU-D)v_V|^aVUrWoxnF!Yi5a;5ql%TF{lsPGpW-MCr^6qOx94Lu$7`LbSS*
zW79>X>3P_p9g)N0G_Lka{}-BC#VK9o<p8XR4JOKSU-mjNz{8-;{C{v#NMKcDgPYjY
zr@_1@LiN*ddIwB1=eh7GWNsF|z72Dk8{2lcS-5vvUd*422|;7tA3q2^W0ihY***Kc
z!UuCq#KCm&>o+B*%=|LyWjCnEum^r_n!Qy@&c2`GcLTrz@7+wyxu2<T#!**A#ExM0
zue~G5Z^vy_3=zUtK;PCo+MoQm=U8(!*ZHQeh9)-^>6@9caJ)Df!M@(p1uj48sAg%+
zh|H^@;tGywQXhN=^v|3d>WRM;)7Rav-2fi=C=Q@I#mA@6KJ(apORt+7=F!9R+wj3v
z^MwFPNJlX^SFGaW%!yOY`9bFrNmWBo*CEZBc4_we@6n9mTq+wTa{1}A(RipI&y=+9
z;`J=nK)jmLW>|M0!1~oAB}7L8y?|%tYvtGt6-?e|5?biZjC!>=n9vB;mj06W&#5Vm
z?5Z`h68wEIXzN1z;umY%f2$qL&L3@nM?*td3?xKO6AreW7UW)6#pCK4wytgbLLw*1
z)-`JdaJAu93451>3ceb_43Bh3R$e2=?jI@R<`{J~jb7NJ<2!TYqA5gQm&qW1H4P3=
zcJ4_Y4YRm-`KlloImu2HG|K#p_qKC$+uYG;3=KiAQ+X#pCfceQtnMpfUjF4CJ|H)(
z{m^~>G*q|CF$7cX0d`8{+qvU?l{?{&ty&g{FqAVqP?m}LD|_AP;=A}K^>2%933mrv
zRv+h9PjT8{dJ{5wd{G8`u-vAhsn{u!mC8bHL#ahJ>$*9t+#)L!=GFW}=c<bt``u{F
zR9P++8D6&(9|jw)o3!aj<+hyZg?T+Ew-5j3eL`F52Vd0O)pmF96q-rs!{AE03dTb$
zQuVO~8vmfEu)ylMhK(0pyS}Ruwx&v*poY`=#*JmkOf@OrzBStVScnop_Lv}m!n<1u
z2MrX7zIhP77Y1r}doDKbak5>NLomMVQm3r9-Ww2g`>eq-&P0KS@mHj!iWPg^STYx(
zG3??A^*^KMy6~4jrJBIi&Oazv_E7N+<1etoRT@w4KZ%kNMg{cO1Vq${N&;;Xh9W|V
z6-sXBE?+SYQwIlKOsUqNH%aIjf*OYe_+9A4$95=ut?dZPm>bR6*5~;N^iN1`&hb;O
zE8X3B&iMr9vwe40_=SV7S%nA(tPBKehaabK&wA$s{>~g!uL{Au0<USLyZZ*;eK|oJ
z=nPN^!4R7J@`IWL`g*hPOpLXsd%(N|E+#f>TzxgQijH0xV;U@Rcn7q}jqm1(9+oIO
zWxbRySqCo#)Q3%^od41^QASn_R^FSQ)@w&w`O_z@8Y*Qx=<ykB;P@4YkH2cV8qu51
z_j>37NCK$tQl$kP`jGca$u6mek4V<eYUI!+C+EFraKh4KkZrdlz58f55$2F1MNXFi
zNzpyuYlTe&)teC)nZOKLxo`8{N_p<LuTGr_{=IuNxDeZ*`(e9re)wnktk;fG4gdW%
z2vA~bkeIXVz*Y86Y<BngU^e1Xo4DrD*2j%SnY};p)7}oB-FaXSqX=Gu{&%ykb$FTI
z3;1FJ_o-NIbcsILUJ82tF2*C7D0Pw5f9hJq`fi2Cwn^zS6PSBAJ7d&m+O`xfCJjtf
zIDZ(yt8E}&49*bil8*Yi3+9w@Rqg@lYh|0W(_UaD@-HE<Y_(PVi<y6DtqrC~ha=+S
z+@A-Q`=Lpnv~Z>V?zKEh?f|`&(f@)k1oHpupu*o>IlI+8bxjCqbKuq*yn$&(;a!@V
zty7S`@7s1tpBzsn13MgMtFJGa_4}EhokL!EX!l(o^W@Xo;2quA+2X5ASkSuZ_#2kq
z2lgnr6qHalG}1mDa$k+TJ)yzrxAoK3NF*6;nw1<fJhMM%Yb15@BPi*Wal78FK6UpY
zn&1_Yqb<IFkD%voa2ot1h%#^RPAaP8|2QEQzR2(MH%KIRrvPj=_|Wi3Db@9s#GyX<
z?$Zw(>6up^+<jI2%JugBr*3Uq|E-6rjsu@MKl)tj0iVUdZ*!!SJq|xP_<3TxwcU{4
zUzaQ~ETMMw&GU<2wl;k`R}3-Dw{2=T>JC?JW)S{|%XSTmCGRdU-&U&F>Q~Aiacnos
zIQY<Io%`uQ+$zk{t_XbSDgHt|^Qh@+>!jBiCGY*N?hNa@@6UzZW?~;dGavqH$1^;~
zg6F>9xaVyP1HRhD{>bllbVEPAU(4CPnQ0NCgsXm1vG!mOX5#zfUC_$Ewxo>w#+xt&
z4p`-0mY(A0{=Wl!6J3AR=@!k7TWmvY04v@3>0#%SmOl+!J^R7W4kOR1(0+89Ki#sB
zEnf{q5;T^)CwJccSJd!JzfODD;c7PcNGAUJ%VGZf3pFEtV;iZ#Ugozs^OcWbk^QQ^
zsHOGQiO0Xn-$gxMC7H^eyxGL}HT-B8mRy!v|D9YhjLccye(&ukAPGK(nZJR(O)_(P
zm@_EgLH?FneV-?j@}rH9*;*aK_uaSPJzO)WR2TBpoCufHpErBmT5TsglWosGS%AZ+
z?r5d@GH3kuFiOEO-ln@U(wzx*4g^eBO_i37>Sn68UVV`N^+x#ciC+ACrox{V@V~JL
z^i(V_xtq=mKPtbdv{9hsC2adQ13A~!*xP^~_EFJc`u284#xI6Z)YeYBujTj2PB@Nn
zn*M7X<d-L`;h`t$i?NO8uXk!(?qt%V@8p;CSiz}XPkurL_L0BEN#p)H>S$6#|3hLB
zQF@@SEqCsb$O+xW;dk_w2fYpx$57AP_0_cN|4kP$zUk^5em!}qk1hBa8@Mi3{;u_d
zv|<YUw9AB>)Q|cQ`kC)zXL(qXefO7#@>ieumG$}s3qAexA-F9gZhN=y-r29fgeOId
zt4tNE`lx<e_*oH8?`cbMELY59>a&`YWxp8pK3B-((mFsd3yG;ppW+lPQ<oZR=6Kl4
zeWGgwC^Rj5zk;s;;#~F!3kp14@H$a?P?@XtpmU5_!8Q+*h^Wb$*zna&y*RRFU1=$D
z|G7Q5%+vg_qYev<ReRt?kO8Ke+D-bddl}Y}#eLS31MAiekps798kfEQX0Z$(tp2<`
zwdQ0Dg=Ijz!oAny4WSN<-}{r-D>)U_W8r?o(UMDBqx)icVSRU}`exwWC($}Ko?H#O
z69INEwjaZn3XcQ!|Jb-~v^;c|Z01k%ZMhEqe>Q<Xp>j2zzCRv@)r(k<q=(lxmAhd3
zSj)4nteS4@b?(`{Y}(}s4=!E*ZA16xu;uP4+sZPF-Tl?k>Jeg1=v%r01p021zF-2Z
zPLNOYxL~d6m(}$3Rj?0GJ9D{2I3XZ(s!XmXOZLC|y~$g>o>r)dp1$kT2d+&5d93}h
zMccw*zP%7|9qjxhs!rs{uYyo$e$A603O_WzqVgUM&|Xvhe`LL7RFvNrHasxW0wMxB
zQVuFQAS#mMFalBn(%mRX_Y6HS2>d81N$KwH1_7nJyQRB^es2Env)23JS&I*Rm>s9@
zv(MhwC8w+{qcB%cd(cvF!`#SVSQ8;zqdqz^^t170rMI}gTlfdlSELOkOIGUhTt2-<
z2RP^s&TxZ2G<EyW!5C)E<5Tr*M^iwWfgtTMb;#`BQuMOg9=X-bA(FM#Y+&7c7KfLm
zY}iky+TEdAs>n*c@Xz|jm-p<aIP+`V0v>RQN;(C3Jk`P*iMgA2E!x;v8ZVX`2=ZF;
z%6HV1S^Z|CXM59Eb*k31-JZm_`L%sRz4Z{}eSK%q^$vdijO@PY<WAuhl&>lGlCR7B
z9QIGgTWqEz0W(;qqIT2073eBrt!2?w1Va!MhfkHRCm0EGR~S`)xpdP*?kRJ(V7CD0
zDIv|_wN);TFS;%zct3r3m4x&ib2^^u+qp~vvym2{o&%8fZpkyd-@pg&sBrQnRnVJx
z`L}meu_IT>EB|E?NU%Uho!0Qy&G<AE8eVEnk-bhRXqA5Y+TZL_yp7amv+>lL)q6WS
zQFxq~>aC~WNv@61XLmix`+1jlK7s!WV6572;sP-~wmiLd*ZWVSSx(0IbP0*~kiHpY
zrpH-(8PT_e&-%rY$bQ<{+WPIyS(I~fH=pBMEcug~#QUQ3O78PwS9|jr3WB`l(c_9S
zf)q4nrG3o;H{Mr&ILKJF=k_*JjA%TvRgL8Ejwj#;lT7oF-@;a$>JzCv%T7r6nc+<A
zY8>2bHH4hwCf*L4r5r|ayY<|IwDvBs+q_KBV`$=Pu&WAmpS=+}O^jbrbHtQg<HVq|
zXM6OGa@}5)dXVB}u!U;yO@pbzhGl`z@)uQ~nN!#pf$m`m+m?VaSwTR-={n?Kk%2%5
z6Vw<d=rwcI6nJjr;BG`2;Xb?DBeGeeMHF-oJ+|vYsi!0q&U8CxsUWRsj=tym2#Pdy
z+|jx6(U$g&vzz_cuAn_;gb@$sNL*nJ7fRQ;A}v_`ZLsO?oCu;^$p{zJUJ@a$*X*UG
zdt{2wY<q22976WG`d@UbSxn)J(>fbb0Htwy7B7C=oKSV6$;|zmIan>&J&8$ca*ys~
z9y^RhtFU@ZA`dSO&N?^ylz7sIgQ;LO)ymbSf_>6=4Fx!MADAvgf3>zdRPD}&UhUeQ
z&cF+LZVruVRrT$qRO)N~1Hbw*4!hZ-`-`PC1dXcV(`n<#S<-c#?B}^^Bf5&dfF1)p
zQiZNq4Ur1G;|^OqOct?6mr;(v4AB`OALty>HAg+aIVD2{W1f>DIXyAQ@2b6~DwrK~
z6)b)-CKZEK=iW?&orJbJ6<AdH_-J3{27fOo0}%R9hwYWOJx2}s<Gc3Rj2G)}bNGF!
z@W6$#)O8bFc!Ih4O#NYt;Pg_d`UrnhRUs6HsPLo@8dE5`qO$*T+3rU`U2uI&@qN`$
z+g17U1fK_ek_Kkx=Dx{+#!@|RMB!~utr1q9=y%pOs8P*t9;<Dh0Nj%Zs|Kg9i~mE9
zc>wui+Y>}9R7-iPZl~?CbLC)hH27?A?Q?{C9G!#P_l#<pI-_xZW9{DoLw6Tc&wN6Y
zfX)c$Y5FEu+(~Wi$fNff9J;vUW<{X8QYK4LtsBP<qo}7YxR8AyTLPHB@(CboC4N0~
zY!{%#KwWqQzPR)TmXgUKC0US-@ayf4edO+{wL-_~CAHluDb~zj^OS<x?H^QmHV8Q)
z9nRKR>ZOL}Su_V=U;vQZKS5$%0BSk8InmINldn(Q^A&blluTnc#Z2FvdkLyBlo6k<
z<}y0?g`J{WG=goM(wEMh>VwtA$-;5tygixP!ag#d%aH*b`GPq?sN@yzDwYCOa0jPJ
zRc4Lb7lD{gKMVHj*A_S%74;>Y{S7fDXD1dBepPYpFUZ(cuL;5s{T6=hS`}}fy$HY-
z#yZqb6y05XcCBShxw{40*g0RjXt>6^6s)nL>2dz#=iN%Sy^}lJi$F2BBN9Qq>oyCj
zI4-=aYkhzc3n$VT2SU_4^zOvITl*gv5ba~brO3X<afZfm<(u~(c1x|Qn>mgryvSf2
zhe_{U!hO_g8)jFuxueOF$ENsjezFMBxzq^i!hL{wVE*C)WJFP$UbV+-FW%S<u38}f
zTt_-)_MYLfJ0D?al&lRS=kAHcq{?1EjoX##Y!jl?{hW2;^@amwgC)Ji47=Ic(){L}
zBl+v$_Zf41?TPe!{4p$oK%dh=T2q)PtEZCbZ0F2wDyuv&eRxNxn?#PAv-#SL^Cm`3
zsW}YNf~fDXxnP^!QTe14Fa5%S)Jr#S1U(Ms3m~B0-Cj6t3cS9kINS<GtJ*`gkIPk7
zvAuZta}M8xV|6#_(5o%Gt5}CO=a?6m8{vW(`G=w#Goc(bE~`ykjYS<FBluiz62H7Y
zVUo=O9C`@(gI!7?@KK+BUyg|@tjp9BOU%#~SSBWPaCdjW+>lfud%8yYq8|wop2m?g
z-PosZ+Tz6-&SrELJ(|mF**!s?b_08?EY2os`?s4}<MYs4BF#QhpSfOY%Eo<F2X|vd
z;$Uwot6i39vBq{ng~C17uEte|sRW@aqEX#VN9FCw=XiOBoBk=UZax;CXD2%O_XB=C
zf;5NDb9xpq@?4J^h&5<5xqrb;HzM#NHu*SqU3yq&W>=mlcoyQsUDA1}lK^63(-ib9
zI^zrXji4dMn6Pqs2QUA+$;9~xb5-9=vp#VKVI{g{*iziqGu<3>s9^#~zUF|nY*m8U
zG$yy)kqw2*m22l92nK!?&iG8;NVYHo@Vc|&02lG9Yk>2&lbTrl`z(@;4nup6lu3Yt
z5J+pVniA%1H8FPk)R@YrRf_)u+Q>(DI@eoAwQnD}h<QJYDakNma4)(@%ZEz$qo3dO
zMSXq|qW5T`@lsr{7sPw&)5IN}=$<HW-En#aotuQV@6+C-NnHY<;$N&*1?sP`^db*o
zx=Yl%7v8$ts#km+zv5c9zZ66O4oAd+&-8>>);|9oY=Y?8b=N^-Ehv6q1+ai?k0F1G
zo=CW_a?yR;+;obXHNX+7>f#rs&63tOvQT{AUF9CC2o8#7|9tbg+<k3fwDR0xXsNSt
zZ<E3U3$nZt0ce<aSNCc!utuQX-2;VgKq3(|dXwgIb-DpAn7K)ONc4IaFTL3cC)?QP
zJKT7{2|73}A`D4w&I@+ld#QASb)ZTeu^%*n>|7b48mGiWOkILF@s9p?sL?}O6Mye1
zx5Upm*~3n|1F3hj=Q(R<5b-2_Cz3a%SX~F_U-*=)IyffOwE;?;nn)+%0KNTccaM&u
zu?krB4DLw~odR|Gc#xCK+U7AM^@pR2vjrQh>BStzsK?#<ZoYNErJxz=6m(4m>b$Z(
z;P&;q3HY90d6bptHj84SdVMet34OiWv5(KHdqxXzQG^rD?>%vE*|yyUKzMJQEjHR8
z3^oAW$N=%m;AN!R{aoIp4$!*07`?vQJs^#8S!$Ik^x8zvMnB&Tsy_~>cgDY%W2DGz
zCDy(eydBEJmR`@@VQ@$P!q^2hW?II#B+6|MbF6<N>bW~YRk*rXa6QY4t>|r>rz|{w
ze%^$cJGyaq(L&x}-!<T#pH{WQsojba9p=Fj@ov-5CU*mutA*3$S>r&|Ar|u`yBvgb
zo(J4xgtUD9-35e|`k!FTDYP#PNh+@F{06@7o<qYh&wQ0+sT{Ttn`6vOLZ|2Jy_4&f
zO(U)M(Klg>u1rKjGi@KUFQuQtSi8kCraJbb36;)5p3HM)4(U!ZkzwCA*oS_#JkvtS
z6kC*Ee*++X3qh{%_}~9n#4qq$f4i|LnlIQu5<yjgvZ>j7PT409j;`T5dQ6JDnPZ>z
z#5}WO1A?MJfR7;1*v-Z5lq~=MNu&nC8<s{f3OD8B=h^}`5gb6VOi~O3mDo#35fvJh
z**@FkF{{bG^0^3;Y$knx`6p4CvAyYBM7~oY^np*ei@rpiC}+<U0ax`K<w3f>*C9Uu
z_4tsntnHWwzHuE!LypG`vH+sWH_^ZfGvt7tg{FW2V-2LArQ2K-l1TVV4h~&Hh+woU
zOcPc=OK8R#sWOI~#JX`awhxBVjONFSSA;sgZ&j-?H3|j*ifm{-MOSnCvP38CBx_|N
zpnZ&!V!>1rvbmG%tAJfF#D2ZZ=Xqehgs$H4Cw@=ZunS{&rf+IM8Vi-a^|-gJc;R7|
zYrmY5Xz0tJ)Nz!FxNqF6mUW|qsqqixY>8XvMwg^D8|zv(@WPrX_kpqIm@1ikm;oJE
zam`2)p#Kg;fGQpO@~6Pp5#m5+5&0M<;#RdO<yf=KnC|_pKt`ZP*!wD4HMc&)N-?<M
z#{5KC#&Jb4Xr#3MzEX`;R3E8t6atnRv#QRa-AGY#bWvxTM<?J@j;#Egoq##XRX@nQ
z9UTHlvBJ{JG_Ri$hu5!^T=coPMCsEh{Pt-&f4i|oNEEIr%Z?Gu98|_DAC2{F1e=z>
z1TfAVW~%Nr8jW=??2#QOY#^syyeF))5CIOJB9cuVirzJ&@$ldb%u5M>{s`hhXwb);
zR}%g!651C7E!lbdN2*J}aC=_y0oDm2Lt~}_W$EC>7q{u*#s5BU8Rm2kqhF71WF=aK
zjaK%0ZUweei~AchtHWC!4|t~jVC}+_Q*O*(#N__++eah_l^01#xY9%CJh;54CVP6I
zlKRtf<6THeyz`8&R;I!rXPR^}vLT(GaS{SSDq~E2CI#!b`@Q|jfyLd?#g~n0P2lw=
z{^0`4cBk|~Wc<sIi!VuHE4<~8)<yq9Lw+5veA+)+muOWb8r8C}xg8fG$cluW6l-UW
zYZcK*L+()kI)a|b=v}_>KeMuIF_-VrkASp?qy}+-^djEDWESgPVJkh(zA$#uc(=in
zUe@oll|5eRu;<&={<eyUY3bgS;sSu?9KrP2LEG$~Ifi$mQ)ymo4$ZcMQQe$VKKb9q
zNeqb>X8)jPf9O4uJB^7Bvqc%!s@=_tqmgRJjlfyd7g5C+9+6~_*x#{$hg-bX1Q@~b
z9yY(a!cCubEMMCDt?E$;jg0j6G6%TgxAg9xbUdXl(hVJLwG%EF<oa$dUf(LwMa(F}
z^?4`Ni)aJ~Em9t&<r#w~;jK)S`!{52!)hA1x1GtnHjgk3dbWkl&sImA_NXGPG8$OL
zwRg(3l+Of#o*{uW?1uzURAeEieCTB}C!)b>$o!ZQGxTHCb=oWBITm9{+@KxAu#|kE
zNar!F%nloP1CKRNq>N4pi~Dj`dW`0yOgSjQx*N~EAzD83rtTvx{;!(Q2FDW9>IPQy
z(d}r}1n@^lD9P+}8QNa7>v<(uLM!TLCXiDt7aToI;dk9{K>dE;d!U?c;%jD!O$Qpc
z*E4Tm14V)PzmjZC^ORBEEmb~>+SB6LZL{Ov#*gJpI={;4)&^)9o%3f=cr&a1Khka8
z6oxr62iMN~IZe_3OW-Gc?0v<Nv`OX-g((mG9j-m17-}2j^ifpw7Lkui-6c#DeUxf<
zo>GK!zZCVU1uq<(Hnsa%5@M2=)I*XsH_E_#-p#M7^4;=aL(FvIrC)fU*wGtT_3Q=F
zd))T}B>i0RLHx#@sM6@l(%mh2<K^%xpW^W1o1_;%^dI}zdxAmdZ-{@212F;as~0U1
znV)<SvwR>MBz>mpUlQt!@kP5T#XKRxSaY8OZJbz{IbJ%lhZ+mV8q-*HX%zU(N!I81
zEq<&08`J;}ia7}i_8r^Kw{@=E#)wTFb*kb-(r+>5$sov|fyw(io~`l;i^fOE%MblO
z)}mbI=-^rB*6PJ907eI;OK#D<(lS%KJcEA7z|m|w=n$XoJnRi6I@^1^>9JLlj5MB(
zZ&4LwY5MNg(z<R!m)F#ny@fBz_PcHIoYfy>tZx`IC}~jNNkkcETCYLxB8#6>P@0+1
zK}v0=QRvJ(cexWa6;=<H-r&EU5};|KNI7RpN{#8@!sVM4sg4JsO%7qzbc!><`qtXV
z-QIm$43Bco0Eqs&V=>qz=cd2*?AMI)zq#<{2#3+SLl)u(0IS{I^sxL`5YRq=7%L%p
zSm_J<(+hPH;g?1OTplLBY3IcL%DOZmVpwO&z_q3A5hRsh-5*Xb#)56xHJN&8#Fw%G
z7D7JyE{}#u09utmsFSs?r`A5`moxmv6+f9paM?W1z{9hVv;lzdOSHe92NxIwhBeB*
zdQzp11KE8TU+HndYM}%qmu)%Q&)LI&%8h;n^<T0F)W1xS?VNU%!A{&~)uznZKryM>
z`S!m7kzWQs<e*l<c<RwXfXXwwGNHXSe`IhG4bczV9^ay0Yr&FN{^>#3m4+N-59g0z
zzO`00Ei;DCw;MS*Bpw3uQqz74C#@C!-coQzy=^3*tuG=qZH;15>0z$@ZQuSkf&O|V
z2r7}fK~jw+rNzrum1rjD0*Mg2Z+eNS<me*lkC2DsiK>>x`_0Dd4#lsr2c#@Q`pV`%
z=$$`Kx-{g>09#*uO-SR9e!OM0M(Swu6K<=~#@H9gR4Y3lNuN3Sv8K+3I})O$g1EnB
zAHQcdkS1NsA{Fa(Ttqh27lvTLr4osEflQ3sA)$aAKc-4^I%UX%H)SO<Sq>Au_Qrd>
z1s`DN*gALye8O3@Zy=+TnqR=~0t*z^s%c;{Z@OQn^fnS2+y)?k7S%3{p5+E4El<3&
z#6JH$tFA@qovdmSAIvQMvnsU3Dh4Fg_pl9QOUFV8WI)5=&Buo%H^rjl`V)8DhTN{e
z_}2f)(6qNS?|$(X(kUAKz&BE5)6JMpB#<J^D&{Ti-IpTm4^|i6E`8$?4Oi1nH8kIU
z^Jy{jgSJc{w6ospQ(J%SRax^l){!IGMs<}+szoj)E5vHbvssi(&B2|1`()Mei!JnZ
zzmh)itzYR<nBD|5ni5haefC{Xz-JtF9Lr$dPyP6Fg%os(hiLNoJqrjled<}f@nCSS
z!SXuaa_hq~yo=IL2SbPdD9;}f>yeT$oojC+NcfzeJQepw=Qe;-3hhv6P`Gs;Hb9r;
z;>R=da`puLQ5T9+T)}iDt<68xXZETs|CQi~XiDS~N2mW1V)4?p!qi5ztERD>4{>B<
z&_(8R_Akza%y|S&C#^zvR_SQD2o%ITp0W^&HCEA*ufO@me+E$_?-KvO?6&j=d&$vZ
zLM!ug$HjZD<AtP~;Iu~bBSCO%FYhz{a0f&H6XOfmNv?<O$ERbvel6b791P!c1|F4U
zBt&$a^Zsh9?uGFa{RI6Y`kIRI&^Jd<jhjT9Q6lkrpKj5;-Ulbo+pev=xww!)7w1ug
zydr7BFg-p(1e?#c;=t`Nf$S@+Z4zXTnequ;0te!v&ugHv&VyZvBk^o7;)OgT7kmas
zZYa)enOZo{mE}apWR@3zxqVFm2)arISb~xCxBv=c7?b%RaOK>h?8l)~gn4*o4^T+b
z)OFsZwIRm<vbxsaQe`Iho(ZJ9AsGB4?ybqnhkSjXuL?ZzT!VMte|ZD%g>mSZPxS6Z
ze3r4KBlU)A6L@M_oT8HEdwBy^JL}T44fmPYuPV!DDWygj+Wa?#FaC2n=k+C<xJM5^
zJ%to}W9UTyh4yMO1U@>?By_O7i!}bRK_xz6v}5s@XdvbZP-4vAY9d+R#2}nJ))dF_
zUZ*MLmAL#VE&P#^vEKkK9itwX*IaWF^WJ&G$NAgWCo0Gp;bccYV<2a9_eiVSAw}6I
zs;|wvdj4K9$X(JmSB1arPvv|GBTGjK=ULo>8``FLsh_q7aY&GWcYZ2#%7`t&PeJr{
z8JAH3lJAmi+(SrqnoXqLkReltSycg)$SmYpjzYp&kX?%4<3`<}Ch%t3A3uf<c%hI>
ztdYHKoiUE!dUl0uu!ypkRb03CmshK=qAqh1#WO$PC@tL4YY<Fgk}>{%hmo%<x0lBl
zvs0H;MOfL6qH$U#5f9x3=pEPzLen(o9AS9zd#T}I%`;kPGi(QCnW)pB#s9_h{5~vk
zPU-gX>HcG=U5{s7s-b@5eK+{q6pVH->t|F^ZJNZ;OcEW(nr*iy08=xVNHJ_94&VzE
zo%@c}dAvCQelhnINA^O*W1c;ubnTl@-)}6)$SP*?%2Dtnu-r$}39cmeozhagtQ7Aw
zp=8X$rb(>Hi2e>{SM706@?!GN@3EqJmQ-n0u~+#J$#8b{%65VxTs!~4-H}JUKII)W
zBRk)Zm<V*?X6oHy&^DiFBCAWjrZohTk5C2o=APFi4kyClrCGfAoV1qST(ImDiEm^#
zif)XQ$u+5}Yx=Gpm`Dj|9l#Rymk)jS3x>ea7aU4U-xsF@&5y=OgXK^Bn#+lm=xIpm
ze_Nw9xqK4}i#GSiTny#NpDULd8qeN8cza0@@v%wWVKOnlFo<>T$@8{g<$#>>Moxp*
zRD7BYU)ej1-jJh5`hAJENsvQN4ueQ5J}!JsZkv4PBSzGwGY*~z*NgTrj!Og+gSr7S
zvBMbZdr<Pmg@KTT9(pEssEE)pLHW!P-WKc>gcf|4I_Bb8h7zye7#8~9RS)14YZ8vP
z!L9rzFW%eIQ}r!68LJh_u;)Alk*C}#x|kG9zK6by6Tuq3i6&I7i<cuBt6^<PwK68M
z;S-_5G#3nfU20#Jw16`O1K?0n3A%@5LGrY7ZvbLUe`|)y-bv*{GOX^dwG!=f2CF81
zSHJz{U6Up;z7sM>Im+Eg9!d8`>>v^^?BlkD3I!HJPiH>F+Qgu#CpsV?=B@FS3;ceX
zBcn_l0{svt<4wJ_GjP~r+{ZU`gtx8nwEbty35@cfe#^TB>m`!9>vs*Llox&;Horwj
z1GvQg_MZ*IpC9T6X^N=XaqCcc3+&?M(W69IG<o5SO}38lu7cX^95*VdMDi`Wj^r;0
z<?*-H*g;MNb(n!PH8;Q0^@qw6xiQfLb;9|jzp9w#ndE+-*2Ob_c^jj`_u{iprow*-
zPkh73<WTg@6h1rFl<Y6&h-n`XnctDY=Ya~d_-HyeIm*u4s@XFV?r?dysJ4X_;{y=P
zaGsMG_lP(?I9D@fqM4{w?@_C!6p?VMm30h{e6ngQdUizwhraUVLP1GKZ|Enii9#qB
zM(gxxdoqbG%qHdcPr{lP=&AxpvG42iTYQUfn9?^QbV8%PCp_WReq&Yb@2hgsWBYtW
z%%+pxgGLL7tl-`h^<HY{|BGb;G-NIB1j8$1$>%n#07|78NxpI55xRRR>6~YPS=19?
z{b6ViE~`3=B4QM)IJ3^7CeS%+zrTo{^6BC=2I#ez*<HoTw&<7gC*~Rd_P9<<pom^?
z^oj;Dx9-vYWy7n*<*<HSceRd{bp~zV)7k6UgM&de6qFU>0r>ZDpH2ef_ZbNn=!#rq
zmkOg7ez!V`9ykWLlX{7Te6bF*h!u5q|3lJ<?c^i0<L{4To^<pj{MpAU2AllTk|I!Q
ztp|FzV2vZJ@U=lAC#oN6F@UZ?I|GdSp`$(RR86)@P#jsvJbPo<Kd=oUoh$yrE0?>J
zoSa3qGerL%vo}CqHn`kwn1e~51FEjkkExyvoHh~nYp3#YfI}aNY0i9{&mE@`Ix4js
zW<q)0`SJ`W+E~Tl`;Ic`!%Up0Nl(z5coV&9x9wt1o{NHMWW?fK%Z4Q@197Z7Sz|Cb
zj7g3jc{1!O(kKhZk#R!93bAS)UvehWXoxhPwxql&wfXCdL?Gp&6P<pqwsbcFficqW
zh5B?NCZAo%sUa?6nrfmn;w^tD%gg=<Gt$!8FM@s`)(Au1xL-B4u7Oif4JN}MbOzn1
zkiJnT$<l`e!oBtVXCM8RCHded;)2}KqJ=p;#BVyVf%Shuop@>dyLuQBb;h@Hz=8m1
z&i?WzJkOPnw5|bIfLCLiE%K9F{`~&ES-(t%PlM6H5ykVb&XlW)`E#=L7`OQc;nNQJ
zh9#N=V!b?NST%W>NVEjQlgC<x!X7)d#K;q_P4WeDPkzzws(C{pPiqO=YF85T&N(T<
zd4kZc67LSJoI<g$QrqeFQl35#%tCJ~>5;Ry+|lHDY#dDMN_*$4c3*w#{2Fnym9Y{H
z1YIf(o)CUuu}k4ic}TsxL0Yu#Bjh#_2Pe&7a!26)D(U$F53&@$SB3MbLzj#O@F${O
z>evIQ@C)@Q>x6upUpq09HhUAaT})6d-Vtn!Bhr5WrFQB}od;U}2!iZ=%ps93^JPR@
zznGT3`(2Zmb}1+5<i2%wcY`T*<U<iM<^4?68V)I^Jmf+A!h<S_PU9WGya$^|;P6&_
zL0Eaph=QxFeI5wxSj_O-wqJfo5V8e}a&3R7(?ll%VX5CTeX9gLVYJS&xev~5RCXF(
zHk+n<gvC(Kp2Sr5`JOiY5K7wowrui8XrFfQ4_-alk474luO=}ZSkx>OKDw>F;+{+0
zqd$fg1|r)RF<2K)ED@a%g=69$A;|^<efhC={#H4nlUX?F4?1==^yQ~R5@1J;y%foE
z6>JPj9$y$Jv+>&Fch@)SMxcOWiIiu1mepHKL^GB7?Bo0`X#l{bHa7Lsc5TOQ!-(<d
z3OHr$BmxOEdAZ=!)EO>|dcL1d6Ig}M3){f~710(`aY!mjo(S|NnNRdzfG#suY@R!L
zlhT_iXL65)C@hJ5*NibM5x&jI+#DxbYO{BiiHAPXzkf=4lJfLPp_eh0Q_R_$XmIYl
zcrFe#FaSUC76$zgt(7KJ)TU1=1f4Uv%k#AlE&0C9ZO~)*`^!BAe;y+K%V7zq(v;99
zxag%~(^>lR#;*unA9_q>VQEZo@S~!FB3hfWtm)ITL}LCqBT=EpgJ3F?imZRBsZ*Mj
zcxV^`#!6*zKeto^dV3~6eoV|-^xwgD@$SQKMJnHXgSqAIxlAwP6p}X0OvJlK14(%%
zZSJ!YX~<ghQr7VK$v;#cUyFaQsRw@1R4WTQNj6Xyo8k$znr9F;{;Y%JfPVDSooAuS
zYV#XQe3;W%k4J2MNyis}TgvdFUYTuvN<-GzPgGV+wPm~OYQQ%Ro+`r{s$o_sy>wax
zx4;sFs;w>fDdgoIN}@i&bvW7R&#8PsX{E&$^&%3Bs1I)wL{^pwBt2@~#MuU7&G`0*
zMH^e~0lYVomVB-TB91{m)C<f&F(bm0Z&Rw9=Le6Mk0uw^OvL4zL4ko_5~bx&eC{Nm
z+4PU^S}wfJB$~9Dp-M4lZ1eX!8TB?1+H|zO5aT;j>G;x8Fg+s4Nyo@!@`rD}c2)%Y
zqua22aJ~vT6jEy$TF_fAvWbI4F+j%JJxE#SNUOBBpiNxfpx%>U(5$V1ZWE7}?29-)
z?Ny?O&rslt1;qnL?LDuswD&IGjEUadO>G)U5elM9-Ht7j@oC~JGa~wRPjCLhfG_y%
zXjm3{>ItiV{X7TOOm&{z%I`M{*c84|`ph-G2bXj9vW{HI9q+9PB;{TrS)5t@lSjMf
z_jn%(ofdh>103KxRHP}~r8X@~GT4Rw+vjWs2=bpwz}1~>zoq0+2RO7P0opXeWU*xv
z^Jd+ADfLHLf;qxER~8TTWuBj+!sHR&<6bzzk)gtv(s%5b-BWJ<Y&XsgyQINFJg`jU
zOWVB$_VrWo)8ncz3Ncbj*Kr~9JDp;1d*trhPi|tpf4aBQ#Yru4Q7KO(@(^r{z#RI9
z=|1H6V3x_c;T@W4c^Qllfdd4AbfDg~g{L?qkh0La#+OJ5odafe6IaY>@I7-`N+97n
zTpUXjRc6D;AbwbgXgaU=upV^tjqGXd!kP$jmdT36k~k7p^ej*UD1u<kZ+tLL9FI@D
z+at4q|I7BasOjZoZ)l6U3VE*dx)wOZntmU&P3aO1-1n`-S)U(tA8Nea{xh-*XU*ET
zn*;F^X`14tr!VZ)tJbY674ZUJgc9-)<~h!%vb7R6#T8?qYbX;*V{y?MAClTVfm+S;
zo4}>C`C<~cyBxjW5uK_L_S`dxNoNz}f;S%T>OJtNU=}YA48vzhEi^YF6tL6zJ+Qa*
z+R+9{>k8gHOXBitV*jDyTX_!8`ZMc1UqW#0_j_5A!soTl9#a<{`jz+W+K?Wk|DF3)
zsV#yIG^m{-A>DfM&FZCaGH(To@SYM=eykr<1QP2jN5p&hF`Zpn%&RC?#8bhi{(z+k
zAjNZp17i;YCEi?A0soYHP*DqEfq(GWQ1i`eoN|)RbVRJl8k8aI3`x^)8UpVu{?WNF
z)%JlU<m1C0Zc!gyR$hsfv1>>M2gN@J<nY<t0<z8GiIhmK)udU!kqfUGoVcn>82SF%
z5*czib%d62&BwS94rHVB_Z%fNlzN4N&E)kX<kXyV?r6oA6agy0uo~8Qm{Cw<)F(6G
z4Wl^L{J%6UiwAyY8~c-k>!hlRA+F!y?TG9aX|~sF#kH9l3iZn01>T&syu5Yb4y-;e
zuwVY`%POM|_6Kdr#yc`)8#V7etUIKVDewJFSK>&n5iKiA-d~)ts2_cu$tYlQK`WBx
zD*fm7VnqNee}vL9Qj!S*h~1!nvQZz0K8+tcMyS15EuW@!J&BMmg|}?p86_B}@_#Or
zU>0IGGh|62ohJKiuxfqCmQ)YWK?w7nlMSk^A3>7+w;1dbK-fqBvdTKQWGQ}?gCdVw
z1>+%Bi-B%DTI!<OQU5BC8wO(w9qkg?3(Y1{BD?JXB3S*A1_!0AnOL#e*QF<n`eyzu
zdNK3fjzilYaIPzdJFlOY{n|-m)(QCDeE-jS4*W+<II?|a=6{?w#4x$xM|wpkd7m^F
z8@@U}`@voRcuo0oM=jT?d=dyyNB(&IW>);=$4*UX_zCW~`aO4f=nh(Q-&75-OaiNR
zlztbYlS@&HgqFY2#_RkJmwn^oRs;^&+_840r*V(jgA7cQJDu-ZoYWTL=nS4C#0S{*
zrv{iO<_t6TyvmRS-7^0b3H_WdOGe!n1XPm3y!K-php5wE{ar6;Ef&vuDf-)y%~RK^
zw*<~Qqa)<jvU{0uSNDefg%hC;EsX=ZX+FsS^w`3%Vx#>qIrVp6a~C>4VWdrpZXoKL
zreR4g$?fzcV>A41JLW$+TKKJkqc3=ws9z+++4~=%;?%0{Y46~_L(ku}H%r8HPiG;|
zXB4X+pgaxCXGR(9!zvA|6dW7I9Bv2uF3c+%0Uz2L(HWX}#b9b`PSKx}d^Z|0&16=2
zZBN5w!CKia%}73XgR$oGFhoR24M+YuMKthJ{}{>rlRqn}eyaZlP(#k9X6VCPvQGDP
zu=<qc5R6u40l%-4?QPtGUCc7=<`dNQbDWTwg!vWdM{ls}5A`i}sju^MN3dU)%nzJu
z22(HsN+{UOd`MB9vWZiR4ZG;b{n0w=J(U{QmeRH$vzmn_v5iC4Yp5l7v!?sn7WCxH
z(>q>_gu8pB-e6{s$K#jPDz)1o#b1Q;HAB7$P`)xNVSS9G-OugPG|6p~3=3}p3{bLt
zQDA}tvr;9-StqfgUONHYbs^lu3@*CkiqDRBM7L)*Gv-?r#NeQcIQ%p)X2J2r)zngZ
z(85Ef$;`px`Md5+I#A7xWF>00ztI*iyNL3azQYN%=cOY+6J79=Jb9{3v{b-X<8tdj
zXTYfD(SjL$Rq_8w-eC2!{3b9}@^j?~ZC)E)qrvs38H+sG2u9J`j!tQw^8Slovad`U
z;c7H&bYB<Cb8K&)!>HK4%x{iXmCFX(o(T6E<#sl>2EX;L4U3^f#2e8)7>*sj*+b5p
z=4mZOh0n%gj5mI^PKM|bJ|&ZM(JKhs+%M5|tpv!nSdQXb%%0x1|2~_97A@!2v0B8)
z*Y|@51xD=kG9K3+hMonNl)-U@!7~b5l?BSi-i46;lEwI*^W4`ZOKwq_Raq63fHXBA
z&8y)?hGSWssST=z!0Ml83!uH#32Aslc(!4dLSHAVT~Wo<E}1&p^$kV})_}|dm{$>|
z5t><S<b$!DscLYyf~AdcsmWhg(R_`%?Dadn+;k-^ZRk2JaU@b18OG$sD(n7O@zOy!
z85WfS@-%?_l*_YVO|9CBgW4Gs!6^Y`Ym{wIW`uh8gvME>`Kln!-K=Kv!b;G{BBS7f
zvgQb#+cUIW#PWMIVO6_<ZOORO?%;N{(89c}-9H&@Iuw-EJL|a2z%NC|Vy7E;c2MOP
z8dlG)^R((W<MNl@(uP@<Pb$a(5_D{aDQfmJ=(t>W*@`ol92Z_?C$`D;9~Bz)$_@sb
zyvmN{!Rbz{lRFVyr79~Z6+q-6%#)U4sw<~P>OCs5(cxbJWrgd?)XK?JnpDNCZ!yMg
z&V<{2>vOPLVXuZ#{;OE~3`s!h5ey(2%N<+Qu8a$KFuN&G?K)#wTEKRg?>*jNVW{~o
zt#aFbL<d!JQE&17R^71GWP1o82L$+wHY>-r-9~(RcTK*!ZU0>1W*v{TcPtM)UXJ<@
zaX6y;N)A)oJK7b9E3BQ;WJ?^|*w>K(Bp(Bk_SN>ej0b1Vc~*tWix>F~=8;nyxaX7G
zldAAdq%MSG(_(oOz8q_+UOTf>sj1Ebh|%9V+K7%9m|dxbO-M~{C+PCuub8RWsmQD6
zQNN7Hnq1bY?<%<+cm}}2?7ypYoli5lvB%C=sP`5lH60emJS$o=M*FVrR^_&_;{m+u
zTA{at!wB=Vo;ap^zk+c~?^`*pDgUrp8nv3Vp?EyLp|t~}qllMfGn(P7e-=NkoOMu*
zi0v#<R|>q91mUUv-@F13rvJ-e2JNa5wtFsYvj*T;Nj&LLf6tf$3-?XE7vv>sg02Zx
zektyoMqR?3F*L@1FK*4nMAFeOy5JaI`NJb_e-n_o?I3)pz1Xs)A?L4lOzMlHzkoQG
z*B6fBY<&khD{~BUgZi~n<i}+ml-knN$Ctq4n9mhu+E#OWuRvKEN|YJ(&+gVYFx1H>
z<Y&m)_Ad$61Yu5>2*%QENrb4(*Kc_~Gt3Q6tG_x{#bW)_p4ur={x@Dd)mHGBm$6)a
z7l?YP|KgtZOqbt1O4ES?n(jdD<+MC=y)@LMn0GX)dx^EVpRWGuLma5D8uFb2uODet
z)%X4>II;IS9Zso4NJxbdtw^N>$ufzB|BnZa0P0fL&i&gVy#2L-)1!`mwuVte;~0h4
zPgsI2p3wSM*~K7RP_MQqvlH%^eDyoZWKEFx_b57zhD3zM_V2NnqRJHr@PZI(FK$4?
zuf7`A?j5*38Z2GePpA8?$xEg_i5rXgoOiG?u@-L>HBYOqQOq^%1V_KALGpmqq}wvj
zy+Cj9JsYb(aC4@-IA{Kjk9{LZ0_(@aQWQZ!Q1*}FYq3;%S=*>cS@zdn%Ce`5Twgz~
z4+30SAzJ*w*`)vD2P1+Sv};Bd)H7ey=ToK~++Y6MMLd~yAbNs4OOFtkt*Oe<J;lq(
zUU{8Vv|)sZc05M`>}1SU(udE5h;<|*IEh=@OZ%RMoHYS0A%?bj4N^t{J$Tr6ta#YO
zFUxuLX38C9jn@i)3It1Q_5X!ftW-f700!{&F$|GHDL@E8fuYEZHhKMuNqYGdhAig=
z<`Z+Y)A9|s^0S27DNh3Jo<Mn4o4xWLoUTM9NO4{`>jPr~5TD~nh&<hIrj8Di0~*-Z
zn^hc`TzkPA|DJ-aiH|R-t2Xy877Z-6+M`~e5t&H+o&16jX*<OaEqS$y9m^#~=g5_E
zMDI7i0x1+3!I`>Z>@PH3`Bb<3$$|KXf#Cz!YQ??}_O#HsT>mQDe>&yskQXiSg5dl+
z$frd2`0nPtkX~c5+%<O+5*!4<@ib_bYJ`RPJ-`3Ko9gQr@EPi~yP`;IxmH7SMvEkG
zj~M=*J<Msyk-qu3n}WgR7`}@G43n|kD@~)Je7>3hbSpB%H;s<(9AJcdNzixFKpT_b
zWT|?*y@KLHbyAiWOu;RkK~T^*jO(xsYf0zEXzYOJ_?SuZx*YM#I#Q<UoI#o^(tRlV
z!{Yi4+fIgEA0iyEa2M)Cpc4`Dl089x^_MKrdx%4K)7lbD`DV7mzn4*xF5}ijU91EQ
zE`h$O^Lv&z`$sw7^>Y7+Nu!&C@zT(Us3Xj|Xz7q*hh6JMBk?dMLcu>xlztdUnYq*K
z<|7DLAcrDTx$kBIRD0%oRUQ&j5n)$U>({>F7`VL6{~8oBpap$N(ChTiPI32{&GH7%
zP#!G7Y1M#w?{gV4+e`LYg5$+&0M<K1>$&WQwGHGj3$ee@n_sutKNQe%9}%Z0VBOjE
zeONnpx`7!X4%cO^2<Et#QnybnztuV_RfE-fX?ElPmWHzQ^tjnFXJJsDvd^hQxXIGv
z(s4qW3DT>HTX4W2ppO!YtPY<{fB?3xzr0XJoS`U&I&Rpu2*dkQtK7;%n*=~7q}ErK
zzh#5D_o+b+c1Qv6Xi^5PwR}{OwG!ClY-x8Mr~~*4dQ9@~lKG+gwW_;xoQ+9yxL{*?
zw?lMt>Nrxam`k!rY_~%7f%O|K`A+DJ*9*cp7|H7Ra6p3)#eeiwKPl#}4RQGEA))`4
zjMC@Y5S?)^K<+Py=YGI0z8-hJ%|uil6|bwIfw6iH4B}yj5#abe!14a~f7T2{nX@~u
zNiu=vgr5Ylw9VYK9PJ$l6u5O6Y>2E<5eOe;d3;)~S06)DWUdBFH#BD-!nM!QeWr$;
z%>^in|9$;Hk*#IdA6gYCY^|guj&9ykD_&_N7<H7rfbUGCjfWoW$>1$k1tDG5#TDs0
zomLZ%)Ztgzs~5@%5ud)*)~tSZO`yy?d!$<AM+FO8L3~!cq9`5rce-8v_o2wYRI+hv
zEdVE#X9CCUkH(LMldB?|I}NRheVwnk5m)2d({u!iK&!5a?!8>)Bnu8AhyAjvnMyuN
ziA`M32DXhTV?Yr#6xp3g_Uqe#JT1k#(sbhhGW=vCL-DX>H@J|I?vob1J*{}f7D3ct
z_UgmS|7AcuRDc@LG1+lK6}xYQC&T(q@J6DD$L5t2@RMqfFh?Q{UbhZDfFc_P%niwr
z3czWy6qBH$d5(<Q`M5Ue9$csx>Ty<m=l9DGyGC=s=d(bh{-8F|7K8XQ%QcgW0hS*R
zE-2Z2oQgFCmnD3b^-bN2<9;}!-XtU3^h{8ve(cGAmt~ngW8^onRN@OiK}STQj5-Ap
z;Cs~OpR6}0;gL0Lt@39gSk@<a%d9>c_d(&UggT)Us9vX~S?F);7{t^+v7owrx!Sc!
z+0|grLO(*jDUJ}6)kFc+`P&Ez4HVgqdQ_$|csp)4DS1T<f~JwHSD>8>8q6>I!Mnaw
z>Rq|3u)H(aB|NbYu9rJWW94HEI|GUqoVu1;+jNt~73L<w&($ypfGOx4mf$}4>cry6
z0&!#7z=b@|J2%1tR%n5Kr&}7@?+0)qDB$ZWFIO5%U#?CKaNS5{Cb*k0;^iR%WIv2J
zwY5UrzoZ~A@2*(pQrB<5>o>%7>yQgRWa36?0urijjK&Ez<ZcDX-cC3=D01vd&T7&#
z8u@7PC6P1gC{cQU794)KJ{45I4-lCUah1QiCIJ$+{>(x2RTpRzkD6+MqA|RD9G!z6
zqjrCelcZ+MPMa<bX>bG9`w%Y;i7Ue(XFR$jeROj&BUh(70V@xo$QIrtSEpg$H2M|y
zkA+42Qns_2+UF;BtsmEK7%u^Q(gR*GT{yFD`8kov(Gka-;7Wc_C4$g;Q-fN{?m7>4
zPA7{vy!f7MO>UK}bTEAoUYRMJ1ZaK)MRpx>@$#;%Dt!i&AE$8h@~*~GnXksf!qXf1
z)?inB@bKE-Jm<rC4e?ajlA0%BsZSo%&CTboeFi2p@OMZ@+R#HSi>SmspK1^IBnT*l
zK#~3FenC@@U%T4Q!dBP(g~jW!4rWH$)c}fkBL8nwUs`QE%n3)#R7HcAW`dZH;?=#E
zGEOIJey-q+3!rO6fB`9j%%Ks7XPbv}Y3G_h6>gZbh{g_K40yTmsKo7C*B?WX3wZ|b
zd<27qKenpz9U&8Ci7TA?frHgO=cEowCz}W^jLB>y8jL$UTQ<v_vdI(&iU1Z}p%-Mg
zOZLOItM9#g4On*!SvtSjUZ;D?d)@CQRvXBn!B@8<OAkfPhg7XFnsXlMzFcH~>Ik3p
z*-%)8-epE6?yHW+ZejLQv#q2AR}htlNN1-T;)>~xeul;evJF1E$x1f{Wb>j}cQ*n&
zV3)aMa3gJKf>+N|Zs##;tXcx~Y_kGeGzjGXJ^>h@$OB%g*DQ(*Q$t40fF&e#wyBjS
zUjB#9d^hZM0;YETr084`=oe%hQIq{-G4DD&(Mn{(oTKk+VbT-X6S2$-=+M>J!u@|u
zbb_2g>G?1G28Js$vD^&+NG9epTEykok@)QjV1y!v{A2ZSr>p0d-+YTg*Td%~3ya5A
z+=v^RR*s;FlLN!Z1lchDrECnlT0kGT++y3oNLy~hX{Guqkb^8U{3Mux<D4wxBI40!
zH{ZGgS74<jF==mOf*aNV^&q_erveyO$&|0DaB^?iS=FkjVKhNR{h@i>Kzq$hZMDL$
zJ8R5qbhm!t!)lxz2u2fR!~N@XiybIB?3!~<;iu2*F0?=YS$2U`q}P6qsvq(Tzx^>7
zR)0KT&DUHNkbI)?{t1FVp;bX^2p+krU=S($Q-N@p%j4+nzsVGV=(G`)R({${=BpoQ
z!ZBww^d2C62Uer;Rze_aeV;pAAuec@!24MS;sC1jUC7DBOVU|LMRA<3Lfi9IuR`*Q
zK+GT$5|AN)RqLdn)psdvPy7E!uf4T0+|t5C6}bp2T|Rgdgl$-Ofupg61v~3}c%I8I
z5T?)s$PmIZ<eY~U-i2oiWQwTK#r!g!{J7;F*_=yRSsP$9x0r<%&bo&gd2Ha!_Hx}c
zW~i!GXdVzFf|Y)EkSOOU*~Hb`cg1z)_c=M3Sj^1EtE`#jhNH<j6#jNancB)!1a$$w
zCWciAbt?Y3TcPzqti<nYqHG32ls*5eNsoSK<(%HT61PI0gLV3PSmfGxHsfTUhN6kR
zOrVAQ?X8RiR>MJ2rz18K#b6R1P+UW``DL`GP}_MAxs5|Cz5pE^vN!0KkC~m?9%VxX
zN+w>7+&wanr|D04XQr;M1}Gqf1&FqoYjTXwyzHorya$UcbzzH|aEU41*=T7C&Difj
zyIC)~QY7B6NjC1yTY?_8I}*-w`UC;_LsYsVnylOFc8z}TY2Y6|lutg0`Zif-!zw#~
z;${O>12L+QQLD+a0JEsf9%Q1#!I09dZ7RnVsKUhsD8UvHWD=aZS=z<nogs)8>{Vi9
zEhII*EG249XGNG*{$!IJ;UB%dA>V~nGd&0rZ(|FFMN;MddK=>xzInVb>bz1*k5@zv
z-m!`%*VDh*!@H{a+0S<**d-gWO}ntNLsQ@^Qn9YHaeFl<XH)(3uQd(XUFlM3V^T1h
znxt*<poY+iZFLzXQ=cv*a-L`wnLcF8!FhO&tXEd8?Ap<ct2cmI!EJ9#q$t?X4#~rw
zv0-;*B1Ts8^9mIec*U3fx{*M<&Ls~IeWRND52z0VRZ)P@n|mPZ=9=#<<uN(cywJX;
zT&om~qgmBFDT%MWRV87Vv?5r~`6;`C1fZ7^R&)RNbIHV~wXR_<PWF;LjT05M7Yd}T
zNfcf4QUo4do1kOqrJ@i%S{bIvhB5E4GKR)$B0W4TM%Qce0<ZFBm6CLiY<C;UNC^Tb
z(J9m)U#De<LoZ5$@EPUuE!Q2?EoB=mHjkfGTRLwlR{t`%otpR93`-^|nEnoSZt9Aw
zrzy?Vj>hEW?<ko5mtIc!bKP7xndj}g?tMeduUR+ce7oF|)d=2f!`o>}1^XVswNTr3
zuro3dId*D9p$4QWvQ66}B_X>m?v*Xs9L}S<xLnozje{=vdcV~J*<THX)cY5rJ_=Gw
z#|O8Y@qJipSr_?*c3tdLnUs8edfCQIXT6E}QS3<Wmb-&whsKE+TGXad!!#`}zm|j<
zke~*_4z&B46R`R&uJcvpPi8rF8ZD|dlFRW<IX}^srfCVe5j*j<04AjCKPP_E*r<?k
zKne&w<+D-i2j@#CM45ITE9GZ&H!P@QJ4sKk5X2HuOA`p#)J+OHao9!Fz~y;t?DSNX
zUwssJ#~VPF2G&~cH~im8wd)6^-9nn>*_U~?SGx_b;$=(!Xj?WJ@^85Lm)GkQ)K_wZ
zl=LxHqF-`s_oVH_ok9fxY1-Q`N&G7-)d<+J&Pri!->cb?D_zU=y3HDUE85b^*Ybvz
zXD$L%773#|it1xxTE|as#ejHITV!HTtx8>3b=fHZ%l!J&5<21lh>$JEMirDBnOx*5
zZD0)4cO44iwHuVe01+VG^peP_rfWIYgnh22YjrL?iBWr3MCPdz&!Cg8%F=<X;SlGD
zv;V)#2F2=J6WUr)JwWOan?V|{R7C|4p^^&L7^4!<nT_I!bZ-4IJ^OPz-JyKO;<#XD
zvKmw1+;hJ12?R(0k*4fC3+)E9y=ho13X|=8JX~PWUH{YGHD*btkyYb!b@`uTM8ePR
z-TQ|HHGR^zH##83R6N;zB~t39nsJzxUZXV@un<>rb~UR#;+{{MzKcGu>($u(WU}uz
z*{_s$R6TYa{|pfOUyP}IY9|JBq2(4ub9BWT<^r8QRj>bp<{i{L)(ozS`WJEHHtT!%
zb0nSRwmCqkiG9j(PP8}dCzI*Fs{$R_`mw9y!q4Lu&m&FH=k+{geqB??0^Sql@B!uR
zb^G%gtw!seNkEd3ty>#9{^6(QG5o1h)N><_e2k-5IuMp#-uM&Mp!u>SL!~p__(BQz
zDG2ZXtzS7R@2I8RbRJWEwlah2TsZQ%YK9d~j-eSV{!6E$(nJuASSYKgQWngXrps@7
zZiuF^dFF~K*VQ-+cmNmE7p-~&z6FoOE2w~rYWm9~QG-ck`;e1nF5mpI=M3Wc>knbj
zs$+g-tz2#9V6)mPzzKZFoVnThqs-!e&RyCHbld?WhNihD8)YX9HN`Z<slyBq#Z%u@
z&&3>P5ryQ(2AVOXH39%p!%Iq@>~db7w%&O7?EcY^Mj8LrSB_kM+s%xD?KI<k8vmS{
z;oxA)G<_;D%HWTpi$JvpU<?dF^~mK2xB=|&-g9Qv{TLM*`K@${B$TLqK7)8kXm|jX
zJ|<6@vHUOj(HA!J>R=0U$Lrx)=nuugKq_&@@L}K7kRQMe_R^(JZ`jy>L}eF|Q<Azd
z@y=P`9G>vY=E2v$o=F1_3>P3G@@<@~a%%`t-4T_qTq3D+moh2YRK`EGRn25g?O-M$
z;%&8m5&+uh3<%)Y9muwpa%if!{N|9<Lw`QtR^=CL$RgpNNS2#tTAeOcq*J6Vzje)(
zS|;j)93At^X+Z0e7N+TvW}OTI)VfbrgRL0EQU?~<ENk}rvr({0js3iiXPqal{OJ_+
zV@~qJ7}~u6Aivn(c17vmi1@&ajj2$eZyKNRIh+ru^!_1$(5KRWSCLa+#>8<dr!0S@
z5srE2Khy-cMgTEmtQrh`U>gp9OU)Hhx)oW|lTk2Yu_8s0#$nk8%eTqdd}n$xLVs%a
zM=ob%?Gz{Ql1g!7NXJkrb&5tll}emEb3bY=fC2*Z<++4M8lUSbgu|gh2owu2G_go;
z1{><ZCF66Hv-~VHb4*=XF~%7gHt^#IBed2O8F~c&QPrvvm>~zaLiku)`9qYNPOdWJ
zhN&?Es6@!lol`#3SWr|v4OBT(cF95XQ?Phz_Wd$&jCao>2MuDig*K?#qj14O2ffTd
zO-&XN@JO9A_bNhTc4E;9uC_UiYBhDaVgU^fwn?n5>1gjnVZD<4N5#IlgC3Z?#zy{^
zH=|$8!b0&&<qPMd5IdtR^lDDlxs@n!s;Q%YV>aVD<gGGVXduco$2QyHYj3V$=NJG{
z6Mc?SGNIxz=1Bs)CW8FU4o2zI0}MCixqbTFXdRwQX5C4fd*``EN>zU9@+VQ%&4$K)
z`hWFPzHn=nK1_V|aqTlx@FO2#AO?!KQP_U8tC)3R;CK<ZC0ln~K-S<rwaRx^8*jRY
zBugJ$`P6)1-38(7*j3d!Pc-&K8HzYpKdc&1F5og2Wm5TtLIzTq|56Xr3C<SJNE7w?
zJLIL!>D(iC@tAM?!W@PLJS2YHFy<)dkM!(6w`TbWP&;pnDvv}cU;Ey>n~g@_(_hRw
z*8x_HPkgyDlVl8#mcCS?tXxSnfLk+FfVT8)M5vl-U+!?&hGelE<{P~aP`=W9r@3So
z3Yx$BkAkdr!iNhzmAo`RU#nuOwQ}}7Y43fZbCSi)MG&KLFe!Fs$gIx9LVVaR>l_{k
z7(dpYt%Cm;t7Q^49INQ#U}8|5b^q3rZf3TgntQ;GT1=NeP5`zS$a>8JonotY%}Q5B
zQT3|SZ9_;PNI%AKR>4Fn2^TvHv{SjzsY}+m_+SFS>*fZ}3RL}@yCA8}BpLYbG<-aO
zlKwnl(_{GBnk;9RO8%rHS7DojxJh~m-vbNMpj&}|zeb+5ewVmol%=+Vz<;~XcT7yn
zPE0YDkVP?5&Qv~>*cJ+2`zq)Pasvx-{=h>|YQ4}tmB-a60tInC34eT*kJ%|kGb<9{
zO!`ZFt4#EFUId7b{U5T<JP^t+?E8Zlk!6x0d!uZLh-hMLGbpl)>`V5&>`a6**%d0X
zlPz0zV<(F2TgaYlStgTZZ13@V-uM0I`PVq-+~>Nlv)t!gpYP?qW+Q*9REgoxE*}At
zP?wjk_AbLn4$z&g{ipr!E8(}2kk}<F*z7P!mD~lSE{?U5v)4Jfh#zs;G0dvsi~n&2
zG;F9hja(8F3&PSPd=uQ9`YOXjS|TxU@KSjC6pe$58omX|J8Vb_-<Ly%2zH?jm!A)g
zV5QyQdAc2jen0DQOtV1Kr1AD@fB5;9-cv%d4088<%wnRFA-UE)h}^G5oYel?@SKbC
zbi&FJ->qV``da(A+R}b{ELitm4!ibscQ#>Fu$z3rz2&Y=Y_EErVkG%vrgZnaJQrS1
zpO<eLhQvDypO26r>?U1SOMreGw}p=Cd_zU;dj_i1bQb9c20~=Q&DLTIQRO8g+5T*`
zk@TFyZGtPL&6*6XAkf7us|~R4&L!;9XAdTFhIeRpJsSEFu6-Yu4I-u%S79mwYqx<H
z*7~(iCg*`<&eCfo(@!NvA;1Fw<nsX*t{v_hZ6DDU3mo;Wz?7>V7HI=!Fw3k!--;_)
z!XntBPxVuVzCSdb@(`-=@~%sNWK2XxCC42tr-dWE+e_{7w^U~KuElEQWTfTszqrhI
zl>@mmDbZtVPaTXvFhV&zq2DVmC2XGSC3B!UExN;hP(*j<I^2(f>`QEN!ae8gfVHBc
z++aWYu*0S<TvK*F>9o8%qCXQEfy+*gh(ZV~#zx6_bO8);<l}&SBm?)o@h@7-*?)Ad
zhXUBe_k8Afx}s>|-Uy<!`pl~V*pod#l1CvrvH2vmJU#3s5k!pkD#%}3wjC9^!5m_b
zifSZ^1Wf3geVx2b=C$LS?zFfD`OE2gnbw13Ir*M{{yK6mxQX`(z&4OJ#&rYun$h38
z7W+_&SL4nyUPB?{fyPlX*C?XppC7)HUaT(}CQ!Ze;aT}MRa(HKZpfgT!@3iy-<2NH
zVqd<utR``6B$PitGxk^VBJ_DJmG`E*m-&`HcW?Ik{)+)5G!>@oF%p|u4(CE~-KD{&
z>yx<M+KcVD^{}~ZF$5Eg;or5k`R|4Khy1#@k0_aa9Oxn)8>+Btm}#!}EsF_ex<xV@
zopLMHx}im;DA0zrpwy48kW}i4z!CRIA(`utzoDh?<9Dk^72PI(vQscS=2aOQ{$U6g
z($BW@w(RkJ#qH_igeMK<rgHZi-)H{FT=IPc6E-^b@3K$T^K8gmDV9MOM9nDQaM{J&
z4UcAqS$aopv-Jf=ySRj_hLk2~zBA>v9?b4%QjNITm*0Af5SBrKV+0LOMK>D-Ew4W?
zO@j|2G$j*%ggKv&ee3G%)Yr^EJ##*K_VnT~^m$E<Zf(@~2$CDU7C>L0E%4kWQCNSo
zur!Kl9QLn*i?0|qr$~$2t52qQ>jUX#zH7Y5g|^?akCW%7|8$Q&_kG;l#%nKgHr^?I
z)2^8CNvXp3(fq3HO|8qnrB!KN<4h1r1d!WFSSC>aMuOS#k2$uI7b#@<hm(8-o>*-7
zz|wn#b&%rH&^IU_nZ&7w&Ai0I@Z}6{W0)T><urKM6BSGLthwjYKY{dTsX+y6WW}2Z
zc~o}ejJ~NUZDA8LECY0ffelqY^VG%;^&ZSI8yJbP^vg<xiEhqUJX)VIRFy$T^_utT
zEa)xu1MI21REA|hZuU$#aOJy-`S%9ve7?OJh71j+lI>`GvX8cxGy4bGgJo4uUnz-7
z5?vbTfT(Ke*A%l7vkroRuu8Q})NC60{4Zz&<0Aq4k-OJ8@po9b9Gk@&H@tpW-VjjL
z{BCPSNp*`Kxl;zUv>FUDbltxuyU)%4?i>{JFR$PSv_n<Qh9y#dMvjZT?<xwv;2_FN
zycOsJF!YVV&dth~KGvxwkf6GeFwf||TR6tw5v{sZ;>t;{n{HaCX^^vNO!Nfpe3<wl
z{V2yc?>;SiCpOylA{B1g>%s8e<r9iHdVl3GTk=O`VyDNC;W020{7EpB1|RSk`9QwY
zwZ`KYCd|j~`_RD6U!LK}Xm^?Rz3+^wE>cssY1ilH$rh9{5(KU=1RrE}b11i$dVGYP
zZ*hu9YN87LoUxj0Ip1sY`=T^$%MXsw#31Pq0TIQ}?_B_gl>hjQyO;O-n@$_C525v;
zF^%8zWv+aAT$`jEvh|hPT+9jr{TC3PN=aRW=Zh(FcFf**BEk03|AzJ@kM@EYo@cZY
zAkwdWGJ+p{SR4aWnc~&Oa#L|V!<B9C4KXC2lyD;o*GMruqg&|;qi%jw7<us00Y=p6
z3q5|YS_>91x!hDrtz=Yw_QK!*6451BG_2axwiV`%H48)<aH@<r`dVC3jpR7?ESKQG
znsp;aE94^?MOXSx?<t!xJ@7r8;DO0)!%lZvJwsnppB~Ok@z#C*%$!24Uo9^j@`-hX
z<&T^Im6rbBEXk*D{6ERunYYuwUGJ6uT)=Uv8($f0ZagiBpl=e-pj$Z<c1Tc`^*q24
zJhU%a+G(9wqdT)j(b};}U(5TN>5Bo2ehL}lsO@f!6NojziaMERaJP>uPurp0FHiP!
zJ-!6JF{wR7J#GgHfOe(?D$S374jcN;KeN)E4>}D4QP1MK<Lb4)fe59f7~3BbJ#MTw
z>&BZ=?x^Uh`h2fVSJ^4F>Vpj=P-fWoO)d)L0}Me;A=!trJI>P-%c`yE42~U!^Hb~d
z?l*Sj;2OW^E&SqnIjjC7JyiV`3FY9zjzKO^pM>34ZgPV>Q*N>lO^|!D^)B>6@FVX?
z4eWtYE>kf<Payyg)s-cqEuv;-dK;AO2;yBszl~0YRaJ2LdKpX6j@ZB9`$+b$<kATC
zha~0ul{2a3*k#T{NIhBc`NkdULi#FSG^vT1x-oO~Y`c7s4K?siNZNz}ctY$KrKO@?
z`##zPZi9PVg-t9>hREH{LOlVaQXAdp><8oxP`<`0T7Ip+*9h7%BD_Kq>GGVN^F7t)
zRBX-fkW*KAb<c(4Wrv{8X(fxr5G|tBcAv&VafH2U^IRN-b_=RGxR(0O;)3Ue=F=d<
zEDtKOPhDDq!ORoc!9P{)Db_vb)yaNka4(Qig)AmOP-E55zrGxUGvXxaZolI-$mYk!
z=f}MiufIHWUC{R-`o0IrS&`GmBIH-L*Nye4vcHZXc7;HaxV|AiWM1_)sY^?ni_B~D
zmd${d(ZLAk1ErEuTzH3@qAMX$@(39$^FrBdf1X(}7&-v#0I;K;aD@cShm9*BnbY#e
zCMpQSJc|o{I@zK8QecLZ*PLP_Wuv)L*wh>+WNa`W6My-M1X)L?by`0%*wkItI{u$(
zN944=3H^*HuCQKp-}Em6;z7X*na;oaqK^E~au29I<qjS|>d!PBV)q_QCP+L}z6mzW
z;YKBc+3lr{d~m<@SKalsLRIJSP5gQk>zM?UM7u~InI|Hao+4>Cct~G+FV<$T5h|5&
z;ta~wXROgQtja5vZbK`PuNGFT{@^|foZ&ivL+X?GcbV+NKXj}0ToBx1C6Z$p^4A-W
z#MLu2506rE260r(^T=f|WXTd}iuUUZxyC;i6enlk)#kU?;9i5oO@-j;G6YgViTiFz
zIb5GR4tyd@*?%>;Au(Q6zu9-^VZaJ+%=<BcAPni#QzEU6+3(kFdoA1s>smJ;%uTKz
zp5BT~O7NKDGX7b{J-%6){}eLzL@|~*c<IHX*nBJ-kN&crbgJjPJDt7a9E<74e-1Vh
zLOa1uG}ZPaWJ?YEv3gnd-{qcH7ogdLE)7J$d#OK5*b7Z?A!_M(c|ZpNkMuQ5k~>ws
zWaOtuJY2d9hPXBuhefkjs4^C8lyP1!-?EP>QrO$qW<#{E?V|mQCPOG48@K-o3*3v_
z2{v}KIEA*Z{idz7qk%ae-g9=NDeL^;3**sXvHq=fZw;=1RA`eoF7>*vJ#XQl!@xzx
zR_ev-N<)z(5oOc3wwV3Uf(|_hKgmQN3$Q|{qB&I-{ise<$seyQ-VNuxFDWnk;)PkS
zhAM;m9ZS}>Kuo2pu8&-t=S!A(M*Y7^45k9)BFI5$s^5xc9#BO$XR;B5_LwbhMQAX#
zfv4@pm{!~xey3%GLU%y|Il&=v+etY<#W&hHQMyPO44FNi?)vYqpr-v~M?$;JIPptG
zKNT|88i}>YQ<ZSN@t-RE=1kdN&Sq)=CynX0j4h@`#}e7=&o=nc24JefSFMTpY~O+S
zX~C-0nO*xGam9`m63=pH#f7`3k2vIme~q|ou_%n-gDBpx&7*ZK=$&LY%zsf+6ofPU
zp8TOAUJH$jJhDMwwlh1Vq{)wU?$wUJNb$BCC)I1I(=uHloeJ@RrrO7vFw0ghTCkaN
zIoB1Oz8F>5OI6wex^9U<+}anpz1<;y^*FsP^c73pbr+uDK5xm)FCg6YH>`iGV9f%!
zY|Ot5tR<glX3W9IGds<&Vq<^yw-*aBg#n}5cNASW%TXC;=R$x$8aqVBWU+6p^qk;~
z7KA;@f^CLgOx+qK`({v!QIX7YzXN2W8Swj&dI)m(I%_CmFy;~=sTWz-;bfj560%0|
z7F>*BUFW<*OHP=f2bQ)iDDHrBP}QO%q)j@ES1F_vWk}1z;PU>LAys_W@NrMW9DT;2
zZQz9#3fMev>2@Op^t9E>Yn=u%=?-t<YAa1-ifSNu$i<ibVq-?*9?YDhCg*Dm??WdB
zA$lJ`&D!nfBvs58B$*n9qN@L>RPIyhkcFPEP|FK9clguCQOHZ?n7%`PNH<V^vvAIx
zk>3~((^IH=$m97EvVhqL?*O8W+Ypk?i~sa60ERTn#d4i#Wx4APU~#<5D>b9>Wu#by
zk(rJD32znfB$hy-=FSch2jSw(fW;{(t^wWrgIXt}kkg5fsi$zeYzuKJ-Y=$9@PJbP
zWEpL#&AITTt*w;Er$uTU<&Z~wZO-CJmtJcg6~K_;e?x87kFL^d|6P3R{Jm~_W&QE8
zq^@{KEr~2K+nqtc_a@{5#r*(VY2P*elz@(h<d--UDpi3pLA9OEi=kliz-x>G?kRm4
zdyU-}>!VFKAiq&zseYp{w?OU(`TnKujKQXgrC52nq9f?Fl6R|H!FBf=E7%c9<3S!?
zD`TdnSnW2;ldYB|Nyte_gAlH}Fc^3M;E{$3QZ_p~=-Q8@<<N%h()wyF&i#2$F6^nK
z!0hTd$d<UB2cwJhu=klXoi__I=!+TG0P8xy8JZkCn%8I@x~vz@?A*@{dCF9}eWBpD
zR)mbm-Y8<PRS!|>qG_<pt40%kzQn7-{VpSQTfX#8;lz8&m7Q-R!t~RelyO(Ak|Dc8
zYtoUNG1YF6Azu0nHii_dfRgpOl?6{0l}U+Wh>r`B{v-aTH0m~I0MGs!EQog$G8SgO
zNT2T;(eU?zppUCYA$?KyS_Z?`Hp8lm7XHTwg(33K_TrWKA&8APLE4jBANRXz!=nDF
zL1=;H_-DP)OI~6!sR3V<a1!T4qVglp)^UI&^?wg=Xi}?w7%F&z6s?;Dlm4=DI&?>r
z7-0_`w_dBqoU^uMA%)Y#adAsSHcvey9zQ1UX_h&-B*g6UPXcNU=X4+-i(XXbo)<qs
zWscZvhi10OH7?|^)%I*6PjJfmH}Wa)M`R-$ER6Q<MFDZ=>?5fIsv!eC6^!Q)=h|=5
z-C$fnmJ+y3At%Ae%I(Wazo_}YlHZ;R)ZA+;vi;>N6sA;~D!g2&W>IA8k<8&Ge0Z#B
z6hoG{;Ru+C>4Xe=AzWfmezd$Ja<BCSHyUXF(<}Qn*-=o@(c_9NS>s#02mjE!^<w%8
zV+Bj`*4AwyYcs#|Jwe~ufe-A&yy~jJd~@X2P7(k;x8;PcDvES5&5s*!vwik5%~kvo
zzqP{Csg+#suMo1HFT4hl4dRHcPbjBq?A0~Gg?ltJmDZyB9Ttvng^M7xAr$zZWWPWx
z0?!pSPVa%cE|#V243!%8nash)iXWSP-}J&Ox38o+WLGz~a46`hRCXuKN!CjX(1BD!
zH<DrTO*_eC#}yuo@9qti`km8LVE9=1eUVr7t#bT=m+{@Cg^c{e?8Ox*5#2oS`vYZS
z5RNd|m9E0U;_%Dy=|g777;GbbKpzliEqC8xOdA!{Xfv)Ty8UD7s*D)dEkx}qcnQ$Y
z0*?V1JVF0C*ib8@BHTv`5lr<>(reb{9fpfCp^Ebc8a*Y1my)#j?o6ruS4?yC^LzU%
zsA&FiAT1^ovf|a;h5N98rPXI;b|QkTr1DRuzWr02@1Rxtp?|j$)7ZvCYVK#q)qP$x
zs||;1H1?nv&pGaP_Z|zU!%D4IS`VRG*;_7cg)f3h6D5@ze2<P5?I(GdHr@}9?Aby5
z(5mSHQAr4QZlfnPAO1Ocyyhy!y_<5_$c{oyiJ=|wsA!5rPpr;nUr`H1PhZS!<ICRe
z3)j@I&y11*optyGn{Ac^v;8z3tKSG<0@(Pgj*hkG+$nd8OE<{&O#azN$!bNw&z)@t
z0K9bS)4sH^=Pyd~+LexkSx0vnB?@{f<5A)<6qTq`m}b^hjnJRS6)!d{A-1T3B9|cx
zJNWVen?R)ZF0+2{3z#UOgXYE1_?E?c+M)^i^rt-B=0Flm{pn2GIU(^~8H?oRp_oL;
z3V&vO=bw?v@hfNz7N^I`#DPfXH75ITt-b1MF$H23E9TYM_g3BH8==|7E<6Ks_027c
zh>`2Y9vh<k18mthrUvL7VGdDzrLPOrG1Zk6j&Pyq#*d={B17Li;fNQ;x2#8)*=!*6
zTfWfv&JMNxh_(W7mM}iF{j%VK_4KSXd+tCH+CBn~46t25c*(+WXFFFeHq@fE$`{es
zg|1@eA_B+bFzYD)!qv7fDq0yNas&J4?Y}HpG}b$X(j!nWDk;|Sal)x!(Hhqu@-nT(
zb#w3IP^Sh+fWI9ci)F}VUBzyN;gW<xOXs+{RPK!AJ&~Q*M7&5hBuJ^K#IMmZd$;b{
z#oa+FGh~jPxI>8)MvTm4J?8Y`I`d=(waY9hh8Pa~6l|&Ule_5=T0ZmfN>EKhpa=)w
zAXk1Maxm3VVv?NY1M+j}2IU~U_zxo|Y;7=&%Zp~z!3$SOaSzQrH7hTXHh5V;gat9V
z2yv2^i|;aR)Va#;?a!9WamAoAja$oqYmG{ttWf{X-p&%VC%YuBaAQU5LVlz?_w1lj
zjG;*|!*BANz%mfB{{=SjdWDiA6bgUr-pg%WuXkw9rT0%6ygFp~GEr>gYoyuhVZ71f
zg6xm#_4F2?0&+yo$oq2<p}(v%f`68(6+q*p?s74}U)^=#t4^sUN~yo6I$vu4G$d)X
ztWa-m?%26GyIae8h54*31)@^hIxQsW)`dya%0IFbkJvj>1{#YC5a*3@7WPf+R+EJ4
zVZ$;k81<P8@Otd+3H`I7d=61x$a24ci(&zzzHO19<C-csXK9PeKXiTl#`C#(O;$nR
zZ@NZBx=8<L>#m9Gg^i+|tLL<QK}kwptbJzwbslw=HdEBNhl83MPcDd~SE0TXZDoBr
z*?JON;P^?9Fiu4`<SY9zWm4~F$~XR+_B8$cX8fulsDKI);m!|#Z!uEPVElH+Lr)=B
zCQFpW@^pu{MWo5Z@AUEdi=M}aVH(33pFLepV#%3qjg0j^X(B6ltGs))fAZm<`r^La
z{|Nv=;ECNYS{jm~4h>koOqS9a3VA?x4vGvkmg|Rit4ZAUMbQ1qcZOzFxItH)y0rFB
z>by0H67aKkM$Jn*ulnSi<*z-OY~f3o$>IDPpI#xAR!c`0=fzu$gDmJo$TD~S$vl_}
zY7+KCCJoJIJb7F1c(7Kq_rQ4rE?<Uz-WvG1l>5h-P0sVG);{}MQYlh)B5IKHM&1AR
zNv+UFW5kf#w4Hy&b0WkBQbsrXdyOakTgNsvq3lA7EycalOal^`=i2Dhf$pRnchF#>
z*^ooSl`B`_^q@u>UMsyB1{RHiPkZ&#PP>Qo1}xLwC4aGUt$K{x#VDt(Hje4%d8dEc
zrEdmPCxx8AXei#AcE$3OF*5Lz^RTzSgSN1n4N1332{=7D4kY_`s;_@{$7LbjweRic
zjopi97NF%-t1K$(t-oNjE@giNbD7T7-pt)>o-AEnyTw#?E0|VZr244jr@Wpsg|7VQ
zv@O{_AlfI6KQ)NHTt}p6^UpDS>P&fXQvE5#K2j**^8<C4$^tD=?*#-__Vb{7dz#ui
zOZa)>K95`fL*y3`9~+IW<GsBX@)Ee#z50q`%@J!^0gKfV1nee2sGw8+2~j9<{?e!a
ze5<O023Fq$BsAB^OH`j>OLV;IwX#BLF3zSg8#e1fBu*EO&_bvuqu|RG{SAlW=FxCk
zNCaeIW~%=E@2`cj+}fU34T~06k-dqN0X|Nz4k8Nbd{@;=3&lZQ^t?Y_WD-Nu@^=y7
zl&aD9FzKkC#d0YV#ptx)m2()on&Ei3P+Ahqpvr|YI(Ber6ny3@K)E+dUd&yo!LY6G
z**qgOVwasX?sWTeFsP4#cWLrx`Ekh|2jb9ac5%)AC)A{D%?Ur`2x2MxVDp3fuiyaT
zWp{XR<J{sqI*3=$tF~MS!RJKv<_EF?J!KH#!y@30JUyb24O(3Ab-#If1lLI5I~k@7
z^@VhIE>J@juF`0w92ySx@CN${<K!Vngx!UYg}M8Gjw(cVcp2b)WL|sOYid5@S;C{X
zLsL?Sz`Cy8+u+F<d7pi=eI|#lm|2S4Se0>YUcu|_2bO-g@okAO^YheT-(k&Ew^9G;
z@bc>7gQ~~0@RLXb2Y;7E<ljKDTsfsVPz4OpabwNxa&BzUAD}vK$P!dy{yqA9qbZOJ
zi+A%vZ(k0^k8sYtzL0;nWu!XoJwJEQDi=D{V5;f#qY>uEbiBh`>q7c+|Axn;qemOR
zw+lg)7ZG8?91d%HkCx+6vk#s{6ghn)QTfOG_(YMyb2sRpcm3qfvXFky_|t>J)1q=I
z^r0HY-;G#?>O3VCv5cD6|1m!)>6`ibar(^Fm=Hth=Rb0+^gNCQDp)9Op)OOJ+4Fy(
zJN46_3ofr+F}Pl8a6SH+>nJv+#lh9wlv8eHb<}_Th7<O!B`+v{3DHq@$X?<~6gkxl
zD!GFl^Q@$6U3(HDk@JQsBe7N91PgN~ct&rUS^iFe9DL$pPwx^fDx6&0uRN+&{+!}t
z?n_pfY<_d2GXE6>RL2a=W%^+8?$gI6doaSz)rx1cuNS~g@F&xkA)GI4_pj}gZS~Sb
z*UH*D3>|dAO1Jd5G(IbI(bgV@<QCr#SmPO^9!)p?O3;7u>E8BX$b&yZlN-+hc=VD|
zO$Vt4&4T)jT=2)}SC@mvK9}B}fw>~2toR??5P5Lshj2ugAl>fp@Y?R|8eYS=nS@+m
zu_`VJI=SKfe$Vf;gr<NgWp<Z*wSOt^KJx7rr5S0f0ov>I<}XOq`Rk4U&<_((2@9e_
zAU^w#o$uu4X2s{GRZ|j(%x{`zbn$F1yAsrW8jHm{IYq|@W!}EG7m(+6*jS2%m1YG8
z)}1~k$DSkxtf(&@n%9IGJ<g9lvj;2hV?*hl0^;D~RP~QUFG{qZ{%O{YQZLf+jniO>
zbfD5PUv=&M&?)(!6VYnIkmFyqnyG-||EQzOh%gbcnwLFK^h6GSVBeb0Q%&1$U29%7
zIMz=l9{n<QJB|}JaPZ#or>P!gnzk*~FixqOG8XO69IniX15L9baAh93k$%V5r&i;w
z4?m^HOO>9cp2`OWHT52<jYmt?nY|6*+tX;a={pP}014$kUZr304UoUYv8s<B);!NX
z`q_c2-kz!&F5TyLd3yS55VhqqVYIYDKQY>`b_Ds`ta`ios>_7;*tq7<?tZVZx!VVP
zb0h3V?#4EHRr6;}-h<#E?Xzd$0QJ~TorFyco!S`(u5F$U9BL@xbLznd#?<&}cIjZ-
zlKEa^af<6d)E#V<iXlE3o440;@I|e0(bVy4W&f4!v!~%ibO@P-Ci|Awcdm<&QgNxy
z%>l1IADXx@)vdivw=@3(a5D38y5<i;OhHXkb;)auV;e{LR7vLSyLJ4}s*%IR3f7<+
zF5d5ta5n=nWj+g{a@UE=P^DG=*ndQN^F9{JVLLC`Uo<RwJ&C#B`}9!hi6}cE&U?1|
ze0Cd}(t7BeH&bwOp(K)Q{FY4^g(3Eu?M~tTvzX=%A!*aQ<LRal(#bII;_9L9wBCOa
zv=H+DM~?k}MOs9o)MlIkU>4G3Z$<$Y#Ft2NJd5}MpobWn4#IlyzA~cy?`Gap?X?#I
zgK*NyzoB?saU)l~P8uRcCprF-&B`_i=J6Miz!gjn{>ha@TyL0ml=T3?K3_nDidew|
z)d<OG5X-@rB*w&5JGc^v(cFwRaiD`4?iuc#`6M|)52-*cu5G)sH)A~vnu}4qiOadm
zCv&`^=bxz@gUb;?m70nW)-p$c2y9wCcs%#A@u6>W<M$f~8@U%ie9Qc4MBdxp-{pU@
zmE$kHXxs5y^7s>GPq^ga8QFQpl2HIYPT|h)3O|GKx{;TqvziC9{sj&7{ap2&nye9u
z%kKz(&H%K=;k#U2uZW;KzHOkMmr3VU>Oo9T**l__5MeV4;R*VQnH@sBX$Z&<Gz0(9
zDo3-W?z;!#m&&%&h<^_vKwIY!mVco(>HnTq*xkLh8{5d$tr!od{kgf0z2cFp<0ks9
z{0}gP(W+REZLDoB?}EU0X4Q^|Bw1p%4kGRyfhZvhv}Z4Qtg_jI<NMU>vDws1I*2Gv
zO*U?rrN{g<es!b->se?Mn~5Jj3%h~M#500cDG`=;Hh0RrZFPG2zwLCDkFtu`M<~t{
zHo^vcBkrgUe2ut8or>wuj?fVUQlI|M{(&$kOPF{dVbf73CO_iVeccZ2^c5FDaCuIA
zK8c9$-*gJyYH~00@{V>hU9H5jKA?^m$|p$x7olfEMN1e^M<`lsgNCUPmVQfr!X?VH
zX92So_dE7!J9w-Y{W1XsD&UAa4Ldoz?&kFQhtOQ1c~fAKiSHEFvw5fCz$ZX6e@*ji
zuiE^uPjb@L+4byIWpHV~Gf%`KC3s;fk^nK3j247hE-pW?Uey8DRdG9ALjYAYULkqr
zSn+_Sp$LopUEqz`3Ar+u>#?59D}3O9o$XQf43<{~RJE)*vM6%+5@qy9awT2$iJH_b
z*7l5V>H8Y+fOmBW1^`EYMc~8|z7b*>`JIR;Ww!WBwl||N{FFNnQK?`AD7Ay^;_<i~
zF4|vgwDO=yYGCHYS&VWxS{o-R4nhs&q6P9Jl=?~dy}YAU($Gi6&cVvmK;Lb@)5E?w
zhJsT{GBz-@{7O@&xz&_GiwVPuh&aM;eBJW2<ap}gbl+0&SUMq}6qn2ZQ#OMELPCTE
zv~wPTdQQwmTt}@k_%)n19!zf4tdgfWNv8BJrv<eHLD+Zl_Tr1*KRfTfzS8Y`qz{CK
zZ>fTTI+J|3LW;~JfY6c9ipmE-!Zim3eZ<N%|5-y-423HqqT1~NVfgNET?=Rhuyv7x
ztE`dqP8%uy`pdIe$;~0j&Ou^9_yCC(7;s!=D92(D&PDjnP$Af`bF#Nqy7qkhbTR{f
z;wv3=RLL+;GK_=wOq(25d>4Bv3<7v~rUi!hn(F<Qk5>b+s_&^6t%OBn_EGzdvm&ed
z$D4<<^jmU?Dr3t7KiUxOUG4d#ZQnJtp^5+5?uZtFO0b#u0+R00OW>>3#nXa*l7hm0
zrgWbX$Z~(0H}>0V?@yjxp`-<U%sXJ`jOE6<hTf3fo&)Mv^7;MlzEVI8!*bt@8&{*$
zPoJFLNL@cTKKranYPRv;P!YF9x9(Y+eQ7~W>4bv2|6T4~K%i1NS64v1gybC%Zo`|t
zIL)mA<JN>(Zdsj$oPj|R4foex5SWj*0i&49f0b0zggnA|?Dpe#^a&Dw10BZO6T5U*
zWgyP-G)NBoq43I1fbo&Lc+io3oa5=C^PQ1WP0_@Ycn9zn_lA#&JLa=GTT-!Q`9mPs
zBThU47YurShUt-XZQ45wJt}fv`<b`qW&h`PGK7CTo~H9Ka7(y4bVD_g0nYxy1n05T
zj5;RxADT}^en>;`qT~3tUT|ZJerVl$hA{N)l3VFQQCX0|Jgfamp9VX49<MjMuLt@@
zV|~_*wlOl;P(cuU*sTl$ZozGvpp}f)PNmWMFUo=*fy!|hWwDQ>za<SK%=A~YDZtI7
z3|9GLju`Nw^#08>zoU)K^~2xlm}d2z{_E=x)T-aJ8_e>Nl%mUP^47W9SDR<uO2$Pd
z(@?z(VOGL2-oay==}o&N@icwwKSRm?rTYV*UrjIf1Enm1-$Y;C7{a9|=l07h^)NAk
ztARTQ$L}={h8oMB7NxqR2v;-r$6jI%=#M22L|P3|BqqJI<qs!ZRhyA*+|?!9&k6pO
zDdqM$ROKb*HrdZEIg2d^Me{oQ*8VvRM0xV`;sC`7Ixg|g)t;q|&#>=EcMe|mAd(@&
zwJ-|?D{9D3kLtI-pO!Aj6Uo>Q*08Zgt#3}p^3R9LL)w+|QscvFQ<j^=_btTXnvk_0
z13VC^k8gVMUKz&gWW~Gpo~x)l&z;-sAv@k|p&I<1uauv<;3a2R;?&TV?H1(0l|K7Z
zz6m>YU_Ki#v$<32C7R&Ee)e6;$cv}Q*awrG3#&KnS!Cw%R!B+WR=Ot^sThCBg<3p&
z0fe{>uk<}_AndjF$<r)Tw7I;Vx<>PD5%T6bgXPslQP<JI*L^mV5;0;ADUPt8@3U$x
zczW^f&1&G>rzAcc)Y3vw)oRq0j)wY@DgB$`XPHDq<<}h1+I`HJDv3u~0?YsDvmYX~
zcl(W2M^$3A0)d!PD!0?HG6jf!;>P~n1P=-WWR+UDidV}t%(64w(!1AkFSTnHTZ(*i
zEoFK7)8@wBq!dLBn$vdr&TPsLXbZQZ#sK}J^z$~jaEV?RWoKMw?#_wlX;EI<vkD7d
z*bD7lqmYml0*C?OoGc+L=C)A*it}K0AD&J9_ndYq65n+BnNNEegUc?neewW!001m@
zJ>S9Ke=32Aat8C0Ibpd8aYgET;AdI6l|$m>Giu>3n(>R#?~Vd_>0qkvv*9s$`yj6e
zsWCt)BVTCn)55hTh)7J{V`-$^6|j?uBkavO{zb@hP21~pJLz0qgCPWIq4w`*C8uYs
zOJ-51QBB0O)PWBKv<(=?F};tS$%wc`HK}1EKF<pK=()>kxzR%SiRsA|{aUv6Zm+?L
zEA4^gB@-DX&LYY8Jsl_?Z2Y}#Dnr=c12Z?D9QS=4u(p8J=?ofX;BJf)4a$;02Yfng
z;tW1HCOcl<v+vr8skXBm_dZ-j$JV<DcyS@x=KnK3U?IP=dNF*wx40n4aY*z+;bCga
z>826QMo0SP?-#CpcM)j65=c0p2E+JC0#M%$1K7VhHlU^{(1NY8=Z%Zgdsm8HpVaAt
z;iJPQ$7YbdNJ3>|B+EH*QbKz2KOPi7i(mNk8nc9@XUkbcCNg`P@MiCzH)fIgK3#aT
zPx=++n#Zy9X<QyjBVoqsgb#*?J~h3WyMb-1Eick<_XRx)S>g(aX}-iaD{0vep)0l5
zBVVtnO}8~IEh-P&PqqHk?<SMB7jPH9!0gkHU!Epv@|zpt*PCRg`+)lFa_|t(Bp=u@
z*`_aW`k&#}0B;<IjSF7nYc21GS*L}~rXCD$HH~9s@M~4GjTLTzF;PwUrD>T8EOp)v
z4$gu91$Eu^Mr`$w^!G|mf8f+v9*~+tHaC4JQ@x~3r<Z={e}1UhM6o#-v$-Ek+Vb63
ziK<yQn)oR+5yLzE+3xHu1NiYPmR*)XT)5l=&f&b;^eR<ue*B+dJ_@oxT0Qw*ZF?Ty
ztp6;Sl!i?{M3*GF#lu%m?;882TcE0KpKMMraC%2$E9~swPF*>2*#IACK|Z>NO{^)^
z&fl}Q=1mKj3@$tdm-YSgV}(I8v5m}~AYnY5ma}v6%EBTKXdhsagWD*YSlvQI+<c|V
z3)A60F`FA~CdzsHakdTHMb&oCdw{<UAK~*RDkJUR@S4s<<-XZabW1Ne+VI>x+IoAw
zu?1C2^>#pCZp>>Jzg}tQ<N4WjrzMKTK6-P5m9Q6>Jh|^v+DF=YOMAA?09x|<WxuB~
z>}VYhKg|`6rti(?_xe#=S+X-gSiTr)EOtD6(A70Fa95;#BbmVmA1qx_%oZ@6^>7bg
zOXaiWmL|mFWaq9gJjG|hX(Vx2t&XV5=A1s9x|R6YsZwblIZ>2HT0PpleS|vP@*DR&
z4V?q60-SQ3MJXeu5Za-0=aen&QNzhr6NzWGF^ju}!?^DF{j-S1-^y(_+@)oISG!G5
zj}}JZl?M%m+DhMg@BjU<v*9k@@<Md5qFQ}bc|ri2Z4iiWa=>p@+wW=aow>K{@Cm!$
zzSoT3SgSi|4seyj<%55gm3&LVy?1rfTg_dFRFkDQr}OyaZD&p|Y5FeX+aN)u)OaG+
zXQk-bLczZ-{Dwh?Ct{*f<j{1R$@4Vz;JtI)?PIBg2g#F%TQwAVr<py?l*9eY;ihsR
z5!#vW0K9Vk*j?=4jbKNMH?F+@9b@y|^@bDEBcZvw42>C_KM@Hod%-@>cB5}zfjsqV
z&oo%rYGE<AD&B?O@SBnds8l-GNS3Y2x=G!>nNB2`3(Rzu@2N?R-{<Sa{^jY^J>HwE
z52|i@R1+xg1as?~NcqWm)+~T6w;nHM9L^8Qi9qcmIsOerf9C9c1}klvh}qm3hl!?(
z3^HtPaWN84eW4>e$Mj^06$bY47G%G$1cpKQ^j6g)%GR+>-xaJty6r5v0KTanB#qZS
z@kyT+Ogh3NhK~Xo=OpUFX9(c!q0ZhOfG%fE?+ia~<}5e_d4gG;Hj+*7==W?aZqlf&
z223_bErwLI)o{YdqDdO>NkSg4?m9C09SJ39KJR(=%CFTxO(M&6M;sOqn$08WH}wN5
zk>xx!^h$WfJs-OzZaRE;Sat|9?QOkf6pdx~`%zZ=#k}#L1vCsH|6e%fb*z#q(^CC4
z{<v$c^JGiQ1SjZUKX{am$d7G2f6upHOx-`<3MgwT{QVn_zrpJA8vU30^I28o*KOSI
zT~lP{QsQ|2AuosLFlpf_O|0hQG>3xs!$t>)-u7>FaZd)7?h|F6>{SU;ZB4rdBrz=g
zimGfsD^4L~s=!b7Q@xI?2+b1GJ~n`o-PGd`({gMOU;4_+vo}|3_D~f4S~xU>1go0s
z`ij!Y7ykM!qowJ>MW{L`e@@7lM=py(hw_F3fqBL6m*SlZ)7G-_`rWy*9P1g03Xc>D
zC~PIaY(H%PU+~kLzmn9iUcXEoU{oi?^YaOO%n(#TdEM$O%V)Z_9(s-B?4HRD`$%0`
zxf=^8WxY{Njhs<4&C>fhGiq-<6(71iNkAP_6D0~+aC|y(peU7)Lg?HnG*T^;%2kQW
z-XuuyRkxEa5HZ?6d11btZYR?9g@yZ+hox0_dy>pcGhwFdr_L_j+a?9YR#*RknvBmL
zZvxK76;vp<?yDQ0h)jVGzlYj5*K&aowj^M3uoxX6tHzYpR7XV@C8yGfE<5znM|cUs
z8-GTv<(w6yzOLCGf(@ZZ5Snl`PhgfG)Kf;i?6>5dG%NVGE=rEnndY^&6E)B4X6?@W
z$}UO&h{<u(P52YD7GeQPp9iI5<$Fw>A6>DY5nTP47v)v+qrS*RGvnFmvF1C-&k#6@
zk>32orrNJ$WhdkE(1TgC;}S+!g|0k)s-~MIswjplc+<9A24PSc&Gl!ONotD1O6=b;
z@r_P3J;F#C!=;hiYbAmA08v;o#%D(n+y)V<DHm30-ud3re!BZ}td($#4GZNzZJ9cq
zx8BIvT&rj@H_|C~Si^on@yJD&qkm!FuO23$_bb1ib(i+K(?=0nwMdQk1lo3z^^M3x
zPNm;MIqZxRf4U?4y>mi;KxTh&`?$u?(*VH`vf^(~p+Tp0<9~=IqwAPt!sAUA{_Z4c
z689IxKuq!*h8!kP=LMm+m*0A*6USZ$7-$68yfFzvSSPM61tc0YEanE2#`UpG6Cq^5
z5XI7+i_RFT($gCIbSZp77$N6x`s3<)vow#mGe@MmuGy(jduL2E(F^5l#L)U4PTRD_
zqiZuhSMTj5`n#mrO;06;v)C+In2~*Me)IVsh;7XcJKe}-R8P&+kTHM7(wQa}y-=u-
z8(qm=I5Xj0-RKu~PlFT?2n!z<Y<#P`?&G@L7;mq%a(~%GBge_7V(BkpKK2XBx!&YW
zMl~o5<j4%=CcK8T{~BxN`n%Yf?`Ywv$<YBhJJLVSBwQ2}#yyDu_dHgoD!X-haLM$f
zb@+74s|BGI525fynv)wtpMMoO9peqZDSmpy(jFTt8CsbsMWXc&y=~rJY<kMT8M5J4
z)yrQ$wZQb7li#KOty^?bO1wO1oAElv&=Rrw#LfSKb5gpXtJ}j*l+~WQW6~;CzQ<5w
zHMdZe)QR2cq11=<Q?3t$-FlYIO?Nw8zcx|t3W4IV>mFZ)|0;xhKCF|fdgH6R>N^3S
zI&L8-ShPS83%-GiA|{!;80C?xB2SG`qiRMzv8%44u?wQ_d@^_8l}&eKHeQs0YA#+^
zua%pGFDDuP+^sFG?=z6!;nd3re=<Qp_7BPtv9X3V^;1Jn9CJ%%8oiNAr?XBw8XKO+
z+W$!tFoD8HvE{UGRbHF@IrUH;SA`Fu&!^ob|5ZIYYSP~Q^n8@^qXNgp;f!3}mM*we
zTC=HIFMr~0<WujzXW!TW5H+-R<G@ru*&BWQtR(jHQpjb-LMWAjb$+0vA(GzET|cmb
zh9+%a>Sm~0!=8tMmTpV%@v~A+;hJIse6i%Z(d3WspdMzSR~E|~-lpLjf&r#dlaH>S
zK2T*g7w)1?{!wQh{^Aq;-ldCv+q_Rpq#0aKIvJV_K6u`7Pg%Ct+nJ?|Fq-EZI;UyK
z;s5qn_U+SC6A-idNZr5ib>GbR?Z`)sN@v6Vj3?#zX>P#lYB0H;G^=fza*C#9H;ET=
z)csm|dB3U1$80i#O$YmN!$+g&2kEiKmaOY8XD}$q0=P~0PLf&u_^Q90T)cmy<jBGJ
z^~J}ZYpSbq{!~i6-g8cwydn5&)+@#&_0H_$a$ecbo%W|IYiIK;>-EQFPj}Vs8YXTK
zf=GxiQ;90syvVAmSYLdqciOLY?rVQcQ{R3_tDiD9HPe;49M?QQRAZZ@1&Uq<(rJQF
znbOiB;#9B5y2$UNDtup3)i-t@4X^IaW(UiotA|w%*4zain#pNj&H4)~BKNwJ4Y?tp
zEZcRB94W=Me}~0Adl9KKpFEHL6;_oPJWW`WO61q<EV3C}+Oji#bQSz7Kuitq%ot7i
zzaC#NuKB#Nr!ni`x?9(n_buSl%!bo9vsAlXQt53qm{di8sTaR@{lS?z0by!ry%&JZ
zt@kX|NNu{~p;^^;;L@9mAKef=m@vO><YaD^xI{>P<e<Otp)ohHp_fJv6yv<Eo_H<h
zpsK&l$EKJ4TaU{oab5hrLFMNMn-zhLdG-BE*tfR3cudN~wFkc%9qe|kzxf|XgMxrE
zt>yM0G2}ieFe^Rywf`+~&Ce`1@muvhp}JeIbr<+x_sTE!Zhw8%@cPf+rL)&oAwV|A
zbb2~>hI>?9iU8~XnPF-n)M018LLi!_`)9wzp8j9OGxj1!8GpM~T;)m7q+BOr@yl;t
zz%ZyJgDmkf_5@rRmX~`H(P1fef*4(uU_-PH#u9PmY`U?yT4LmV5yY<`qCP^z-%<WY
zWVE7};3&*CyiJTnhCa=N0OvwRvqnBDScF+6_;wh|7O=@+LXQ#sWMV7=oJ<)TuqUDg
zN(;i;3xl{aqIY&D;tLnh)Ojb%3wx3fgDY3bMcnX-mSn({-@nX)D_5-o>cb=UYiJYX
z^-!(-NKx>+h|W!1-Ggi>uACKs7jbzXaphFKY-oAVL2`CkF~8;<46Z>V4_7BC2zwHr
z-C;r;Bq9+V=335HB6o$-Byi;gP+TA;UA<mO2r&=1S`kieje7Ac5&5r!9xMVxChEup
zViYEp^{ToVVu@D?al>>mYXkhze$})RlbWsCVVKL1gL&z1-?|_oDPtDT!mOzp2_9G$
zA>1Z6xFDjF;2W8c^8i;z-PK`~a_<Gm3}U1r0%H-_(M20IaxUfrBQdac7&UU)g<-nE
zk+Oi7Ak0c42h)vSK^uk*=wZ5LnI+Bwk}25h<8v@wxx6r|Snky$%-6xi1rg=gY?u}J
zbNd`Pbc<bNl>z@Q7lW&#xy-a6qU76&7_(PKjFarwBrpZ7JKQY6E0GB(7_Js^6Dh{R
zL&yVmj{#@PsPN8sxFG0ECNZVMXvn(K>V_32YZdkc76Ujoa8zvR=??(JUg}hs$4mn9
zrF~>VjK6Q>rB{PJCYYjuXw~;w!nC0nqSXxp)kZm7-TAtaLAU@BJZ?7l^dHyVA3}8H
z^n_uGzAS3gM#idS67A2t^BjAVMC=yKN|b5!MTenpBeY{bGBTGf9&X77MVsXCE(l{L
zC2(~V3x(jszJPN{5A%kX25rKrQDHxfHX2MC%)y+U!I^}7+~QogakKWzLN%_;w-B=m
z{4E=8@_gh~JY0f4h6s#^Eue!vxk*4F&Qimrs@Q{5oJXdVx<iPs5h9U9D;Z3PC!fCv
zVt(clN{oeBbqFzz8CTCQM6_kqs&trS65gU8+28%Lx*)<<tI~-W_3+airoq*2znerG
zH8`k7vcdE@vqZG#9)mMpQB`kT9UHsqSq~}MN3*tBxM5bjW}qYBT=^F-YviTO!4pI~
zNjV;libk3ttZq24BC|wvz|{wV;3J-fSUyRJA;7PEe9H-YOwt7&BaxSbiB=JJnTJ^m
z$?OAQF&xS9b%PFOCDSbn3ByF7_rVK!)$@|T0+Jt^<epPTEUXayxnVX1tE=z!BSVR1
zX*Xa`Vu&O5kx)*t={e7{W2!E2CTqf04^?J>*}{MiWS&`bHQ6Se3WXRGWp$ZEw09=x
zVS2*{b_9X#u7?An>^VXIW-{8)-*@=0CvZhUnESpP#(w3jr&R3YXNE{P5h0!+mbk>g
z7|{98*r?ZqZZP-Gum`|F>2AejcNltS)axJ?hk?u8Ntlec^^KHuqY;V)eO0LWh(aun
zbSXc?Ro@-bPJh4D(e_<Yu>sRGQq;nCCFk5L`kDL;Xbb<n)>kyRM)G`-wqPpA<=kNH
zwKzx|g&DM(0oRl&q6nc4w(egU6@UoQQOx7f=H4$$cJd(too{^gjUY5Q!@t9AS)#+7
z6ruvb=OBDt%|-I$8FY-)!PEqn^|_y3i;R$gbJWuBA`*b&-B^Dp4Gpf@T}<ZJlRz<Q
zsr-bv68VPPWY5JQSC#1#sJ^g9F~goMLhLCjKd>6=y(4R(_Uq{PjZeAEFL;@JL3GlB
zvW0CM4N=6JK~%{~DW;$^_v2aCo}Z%*_8D7g-5sE9;id|<+@8TMhzyXuqJ>k68^$k)
zj_e4+9nps7ufSXR(%!L>4zof+(LccGO(4JpS5+f#=4j%|)8cb5Mf+R#(S}6dA;fYR
zn18OYINC?P90K4sxHODR2pePsF9*s#shMLIMSvq0T)-_~w{IKb7ek6dmPn9#qrw2L
zc1Dbdh1q1z@C_k4G%^WD#OMmaUr-HK&SJ`S9arV+m%m(%t6Lpqu@%d>i#9(;A%Ctl
zOx%jX&!PQk#Un<D1;vG+lQziV%?sz>L6du6*h>%r2!K<;Yx!}G`kXu^CWZ|`<e}i<
z<eBTB)L&q<mHx!6Kjn2_N(k|%^_@3OLV}P&&i?BK;n%e*7q*v9S8gMgFC4y#5emg}
zAzB69ui1Pr7bkk!{q8X4m3yfO2WhiJ?kB_`9kilJhiKzx%fo>K8h!auKldXYl<Qt!
zwZ1(X4>yXYio&EAQVg_+Q$T(Sbq>GGaJbh_#2izK;?<Y+AdajQ7DDVXZtDvowAsVL
zKhj}OxI15_0;lF=JCCayeV`hHtFljBZA1vCD_JhWJd9w^;fM|gO_=)%rv!&5rt@sU
z(7A-GP#1v#r)Nu88)QMa@Z_J32Ws}8E(mZAxv;821mlv;r*)7;jEj!*LMhC$(kva{
zu@ag72An_WR-jF8-+7iC&%*m<@cRg^?!MPRFU-R;v=h-u)Gd;*BEabqS^3X@n4mZ>
z(6%7j7VPkxnyek7j~ivqK(>TIT7!i~#o(5zT=|i4Q%{c^VD{z;iJ7_2L+VxZZ;7}I
zDP8z#MPkH75_4`+^4x`dN(jNrwm@nnKD%~Q-inP2gRGqEn0}Qb5;AUe@1~@n(v|8d
zA;dq(U4fVC7h0fSo(v^YQzTmOk%x(Ydw1ct@Zh*`7$xnY9Mkc;geXtU?vT2wjg^kv
z&$$a<6$&gPI%6xDAl!6D?*5u!gi=}=#jP#~8<OojzGErViTtikHbiq*x>@&4+&u!z
z2t?-E)oY_>Y*R6HFN#j<Zk!|idc$b6gErermP8MJTr9Ez>nE^?GB7%8<SyjAs=URy
z)AGHCI~J5zuTio18vx55b}6O8ob&Bd!6rab?jx?u9V<!oI|}piX})KWo@zP#oYq+O
zcS#TUyOjvSbR#Db6XL~X&keJ{NWCAawG@MwDrIG7A7R4%F<-!97yLd0ECVA4tK-Za
zhISu!>_QvPR^RjNE7JQU8L>eYuDg|}!9loG?Dn#{2x2^Tfc?%kIJY9@2hH#*<}YT6
zpa+R4T3iKez-^Rj3jK&MkcX>vmhg)vt82p5u?{W>TN04$T^)vTFY1+)AO_{A3jbgx
z3&qpd7Boc6zRtx^niiQ+-Gm$-<s?K0PLzkiE{$4Ha9IekymgL$@#8@Qd(KLvS;AW}
z2?~V8h5J9kYdES_FKTs~Od_^}QRHDQtUOk?S&@}5Aq^DrOpq-yg;)0ib*dnq<jsy`
zA@ZJN@2E2KzexABV>-+kZ_+$ZeQon#81kJ;0P;0A^J?+<t~ZMf8RY!8V7*&cv;KO>
zogZXL60}~>wx<)kmhj<2=v3X1Rhhl5h8cmSGMSw5=Ao0jJ^her9Ml4NT4Z`I!_Gbu
z4cWNbw`JEMK^2zx=JlOKM+K#4x*HJ2;JX48>N+$=eqdE<3Fd?=Ddke!rJOpSp_}+8
z7h-GZNW;4LXus%=<he@G8*gFQJY&UkH~S;ovWb{vop=@ju*o5|TzUifN_|n#r{W;C
z=^43ui@4$qioM2tW)%TRX=AkUml>EF?CA@g4<=SO{1>})>0^B(W7VZsQZySdA@>Ww
zCI=-v(yB#(W6)n!WH8a{*vm>;gK(gQY7cgnv6@k#w~>h7I2^bG*0x@$_t0h$I7xnq
zezf&KN$`I(0oYgmfyKJ+fQ{l~7^asZI;HUaGsNg3sCh&;GEW?27&K5urs_Qj#Ngg!
zeosb>*q*o!vQS4tzkJW!P_~bxv3x4OCWS(@M6-VAM#131bF6k`cWy!Uj1>O>P1`F$
z1ve@E5l2Y+wreSz!kDp;*R%i7j*s5noIxo@bP>bRj}(!9hw_azdef<TxVndwaWDIi
zAB&H}yvej!w^^Ae)F#?47Y5Tp<Ugp-7wD)h1}&`L%eZVo=MT~CzC0cN^Mu@rP1P_%
zfbyO>`@2Y3U<M5iQ*hmjW6z#!pS-O_M3rox3iJBIYxOzldlb(LfYL7ch<h-d$$c1v
zDY%8q(BW1Bo07`)*dMXUh&c)fG~?!l4)NE)w6ynouBU$4bp37EA`c<bFx_Nr(JM{Q
zca@qJx1fUDRc!J37RvZi!T0Ezo$&yfC3Q8~9kFvmc57D>tXd8^Iy=nY@V$MlyLlK>
z-|<tDzbg1va66<OG9i7zId>-b91p)LeY@XHs2bNB3CtKp*#$o_p4;Rf9I&RJGU$Uj
zFO>}lk-r`ac!zMm0O8_!pI$6O{8=LqrfVPBr;Tp2M7+8$R&$T%?xL|jg!|~3Z=}4?
z>r}suYdH?lkdfDi{jjIJM;nVd^Uc5CWxY;&k|q4>nryWmt%^$c6TF-F0RcX<$3u57
z7!C<*u-jzub@R_4FB2rtQNG_nn|u8*Wl_oplmBMEI?vZgdK;D%#C1-XM{>IGen~w1
z62ZFhu2?U1B>%uZE9&Y>q$ryR42~#-ei?^ZEGgu#n^=jkldXfD_{*m&kIhr*U>+kP
zk-3x|CjKazSCs^KE%x%$%h&(ATBc=REgfQaC0Y_#q^u`X6$`Rq7J}Ja^=Lz6oOnE3
zJ+!M0(aRPhh;P93(u*MDS=e<eR6O*MXIsK-wBbxxjo*tm1u%<fG6F(78dpB?N&Z4b
zu%r5S*WG2O50DCJD$C~{EDQexGr=Z$=n@rU)hW#8G9<7Y{=wFT8y$FOLD<<j`0<tM
zNkKaH_wUg66?IdygsJ52*W~kEyLN4lUK|hqP`noGdHGvr?fnJO1WIaGv4QFSx}^jy
z2X(W+o?->+kKGeGjGv#a-0M({+{hvOL2g-a<;i8$&0E>AoVEfK5W1Uo3K-smxFUrM
zjF3vQ8ouC%_YZiLUk6A>((=4}sQhrE5<_CV(85X;{G6=e9CwZwe_ZN2O2sZc$W4KB
zly7d@c4Yj#_f5xn?(UW24fH@;u=m9|3n>ovSO#WT;E=1rdAh2GvKjWtGAan`oBMPv
zS`@dZg6CdBYfJlPI@r`(BL%E{C=NVWiYcQgdOlR1PN)4Jvd%M}&F_8uL5r#)Ra-=(
zL)E565G$!td(~E3)!r&bOC=hmL#t|2yRE%9A-3A9cI_E^``<qQ-?Q(-yz)Bd-1oW9
zxaRx1<|Ea#p@TGBI+6XZ`!za=H00)&{V`aZe7J^CcB3TGECSWS*7M?~wlHmw;S(HU
z9q5=mc=e9YeG_v>kT)~AoGRN}q<N*P$I@Mm_p$6~RQJleI(v^IWE9x#+sgAC=ofJl
zRM-!rkBm$MUhJM$7XX`-NU}#8Nh-v6Mc!NsL%^FzHQA*g!tf@q5fZM)5U}fvD*-w3
z(UQ+?U_ksatXUB7WoW}1hyb!c2MVFUUaI@lY|C`qD<%dbNvXUd2}=PmBBRhGxNByX
zAEG$42?f;88<D;C?xHBdeVwkcI6&Z$)?)?k+!~l$z8BswP4Snf<SW?77~c$`cQlpX
zcWxY`a_@cNEbrg^E7;R3ciqO8i~fE9WITbr5sHsY|6TyH=%q&d4)Vlhdl!|}-9uw!
znE2p^hHS&tz*qkrUH(oN<(zQPpJ)Z8R?^cGO)^WYd1WA5O-pmMT`!ZHsK}>}QOB-i
zeJ{+Xg=(R8D(->Kj*6OK!Xa)F6li|$wfoLpL*};N9Pf@&OAB%G^8$TsR`TeAUZw%k
z^nV#;w7ECBx_!3~<hlUO^Q-0y6T!ldy@YW$L2^!7*&8I{|N7{lw>|!lrgG{fkjRv7
zr%304y+FY6qDgj3QY3=6ud;Sl`iTwWYB70mu;6z#taUe;CC7$1$+@J&Uqo)O5WZRg
zH1HOyywXr%b4MnXms5xfS{i#6FB*G30qO1P7)tsM>y{UoFMgfXDpg|x<9}=}ifU`p
z6wSjdbAf~8Km&s0^}6Eh^sD2K+Ch&MNb;{;j4D_DdNa!#nbsS!1f*Wc=Jh2gv5=j-
z#T)DV!J&|bVx)Uy-!V3LllCq(u%<mOV%Hu>%W*_~&eBMU9)oqyEjc0H0okb-!s94F
zYaUd(j%~%UDK@)#WAo7*0w}x*)047uivJ8FH`rEoKW7mQmX(ku9VsJdwOzIyya7Dv
zcT!Fipo=q^0vG-bL-_06ZbVo$>V0RL6908ESOcjY$5v0&u0$*Djsb@aLkif53OsF%
ziWy*f+ykBEeI#gl1u)96DE<~C@ph#@2XR*!`cQ+i=q{#fLEM1J<tv~rT7CqyRo>>l
zxMEc1J$Ic`h#}Fj`_M-?FQzXjI@NA<y%<$~OJ3BWc0{d>^mR4iNmZ^}JwpJ|A8#%g
zTlY|tDq1u{G(czF$Vihd?8Xwdc7);HXSvL$Uq!<aB-aE4Rw)@ke*`TRUIj6DQh|E8
zH&p&=V9Qxm$#~<t2B4<(sa`$YRODH=S-u8n(UMrD3gib5r05(dk4`E$u=Ui*Pr~}s
zzLbUA-vh1vW>$NwBC&II#^X-y=Q;2zL6TN7^_isLHFEMVZFebeJ+Al%v%dwZ7Nq`A
z9_?`eHqr{x1vSxy$g0qVdM38};;Qp|GV?#bLX>8}Isxf53Q&j7=tz`><lkb<VzO3S
zKo4$%{$6RDR`w}UKZpHmkrBGd3hU?(^!Pa@p0bEE7=a5q+C>?X!WQqVO?MTGVT&GP
z581%BQ8Td%-q;dcPNZjdIqsRRl3Y8|#Aj<YP8xDN%g=k5M3H=md(Zfm0&gOG$3Sxg
z7unJ$WAW!dJ&=ZNMG_HdOLX+?F2m+SRRYsB)lE>?@9T6+HbNg6e<^ak50CIb8W`*7
zJf!240!)0?6k5YzH%6M-7YsCSDo9~-EW<al#JO8yZ81oLfA(|P@u%ev@g|NVsx3bo
zMd4{+i#W~0UuIe>y^MatS3uwBF4jb^KJ#5GI7kHDd)#*87<M`V=%u%SGYSyx3rK1m
zkft^a9g8I@*Rn~&NfZL1FG5k<PvmYZTSwQ#&^3u6HZ6}iNgR~$=1jr(pH3j!KZteC
zN6ugBMX7e<vvB`h>C>K(2fu}yTAD-U>+q(?zLw*WK0x`U#C@t#-Nly7Up%_BC+^x|
zD_H!L<#&*#)3>>)KZIz?FxA|9ZQ0RywlkGv_Kzf6khGru>+91fuz!MMxz9?}vt7Y0
z0GO0j%;+H_3?x6_gJ?wFuixtzkw%p{Ko$7d@Fre~o_^80N6moX2)27A1c!B2K8WmP
zyxI__YS)*L2y1_@xdOcz$fY&QD>)F^BIkyHEp%k24D>QRP?PUvyu!w4IIv}MsbA2t
zt(1AG-cH?A5Jh#NBnNclOU<$6?rnc$?3%L^VT0E*Rt>OgMe|~?Rxc<^meUoafnPZ~
zH!bc>DsTIE%eN8S4aJnNz0a@(rS|VI$Ch_cJ@M^6DY!rS3}CxJirX=D_NUHU6Tlbs
zu3jR!*F@%9)hl48N(aiK;w+?dnO27#-75GIs`>yT>)nC)t4cykTJ?iM?jG+Ww){ay
z4Qxq>$~5f}Cz)I)Y5oA+Ly)B!0OLyTHc}yZZA|-gYY8Wx6gy3ReYC|l7!F)_B(YE0
zEW?x0f`4Z8>G~9qzPL?B&`&bXp5CTsU-o-$(vjv<V=c0%8-7ObH~IAVfS5p`RG@EH
zI9Y>@6qH4;?_1vxlcV4iA`PakS0J^%r8+IhY<5lMntC<)tN>veawjmD<X}1oh%tDr
z&CCFDW+n-~noUg&*hr;<3`l<83l;^vBE3Qn$`&mQ&$do^a1Pr71(U3RvdELANdCOM
zMe-c#v0-3K8rmo4{3LXBAb9E9)$5?gq@Hx=t*hpCE1#n^uLaY8rX!_oQ|7+@&!?BE
z;a;#U=#WC0*-%`vVpzf+kUxWI!+-Qyy1Gzz5YC$CdJr2R!P~)0<RI2y+hFSPJJjcq
zX3rWEH7W3&iXeBAJW}ixPVyVnhtpBxNHaPL5TzpM(L>MRrRv0wuPHq(5YyIN>*Kt7
zYr!nQTm*{&XAl(#%J|9t#sxQ5S)&V#jI`s%?OUJz2+6RWO5siGr4$*{yqx5&^~k*g
zOyA$Zj1M4`ILg1Zqd~D+^{Q$k9~*y-kW7<JUUd^Czk2chVRk5OIkNuxF`dfoteTkj
zM5ZBSQ>vm5!D*adjY_2q6mOD(=(i0N$SM4S0o?mDP>Li5X|DR+P+&;!vs{V=X5n`m
zw%}Dg=_d<rs^n6{wvQ($KJ+OmmM<v{Z=P#ax61Wr41FwtfHl+$XON0Ek}UxOaY@70
zQcAZk4g--VG;K2D1V@`Sy=d1vvE@KGX0r~`7=U-tc|q^*L4o~1ON;f;$$!TVgDnQ~
z2zr%pz!r$BD`8r%w+J}E{8R$$<A|muNlzbou)`)3Ra%_Vf2SH9+ge2)KTggQ)tP)8
zw8V*sguxbMG*5gJCc#W}s7$cpaw@;aAhqkU@KAslkx7=;-gY*vV)s7YAVWHUw*57c
zQ5ljf7Hu`+iAo~l?nWyCJG-|lvnNRhpv6HIpUsYA<jdB0V6)h=_g6rC^`RuUt3lex
zny=LcB)9FUNhrMFmICic@}5KJ<=H`fkMlrJk}0m-do)XerB(q+-%cb8{g?r=SHss+
z$iaaarK7x!4`d(cKx-5>ujTp}<)2&df57jz;ct4ygEqfmx0t_5+2dTfNl96#$!`Zs
z-Tq8P8f+C%h`4x%wh67?;2*8GWb10s0U5D%VQcECgBk9SPBRCueK(i)jho`09{@c9
z=`w>BKTG@(Y71wpB@Dcd-a$Y95p*3}6|4YCrUJ$1H@e*575uI(d<{sBzX#$a3AT82
z<xk%W>%KoeeEfsAuw}P{B|yGv_kMh5)xH^>G|Wi@Y^nMyZFj>M3YGGJXkD;ZSTreU
zQnb)QdG1)`V>-8Js47YQ^9DADCA=v+g}u*Ra2Cj?bFB6wlcDt_tG~W>6yQz(+%dPB
zJmPmyvjU&Uk|AG%haN5zfgDIa3X;(g=BFE-?~pH`xy>r;@7;@zNILNio_N6fxd&UF
z3<v3|$_+3YTGSmt;^B)Va@Rx1*lx2Z9xqaZ@ZS_}TL)Gt$gvliUL!KalL<nsylJXH
zw@HSmokJXgv&gnzP@j9*Gmw_Y6;`8`%0MFbfUB3J+}r<##f>ZZ_~bxrUFuzP;BNeJ
zWhVG}m>H?^-pX}sxeevOI2#1~eC|Qksx&-;$aL+WZ{V23wzMQ1)}HkeFZotZ74;Pn
zhSB^m8jZLQv>1@ynZEZXmG1;HNag0Li)t1;+_-p<ojnGdJB7s+>}s;7{M|zuxb1pF
zRUKjgE#UQ^1s36@N3*;Luh*4A#Ez7Ym-bpP+uCUlHJrEaGz<6rJ+(KS2M+7-mHaGc
zSitxjs-)fhE#V;r-azCL`@}8Tu$f*aQ8CeW2)>!X0=5W~S6Wx{SPDeII>i?uib$P3
zpgPWimA!oyR`~uBj>5_++EI1|9<lfv*3gm!txd~+=k*)b!|}NK14&3QJMXov+@ZCG
zgAbr5VI<`AU_UvIuc4s&xP<uMBj{k7U~koX!6sL!6nvDQG-*21=YG<%0a<E^=0B+S
zR%j(@F>m7-l7oO6u7L(buSkS~(99nizNIBa9imY`xB$OQ9ANbq1@7i3z{T>Pf%?b)
z+4%myvmp9t`3l!gDqomh7+TxsXkVDqf~!Wzd>>ocYEdp;+hwXtVrdbaX^*S?!pVRR
z8qBs5K^i05Y_WB=pda7Jp3{9zRU1$rRr9MS{m^okJU_SZ{vj@E5(>$_Mbu&x^N3+Q
zR1;}9{=0;OqM`|?&i0f7CKi1E0a^Yxfch6w)~<JJq^$@r0Op^WYMpK>pi!MSJ^f4J
zY(+{tv;5B1YQ7?%+WR(m141I2iJ-pDuZwD$jMZG*p*6-EteE(mE@Yl0X@K3VlI=2u
zLS|1}FHONW+18jV;otAP_FFC!!5dsG<@Gi<0ONH^m<q?qmj!_>2n)J~c7K5Iey344
zCgurwL4EU-1-wDyT&$;Ph*~Nyi{eoWl%i=C(Bf;ED5%1BC-Tv#=7#UGtOy+7r_rP!
zr%+1wZBqj*(ax#;wGPksa$p@So9v)$IZmE^XdY;Ym`q&+3Km47b`Gq*2=G0SJ(>aZ
zd%zW-`}wAR$8n@WFVjoK&4>?$y(1Q%Tp`nU!9ES;E5(^H<;WmqKbFY*c;lO&q<%Ah
zi?K=vW#-GnrNYu-UD%=!*$bLz(%*=?VT{j~Up>dil(8xi89`1(aKmQ(fOk*M^hqpg
zgvhSaV#^!i?E)}Mr}_dyeU{Ike>m!Bb_#=nU(`EB(XpjOzq1abc?B{Gz6-V{?SFHv
zSLw;{$dMc$`<q7~=fo9kiMtDfVVi%QPMjQ7$IhMNABQ;Y3puC{gCrl<Y0xXANgzV>
z2dXWF8Mg|$eUIb=ec+Wmiydxmz3E^fZtCDAanR1>TD8gz^%kV@J28y>sH0q}!A>>m
z^K*WQf@7yCUz}DHMouFfj+t>|RF@zdf#ClPH>Cz*EB@He*-yLU!1PS1{KCgk8ID<2
zJ&}M%yn7?%52SI4C=6>@xsOuP9F8=`n;46V{2@dFpYEbsL@MD76xz_sC{*>Q-PzHS
zmrqG?Zx*eA4VmQx76m=qdfj#clOrMla18hFyhX`x$pSW=YrBiRWA{B$`RtLA#@`0K
z@J2t;LU_Z{x#EiY0aOc=+@`swBjr7?7Tf4m2{`+*8Gsr0XZbz7;`D4PKZREF!`{h{
zj7kn{PYS1yMz>{Xqf*{jl`xOs*qdtRKy0=oLV{PH6`h*S21B^7;5ixWaRgQcz$^I#
z_aj-b10fszRJ#{Ry<|SVp&m^a%tpeD3(fDefIkpm?264)aEGYFf07P7mwt@RCvjPX
z1&a$<D(bw}YJE{bd$t1wyMATuMyArS9sbP}doDsWrN7x9YX<>)xrg|jb28q!)`fjB
zqPhua@;}Jy)dUa^Z?*(_S@pq|Rj5Wy-Q<`Z_lmKV<e!Dcq`!v<u~veaG_O|3vnbqW
zr9V7M17!G6)OR4E=`u{awech4d|JR(?qsm+ZTIIiO|G;7(*n;yma5F8J|auFHObGy
z&01S*(Pv;Ar{%)zDM;2dFSeo<uCri()@sHZs8Ar|rJ8;?Ok{dci|V4XbH!ByWQ80u
z7!GT|7Pc7Qz_f(fw+pzso=5;zXUNE$Aad54F9R4EB+|IuV|A_kcI|QZdA=DIJFtO0
zT#`?>y@c_-O26C~y)`%KzngD==cR!0Q$~L2&a~RSl<#k`t!JB=hNM+FA0o8I@rHsc
zjvEA;FY29*vxJ|(c>|}O@MKs%5M9D?U5LfzS2{hIqQO>tX;%5!&p8&jW{vvY*b`2`
z$RMEEjd;940LH=UfD2UwhMkp)!3NHbCZ^MAzpWQbB47i9c;}OR6H|QiKndW%==74B
z@mzGU36x3Yb2nE^FTM!u8lyNb!J8cN5J9y0w?WE+;Cfnco}+$~_uM8mNosJ4$n(3Y
z0@4<M`|#4g1*mC2-KtB!Iq;LWF&bN>0_-<Hn|J>Zfx`9yE=N|R0gzwj{+?-ot)PIB
zOOWLu$tlxi(IENxWC5h9z$-ygZTe(EQJ;#d!BQl`wD(dJHnK>!uGg!Qx<cGPm@UiN
z<M!0gY;_9BX5Q;63o+8rX0W%X{i@Ev7FBosZFTS{#g>l$<8$+|A~HTUhA=gqEa7B^
zoYUY-+-Obb`*@?^V_EB7=&zRpx4OV~^Hz5o{;|4EQ6?|p5}f9GWGXlkMqh?)0MiZy
z0Vd2qeP5hOnd7A6ma(Q=$Sl9z0tJ3Qq}X&EGRrFzrM{q<1l@`J&w9qdwys#1>LFSM
zm{AVr7G`5^WS4?xd7(uK&~Nk0=tk01UP`!*>rz3B=9(1VP%EsJFY;ZKsID;a7&e>Q
z<hoSEp58IbyAu&WVHTTk-`>_}mY>#lQCzNJ$JqynW|2%QZ3!-n6p6yHB)JJOvcv7r
zqao9lG3o_ou*O?0AGz07dN{oA9|yYhfE_|V)n2gq%F&ZDlZAnD!FitAeUY*Wn^a`!
zbRmE{u$M^{wyp$xs~RW}F{4~z-?Dr}Ey7_$x{DfAGp$#+DhLajCEatEV-F5aYs<Qh
zt=6r40MaMPSR*$<`G5pSNcWeiu(c@u6}fBmURBnN3}zolWg_pn(!vC~751b-@o|Up
zLL{3;1|;^>exsDwx;sSwQASWanQXWe<zO4gmgKwd?Te{irrB%$Y^fynwlWg@2jQS<
z@(0qQwK5*TMv7+@FBqoc;jmMf+#^z~^dpj2C7d*Jsv*GB)C?)3KUF#%{g(B`5tV_*
zN-+%w{-u<Y3kjmBiJa@)wIWRw=(q!lrgGU=FstCa;=4=k-<w$4I9rN_g3&kYueCn+
z6}obK4l*MRbnQGaG?gcs_cHa|0O^z793nSBUB38RzKTa;sp<^kbJeK+diASn_hOnB
zXVUjslP)B^k{~ocDu|3XV>*MxY|su_nQIosvWeEHhBPtVYg5e^H1~Un|CVs?{~DtX
zb)%XVE-t`!d+$;R-@NEn;oo*b@dnEbZ`BU7n7cwzog#RXI~-1o@+n=NV$$45RIZf}
zkwHUk2XN`T2w{|DrFpa}l(K+St)j#*Lg1`r4WJ{@sAsaH$GtwLx6^}NDYd#qx(?@Q
z!>;?{s1^t`yHv+FlBlpnJ-#@57A3LETwF%Bbyl|l!nN1C<9Gubu*FWX_iEp4+;wcJ
zE&Pt5s;TfdPZSW$#eqglsASy18=AHEDAN3)lX3F`j6eCaqN**`RZ#XO07Pqp@y@Wq
z?iyF|Kmk#8y89^O+AVbXL8S5m(qL`%dX$x=gs!YnCpN!piYD^tucx?Ibr1gIEU))M
zl4_W)-?w8)B4Y(F5QT{a3Ehs?7Nb@uf^JMUsdH3X{C<@PJGutqBZ->$5HVOy!cAU1
z@jGf`t>3~9Z$<;Ez9J2l-Tb-ISPuz~uX}y{9M|H#|GRxxHXK_iLHXo`wsLxSVCCf1
zr+f!0w$D!=hXYS^H(ld!k+a#s_+5t1A~qp34(#AQcOKBi)i3s}Varwv@WBR^xt6D!
zG{@h=R5g=bV*AEV&ve+j`tEqcAB<`->IcQm#ZP9T?as-_vrSX^V*9H5>NK9`Q7;rm
zB`c@{cK*e}GeLFnR~+k0tIk<C8PZ|YUR*@V{oZdTs6_H5_qGAw+X4POu<`w)tn+KF
zf&7xG{7{i>?K<DJO|bRp#UnPNs0RzaV@d?w%h;i#r7oGWPk<<0Yf9xy=<XspC)@SI
zVk@fbcI_1Bb>1#<v|~%x8(Bhi9w<h>KHXZ5WQsq;L8qnY^_gf&XmLUXObmU<)LKhV
z6ssNXmjjWJ0&M{&Z@zx&yJGR}9Pk9d6WKVFA{(H-I7)*oar=$V?K&{n<zStlL)3l;
zw<$lwCDD+1Htn(;MA|xmT~`F4WOD~=y^QJ%kIgV?8~;TtFtM!**s_=V97kBi3ZL7-
zVU6P|L10LwZZ^49DsSShB=*l8FQr@@wp@8L1vA%`(e$FsjtT6p6(VXZiIB~9W0acf
zhBBEk=G=CMN4NuVOm4fkGKfOe`fChehod1+?L4(f8Cgm$q(Rz&Vbg3$pih^8zN1?K
z6JlKOFu&8kUqE7J*H*iB6<gxgD^iCmTZ7PhFW`+f&g7g!Jc_)!*NOQX<v9Hjq-j;+
z?uL6+=dX~)R6bKny(>ZGX&HB{y2H#Mv;00_Lc>r?vG&TQlJmpw{IKZ*Fr(R@GpCe_
zF<8%HEj($@HCy+BwZYAe6*di>TmGhj9VQ59U1ykt4c}CcV~fPFmaM@g`}~MZj5Rxv
zA>!=tH~!L0wPLWg23d{(>M4qbr|d-Lb}x@q-nGAKY)Km3x8Sg;f&wPCpepe<UF%9x
zR`$^k&w=jSdf6A}z9+F~rrl@(oYF~&NdnV3H*ff)v4QQ_5wryb4QvIwt3bg5^Ybmu
zZ}U8_H+q@aTQA;Zxz1=WK1$`?SnU!zQmTJmA2m9h_SNkewkTPc9NEe5D87>(=z%mA
zT4$GiKC^vb!^1xj2pc}jm^**<Ft^_#0r^H06>|Z}Zd6SxSe=C0J#$vVmNl|RJ)Eg`
zmnCvU{$s`^eREyWiT9Wlg&4u+=2<#1_oJ{q12*tfUS}o|F`1Mv6uvmAqH?qsWlp9+
z9@yjEF0HXvqH{z!4ri0wzAikNF7xX06k=vumkLk0PqS-hCY&SyL@|k|JW`x1-B?Y%
z<?D&c>tNjpywdn@Tp&m&UKbTn!mB34c?Uf@F^_heP30Br74@L#7wq>=a~kc^EXPSW
zTO~j7j$=!25pE?iY8b*JY*V$x3kIe(!FEEJZE17jF{UGxmpEVro$=h5Fi>R~E(apf
z2=oh6c97fsjwiscu1G>Z@6H}W#mzW@cV^g%-bktXXFYp2U*|O1w25<gq7vT^tz}pK
zsR(M*6Y7j-06P;bwqKuG@!TjXi#5Lz2nBnTPfB=+PbfAk?nD<5r>xh(9(kV=lZv>u
zjvZ?~nq)h$g)X;V<Xf4VK}8~8<R@q0C^klp!bE7l1o1u12mlNPY=M4T>)WBojk)R0
z6>OohB70wvxR^zn)}WF$jQ=KWPaS5;MjYpn;A(Y>`cf*)mVY7Tf#H|?2xc@E>cal<
zAV5@$X6p(*G6_fSc(2+tg+ij?37r<CseEzRNcO(7+Q^luSg>1TYQmHg=@V>u2DZF&
z^YJqs8T!%i^T=`>UybC^6lKO4MQ_rg7XVF`srZbLSQOWZXdlo5!i)UW{r=o7=!mTn
zgI{lvMm3mu%7X8m?!XR-y-W;oR*84)cg0>OXfe8C4+5w+*)fC<z`RBm-N-mA%(}S#
zhj8kN>h@5yja;i!oCv7sWh75Rx>c=kFW1>D;bPU{RHMspS;?N9%cz0fniaixTQ8=Z
z9sms7U8K@l%}gpU<kl<7jDP>d4YIJU+og`oWi3FKY5}J^1XTlF@C)+sLK@p#kk8HS
z+js!hnF4kVsOr=&%ejvS*pi^#sSUqq4jZAa6TE>`RW;p*&&BRyhu&YLoQaIOFE+uy
z4p(dmbtb}B@rDvjOD-ZRKVkd~U^joKkh$LTjtokx^Ebe&O^}s)=7ph})jo+fFX7ZT
zL$!QAsfQ~`tU$^E;ds|bIOEK4r|E}fgfMIv9qD&$^?3*_Yb_-svG0pxdFof*B)NOk
zN;Vgr@&?B15h_Zb6wiq^cwUKiBQjpySqk&8MaREf30xx}jp}Tv!l>+vN@Shy!Df#c
zOM0o?dTo0<x=vBqob5rUbSKZVKgVI=fQiVPp5h;sPlKcb9FsRU%jdCII>{e2GIvjF
zb7|wR3975B8)iN!%TgoUl*(^6a#UW%K-Nr?s{eNaY~}UK?b#^`(yX-5J_(yEVVPEX
z*8{9%$Hm`VMQl8&qOG|1(b&_oh`y9NOI5zOFma*~;gv9LzcnooYPZmonH?2nyr>5v
z5*f9ZEc!UQWZO<07{)zj`R}R{JeI3=*c5qps=I)BlkG&NC{qyw26~O&_c8%z!oHO~
z=g8dXZ8yfe{H(k(h#;|V4zYqQPjr&(lwR7{7}y*KB9bRe_^~$4U-NiA{2B&s$j7Pr
zO-oIKipQN|u%3WKUB2ojlW<7<25_FU1UkiP(b8^L*1rThMDQXU(`n;E*Tzr}e_tLq
ztZeJyX>OVdRbGFFY=C<@>BcPG+uo5wTwK=D?U(Hy556L?L;nnLNY3X0BB%UT*e&OF
zA|tt-kFk;fc=|&aQIVqqo8Q6kc#RMl>4l42wZb5c3gDO}Paq2T+0d*dzkrY|YNFE;
zeY5ni^+0e0N2aXA+Jj6Pa>eFBvk#^`q*2X_i~UJe0!gZ6<G)h<5!e#84<l$(e^H(B
z_~R(zj2jb+qbIpzV>Mw9<ICEh#mIv8`E&MUq-kMdtA@H0@UJaatiYrC+PZ>m#9R(c
ze%jg~jUr^D;(k~Vv`#X0EXw!rCMyuJ&NT+wq;JPGHDK#*_Zc9}6o&}W-y8vgzv?2=
zoKDu4N0r?KAhkU)V5=>R;CuPsFNouOgGg!@!0`=bTGCo?>undaJ2N#wqjH(;1V^fZ
zzAXvNm+l5l^xQ|9c*Wnl6E%*2D$U+iFf0T-&5o`n8WUe0R_##Zgck6IBa5@sGxraR
zY&o2S2Q+}V>Keu=Hi{Ms0^ZOf?@daia{zs`<*Yl5A6kB<T13_r_QX>fRj?@Pqc5uJ
zZDB_3kpr7WqK3w3z>JK*ip=8=mnjkK=?({MZ(JtuNWrG1#azX60@AQMrQeGK5sSPA
z<(&XKwj?Q*pYb1&^AuE_0nWtzhNfA;znK_28Q1QnF<5I)yv6R*^|#IbwZ<%{bmvA(
zUfWedGbNOKxv56vQ~<bFIhwMIxD)7&SKJ8sCa6$8r|;CA>NuC^JoObIYnY*#3OhWi
zb0g4;@*`tSl-QjTMJ$fn=Ra+ajcq-`d3PaTIV$RztuE@f7ks%kaHijCz)Na}ER|1^
zi|QNk)%_xNk0<zFTR;Hx$F!#OwvnTxo6>45yQs*EQrj=avZISONi^-)it}-+$uQ?D
z50Z6m6NActh_XZeND+Q2s<@30fP5+$!B2Cz@S;##()I7lOoY`g>TS{yMn_6e2XD1^
zUX)t>0+3l-H8=XA=Z0my%`naruV9Pj>*w~nQ6U@05rPKgxTNyx0lTBD@v`0{Uw^!b
z-FoA{sgx;1ln(>@I2AVkVvc22<o(UQ>>;n4bOqK+xNmzX={W>E0pqq3Qb_@%hTA+m
ziqh%*YV8^rzHANDvn7x^7A0E}0m1595|bAVwmfrWA;zWhJyo2`_RPf$;1mgn7wES=
zweAdh6ocu#7*zv1@VWL(5L=ot5H%doAab6U|4y_BrvJ_vSpl9B7YDD)IPv!2+NZ_s
zJw%$QxD(`t88nK!r4ZO+eW~*A@YvKJo3Y<nUcu%bvaojy1dh5Oi8vs-Ve~1zd{0rc
zq1AHy#V+atqNM-%_7&PQb0uqUY<WT*8v2+mKZ`L;V&n|SGw@%7$<$6vq;L2*BY4kY
z9UJbc8d?LCb_37LagpMZf2IP4m(Q6i!mz;CFDPE2#RZl6o|oET3quQQ9Rw)fFrB(p
z177kn3(+TOOB=E}XP?0y@rQ>lpD{|mriwM5$+Cg1JSa5%$^(SWA&IzAc`YW9MB-*u
zA}nqr!{H7Q%vh1>xrSgjEFLc)GMb(rQ!jI(SS<I%SZhvEo$gU#7iZZ!dvANSE-m})
zY#ZDNW*^yZ+xthTonq8)r%A~dG~ec9mmFsKe4f6;JaZ$`!DD5B7-L(H@uV9UfzE>H
ziI=0VbOQmYBeTV0TIST$+MH%&z8aMjT_LwUMDUAnp&1v<!f~lTi`l2^cP=o)<R0Q;
z2MAgtL+_-V18#M<V~bZsk@zn@^y)t&djq4sZGs)dZ$jLr=Ej^Sgr%5?jC8?CqiXDH
zGOkDR^qdpX2w0=mHgW58@eSgFkI?xceys-l{1ciX!!1Xuql}P;H0c(K^Nzdd37#T0
z=-SFAX5qfQi0CysV^()To;R#wD~5}b9;09Nq}B!%O9V@To$<AcZtg;vIwDa~XVs_}
zbp+*wvvlix==8xG76Gv9MUwcJi^dFDA6?CFIH*V&0vhxMu|60ntS6k{#wg+ymmHnB
zW;rZ$BDr;T4h35mTjWM<7KEw9$jB3Y<hyoJO+r5rQTzJgN9Et0yDtuLZ(`9Scjhuk
zW)L)|d-k|Up)=VF=UwS`p(a2;6`m<#$u5+kB{E5E@bGA8{kdDU5a|TAK<l=5@|%t9
z*b1;e#+DmPl!nW*;v8k6koVZ4Qs=qZFwr%iFD#R>lz{su_HnZmMZdT14VO@)vD2hf
zL{JR5I#Y&nJ77$FWB-zVZk*1l&@C0lYvI-zXv#cUitTx$`QjsE_S{!ltuEnjd(Fol
z5J1M&eeOkStmt+^f%1150?x@ea^pl|1HV*5spAZhiJ3>5_*&Dh>v&JLWqt`qj>Em9
z2mk)^>axDVdiOc)H{_^#j!Pv0f0^+FVcRH5OHim<AdW(byRGK`>~Uo3Q;MhQgrCO9
zPmM8PhgF7|^0p#JzrydbNRyN7WS<s7o$dN#;MV2m*y>E@7bqa?O#Aayql!Gxx8gf_
z5?)9kWDh78kw%|LY2(r&)8cx<PcKq=?Tj0E#~yO(z$an#3o976OrF4>=(i8+BvW~r
ziHaT?JJxwS4=N>;dl_pg4;a{g<B$9wW_vE?pMf1mPSH$*gKF=NT*{B#m5EG3jk~7Y
zBfVQkudICl<9JDj1x8+BQ0$Q0wVk6JM|I-(imU1(`GlXZY!cQk+#L(C+Zp8At4tO8
zN}kI9JO-L|x`CE>yxf04No36Ai*^*FiP{`l;qWm7&i?(QuZV9}1(QiXkB0HFv;2-R
z<|dhF{`XNHv)XVGubH`2K4sD~@sld0vK3jyi(w1|?2)+noxj8*EhfH^k9iZ=&pD?)
zsU{1Pwrw5<ArP>`D@L?8r8feDfGRdcV9Wi5lS95%lm#BCsnXqp4em?xOVK1#6hCV!
zM!gQXnRQ-f|9YMuI{}!LI-~x!dxj#yL<v#)R;m1VX57Z--?kd_I2T#+RZf(9fy)<S
za#=2ARv)uQ%h~QXRaT)oMP3|eRE#%qu^@WEihB+UNb((&)6On&j__xqNh0E|Twt5+
zEmN_Xu@H$*(y~4yr`D+W4a+Cn=POdN;+^H*$}3D@8^-~&717prX9UH%LtRubW+OAz
z1Hc6J5IK{;R+)F>TRpLd@5PL|LmX?sHui#ti0d(q4B{s<ldu-+_`K9Fwi2kDb|FdS
zo|lGf4z`WbG0IWj8MkFy3FPkwT8t_y3oNQBy^nnsKi+Mn^F+mun(1vL0U}FCXe1}z
zWSRAMV5|&r71MP(0&LXZl74PSb&pgsy3_W+69+&f)87CqsWXAm>j<h&0$VCyk<V<(
zj;PKkuMJyS6B22(QB?i7?j*ON|1IIv5fwF1LZ}$oRIM%mx3**Rzqo1IN{<QbC1_M?
zast-gDJ$xbbCF0~_8xdD2sltl?L1Py<h~_v`9R2sy^K?52Q(p(0~dD{lczF;2uR}_
z-OzhyuY%$#*7c7}d$6S{`H|cEmS`5cB=NPmVpQ{;W2uD!aSv{a!{8;{gPz*!2@f^r
z2iGRL#H2O>MD&T;fLn!bOYU0Nt@MI+U{B(|u*D#~JdAkIBZp!ps08AK2F10zEQ}=V
zkPiz>xceLysoAv;cc%a4XYFmIg%cT*By@@!X$BOFqHqz8R(OLZ4TM(QOfQh<pPI1M
zoC71Al*u-1(~3EdrZjqMdZI#D6AaL%l{-!Mb70eh*l(TwGVDWNM!}4?nzD-79rcO=
z(QRv4xN95T6$t|kTT<`6<eV?EQ~5hfdv@egK6LNc+y-L$20TwT&eaAG9u!D}i|itY
zKoMa)f$w^lgf6O3z2zfkM;C{W{m*l2R9Dng(&J8{;VgXhk=Z*!64*l8*C%%36Mw8y
z0*MwAxsTSs$l20F6vo*RRrcrabXE~7x@$s(%NJ)Fdvw_Ta1oBR+AgT1_P+|qd5whL
zgSiB=cw#@t_&hDPnDuv<Nl#CP#iCB0w+Sl8clkq1M@QtM7GDM1f9Dwp^grARSb725
zlZ4uh{z~tm5J(CiWbW`F?^m`Pji2$mO{2+yGD*ItvUfYm%XE`Zaz?y?^-2m$DO01{
zf5oREqI_rfd(#^3{foO1Qhl@cUl^KYe(8-2Ev`Z5nwz{<Xq`8HJu?k7A%m5^E^m^7
zH16F?*W9-H(4(`=7-kGE7A7bqDSuIsFEwGX5zmOj7=6*8o3Fg^(rs<bk_Osc;R-me
z{E(&Ca!)t%@!vax;%O%5Y@>IdM1-tro6Y8CPZLx>ry59aFj;qK_`oj#09Uyj`r4L+
ztX{OfXe)4(_&1~$^pHX7Rn3>rhKRB=TxsIJe&aZ8ukQ5lA=#4R<zFRHBSx8*VZG!q
zGawM?N%5;|z1G(;9bSgUKV*jN->u4-yCGgRUv1FmDD%H6D^re}@p;>^uT&Vb_~H6A
z)8FZg#tluS<T|*qwi}HX-`<?D5!YpR6tEgxS&JEFY^!g!S$S>PJ)XyZibp?jxaPwD
z{tN#J|MVwmITIH-_MfYACMtm(51<VtSAf12+~#$=7cW=l&6TZD0grqsCnMJV%4+^&
zbpr&5`cCVX1cggAtruB7s9rcJlasZ<dR1J__)eWJg~P8wrQZciY5p2|wh6`h{bimQ
zpwDYuXR%tmA~uC9|Ay2jKE0?ucsOBsxOWmhy>qb+_0LZ9=S~D6UWbBQhQNF}08M-E
z_0UGm?@=k8lC(V|n9<JpiG?fB4?vin-!jhVYs$QLT$0qkmPMa+H*aixu|k6zE_lN{
zuz=20^ZK<z_!=)ajalC;!s6B=kPHa-fp_j=x*H^X-m(ko0XJ@HBqapqb`5FtJv~cu
z_WvByzdAO@*e~<R`WrCDbuLvD1|Q>+&A%la^r)QWVAFYccewQ1-)9ZO&Mhy~+vHD3
zrmaED8&{kUUT<(;?X)+o>^FVrW9+XI9OU9T-cj*&^>0-{J<t_3mzINpEI#l%uY>!<
zN2iJUb@?l0{s;N2lYRBSLKc5G167}TxS~RO03Jo@S35QSyfgPAnYL~dbG6+{L-9}l
zan^6ZLh~o!f#%<hUV3&6*Cu=K@RXWOdmOcYzo57DTK_m>y}Y&hvTAqY-^qA9DQDX2
zV35t&a;j0Td2Y|(?06V4*86fP&|ET%{nK6QlnlMjz<k5s$p~XygIA<hI8@6R{eu=C
zZB9s`v*D)|7Zx5-vm1f>KpR@F7gi1j%g;L0UZ%#yoV^@asN>){(UJD1iXydWq9#ds
zqvvmk1??&cw=(4}zNS>735R`CzA2+lCP*`R(OtqK7ZlGyvPGR1mi0%19LwjQCw0?i
z`IE5tWNk5Mm-NAN(fcz^U10H+^4Gx%R;YxaH-|TAUF|LoVhDmIKzXQ*Dz68_s}hH=
zgJeU;R-aWI<iHH70=->Kz5DY5+5f>W+1PZjaMKrGS#lEYpR-t={2V_pw#w@!tM>Qb
z^9}l|5KKP25}LI6>|Pfw*gyNBTB+pk!M>mLP-y+cNX-3K6S<o0#@_=c&z|M=#8*}Y
zLM<<M06>r~4sk0sg6WlMBuFQn4+rW~@YT9s%*CRSWi(N)uW=mI(`1%i(+wBrA8Z~M
z`RLB%WQ`xZG)ef<1Ee@+*OI2_ADAb#`Tst^j8w+~Jpuq}11of!n|DlL(Cxx5kv6`5
z)jDrM84Wp~iS?;G|H`SC7n&q!uf!vV#^2}Am!nTL2Inv0`TY^AI~#dSErGaY%t$%V
z5k1#@+j{f(MnOr(&feHynjhbfY#xN?_SsO=`cNJJ+SD=P^9%h{<LX**|KAy#MK2t-
z&CJEuUtz|kf!4QRtp)mQ+Z!T(v#n3ht%r(FV_?*SD&OZz3djD^LH^R4AKwcaxnXqi
z%W2=VET^Qu<k0N)pUX|bz@_>&DriZqq-SwZ(s{D_>b1AmO32pW-SyuMqf(xA$mH@p
zV`?$TEw7kpPGY{dFJQ*NuNki9T{Un;U~SL=#HKjp)Ik5QK>KVsZ7;?n=;WnrOwUGT
zEw*%WP`~Q($Yg|JE0W~*cD)h{hlUe9U~&x?#Dfvspy4zkBmM()W%@m7Zv1vp_1s=b
zSAlC5!UA~&lqexhW*rsOe3e;fzJwSWa$gPTj~QGz@LBB@iRr0$DIT<!$?Xet&U8sL
zo`lcu9G`wR8Z=$_H17|!I`+Cib}M^tn8)puyc%}NHVrIGZ<9*8uvPEtJDsAuv-&cB
z3uwy>v=tkV`>99R9?D)WDY^Ispo$lUVLNc|oQXC8m*K>keRHV(klolTc-yNouS&a?
z<RzdTK!fHLo2upHFs(e8jyvCXHq)6L^=kX_FK>O3eK*(C{Djlc=L|HoevI%j_9&TH
zoXoTKKbp~AehxGSP|)RsKb{+PD~kfFg9fYpIeNM6C)HES4>`vU#1~DTZ6?C}Uk>hi
zoxe5Q$sIBs?!k;dEb>QP$h~mhyP&Q9uks7<09G!KRx{76uivRYBN@+3_<NBvXmq+V
zTU$mjiHS2cE9+RC$f=yD%Jep0E^8`%tC-3Q4E`VcdBer~^Fg|?`7yG{tWF^Dzz{w8
z@R`en|7z${m*Ow}7mBl@*_UeyayhjZH6*92KX+3PCl~jBuR5)JfBu9X`xiI7_-icN
zeDGSy>eJeTrR=WFP0F&S>i>8i99&(VO)of{^j<EM$|vp6Lwsf$JoAbRNltBIK1-(S
zorhlSa~XDWU$fsvJBj$hl7iineo!eZSKQf*^P}kB&zx6Nhv>WS`GM!nw^kP|`kECI
zFG!^!K~29WW|#k>bbESl%@@#(08a=4{ZEm0Sm_tfs6@YsW4O<tQcg4gO>SCdg@Bdr
zh8JUhpkJ8*=?vaQ>t`B%UT;Omn3R44>DW#l9IcOqz?C~(WL%>_+(e{;C^qdDP>Qyb
z=7;42zG#Lhrw3P&+Sf1Vgp@1Eq3@s4qY~{S_Wq|O00|lntJ3DMRkF1xlrVDQxMZ}t
ze+Wgfq-g`Ciba1Q38m5SkMtZP08=@t9Ohi(w%{TeW&57H{GAYxBn$LN2J@WFwzVdF
zEYv0xEUWOqoOUr{Eom<8iDp1sVW1Zvc;@!VexrjlvfXCfw*BK0hRq6|lbQI^J(kwc
zBK_v&^?3#6t@Wcz+TSAkN%)63rBWd9#y)^!;&Iwz*vHWibL)s4zw;bFy(lMcfU+yS
z(*sp(xrI$1XW!G>eW4<aia=*5tV309t>Ewg9Z&ohPom$msS<IZ<Et<kUE&W^X^xup
z;r=CbIfA$j&?O!N*a9sKz;d=q%nf{WpmVCHo3~Lmp;QYFMX`spfaz~rO=Q!)r1Tu<
zQ)n3T&P4Kx76K?^nM*3Ril`-k$G$Pk%kTfoPlp{CgdFC(4|(!#7aQ@m2S#sO0I(4g
zWfp;q&9o>LQ6pHyWk5?$$u4YDWd0TEWGNwt@_NnOG*bieWS74uiT+LAH~lx*gZxA8
zW&I!$PtxT;gSgr#z;03;00+nt#{OImxlR^;vt5^tUH$`8Mq|^!=``3MdQqAG_xrad
z@E8;@wEFL;K)u_{?-Zjla$Zh33_fWY<*ZCw(!LKc9cX2SB3iyQU#)j<Y<tdM>#tfB
zz%zw0FVdNI?GqOJV4A3xu|2;~PqN<6V-D4}4F&kI(EZHKFEV3}D?g;2M~$~aK)@)J
zFqz%nP~`eh+R`H?#TUQ~>e1BZF2J+rmQl;9<>8;>yet3Stf&`D@G_-;^5liU;w$-F
zDYKnOF`Db}(nh}T&WK+gT;XZI%9YZ8z7303cY?T^s?4oCeg_~Sl8oZchZA%OLjZK-
z@%v&cfK)xFG&D&=3`N~`D-ja~#s~1qVVC5H`{It-vbtkYsXGt>A~3&RQ1uT`dVpIC
ztcf(*Ik3`$WdH)*BZ!*Dl>EkMx2*@4?}0ksKj?f<DA__2hF<xVj+28(il=udi;KGK
z;=1gHy#$i>YjdCV-QX`eAE>JxxZE*RFeG*3%+P^<1|s1>s8;F&_6t3z@|)Qj6{&Dw
zDQ@RIipu7-UjZQEs0?^CS%vD!9c4R5Qc1SDDrqivg}2NcylzeDlo48NB-c-sJR+4E
z4Y;{YRtz#2ZZHdA1n9eAy`j-RwVUeSZcNwV3rIH?I&9c@UC|JybWrh%-{R(TvhnS7
z;$98FsIiLr0yTTjP%MgK`9W)9c@NRl2b7WLhe9o*?cZU4NWc+zfI6e}fIbV2y8R#F
z8{jf$Ze{d5d8Zf_t$g8th<`x_P)T<-_8-^gXjv_{0Mza+RD*8)hL-5dU%ORLmG}8g
z*9|gB*ub~>+0n25^6Y2*y@e!TuF9e1rMW2@Z6rj4&bFvRTJIeDIi@|mkIsu_&C7|(
zOJRxtNbbbFt#TmRmIJ{P<9i~b`JNgm9ZV<?o%H)T^>ZZ{m`s4#9M9fXY{@IJXC$?f
zgNRcQ?Y-sN`sWa-Z%63k5X}il(AeGYA(cjaCG-1NUH`H~`h1R-vprZM^MvaoS@8M}
zjdUdG(HpsEQS~BK&-F68GCrMe<s|ys_U^w`)W#sSIiOJMb_HNEr2Q77in6b&0b3nl
z)ZBKPTPxuZ{m<wQ5SufI2zwiVXqnM}vJ#^qJ?VE0lsc<lF}M*+qm1#JZUG5>{VQ^!
zAwfIK3rY3#4H&!5z~Rxa(e!H~<9dD1#cWz0wOdoY5mJvQVwm=tA?tTF{{%VFv^C&!
z<Zqp2orq2X-$mMQ{<zwqHg}_r8+dg9(44zu8ygjcEojN8)XZI}b8tB@*E`TL+r7fS
zSutp~dL5FJ@L^`L|0TqwBGh;~`{#SlRui}$7qQ^&<yMT7qbLpk<y5&6@C=>Tl6ln7
zdowZcz|`~D_e3`x#t94oz?pN!;(mu>iNsqGVr^dg!~YsQ&*tQxB_LIRg>;J&n)}h~
zQOs&R(}`ox-T5q6y={Y&#oDDnbhT8J;A`)VwCQY!AG;yq?ri;c!3+c8ptGH-Q07N(
z`#b~~6I;B=T}f&>y8H6~`l^RhJkRldfuUG^w4>W0&68-*7y7lU?%|9U$0<B9sCT&c
z=G2=9<_VV^DmnmMdZpz(_z59;<3Pu7VW&qnQ9bzW*^m1lci~FHho9<|gZ++V73JJD
zxq>-CJ;pY|6px=vy|AhaOzb>)PRqE)^u%mZ{}z+ek}H33>Z3ajjc8BTe45`=%%8Lg
zS#9!})Itfn=z#5GQelw?&-*}vO49+<90vum&Lh_#)34_<F%Gp#?svQ;5(5g2RU_gs
z#c+ux6nKuW=5rEDm;4$(2rILukbI&_`X()VU!-aJNF}3S-%OA=s&xy4IeR>HFL#@3
zN>6&{XwW<Y0ld*AUinz&s#YrZKUp9jKN9h5LPK^MT=z_=KNG4H37|b+(Q6PDlm|Ec
zgXck!pky+M*NHM=J9OOBv?YfGXN0xH3+s5y+#D6aa)n5zX;k4=-V$Vh>b9q*duFbt
z+OaP6hh$azwPPnxH0E*+0iJR<ge*hi7^yAT*Y<ZM&r2^r_rgo|4|QIOc!{UI7aKZM
z$ASQI(?Fa>fR1}h@|xZkFSD+T%ypNlQ58FpIPH2>&!y$H4=eR=*w;hrWh=PH{LaTt
zu=`c;oh-dNvdw~l?e~RFmj^rmQ0^i2N*_w2B83JXXMFZMZ;GmI2I_m&UPAHZ<|l=U
zoxvKiirD<PmtVNs^kcP#{=#&6N|jnZ@VO%pqou#l4Y%I5*dF>C5&mNEOXNN^>GhAQ
zk1^)&(xtp>2IO*rawo<WbEa5-`N#p|0l?&cEV?@Fy|*I8UuG{Rtz@3k2M+%^nb#^u
zK|j5{4Sq6n=6H2rf~mWc-)bAk<9qP-pG>g{P|vO;lOx87UbWcarT6!=bvVz;3YS*#
zg;G7xDS$|xjP9Y!K^n|G(cO<XEG`NhIQIjrU;8y%$EjW?rfG7{QLTMIu?p8^{is#|
z>h)u0+oW#y>X73S^Tql2r_Fkr7mKG<W!=Fq1Aaa0#auPA%%d&s3<vr9&1k;U;X4}O
znOI4GR!zXGAWonA0C(5hB{VQFz(VdN=s;Di)qqWi_>1WC(jV75F?Y{vPbwXL{J0t>
ztp@~L65W5@f7>uL6wk{eVW1nZ4X3Jo%D{^%eF~q7s(s3|am-{t0vlIw9zygA(wMn=
zk{ufst3ox3G`++|?Y-7gd2KeXzezrJ;{Mcy_zsx3aXlH;E6Kp{02jHpxD(27>LqTE
zV|Mx#r@DKgw+D9meuX)JJK>+rwPLlBLMJpgf81`0=-E%TQcPd?Sg=HG6#Urok!&KI
z(+r@Rk&G|reW81B(23Je$aZneUR>L%ypMdkQYoZ)!(mzL;8k7%Ti~U{!3-n*Ari?U
zgH{;RK;2A7d(&O`DNVZYgru>fm)Li21lOP}o+s};==@ZVub+o0kg{f%hsmkFsx)Vm
zr;hS#DL5U;YFHa;Zn^%QtT`tSPI6{$m3@w%>>YsTA-?b674t?+7iBJ23BW%d|NSg7
z0u>=MP&Ut#ha232>B*vDIvOwQ5#NtN3&+1683TE|dS-`e`jrsH81MF-uH1#*n+N#g
z6vnQSRB7E^*l1y~+OIfTh{iE6mo@;e*K0E;ub#F4XwMv2-jB>nwo@-f41jt(bLgQt
z1|JsCT*5K?YekpU>ZW?;d_B$n#XP-4)8AFvh#kh)9|mmGV06ylz^+)A-dP(Nir88C
z_1Wl%_Rk6NX{pn%o4OGDv7t7VjEP73onFt9Kz=ltN%MNUzNWH+AYdE-cf2yH&Fo3g
zTzdByS^`jtcaiCF$PmSB+i0~o)Ra|TYe>MeB)vnBc+Ecz9w<6{Gi6}MIWZ^r1yI|X
z&AWXKt&wY;#z#*n))g#T>p9frR<`c&5%C_eu2&6|AwIrubZ@AOHGA>oa%lkA;|<@N
zwm}C%$t&0*jGiYvc)ko}THJ2@ATi+E%%2mrx7t%VhoBov<NLLG<~f<C+2=yrn-(0T
z431+E`)K&Of>ZvCxV@gniMdztao$IcUsBpr&E`BMKXw*C$H!2o;FaRO%aH)m@diSw
zPGZH5ptJ|D=`g-%Bu2X{Q_p+sdmsswVdhc4PLFInf~;%}Sz9kzdw+0;CRnoetxi{^
zLR6J%__Zqa#G{W6N!Iz5I=o{BdopDx?WsaOB4#k7wX}=p<x1^yZ<v`c?KITP*W?oK
z34o5zr-*d2?Z@u{z(h#89<VQtozlN(I2Apx?f+7myNG1<ySPeKn-jQcFPU<H=l@-Z
zEmp6R3)c_-uwqzc&7dKRhYOEmw8O`8j|vzwOMz93M&?u#8NB_HMY7rrE8DS5)3m=w
zO_L!?V|;{qU{Da~f9e#%&?i|xUn9mc{;>(q6mp$r`e<3RAx<oUPWll$HDA4%8frXb
zw&hCYw<V!9mkKQ@%=8iG5k>2xc*NfAcCT63FjAYwc!^1u%7%x=opW18Fq=`HG@2hP
zLn<AyWgl66J#1b~+nNJgOvel~CxcaxMMnI)t8IOYhl=WBd>GS%rEeyyaBcl6MkVW4
zf`>v?Px+=yK7YQ2?Y%Pb0U1@0a9IxT3M|v!Xg35Co&7}@n_<VltXLS9obrd?lTQ1~
zU2fGAhzjds4X&f*PrCcV2f~u2@MYknQS&sG@r+0h2HIbR1=MgB3^092pmVyHef7zn
z)R)}~#ewu2531%<X|q&AUN#HIaBW7Xi@o97hdhlgsXxte-M`m&jqGyX$YGWA(K6JI
zZ&YxwdEtx)QV$Bh(oz{nv&qUCsveS_M2lG;UL8IYyT~+Ocz#&=XakymwHIzGDEE(n
zXN0T0mjf03$T8)giL5ba@@0P%u!<}3Ar#RfB6ClU5z+JaM=Z=Z)H5KOhVc3OoLSsa
zZvOYj$>*&9)fm@~@cbB7b?E*MvmQzkINz;+q|w3(<FT>Nfqp1qIw=(#k6$*v#l@<i
z3Thmbl9RvZJRh%3kkTvJhXl=9Id2lDS<GjBr>hbMAKuGL(NE$W#Z2q=l#GkSJW#RK
z?7K8bU4!Xt^LBlC(ruT&YHhxmxrsjM`^Wqby3Myv`F6?EIB4jq*)jkbhkE(?{6DhZ
zJ)Y_J{~zBP=8!ps8nZP;$tg)lLphZSMdVyLh7faT8*_RghfyKrEIA*_`FsrJd_HC7
zd^V@d+4t%FyZ!$9{JYz2kL$SWy7qY74|n$E_a_MB<GrO%jt%Shdn?Law$c}})Fa*H
zKb5FQTAofevmkGT!R)m+LDC=kn4d}&RD@>Azr?qt_xduS6nC}~mc>EHi4#!Jl?xyS
zPzZe+h12~0Nw=K06DuPKslK(2BLy|ALofbq+dBlwR1iqjCJ5{7DwF8%<3zSujkwwy
z*A}hyU239+{+E|$5!8z4Pycq|Q6;KVWBi`(%s3C_zy2(3<trC6P#<u1i`U(6l8^s-
z3!AuFB&dbTA2?`pGNV9v?Bv(0wl}vSM!64hmu`Os-HNh48gy^_?=ji<h}woby70z*
za=ZFN=eu&Tx1S1tVVy;XT#SqTV-y7m=)T0E=&Z+Dd8`yS;N}Z^l5v^h?q|~1Wpgj2
zvR~i*U@dnss;W!_jsoq^?IupvV(gpNd3>_3@{mo*Cei4NJ16@{jeo7hm1YOMBd06L
zif+pPZf$Hm*8BSYA3ZVYJ>M&cK*sEh3l=_XxNbSSypQ%^Ld$s3cfj_*J7+Dr7sKFv
z!u>XEP%(ApXVk802_XtoVbXbUoE04cgo6pr=&VJw7$50LiAd$W5@4#OYL1veoG?9u
zn_*H>0~8`g6*V7cj-$OUsTl2Q`!-{EN0YyJJFC)qe8lA&d4J^J*m7c^5)g_F$Vu_{
z(S}}rwLKRjU7p@|vcUSLUIjXb`F-!PUK7)2{=Pi8uw=fCvh5}Alkc1be6`1WCr<z3
zn(k}7;%}}k6X|S4_Cu}lw*$@o-bufd0_m9eSL$R7;yal&s~3HR0MC5-<3c^8ByTiW
z(tVrbk$cLY%)2bFA=Z51@miJ_v~PVR*Ob)DdV2V<3tBvZDb!r+$g(XisEqA;r}9ko
z`<SA`HAu|jRMX!&JiS+<*rYo(e&pw0bv6{cz-rU@5%J-CI|8FKiaEJB+~rdMa=>?I
zSNwj=4{o3OTW4`{a2PJ_^SZX@@6P1lc+~1;lgA`fo!d!O+ne=$FAm#np-5`OWv}g!
z)Al(8AAb6;(Bf*RlC<C2{mR9`?XhIqTID9$ZKAic62}QrpN-Q33H<q^$k%ec4TQW?
z{XJHu|8k6AFY~YaF*Q#&v@~u$cy?@{l=c_!r4SkK8qCZ8-}%HTIGfBJX_I|@6Ek}$
z&pqTvmsHQ0*f}BO6BGIF+iw=%o3?t>ik637=uY5{v#h&ysd?(N)SWkZ3xDpvne8IS
zE$02Rcu=|SV;0z_n%oU^l?&ZeS~aR5zv2}lwDuHIz@FZHBqy_4iF|dWqkbcpxYBBT
z)0<X2h>h7^Ayh>7wdD@+%**?nL3NlWUUkf$^{dz2+6}p}z6-=Ucbb=+7-(X$VD$6$
z`Dl`un)$5h$x$M-FPmDJUQ1T~$9Usn#TQil7p9;7#l;F1=kwEsMm`;I*ik9sfZD7~
zl$ptKjCYEdc=_pO=N24sB3Zr7hl}PW#_y1X$0ZiE4_0Wk)F;w+aV)HfAIpCoP*`j+
zPl`6*iKiV*c>hNzzGmGWoaq1Br5kBzw#yirK6bh{c?8=_ziK#c2)IJU(|Yvu@yDwr
zt2>&jYuP4PPp-8ScH}ti7r1iCn?w9<kHF~BvJ`dVk<+6+9iBuE8P!sE&(XaBVs9RS
z{_);AXbCmY26&y(LIMVk8#51j>wpFTKSW{oWVah{(u58p=WS0ushgC~dMfOnId>?(
zf7RVPhOKt7bSH1^tE;&6*fZLQ{>0rJ?AWSRwD^(Er>%x$-lc@{1cclEv1bvXZQ`M$
zX_M+l`$Lo&TiR*&fo%BIP!}oVqny?Jkx7Q1SAu-AF)$7Xw-a#(hvUwD{oY*aI+wd^
zVa>m>Ypc1;g|Eja9v3~TIlxpC-FW#NPhf26!vqY`?$#RkU;5QQfkxrWO#S8i89?j{
zXqSjxg9@t!Mnk`IV<m|Ri2hGU)SemKw?uDwJ;3VZscqd`NCaDcYR%C@m<i@U=;#1e
zEza(!i2FTRhp8zNiXr^l;dP8D9_#9i+Nb4ro|sFg_dVUJy&CVj%khc=v;h}<7?OC~
zZ~o}3aRxyV*NN@5v&b1>ON_olw(i`YuytJ4xV0Ccq&B|nIC?cQ@3+i!43+TjHW#e6
zPJVG)#AP>ebc;jFHe$y%(4cs{iuvajpX~5HfROt5h5-7XGY+3%d(h-)YpJ68ea#XB
z2k_Y3+!b-Qyc~J8IHeV+<E3Rip%cJ6t(#RW-^*fQbbl>B?qHpOA-BgAF8Eo_>j#+b
zIUPJ*J$LkPFODXqh1IVurkZ)B-w}Rty1M*=jma7z?r@Vuw{(Qt=$<{JE^a#*U)rZd
zZ>FH<ek6bLifZca;8^Vewa;BXRy9YAl$<QWTlP$nq$&$z2Hp9*OB3a+y~o`(e@!HW
ze;<sL7!dhH{$~)9pFXkT+SOeKG=dOp4>_|KHp%ct3$5NDu?d=@uA@vY9eC}uejgD3
z(`EEq!q)5^4OU35y^m9rw|&k~xEO8n5vS>>vSoI-nkX?*-#>q|0W_chkhAx=qClPK
z_PwA`UP1y>T8Ef1(1L(qWAw{I=+!Wt!kgU}AIuGkf9RxSC{=iYM<2OH2QR1J=6F<r
zS;Wvkbu|3&)P5&G>wXud!tsIdxM`HTS+h7w?Mcy-kNjJKnkLfuvDFc_<YGk;LU821
zeOHRu>8S?-{~sSm`1Z42L-BgACA(UE&%fx3e)lTV$e^4dagr)vhL?Ri%I1PNOZKf8
zSm7wP=im3#zD&57^EqeAmJS(Rl<fL0^PyV$1~*v+`2!<W`PXRF{#G{q{_>^Y*-vPB
zIb`y(Q9osYpe6IJuw1X^=kzj$obJ4Ry5-LB1uhj!wVDBGnd1R`c$D$$t=D;l7(N41
zVLG8W@^+#)lK$CJ7vK_(h!!C1SFXAb-D1tl8Xg*y5a}uWyz^QC$i@pHZ++>E{mN$(
z^^6R}guq|8DR-pW#<Vj;=-o;bZy8-nBin7u@5>B&xXwLoo2S|nZob(Lq?>tRIe`gJ
zKQtk8{Jc(kmy0v~Rp0&o&bAw1ok#!YN5jDQRs8|HZRYGrHW7$R2Y<1>1S`Oe&~SR$
z3F6ttqk48}AN6lnsNW7`wdz@s|9A&|?egQk7kz_EcOp|`HQrAx+kF#9h>T8U*D&18
z#Mc^)%1G_r)^jX#4dOCb6-Q`E>`NsoifHa-m?!}a(8JsD+wXp9k3K;cbY}IvTYf!}
z$pSa%Ah~|N4HE*l{d0|}&d${T<%-=xKl1EI#<ob2?7BmEz8k9={YBf2%C9Jhsr68U
zDqbzPG#MC+J1vHm_Km3i7;1WmK78GqBZ^S(RY~xw_&S$eI+{5Tw8#KY*x1II@5?>X
z2vJKAH+eDO;3k03k&n`PJN*(2Kg_Q<%4QKuTDE%oX28IC@|oSjQx*7~jh6(re()h+
zKen&8h0?U+CaZob3?Axfamr?Gr~e_FXy>A=a`#f6?6om6Rp2%eOMkQWXJF^!PZD*a
z1wY-GgL`GBTl*VV_kwarg&F(meXua}mHD(g(yILZ9(_R1C46YJuMIggN7xic+dtZ!
zPCk^ciqmr9ks)^EgWpQ?$kB~|h1ab9{xk5_v#Z<SrTI75)E%5?h2{4P70PhDnmKC@
zQNPfTbMl@9;(OqdHnw}6coyY%$$~oucSaBd<r&;7-*r{ctNrMkBHb|^JXD5}p4?(7
zFc=uU6m^9VTM%p$${}K+cpH*@w_0a=p??iX<9PftdtC$SIav>x%SxZ9zIDL+94TIA
zIr>P1l=%PwR6JUMelo)AZyC$a4OJ>Y*B5i-qzQ$}?J;(J`SsEVd-Cjfk^DQU5~&W4
z{~(ybCO1Zy63dohaJ#VQwAy{_qmKa7;U*hPUvdWwOxO@KNxiL$U<6ci96r2mk>P?q
zZIj;e_VAlejWfcnjLoTrS5)f^5%gE_<+@wmJu=x^Uc}ys-MzGf8B1Je7SI<acweG=
z&vvRfz_PVNKDbpNuY-{~R{DbKcr&lE;8mP>@2}oI;U?fFHvawY_sWJjrhyFsQgfpk
zAX2?mS=48#qG>THw(|nwJ45_eLeX^bH%R~CUN)(4@1YrgLwy0rV!}mW%vs2^PxXD2
zBhKS7GfK1MjZMb#ix<P2H@CDvn@8;O@r@0G5`l)P39v8AFLPI=xVUonv-SIK4qb$Q
zJ(x>tE1oQk7uTy{g(I{Ew(;2Q(=(PCo{+lwrCK}FX<rTgL#Mk!9qw?Ha;c1jRUm{{
zP}tTsCQl1jyV6K^V$a=gAa88&hVSYsO9lxK%T^1T$$ajTBZ!|1s!f;RsxJbWi`RMB
z9JPSfjg8JHmG~(&sB^9THH<z7RU$k-6V69#2`qN%?!5nip?t}?-nhHWhD<TzPx^4R
ziHo&1@)Io`o;Q~1%fnC*?GpiV3|ezyS%7r2Ij+NS@qt0$4822sQAUGQ`nwYKJn=du
zM{Csb-fdaP^4})-@V@W`YzqA@VV{<e8N?f>T1g(tJH*hOVzYBFtsnH_4V)(3<tDga
z+TR&2TR1I@v%mr8P==r%o!H4Cf^S|4daJbvy9GLCvFm(S`VM$^C4q}~lmLgQdr8?O
zP%2{qf9gg-7+TbM`(UX;;6TJ=^%><4NYecL)jIk<pE0XRy7mGVNyhh!f~qy<_dt4A
z|0WY}2wuop5#3|F&nldhkf3gNJR!!+9ebDVv+Q(|!^y_rl~9$R&UBrZ2!{$+7>xxy
zM7-DeO{$Ck>rh!X?vQ7zH8OQhx%_m^D?*^m6=4dF@1MFPx0VOq?#*{z*L!VtZRi_r
zc$JS|Xq?jKw{UPSeH$R&dS!Ju4?L^Rb+O|G0mD2CZ_=k(%VdpzL4c0+*3rteR)&J*
zZHD5hfEF$2uyc|4r(4fBY_aZsALk_r^F_*K>vDf}c;w6;^CRw`kc#e&O6#o)Hk-|%
z#y(CC%IckP%!C~tt3vdDcCcGq@-QiUgmqnF<^&JSa(XE37(9c7qF0;D)_G<51GDb1
zw7|fg$Sc@{!q8m}R%md^Z2A6vdwODG2#f#S`AgT&-!Dls{~Q91$I+=}W&~>?EgrF@
zchEBdQuR}+-*Z7&4TIZiUy^wTwB{qlcL(sEr+G+LI3}mcb=<jGZXQ7WQTC%e+jO}-
z`*Z}x*Ow_44r{`Jy}x^6eoVPSG^0X-);&UM5bpAzO;~j<Odd3~tK59A;LCvQbW<w{
zH+j(+u6HQH#ljX~whv~9@`edFEgzS)exTchMkFD(9A7SrkJ6?pFS&dM$@!%jJ!Ucz
zmR$3?4>F*8HTxkHFY6=%VyC;8D|=l|1pU;L=8<3?+w}|*oi?{X;;$&JBC!RG-S`z0
zm}lYvEw$<tWi@bWiJZK-R4W49A8^z-x{RRM9>Q2PtJdpfbT%7(dNslLNGsx;>ui?|
zmN9y3{K@NjjKw{r@l5|24P#)TRU49D=N?DlE<UAa@mt%bC8z~VG;vL%;0q)#mWG+f
zGAnP>`0%2#3_pqEhZsO;s@Cs3s6mShAsO<JwPJKpt+C}>?bM=0VnTb-r3L!I){TD1
zf;{!&lYCpaX=wG&@K7n{)Rmqgfp;19fF<5iu03-=^MPl-C+#^?lsi>h+vJ(mfCB~S
zCmS4-$ARqsp1Qttr8R_q>u|8}7fV1M^~K<hM2Dm&e9x!VWWRC>dXc7|`&#A`w<Nr>
z3D#tk({$H~uwnl5Qgh^+b)GY|Z0U*fsfy;iat--kGZb_fnqBIkLtW>&0!lFMUd6Y$
z0$7~naD$3=H{)PNNjCM#=t%E4ah4GED=b0$PEOPG9yb^&!PY0a5}(fqDZoUwqFB<M
zD68mLt)EgPnU{nc2dVp$XD<6x#smkpbVFl`j3=G2WQ!*XQ`F#SPj>7;(#;GkS>?PB
zUP&&?o9MYwn$UCR2<dg28D@uL8b2S)>I%kiylAwkRI_WE7uKWd63iY97RG@2aPWIY
z%GFb-jIqphXpg{F2DVT|UN2QTm?fyR6ga;eV*IEt?s&G_cIq&^DhTrqaQztlxB+B`
z2sTQ{gL)P<`+Se;ni_+lx$^fQtu4gK^^cFF?z}o230o6|+3ohxpEU=sZ$4<Rp>Laf
zcm;$<u#O!vgu_0yVKZ?#3^6pF7qN67RbK^t8vCe8B|ZIjWqtob@!9rj@Bfm{l-})b
zW3zdAkNwkjny=Z5cx%Ku)HN*dtt<BMh51!6*~oF?!r7D`7T;XYUHI)?xe<T%EQo%#
ziIQD@h##iCsQ*hiYm^-4{8<HgBQk%+JGOCEeG3*}d&lOMh)(FT%yIII0qE7h$4L7T
z;||oHIv4f7VW`G5pJdvP&+=@tx)9ASS<iJ=$5mIz?xT4o85FrCP<fJ8*SayZfx4Rn
zOM*{GDJYm$O<h9MB+GrL!&quBH~}-x0mls5V04}3&+mrFbukCY9I({f3%KV;eM_8C
zPtCWKWw8u2S(ug}>Wb{bc<D_&f~n4M$R{oNy$JMG+M!br69u>prI%)zWc%`8A=2K5
zzm)pS;69AqWDE8GpV4QdUyk9y$NZV;+;w=+`cp&ch;$G_->oKk7h66hO128PcH3u6
z`I4G&-OUp9L?!8Hq<bs_!dpSJg=CC*UU8zw7HGx}zuQ8lAn(4sQsH@gFX_a+1jIi9
zw)<bshZBzJG^{=|mB280s2Zve_ot|JuWqQKlr3=lutSB>c&I51<o)Il(rS=7N&8uS
zhsx8<ipn;o*DQ@^3=FS9)3qye;FJhbL=EZZVni|+Z%)`25KRD&-#X%Wgj;K99Njy3
z_<AIF@b#448;}fUV2+{?ZOgfQeY$8qKSNgb;D+rouf?0TlFdqXOZuQQyobS8pcS0>
zBqX^V%@U<mKJE3mijed{S7amudl)W{VB~fy4N$Rp4=%2rUI+vA(t7<;^Hy{!%1nLp
zeh>q=s59q%K!Yw4%K{FzNpLe26VLeub6}~s;FvBJk2vwbtJ8%NdFXbT$eeaS1Rpc-
z4l;ewDkQtgl&zv@SOsEa74$Ku;c}s?ID!Lxc^idE9Jj%6dk5ZQv%w}E;jeG?R&PL_
z%ADZ|ovrT<EZH*O5^VR)_bh^lA#r*Nt&m5yONC0%CuQuYKL()Dks5a8=yPYiPhbYS
zPVaI*27(6n+nK}7!FyZKkHp#Z_vbQ)yu<ITu8Iy`F@DS(*xR9SkZ@x(mvQ-ed~(hz
zbX0KI^W&CuBQ>Jze#|=j9vKF4V#{4YJuD8CRuwi`)9YUoCOa!MxGG}?f6;YGRo5uJ
z4dkNE|M~eYxskdQsIseZ`oHlU9Mh}6ySw&d8xT+rRe)yU(in@Z*sbOjW;Ah+i7S@-
zRL^!*snMZ2S-(|fLv9@X$CRr-mP?z42`gt<?}ih@Ha3KrP)2dn1COldY8JKd#jr{$
zzsR1ri5y!?uXIqX-}L5n#k<#e1h_V8*H_LAPj;Y&*t<WCMl-;E5)Q*su4M_{Yck!U
za?Mr0hur%v=@mS<*5F|*3f(vtjP)q(E+g4}2V2$%HN4sJswkU7$QCS6<lO5{^Bdf7
z%$VGV@Rkk|FT@lb892tRvb?RDo6-*aZ0#0T%XY}BzM-Ei6gl!e()}n0e<_f1<rxF$
zPS`jFt_6o&vj{nF(bDu{t4rcY{)j!j<|QI|)p|j1>v<{B&awSIeDBL{!UjdLdPzDY
zji!xPDWb_Xwlt)hm$w(KQ+78vdTN8@@~3A5mBfQe*LRf<KBj=z560CwU&yRYwz2$_
zmOqAQxQggyEquk1lDABz>Ydo~ojF$GMCt;N-tRHKHeH=2unl%#Bs_3TAC`|>z?G*O
z5&PKNST)Xy>8Gnw=_}t9);y4a0bg~>N^2r6G=TYYxO#2iVwi8;bNwQi(#=q39vX*`
zU<-L3{ZL_n<T>Y|M3@MgIcWBQOhbJbcN~VpJ$ZVB#aU`zcnJ_ncO;=33^`ZGp6M2)
zlT6LO!R%f;T9O(hI=IUAj9oo57FH0g`Xcok9r4e&yctaDS5fEX7fuIivu8C<{58(c
ztyh3I;N~f;N01v|!S>2^Z^m1%a~=<i;xXWDWd17<jsxZwIDw{v9FS!bxhOE|=Zs*_
zW#9;^#SN<j42R$iR7WS8SvC|fBcHjsTG<b*C|xJ}{3`PD#fpc)OqiQ34e;fz&`<9I
znlvl<oW&mpMX-vegWM7L*3nl@rt8QylR99!c;T3#CoT2Fzhf3xDa!yOQ{c4$-fn_}
zA{|I>bp0`4M^Oy=sJB%lwDXY^C#Ic1nCJQ?X;Qg$nUDSA(DT8%w^WoIG*`dsxqy`L
zxUqeiJPrC4d>%`_*p>wTbtpy)>g~T>Pb;I`hA5siIlFI)BACM^F*{*W{={R3I&kg#
zCqV_!0;o=0=+FimI||-}JAl^XAC@Vwk{d43!NIw!!U0M*{R5!n$tjR5kw9-W*R%`y
zy2~n9#_u-?)?Y)lnISpy?DmN(qF7NMvEoAPT}mw?-^!LJ02T_4I`Ji90vANa>TD5p
zmK0c;<k?k)VONMji2bN)b<rG%?P5bPt(8XNz!PoRswo(MzVoLwob$k?GmJ@;Yn<vB
zfFd}o&reR*R2D7=l7B_ca>c;2N4Z&2F0XiO-OKjry}81J&XAw@b?=bwnjsn7?_ks^
zl|Qo_4w^Cyzcnfy#tguJe>Wz<P#GWxchB>!bGF{E@+Y;SQ5Qao?`YpRIRyV&1<i4C
zgU2XH1Ww5k?zC&NFYD(G;;(mA&)#KAjRG^>%QrXf&K_+h?h9wJF_)GRI(hA83>aHt
z;i{Dh_3KdgB5~mdE`fa58G}RDITd=-tw5$&ZS6;eh)Ly*o#4jKBzW6X0U@0dYRkRU
zFS#84h7_dQm>>)t93@Y*be|G6(t<Hp`+Mtf9wBh7QEc2)T&Lyf%ku(!<1_kM{kB)L
z_)+MMXFc#UJYj>~Y-#aKHA-%`Cvq?&dDRrPCs`wM4B$94skY5DT%OxERSdst%sVeh
zwI8=igg$~^buZ{HGxi`9Dk;bst5^TW5+-#!4(YA!N*IeQ-kQ@p(NzaB1zNZa;C((S
z;EHB5sN4g!GDJ+zPSnjHK!4C=PX=xrEc&ru{+FO`HYx?dMgrq)C;xfQtKfEBui%Bi
zxof`?LGCxJ{h5;F>}DA2C3DZ;p6Jw7Nm_9FY85mo;BE8ww@wNyl-p4OgZq0a9^9%f
zJvR1GwnJpciS?0R{#0O<deUOP%f~=17OAaa(*I}e2gi_a%`zu1r|Y|$0K7`FQYZ#i
zlpvJ9%*Eo{73KZ>{3;`oD`0oo%28koR&!~$p4Tek6=(*^?HVuU*1p7{|NQo~$&JAp
z1lym_!)mf&Z?-^FT(}W!-FM-Tm<>r|a6fic$_#8lC*jFy&eILAp7uxTrre~$!dQYE
zB<5K%7=WCz3(RHcUIq+0AvlFS(FPs2MqYT5|KZs9nptO0<98%mZGMn{R+kJ6;@<Qy
zyRs=WDZ|Lb>Pp{bPziOA=gh9LpxVs={|6jtV3xlM8hid7?&itYBW6jZ8x0pP>a2n^
zkT!wPfWac`^7$+|=aL=uNb>@!Sn=A6jWdE~jniqd`oDCw(5IV$kB`)$v!vLIu`(|Y
z3$;@WP`{>Z-IBK_yVg(G6p(dQtwGx`l<brxEqW+~SRmbfS_%PGChx4|!Qh($;^(;S
zyXEue)VkTTN0WA2MSA3>%;8FI+9rkOXY*a5boZjunoXzZLH#5cm-iPU!}^qhN_8$W
ziVx>Uf!W-rZAwG0Br0JLxT&k#7?hbL5}>F|y8eWcP)(Y9WiE|%gloGBtmC^|(=X|G
zaZF@L0kpKm39c54HUI4DVKNUxh^%eBB4MNsP-NUdZNn?Z2-b^(Swrj3!YfPqQSs~&
zvXIyqZ@-LD!3c90)o0Hf(d9_QJAK`&<EXpKm2`Sf^7AP@np|HTRv2xc&T+CkhcQxm
zOT~cyZ6TP7?oFtZ8+}tz@Cj567FPR}DdjBk&7sOvio#GCu#5|1N6gIYXQ%TOTwbiR
z<yx}|H;;8yH8@WF?q(H?3l(Ck{UNU%r2QE>dMx{}TUVuWLw3u&K#t?};wbn~g{V;J
zyiBybd#`SW8~4z~rZFu}1w9U<$hmpwmO;iW%=Hv@!oW?tgdtMT%y|)k%0q9zDk;6n
z_3{)twc<@_k!V+_gdD&d9`^XGD{^duZ`zwfdb`l`vH6m@yhFLw>!hRbN(9jUj$~#a
zNw66^Ho78oPJ~|KxHj@E3G#MnZ3EAGH*0BAA$hX<bS4mR%og2RTdKsg&Ag)g)mJo|
z5Lp+<&;^l2Mi1lcQO`d_Zw?7tf5x7MS-VP&E-*6(t_gJfN!8zMi7QG`CR*s2$KC_s
zn<VeBg3@+Ja)_0AENh*)es0%?{b5a5NpY$<(o7yGy9cP~>mAC9L|aTvGnTHy>)(i@
z_VTC@pKb&RJu&$wE)F8A>twR_CAd3#uW2`)qo^|b?6WdPa^Ei{#bBD3g)%Wrv@It<
zndZsn*IqTNVzlD)_2{X9yf)$R4?-7#W9%;r!9NBp-zj%({9dC?cg)OhLVLckj1u7L
zVS{8;t1CB{&-!H<KhgGXE{|Vs!W9Gy5g5M!U*NyYUu{jvWG994kzu#OJ^5ECcpJjo
zxV${UfBYTDAEM#&07I?wz6%Pyw9vhb|GWU*DGyJ%bGVoyCb9!p{~m?=Y=DTp+se+C
zTOrc->pcnGEDrv+iQzeOV5elw%o1qmQPz6JgdI-1G&=KI*l4#DY~L`se$a*ZUb!QD
zHw<<6^2hM%lvhfY{77$ZCS5f^X%IID?nf_euyITSz$tPN?P*8SO?TO0XU?6UDNNm|
z5-&bB8BGm1ZYwYVDl#ut{Z{e8jJ)8%aOUcU7mppxI=JcY5xv<ZUJ@5F8z?^?<WB-J
zWxoPVw*alskWPN(&=M=qprnb>4bX~$ZZ|LuAn^YsO!`LM^nKwF-F;(zCp(%Fq-Y%z
z&YGzq6Dl(=mI`aj`<7(Z|Kr_kPn?gqw&lgeig@Vhe4Y_Ja!uFng`}C%=cE2QX_k&y
zPp$g<ZkzWCj>O+c5z&G_SI_?RgwF6>EC0f!Z-cMO-?S+Y#v+RKP;nterx74%f-4d5
z7t!@`U^ig{+_$H;Lmr6<^m_OYTvm<TK|W9E5je{`<Z~>w(e*S!Dmm*>qus?4Wjf%i
zbm)U@l4&yClgBXo#dF0k+lHS5`G2wB3cYSO{T6R2Kkyn<<@arz8eB4Ei)Iwh$Cbr0
z2>Hpwcu{~LDe!%Iv<U-ia+lzW^5Vw(r6{E(-=A@fuZxBK_SE-`bbt0%lNon-llACW
z0>0d~yBn(^)`wL<Ef`@K#YQPLT@^qC26WnYL)5OqCe7#_YP4gK*Zm4+R*>~+gN6}F
zz(Db<7Pq+Y^Sem-Nz94lPuDZc42MEYsU%-<X4OXNl>_lLqjKGL($i=l5>${NtnvhZ
zLzAJ)|7h{d=m%e|g}C)Hy}RrGlCoN2IH-O$@lIu!E~I%7`lQ7)gJV5jZ<_UqmR4VI
zO!-MxB+vYlW-j@0)~h&J9T1LD5PMIaQIxZ<q3!XeTI9WH=IehBS^uM3!0KOt|NhLs
z|7cBb+*Aa-?YwjU-(H$Kw!+!LdNdt2eqoaHajfO)>{?M?W7hu)oJ@jVH^fB^ti;J0
zm4!8Z0Y+@!J1wszL@w41UK#yQLCOC5tGCNV8+Xm&fD`nsiIp&`L?N>+wo1*c`cmH(
zA;5lMGM}DRd@lV@e2ioG<|5mF^V0H>r=4ULv@q~03HiFYrdT<P<R&<&$}l)#lWd}?
zZx>5>Wgn#8%kS$_I0NEstGn06>pktuc19fn0yX&O$%0Jx+dEq}-mR5+aMp2*o8pn)
z$ues(!dt&yid21+S8b^VAH{qy`ukj?>(0=(O)H=^7Ick$bi5o}<K@xk`cc&~Sr)e`
zZ=hH9wQrUoPW~HR&Tgx$*mOlfsBcdsNraM<>mZ^E>Pc^ojU?!-+H~tJ!-iWWYeQYB
zxvX<`<tCJ`e`W}si6N6G)z2;qyKBryQh+wjqJs(@dY@<ZWb@v>@jiB5)7EQorN;aX
zgC(Tj-0`;n*V6aBNTCWZ`iZgkq57r*Z$QJU6K`JhfDRVT3GpWRWFmC%`*=)bE@R0}
zzoi)NJ95Vc$friarv*q>!I{jZ%nQ}E>Z4Whe|4dvw){b>bKDnRedtz%42ax8-RkC_
zDid)#c^-ih^e#9!qREW3r#XT9`C02APjs7SQMqI)X@qk|OML`+)%J3-LRxjch5`^7
zhHerA=a#HDQcX!kRlRE^6B7O`H#S=H7*Tysd`5i{kfBe5gZZ3QcQmfZxUM%=3tF@!
z2VMJw6CAOwNOP`z^E)@^f0za~!N)%itwck@QVtAMa^vHl82BcBHAW4R*(!3wi)MYm
z0T{0J`4{CaPnoWMuH{tn_;IUY>*o3b<)Zgz&h=>z>60UTUBpPsPdc-|giEV+UP>f^
z$E8mmM7qc=l#lg_b(~l*uC8LAk)sI%Z%=m+yWrc;E#D1he{&A5nT(H3<zDXIjQg^l
zOh}h}T<gH170k~#e)QhWA*!{p&Lqq?Y*$2(QTluxRKL~LgUj-&{!Xakv~m*2YV~WP
zqxVP9CzDyJ>f?v*4P<`)IzAtycLe7JJN(=$q0iD^N9azx5pPpN06Vh;&vT@kg^Iy8
z??>zQ30bwUk~hDfbGrS{3Y!D%FD65+XuQAn1Mk>|v$G>@zwOb_#`#Rj*uUP9#kV$G
zd8yK8h^F5;|E`>?C0cy?!0?S}Z$}NbZF9T-3os^5bk8e8FFuJ`lg$J*-^?^~sgfHX
zaXCiRMS)dOr4>cfrG{M=qR}r^naccK`Kx#@l7(Tm@Y=zq6qP)*6j}-xpo<%9GemdX
zPXeNG0q}~mc+$|1{NJl?+1<w<j;<};Dyk~1TT%J(PV+)3t#HjgI{fF!f^ID_ma4Bl
zmWBD*bJ+S!sp#p}IyP-@Jisu2z7E;dM*pYaXA8;s{^_&>P#7_p-M>2M7Sp~Tn~^uL
zgKt;!$v%I+V)LS2Uf=m?k+vwLWukQ+yU$$u<J|E+uM2r+NUP^oE;i*~Z+=3P(FGz9
zg&Q4_QT1v?C3inB_D%6E&D?`@cDd^*!UEr#|9GN)^q%t#=!{0V><<3ws@*zs>soin
zVcqJOnWoj4<E>S((wOaNH><%RYM3QI5R3=yFYd5F$W<KNnQ)t1p6wMY*&lHC8t$Pp
z`VT+w*<ewhB~21pKXkQ=f;2cDiduCW3NNBvIv6vlnCq|ew@5e947k-i2;#3(tmbKr
z>2%^J5;RBGYDz?YzqJSA10Wbt#4DLCTg!<Z{5-xUyC*G;R+0X;V>i=f-{H>=(kkXc
z=?UD~YteAI!frrE{@}J=`kol6#E$nw#f~*b%rbgp-lSGTu04$19Ef)w-SeC$t=ZPv
zTg!7tsA?kp@q@n|65<CFN&IF}p#8rCLp7}>*fE0m-e7;?h&e>#;SmLGI~YY4>D@dw
zAs*^3R*npUj{ir72Z*8KR^&tn@zEi>qiQ}|vj-W!n~!Vay>r^k$T@mg0S;^>;%zDV
ztYv4kTkUbA_(0P#hZjj^rMQx2n05bE=|5uTYTmQTol4uIf6so3=BIft_~8hv>DPdc
z0>n{+#x<-%4x}Xe*GBxib&=7^+zHbm>-2$9YN=+?kn7?*ntc9i1)<TC0i#+u1Gb!)
zg9g^pllWtkvFCh11U_^`dEj>2lamzIilcc;n!(Oye~XfI!t#qj+*TGi_XPS}!hI|=
z{w*znKT1&(p6@k5%VEeL5E)(CKK^afT)i`Nh?-c34(aEq3<L4_fu%tA4@w@KaKHI`
zVpzu}T!9-|mY99#Rkii&5iWzN5__x})Jv<E8KM#0+|4QxdR9Z4PaH=LSCJ84X%p7D
zc}4%jn<3EM1&{ud!r|j@bU`9ZPBb!C3kL?QY@d31_wzobCS}W(3$E7Yl4_~934@hK
z{PI#=hava!g{;}%oLrRr+Fs;9i{+WGji1O{9>T7!R*i+hPWSaG6a`wqids^S-F&B-
zh`o_8b-7PG%X+MR|GU=(@6RSr7sJ!zuunbmAfJ{P0+imyQ8~1JJ*5cQetf!s#r%S$
z$BA=jVX~e^y)zPgT9}!c$9{E#Up({Hog`^qSr(B5=bww0rBj5Qb-#W*-AW+v|DmJ8
zX^|oh8fJn*g8GI_ZrGj)jYN(2a|6GIc-1pTpJqjJ8O6F}+2795v(`)2w@V$ghxP(e
za3%*m%NY0<2@aY4JEroH9`7ZOB|XA|a{r}fi_bOMVtw;|GS{kSdXacj-vfgFE~!Hg
zoOO&<E!(n(@|KfX)pHjCQ`zT^;y|Cy@Fi5Pu80e{b_{WwjO2#F7XA?)Jhcu=jn&<L
zr}6|j4`5lytNBj@O)fSU*p=9|=WT!XbR4ui7~NjHu{w9BNG3AqJMTfpPL<&K_pg@g
z&uw|GiI5!b05mxTK`21bWR?COcM1aUiGh*Jwgce_+~$h8^!m`j76WQ}U)Q{dJT)tA
zB6~n&)lEJ<{?0`}X%$miEf{z_B+gts|7dQD`pYaN?F6njNIrUpzt&u{bZ^2dR!Tq?
z=sg`AU+=JJQQlFSePyiV!O}5h=}Ak;m&9IlW1y^j>tM)(bdm#_su3c$q2HUa(?<i;
z&yj)p4|Dd*i*wvkZSlAcpO4Z!^617cd1`<zf%U;vKqKaSnt~xftV?yglPY?UdDNjD
z96?!Bn<(DF08P^KRk}!Akjm;J6$+QwEkg%PkcJC8y%9@6-_`<4*ixwH-&2+^B%nDF
zA|nZ9yO^QuO3K&l3>A429?)BtTTUHQ3l%_jz8koGmh6FPegr<MTq;RF(7Se!yOZU(
zqktU@<jCE2(BglaR+0DBNbbO>mtSG*pA*nD1N=AD@J3fa6Z}qmCS2ut<GT1yGVc7~
zcER7uXJ1<Qlx}}d45=<D(^JHq;r*3zSpoOulXE{n-Bj0E^EV$ww_v)|0Z6{ubkcRf
zGF{a;cjuip85%`xj5Jt>b>9m2zv}h}U4^vjP*VK7{8;2j>Hz5#Ym#|h{^9*fv+-dk
z!<NBvQX2fpDJ>Zazk{P!`&u#0Ve?^)<i5R~ym2nB@0JNH?b!Lu_%Aa~QK7-<S5soO
z+_;v=*$%hho_4XLz;tG!^+Sommgg%PVPH1*?&o2S_OiMKNqYm1(Nid1a$Tl#b?)I9
zIMa7Enp{h(e%7LR-PKXp;EL@-pZ?J{IRhUzufFh&?+C4~sLF(%FQiP3BEZmRtKCn3
zSZ~5K@n2@uNkIrDL-llXF!Cjk_g)A0SFRN))zXpYG2k5e7|)y&$%{88AoCFSF;fpj
z+@$mtErmek;Cq;WrDF73MkbZ+(ukgPE=mIj7P79&MYcbxT;fFb0*f~VRSZ4nXG3ki
zEPW?zB3UxGss{P*$jOiV%gd88(!*32@5@hcU4D9KBcGW2zrqv~ybRk`w%*hjFfs@@
zlBA7YE=eb)SL)P_U*u3T{nQNTNXpG|-@F#{Z@ZXC0Kq6=xAfR!xd@X!z+@8@;+IDM
z&}ZlkwF6b4y{Dv7f6hrjn8Wg52BIk#UZZ65fguTg0Uy*0Jd)Z$Z)ctd6vF2xu4^Mc
zxoCP?2UWfrr-<0$c6HIz<hr}d%)H(RxDdMG%{=}1JiUn2?s=r{kV)jC*U=5rQAlI~
zFkQ@W3`t4?;BuA^LmgH4FiLKit)?!V#*YZXp!v-&YXC_~b4In$!L*VPi@%$-_eG6p
zhqZv(`-pr!R8bzPYn49$ryafWo8JQ0<)44om=EMgV_x5%kKMQwa=UC@;D=mG<c9q5
z6>*Ai1<~n`zVySP1;XLIs{x6OX3?PAL|fb)IkGlDbe2C#*y~rWD8CgDNN=Kux2qN*
zkLo5nc!lQ=|DIB?3_QEB0be*^=y8&p{#1y*%8xPI5m{#6ul$vo1Pp@(UWv;-|BARm
zNRg2jeB>qC=3bDUQ|HZoWnW9{@OfycD*R*W1C{4p_g1&FD<PEi1&=hdFlY0t_6+$q
zuOAzHmR;VeX)Rr+fen-V*+j)a5XQN5ejKd!n;=+{apTUDb_=|$O+nfPrh<gG1>exe
ztG|L#T*=m=Z$Cf1!VsY=%y>qyZeWEAf&#508}?=>FHQ~?2wUJd^~z>1%Q5jO2jQ<$
zb(?wV{D@@8+P?VsloF{n!jdbASJ{1}KR*}xv}O4C(~J527aRaPvcoGOsuLL1SvV$1
z7cE4`7;^r#-p?2093+_WU7&%}4&<6<8RG*T_<%#E_pCckc0t7hyIR@kS0sKQHOY8I
z2t3X9{R>^@v#rJ=Zkxf%E~%HShq{yXO5GqymY^>%(0Q}#Izvqge6=Ua?iDg-VAFHo
z(d)=RZ1uFCvD(X>9+(8jHlE<&DVg$4V+1xLV|lZBDm8O;e1ivZn$J&YEj0nBksm#%
zsq^-_<M^X7JMHx52k;`95&CWEv1D`$+bdl{8>cAY)*k)9P{ifNa)H1n`PIa?&qKjY
zL+!A7{rZ<dH?>y4pWZ|{4QuF>G=EHk!4K3ttK$rlL9d0)q+GG9NZHvfbKXdRrd9vQ
zeku*R=~nw#W`v~ee#V?H!g69<&LAS;#X&&<YxR4-Au*C6(*g{<9-`9HE;?q?Kk;_e
zeeFd7TN1LU?(LdW3c(ES?IjhZc{mGqO{Teo8;dNXrk9SKSMACUXz3H*|M%>J!7(Lk
zB4JIx23R|JIjnCFmKpQnl<dx{28NebEwqkJ6^al1MN483>is5CqyQLOP$3D@MN}wl
z^%J3KLkqH13YM*6c|c2(`sQ!%$I+_?j^7q!EBUgMapy^((Q*+1;r-00%q@7YAKNxX
z&5Qmc+&{s|9r(0tzVOYVHy2Y}BDk%Jjl@zLdsW*knD&fb=i442kxCL2p#hwMXZzr^
zElCWl=9gLWP=ZRrP!4v!djXhu03q@-@(i6`!M;-lP|inpxTjpMy;XECxHlJIC<g76
z5PM-Hw9#mHtb1{|0Xs4DMbr9)(cO1>f(>E-*N*JXRHT7o%Tr=fQq{avc{mjCkn2-*
z)G#5E^o}oZ*)CHv-0j?y4-w>$p2f&(JCGUxu|64dzI%6WdU!5gB(}sJmd2MOC0)$;
z_VPreh_<VeT_;MJW{m3Dc|7j*-|H7Jl~C1iWRhadfp;*K=?ge&M}8~tLDi&Glovhu
z?JwrA({~vF0;yOJY9_@`iM}dCatJyg{55=C5%>n*Sr)12N1tZ{l=WMk<poFQgm`#y
zpgVqx(FlB5up{2}^3>%Gb`eP6=q=(dHUrDoWXL4@=%?Gl%FhP{d{%77aY;-XhrwqV
zFEX&)$NSJv3=)NZ&wv)i{^R^(>g`Ls?Q3BDpj-M<H!(9<>DKSFqOWOUW|;Z4x9u;*
zab$=EE8l;GuG=orsY<s4H(GvOEEi3o-CC>H1UprhDs?wBUu0CCvzqK4|NZI~q}A(O
zl|qQD7NjNNZ6K&R<v?zAr~WlMM|Am!rmmz(3{DDspwpk)KnbXQj4W}kt3TP)m3~cK
zGF31r^dnB3>uJPIhccrALhKmZT#uKWcmZ_+VL$bgiP_usb&f!Gr9HXf43Sth?Amy}
z>3HWHWQw60u$}`68>}x{JuH01#$953Dbd>spLCI<h~L9kmSMAVck_DS7YfoOzF^@Z
zQL~lD9JF*e@^2tP`fkdlAs3<@klwVZ<#gaA+S&gNvVTKdS`9FpVufn62a=cG;vomP
zI{CO+!~7YWVao2)0CN2Xry%)XgeABvL~9$e3#=RmU#<C~dJ}wZxH+#UV}QI4yQurP
z<^f9S=1^P~_}{8v2Mdc{6=gxG@_9p0x853C!2+QMB}E*cXAF`Fn^ly$jK3xRrSWvp
zlsJ^me-@4q<p8nA;={vv9;1ww^->>zqn`ZUuECI60L_nZSwf_Q!{3elf*+%Dez_l1
z_;$j4^bInew`<uMaRm*wJ4f=6e!82cJ7fq6DX5;G2la+0bGQMFa)Is)SyzFxC<v~#
zpsa0J1f`@lp_kjNqOt65p4mmT^_-q!U4eZ;j4t)e7_{PnkpUnRvaE5gs!kN3M@*dE
zS1qMv{}qh~?VGGMDPe+2+g%~IjTno$@;@6-fs7nmii@<LP>>x2*{Pd_ZgQw=|84kj
znhz9!#vVE`&i<%ntbwSxuKAx`qu&_5=0nqwE8jW(WQ#<G113Bg#){&vqwM}#r=6q@
zcf*2d?V^z6B8nm;ri)!YS`FcqAn`&8@^ua(L#he9bCc!(+Dpx>Et8irS>YG*aH^bV
zw^AVCJN?PsNOm#pgTLzG0RcvT>Cm^bD?5lQ5Y1umA?DwZMg%Y_08!G0;QD0A|4;Q$
zHC%x)5<b*e&29t9u6f|M8kvMm!K;)2J_GB)`LUclP6t)cCO%`fCbb};aeEDHb)9rI
z!lnh}B03AMG=JXm?&Iv!1(p;sostPZMo^U~eYZBND8Thz9rOTgnsV`5aI)5(*u*j2
zOAW2Xt0Fxk=p?4=pdXq#u1_}xv3jHH8%*7?K}a^)VEey~HWYCGB~fE{@P@!pzgBbs
zxZlQr0$vGy9S*jvt*wLn#Gj$uWD<VtU8A{9$z)%T{`S@byF~|7^53K<sKvN{-u2+G
z-b~uv(2oZJ)uJyp2tb5X59EpKT4g2yCDn7ynntD@8=SJLWGxjVoL_iip2<8^7nl<O
zXwvnkS#?b1{(mHY)zBNaW9w#9pYx0qwW-*+K1MwdG{r&Vq095{eL_JFv4JY*bvS$Y
zm6(H;iL2u?8uEfhmvl4tN;lYbg-i-i_q0s-xwE6f5wHA4awQd@oB1D=BuZ=vL0mv7
zdZn<vlJ|LwcuVWX_K$xbj@hCkx89^~vZtZ1%nE7*1N3>0pdT%B3g^(M=dwC6?i@CK
zY0Fddk8)#)5KpIBLm_&z7A=m?ts$$i!_G0lkuY|Pf^0D5)mjsl=#e#!Y+U7pq?cGr
zt2V3G0R!WP?`R`)-WsFa^PC0v2VcZp!D|r-_U*ik#5+|R>|0`A4M#42LF?r<S?XXw
zOGhl#E1=sMgmrXCVZ-Vd<ra>teJ&?WIzgFXUC9-}yBD2Iq!T<tt{qA3tp>JN;@g)@
zB1=qSwh~;(tbBp=jnqOaPQ{zv=oU`~lm>yGj9yaFL>X0q?htKX=W|PA#ZN9eUU-mq
ztd<to|G0*33A_#T5rCJ>otJnZA1j_waRPXhOqcCGl9;&6ZVopC>vZ7MwSSxv&d-zR
zjifJ3Q@>X?c75XIaNwZa^bO+n27g0|xYtPqW{rF)xGjhNhzkH^8wL(59dp0PEj`4h
z9o~F+-4TAN8)@M78Vern6j&~)h-mz~rv$N^JHS$o%;2rnZJ&4tKrZ;YnTFLh1#yAR
zd?Jf^C0Rt83T7qbgx3$1<LSGdd?d37hk6?u1<PvDFT)ag`0Bf%rR%Bfg`%!6^KCc2
zP^a){7Eil|eA@!N3%H)Qz}NyLlS)OZ+QgOpqXD8VzQcu3!&}VYZ>8WkkrxjMNJ9H9
zrQHxrh(c=!j77jUqH>+#^i2-HN4lhh*DQHXv{&O=Lu9v`%}}susw||e4nA={9)|Qj
za|4{=bT*kHRbtbvS13*2(*sJh`S4bHFs#ns+!^Cvuwe32I+3|Uzkng)-Q+#;G1QVG
z2g|WJP@_ougIH7HL_1C4R||x03j8t3&%T3~4@zzj6$huKXh1S^zue0)IsgPF;^e78
zlEkz8Jm90F;2mWa|8+L>9V!>ny$q%#9W*m_`4HmM1NS{dF`7~qf}sHXr3t=Io1Pv;
zO_;kKfw4Q>xb`UUnAPWs>iN44&&y0wbp%Ev34l%Z>60BmgN$L7%Xaf%_Nt$6zc+||
zzzYi+{Cx|w^ZI$!I#NB*YzX?8A+IN0Nvd=!c?y7fzzr`c%^+;L{Oi{VtKe<u6<_Sn
zm$`gC^c*NT_RD_4C*<8tX>j|C`S&IFIbP7}@ZL3-&clpug!THRnYDfo3Sy5{FT)<5
zS7Km8T*o-E<`0-sU?Sl7LaiX4U>VTP%R7h0LPi3Q!>e=7w1!*}p@|f*UevF`$aA^N
z#tU%Uhpy)JTsp@<NvobWzfs8Omp^}=TL2@A5k%m5#F?e2sKPp1Mw6eC!^TK2dqSbK
zA9%EC3zn_or1#LX8yN8g;5ISiR^xY7|1-%FR2WWyy`)pFZi|-ZvhU<#1e_Vk(2M<a
z4jlD!4-S3g8}nruBCv&yfrdAlpqgB=eAN_XEWMHQg9@cEKASG^dQdRe>XG{O=BncN
z1MCj$n+o!~KCKO6tKL&|&eM4<GupcwG9z;=GIocS25iZ9sc%!RZU&fcNcyEi+^hBx
z{NUL`Jd*xBGpTY@+WhRa;4d>lC0mduAgZ|~5lfNy&-|u0Mg{>jtwTPPRlpFi;hz1F
zg9(n=<_TdrmEAgU@dmfRd?2WTDvS}J=|eSHV)IrY+8L0x>=%t0S5vM)W!k6cxS30=
zQDFl3^wTFEoUisq@SP-NP_)}HCZ|zDp38CIg3Sj3^`w6oDJppV>k1^~uS$Rd%|sTn
z)|}x^TcQ$=_z5*u0h%)`W|+9{a-HbbI{2Tst7~H*ciW|#k6i&$j1GK+4WhklwPG*#
zy+z55RuK*h@;AVyO1c1|LhI0&g#(M%al<4va!b-3{xfam(?n||4k|8>Ht~kmTkzp(
zm@BIA_EULVTwM7ctb&61=4X@Spr*5rRs4&Ga-4S<{N}<jBT1?x)aXt9T|G_WY@sZW
zJ|5_RY3nN0Mq0-t!Pe%3{FQ(K@&S9grak|h*!ZIx`Bqjjj+IraadO{Pc(YS|Q|PYd
z%Py7Jun}idAIjnt2x~=7cw|E2Oc|u@FJytSg;eXq<BtF{Ucu00*@=@IJUd8czx>a;
zus~C1ia^t}-_d+GqT1g&R!N+=z)@l^yWEB05g)^jq^8{?+TmYHCxMT8a@obdc*}!x
z*{z0Lx`0pFY)q&!UpOI}yZruaVH`I%wGk;El~bOP{wx*)qqk(hIY<@|zggZ;htm{&
zbpz-xxWlwL^mDKcDb^W|Q+s8@sD!Ed*94&eqvMBTrgJHcW=@MFEBO%RHsH_C4v#DM
zdGWRF2I{ze-So>l8!TKGE%+AmiR`w|em7};mqHs}Z)w-64dl1KB7TN_i%OC1hH4vR
z)E!s^b0Te8f{bsIY6E>386rH`l5cHD@(Z@hLVJA0Vw=VJ)w4U#^^_L1g>rcF(nFQ7
z6hWL{h7Z$F0i?ANbpgOx`2{|dU;DSK@Thz$uMD%t23*C&8@{>vty_&>(Bx*}dsFm>
z9{Ao#-WuPuIH6r|CN;tpJ(8ZsCe?#r3aE3Vb+Zadjbw%wsb5*ofNuHl&4>tc<U0#+
z|L?ybfW_DxlO({Fk^~GhV#YiGBu3+uXcDi<=L`%dx96Pl%lyx5X=a?4P4@sRmJpn*
zkJ^OuIgw)&;{#(fthV+uUNtDX^_}nJP6uRiup|qm!?4RSsb7O|THf`*7t$-6yGiZ%
zbZ5NB3ypl|hMM-iopQw<rP8U`sIG+?gNtZ&#6Avc0dh?Gs|s$<ubLiuHwhjo0lccX
z`S5z3#ISjmf1X|6YlydNewkwRe?P!rXcssx^0c=OlK9Jj1q5vh0EejHOZvkn(*m3p
zmWNImx~1IoUqQf93cxWNhg-!w<Blm}cDm=I{C7hnUC4qB9VL#hf(F>FYEX(qJMWAT
zfUU6ZDvLd2tm9X&<1<~C(<ZDLrYJyelhJISA<N_Z;sJN_r<DCpW_>asHd|pO)<1qy
z<ZJ@lF#^cdwI4~MvDC;_z8n#By`JZaJ%2;~Qcx--RWO0ZZW)<Ot6CtjOHBDUPOfLq
z*`uI??Xw?auKR46Zqh-ncs7{QLZdC}UhjfD!DIXFe#ydjgJQ<G@@;-_PQDBzdmw=S
zz~Yt@Ls2TPztEWD>aP*ayt%H(dnnWXadi;^LRC=d#`QC3^}dxpUT7lTHwkVi2vm|<
z-k+XCAn^aMGU9uYOZoH@u%P9*HVUUu)vfkO@y_d?!BecALeCORYD9)De~bzpF)v&H
z{nimFVTg3TpOe;jwHo*Ft;)LXLl1+z*+(z`BSV!>e<Ejq(pxZP0`>I)`-0V4(bMIV
z<s#b$yn`DoM{mE~c-f2#(bal2`)>T|fl%)o&4tKbp8rSIS;sZ`eGhzNl=MIb(himG
z6p0B8kWOhSX_0P_DJX+U2_hlgp>(&52I-cTE(uA2-^1to=kFiJ;C1VH?mhS1bMAQ`
zMy(OjkSD6&3WPu0b_2rd$!Ccl-KK&UYN4CRPE8)}aup0?-U-n9r&>2C<<Dd6?8xrm
zGdI9Xt1?ToS`|+IJKImTk8axa*;f4QOq<1!Z@Xv#&bWm1{n20AN<fXctV)$_<zysf
zSvNDi4cXI#K)CbqWRsq$Y!Ml=pSse$L~_s1p(4G3VsZ@aDxZrfN+);?>x*y5w5JR8
z9`fFmN@FtAF_Fw9s&4}?@EVgDISi`^(di+8s_|G~@}%2~Mh9f&RBMYpqEdLwugHSs
zwmwWryZGkedxxi~D!AAxFD}&E@21;`QG8@IjYCRw<?2VZTtIn__RFsURWUfSUTG$r
zw^j^%`1`3tp&^7ky0PCXQ11z{=%!--+?fCTuqWuAg_<>ohx@ry@#7`np}R@9Q7D{{
zA<r$8n+c!io3`K6pyK>hr7zQWIC=HlVRJp_ci0DkV!m8mCZJ*hRxNw{SdVMp^RnI|
zd<v7JqYHnUow|W*EhvL{Up?f>_tR+fSMYcrcNC5=gGSwI9AnQAG2iFBk>!VzrGM^I
zWq6aPbdgQwN}s=|4Jg8IBkFir=sVwFIWxXLGx9?5@2R7euTlOfn@Q}S{{T*etZ%kt
zU5<~gL;`|M1)(nO(5*D<enJQ?<vZBa{c)Ns>9n9<QBMNDFIX3S67_oT*&I`BeRy7>
zUZfdXeO+r^#4%H3a3o=BK@liHUU54u?!a^M>*l093=gN>3^xOgHYfGGOi<b4JX&gC
zspr;+sH{Wsh?dr~cJ76|a_*Z}^P5W`vG5aUAoXNH>U*Q>eZHUBzf^&X@x33!)OKz?
zrbMhpq#wI$?o9l{WSmr-#D9M2yIMYI`s^}Mt8$8hD;pK{Nnfm4#Wbqn4Wq!I_|g0M
zl|f0!;p5ZE`?Zmh7-KB2e_pzn)7*FGz3|k-OOw=Y(Sh|A{fFspzy1a|taR66=Il%Y
zDeI!0>44S%0E*#Z_p@Et<m+wXZ>LeR+~u2(X`uqel=*CM9GZ!-Q-x(PGb%9XbtzlN
zS4326pj@1M{6`S?-*qOOM($S9#`I;L8(KNv!NZxkU3V>q3!778Ui-gShQI9{FqN+d
zOMQS=NLcOEy^a!E4xX2U1r8b+wX~$mH2Flc7QG|n1e=UejI0M;;>s&|{yPdqxV?!>
zGSIyIM-u$*TXlhTf`=jZU)#w!TMgrBsvEs0@#&XT6L)SOJt;iQO3=8;_jTH@(D9;G
zmC1wVfnI_JgljgTA9yl6t?BKZnG=U{c9Ec~znKrla(I*cYfLeM3x=N0D>kjQPF`=T
zrY=u7>)!g^$XE?|uU{H)_G4dkRg`oE?@kOmo!s;O=taO;Y-$DG(W{a~y-BXQfqTAx
zMmgQ|BFx6G`%`x(Gv`@<^GNHZcOr4}s?7XE;fU`mHY*mOLUL9E*)?Y_F7gNrcj_eF
zAm6xY(AD?Z<2z$_J=mo)LdLjC<;C<-?{8?{zc)L+b4>Oh{|DwO@j~itE9mvY6C2|@
zJNzc!O4CPJoULS26;VM1oO@5mpB}~pS@#Z}LsKKm5-{B7t2duZ6M*(8ShaWrxou3@
zJ~!H))ASA;(X~u%dl$J^gc3|g@3AiAGXKP0p<^Bpyft@YEcy3`Nrf0RbGP-i<h6MX
zKKYIG&D0h7vzpM}%LDIg5#LBk2K?^PPlmSYjibdro;S@80@jnU5b~QY%2w&HrIVtY
z=N%cri;rTXgbhG{bX{Y_Ij<)y4MF0NGjj1$y{7A=jAEDkRCeVCeUPKmNdv}p_X^fA
ze>GX;C*Sh?Y1N3=Mb5+(PW#4f*P*PYM5ARBHkenJeU@xCCtr-WzRx?NMf(z4Di=nc
zF(4o88@bRbjR^GLf6hs;emoXJqziv~5<ZN3O#J;Q|2(_u^YqOVaQ5$>ZSKOl>j}dn
zrFvQQTfs%i>Y0KC{DOy#4HM`IjkMJ?;kq|sn>+p$YvisV#_fGoyHYxozc7Q8?prra
z%~Ez>E9dJJC(}_rHPRfpOIIqQa^s!rs!bpH8koGmnj4#lThZeRYY<R16{{(JSIqC^
z35@lzQ17IQmTB5*{p>Fat*;VUkQS%``T9)dJ(=rcXGn<yTB|g0Bk@<!bQa1OR6oc!
zfxAIw$X8z!ZEwTGm}^R1%<M3D#kmKd_VsG!bx$1XuS*JH2%wR>0RDl%uqd_9dRxrn
z^sK@9a@WaiFnI(PvMo!s+hE^w>J~^jUY}JzyD^zloMyIf44<|A!lO2J1>}Ko0V<$|
zqYeAdb9zqtM3^h)97^VkOzpo}=XF!9I(!XotLhsg^U)|F8YA?5Gw;+pz^k&FCdBux
zo73@ds6l8D{_N+1S+?OmukP@DhuZ}QkiiYsOf-^DPEA>-D5^~suF52C%)MrA(D|Ar
z{tt`F2b1d9Zp5PMa$4)`k0Usfll}fyjf+iS2t~bbW*7e8e~O{eI(o8Ge!Kh8u+G6+
z9Xfp-sN6JelwjQzLUrzAmsjANFQ*p-e5c%;J@IR69xsaje)DLac<$%_Fy8z6y|Kwc
zP1$pm1{3sNO_AT<f}Ptz(z3qfcK7)*2%q(D(s;;YJJ8r7Z7MW6Kf^maf>%BFQaNXP
zV)FIPL>2QBK8<YRf8%(ju;cCd;xH#qde6d<i3**6S&78;KiXGrpZPriu%2p~CfOLf
zNWL?EIptZ-9T{+V^+)d-WgRp#-kkhHB(Y$-aA&8%wBdS*;-+`tFz{JXi9<PV{a>S{
zexL?AR#V~%8ntTgC-9rxpSrelF<P+SCd-n*^_|ImhnA@#ZC`0G<Y%^7PSEmX)5P}C
zTYMH{`=D%NJ<rq8AEXTvB`2OYh``qkuOE%a7TsRb0Z1lKi}9=db{iL*W3J3HKh5;-
z*U!||?2YT2nKPIc>E)j%nkx8pR|KR4DVXgw1b}m5npn4Uu0<TZuYY_qYuGC+ZgJj;
z=RBqlktV-=l?=BN<Fd%$o@~kZbKAd<err6;v)<pqIO^|>dnD&?3uA_D73TM|Rj$xc
z`-(;_S8OwXW7qq(Jx_cXU+y^=Qa2B7iwqZ{X>wY(s@_Bjq0VltvW%?L#Dpi_e02w2
z+s|(}QF9IcBBoA$IZG#Arp^0CX8tS-+=^J=?q=KT3(gyJCgqa7>IR*_oQ&t|{|-rB
zUYu|lUFY2>PN!DKPakV-Aa3n{OssPTycQSWD>0`Mbqn3}3-6B6j5XbXWJH9pYKaD<
z!064}-dCfcV*^5kyWF^n1Pju53kHdb3+}Bu(%0+x-nn4{2WulXX?jnrrQavi_C8Pb
z)csdbgRs^Jqb$f>;TWOTvB?k~{Ve^G&hL%xY?ahs-5v^{VGz#$1DC)rvK<`n93};M
zHpk8?C#Ucw_1!qi7&%q3{v8+C_Pd3N+iAmH|LW_h8Y@oZek-j0Tcx!fGIl^cPMq*}
zMA#>MrgG|_s``I)U>vyZ*FMQ)shRle!l;)Vv|$4&y49m2jMgbpFJHu=b0^8ab6U+R
z%fhX{&B)CX4li@53G4y}X~p{@a1Lgs(M?+U{~<`=vt7x08ZMqJM}jaere2^MUq|g%
zj|Qdc0TjAYSS@dSBE!QTi6Xk<-J+b%w38TS)-~T&V2HTz&9X0D<-!1Vy;}hwo~KGR
z$7RcRcLCh-A#_%ZL<|5{kF=9l{rYONs)SQ&C`S^>8o9JqAC*Dq1K@;LHUO*t_dDMR
zv_%!J(De(-1l?(c>biln3edZ5ae3(5iH678p!j3uwMy=siXpLTXOt%gZMdRjNx)Xt
zhSYtkWdL8T6X;DZup6vK81_ZfrZB#1IGZFR1}1)P_L*5h_#?o`=7`FHWGRJfJ+N5W
z=!BvZ86S<%0-y;ZNqL}teE8CsKPx~t@6{Hdo{8x*mnfiL0J@sQ1dmNpR61?+fO{bC
z_sqBNs=1KbznXWHS=A7WZS?<{ZIQ{%Ejpnf+08n9TmV$ieIW&BqmM(kD~@6`&*W7D
z#eqj+DZEb`CUPqm2;fpN5>XmZ!GN&2(hI3$2RmV;eX+ZqSG$v2;hEOh;XulL^`+<1
zDBHmAGg}g-$B$zFc6`2P)AV#yK_vOl*@4@_)M%I4ony^Dne{}8jFpnG(kJexWJLry
z&R&J7(it=SVE_{L;IBR56@Y;K*I>G!r+w3#);t!dtj&hi*8%~ZAcSuZ?`Hx18Udi-
zmD$Khe=22<UB!`*7f`B%<G|)Er&5t+gsr~f$|jM#0q6W!h{7}(vqR;p)cC<!jl5Lf
z#=gVCv@Ox(0UH48Z3OMjM$(G%haKDvjgkzs)0}EV(mF6I1N0FyJD{~YaO|{h41d{P
z)<y~);w)T%AX#gfd%bX5k6ArVI_7R<pr_7YEn>C*Y1YA5h$RQ@;cEqnl-4vyN5fLj
zd`V7l4#&|T1xqkpV70uKrtw0iedTwJ&zE?*r(-oa{(CJ-$AS7E196tQ#of1ZbY7+q
zjGk6-NfeMVJp&pif`8@JV|~KP{0!@prt)`OML6&gK(bd_PcxlZ{KWf`H{ns*is>x1
zKLe+ZdP_8q*B1`=Z@wl`>LsOQis0FW-W4LS(T|)ap4|==92N!@p{KOhzO=|Q#k|;+
z1K0Ne#o{NUe(&cule>yj8F2%&;UZywBqi*^`GF;aVel`wSXEou(M|<M`9F9mG2E(W
z!tAIpRi|>Rr10~#ZiPqAEKWC%jt<`FKk*~`>O|9kRl5g5VE*4y|A;@3D?LCle~8z&
zt}P1-Q2#8RZQgKI|J4o`#2A`FsVYmWJYzN;{gF)OMv)OEj{sflp0)8Sqx_zvYJ7h6
znd+P_S>wV}W}0&0a|vgMUh!Jk4CAvT>8>%r7coGZ!vz1R@D3oxb0{+cKj`GO#ozqP
zzq}hk{@;=VsN*>zQgGmPq}5*(+;BQewy2_hTTeQg2ZwYzvRDdtuXt1$iE_rD1RnZ3
zP5Dhl@tPjD1>bpi{n#h0M0{#?t(g<-39OU91Ul#A+S96mNzQj_0M|!v+-6}^g(@$=
z<BtmoK;Ccfvvxhv$hLsqPE7zaUMaXSJbd@-Tw%^l75nTXbkzo9GeY+Jsqw?eyj7pg
zOI5FIo2X6z8eS1)wR<78%dcl_iL*<NC7#lt()0)Jo>72oxv}q~Sitmu`ZhRUx?UF@
zws88c><q1N5QdA7N$?Sd3jy-5i+r@8WSA-ScJn7=O&Q6u#ACC6m8o_OjZXGV+8Qnn
z*5DoqlWv`48su+?q4j;8NOtQSDnnU=nonn0{yq&z0o9-3VZz3au9)81v4VP2eg3_&
z2VT1$M1NI-d-%i(&krCe&jl1Ve|Zy?choh`Y@f<6EdbmAxs_=Ec)YnyS0Wh?;Vy63
zDekF#o?C(b@&+JOS6EQS4df)7JAR(iY+tuH5{>GT1yIY9fgV1EK|>|#1CI{QW`I-^
zk&+AF$BuT+5II6-Gx5H9yA~4zz#|F#dn;*f3E~VrHF`Li9O5HA92a_jjYTIHwKq?!
zHnz0bPRRSET`B%O+7(!uNPieSe+^Sd88hI<2zjrFN+m@7daNAau#fr5BuxiF9X`CO
zSt(-fpywy*Y2OBYp#w>aiwFM0Hy~4p`y@`htlw?@mq?lxM`z;K63xjI(SHU4LD!M@
zMr^Vl*gR$vXod99y9k_$)e56X|NZ)145sUDWo-8$B05h9&vg4qje8aM{x4Gj=s`E*
zoOkOV7RUw8)srI82j-3-y7j@VgGzuEW4_BeYm(tsO@%s4xQD>M0}0e0u(XPNL6)0R
zNoxE^H%rBKI$vT^?~qY{HE`nco2T)~?IQ-5<Fh{mzr$lAm@QMZvXOM7RBLV8Si{cx
z_^anh1(hu?B6C{qpQ+7#ZGF5L2}%Gt3T)!KKw2S&`p@v>gX1)s<u_6S-y6SL@;D5@
z$h+)UG)M=1<0hJtCjO&WgB!DXY3e+4!kYp6=##IPDH)+@%ANGv10VuyZ`C6>3tmkD
zeV~L_`V@v}yXM9^7j6XVJ5YHQ&QDF58a=EMo!N-evwsWPAbZh%qH!ri&Myb@<^)A>
zP`ZFl?w@S{c{jdF`>y&<Iv7^=n^3D*)Bl1f@s?z@z6bu2lWaOUr{bYB?o}UEA4rx1
z=N6Z_m9_wfd^-ApB8LV*;cwUUY|vACNawry$+u<5^O)Mby%QaaItz;pb^00*xLzoI
zrAg8~F}KSjPS^#y7AKsYFBKt&m^&~@kNC#=JCdRnYiErCcOt#|>?W<fRRCwTf$Yln
z8HwZp;Z{!RFWaRJhj~#=kzvtEx3>oYB>5<()he~%G6(+xN~GFJ;<99f^g@Fu@2HU9
z^QiD#7ts_)z{=CQ1}RegDB~!({4i6PJ%z7p_9Zf+L5cUd)XuC;xg8L)HqZEK#Ndof
z$57gnLAuNAzGm_vjf%%szu<Hxy9orimWK*@HEEWu^6Rmto>^5n10o-29)OoGcZt{9
zNbtA00ub@9dVipba}K%Jf%HxQCgZJsbB<o_k9|pL@Kx74(k!`xTEoym$+Iidb2Bv!
znXjB|I@jUN+shDTiJ9KQQN8^_L7+|;YpT`CpCC4Eq0Q1K8Zy5drj?6k81;Oy4h@<F
z)w6n;1|)k!5r+bqO0XA&ZQnAyt{i{nUe;bYClJUwqbAOe9(DD*T#!qg7a+V?XXdjk
zOxol^H6qQ6WZrlFv`BapH%orP_z6FZDEgmw6WWxQWyTaV!f>>(mLN^_{G9W1fSuZz
zdJC6L;U)O9beLShYQsw>L*Xjp*KD^-9Ke>ZIHf)pm08KCJAk<k;s`LMZD0TiA_0)*
zs|)jXZH=u74(Jk$UXdGr(pc-e<X;vM3o&3WVfa~yBOnnrKjN|>9slNw&dw-V(Oxr7
zZeFU^!{m*qfbIjFqxMBQvkX8V$wk>~0BWvXZ0Pt=*1P@p`ad4){SRXfC~;$dNV$)G
z77e2Li%yz#3HUziPmvU?$M^cn_g3%v+j&YI!S$xonR~z3qYLX1gg;6Or>k>g?em<3
z^^Th-X1>uaHvIh-i;&1Wn!sPin>8ori}qnGlK)KgZR#YHQJL*bP0vj44AFq~yd5t<
zGoOZsDyH#TCqtig?M7<UGcoHP?aUfI;yefagj5fpye_1N3#%1|pda(%oL}NTLemU+
zmfKx<^`3`+(KrrV*L$NoYEz}N5s|(D={3wttBU!agmc*h?U>V`AuvtR#pRndc5AS|
z+vi+(S03fK2s8>{&9{qnLy?M!lmOX+c`J8RqyArk&E+>rwAe*b;qK?^yO2xui8<;w
zvEA_l&UQ)eqs|f`I-3*lS<%Unf)llpqz>858@&K_g41ztsTEf&y?p&YB8m7uk2zl;
z9Ywr75@-d0nlGKZ_K9<f>oWRk-A(YdNz0<v#4PC@K=pqVt!mOWwK9y+sO8i@u;ZN0
zklULI6#mC*#&SWNJL6EjNtw3zM{j1ZnXNbHla{DsNs9ie7kaDS$*w=0++o%x9B?V>
zJAIGNCpcc%YyR(10$B6?*8>n60XM8+dv1ZZYRPdeMt}FsWSSkm?ve9bTBI2fqt~#<
zrKj#qVRJ&%8~y$;{aQ7>v!~4fCnqPipyp@MT5W_%z|!y+>{h+0cL)suKw(PpDBM+h
zHBMIfj0_z=c+Zt?!>{lwFg$>5e%=?l5*gX+5RfqdeHI!&khif_n5-drgA#7g)2QK6
zF$!sw$!W3V8+GE(C!F`xt@f=^k=U&|QOHZus1Dwnc-jmSE>b5jUX?e};rQZ2sb^Z+
zw-F2iDhD{`m-QQGs~xY0ezn87SDN$R+D&WE$C9HbcfBI?)gl{|3yrf(12#RbJ@r%l
zWAmD73R@J-JpUA)=>-zi)W6H{itv>AnRFCYbWqY8uRfewlA?R<L+bGF`!v<0?;7#D
zlHt=o_tdBg(|(Gk0}X<3{$Kni*Bhpk@=U2YDHZ(U)RZ`*;g$F=1Xa%#C%>p5+rM*7
zXnQJDYuI*te!=v6-Z*yX)|!dK^@e;)8;?vwyZzOv6L0K@A8Z`ogK_DThwO+@e$AxT
z;-vN7rYV~}Y<h$f`PQW?!_c$))-nL$3iN2;QmE_!ARtO{L6p*~d9c}+_mz&-IC_}o
z*xEYZvoj6p+gFE={idwxrbGcna5+taw+h+t=U%|SiDmyWEu=V|)b5+q91;Ak`FHWy
ziM0)8T*LfeVnm)nbpF5VdU%{6x|Exe)_P2#vN1DM`3hKr#=JtJ-h9i>3C%h=opqBJ
zp&gWy8$6>v;wntsiDIAby*}Cd(lGT?ZHZ+FXcC{Z#$mL(E8j>!TisHjiC}o*tFc#d
zhohsaG=HVRF#ZTz)Z%cVGxTBUxtKhYDMh*J?>RY(d@r@(XrMF!XZA|e)0BI|Fride
zZ-cBJx9GAKZ;iJe4S^VqpAI>{PFZLWyk#nHn%dZO6;hhlA02As6qyPiH#L;QCgjY4
zDhN4EeWX0z^oV1;{h0eRZ$gZ@@Hq8wc^xNO4!(V{i8FJ{C0=@;<1%T0Hj@6-H)p%?
zK=N~Xh89eivK1(Phx3J~hUMn@7d{(K6NQnAz)*xgathO_DSb0Ux3JVnRAE-1PVSVu
z^Iol|F($O1EskCr_O<+r`$&M9^E30M(Y8D<aiAU|&M>RywD1P$C#&%6gRhnKsrxK4
zkWX*djUfAu?=k?7;Y$Ob{dbK~2_8ir`R77$mBuL!TR!F9)TSCn#{Ze9iMc%Gxvi``
z1Ux$0Ru&g*=XSpFi)c!3Q~h*Ypz1QOP19I^3l9W?<uAid_3aqm{e!5~FO{ynVjAM{
z3{zqL!RPLJsv#_JI}u2@0v{%3YF$+??~Mc3bUA;UyQL>TxUK{ekZp@T>+sg^pOPMD
zapF^%^-aTg8lGA<gnL`20|iMrG4(^&mVs5sPRF>};`ge@X>Ga$6-lf3V{gekPA<PK
zIG2kxA9`s|^3Hn1HQh;pcf+fm_el6o&sdEJ0~L^Q>a?SE=aakRD~;$p_tyg7&NQlB
z-a+`|X-9t7G!}l#w7+X{Ix!ekz0GD^D5exh$w^-6nUSXEeyML);~y`z_xsk&OU|Vl
z&pgAUGkO61Z42iSF6uhatbqJE9?kePWISM8FZ?yEXO6@wn_j`TfD2xjB`H*FX31xp
zak6jUb2|<SE_Gug6Q@(Z7dA$Yo>ktyMtjLWQU1{HC9TGcGRuq2r=I8&6Wl+Tn*f|T
z3s_Ep>lM!Y&7f2s<d=!h%6$XRn}*d8*=n6BE$N;C|L^8it!i)4AoB*1tLqTxCZX=#
zY=Kj9x2%W3ETB0vvd8Yx2?t4RW?`>`UK-gxHxvbW0OeY(a5$)UY40P9Pj)Y#5#xL_
zl~4BKJLpvy*$*A-#vtc#lQ(biDA==!n#|vO`t82>5Jllr)>qT%=Iw8E$TrQ>m<v=x
z$>ph%_?>IzyV&w2hUq}_q$9FrhpcLR@r~1fsz-raVU41}azmhJ!<;1{e-kmrv*A~M
zd0=wUsEW$XH|5(IPQ@9fXT>Pq9OV40amH|}*?Z(2(W+FsT>W%Y_DWtn5O?KwEN1q!
zoBqkYwqKLsf$-f%oA2Bem*ha%yIiX8^%c8JXOs+6wkF=0SA%CV<G5TD)=FqxHz&S{
z_H1LLE1u}w?3Z5_%QgyC17~qSL*r7T=4JGHtx|9APHzxCEv6*IuBNWp`EiSew?t2y
z5S#k+Tt3BP&vzT%B%{)4S7!L1WfsO|WH7)pn_6b(uzQeJuKxY02@?UV-F?6B?MYvG
zkAG<Y^zJ)?s-KS3Cnl%gjcqH9dFP5onwsZzfHrBkRBIn+ynMbh-(qjAB7K;KSj{sS
zmTJ};)HYRJxSUQhq$wFYPu*o1b@&}sx3dToq2*FHaMfZR37qG#NGq(aKc#e*N&Yr5
zIXL|M8&<7$KyNguN#^11N&M_IY(X?Nuh0M1x_XZ@y3#u}NnLGw)hPK_b$OHio<WgQ
zk&0vW>zPh$nc8}>nab#|Anz|fG2X|O0lTNKN`X>zoIrfvS@V-!o}%PKwT1wrF4KX+
zf$#F?UPWR~&x1^l>vv{~@|>$Ynxt}K5kLWYE>(<7mZKnV;El<$ZD*sIL#}^nxr#=M
zz0Fn47q9xJW;de+=R)UlZmK}w>i<x|)a@aJflC1+Q$MrYH2*k=3vMVQ<#ej|x=KEN
zR%fqIp;|q{QD0>=$Fbt|_>A`L%wXh_%gpI=1iTSu&zx%PpYWtMi20k2YJ`cUI7Bu#
zji$(qCpvj;)&%cgNW5?WqFjJ7Ok8q@5}ypEdv|t9CNp%uO<V6Ap7=UUsQrE)`&y~o
zdFX;UNK!tq%KFtM6iEBnd)rP0J9v@m=4KHM{9bi89N1ZJYpMkihM|B@5J=<Z?DjuV
zH%I^T;nRl>XWs*d${YWdtfTBY!^HU9$Q-~*XcE`1;Ul(*D^RPm8(OS^4?tKhqf>x)
zumico$rDx)8!1pXC}0E(?uSERVyN>fGISlpMlcCJ@<>|%CX;*3qlAIx>A|@@k@MuV
z82*ehAcH%zBBKZseEi1>)nX^sM4JB?T>)Vwg}Q|TMaUhrbkVh<QJFL0=qj)9<pUp#
zS-!_0H?qrtnR<Ac$1=dwg&yk8ObA4&B|pu5I}E$Kt|R;+2|m8ICk<FG(uYHkNjg<<
zZV}cma+y3<K!8rKGo8GFIB(Mb(yigp7p(l-7dwEZ2sK`DWi=v8jufQfZLvPcWnP`L
zQF)W>pj>pFVqTsdCK)>;C5epxoJF<F>!$<!%TIw6>fYL&0%ZS0y86f)WY3dBEebY(
zJ~HuXC}H>(fxLhn!<$z^@+Q~9A;?}u;7I{l-pb@w2r+`4;pp0fY&bV?OSN_^hYr3<
z7a^C)E5bpGfgS|Q8+;@KQn6(KJq_+yfm+7-BtjjZr60gp!2;+CAgkh<E`Z)Hqw~QU
zHChp3qH{mq8do9oK{Vu1iObwTB1jDW@Cr~>R)+u$Q{?eS<lxf=1pyd-lce1NjDuDf
ziB3`ci0qc%k~fIN6hdhvHYXK>8<9!$N?4;b!X_s8Drsncz%Y$Of!ri>Ca<iNF1oCM
zjuVcp%kz^&1|t>Xq~Sk+Kp=y$Y#^theFoG9$fMb<dhCO_o2?JEi~+tdQWg9|wzD4q
z<4{{EfI4c39yTI-6(r!3CpmCY_(T-6<moUCkm=GSWXuO+qzZ6P?_x&azgek_;8<2j
zCJQhkT>9o1=}@c*ro9u6RmWT~LoGI!51z;ykVi#j1C=qse|z4Cy2S)nB6}rPAj`Zy
zi9nw+ZrfCLQo_W&-9qPM$dz@lhSvm%g6VMh(oBpuF#Q;n(tyWD8=G;1E_D(%mw>NJ
zdE{mc)3B!AMVDU4jL68FWOaU&hA$?01E$BeO-888g+wL*s|}R2_zAo>iO9M9VHz?$
ziT2DjAO{nXAe&Yyg9kE&z%GUZ>Rw34C(Die#+Vhmu@AM-4I4w(9{Z#yVeSG3mN#P=
z$LKn8;kr!TC!7*-z=ZdaRLj17dwBH2_fj%zF<Q`UpEC@Fpnx<Ss{xeINde-mX5!ei
z;aJm-r^^Azu8c|>VDJbD0h;^3BFxfSxx5FpXdLpv8n8We&83D~b;<v!O@TUgD3awF
z<)W)@w3dg2Hh@L!gv1(zZ=~0gq02PXVCbrByIKtXNSqG_XKm{(@DU-$et@nGWWUrr
z!*FK5cn9azl)xNQL*2roo@dFM9B01(`rsid4IhWDcgey#;Kv6v9JGv3H*%&zzyP;=
zoQ(|LRGUeKuUsKJw9uuygj;r)yXj|*$Y6oE$j}2CNsVmy?R&+i9~S`<MgrWxGMeKo
ztU=hZPa`s1`XD_4L-f(E3u`pu+%W?0GRyvTCXFujU=sGhK*PrDFfoTkIyLBu<vrdw
zI}E;$eG5?b8Yk}<2$TZe*8z-LY4ynu_$o88Dc*1@d`+65ooYiG{`*Zvv<b4^0+2H8
znlo~Cm^dJim63Ug7IR-$^sTD|yz566WO`#5W<_>kUW<v7_&Ad$Zy*^g_AU$RdOb!h
zS8$9>uucII-CB*rxEleBm`x`UYO!(PKn8Gs4dX=Vd0c5Yz7S$fLiedt2r-zC%)m;Q
zw1>JbB>}H({Wxq0eJf`P=x6bDEiSQ!*)Q0HkwqI#AbS`YFgHF5X7VCT)PjL%<IT#T
z&vh|0bk5vw0JCeZuGa?|sAUwL)iSqG+EcBpaB29`uPsKU4GaNxL-O$f%oDEoc1slA
zd(4do;suRWI){53Hy0pqSSXGT`2&!DQ+2)zAn@dcR1^wZ@$LvGWk6{b&OI#FUbuqr
zz#n3Lo);p(=4557Uw&lrjaeMKdHya1%37T+{q+HB;u}CgQ0xu#P3xJ{`4<cVf*_@E
zy+dsW3cz`Z!-5k>4Slm{={x&g>77LYZrIZNpDBD?ZWl{_uULF))Cm!~#REl4G2&t=
zTZbbLGQsiqOGQcTWBHshonIGusS4_b=)PmY@udJV5K0rG2-_|WE|rCj;Cz!TU<&-)
z-+1GT5D;VXaPU44Jf^IV8Tuvzg!i=Z&oAmnphrw{Y%g5dt+!rs!msc_>?FcT(ckn?
zM5x@p)yoL|&W~2}@Jj<Qh*01wZwZJU)CY7|Jg9CyhNcC?fBOvr-vn`hd}JSiWexd-
zSeGVKt58xT;93$05czeg>#LJ|9=yz}xuAqK$;%R<gJbomsFg6OiA&U21O6Ei5jgjH
zMl=R%5HkHD6l-7#_#p7Lfyu0tqUeJO&$hhz4#+n^vIP&sbCUlj$q4Cxjd>1lLTz<c
z6`(ZCiRy~s19|9LCn@HkGfZe}Pt*rs2lbO4285GO12&8?lb4<#t4rPlN|1fK92_K(
zS^X>d5>bFWxl#=60y==m$szIIY%fH4{7cd#I$(nT<0mV{1EV;{b*O~yzNIt3(9z3$
zg!7VEt#)_z2Z(A2Eb}O^A}ocF>>JXyGw^LfPn~0;nt0GL0rG(bpHy6e5upz&*3|Uz
zkz#;GF-}f8ff5~kr-cjG;@Hcq=5-$+(*<$*=vcr&M2uwaEFRW)uP@Gid2RYHIl4|`
zk~FP)=og85CQqlpu}Oi3hEFo|<>%=cLATNINg;Vd>1YRGWMx}Eoqqdik=+&a%|D1{
zD?gqJg4{<hYt<wjH=CCh=kC!H|H4`fuXJR-g<k~JdLVtvJu;LEY7NYJd^=zjMtUGG
zn1L1DuE4^i0<~_!)wy8cg?A@#T3P#GlA;(1hG|6L0Qm@NG0s#7ti0@dS&``4Vdo4*
zborlYkN<YbJM;^bk`gvA(4`q;c?W?0;hj+-#RP9-;?)Q-<Aiq-eep`>8a-O(btx1Z
z3pntUH`u0<YqShNhUNgi$<V~~uHj7XbNwWKKvX=~qFSQL<bC>UV`u{-@e>CRwUa=2
zbMa2fpQr+4`W5#9i{i~3^vyjY1t^ym(M$|XnDx1)Mau@Jbkprk)KK@Y>tPryR&E{q
zm^l0WP)L2CmK6zc6)Fwo@G%mC6K!z1PHbh#SBrw+I3T<+%6?*N^DYSx9F*WQ<jaWX
zSI_xLi0-3yLRz2D;v=p71rT)33#+R#>+&yJX;J2~Ag^}-bYLH~R}MxHyaywGXp;#U
z^s;B7{QsPjqnm5*v=cpIo|*n+XfBTM)BApp1h<3YGNr2n#KO+s))<6t4&%q|_)s9T
z^ZE&1vOB+piG`A^AcfzT)eg}+e>+eqc#KeQH%sPEahwxsk6_C?C|I1_;<E>PkHRdU
zTDa2GmWLUWr}nGe4`{OALe~LW%PRYU2@>5IL$lF(rw1iYO4h_$wSu6GM!m*yZvEmv
zRXl}pUL{NBge-G!2)^$s(uTK-dsrO-Jc2+qMIl87VB^uU%9=RvW(4@wS#uPlZ)!0{
zVxy0TT!(2GH4{_?E`ZmVsPzC)izNQScjfe;?l*Gd3^_WI$oCt>2}g@-fMO-SS^b|h
zCZgX^uxO5fvE<kN@fL;m5oeTnX8?PFw6HYU8nEGaj8^NBW6BO-GVXL~g~EdHrFBlS
zWA}oVHDP4?&%6acXMA9p_i1yDN!~!+(>T?2$ACcw40lx`i+@;rrcQ=hVnI`Rps|Ep
z=Wh-Esh~3RdmrS@FhjteE}N_rN&EcqKV+k6`u>awbRra8+df%%AZF7or*3GaYH_!F
z=YS>zAEY1f&7-FlJS_~7jwbe@?V>JzPtn@;G$(J3gY3}+$lSn=tdA5YqovILhENcG
zmXY>>`opJJ-AZ#F2m#O#?gL3-BA5XC3++!_GazA*)uGQ_@H9dcCtv7m48tV4`9Y6Y
z38<UE8ugWkV&s!83AfNy+1``A*C*zT_;HYON=i4iVVW`UwDn$4)$z@w8z}#-qS>iI
za=9e3W)mCSU-rS$LD_O7BGTOjqhupj?<WL)Vorh(xQ_}cB?bxqBIf#1UW&#X{bpg;
zLW(I(R-$%r`<wX5!ogwIccXe}W5>^uiE&@b>^P&FmjW!kn2FLEqicU<HEwdHA6fEj
z0-8@=umb!TWJ3#aVZ={=bJ|F%z`@bkbc9`Bc(DVX7Wx3fih!hakvo}-8kl=f_q__M
zbQg~RWbnL9wVq(`3e-J6kiQ~-dF2=xD$P06<r8Ly!QH6z@7;yIx_Rp1ow*=yGN`Nt
zD2)HQ+VVY+oxuf}kCNq0hV%gaL}x8`hxdcLiD2Zs1e5~U!HMZND<2;L6PYO~#TCX9
zpa*FAq_9v%K*)HKM&QaDSf?pC$jlWi^Kz13<U*0FSfitVL1Y)<$J@X@f35+`7>2QC
z#MZz&%o2uS;w_><9P6Vs=<-MO{XuRX{Pcjz<PM^+NT*ve+9DHOLBU>wyt_!yEe}aL
zfmNe9QjUM0DvMM?qJ-+rK=m*U5qF%8Z++0d+Nac6DG7WpbXn>Pqc>(L0b8X4L!m12
zW=h~`kzrIW{U^G-sa;nTKR0eG8OZ!Osd{hMDx=B0-T>imQ``3t1g&g19UrX8(e-yw
z#0WuUcMw(}lym}x#{u%dq2TCy_yP9Sn}hw~5^+)M9TY$5ZcnoK+7Sv10%TG64HbU)
z6q*_uh#&=tfchcapFX4$eIW68@S48#ceg6Y5<=OqNXiIlC+-ne$R`1LKtL4uFoV0`
z;Xs)H<qccnnphA5oIt`rVE%~YnX$LhT@C#o?;`>AL8d$4gKWpgjR0>MQ`vjgcQ;9&
z@D``zrfViaGDlu)kaFREJ`Et?t-cT10oNnCUq3@=Vi`vs!Fyhg*g?vB<h$4tqm&Me
zmQWJlVFW*kWpw)`Gmw}v5&Yf;G4Qc~6g<sAngl;`Va(z%dihrOUh3wjJ|3PLDs@9^
zFCR=cQLIj^y|SN%DP?Nx8oCmT{pe9${P}!{J)`l{415}o^xO$F#_H*v;s3fs7@0f?
zqKUnO5TL_7X^d)E#5327r`57*L|%Nhwh+!6P|M`y<?T&3@s~vY{4?{&fe>BW<;>L8
zkq$^2FG){w=?{!@aBfBO4GRG#4<P3`pfc7~(ZMCnum&{vAK~1so_8e#V2q2LY|NPf
z$dA`i8-?;FU0N$k|9SIC=(h-l-?te(wp`{882+Ggj~Qw%5i_WM0q@<2k~1HM-OD;=
z%&*1R8kQb+0lxC#W9IzF%e)MT;7~1RB-U_IHi{5~F85>!&~*)7=9WnqUG%9JB?t5q
zSYKFzF1aB5$4xB?kCviku~|Hm=hyrqh>{ibE4kG-ldm7RRaBPq)RdQE)E?BU?t@9F
zOy6hxWTtiS;Q$uK9ycn3Ar&pT8^ZEQ3~NBbWu6+nRc=d{Qnv1FSGPzD+K%YR<6=0V
zK@r`hleK8MiuXj7PLOO)&pvtnpu9r-j$ZbC>hNKj9Zf>!uiz*!8t*H3eJ>_CWLbhw
z@ZE)0?2y384VnLAu~@Qp3Axk>HEtVpb3P=Rpj8uJGF~54nq*-otS&}g3>tz6qgu`H
zg2w5=EWeZ%y%3CFIwx}2AARm6MU1(_`MyHR=Rk(_;@jzMIoG)*;1Bmv;@oyL_fg5I
z!6URRT68}&$yz<YNfHQi<Hd*Le{#`HtlHW&X%Wx5#<LTQtJ_>j+2h)mxgYS`3?5Br
z{U#yl+f?#EehL=bANi3PKc}_z5!vCsbw=C$QpyR=D>V#yp$e`gB(^%-3$!EaeHcrO
zxLW4hVDQ<jF2bobx3{C&c0KP$*ZS1vID9^Z%j>UW4bR^dsMdT$rVbL8UJ%F|xU*{{
z$acszqwD5$4<rM{DbS_I{WYe9?Hl<Ro+uNh(4}KWKmbbPb7F|H=%nF&^lDGX4qyUX
z;SqlK2r<ydnY$!2@TEcMSP&A60OT7f{WfWk>RMr<4PqQ?vY$UD8rlB}*}n0;FkolQ
z4r3bHF%$Ka6zZbfrE{9qae^*Wl$JU0xG54wc1c7<1S?vnKrIRE8gx!gkRQip72r|m
zQYl@hd^o2!x?EDXt_rpt)`Gf#uV|6i7|Z!t7pFjN6Mb88UV&wPl*mO&93gN4tzdZu
zeg@>x=GNL&!ccT?T31?R@|F*Uh|XQT)ag`Ode3t3{S|Tu$D9HNDL?6A_U*?LW6uV|
z11CTppnnOfBpnY9PI*9d=@m8TDpC^q;qs)B=pXmwd`L%2R}J0sepe5J7oKuuow!@_
z6|3I=z>?f)yScqrU&{F5WAAu37=*nRAr{elApAOb9)9s#@FHjz8aCxT!19_lafB|e
z=nSKZr!t-Lyqp%F%mB}vMF}rN$m;=&4RrmJme$ZlG}prmT?<Z!G(yT-$x)UlVo<@4
zPprwBcnA+eQ@>i_1XXZkt1WJNG+_9m-c|v5;ZTq?BM4mpiLoO$#b(a5qd|;r+_?Xe
z<sqN34J|FC9MyA2ywY`iQ*jtJO{igZftc6+@Ekbpe`JNaITK>d>OeNK;L<xig(5$8
zr?x{t+Oo82PyLy{uf1l5S}TXG>8#P9$Be_!wW)O(U6#0vfbi<i)04<|sm1W*SfPhC
zx9B9`%kyz=fwUUHd<z#5B4}H%(1ICAgrZS@k-?d~1kB2T{P`G@{ClE+iA}!}h<#>;
zx=bq$eBA<eN7~g<UMY#&n+as}+XSInvhdktlIdk$>!F`n83`wO+Xpm^x&z}vZE<jT
zTWR3uTpD>>5my?aqj5zRIrgcVA8>9iqDZ58GEd;hiscM3AWE-B*B#kme5jVash}2N
z2jXqIulMl<;XPvv8tDm-u}T=O<Mpq93@Ze#;hj_R3^Ss{j8yaRPU9B_pmd5>hGxj@
z*w>;S6zo1qHC3_&8sOug4ewwj#87llPCJPRBgbASI5kYXjrge<<~IKPBdxZ?0@j!!
z_|AK8rG-5NAra}LbbDhG@yqg4La-}IHkE|TY+V`6z*E%_i&0bu;WIO~-JC_;V#kT>
zBwDq8BW41unFqlu+C_`$b#{CyPLHN;oa`T#%4hu9wxTmA5{Rbv6gwu9cPtjv_s~&y
z74?>Vp=yvFpP7H;#(D*qD;sv0T~g({*N^Y;h42StkBJonDy^0^WuiyN{s%Vc^?l<T
zW<_)p11?Axf_q4dH#g*m$lF@vgyR{2RB<THAtMc}AMi7tDbBqp!@Jt~4YxPGo_!N!
zwamLXVvDp!C(%WHD{x-sRRa#C80{FE84wpq4|s&wQnATF_Wg^y;5vT%MHbQ@si(-*
zE2xXqjMaRCuBdPd)SWQ$N^VYf?^qZ4Ho@UffL{cvgVGA>p2DP%JAe<w+TO#9$|$ZE
za)P?%HzjLw0lE<xrl>;^Yw%<8=`LW5^SLLH{u23ffzLauy)Kqa7x_Lv@X6l`z=WC6
z)uw*%c=^^IL{7iMSA3vd{wJ&=?6WHk$x7Cj_dx3QEp(Mg)&ku@pG4v^FIn7bM;U&?
z2F7esJwPKkC`F4#puM1G7sl|ib_(<H70kB`J^5G*M&CwXhi~-{{|0JqGnkT;R%z<U
z$i#&;n4bHXMU?mB3m4Xy>7Q@RfSf12Ff#Ze|Do%T^j_fn(0m#L;_t@+K`$ry2pjEi
zKDN@`<yq!S2F@*5z@B;+;Ew$UK8uC$UvGNH#Z#W^Ric~i?t&wyy)+@()eTmG5&_6V
z5XsOkADBpFl0AukVA)XY%RKzt1R|`DkFss9*I4XX^T8lSIxl)%=VM^NRX~H>T{?NA
z;~No<|17BJzFuYWQF+r4Var~1=8`u!4ETiBt3{XV%_oaQ&rqUZBIK!NEoSqHu*{LC
zC!*~D)=<s7KK1-_q@E~{Oad;$<x9TLK=}$;V=hK`=t&0b+lQ$ftU5#87`Q&UT4pt1
z(#)xZH!;@MVqPfZc6MBbGLmfhU^r3Gs3om|&rk>7gYAqW(eSB#sLQCuJX`68r@S#w
zj;BKCfBORk{f@-AYEGI^O}Ym%t2z05qGiT1uL#-9y(r9SfCsXD9wL`MNW;Gbg^^<~
zEasEn58t3`7dEUV6%mA3gV}rh6)ftEPdU-GyLc|=17f^S^Vk6sX@XG_KU3H3DGp|z
zrw|!PyMYNMKCt@8$g!MxgEiDj$+_T;bkV$kW^#M-9w11BKz6k7le#n}-<qEY8dh@>
zP&zA$30*yVB$;mBOi-(vPTDHh$`76-RhZ+8`MQ3U%MM{7ZdaC70rjW1HF!N0@^THr
z8h}cL@A!ap4JgxDPzlt(qY1M4q4?D3FG>(f3OjQ<Jk%qwI3XgRY%C^iC*mu41)!K6
zwvuC3iV*6NIOgnzq&x>oo0m+5rNk(aMS;ynFxu!J_Cl6Mlx@Brk3f95{1jj`D~eNT
zm}c%ihz%$GK4ORw^iu9o`nq5~1cBEmjLQxNk+o)+OYpD(>HsGQIBD_Y;-=Gr-r@?A
zE=g9K-g%onLW`qq3u@%Y$Ig{;5WWzJ$C<($A{W_ZL0?4(DN`~5JAnfwK19=O_G?P_
zWHzV=mxUBTgR()98j63%34ys2`B4$E6M^nO1SO)Jdfq<9jhKNSp#(ujs-&$?Kw><E
z5O5PA^u6^jb1IMx*oDx|mrw-nQyA-?lu17qTwoBOR@_C}McPl%U}XijpHi>>n$u9D
z@*(^r+7Qy#SB3(QPc$d62ACBW-1K{-8zdx;Vimmp@eAeQRXj&w!5sXhBzMwvaS1oM
za{_w}P5iw1`?5i32t_MC7H&s|vZSR$4GE^9w9bA#j6^{YBxrM8ilE9;{!iiHsUd;b
z#JPSzIRv}l{GmYEs6O&QB|eOJ@L{dHt?RwxTYnG%E<XVaEeMrPfe%U$!%uI<8$odk
zbfG+bL2cRDq*4`O=q7W0e&=ubU^JOa_!%Y|IDTvMqf0~FF0GF^#qWgG5p&#s{s+tg
zX@)eaf#2FI3#_v3@V{V!1E*HvYxX!i-IOm8=;nIm4Z(CG(B=@ninhRyJzoP{5M8zd
zK8wY_J?eGv9pYF`u;M`6FwMyQ561_3<@mA0Br+nemCi6U`5@N&B;4tv5>2anLtsNf
z5>)%ccztw>iQlsQm_=<cgXJ$(Wbk|5<i~&5&Xy&S?U7j}Q4XTRhP}YPsS&|%O4gon
zdKZ2la8HEV2EVqJ;h)0Lj*D>obYE*5hWSSY^E15rs;b_FHQ5wRLU9sB?fC>C2d6ai
z>w4{dTnaffptg+U%XxXP`v9A{{2Z?sBUL8%ArH)EhS4GNe|M0f^t;8&0gO5V<$%-#
z5`uc6DA0AE^Zhm+f0T}bT6s$MkI8fe{=0KPgS%yYCo}HPt4HuPzc-9vMeG&SeK#X5
z4eGN+`+EbUm#8-AXJNn#9)@`lF{{#mb)PV1@+9as>Dmro7GX^c+cRqe8^k0?ST-=6
za|I1v_UfJX@xbMio4DQmWRNJLl@yc<y2}y~$RHGwG0+@<1EM_!Z6sFrDzM6%rsFMs
z0N+pW1q6Vc>v;#L2wEZwswB!50rAVm<0<nSG(^hXkB_Q8+j)sxulazIAYEiz6u?0}
zS=6jdxAaDgxhx%`p3}FUOT1R&dwT=*1@=x{Q1XWl*<#T>8QF0FbiWc|iN{Z(^fVh=
z1dEJhcHC6Drcqp8=0PxkB=3WS?}H3z(~ctUNV$VG2@rH(O{zE?w>I+Yc3N9cJOwBW
zSW&M)8@Q`~hK7FB1>CeOggKM~vlC~L6ei1_?YiyKA_C`mObB6#mIYbX&TryO2LuJO
zSeR?RPXNr&pd%+UCCp%JfeFBEia<c-A~}bZFnOr1#7YFY91>4o8$h{^#kU*TjR4w=
z5{B{vrRK_dt}5~n;Q^r-!!MJQUY|w@fdWt@?RV_dNpNbTU$DAfY@tw<tZWgpiTrpL
zz^Qi--T0dY&yco~3Q-WqVF2ToUVn=q=%5l56jU+4<F70WzC#!yJI!&2#>4=U@=5Fw
zd<eqN`1sQNvK+^S7X0y|7eYbs@U4!JK5FL!YRsvH9NqN1l;CA6Jt{$rs9aS|L76Ia
z19QPCOLb7j7MTwk3sJ_&*|YRzYWli?!H}crO=%@C%urXuh_{t8U9p+mZ2x>r1eomo
zt(l>(s^N0q-mBHFkQ{e$!hc+R3?Jjf=PTX#Tao~rA^QGoYmN1hWp*>cXP-JLxc{Zc
zn%L@RbYi;$q3+evA9nK}YX}Lv)q+K(a`g%(>tIbR17KZU90vz;|J%SQ>Gv2{+w*@u
zO8AR4v0Ck_3F}n;w#;1{pv{N(R8oGrZXIjjI^9SEy+0&#1n15VCds&K5xJ5z(Qgq0
z`w*g2w!aJz${f+9RRM65IfP82-H-W*RQQi0&50a_Cs;%2dyx)QfC-7)>e<+nQol9H
zRpnR6c$s@t7T5iO_sS!EFeD<X1!?9Rq!vt!iLNvhp~^yO`?!!|EK4i3rN~~l%A>fq
zet%x}<Ai_;;TPuQ&kArdvL8?cL!PC>s5A|M{CCv|%qLnLN)#W0w4L#*ZO_1I*M8_E
zNRl1r4>5}8DIw^rJgi{TW#Lfk99rC}Nq_{|$v%^FQz7O1@a5oV%rMOU)-h3#^*@zn
z6>wd|-TG1irI14jYXHP-SjL1PyQ}}?{`>}gY2LzOD@)bl)t+njGH7ZFlTY*^y_sU^
z@5tMCUCLmKSBnf-)3|7yA6=>`Wpm3sSwBNwz^|fl+{{T)>Zwvrp3PJ9(nsca4?1b-
z82#i=JLOGWwYCKBSq%L)&&P20I|*HLqE-0po*cc)<kfj{M}qge69I5%;3&p2_g#%|
z#5Md!ZJF?MnRYH|lfGw3@V3G{t9P4Yzj%3ZExDN)yd~cvZ5jEfpw1O!uE$sC$|y5*
z-C$R!GRN9a0*eN~v~L$K!5lE`84c&Lv2YosB$xEKb+uB_@A8Z*KJMyx{RdrlUPAIK
zU`l(U&XOmBnrrnbEmv2uz65-YnY64Birkq`<QuTV+?#mKAK-R)Om-Hg>g;aG%YJ=9
zu-cVZdk##*zjl0)b~{V+<cTxzPAP;}aA=eG(N~Y@6Q+t~o*=fuN4#k^Z;Q|s$*$Uq
zwG~5?fSImh^l_+K)IQ{i59X_Dd%h4GGkL>n#f&=HW!_Q>bJ?5de!E|ajrUDsLSFoa
z;GwWWAR<?$Kiz=u+y@Xc9JKN#ISA5TTI{MKl^j14n;oWx^?E>~SvNtLIKq5Woa`4l
z6b+?ucO84}?%5re!yPXkjC<IpveWN@ET!d{PJc(~pD<EKIu}VziR!Thj9r$&kNy9R
zEOOk~w&{4lXdNYMLsAJ2u~-vO*()(ZhmQL)0XrGv=G5-m>VFn>$kFA>TvrRP`V7lt
ziI$2jJ}t6GzFJNH_UGrBDl+e>0HcLUxVEZ!1V|QS@%tKaOs9$ig-s>bJTU);_|f@h
zdLH!h+t_=;Ur`{UgZB(9WLN|2*uTuk;)nmfJUIuEE3!Ze`bbyH6Ek_V4eaGY`@#0F
z2-r6NMbKi@)%cPDI<gxOY4#UI5ew?R(_-s5l_y5wefkd62;33}vg7f28PT@X&ti>v
z@_pAvqu6v-Tmq2oUZ{;d^fyOz?VO9$XGQTzX7y`$-zoFc_C~)clgIV&b+28je}Zyd
z9idFp@D=716J9h!;Nx=*^=819QXV$McrbSPddb7+82On&15HpVuJ?HNBf5NQa)4A(
zYoDr_2I@Hbs)dZh_0na9T}cAovo-%NDsSDT{)s0LFa%uWqTdx;h6h=F3@(nKjs%?A
zg1@HA)7rTJk5l`*g17*6GYR4)MXbr04Hb#o+T)D{tAEJvnUR8N>rTv}fcep47cvzE
zjT~F2%H+|jgQa{aU+Flz>cW#Za0#Zy<&R*@zXBLn1cmpe7VA(lC>5qx$c|O=V2n>n
z!8p{_aUHq9C)gT+$Bq<y4DrE`?ObU(yrdm_;Ewu*Tm#j$l08cR>6AcAUV}Ex>7pZW
z*5)6<Ct~7(Baa%?<FOE)dPoLyvumq@CXs~q4TIaV*&`A{tPe($SS#`=-D^5Z722$P
z)Lc0ZLqGz7KX_Rf`BhEhF|LuDy;XvEFoLMnhhfppvi+IA4Z5t4bjk~g6Rp-I?K?sz
zLf9TfLm?RZD+Oxb`zZVHp#Z;#)0DI%QMP$c=l_v)m0?kJ(Hca$92Afo98?4;=^RiP
zP!N%B5Rp)%8M+Y}8l-ciySovPLAtwZ=<b?(_?~-z-QP23t#$U<d+ohfyl+PT5@!Rh
z(ESW&UmQZqs!td59gxj;QV*7$1G8Rmn_wbaLV!rx4=hc;y4K|j?&}%l6F7u3BBQsj
zfG(N2VFd7X1kzd=%pe<}V^B9fGZ<EDMjKXJch*Al6KewBu*UJMzxWH*k2pDO;r8fu
z1I<vVDfcZ@|GBZ?)*v;hh@a8=_U?Be7i*N@&#Mr3l%Tg?6O?=^-Wy7}Drddf+vX39
zq|k(f*rJW%_S)amt)2s_2ltuYVMn3LjdI8R0}rU6#=|cZRaI^MhRLCjj^6rs`eyQ(
z)v&>Bq4l7j#e5Fh4LHjI2h@Uw+*c+}w>#Lxb3lgQBdBmO857W`aDC^kDCu@31cB|w
z10<lFI_B{)CrDjKobITS`v9fl*s&fYuAF;>zn<AAG{HS62ZgLnAM*W!be$X7L5i|~
z5H2OB-3MRtFi}Dt$S6&eC|F_U;8-Uw4!x-hOZi8@Aj_D;CUoQ~t@$)8^^d*dTAnB^
zCuH#SZ8Ej{^wBs^2$Xr^WxKX0uh~h4uB_)2`CZ*owp|WImX*w|k*zy8ZbB87pU4=U
zF!<enWt}xl6}E(B=uLb>7z#abIawe|^h(Oqmy*^#-&6sLseq+>S11Iqh~GJ}V8|df
zZFmMO;coMh%Kh)RF69Ks@*6&&xCsa)0Gm?;P^+OIg%!oS`<T|7@yJmZn~<BtE50Qb
z(QJHm^1_YBqZ`q-6c<E{j<dHd7cP0^4y8u~DT}S8*b8W4-rME=ZP)p7Yo_bjDK@EP
zK557MY6-##KN#qOY%+S-w5^BU$Oa*5>qaRKXGo<SmG|T5*Fq6hTm1(k)Oc>3aRkzu
z>iXS5J2^}u@wd!-AiF>urE`&=tKTeN^&(1|P{irg8iDwG`^8k<44`jS1_<Bv{sYDz
zW_Oi#RCK#L7YVwpOs^)tk68J&>pGBo`#0E`h?{(z1JJ8QTsf>?8qG?7V=Psrs}ed7
zLarw7Uw)sAyR>eUX6-?g_{N>v#o1I)XU!TRlfJ<67-HNcrVE$HqL-QO<_tN*hx_|(
z4p!^v<up#KX2$0s=UHK*v^Abdc0fs7@%BO6l@iOEK;lclYOmvDeB<xW5n7n@kokzu
z>`#Mh5^KYSX5geVKw^7m{f33_!}T^=sc#<e8;30*N38xQq4RSxC!Ywg$!~<)L!Tdp
zfz01Fk|Rq0s}6$*k_T`+o&}i`wGd0a+K|)-Qr0*H&V0WKj$wnu20&1g#F>PfOFaYI
z2@i2!@k-Kmi3>@W6Mp{_4bu_^)M$nE5*rUI)(b(_Za^Dr|G@J*(PO1An@cSOEfKs2
zVr0?=Ng*3USaJ$C((U*dofg6tqrMjf)F2Olss8P~2c$05GHYzLOhhfb^838|g{Ai(
z*YfKCLyZ15aCf}_?1z^+E!ET~9P7s!zZ6Ir-yKjdv{<U+oO4>@P*9L_JeJVE^4jJX
zH_ljG>upmR#{hyKdWmD>0hYeFC$1fi$3)8nlGwo>uSFxL<0(!4=tHixB_DVhN6BA{
z)O$VhinB4)D7a9y=|VK~(PGId3rT)<N*HP(P#N*+Svse0eCScwwmkh*8n%Cq{er{^
zf(7CBEPRV?hL@}VI9Rx-W&Vmh_Qy3F<YLu}1FKi~fInqG0juHu)7is!xgP}W3KeEu
z`5#G~2L)%|ynj$WCmtOzAR0JGrS<tY+A-=g?-9!d*|$DKiKQ`YW|Q}*Prw(P2N_=^
z=h2&otE87rZj>)Qg_Sph@cQ;BjUMZYelG(uo4WvvD|i#A=7VaOB^|p*!+>~3s9iEI
zak%XW^mzp=8jO7a4^3Shq~_^Q7kDJ%n<Cn-iGEqoS+j6%6gs$gaF+q4rrRZ1Uhoim
zpSCtxF9LYRzfz8xCm)Y=UdzycY$lKJyPN3U?5x)vc8+1?_p5$NHEV8)Vge3#CodwX
ztX1UD#9<dX+k@29Aue|P%ULE$*<H@(z+JEl9hTM`Ew=j2IxeU*q@Q(P>i4yoy#{8G
znkL-2LWYX^!v!4}2BbWCvMlYp`w!Qb9M{@4pBf(jL#gEKG5Bw%e`dG0v~tHGH}0{+
zV5grU8h|*8c?-`I?<i)LW1d}GU=womet=Cxd}h8opG>kdYeU_|4ve`(F78A0+k4y(
z_9eoZ_4tnbWl4nkzQB&W@h`mi9kJ^|x|lSq@fK*#?sHwRJ6Wq0zTK|;<8K#&Xjr)S
zk>O^z(=ZM1vfZnlD5iubh4tp^6Hh}6*mX}w11y`AgUPdIZ%v{=bd%+j$LP@|WXr*@
zqsPwy1uK(n0>dagbYXdq7jo;gJn3b!RUGwwzf>b?{oXGhv|qdv_g6R^`E(vc=Z`91
z#+3>|^8wrtkR|XD<x6k&=kbqwy0UslfR0wQ-4Cg{2bsNx0W=;oa#N6gH<NFqmbQ)H
zdQ<)MI9Wvb`ClbdT&0#^foD}tK^7gJHJi{+r>Y{NUSrH8+ogll^gYzPMsBJ2Ru>fR
zUNW2zlvamIDMqqm1Y^n7t|eMroQzX94qHC8Q4)=Sa8lrGgnPgrE|-fAY%ecy*s)yH
z#SA>M@;L?Q3KDlNmMZKBI@am@XuuacAfx5Z;nJQe;@Fy>p#}_pr8P11*6U?8=LILP
zr^B3rxPEVQEF*K+LL1y*9hT7eF(LT9lShn*px|@32pB0XWW6{fAm#?E)5I)BHEs;X
z8`?daICBbOcmwIOOnuN+<7Vfm1xyfm;@G4=_7@)pui(l5r9&Un?KE-mKQfG%cZ?P2
z0!sfB$wIB>U3lircB)ljKj^<62F7yt&EALt;I50k^xJmm^aPQ3E|85j$pn;!?)uNM
zx*Je?CDVTHU(JJmJ?yxb$OdUiJ&^e7?2CF|uEPoGAV4E!mBIwIX02yDfsNfN^xRD$
zZA$bQ<0q~8z%xs0O^LJwkx){qMD-{tl!rVt$a7Lo|2O6oQPLoiEPG}L!5{=U`E983
zCeB9O^qKmb*Ee<Z52#2Cm1HTi#7!UP(WdtzDh*o2=$ST}jTsN?9X+HG<-Z=GB+aB&
zdng);?^BSO1qBxv3yO{X9)G2+2Dbox`PNUCwfMYPWv9F@_?vwK5RVOUCynr0`9t6!
zplb3;iAt9_u45pwy2bKoW3c<>g6*slHR#N^B*&8bY{e;*pbtuf$+ZAkcU+Uczq-$<
z?_K{AiWn8;1@7wD-^DtY6=h<P)Np$M{y%Ar^24kJ3HNfABT&JZ-nzc!_Lf=co2cxM
zS9K87{LwY6cA#swkus$KhN$%~_mqC3kep+bDIa$2qza3XN?h3+7wDRG@y`K{tmu{X
zayQR|e>RV%&%U&43Ld4c9X+3|zOe=l9=d1=3)CO_?b269eP$#UG4`-nEfj9=_<=8i
z;^;j!bTWP>0QB`}KPU5G+6l9ivGxb3@q9(CFgiksomgBP7|`?13S<M`O>fBWGmDQw
zBYbW>zQBsM_)U8gDM+)gPssu&r=@kRd{*sD+BCy(9s$*}M52BQlPEsH$Au|$z;4(x
zzi86FYyUC*1<n{0C|))L=&jluLa+Wi)zbj((5N>R#qeSINpKI4OYOe*NR^HYc9_QD
zn7aAi1B1lxx^@BF<Q0uVuLb#h4%DhXP+W<sph3}hwPzFDIbZ-xG@<3smWMZ0^WZR$
zgq073<I$ASm0O-=nOM3D&)E`$y{dKj0GjAA@8k(&Z~G`=i`D`Rz-j}1lBlsKHHwxo
z{Jg{wc_dt+VeC)tBa`c&#75#z1)MMpzGsT@yy^fm+A$8uOgQ(0jGdjGbaNiBp#v$e
zlKa9fg?d4j+=iucysPId1(yBTq2Ex_I&0!aze75l+<K8udP6mYk72Pl$p(4qt?v(d
zuQ-W1F+lV%-R-TAZV~z=9nT=Lh~UjRBIt$i$4{Yxhos~aotUt901P677M&8=_HK@2
z`{v8AIY^(4mbIL}Y3jN>5+>ll0J0IUBPUDkSL_fNP&8c*MpVsenYWwSZ-ic5mwvoC
zm~PkFwp}%qT(lz<vcD$`oM5b)gtYMJpD~05k)grZT1)I@qV)k`Zo>Xu%`yGF%r7w@
z)6BM<<$X1Y@7qtMc?i+cT3bDP3>|J)AD0s^N&0TmI4#BxJ4g1)lNEzSi3G6t5!D!P
z_E~GUpGwP_vbOjCZAS|sf^hSjP{=HkZjr>|)2*-#AWRwj)6rSe>}PzhkVo1O1cI{i
z?{gV2OnD#BA?Sf_*X?^f6M)OudjK`eb1>QOzlOyMnyhTdv+tZH5{3a~sIC6kUH5Yc
z_&~9!_kAxT(>SCivpkRJ@GR~<g?R^cC{;M#esS0aV%(rJFiD)Ctr&_1WK<x8RBT0z
zXyzFM6R<bYsf^KA(e1hDvVZb_=`vcn-5ME-mmC{aye|hL(l}||1TK0L=)Ql4{Yg&J
zX_@+R!Y;xf+)IS0`Ca$IU6AIlN+?j^Rye0&nf|%I+Jdn#$qnYWN*<Kz`f@Nfc73{8
z0D_W>&-6TnDABof#p?mtHUcntM_fbQ%Y;T5Alxj`w7eKLA7{+)BPjLS5mBDp+L|M`
zr5VVYBdkO%@TK^i4y7=}oA|Iv>wv0uQtJRp9@_t5vyam--vm)pZPeb@tPwhSB@#10
zyZz@9(pD;`YH$-0`19D}edjVCEY!QUk?P1TQnk(hb(nDgqEZmy9Nx)TWAt~>(iBmS
zq+R+Xm@d{k^PU0Iz8<7{9rLIr|4F|O&$+J=<|2*r*|}=EffbJdFFG6JW+$y(H~Yad
zP$#GFL%Jz-!^ay5Tt1jr=mYdeOGn1sa*s+kMehaYagceG`QSy~Ig+>OA}#B2B^N-1
z<2%VM=KyCjiVJ(`pn)h86a>AG^fyGeW6JRdjdXw$cu|`McxKzCUn&gB)yuaYl<e$o
zV;8?)N8%wumxD%>*9Nsth3uD!B_8Q~{mJWiK&4Vwo1T^=el@yX`f&OD&>j}^{eg83
zJ&&;1P6D&4xDB=F?R*|dbz)W94b(wX22nGeLixe}`?hdea@c_E-_<yKSY!$L*Pq*K
ze}v5K66~#`YjT1Zu<y$~0WWW0%+kx9f>;<o_y`cEU6tiH(4#^TWxR10s}5Uym!#y(
zC{v(m#mz!+=9$-y$bO@&2{p*(^m`X#CdG0MR?^`@Ip417d2~V?sQcmP_pK#yXy=<=
z;J7fGfK#nm6MO~A2`vs`0GZF64ja=CWuxZ|y&<3PvbA({yG-g?lygGAa!$qeK;OE>
z?J*4f{=0UBzkx_gq^wsTS?Ph}ZUbBB&GZ_g<mEc=b!|Ped{{ykmYSA37;j4RzOg4u
z%D5U)Q+U`eyVg1<ingS_U%bZKt~s&$wZxdrE?Z8^&~_2M#13n#cj5&AvCRhg+L}F=
z*h9{*w|sw`@d)=(D-6#nQPGps`N^(SPY;{A`MD694pI|7q34Wm(z*<Ad^FfweRZ3j
z#v!v?8}_;`UO0+n(<AlV9v1RT>?0iS`?hDOn?LIHB=V$P^YxX#)7r9~O3)4&aFBdb
z*1WeI(lgV~klf50kKJer+<Cdj^+%Q;hUz`+qYhZknFUTWI&SF(<f%*AG_%dnkVzS7
zO^>|qO|~0JBDjLQK%da{cOEPkYKCbK3lf%g?V7iw&(A+Fe{4wk=U^r%18#st?X)_F
zFCiUVL<Dwof$j)(Fvzs{Wk7Vy9?YtvtT&PQNx&dg?ewm5l>Te)!KbvfPA1}i^B|Mv
z#D+GC%2x#0S7;RZZ^nBzR6MsvHF}~{-_%|g%!Tcz0O2dBQv3Pow7}s$I&k7<iPQ76
zqgEu5Mb<Fx=@k1igwtv;7M3#dc-_cf*5s-I7Ix+M5wT4766F?sjx5iShV{oqR*Eo?
zSm%0(HlR+<gOX|F$wJ+nR7s!8mbp~GdZzd0L_>BfozU<)|F#fS*x%Zq#3VGI0Knwl
zp?wW&L+vTl3EjM}T)2UWHURe!MdMB8UDRH1Y>MHa>102m_LtzbWA=Q`>}wz1(Cqo|
z)dy7ntPZF2d0#l!iPB$Le#m-pCIIP-xulDa^;gnjAF*gUpvFr-(v;SL`#C+CuO^Ew
zU6a-+o8V+{<s{lXm^HBY@7zaEw`Xq=Jx&^(!X)8^7V8Wm(l`02YF)Jbg~Gb#)+Pml
zx{-@?yq4auOKXm|0)0|Pzjo^ULZ6aTdkb0HEysV&IuBKfgbQ}33*`i<iX<nH`Cr=%
z^IEz|a|0b0aZYMrYu}vN{Rff3)_%1IR2_L-0n9m$iNbO~_4)fGG(1s~)8UAed-n^2
zxaPqDm1ug7y-M;+K_NHSbR@oI18}ye6L|%tM{lC71THw;X%wz@Kz5#W{a}(mN*CW8
zpz(A`IYGYD{!Yy@{dgvJD3mDBZPF&-(MTRKogfm|Av8fO$O-Ar6@`Z02n9hd=Q)i9
zQG75z0sh>W_1%|)p$=wAS9X1fnw8ZyLb3IxiG@q|3$)=NmEMs@wSV{Q8`J>v&FFHg
zNZ$b!_-xw-N?z;D@#sGMgxEJORUgt%cj%KFYLwL{UPF>8u4O|_-;P>qI|$!qk=+@{
z3BnDYhPwY7w*EP5o3YBX0s1103iH0IhQ3fV&e0XT=tb0A=or4D?JrU7N$LoTeX)}Q
zX~9sYy4zzCzE<b}ty|7+Y~toRa&C6pa}YG4Nk2IB-lOe^%g{}YDaf+FKgtm&LinOJ
z2h@ae3KG{fVgr96&fdeUDapdywKk`T^&S-rUX+!G`U^P%XQnqEj=l72PW362vVG}G
zoa{?(6x;9A<9df<7fe6e!>TY0NxF&UVTqV3i=4>PA~%?iHWI(5`&EtJ1GL-HUs#+_
zXHe3qY3z#t!3_zemrG0R*%EG73&pULY(AR(I?Ib1Iz(;x+Tw_e#hA^Y!*(lc&FXqk
zQf%B_?!=N!#58Xx52375DHRw_3#Va6wFy#)n67)Kv19s7d~-smojp9}@&ButV4&NR
zu#p)&goL0P1x$_pwri)#i>Xrf3Ru)NEq$GQsh!55G9yArIc0ay_0y^(E=a#Z;+4&I
z|N6#!TgKN2YJ4N%QpGJh|Mt|PnSaWWNZ}BWO<fH2>-dooi+%4wRP7Yxk5==ixTY>M
z=I^%>p^T*<Du$zV%&fffu>?_E#F_PakjhvqBaYf-HiiYkLq`Nm=CH%swuNBc;yhE8
zg&V~~IpFm@W+yub<hcKu1Zb5m8Bg0a!2Te=2r89+kMsvxR#o2B7N&6w_RlkrWRgeA
z-6%p$uK-qc98n4GPB_=!{%*tlop^T}YRa0pRZQ!8%#Bo7)+`V!ECU@Te|%c*uTrQd
z6&Lb4$JPN+hQS1<-4kjf$&wXZOBbp8+pg6=k~E?$055tRk-`w#tu#pG*@JHROlP=-
z6oj+Sa`B#0g1#7et-iPP{o*<J=1mNvz3^ljdwyA%L7EJG&sw{_Wrvx=w#O}G=|Po>
znZQ58=1Y<36lh|d9?--$d+Bl{xx3|aF|V@t9k`AhjtCvtJmZ-)`W-Vb+MwLqj3}wH
z>i0K!+|PR-y(@x$0HUVzY*K-V);Fo)o2Vb}-1dM$M%4_*N~Q6BZGxMvDT!a~u3<@y
zvqm|5=z;Uk{h@?6N>mR+cpUyF9v4jCR)tBB0l9GTh+YDgVQgNM(n}lszw{_Xm7IZP
zkHp|9x!`M^SIbLbRYKCRV!2R<f{nEcJ-HE%=y<<&tuGG!vX~$I0!C}I20Nf{VHf96
zQFs_nU~fz%!e2bB-7H9S*|BwFxVoe5#d#CjEC>lccT;!N+#|m@KeE2$DmDVL5<gBa
z^g^Tl%$5I2+N~kEBIbd#j21Im`sn1?3>*C{&}lhY1-3M<K^nQG7k`w1b~2KNtsv4(
z@7n&hoQ5jhyQniG-Ch%skI=~n{$Mi^1{X+&hPb}QI$UvpLMAq!80hDSjF<bl$r2QQ
zWG^LPoE!@>a@2R$IEx?2Eb=!74$_ZTf#YJo%3oJgU1(nukPzuJs&A=w;C2URoDip}
zB^LG~YMZ*&h7FTvrE*98L*vYbmpGKgqj|3<Lj=e+N3?*nEYq#sAl}V<ySamyJ9YhX
z0%U|-l=B76X}eR1ytB%w6>v`Fb?b3iHJU8N^Q^u~<ebk(#^eNjDYyocQS>hK$Jmsb
zT12ODS~|QtMwd(NRnw(#0^2*ORfQ*Q4><Sg6*5nP10X2-7HT;%-DKzbmqj2Qs&qgt
zanU{~wEI<ru+5GL%H&GQjRe`967ICCxOJ(@n@lWfPL!ttdwSe_LFcvg^>@lsyEUo1
zRW=@H@U!jXKeG7pfT6umz5vjd%5sGfPs0aFS1GbVO&6jzgH+bn&S3f5MXr%A%Q8HE
zYTF&GK$r7zUo}ypCGx0(I)L~g$TXEu_|3EJm=-y!X;$LU8z9S|H~MeHQk3tVE0WUV
zTN=CI>%EI8?(xG+iS$>c8=_*c{$Lw!%O~m6&43|(xYD|_vV1m83}SW>>w+({Ad@)q
zc9|ZI<Y{Gn@mEk?SgXE!`Cs9gFi_rY&@u_41Z9+kqM!2%6$pOyWj#o^>L<<7t108B
zt4ijczG>{cM)cnWFJu=FJf}>1D*0eODhzFD(Sg1U7g6Fsn_}&isj=*nWYg}Xh?W_T
z$!Z=*HxI@k9sAmxO<a^UC%Exq3NkuYZg#y~n_>*OyoMrEU}sLec6H~q3H5Nynzuwp
zY@E%z_W(K9Wlx5C$^y(EnNM;Lmy&OL8bc73rtar%s<w(e;-YJUbmT|I&_ODhq!GG~
zjnLiJXYS+wZTwhR{|_hz5~Q47!zIEVQ*9;RRPAm_bPPkrmJiBb?exRTM@N!eza?<^
z572u7Q~e$!;0vz_qC}V<;xtgirJ>S{uj+^g`@LGWajc$&2(5LFIM%lv5ooG?ylGif
zcL&RW1F4H(3T0d$o6e}Letsxl`_zh+O|WdR_tnA<D?F2+ol&6hk-(<M0Px@YkUCw*
z2oa+0Y?xY|mH*1W&bf?#4|6@2N2H?c4)SPG$K6kfO@zu0AEsN9&lZYZEdUSULh2d`
zHZ@ysepZ-k3Fy(y7mpS4<{14$$t88?WXzd0+#JEIe~L>4SfCx>J-tI`$76P@@};7Q
zAF13$D_DrcaCtmnAB%v~rKyR-)qXwS-ceC$19N$-zAy>n{Ex;QAM#_PfZHIvV)&iv
z!4Ex(p_#oup(VJ-T}Mo1_EaC5h_W;Q+`T>WC^ofH*Tc-kv$^+e`?_LeW7{_OFFpqx
zv2XbtheEFy+-NG_{2N?e6igNUnD^P9vPk@$x(G%Wy}@wwb!&erSO6`&qgs&__z5tQ
z0AhVv*UafZ0!z>~Rko?m>s8m9d1PiUp<s-57&G%0uiP!KYof6{QZ1;{mwPnmyCxw3
ztKAkfVzH8Kjhx(eA!_8z1LP1gdmv$1IW^GS#2`6|PD&pRoTyao7tEu2;|8I`)OshT
zm4qeapI<>YM}?PANV|gfIR34cIuZ0*smi(r&6*a-uln9!_4Bzs!XiVacF$B}M6Ia%
zIvQWK0K$owJ-T&%UY=F)8*M8IGO9>=m`Jtd9Y1hYyanx!xzz020mP4u4S)JE3(GAA
ziYbQiGH~1koR^iETb1Ot;+qRL_xLU%t(Y=ECJb*4MY-LAW-S~w!|e3u0w>)3+kOKo
zh#`7}h9M0w4%UAudZ<n9;mu1*U2=Yaj(hf_RQ*)r7J?kF1Ut4AjX0ylo5GB(?dR(L
zjlja+cV;A}xJ8~CjXjcP>Ep8%ps11gDrtuEDIc?|KZ)|yz_dDx+}dQ%rW{_Z)>qJ(
z2>f#OH`tRn3r-kb^#T-=FuR2n1ZM4i_&dFGdb#&!!FrdWeYA_T2JC=z`5fYJ^C0N#
zJ)e*JWdz+MJ?GYvPwmnVBJ617_)47%(^%_iy=_xJX5i{9Db>ncpi-Tu5UL4Cy~B2&
zLndJ6jZb24+OJHsn=e0Py5~Iod*+XSm9UZ`M|gU@cPdSvUsvl>k^Ytf&2_!RP5c>(
z4L{EPF>#dFWpyyDl~cu;{6%(ZODtAc`{+;z5K9L6)%JBY#<`}+(qM&>D06pp@5m<t
z{6IrBUfx=<ZgN59c+O9M$YVilKneQRMUn}iHgh^S-IYI0v$@>qLu4KibJya^(w;Dd
z5FNNV%r!a~h@d%}=KPfJz5zMpM`^jM^y;RQ>5{<}c{7_pKQyQ$ABFRtiqj|+E;)Ch
z24}Cjtzbia`1K`B)PCI1E_L*Y(;J89wmP%N-pV@|ZOLlOM<#%%2Y{$~MbTW>Go5OY
z6KC&<U-w&>#^EdHxTOp4lR2IXT9#p_kI`E;H`sR*f4UL=qj6iR?wYe@=R=}&#K=yH
z<pDsnKLE3SV53PsudE5i9(m=ZO!6DYbGu5rWs9JU8(}1%gQJ1zv4tgjUM(=;a0?74
zt(;;pY(z%6BD^ArnG6;lF)moID+N0XJ@&%uVaambsD4dQBIGrG5m0s7T(WJ0^Rb?(
z)8KgP7FUbw*})C-qzFdQ^yKnd`fj8_kRRpM@mB@6da{Q_dRHnqr6RjYSh!d(AyQor
z;otfhQ?UlH1a|?7zmqRp*U?FxY)!AF&5*`KTZB7;-Q`6VFT4sTv@*_<9k1?%VLsot
zrf7wqhr!p`B8lq}<mpAP)%<llk8yMaZ|v17v`%~01I*?AgQ}r`AWG&|_TbsIL9;8P
z)6H4*P&gL(lb#vePn<aEn`hm*a&WRBR18GzmHUr#XlErnL1DbE`CKvMBVhJJNP7id
z3{CZzs&W0S=ij+T?4&Ks&~}sge(meUQ7i7@IMsWtxIvhiFn6;MS0_Kof0(n(VJ{EK
z=0EKbt87<|pZJ3BfzAY%c7LVFc<CvuCs8Ul3H}gq4X=arA;VUZr#R;gk219S+VA|r
zBgl`cF*3)XvjS+hbD^i<Y4W$reQIKmC7kP|aeAf3*Rvcw@ZC#?@jh3W?5wL0{sP@>
z+5p^2{*g>ZvhBg`8(uT4!$(kvHXo-|JR{a_do0}n^D;m4+1<jVgbX41d%AsgnmoCZ
zPisAoYf%@jBG(@oTf~^8c4D#uEi5HCax=MTLiSzxNhNQXzA@;sRnQThzD~T<nO|3{
zyh5AAKHs(Q0B4y2;;0})MMrX5U`NXhR~PKjlQOYcsq$xJRhRC@Ekz90M+@*<)4;gp
zQfOHZ*+)%$4RYxFdv#r_Eu6o9lNA-Y=D5LXcECBh#(!|8tZNPi5;q2yigjxaZqF2m
zYmz-h{iogLPg+TTxzCL%{)aF_4e6}#Hf(;rHx^nBfYodbLU+#bt&Z<==@o4`xWgYb
zVUNyT;C9vNrVx#JI@VztF<7Re@&eNs>4_#0%plduakjV0ZCGvcC-UsP1~?)VKmb*h
zz8jdwkRO`8m<jToU(>F3wY#!6_=+OqU(TMcHfPXjHx~UnZGPx6q%nV1?*X=`Hm@9A
z^$an(`&u-R&Jr@s{#o>ymW2A%I+>oqeZ9;UVb3z$TQ5`3OoOA8+eqI6WIo2|uTH`I
zP%R?3G-1b9?Y15*q&jXucnTk{Zyw{v;1s@dn>#9A3F%aI1EkV2uc)$Z->72J#FI~(
z`yW2czI}+kIlS#{UW^@=G<9ExRZedeY9t=&^e+JAshchC7KL+P`9=B`D6zU`qCJZ4
z+$8`IANbi&0IK5ga%y<y>=SRb7T2|8Fa-1C>c-2_{gaGuaU-bss?Vx>v-lMM`|OH-
z0(z#&GqW>@pdL=ar&#Ys<^`=A3%BsRVi3+Wtzlze1EkVJh6eI^<)K^sS1ePd<D08{
zo*NY7o5x$%e?R2kKHMH3>%%$~aMZp&*<53^mp&cE=p`P?Ul#rP1U$?D`Nt??PBVV(
zYJOI7F^>78yfv`l`SU}g)gl#!n?{naZ1}dt+_e$w)FFtrK>^qT#`9SWR1o3t{I!dS
zMRl(EA%1~lV3~1F?`DJp0vVY%4@tn}wMZP!%LRt!4cf~+_XSG)`Sq(?-1+?r<ZH({
zH)!nq?>w_5={z@pa_ZM2BSw<H@qFZ(S??lpfp(bX;ghGEw%(;8@hN`ajLV)$Jl-@d
z?X~3u!f7rlNLiINFoUzbbHyZ5)?j<lJ|C!h{-fHwi=9DfKkcMO7I1v23YdX~HIBKu
zn?{x1;Qs|Tg7o<ffmxEnk>i5;;rgB5eJ;?E|0W6hSzc{rm<>Kex*la5^&>Uj-Hv~d
z1s()&-&s<m&?#R!#Y@zN$fX%N|2}1WZS(d`a=2ST?|+c(4|pbh2DgFINqA#P{qhs$
z#3bN39A^KHc-)ytJBNI->Ui3Y-7H&U-e0V14B=A0rfl6h#mOz02?8FJc8(kgv;Rws
z8#q%2Z6Y$BJ_Vk=4{`p{*_yHLm-S|(n&k`qcfXp`3ew=uY&Ml|QOrs^0EjbyJo`5A
z6#&7bA(cyLXKVb_jy1`hKmiYsATjzrJMy^<DKq}!K`sFaAP*O^dtBN%#W*F931KA^
zIvt7t{x)$6U^{0(btaD8+l+>LRs%Ix3S13kgQYu#yI)*Ba#2cq>AQaUC}7~=(GMj0
z1LFDGBtCuSbBF)j6&}QnS=rQ@EgZR}B23sRBcEbkzb%sDj81WoN^)H=##sg#KDQ3c
z0`m1X#~ZZL8fvn`fYon59TI#n=1Gx%ZhPmy0hIQVU<fO|Eeqp$5$WT=H+KCjUo2%4
zk!!H}HK*_!Mj@m}vZ>evXZMdSu@-1nYwMo#2$iDG_Mtvlu>j5Bs;Lt53gWZ#19vj(
z&#2Str0^$ZmJe<J#=A>4m1KugM}lEbgf0QN7gj=Yu@qCD6z8@7^b$bC?-0<5ZT0|w
zeja+;Z*Q~g$|!_$qq>YsTsP!Tq;fxKrzk!<=Y;h5JUD#7T8oaq4gV^^o=X~z7K@Qu
z`3=|(z^w<+y&b9M*chaU?6*zd7z(awR|cQtkg0Ue`Gvg~JHjO4MUoy4b~4#oXOTA|
zKQj0wwrF8>M{rFfam>wne~=}Lt{tS>WoZ?Hvvt$`sM%-8TES%F4@;zTiKnwy4{3=Z
zcT|z2es?291aT(r`nTr!CU;GxXYC<(z&VGPoeC}*IY-eUW^Xud`Z7@#?7J5S#Ul6j
z3bL+0YGUGz=@YsA&0pj-!#SNDcMYI71Q9yW<FFaUWD28GoW%}K0q`YdV*eDwyY)c~
zfyOgFd;^KdwRE=BNl_jiRdz<-d^5~qbiOi+kM=7_rp;1o9wi;Z`a_HriEB%O>x&QS
z6le@3*z?D#ZLP`C+G<NN;r<r&y;}ItI=v0$oj+?CYUAHz_H5*XpZ0el?ezs3nFkhm
z8_ui3QGK36xTl;c09bfy!mCF=`~h<o03%2srcb`<Twz_tqeghbgJH}{Cw%1T%8>9#
z<gu?}!Ixy+AbD1)n2LR9?Ct$%uyy#>#D<Qe5{{17r4anE^JmA46pQMEw2aqSZ(rc~
z-20uhh($l8F*}s|O(otVoTD}(M*+&>?%zH!<#ffDp|$h^1>jc!a|3MJ$_J1qAlAiT
zPo5l&V*#d+LTY-&M8d1Zs>Lv}^S^CVoE5*BC#($Qqvm+Nu<%BmNmQy_W52~J+ptU%
z3UsgKipL^Bd0D=0_WyH>_X!($s&4%Wi|*Oap>3bvhfKLiM`)o=wr-iBk)v)~t(Ci%
zC4)e#z>3RKX{^M;24%SCBPpKgx$KqwSbosIk2aV$*bnIsMAT|qIP1$1WxEN~^xtv#
z_1k=6X@rPM?%Q9X9jvXDyl~9BcKhW@&pSInR1~62%9r-W9CCK3NoJrc8}J0<ib?x9
zaOg9|yH^5$&?|aUM`Af4;pJmK8!MPMu&I||yYT!>PqNHfE7)W50Weua)f?HuvvK$1
z84rOwc8Ryn=+#d+U8bkcQ=D(HB!YR6OKxme*e7D~eSpY2@bm0msn6`}4ziiKhXa@I
zS2<Ys;T(#BTv<cxUQh;^d8one^b6040Jne4fy67s4+s6KndWiU%?@^=ro9I>&XhJ&
za~MCIYTiG8eXqmY(xoLut$9l09`$^rEt$Fy4HjOE&%i%++rH*t!W*2znyts!a@N;a
zA_YFmb|wHFJq9~buB{Jy3uPZ$yC!7c*~yjkM3TRStJ!N|u7lReA(ZjpC0Y(_$m~P#
zLo=cep9@phNhU|ZXnKC+Z}4-tr#1yFeu$lfqjS_uIC8N7!P<@Q($-{nzh-c^-QNM5
z`$<AgmKTAqWSdmUJ7nuM17#kXizduCTFuIA4hcJcT~(jxbnjEkxw)VQi*_jt+*&9K
zwA|LH-E?G_Y)-G_*S6T>-!56J-rHK?|L4qRLXKyRT_TnQos+Vw);DTOLTxNC8oXR>
zDA+ZtxW(rRmsyS$kP-cquZ52y%dC2Xs+P39c!3wxg7cu7S$h8y)&m-qesnk!pG-D@
zqr)#T?~&*#X^b@{fLzBvopXo*eF6-pVE*ZhZe66JqAr&A<UV;*__8Nc*gS<iJLWjY
zSMlI8d%J<>3DW{*QMZR`fv%fwHeU9q)oa}#o>5oo;NbGn-Q*ddhYa_hk0U$gQ_otw
zarHNe5aa6!I#E^q*qH`tJ1^KEL)L&Q0116Yg2%u74KS@zzFFyRSUR7slTAJ{W1IV8
z=96DDu@U`Yk$Irr4W~*gne4&19d?p?Lr=n`+A+RWJO#EP1t#Zl3m%vcdmmr02e`c8
zabq{>l1SnxvUFz=XCsfj6~&G&mY&#G|K}nA@bi%mzQYJahUjEU4iqU*^`Sh;Ubdni
zXrs=(t(RNk;MnNoWSZ8-XQlhKVRqF(gtatveXo-pXMLf*h8<7(aj&sxe=3y|PddkU
zfWmg{PcYW^LnFgu4+-S5ob>ydKPBNGTD)nIM^&4dE@BJR?b`1359L&DA}s1yB!Slj
z;LoSa5}sZvDS+N;_4XgjW+V5So{W1SfT6AXA!!@zwU&O!mkEJ@!+^~N4;&s0kdnXk
zj3XuST1A7>_nZ<R;?7H(TZuT!Th?hfmky34N8Y&uD(1vx4W0bR^bKMcZFA+Bqm8ds
zGgzMd5*y<w(ti5Zq@QumkF&)NwZxA8p>Ou$R4H9^J+{$#3~mn8WYnHh(^6ZJ+sGJ^
z7`AP^YE=fs({YFLLPY_PM`U3m$h3?!;?t(--Bk|&Ge<M9ZTJu8H^82txLD<TZ<9DL
z_X21c6a`r=I&748+)9V;$x8BtRDY&cKzZ2_HOVb+)Lc#T-8-LFCl8gtpKU6oJqxSx
zwaU=hf2()MKnBdL#de(qPMh(?V+@qRJ+QuoW_BTeO~?)2l@NcOCYH{TC5EG^kgaxS
z0MNRryh?LJm&w_Rdh(GWldJ9P>GstW?8louX9`Nr8z$uxN3UA}u$)0KYMzN~JJ~VK
zVjXA7^OHRkCnjlx6Z@u;d4Zfu$Ts!(a^R|td0Jb@{qP~p*Az+r;T=Al346sR-RC!&
z?h?Xz*vS>n6fD{f&!?Pn*dEH+_3uL@p<aLu0K)k~$DWLt@Il9U;G21I?3**~$*AVR
z<4bkN%;rG_#cF9+PO#M%`4vf|!4KTwGk+D1T0%dzTM;tf>?TPD=}nas_w@4+j|dLo
z2b^;(Y|x7ZhW0BbELXyevbi7_Hl3;OUK+<S_9zldB$Ely2*8`~inei?sHYqK8vz3U
zeqoB491V;gnhE<o*sd7lT~rmDrS<}Fm11T{_Un|-1N?`3_oU@CoQM*xAll2?E%^KO
zR?;dvX5<^k$G#qqUpMvWokMO6S6uY1&TDWwrNN4sl<h=ref^o7CH8<q0O@=S?Zh!>
z=)&Np3-f0P%0#EA>pM4^LFW>pFR@Rme=sPR`|D^H2tkKSo>-K0COfXf51_jRL6+lQ
zrdR{sb}c3O@-O$Nr}lHzkMDDs;Z-NM)9q_sdbTXNpUYNlhbXcta@>Hi09^pe`Fj62
zeVxd^0Yrw-WhsPf06a989NMf<l@lcAX<_kghqrTJQ#&zwuC;jZ_{de0Gdl5-yxDbW
zApdL9y>)oDg+;rV8#H>;f7+IL^weEqB7Z%^?Qc7gXSi3+V=TOLtUk@lJ7)s`obL|~
zBwxkjd}bw+Xvwqc<H3oloF!yYu2%p(V4~G`aubQd5bzyd)_a*_UEWZ;z6c<olz0EA
zh7R=IU3=}jfll%Kql!r#n+<L9*=u>Ccq&_Q@JS{n8#y!B#jGZgBvbZe08j*gonI`O
zdBz_V5djHQdea7xEh)doere8_Oo_4VbF$FPla8taXyT~%n)G9sL<<hW+hS@jjsJLj
zSmhS<74!CNToF3slg584g6vNtJ(tWzu01dI1La;Xj)+`iogN|fL3c9|3+w+FRJ}p}
z$Dj%Xa&3CQm(BXSQu$4cR3*md7e;Tg7x@l}A|qEhH8SJZIa8zW3!6TrXaOVu;p<^G
z)8~{=?j1kKAfuFAjUj(ahj%EB*I8lu(_=T_UChU9g?H=V$manK(aM7<kLN<nlpcBe
ztUvj;0)9Qy@Nx0Z4jh1S_2uYLr_iP?bJV)I+7KHjcbW)K(!RTdw(^hl*Uowo$*NTu
z-D-F)r+NCDMY<)xL-!$#$D_FPK4Z#^oLwi38ZtEf_Hsci4&QQzwyMOa4N0FXXfzfJ
zZm7{l+G|nc$3dw;EWl&9%#LdHxt|*HN-W;Zlny%nJL-q6kK1N^M^dS}nQF}|d5S>Z
zJqv?tGTT~o>W8X*<NGhb4XKqfU$rmezIv16_T?SYy)^kja#!S7v>-%{--Gu+Gqdw}
zPA=~xA?N7x5NS+Fqdrew?cH@7pV^&Sc%wG#w~U!Q)fE5qao3NVuFD&ZdweYy;>y{c
z)&qLNGJgh_cfqwr>8mO;Y^wPSNf=p`ez@Ac+~`^k+vQ28jVgRQyN1co5sa_!zM7ld
z>Qm59z06;k<{~3G{SP@9vqR-_(<<DwIu`(i1dvQ=u~|8FaLC81K;67-$e=F$mdY+i
z3c@Avw0@|06!*i_?2TQuh@S}qo8N}|X2TQPP-)sK$>o3P;Uj^71VUzaHNiKX7gfkp
zW0edoh}MN}I9(K(iNe(}8)o!{?E?8HL(J6`{aa#YCR)9V1UDQh&U%7YD*PvCOHO8j
zrid24+M;(Kh1LvTJrv(J)S@VQ`*On!e$^_5J}ql}aQ>4wQYReHLj<`j7=L~k-T$vn
zv7(N%Jx@cqA1Au&3`exMzMsc%-~b?KTcc_>{Q<XiEKURup7l`f5mQ^;9{qhqi)IOI
zu3`UxQ?gKv6A?40RvX$-m;VZ&;j1jt*Y(-W|2rE?8lB$x8&E?G(eD}?(zOr)DIGvC
zrTq5Y36gd&!m-yEJXv^{zc#eDZOm8(ju=1Of5yBo@TA`|r8^M)=6-y?%+KITB<>mg
z;GY&K=mpw_ZJ+GXv=^+ioSgMd?eBYsP_>&sV+#&^3niqxiOLU1Juz5g(`&KXn6})K
zGu7hP`q<qa=L}}~eU++1t)z*k1yjRc&!sc(COiqVJ7q*NNKV!L81=T|MlYP!$ax(a
zaZiL>^xZVTPVB>3H|(9Dd36oZ%p`=kx?YD+qP*(3nUhSho#+}zCXy_%CfN9v3-y~~
zC5pJfk`fhc01E2C^dzO=@i9EYemr>2VX5zK!y{#0{R6j@P_Pho+QKN7HE~^)@=ZK(
z9#X9#4E%;5?IL*5(%b!Jcgg{R{KUtD!J>)xd;ONUTCWmdyR>|vH<rX$bZ?)`2wwjw
zX+fOtMW|>%)%26E)^@Q`$IwyR+-z@$RdqQR!#l4<#_Ud!*WoUh@Ul9?ZbM@tCqx{(
z3@1qypP)3V+eS^YPtql4jwiOPf|I|`fA(g#xJNaEd{J9St%S&Dt0{}WeI~!sRerit
z=!KKhp>W%8SIiY{V^`w(KWRLhs`?)Nq-tja`K-NG@h4Q=8y2=qHGocX=C=jGE3Wcn
zWVP!4^XB)bO)cIAd@+Assh8h(ft~$(pe9UaDDfk2U8MGwic9b3<Dx{JYLd@HQ7_;5
zt=xF@q9L)h^D<fzhv~U@u<Z|+zZ4ZZFi3d#>E>!t^fuo>rey33FBz2e>dfqgp!8t-
zIdiC(1J=^*jZvDDDw-CX3dep9-|Ld`Rqc~;cjp#yBE+9zf*aK1fo$cyqjNH;P&_b(
z8k>)s#M>XUckKd`#eVE*4e9iHCS}M@!i3|wM%UW1@^#MGKJv%=cXp2f9#G7r7%2`n
z)-3(<qIw|fGu9b97Qeg}0|&QWEQSdm60|PzsM)_OYZO;KIgV}Pnbh88{^MRPaq=>b
zf0a+~CKnJ-uhvSpPnK5@vuZCsG-C)uREcdCvU*RTnGGzNi!dk~#+GoRa2fxnvVH`w
zX*Vhko-cbxVSS>OWUqfWh|Ww>!aGy`NS;a9sGD57OEveD(X8oAAx}umeRP}cs`KSk
zp&ni*#=|s(0&3oP?d%0=ez;e1ys&~ry72q_;K|vM?={X#!5b<X9lFi~TAoo%3)!Bf
zH7UeBxA_%iL?KsmJZ&rTy2Tw-7=LFk1@loVKY^x&qpQU9SRrKuD~no!UgL3o5e7+?
zvQunV(=eIlJaK;JhBDIerW3_X8hJ-zHeH~w@sBPcQJc!px03VgBEPHzTEF{h;}*F8
z!q`ieH`H^GiTtasb$*7!Ihh3Tr2{mq+Ebgmg6vGAVgdOFYEJ{i_e4tU@mWfD6E?DW
zqe?}9vwxjFQS(N1MG9~Opu?)WLc1)taGo{(Y1jD#eq&{T$As;>$W7d`I@~aVb5*H&
zuRHdqb4V(+gd}G!waKR>*c%dNb?*#Fv0gaqDcD%wrBwadO(QU8{56+!pil3X<0EEw
zs#Wt8!6Z&*^%U&sd~L|(sOg#g_@&->Um*r3wcT~PCIHJFcb=*mJ2PkAKJ5{Z8u*&I
zer((=`t+gy%;?)iUbV7^PS$ZdZ#LgV+*dww$5)*5`U>C2Kg$oG0GUU!16nAV&5;=&
z1azQSL)x4~0Vov{Ah{>pR3~ya4^N_R*<8`eke1Og83@$x=gjIOo&<*$1`&?Grn1g~
z?nW<hy<f4%xf~MWRC7N?MtHjKxu2n`?miS1^LnnMfC{3_f3|l4{?5Z5KAtMDC#JE{
z-F}sAO^r2%p|F#bXl_G{Z{GXS;*eX*rKiP#ZS3}M5Q;_%#Vx|m;b%#uZ+_>;_DThu
zG1&arCo8_Zw^gfo@5Y7-^MLwIQL!Xv(+<mPC1};Y4c@=u{H+#WGHO#Rt{p0`%eA4Q
z`@QV{rQE3@?YXMKJ9&_)Vv!xLMz6j~Zz%My=xrzO^x7x2aLxvDN?f-7ITYRlY=F(}
zGyhrUY^D!tJ=s-@jY+@g^&r&^J$4U{=#^|dC-bb}oTGC^^Tg&m%UxBlQTmO>*Y2m7
zItI@)@!JcG;TftRc>#F$$IL6Tp@`~hN+U-g$Zn8gI(wWmnPOA2r9NdZUFBYsY$|^p
z5^M9&!TqQCrCGeAyY<qugzY(8-Qo;+?X$g)C0pZ$>IUZXqWLEve7(It)P;Wr@MGA{
zCK>x0b%bzg@M2baS&75$hM5M^o<pEMhsZG93in4;c6C->;#)aN@>I$7Ev)0jY392F
zsf|;HZw3uvUhW1wc7N1P$D7qWj-j)Ta?fS-T-%Bp!<st-u<DShC$kKmVgY28*IPKI
zb&U^W-C}U{o^OX46{b8T2(uq50nckQ56eyUHt$-|naarl%4wOmyd(;#9$1=OOa;Y`
zoh`t7?co(WxqLWV&zmFPmLxJLdXX%Uv+iR@JwFlhx_$UzKg_*<Y#{%l{V^OvN><6`
zQmSEjqSk~v-v2|7uR<@=a_&Z?3BQG>VrWM{QCzSEtlvnjeg%6z?qN4hP$u;lP)Y|u
z)Yu*4sa@7nH@n<?TeG23n~e@@;&{Me;p}A0x9>h=vD|}GN+Gh>GB_B!=d$(gtSMme
zOnsY7Z%p??)9}B2e4D5`y_>o+{`y;|9EJR?!N_SHqH4tpYdyXKk>ctB0L5tP#u|3F
zIOv&sN|g3V@?!bnQ&)K+O}=|*z7N^!_?51nQA=W!aA!YRy_;{B5WP8eHoa)q<NI)a
zfLd%TvwmcruT;ZRTw4~aYd2&COfOlkaa<7K(7>$cW>PtZz7%tx+miIl!wlf7qX0bs
z!|ijzC`zoMx&dK3^E3<XDzx=yx98(3d7G1N8xwg6D?`8Q2ODv!Mo;V^<0|XEcE_*t
zH%{xvGjxgt>rVvhVypK&hn`(8iQ%&YiKQ>0x{_5_@)qUC-dKQiM&@2?h4_~OHclHz
zpWSh$C;U&*1G&9owK0DUv>rnR60NbLa9-|x;;AaT-4%n1Fpf0mF779|-TO_tr%QMM
zO>XaQ-Z;0%3_as?la%msch}E>VkZk6W)G0Eo?D2WyjERbHe%Ji%y3@(co&Sq!v230
zx3rCLCb-{zUZsXG|9cnxC>N2m7mE=94!eQsu}jV#t+d+G=C=dY@8vAVF7ftRX-jOb
z70v3}-_l3i6nxT85$R#exGH8r;4ie|R`_O#kAoPUPh?9s0HR7A0i&@3&Q}1U`>6#0
zWKah{B%5>bjkug&eiH{+Etw7+%mQD<;vpv1g9xYk74pIimeSnC$q+^SjQx+r7$Nbr
z!*8-<?}q6f9a2r@D)*W}n?a{w4?a4owv#22bJ7Uerv|+{*viluf`opY;)lHaxW$mJ
z_N`7~aa<wyzPmA}xvY@%a0NO~ykZ2PyhYr=h9I@-v9h(+zsZ+pIs->v?Yc<oK{$A`
z;v;|R>5|3W<ulTwGTdN>vPwJYGN1>5ava(e*}QQ9N)5({dWU0IRypH#O;>=c&l7H$
zK5;xa2cmM#OPG&VOjTj*0s{!|+NT6{YO-}|cVw~=$B4uV|Jqz2(bAP?F&Zs1a!Fq5
zLp7SzOPsI4nP+{Ozur~ATA2m^cAA$1=(<na(^bpA`DcF}y1{EWl7}jpQt5z%D%qzF
zKJs6lqy>OCXL1FQ@)-_5)(BTx6Ya<D4HwDJ{{|H}P0KqaPlfB{2ScZc3Qa3cccQ<X
zeC-%J8_l2C^H)6|1Z687i+$YyeIM7H39B{*{;sCx{A;sBPwDtW<_i%>Ta|md81zSH
zoyFad<I=iHo0BE0eeV*l2<iqYq)$ynxzK=gi+Zq=!0Lf*oBkhoM=g@o^WglosY<l#
zQ+a1<8sg(sIlfkZ)lSsPt8&-RoHo=R2mT$`Fw<tbQ#~rR#IF7uJi4B~2Jp)=08k+-
zrF^{(B~_z30vjU5J}J;r9)YloV>@OX2rK=Kftn;>2Oe!}UeeI|UB0PMeR4#xTx?<;
zX87LNuWn2>S*;HBHCe+{m95zAb*x5Hv{bS2n;f!vrPyROG^FUvfC%K7s-_mAX3X~#
zf1GzM)n<wPbdbV?sNVLO8d!G7ZXK;uVGk>p^9?PnIs5j|d1N$M-Bt$L*!zPPn*L|W
z83=$&0L-`k09`JHQkD2ez#e>B@qyH0*}+HU-zIS6R!-@sM8bYQ4-dG7poB+)^weE9
zjSR;%_(HI0HGsng&SKh&?qOVI0ISBZ<160pG<a}INcdB4dL#TRmPXJEJ&Akj47<;h
zdwkN|Z+w6zR^k?r))Dc?5GJJga*CI!;RHLG9Hr?+4+{$Uk}TFdf|00%-;vz+og8zA
z!59e^&I=Jo(?C{McoN&G0%}i;HpW;}_^DT{otIeFZLd#i3wu3-dUXmVqzIbVhmtm%
zw!2K=$;bKp%-=Hq#d;Y3iOj^#+d7%wTW-(qrXK-qT~3&hZE@xhN^OcmR#WSDUYViV
z9`^OX5fE5&&Yif_4h(_3K&`33QABA|5R~YPrDu9tsXo?9B8mDYO9fZ1)B^s~RRo!J
z&lw!Q^?~TYbRI$J2W%#x8UP%pkt9Le?0KM8lTTRIb$O0te!ZU@v%K0~PA7bBtC$<W
zZ1;t`bLL!Tb=*Hc4<Z(0W0}%Y4$jxzJa$*+5GtkxR`7|W{d+`dzeq8h;Lcz|+JzqI
z2E~1xD=-}Vc2h_Vn8$s+U^T1ZsiGe;AS0@iPn-UO#~T3jexOtc`2EqkJCIg1byU+o
zWninUi4uuSkh9?CZaEj3o(W-9J}P~H<K(>9E`M%AkAHYis+397nv`(B>r~hczx45&
zy<rq$tl(nA1`kNPj%`dRF4@WAw=&US*?qN%ffytP7M=<hxc97HtRugb=IyOd1z<aD
z0_=rZjVJg@v6sxF2Ag_nhBRd9Ta9GL{Odpm)to7D9<<6oA>xtUY5GtgBHe$uMU6q}
z&g~G<)`EuCFZBT^9U8+CGbljHVz(+g?28XmbqW-Ey2<TyDJ=~PJy2pSLQgRpz@cd$
z-Qx!GhPqtpTI|CqjLEYu8wmHezCe9j3k%48CUc%~`@P$~|88JE`r$s-fzj0PtNzK<
zzE65pPlgTFTWC63M@%d^Z~q2bgWTKA4tiMU`c(Q}NRZc?kxOOm7$usQW8n|K*^A3L
zOW)dr4}8=kAEaV*7}zAMyv!@MQ0;1rVwI$q<W1jh@|8aOAF{qOF3K-xdzTfKkX@0|
zC0&pf6_8k9sTEMVr33_|kw%1tr36$O>68Wur5gbyM7q1XyLoT^&+mP{JYV*=U(U>#
zIeDL%>zb^<^f=|+W}wPX?FxZQ5eleP{I?^$8KV+oE**Yj9SNdXWQ`n_-?&hz5FpIv
zR3mR$cSt9Cl>^fdxpJnn0<Z}{C_n9)JDIw<@8)E5j<209cubk@h}!yJ48BHhhU~OI
z*W=rU0OjJ3iTz*SK{jZ~a*~fv!p|ld-6Zrtmf*6d&l*{8r9y5q>VAM}HB0eA5#Jc^
zZWs-vel%7N9e64QW13Zab9VNJc;twe8RO3O_9QakvvxLW_(!OFWLWYS^ZmMo2Q0T`
zm-&?UE1IC+Mo`B^i8w)mbOXbmU<wY6bXk!{CAGKcSGs1=qh+rDVi>TY4Wa9~J5bdk
zEP{p7*@lBoW<+IIuc+8*x(L9*2S0HAlZXCCbl@zF{G!U$SNr^a7XRbaUZ8Y(`uopt
zQC#0y?km7Iw-M<4TD<gf^lgCEtnM2hgBIUfNQFh-_X+eUJcFcOLw~8#+dU6mxDhl+
zoW54;rP8f9+Y4lMS3k>1A|$D6mG~oXm16tIxFvEmbUFV%Epii5u=VA=6USzw*PG%M
zI}+=~>A@sxkRXmtzzLC7+4mlik=FKLutd!3qy(?X5}y`tPQ>@>R~-(Y>qS#z%-_j?
z;Q0QHj~%EPGB%L1h{PQ{_J$XY^dPLw*v9G%wZ`WAk@Gd}<Wtet{mvSbJ8OY4UHSQ>
z*=f|Zm>>zQ`aCdp8=muG+lx5tkhr?Zf4pu08(S)%k7QdAQQ-fyj8O@uNBgWW{P$Hr
ziZ~=r2`KdY7x1d}udchK)=S^*L*l^xI0ffq$jjqOdBrs9>fnH>4oH+z`r40D9_|G~
z(-!UNUMf@KSk&Yw#<K3ytDhp)=$R4uUpmj6_II3y=?$^lBWyv?bt|R7M!vvV@KFEw
zds&^RS|z^{IR*jN;{8DjVRZ&CweA3RMtL7GI0+i5;KjQUc{<Sut~`+!G<!Wm8}dz}
z_BLGPYm4a@5Q4D$EljUB0|Xz$ii%wAJRk<XGt$>`&TqXVPZ3`O4rT``f)%HwfY%+2
ztp+Rl7`a7^)doRK3PyLu7puA7ltu29he`zo8;01IMDhuu`TsaB;TAK1*xY@WD~R?Q
z&ruINi`>dd5$7cxpmw3as7XAuH4-F)dE1aoYlAQD04_LwHe?*@gsG{7RN1K(lKSH8
zb&@?{)^zNaBBA&OOs!lm2wIj(tJS>Q*wE<F%A^rl5>wp82sb#ouAkMr#%MedMb=98
zPSn0)gZn7ob14*TSh5#t@fP%f-Y}JZ1>}IYRkM=}{)ITprX3PloJ^z!n0e^|T<*Q%
z{0mHAi)BdqM$3vP+e(A^XE<GUDcZL{)9{(!Ypmw626>TVFRH-ixy)4GBb7~=@r-+I
z^Z&!sia`GwnWd1?r&gH8yz2gp8b{=uLy`kNW!&cTB{Q~z(OGWCTT;G#&jvm8%8Q1Y
zEA-2RbB7>di7Gqu{;zxTR0v>YrOzcayW0-CX3zn>GYox=qf1AlT+SipDcqavo<)0E
z8mggJU$;AK)C2BsYA~gg1XJGw;?DX*&=z}vVwoJ&$)}*<vkZ1+c+uv4E@iC2hR9jm
zSB_&jpOq9>Y)j9b0E5Lr<@^&;OJt9J$06t^Zju`qsym2XysQltoJg4AXJLBEJGNb{
zgRjSo2HpJ|#R8j(96(r(qNC7E*$Q)Ux}FX0&6b`uAnm`f5T1Hp1+~@Z1fHPu;=y~0
z2b$|edN&zmrz)13@yY%nZ(Mk$@W(DfBHdbVu$8=xM+yRwQu`#`teSzi=%lx2*r<WY
zBs~nln}ny3J|rV-IzW!r&aqiSS7MVY&EG0|JhJDCzZWoyZ%E1HE*IR~A}dMvpy4iD
zHRuoLEIjoIjt977eDtJpu1L>j#NSKpg5a9E9eU=z1DH|Og&!f`c!@_sy;vm{ByXwM
zf@K;XE<wFpk>Vy%Y9%>_3>SN>$iRkXWdTOF#y${F4_7F<(d20qfr}kggxxJg=Xyj^
z-0p_McpxpS8Bc$bZK7kHx^&!|O1cK{7tp&{Qk~p$^DKy#5>%WAXQj38_cA+m+x<&m
z|Le89;WY*j5PO@Drql4sK?NOfUqfqID6**;ydYmOXBB(5Byx=lmzyM4nr;%1$Pjy6
zO{GR**buY6161fwB-!5$Q`%56v-jfky~jPI=4aPQ3R3>R{LDWKT@cLA?l=_e_&3rU
z42k;_1x@`pD#>xXJ2g5;@0wpE=u51pm=4*b%W$KO@P3>#fM4m{-@FX&qL2sOFFZ*S
zgh?=hi$OytnUI-6#hRx-^&b+1C1I`IcQ7E#k7d_C^cgCn0gyYO75wA9;dbv^No^6z
zNeNC&#**OB>lL(*Pr-L5QoJwUbV7_n1PK$FFcpf{uO(yq2pGv%*f{!`qejg4+C@za
zVQGO7sAuyRsz<IBQk3<EAy`gRK`6$uym;!F_E&#e5c(tA67Bm6T9M!Y%WT`cR$*~y
z_#XyXL#n4S&ipY#>@m-n%hN6qLBdD=8`B*W#c&|1X-KLFnoDcmPK6cCKvq>~_xK=k
zCr$&>X)sFbAx|o1QXSS*L`VLG<=QvW%bX-}>}rvdqQ5A4{HB77$)AuM)F=<SS41#$
zH9NZ|@e>Yk{apllwkb!ZXDd5PS?_tsdlIJJp}dax0R0e1aoVtXdd_Erw0=WsM_}>i
zQvyb5jZI6DUwj<HjTU5r`ov%8Wvc6y7yky9AN>r;Id9PNoku?VR<5DUV5H?*36sWq
zf|n+-JAe1dWwOrQdyPg+;<DQ9_Et^P_ga_A^#pfVud|aXd&w>i=n1wBbM2hP7Tv}D
zHS4|#A;{fz!3g0b&CXwxnt?O(Kv6QJ{)FKV<)6%^gC8Z6k*`-gP_POwT8}(hQ=RW=
zR$sj+r3-!2v^=TheAfW8$PwtVOM*NWp=`N?A9%<vGg=eoS(OSIjmjK_=^lr)4sryg
zbqJ+0U0tZiQD@@`VJ`@^);l1$P1Fz=%0L|78+w;uZIkB~%W8fD&Q%%*K>szFcd5ti
zUn#_KlzEtrEzdLA?DIfO)|VI{@ayR(;KKm&vMu-&p9cyk=iRugIU3mNP292rZ;LrA
z4kS(WP2ZmR1A0mUSpiC1h@U|A@UO%~NE;zCad1kH5C}#?ggr}!CViz{+;*Fzu;AO1
zK*-;kJQDKM^-~cP_&b)yT{6q<mTnjDSe?o+J;!x$>n+%M@S6t;=jG~ji_<?ObIJqz
z)`Rlq`;Gz_)6gjrku~EODc%<CuC+HFsOiz4Idjb54W%+2NOb2+H9vApAVALN$Ik7-
z`fpCAMD=OI<qJez6i)fB*3{4ztFbj|p|4)SfltWNHO#-zEf_Zk$JZ!6oyrObH{#T<
zm~kK{WWsrYI<6Y6*$AZ?`5|^kQS@AY<@CPbEeC-6Zi%`~f!j{gangdYLRw*5EzDp<
zoM50tBISC98k|Sc@O{?~z8D@~v_Ph;eEXjt$R7W7^ZX8I3J*No^AtxaHYqrdf$mS%
z61227iU+@fy>_E|+T9S@9r*KPMK*t;$H^Qja18$@czgXbtK{!-UGZo6@=(x~|I_1g
z22le+iJ#9HJoN4_jqa>*^&`3Lr!_!lfM+NX=;iYd#Qzk}=K-|k0<fJV(U7g!!3#qi
zJTN$shF?9qYOPZrfXht~xZ_C(#|Z+%*vQj>^U5Izv+uXEXihIkX4N8IaMum&f%|Lx
z6xXBk(v^4RV-3%2hRtvu=Gliz>zb#q#IWS8PZmagWlCwtA@~}2E3R(C_#Z1bIMa~o
z^-<~u_OUnT+;ciuLpTy2beg*@;!NYVfS`02w?G!dSI*bfm3SD=0HVQGdUe#bh9=$3
zpi&{wYvtxfV{8UIr2l%UTq91fuV>&7NnmMa1~Uk05`U>8%N(cSlh#xuHzj#NQnY`#
zd6JWfQO`FnYV*le$r;2i8!wy}REt$5ZTJKQXO%ATZ)2PW!O}J9Y~1Z|WG5c2&@*k7
z(yGPrLl^o=?3qN#(rtt5+eF$;&ikOfo(Yhnd)G(Yt|1Tl4YvNx#4el|HQW_-H2);5
z>R!aw1OzB;nx#F^;3HE4a8DN2a}T!<P-bb(-XFO7Y<9<1-%tA!KP!ez>un(TQW}4n
zHGmefeklibg6!R<05D-3PhT@(bf+jWC;9*?9}BBKnK^?6QkVnzQS`m^*9<u+WU2Wk
z!T${-HR1@*oq@@IkBB4m+?e!7avOi>k_yF$OYbh#=mQ!#{@xT(vUPn^q3pic6nDvF
zc%wsf+Hf^%kM>}wXhFQVWC4PlR<Xz{_LY5P2sImN3n<?!jbOm6bdRfyZ0(K%&dO$I
z)DAu??s6>{RzxS%<3@0Wx2FEn4!#<AyaSirp#@`K*6n|JLg2#;&h-nbD>Ow(HOG)S
zUq&|1B;UGZcv(047<ZY<5a?H+nGD(O1&#cZ)=ymG_`*Zy)<~;aJIf+H)fO!N%-^7@
zyuE2=#lv)TE^v%*KJyd2=84??QkrWe7Ur|<HlGSNWYG7J-pO?Y*IYn$9>@eSNNY@H
zyh?&s?~_7G1>tJ!%J%3jhbY5J0@pJ7K#*AAa3wkwp*!UxGO@yj-vi8?dkFN@>EQEV
zN}=n&z2`vE>V>i%WCf;R+y4Q4c~0YUD7c2(%v>JSWg;xj^4Ua4{2Dku$6e94nA-y|
zgy}WAYjMc{_^Sln?kon7vwLv!S9OkK@3xQu#fE@5Jq}8#ZTDUwb-bE$9E=f`)7F`P
z_$J0?|DR&562yL1a~k9Zs+Wjs1|ZyHe3{|UPVBe$AS*&Rld>{dluY?s{N4`mg&1z=
zxTsDz%yN{L8gzjrtSOT;oPo26N{7}JgQjpjxnS2b<(0&LprN%n4=Oqs?XWAT1NXVV
zlCG>;AO|C&&Y1FU=GXN>3t*As_Bz~WF|T<2w3S9gsFqJ-!>3MJf4Pw!W8`|0h!jVp
zS>><cQI~<uhL~htuMP@6!I4^}=iyK{$Kibh`dDIu!=PTb-{mbz$OEVi+Wp{Z#aUpF
zzTq>EwWqGd&w+G1W$YCRu{tJLEHIYP;K378n=5k;@hudYm3NB{1=VqFkkk(Z#I^F1
z$tON`trKsI&feyxkc@izzlIQ|j+}M5PG$AIXsC^7&@KV1g?{Dv=?~v;k90>Gxw3)X
z+~k&DzcFO~5&56pet0SqoficQXi7KqeXxaxG;YORjR;9zP)1ZP+k?IMMV3KsxRN~V
zshDuJW`kK3htyo8;jue4&A(e%BaZV|EjpNMk$$Oh<>NcEDC0l9@*FLgq*ZT>d}OeK
zVF0;%A(fhEL=L+&uJ9=6E5$)mK6Mv_vLraHR=HzqKU8I{VL(Jf<BCsx2m0R=GXjC$
zBVx@X*q2c@s*;*7aRpd}%$z_1LAyg;cJTb^MGcJZm^jXYY}-&n1R^{GIn(he+C8v9
zgwD=!9C^1>*leKi5K-JmDpW-a2)H0Oq*%FT1g!=jNT%rNhy$~%rk?xGP#cWJj;RYu
z99ND6L8n$iJnRpHhD#5P8E1CjxkkrjcxmFa8YQBkd-<TBSA!UH7k888$Q*U)1A?Lh
ziNJ7lZ<@GR-EMXIqqrq-2RMVaW|CW-dHl>D2*L-=iOfBAl={*;T+MVA5K?<`NXLC7
zE~z(lTnt+CNxlF2fDFlwCa(Lc@-6=QKI3PJK`)-%^rGc9KaiW&32CEP&dtXH4FWxX
zG+^JKlIi?b{dr<%YHAK?l9Q7S&+kTh{Yzz1w&zzZXZ9*P8UQPzR(XJGbI~p$(J3`;
z0J478zPDBop%vJoEA4KW16h^O?DqqDo7#N66Ye-EOg_iOq3s)t>Wy9Ij?PgIt2s%t
z#0mSh?W74*Ylix}yP7YhHPZIB&|u8rbGNbIc=&@3peN_<Mg$;xnK~U_*sPB6(?gt>
zhtVU!OZRk~KBzBf-d|VXIT7!D2IzF-0+V{9<Wb8S-IKDZ0Z9av^M20xNs72MYlr*v
z9V<=LQ8P!~DG~abEeV0QLLk%Qe2E8|RQ=*Vwc;(#SL7vu7iFEtG`$uQFtx`89uRe{
zQ&R{0L5o12oid^mFGJ2~4op*^p1V|zd>#@$Ta)S!)j2{NfNfW+c%)6STJW<nRLd61
zgoEzT;`F`9lvToqPuLX1CF!4+*Hep&nU5<~FsSEfl)F+N!mQ+sOxEa{Qep25e~OZ2
zS5&Iznl(@LrsMxw)?tlON(=&`yKf_7!JXbxF`Hyf-Sm}>XW+~$5y4TZZjxLX0n^A<
z!V1riGY*yplv=yQ=DYI3QcbCg)5E)8lbj%@joQw8q5R<Q=#Z(c<~I)_;Tl)0gJd`}
zog*5W`L52PpcV}U>rN&KAP;!VcQN#<yKjy<$I%2~>wU?`MwDw31lJ%h%m>3Ntqxci
zhQTW@sD)7DDl;$dC>0erC8DvFYi9=)XbNZq{6hz9D$lIa&TpgM9X)mOiVFrPl72MJ
zwn}b`Qnb*dwUMN*U)TpU55GFo7-JN7CNJ87s?gAou@PvUG4<|1D-PA^#E}g_zW;Xb
zG6mIT$PzePck(mY;Gd_z5ei!?HTIbiwn<6`?OiLVP#r@ffs4>1vM}#E+J`RYv_Xf~
zoxcBY!ujvg57ONgYM|4L^@93j&lPU{{NYnrkCYUJJ;9Q1UHVBjHO(8=thFK-tUNda
zLcTFWA6-gi2KmQ5ZF(%|%;2ts&Vh_i<e-4>=g?3}VmL7XlcH4L!eqU!Ys-7OeMJ4r
zLn(m!m=Glb?R$3hBuU*vac+AjF9)Vy9iYMYO|-YU7_<aKSL&Cb0|o%6&?Cgeafv9<
zd#A1}W{GGzGP9>UG`?NO??BE{IY}7zYz&Lfir@^B%L?T)jwjRZYl3HtWSjMAZ<VA9
zSO*xNU*LazrM+9xL?<!4=M4X|0wnAD@0_3B^RUbbfvo&yaK9(fQ?;4R9bM$IuqtmO
z?&v<njhm>!%t%I2m=gMI9~^4!6tAIifwWn4|H=XSJOGcx%h78}gFk+n{*CR7Z-vxd
zdRC@YiDR^myiQ_y>M&<5mEm=JnsMu|;h#(i8df-U;E~=diY0(Nk7ulp)DqUvhuggW
zpcPuT<wu8kiJTfsg+D^$u$Y&0n^$j~-R@j^nM+Aa753+C3O>i5#H!}(+fJp=Yb}5Q
z%=k_G?*E|Fnaqp5n0mC^4u5h!2~j^=h5i)rVe_%RTqg~HWsj{bd|2$=5YP!X=hyqZ
z&$SAj#`0{dn0(+ZzL){z;V~(t<w7}bJ1p|cWK9YwBF4gLKehdg^06V4GeLA%`$m0c
zO!QrZ7aPZvF6a;`{#oU?$$x+_VG;R}s<*m6zi4CUeYB6<B#~<6mT0!kDLAfU|0$II
zHw@Eu{$y_vW^xlVxrJ1YlPGKMg*FBZP=(nz(aAD>Vr44jWN#A<*Wn4X_FWW`Qlt-#
zJ7Q40<1o*zP`aI=#yGp6Y5M2pxWz|SK}+u~cBnF$@-TBfV}H;d709jJC(`V!?z_^V
zmo12;d#Sdw8Wj;>f@#|%d-J3mXheY23uXG2P_OsdLZ(`8QLa2O)M74|N-g|jlu$Z5
z<w)YkoIM4KL^YzQ55BiF+uDF8P^2!ShabHv=H3Er_FBP5F1g8z!-+djbBxnv^jO^N
zu)i!0@P~=&IZmB8mfc+K0;S^{Yaj2}8q!aQF8<P}<I;HdfP!A}yJEm(UtuJ_a$nr9
zERw(BiE01kiV-69eE0W1SgM6vu$u>#wk%AiLzG)5nJ5B}AueBCY`AsP3x*#148LY_
z6A(%SiTLY&P*fhbqK*XW|3(QTJ5-~Jfj$x;u?LsbvSzF<2FHDzOndBx`YggpNlrwK
zgU<BI&*N`HJ@*aWuTNgpOg_aC^n~|tf+*JxRKA_!#hZQi#F@ENKXVx?l-M(_)RX-|
z75k=yow}9@+NWLNJ&?)X`ADTSaKS%pOF}a251@>g$uU<}s0z99DZ$Z#&+Q@eGLYb~
zD!#PtIwrsMO1JFFE$na!ys`s6+^Rs1C2Z*$)@1dU-4h3$fxlyZw#V?o?{a}e@*F;n
zt%<!p)9YM9>-+f6EO)pUo%S>RH?$<kh}0yXR;%Le2PU?8(qjt`6OfUbhVHc9>hLPD
z(nQ(VS(b6D^2p}R-yjLwum^=j6OUoEcw1&EiG}V-ZB*?uUN{My|93COAh6AKI5&ff
zmRB+*z7miACe+Nr;3cJAUlaDISmCip0+J1|2!O7C+%t`TMg3AW@#FHa?Du>fRm&0D
zMj>_h!Nrn|QA~T~aX)5#Tz}*`s9S(8=%3N}<Yg^*8~on2=Dc}kCY98u&`iDh#j>`R
z5zBj!NbOVCEIDy6*>^;8&fK1%Kl;N>yh35C6o4vHrVByr(^`Gz1%D>g%jaqqj@;*q
zB^GI;rC|)|x8fQXpC0wFj_so^YgqNe3lnslr#}VrVW)X#7`m4AYu*}Vd}z@g9ZbFY
zsKm?u)H<r$`=DjXgu8D+JGojdEJ@L*<1w`F=G*`P?s2=Cy`4vg-wN9&{?@%M0qTY2
z1ij!2iwSrl;wsAapio)pgrP8VlY0|;dRL^$t9)*Si{spu`4h<(5UqY`GBfYE-_rNz
zNgrEtmYU}58*RY_Z0|mDk-rdeQC0d`nL=if{^O5o)Fp#c@4Gj9e1J|k(_(#TK`!Y*
zWDIngrz^sdx3I~8p?*;8u>XJ{rWd0eyFB1)E?ygvVwFX;srkca^jK|}BWlbxY!lz?
z1&6J|MopDt5=W#eSKxnZ;||g@B+Ff&dEe+WvjDfki^OQG!$HEIMu%m6DvsIOoeM=q
zd4ae}PewgYsQB>p@$tiK=2?<EJ2mG%sm$CXUpTH0*>tk+D(*+zVL83$0}^i7p&D_4
zy|<Sf2_n_>$c%-)+Xj0qBy#N-gYLabO*H`_5+YbjUK$zMk<?wicb;A$`1<7Z&E{b7
z9yal(#shk3uZQ%j?p20>tz<wNPmo2~gYR)>9Po0lBZjv_7Cp2HwX3DB#0^USU^T4)
z`ZOvK6IobBkcCot3~h%n-I;#?Ph9m*4NgCm+Uh*`M2&2Q`jy6I+!vTQ#4L~1VDZNn
zXIu{{TcGKcID=fn6a{!N)9LqvfH~$dI!<V)RRgx|*Q})qRa51ATF@3K*iQ})tF8&9
zrKrN0ksq>L+wuBKZFhWC_`dP*eYe>tfepuMiq5#h%?!WGWb(=u`>?QFhr#8X=Q>p~
z{=+RZtfM7zYc)pP!u7o&L({wK*aaW4t1QP`--jD%#YIeR6TK3r2a3~_Z}O(M2bjM#
zzsJ{O`FnI&=ETtjYlWRvuozhMK782!jy_&{^5-g|_3U(NF$sCIHv{PTSky*`^r1jD
z=XP$@v&g%Np?G)Bu*5l+^`etlS_bEBce8{K`Ex7zVqdRUo_bx?$nmCc0}neSkL%;z
zM7KpZ*<X1>9$!!Aqb`5BT6er~B$61flTnXm%u@B5;uyTft(RTz=04<IA!WZ=RussV
zkgaC^>O!Z?B>>lKz>p$obKOP9J$PNeRRE&twDXFcxqjhaN3h|1&HHXo&v`2cz<(X~
z4S%S7{GJW+`2wf^&b>ynfpcTGpZ%R*7mJLVgwD`QgX01Ya+i&*sq<k44k0aG<PU-U
zMlYAnrD!`qDFCbwCjcL^TxMeRE2O@!dex^G@?@{v-rQS?KE@_;FMZ|=H*cqiKX&N!
z^(n2x8}f7>bI4D=fc7HL@vqR4?%GFro=$7O#Q|AV$d=SwNK&TJ<;l@Z`c<w=aAt^}
zT6b}tC$zr{bY|tXT)FmfaaA83>`E#=>a$KX(8SBya@NhSkFUqtnM7};Cu+t;`jUE!
z=AR_Sn^1y&P2?Y>xV%y-dsek<z0dj;Jl)@4(qh6dw0a$NvHfU<uaaZm`pPsfL6w|1
zE^7aRqcmh|bMWBiGyxLuLLp&m#!gU9D|b&NgG4lOW_Q~0C2&j3nx4ZBw*h;p!K8l^
z_tgy5<n(wFo$D#&9;o9kwO9E3W&a0wMnmqgLKRW+W$lO_L@q`IJKeoiDE-=W>RK9{
zudw)d;5=Iq&CfJ71>%cu*V-nG-cI~P*FS?|yxF+!A=^T?65ew!ug59Y##~ixE+;sJ
zYYE5g&}J8Z29GzmcQy=?Wj_wS-qF9R@^p1wOybYsSe-aY@rawVJ)gD^&FIOm`B!02
zwH+?5(656W8N7;1xx=0EB*&TgMm~^#mp#cV%x~7WG!}aYw|M;ldlbVjf=4aa6@!)w
z^wT}ZFu-tLUa@2~=fc$|u1ev>Bt@sw>kUa0|0*L>^Axnu4|bp$nMwV-Y6mGJRWIw!
z>d+Y3AdgQ0N}b!awd*hGMnkfqgR;IB0@{FtyE>*0>oar;jyHSe%#$d4r5YQ#`EBxg
z;%ptBxqY$ZT$myde^Km=#*kD@C$TIIv>%&Xr0_msoX)3{8x=e4SNttnu697+dV0q;
z<;|){y9z;qy*fI@>SmqMAlvepCWNNQEMgS1*VR^>x<9uD=q~r1AL{ELppFy4i-TRE
zBq23==SAMAMpL)L$@k>noKsd^M;l^_?@tWZ3HOq(DbI;UJKDBrbK7itYLBP1rE+gv
zX>HaW4Og$_-UXD<B3rbE4hA|m(EkpnLEoHeGKL~o_vaY%JOk^?nUmx$JGqetOVrNC
zqYYQ#+_eFXE~aXVm{-sv3-;wR2JCvqWFgJl$gC_~rg6*u`bfv^s=ltvzcpW1UO9`o
zrKGuDk}FxJ_1`Q4I)GRKi*@?4G{n8S?5b67W3GSw!D2M(T;J_NB74N?xQpENwR9s-
z%^~h8zKtM!@O=7!Q0W-g(YCXGb#UH@RWd@Lwo%@wZO;13cU~z@3GI60skx=8n40pa
z%29+m9k!ZD^=1~(Bme3%i57*Q%jnq%wWm3qh6eP{Dk%Y}C2h%;^QjNW*bk@m_#-`Q
zTlzGy2}(dlE<v<)x1k3L5;fklW}$tM5UI8@X0pV>q;{x&8X&p-Iy`q0)RDq?o^`-&
z_7^7{H+itu@}DXY`2X?*xWU6txd2G}`RcM%?=$+xWJn2>wGZNFK)64~<%7PRll3rn
zDb_|KJVp=I<*=x-uFrn&(@ORBD!kic%tGMC0z4!}=+3xa+pqaPEK?epEQgTa%eUKd
zZLUm?LdzyyqCj;Ec9^-l7EomJOCKVfoN?t}LLL2x0zO9VX68VU?s{!|!C|hC+Re^1
zMD{zEwD89#MI5Zcf3nd_kG?vVrU?82nI9UIBZ<lmb!G<`0T7}{PIaK^Eu?#atZr$Z
zM041YOw&_}nt(<5B~^xpCY08pOznwroy*Bm6#MN9CEdbSSqqf#M<AdPKGF?eJ<!^}
z$_5c-?jNEXrzF~+t4;J{Gi@N_IirWefcw8pkvHs+v<0g6h1y*8fHv!+b9W~B+LEx-
z8*>SePLhg}4rFmkEUr4y3uv`Sq3GZG?48&0*=KY>tlcm1V}Ia}PZ`V$`|T#jC`m=P
z<+vXQ>9Q@Vcb@>w0Xl%vOeANvs=y;9)?_)><!l4z6V%!E)M?6nk1n6KBdt7E{1#Vg
zv$*-79gVH`DdgL6^X+|9x7vqOT0apNCpKjo@QagWmn7SP#`u3F@JCE-SZcWPx|5=&
zak5HZvg5jWQdaaI#!YB2$e*cl?^48iH4nbH={X^C6%iK0AE-M%7TMMIqFbyDCT`hm
z&fR<fV9`E5N|7CijEP=+{0%GC0^9>Ol|)ij)w9`O(C)d#`-W=W_>PFlPd>=W*LR%E
zq1VaRf7LSgrS4)t|9&ci+J0lc&%l@om&5SkFGf1)KO}W?X0P@@C-y0kEe7I{bJqZz
z4XBp`XJOS8wD2;@$`m8Fg9(_M1(NJujLe)Hw<({!svmq|8lrl>-E&_%IyB1*bY4Fw
zf75Yd<Xo2SpB1c)lYiCnc+)eHYeTVm0!drtp){1x>XPFn$FWVO`8-x&@F-C#Rp{No
z4Dd3X2Osf<!Bq}c{7(D(yG7#KDdMi+*^%vLH^dbrOn0Q8mSTCoDf+$PdbF0S=+);e
za=P>U#CiEswcDwberT3s_b!s2lHT+}P+o#!@9OCW!OAUV{F%t>RL9AKFB4E=@GOpt
zIHajM<sM|`z9L^I?#1<VU^r{UOYsQZy{D->b$_h!>Sqt0-rM^L(l`l&`$-I?%-IDs
zE%I#UvTb+KIbEvI$8~0R3x<N6u|ydqts~}5;S@fz^BZTXao^Y$AKd#SVYjEf40QK4
z60<;gT*ex)I96@?fN7gFORakw>_kbvMfg+>mK_CMED(0LsIM(aU9YER{+)gJDQM>b
z=qcgU1-`tJ`<WyRY)zF0B{5_m^i30}ibZ%`!Bi+f_GA`I*(qxcI>}xUX?$I73xKke
z9fB}GAt@4Fxch;p)+I3G(Z+iQhx&;2<^9&lgKCchmX^@>(1D6yY;adG$=u~w*6ge>
zcB^_N;@I&LhFF=J-@2L)=|1z~sy9oV82-#I1>ii<DCHUOuY2<aTpG`K?ZR7>Nxnn!
ztHRSvECGrFb7^Fg)X3S5_WjKlW`J^lG@zzg0Vvq^;2n_k9bQmJ;%*zz_b^50lG>BF
zLF<KCXgnzGwu*=TuNp&Q@NMvCuzm}`Y><g$C82$PW{_)_pmfkEGVFR{1->^DA*ymA
z<QbhQG7*?Q13-P`AVb35jijqp06oOD?7;4kag^x;GQ&y_WS{ocTg>?i$IbizXaxSG
z4P*h8e3Me%8PbiK&ph+={yWCNH=I~qGP1to?TR7!UetJhI$(nDuAx^6`;y~|Q?<cj
zA=vp-V}XLTGt;-b^lnQu2|(T?X*XdhunGP2DC@uY$z}Q<!W-Ze_$?5!+e<}-veZdd
zi>^IGPAgdPJQ@=P7qF<lIx~}oQIn4Yw6`Ht>aDMIVjI6M2{nh><;;HoF+rm5cOkU!
zj8016kUqb$&Qb)^knZ=AQE|&DW01q&)8JR2)y0}}7qTKxh}>VwoeB^gCN0%);{_i8
zJU^yK33%QL4SG}^MtfYRaWWv(dAkwMDG?e?o0@iu-k}IbVvAuGn{D21X1l-wo2{f&
zw@5{%kM+qxv{H=J_K$&UlbaMUGUVPP``!FJ$*Bq19|OQHas7O{ESgcwKYU{s#t+V9
z?-n}}CQO791sHer7kAOw*!g_i38qE;E539cA-R%MGNB7dXm8ov{F8pHmIKmb`(hk-
z4<wj$iZ>kX!y4vaQ#FUgRwj(dsc@#=GP;1|b3vK3CJFQ#%naVr#4_J+xVpE(x$XCu
z{w5whBMElid-{70OyT3vQWr~N-^G8*Zs7Q$5pr5#^D!T^Yh(*iD==v@ecF>NDb=cy
z4?aL&(SrCPFDG*daFF)|D)Z$KL&*9Jy_?7mc(bzF?TX@-#quSS?t1`n?1ymM7hb*D
zhwdUPL!VBlGiy9BD<m#i+wS;_%3bc3EE<bC04Tb~?bQ;IkeITxY(}!{WBK;Ya~?(2
zkzVSV=Bn+8D6wZ*{d59?Cd}9oZ_i|}ADBJS6P8P+srT@2&-US=+2cLcx)JQx^7Py{
z^AF$~n7;fi^**Il8A!sc)ju8kAd`IoDc!#WlWah$m3aGlwMHa`m@~X=l${?g^Ufdu
z(v8&>+L9GjAY*_LTsNzVgNBh5#qxMvFne#>jk`e@L5<wmm(-3uXQl@=yG7x}H5<Wl
zj;mwa7GZkMJb+GsbzsRiBx~L8`2$-wMUOM?{@>#sE5USZ*vxk?4Z=R#8j9gIcfm99
zv@B6VXn#6GNqX*c5$N#mm|2119dKz8QB7G6Y;3oO2Sh|KNcis^W2)KpX^|UByT`GA
z8!4!cPP!9*tl-wF;25jU;1B>t=$_`G&cR>Vm5z>k;4?rM0N#P+*8pr_8U7iHQKb^i
zNq}bqJV^x>Gx-NWa&B)#Q>ptO_fvZ&SuZI06UANx-%L=M0`C4YwXS;sOY~%^4C0W#
zOPDY9e*ITTo@DP*tG&`F_Hlq{DkOTfXIf#m?`UG>lT>1bNEzo8s4vCp`KYzVqs?T+
zprI(GfB@-NF2=FTVe%P2wXeZpAnSbqtQ8p3ISxLI{xGxco^<g3BncasoeWUBoITIJ
zWCTvO^%V|4JT-FX)IO;c(z^t7n~PFOq~g@Tkh}D|nywSn;)<kZ0TbIxUGf!HulwS@
z#Se&GE*uC%KloOuA(&s6V~?@aV<XVqi)Mr5>@bWCOdGr@*nl1<Va`9`td#cPffRd*
zWhdBfSd}@{CGG&brH*3kJ6}C0a>+k{9%KOO?;%g4W;`9Eu$ewAYe!U05}A%8YifO!
zkeY7r0i~Q*#+g^A!ih{~Lph#6|CkIJ<9)SDI?pf*MWrL;e)sz%;P1h1uGJFetA}I^
z`KF*l!FO_{in8q)fNmq2qd$#mh^Ty1b1E<D#+3lEz`h7?`L|Lr<8NF-y;R9=wyK-+
zGeV%Vm}IY#+$-?@^vCId57=r(wM9X1D466!BUZr`=P-ryQi{e2mM^fp%0GZ~xE*EV
z`tay4$UJVnEbV5*Sh>Li%c~(Tb))MasFY^^cUc1%1+LwMB6(-0QV=L)*pCj~4@c2q
z3gtWKzOrefS1?_d;Tb6P>~Qbh<ah4i!vp3d55h3qGo=Dp)=^pRUadN09kd1TBsV>L
z<Z*j5_5ReNWZJ<s@)q|gs1K=z#h{oby1^OwU$ul`b!m3DXAlN{=fdrMGx=O+|K%&t
zFr}C_@U=OfVE$AcF-R5y;jxreEy2)0s=;J)=<x_P>pfJNuDm$dW5k1H{O6;GV}cw!
z<MFBYb!PMj!)ye}zmYy#l@EqB@Zcx45bjhtWtUlI@0T#1@0`!HoDgV@K&SSTHO_`t
zG<f4THqg1tz^(4)J4Z~MYXp^$yIOs1?zyo`@x@`FLL~E1$9BNfhrp+J8#^nZR&`s%
z{*4Z2=>0a5Xo!x^((Kc_;KRYAy|vSD!*x!OFwPUDQOovM8~<fyeJLs-y1uzcIFKs&
zj)mt6M_<qSL8zSL#aF`mHh~sW@kS8e&GG|?2llRd=`H7suj&-K&yZpBD_6wzdg$oG
z=Ep-7A_QT#SC`JFE+FMe{(W9O`CNf_^iytWoAe~uN&*&ZLUflD1ItGj%+Iha;Cpr+
z+-Htl2Mq2Q%!%_6s{fbP-{f=mRn2L0Hkiatfcr~YWU_9`Qm=@@0rm(5Xr~9PW;>zb
zx1OIV2N)KviG~i)Df*o?&B@6+QI{F_)S(v3r(uRdavhuFzyiq$!ioIsNkEg;W&7kV
zK2GCHIaptor*m%<#)$+CB^{4^p6U6dn=*w|=ZMOzy8QM=1fp}}ToCww$q4Q;N!-k5
zFsFG4?c}&9Li2@<7(rnQQ~v_CpiA+Q$*EF0di}YF@ZIOF@ezHyACBS`$C>&qZd`@O
zQ9GS<wqX9Tng7EBb{dJWffjRNpMXC52=m~V)pV8qKc7is^c6IJ85S`6Gxa@0CrH{!
zI8A0HFfIVCA)Jy6nS7~b!p3yZs;%mXGFa}Xt1<a;sE=8XJsMx_)AKKk$A~&%72BB6
zcD*`Um`^un?k$cO#naP=?CoD!UenMy7Mc7c&D`7*kc)JZ&Qd7XEgjZSQyh33Nk>@e
z@9GrJ5y_C*VF)zC=XA+?yZIvKQ;=S=YFJljW)*W^#>b<7%(-u056i5!e`XH-376*X
zSt(aF-+Wocf8!DYjxzTLxvV+4pWDV2M=m0IR%+^p724(UzuKOdt<^?GXqV}DW?1Oo
zkHEx~J7GQ~18txjRiu5QLhKHV1Hsb04#u5>{C}%0jSaOgX6c^!@GrkkdQ+67#&}Lq
z;Cq#^#9-%SrNwQPSTbx`<Kq-QBaQArhc8TIR@{9ZUt0xXhjL)iQnVp}TtZGPcW}0a
zK4IJ_e^GgR?n$*wd)_5LSxUS(=U+f0H}=rLse9>^E4?jlty;b<p~!X!Q{68emDt+@
zv?k(|%k+4Ah6zuWRL@%JHR*Uhrr#jmNu^fKs3LI?{E_ThbiUEbs|RlFv{zo^680wC
zr^*dV8d1Qsq$r<rZsP1|J2=2f#M4HtzN!SsBj%{K;rC;4dB$V;Hgn!QLO<Ka6jIu3
z3<+eBPO$hj>!_6oKA=~ubN_n`)$W0ouQLAjO&s_$EI-Dbhe~1#8YHKW%8e*Wv$o)g
z2E>tYVv)w_Y7bwBn?%K}WB%#Xo#{W3411XMuT*K5F^_e63U6hHMLKYX!QeCi{|+Hg
zlA3MN_a5jkc!{-n;%y7fdHG(Lpjiz|d;H<JMV9=y4MFj_B8!QXT4991rG|zO-|F6f
zfdvl#{vF-&RsW)C-|WW)C~k$euFZGyxGh*FB*A1dNk5AfQTYHQrGH9mA0Ch>;`6+&
zA7o)u8l3MkmK@elc*tw<&Gy`M>}c$*$v`pCaZ--x+0q4;7Z0{u6{mli=<zx=F<W2E
zyaR0pKjANsg|)%noq?Up6~{IRQXfGobofNL0MNPmd;5EW&?fGqM!0oB_X|&c`nKqg
zl5NQ*Nn-u`QDeKh=~<q#;(&M<r&ZY0#wPW2f#C4xpK`j6&;EhWcn4<MB~5<O_t0L)
zp){__<Vv-n(!Lef({Fzd7;7*$_fj+F+ay>_#Jk69Wyyc<48NJma89e%qj;x(`D$6}
zi;7}3oEc%9j0pwt5}+(pA!oUlmb$&LYRN~c?P&R?a0jh_r*%3H@BdU7E4?{a?{Inw
z-3{lp_Bfn;R>2$`Gwu?&Y}@}tyOT4rjZ6fRcR~EJHObE4#cmeP{zGZ&k1!XK8HeK+
z`*dE(7yuIdZfoAo`&ZAm+d=MUc&kb$BQ`v3d<A)iXA0xbXsj~w`Qsi&ybZsxmyFXj
zY$EeznO;(bnfceghhqFG9(s+GjUwb9teZB(45Z&Q#_qmFfJ7_;>-?bO(_7Ypp<a=k
z@r{tM%H1x8vaK&v+-4L|Lu!Ks(&=jkudt;k)&QOF{q<$6*WP$s;8O%K?8_52Z){x4
zPLWx{oJ)Cvamz}ODm9&8g3H<K-e<g4h57E%zx&LA&fMj+{7I9)DV!<BVNqJU*?#&M
zh#ij0%dEb%|4xxgJyyVy`y%pb?h6)JrqkE~hmFFZ^>u*p*qY>meB5LHM9WxRLEDk~
zNT*2<AdH;Ts)+QUy}=@5VLak`**IIDzM#x_Ty^5;Z;hhDuqrywWvnNM1HIH1D_vpD
z$^0=J?i?1sN#nF<Y-J#+rB!3G5f6x=;0VfEiYc*ADSK%$^ripM;p|0VB}_fET9+jS
zsFIuJ@^5jD4pe^>g!=;$;2Q<~Y#*xeEU$?^>~oPoB#Uoz={c8K*M#=-MMM|^;wU)+
zBWNanelxRGsIfu5-3)h{wAf0Zr{im9?FfF@jg&uE5Fn1XV*HuE0Q;P#+1{(b%IP((
zirrUiyV+H!fay7jeA~;jr(a<mm%q3cw^{n)W$cLN3$8D#g5$0V{qH*J#j*`pwLB(R
z^|g3B-tWL3XHz@dIMjGXQJN`g0l<{3ugsl*C~8j22;RQ(cYSMBaNV=K+6d>em?WOp
zmytMBb$!r4L%w>`rF_DEw$o(%yRub+^LG^r<2J4`7MeFBb&peLLDWGB_^ftUAL7qa
zn95JN{Eiya&&*a3jnJ+!sm|h6e12x*63<jaCtH14Q==4Pr1>`JA<*<bNBGlzo8JBe
z%s4-XWn6>Hq?pad@aLsoUax#DvpuJF{%teeLYopf%s}FFwGgLh*)S?4M$NtEzqcgB
zjsM0i6Uz0w5(^wX^#`l^vtO2vpJ|!tejQtt%r?jsw(ZZG)b-Q;(`)tDrr#!Gt)hhg
zKioMDr$u<3M_n#oVqfz5qcMG_arg8UY{W#2)9>LKjo@)km-wvGwf(bNAgDX;@VcQo
z(`7tmSV?|xRITI*&~aK$^Qa)}p?uQJ;R*$E%e|65?sDT&`RTs$W2cw=!}6HTQVW6P
zIGbwI{c}YxeaaFW;k40MpdlScI6FCAiol`bQMK*Yr6P^hvF6Rb*B5;*69)X<)xuf5
zncEgZ)h0QMZ~yd{Z{Cfo*d*r<k{{*1Ieh6kbxzi^%dZdn4>z-3ETw$qsU426P2u(=
zGpn{<{rh*^CGH3!7<5!yWHK&>uk@mn?nQkN|3KVdpe+dR|AU(Um!K6<pEnS2&XK>6
zsn2?$7vKH8gr(rHgq^6}acyJyQy}%QN0%S|D;xC>Q)C&>Q+9uDmDlO4*Ew45@g*=#
z{*txRu=+lRD%e+=B3G;MS6TnID*H)rZ<{A|lgvmk#raJ@D^d0Af%^kGe2m6`Q-Rtw
zEdRsTo7ISiFj}e>gOzFTtgmMreJS5{Y4sx>0G_v5ix@cg3*N7;^{4G?a#cE8cO>=>
zOt_<7M}2wjSisj>PL_cgby$}xPI5|_AIaNXT3cGwSz4EOXOjJ&f|L+MiMm^4zemA(
z5@W-T!UmeZMQyQc8nX5~v+o*4skDbi9VtV@X!EPmoZQWK=?H^D-)3)0m5Dsh)TbY_
zeEy9y_~|CVCMUzLpalH9#3+*YZrd&2G0U#Tmb-;@$d(9kXao<lDtu4=@9h^cwjOL`
z1uI{5YO;nZ$g-X>D4iQP+piq;t^y>hie6(8m#~a-3TM0a;-&H;;_tHix^5F?ZHE8_
z*RM0~p?}%?trD)kQ`gLP@-BFO%(|+Yufy#4E&t8mY!CQ|*1de}gKI*KJ~L7K9r)~F
zYx)?H&+j>7+|_;06wi?2-&v!tQQ%AM6^D)BKTT3;njc=}6V<}hv3?fn?iSS9{KzSm
zR?Qeq+!;K%knY*AhD@(HZ91Qp>}ULmTa(PoN8i;eLaWyM+oP}u%t#^fJ3KH(XVvf&
zuS<O=PvXf8&<O%W%J^sq(o{=Jmt6L|IyyZEb?M$s$(^h?YaE+1ZrQY@3iDl6QdDo0
zUZ%!b*eH`_KKA+cC=R2Z=XTX<aQjc-un;|^%rsaNb@si4_IV(6tq048X&p;+BHsW&
zet5cyj`L*5*J~4O1hhdBb1O$Bec?i$$gvXZP<&Mw8gaf~)$ygC`5wSo@7<nrcK`Jg
zdkQ4x)$8ObiQTo@J-%87i%zu8ra(yfjO?tcZU~jlg(vts%O7pdPb9@^T_|!kd<pxx
zx&~^{6*22C%pQ}r9@Of|mLl52R+;cS+0rWsUptrLHy|2<%J=!8Pp=Bz37m+3ep?aU
zJ7e2?nr1KBBCgLgCb#cC)m*hi98AgGHBcPnw|ZYmet-3ADuXKQD2tN#$L(X>V(>5J
z_~bX~W$d!D?{CO(xu}K0-)7u+kr2_hfo?Sj)?*yuSb?dsh8xx>;;?K-5MBNwT=1AJ
zXpe_y%<3gxE6v6&98>X&mfb@mtv)J#7wZq-Nei?qMl>qYw=IMAqVQI@&rwmOV<ydC
zz)^W_7EMxXA>agqPoTA9ZmTK<le4NsG_AvyG85mxY2qz1Q*izwJrZZ-PDvaX(-Bp(
z>f#coVO04ammCp7^z?17J@~sYMmI5MY>GQfZ*P`9V!0T$Q7X7T_RE!w<2@bD%5Yv(
zr4%cx`iRVkzvxdR?I?Kaj(JvWI6XBCo*l~=U9%QG(Zq%N6Kj6EXtRdSkgmJWvJo1c
zjK{eAe8&t-<|8gxqZI&c>SS$lw|lsYHytl1s)CvzOfiy&a5i)VQ#vwy`Yahv(M<%W
z#Mz0*FFs+Aj3U@l8!HlN^Y#R}yZd*8`jSm!v8>u}WpKfX`(`CA1SK%{7)tKDKghLh
zZ%!a$L^Ag(kd-MblRP8cEfC*frw-*-h57e)pObCbnPVB$LbI~d0CqXD;vVXMTq+No
zeis{e=PNy*8Z7=K=bR$}!XHqq*dA+POA=##D;DyF!DB@5`83|MX&G2UWCgt$IhQ9f
z|JzfuKo`iH#gO}z>03WUttoAcN*HI(xQlll@ELmi&{CxLU@4S|;|YMio-ZsqdNML9
z(Oc2;nKb3mps}(ZSCUP?LDI>PKABlWrZ~`P5&%74dv7$<T;zGMAzg_mXe;UmK#pGe
z%>?~7ZD=CcfAkGx_Q^7T^p$keV@D#KKxlrW6+M+=tiy&NgHNcZ=MLyB7I}i-d)!yh
zb%471`#AG!i4lu89`-x#AG19hp?BUJ^O?rIQ@pD??3FGTO5iKyHRS=pVTss<fXJQw
z>b;D+L8)Ir-vuqj38-FLzmNglCvNhKuNXc|{+j3`2yYGz8gBK9le1M4lnqJKY!p?}
zD4XLG4B{j2f;6`VQi*W%@8fcGY3U)_N4#N@Bi?UH^IhMvp)Hz=1WzT$QkI<coQ|oL
z?*s}!rxrnQqn>$gkI%F$@E8Y?zjd?y&4V6+#Tq-Qa8}rdtm30Q^!J}|3#XgaavRau
z;ZEX`Dqz!zvYJ$H;`+qf(QrF`O${|H6Vgk?K$_KXYif_rgwBH&<Vsvs=^?JSAZPiO
z8#x9k7M!&V=%VT-@fmc@(oL!%Dua~;E_>1VO&{1lZT@?K?`{zro^7A^hnNWmD_XPN
z9`aP7CGb$g9O22}6VopE22pXrEAOb+oEv55!yvP3%D%TQ@%dY|=lthSNLpJ3o1Yiq
zk1uqB&~+EmKC1`aw3&*?OZ^`!h$=e~$cctzp?+7c9*R~xeZA93_*1sfH!kMWC=+V3
z$G-$RIbcWn<Yq$h-0nN5l(@?{&pg0bQkq0E_z)Gh6JrYZZyM87#Aq_vCc8@X=&#;_
zmxtuy`ZPA3!J?V`Kg{$lL0-h_H50dt7}0)H^NEW9Tf&OBoiM=+U8CC$dA14H#RdwD
zy-<in+bgeM``w{`@}bp?bybzt;YT`miK{`4;YrACMm*sWwb#Q78>I=&A)Qu444|Pd
z!A21bBk1{{7wcsH@?X%UAv)yv{m~GNaNt5z({GMv7IW&<QA4c^|4!=_Ak#@{>Le3L
z_RFPTFA3xdP)8xB-tUPZm*%(zJ;be^Eprzc2HBCM0=B_u5?Vvux@r*7luxRaGVEgi
z)SZ3>4GocMPD~_$x+Yda$+o>)VQHG-GhLu3pO+xoa>#Lq_n|iXhA^auZIj~9TQlhv
zP0_iM-L9~@R__T90DrL%6Uu*5WW2|K+il;?YuSId_=Ag-&wxER6R~hwPEYOPPUIU>
z9>M@)u<Ti6jR#k1?;WeOgT4e3bpL5Z)PgJ5mxE2IKh6uzY#4(2ar=$jnM)oA=aP=z
zHOq(6<4P3LQI&}-{URtUi|i!2XIsQQP`mwiCe#kTx!jKJI~rXkvfStB`0Y{#GWi_9
zNI0V0^j9xI^Ny-d(eDJCn#%L2_TFQm;uHO>#`_XIw51_)56>XFb9gJzgNhA3fL3+i
zT2zI8rWQ1dN4TahvJoIQS6g}V*#oH8q9+Tj_%Q@+I$C&9d^Cgn;j$svIi~TiOqI&v
zSZd|Mnf=~pBIr`Uv&6gac);HuzDb_dBTyH7IrqLY#jWEN*_W#J;Na3MasD^Y%9qvA
z4DP;Jnu&tvr=NXi5E!{B$co*mRQu3?g}CJ41bAWi1CSCA7;pzsC!ryPYON$4Ta6yq
zB7<TMb=8f2Y4H<&fyM9d2oPCKF%ymsyAM8dc(xn>4+b$zGcmn$CsaW|l+VYwX|3NG
z9vuzvA&`y7<gOwF%CA|+I(J8sscqTVNOfyM=$hu#GNRv0h2xVjc+5!&7e4f}@A{X3
zpq+VE|9)`Me+d$PlF-7-aLPQ($Wzw}rpDRH-JgD>FC_?NDJxcz5^Pe`eB;`%UV=NW
z<&A#1a@tNeZ7);|?P-a|AMiH6U@{flvW#FuZFW$Cq?Zd~2gy@~GbCGwhW5!YmU6MW
zl8d=k%bmh@s3TvC^4><eUz)E?Fi}O%{&gz(ESHoLM3QGW;QG{mP<lW+z^2O(9H=Qc
z`zU0Dn>a~wJ8cJW5E%kJy43pu7IYTy6DaW8G)_s!U>Y0PL|R4=S})EZS>&whTObsK
z+gv6wKSz@ldH*9SO|<Aa;a&z^n1C0{#Cb}oJGxfgq|`-KVV5x(sS)0&*=hkho>N-Z
z`9NquzaV|5{r8cLrf;8waRtm?oS!R>wAk-sO23H8pjrd@R$4xi<GCqzH}2scIKoYH
zOfqOHUNPW3eE>Ci&`Mf2V`ONue{HW_40Yuf4eD@k-jsB|y~Z4G-<oX1g1Dn_dtGpz
z_shlu%>6e-yKaA+xE>BH0Ht4Y8!3aCe@N5pp2*J5+IceR1UT5^oj!Pez|Tc=r9(rj
z1Uhp1@r?a+&%Q-DHSNPyqmZQL9i`XHL@k6Q(LQ}q4|d(E|EYjTx5<6Jv*A7Rpt<@u
zKWPO6jdL^?YsS5U%?W(AeJuF@$olShs=q(}_jT=kGp==wtE{*v$#!usl4Mns>|M%U
z8CTY=YnG3_w}!~b%*8E2xFRL<5<+pa_wU{J_xtbX5BKrDyw7-@*E#1kpD%^TBkz2g
z!}rVQ9Gb=WNRUDf(SrBlspk?jHT5~()ALNJwo+0Ohvz>pupH>}8>RUdb`v{IG#~J=
z!fIYeIQqd}$3Km|K*xbkk9J5O#bjxguc@)%B7Zlw%))i$GwFw4ZYQ-b28Th_r%eh4
z45lf*bLNSUknUl^kS*^UTSEZ2eqd(qEMD`ni&E&{1bl5rR}l>NV2DOmreE#@m@%><
z{!!;^;0wrq&*Nt*Za;*<=Ej?%8Qa4?5J4sWXm4YA&kwdf>(4N%#jTMC^zEdGZL}UJ
zPr5TtoD;#Vnd#%Itp;P+jEn;v?B#E)J%x1Vj6BnTpE3K(eew0i`&Z}Ug+r(Pm&5v#
zc-8Oy2x}VP0lrSy(>kvTlDg#7oRW9CC`5M|mU<rgVS&a)8J1>69q&i|%>y7*x6{LS
z?H@Zo^Bu9-^>SujPwdF2b?TmNlG#u32&$(~ExpSiVle6cD$GQL)qNQcP87`59Y2om
z;X{cmxpF*t6^4z!IEd_-rqDWzMBp3qWh_lvb2@j;6f997;-;kS0b~ocyWkNUulu2T
z2ey1LzK!lYrK(w1On<;wI7IA-F<c*Ecs3c~&}2S^My0-902H;W91W<>hW!RF8p|vD
zuU>E5c;aEq$d!Lf9T?d!z>N=@nA*tKSPSpxy2Rdl;C9uDY6Q&~kbM3DcHf<&VO`6*
zmd_&P;oME<!LFFwALwj}U}fo0zc<zC@SzT&p3fg3<7pK?k{tHJbIbiNb#Xw_0{&>w
zQJc#qt}#bXL-HCISrUrn*5?O7BA)7o6^b*=bWH;*D#qycS*6%6-D+EMcM)}0LlR~W
zl7m~YAedmFNBTBO8{74}DHii+RtIS$KJ(3oBoIARKxey~negI{R5*23{SmOB>M+az
zZ^F1|-pG5Lm`hjp;!AKI2Tr3tn}?s_X=77ym;sL}ryAtHqE5cwR(&pwV<amuRI<8p
zz#um2le-3eZF<|4$BKwo=aMYIr1#;fFu!<463ctYeq%W|h_QG+8xwQam$jn%@mKv9
zkkH@n{UKXH(3?;R$vm$hGvXzyO?EYt2WO#_%hYotbL8}#jCfctX9%~(GTpoFq(0=2
zO+PvV+}NjKmWHEgj2R8Mlje!xkRL{wvr6dKn_>~Xl##mopJ9KDd0;Vut}{drpijJE
zdbUzy1y~sgO-xi<`@G*@JA8;dYSLn^yG#+I-R_5Gv`IU<hTIxBXeU`k@&DT_JOZ`<
zv5VK%^mC-rt1T{Bs%ecB%l!s+xF@*0YH`*WzT`(A5I}%{S6TU;hp@Rd8AZ&UZ~Dbz
zC50eR?gJK4NNYU^fno6CWb`?hO=B}(EnL-|WYb#Zl$>>|mp}3Z#0H%n5^V}l2~zFS
zv0Ju~9!kjAV-JMP-YAT()_UaC<)~yIP&VMcgMWkY${i*wsJYmBR~CekG@xd?bG*BZ
zSw-VJS{uNkc;^o^I9^`C0?ln7BN+R}ndxrOAM^XwSl|z|2F^oTcYR5aiA;0vARe<A
z1A;J;@;K#30@eyaAK@M!3KsJ51%4+(8;#J}IP{v^m_MSgn*XZ?mSRB0BZD7Q4=G!Z
zY#c$RHX$j9yxN_R!H-(=_;-I};-{A~8D7AJ9Vb<y?O)_yhMdcNlzR3VG33c^<QL#1
z4%m(Lc-u2|;+{*>-`Esw&`DzIi~$_wO8-7086J9-3?aO8W;HOZr>9|n3(&Hg9ILy2
zs*%W%j2|b`jl9vYto>)(gA433nRPQ<Z*)!4pDAE<5&DX#Vbp!HfoQeo<f03{v4J#d
zuXZ-bK4ekbh1r*YaM;KnS~$)6e5j#}X~PU_5+-x|cNj-;z|sC#yv9;L#AW@SATbP$
zYq>(Ho^EE9t?4LCDCs&LAD0UIwdg(PaI<z+{tm)xd+xwi7}t&|g~*zW#M0R<6*Z9y
zVZO9oPQ<CBVp}1rvpA6yB|3W;<QwYD^^RCrDa22iW7d}$>Qf)`4A8&RC}w}!%aaS_
zGI$Y9%{18Wj-GaW<Ur7RL)Ne&Vxn~RV#jZxOxsTYUC5h=%c2(d%2SH`f&!;-ZZLzP
zSr($=F-~sJ@5087hrk0!Rd^E*TbK6Ng70;*z5bj370Yrm{NDR{QBZu%a6aTE)kV}6
zcIHv;vCd7AzdGVFXS^G68?`s(^9E|PS|Pm*(~_9Oz1kDfw<a^KiN&8p5$l?H*~D&q
zYL^4)&fYvOT!DikrX|Uw5>UULS_p!pQx$6AEOi@2UH6SOY*g<4feFIoHPkr039>-K
zOOJ&RN=U}OK^{z0rSk5$C@~O$xWAur0}22={}>TW4qkQME|9$GcT%u+kwcCD6PZ_$
z)El8T;ZP@KsgW4gy@<3Oxul;eZ_jYkS@v)m{dms$)<#oziD=>BH1xI&rfdDteo<!-
z)s_b~EmR|7JH|kSdfaMojB#hzy?$W_1vz4PNO3}Hyqq@4wB?i${o%%eS1w@g@(+vx
z!2sCheY12nIAfzOoa-;(lk7{!z`WWvcy(M!cP6+=`#!WuUZ=GSe7&pJIxXs<>XVuj
zO_&LfR{*5y>Q~XOu-fsaZs?JQjaT^>(aLK}Q9nt79<zbGO@STB?kc^}><Ev6IR#*1
zFZO&xX83PS-*F+A^}jVcc$lE|(sPQ`>NND2!&{T?&9pcE+JCbbhdDB%SjL+ZqoPlj
z6bk+wEdLUM2V^JQhM++_P!SG%ZF|P=cP#9g%TL1af7dhb+IB9iqy;Q7^h3PXIHEsC
z;edxrz}s1M0eBc(W<S*!FJZgEHXqyd2LvHiFov#Hvx=P3dAJVOaLBK8`e=A(YKhwH
z(^zVq2`}TK8;Z`K-Zb1fl3F${th%o?;x)l>!Rlp!(zV@MZ`L>NRYTli-nTRS$#6*P
zO<W(6WD}6s><G|bW>+2wJ~Bw^43znjg3tn&?lnSD;K!ndxNgFP!;UR|5sz@4{GR2x
zPs84V(MgXcHKO=r3BVDyAfIOMiH?npxZO7&HAh*YFrTL#&tFDWO0ko!9=*fYau#sj
zf5jtJpt`#u(wCS_kt?UYCWQj4YwUrP5fC_XlD*-Gfym!37o<vsCw%jL^(}YlPA<b0
z@@~C9t&`U~Av9Q|eq>?0)2Qg)?Lv-+Sub!NfnOm<Cir*87u>I{UF4bu3vWId-|1Hl
zLKtuqa{QU@&M0Je826H7=rX{pW~fjCVC?Z-Ik6L74>Z{I@YIYZ`dR^Bxz_1R<yz~F
zvBUt=fO@~Kg!)#+QYKT@`3GJXR6bQFiO>-m_jgM^i;}KZ(6tRC8uw|n%!&6Hzxy;=
zaYdKe4MI}(__R;x0mzf_nx`_e?CZF{3bRfBDhV*DN!qS?*P8JnXTHfMGdvWA1AQ}<
z>^%k=P`$_h`FD0tbH8M7%`C&?JUprW(0uD1wINb6n2!~0e>f40$OcyWO9okxcOF1;
zo1p&`EihU5&*AVhovf}S&cP0t(`A^`&qw#-pBJhFeSRON+Vae_Hb1jR<Ht9|DH<Zo
z%pGk+*~~n_M*>LFqj|bES8=;Z8#N!_b%zwwu!xGCe45^$srHA{-pl!F(O>6++&CTd
z8C&h2H}~Q0-D_FI=-l!|1UcWiSF0szWd^Eo`51Q;^kw5TRHZlI*o>&lqp*pc2%GQe
z0U8lpZzx5sdB9hyhIPwMiX*MdIwTj_Gc!IWjIDYz=gm@i*xpqLX}kWO)<b`KmeK2~
z)`wU-qHCq)998&7NT(_5&)Q@U4Mxl_t9-A5-0oQ5y~<w5nZ1{j7|51vBGdcKf-pQR
zBUdAt|ILyvzSFc)DxX0VB#981`dJ!paqe(iXZKL=c=t2RVW@yHgKh?xBNIJOzU6Vv
zZqC7*{2AQCmz3a<<&sG;H#V7}rrxcS*qCaKYdb`3trPtiecXF+1>Z}gI0nCbm_qXk
zx}1E`_HS61_)t5AiFyi~7QY=fa}n^eN1!iuta(><Um4z0p~(FfH}9$!_RhK5MxTUp
zyQel)yaa~Y+-bV@5b*KbC=Qb{=6UcTBo}zZCw4QZcT;h=bt24!IXa>J6$1Fm+#aWU
z6H^GEk>M1Hyx=gQPP%$1DBs=obyHkd&IAFI{VU2I!`_iB{xRwseJatnkK83o6wsBQ
zTj0~75M$5@kbonM2E#^h#^YCi2HFsUgB%UBf#O$V@3e3nso4bKK=Od;!habQ!uhCH
z%Y_eTBFO!JmM~T`?78e{q~ws-`|jvsZv>d!07}3Z#v8vyJ3oG>*}(;H;cHmmBoD;f
zMZZ}zrun9_e~a`zO{Z10Snfx{op?;77Th-!jM9q7Y|1G+%?k8={jzLXHr;hOO?v*%
zgS5q0^fiBdi(H>HHZ7aI%u#Zz{w9g@;-ZMMpz^~o)E@8k$R{Vo{%6&`%+GgEsAvRd
z(!blJ1jP4DlTB-3!eHQx>Z8wEHU=GeKnQ{_VBI=qPuAEY>Q+5869Zk{|6+uPZwtSR
z(PxaGS)S_>w?EwagKe*^!$q>+Xk3cb?S3s81uQdKf3u<=uVI%FC0+vQ<Q*HYR}WQ*
z@@g}!+|<A}79XMmLGlO-7C3$2S1_I1j46Ybz0&zAa-aUq<3!Ui$mdh{0v1X1h4<3k
zODfhGZQoG%%eiO0SH!2u{_h!F5FWWuDfT<p9mY@~e1$)xeT_XgQMtXG7*NmqHhfA|
zc>PKGiIN5SQe*ymHGsl_@KA^nmZ=Vto9TfKCGe=Os-2JpSVZe98gu>ct6(cWbx&yI
zF+4A1U*8gj!~PRKzq(f$cHg^Z^+W=a7EI-Yy~8hKUkU_2iBy`G9Igtg=}{(u$iyeS
zkl(nVn>=rVA2H+9V`A+-bdSNrc3XiHP0#4Z$4B217TrN;_a9*l!*iy8na&_QbmEf|
z+IzBOp-t9jc3|S!mxBIkpm;D>AI2IGwURj6Dd)a%%z~5wX#T$pVr1Jm*1i4x!NKpt
zw3dr1Yv!6_l<ih^+XJc|d?mRwJYM)i#&y#fonPhCtIYL(LluZ%J2Xg}oZj9Q{*(_E
z&&G2V7U~i9Id@Rn7c|%_w<Yike9!p)`|a<42jjb1wBRQFk7dE6VV3uay>jHgXZjwP
z#-AH>$W|B2Q~U}0b4Me;`mXP)v-2AKhM+>ve>%}hD1YCZU4hQvYqZF_!AE5^uho-&
z%eHUNAA|?U#Mez3iZ`3u>fa|g+__QKcjt6<OqHL~?YW#}sL3#FWfNB#1HMTo9#)ce
z$>iz0h)p!rq13szL36vms9A(Q*5l`JSPNTWSyt?>{Pt)a_C>aqbN&9!{A6(sS@1=A
zWb-xY;aG9YAK?w6e-3XTWlXYsc)m<%Yh>?^n{LG_-x?9!))+nS=YFowl20Sy`?X4a
zk}5a&CIj*=oOVCMb_V-FwtU#Px835#-!`?ob}mm@pc%x?V!9}$$n+ko)1a)n7nE0z
zt7~-2G&PAoXxT?x6vB9j;g?=<rgu9(eXRGL*{BsEr?{fQ$;of_;v%u~)0KbDSw>`|
zjyk7}df745EL~pDmsv)WS5LFzPbIq*0;(ZpC$DFDOC}_w`o&5(%bS`NJ#D7#wOF?1
z5fR;c>@`0NYgbtX#jgC|cq<zbT?019B<?uyh^3T&%-l+CdGA))j7u4NY3Rj`=3Az|
zUwBJ4Vuu|7!IlEt2tYYSYjq3^tHNSXrv{rzA`3arUB7q?Vt8aDJRGZpE5=?7wCusH
z(%I`CZL}x-TW)4#Y+;5D;+n_SWpV3IS4@iKncQ?`{<~f?RxuSK5Mk+Z!hpG>IdNkq
z?A~EBM(3+z^x_pWjqla5YWHf#3L;YoRkAmKxbI|_`s+SA9C!t`$Rh4?FLkv;xYTlM
z$oz|?!K?9xZkpe3$H!Le)<w}I;KJUS&d9stmA<hY&{DsWkP0DI9F1!R@hlO{Dxg^o
z^qZtg#={=XOp;QsJ^uV;FKAMZ=)!Qi8g9Cw9{8k};qMC%(!-ZyBMYjdwQ0+J*RFs0
z{X8U8Ic+-;0DEUewxCYayQ(hfS-R;w>9}QA==;7!KX79aIV!ZK=yvtAJ>z6rgK1;`
zgRnQpo8#DBo_SgrZjKLQ(Av^8R(Vsj%LLiQK09@~dnkTm;rRWp2yeCrgLgZ^iI@J9
z`7qHIn(EgV$MTPIY{&{-UXON7->oMW<okPYkLru*$U_cOI7_AKn2}su<O`PSK@pL_
z4E6oRd?A_cKQrCq@hJw1MQ$3HCR#KMrpQTyDu2@%rF=8}vDg~J=r<7JquG@8_u=!A
zy55HS$&G#4AIiOkTb=&(2G;vPAudb1e_fqv&sbWm3j7fOsB*k`OMB2k+X8vrx^Cu5
z1C7ObiA2r~b3R_PnhP>{g$nuJEB3WQn21QR_dDHaeYUj5Er;#}E<5yJzx9-GY%kn*
zdBKM8u59qZ6ZijRdUGH<((&8XOf^5`1{OND$Cq4vKiL&PbT$ePy+>L)q{ltqx94ju
zab*ap-x2WKHGckC&)+ngxh|kW_Tf(y*Khrh@G<1aH`iRy;E*|y?KX*I-@mO_1tRv;
zhJJoM0)Cx=HbgDOSuEBDTXBF_FLd>~@AXdGQ;l=UlKPN=-ThbQdOM;$E_EA9^l#R+
zIP_FFY@RT%a`>J*jlKPuJgdR(D@%hSA_btUYOU#u<Ij(-d%kE@AN(YD0AE*L&{F>G
zFX8{QY}LdF>>q|CRP3}tj%`za`Fw2<|9-1|){p3kAla3l7gnU_lVOf`;7g1=+|i)J
zU2=1>@90XawVLas_5^a&vc=ea(+Vg(&Gc4`Jf8V}UhWif`vWdqC8_J(W?)AR4d)j0
z`f2C)L7t$Uf&s7i+B58flC@_b0mt##o&89I<o+{|_NkSOldc!vU!iUM)sBzA`jpo6
z-Cgr(9iJ6zUbZx;-Z3Ix;e`i;NybmNDwpkSBKx?M-Zmeo9h)NRZvHJ`8l5Qmr-z?G
zKDkj<aX_@hzASH;9v?^R`<x`@f5g2^ExIY{9XyY_+#04-Aec+Fm(Om7nI3qUHOt)}
zx({8g=PqWD@4tl?64!kld9Y&h<@D{jFE8(%ZSG(@Y?GP=o8}UC0ZTV~T%Optc5--J
zV1Cz*;rr>9DC$|Ld<R;0d50MWVTiX|rpUed_>N_Buj(fV{n(^%dVKFvr+whZkvbnm
z@0>H5ELmC|CU*I#snE3ob@|%$%5=|2VLT_;KDYSEHt(}P57GCWBBZ&q#}C7}A`36M
zE#l|A5BEF0U;0%Au0J}&-DS`t{ybi|6TSZOwhF`F#E$y#W1!{qg8>?q3j#k~oj#lx
zi^x=w@}KPjl=r*|yIz;fuPQ&Rx>vu_A+Pr)1OzTRwOMR6iN9Mf{X)3_j!yym<`H*!
z|7qv`;rZ;T0++A5x4%AYz#mCK8$P6M=f&DBgSO4nd!;U|85J_kM$NFB{p6i|LCc1m
zgJ9_D?)3=k$)7c=X`3wZmbpL5|Ls0r@e|lRBm8KxHtp1fK*;BZh5En!A*B5>Oz4nN
zTXTErpO?TMAu!A)3Q|>aL#QlYXcTnHiDH7e;%!W)Bx7xsh;WO=;NlRPbeTWaxvH;q
zHyASdqwIxjk3s?_7QYM^9vq8YYn8NHkP)2`jv<0w!oh|AaZ_!nnR@1Vkd@3Y$-I-Z
zhxG^d`Y5!btE<j}Q<}4tiT?YQb}VV~lV3MyMVoJp9%&Su2O3X&V`tkr9~`BhJ)eRM
zzVQ$lem4*dmh5>dId!6Am9JCtJ79sPi<UR113LO19<&U?$&H_%JJT={{^n>o%CdE8
zH&lggnB&*$sF#S)-NEX0w9A7mWpGG*;`fwy>+Evt!<&CatRz$gt!{hvzRen0irfRO
zNs+bV+73JL-#a`P{*G;cQ6WFp3cUXA^?$M49Kzjmu3mZkX9lfQp1O1`RGJi=X!LKA
z{K)>8J0hR^je;8<#^<>HE^S*Gzqoz#cm^z6hguPWjD>&_we?HShLdCN?H!l)>O=O1
zu;v~Ni{`0@+N#l~otcwM6KfM!hTfigZw0m|AnrL2rqySA%~S=PZa}kbGv2I@M-~Nq
zt^U2l+|oJ=Rbl^eC*r=0xZdy6Nd{M(X8w4E-Ey8Cp;@pgkv+L~ylh5Qp8w!>Up-_@
zTmfuQ5c%xo{Jlb7QoCD23MZb&@<{Z1eZdyu>b4slF>q+%)cQyi+PC6nUUhfPE;*@r
z4|lMBI28sDpx)AU4n0ur?1(tjytk`)UHf`t`fA|HZxcjdhm$?nvJmo_&!1<%rXT{F
z3HYxM>h?WOGX<*NkF*(IZ`~(eXg(EXx91<bt3G||<=?jY5^3GqQp6Pj5wKfld(i<}
zf%nY>{A@eq4{Aj0)^0Q}U6nqWRsx$vh#yDwYbytvyiWtv5<~6EK745vwF@68xSCg;
zo`DNI?xjyzEy&CY_EGzA7!K(_=4d?rigOEH%e(7t-mXMle`kN8Dq`vRpQ)?Ujj_ey
z&qYpBK`gG^|NfLu(&-k0JqU~6OS;=}$lkF!^XTp=bZO!{@7U?Ey4UG2n|uVJ#nvGx
zqWjli*Pl=B$=47;Zx}Dn+%j3IAcmv1>Y=x<Ep&wGmJLSkPpY|AFyg{54k^RcLn2zV
zPC=-yRwmHb0rpTQ1)1eKJ)QmMQE1?P3QEJ^52OiTEdKWi0M}3d{Z~Ws>Hn+qEtnd7
zkz6cGF6F1kzw1qNevxd6&E`l36^)kz)L(fNIf=-N<T04jF5v@($}5~KfU((1E+JVZ
z3M<0Z$qtsD%=l)5L}BE|m>zTFh?e@^NhN{Xy&Yl3TVXCX8caY~YH20IyfMgwOk-@u
zU11S@WH*_jmC7q6gCgT=Fy-q4?u2B6Xno{-=RC9+Wnl((BPAnmNZ{6T$J}m^2*%j>
zY>}1Oie=4~()I{Yr~Ud-cS3fuesM8MJMKhjfXb`(tMYhS9_A2FZd8^Rf%%OnXdwrr
zD=P^pg;*rYJX?|XjX{E=C^&B#!8b@Yk;PzwMX_>3R*R!tsMFEB6U=in_!N$B*fcnZ
zggNGeeJ8CXC&%HNs6N9WIeG{$;`EUV(%{!ESbwleWEop2Hq%eskN}JE$38XtRV<77
z8smrx8cp7!!iBl?FjmF+lIF-BDnS?dQyl7uve+9zlH9lOwb+j^xVRC<s$y#sbGyyM
zkdPMKg&Yv^lu_iBq9$Np3oGFprjwP`U~sW(aCd@0YAN<rxD=Jw-rob}GaGh06)pxY
zK&eBqtbV~B2@TE&DyVreLha!+ILG;;TYLoW;E%`;;L!e6_!xqNzdqe9w{(=XX!C&i
zSzz|=lX=ArZXjj*5paAh;|OxTI&MT5`57_K2J_QN65*;k!gf1wag^V}HyZ`FVf!@P
z!>~`y3HVx$l1gRd615D8(ucVd*z`+6F*YU1;G+oG%1@9sV8|5e8qkEX-rB0rLM|AW
z2_w6+xE#YS<7+Ap95}U*BwKKDTF*6+a_;xtwUFH-UV8r6*Al_*gtSnLVDNom<N(K$
z(Iw2kY0(O{FH;Gm+igzt!31%4DoDFul;3;=XaGloqijGAd&S%+6;Asx4IC$WnGmm^
zhHttrUg?h=0+YmNTQnSCF0<59EPe%KpEzo9D9FLpTIWmZu}QzLgB0u^LKxT}QG$9W
zB_HmPtcJgcNRxTPkl}paK(<T8*IvKU+J;Sd!4J1|l=GO^$2V;x!eNfjnZOpW(I{b`
z6m)@!OHu(Mo&r>SZShvuFA~OT$~&ZZ72go*-W^PcH#-(c1zAC*k{{-qxp!)SZwMFR
zTBh<Uu13|F_7ZLteF+BP;hO#YCd9VzIB>#rg5)d3C&;ggf_wxHzTlQ(l!j_271^^#
zU@$8&P(#jU3mPe5KbE+6fz%%3Bfv`Pk+RF0;xLCQK9J_F7hu7Jq|s?`V^zy!8V?5(
zU|GMw5ED(r)@T66Dp=$5F+0BD2qj7OC-bsusa6?R64=<oJibo)V_!ZrY-hk&jk^Cn
z?@o9g99W927oZV``R#Zi^uf?kkf4J_yo6G0r>UJMO5718XmoLY9_D8n&Ypm+F8MG)
zz&B$(J^!&~2Fy=GT*n8FC=$>H7slbYA%X2m5$qn!4CI!L0XWPb<N!Hgf42WknO<<*
z@E@}>666g^9c9gv4e-qZ8U`e*lK2mE2gS1d2zW^wwra_22?_Ft-LLXKTp0GThJ^Z;
z9ek}Gg?a%wHtpn4w@k7LER86~H&}Q<C6KzvrKC=(I#{E;w;(_D1UdFA{l!CGcY>J(
z)?wrO5jGLp&Tolt^2h2dqmWC(Nh~qg&qn8Uk)JQAwR2P9%Auyqc`$E+v05@8LE(>|
z-asftmV-K-?@r)ODk>?KyZPj>tuCyRa8t6UrNqDz`^qW48-<+zvaMk-tOicz7tCqI
z&8dtGmxk4AA;)F%Jso^_Ma;AO@y%8A30Qo)G|b8Dd%4ZU|FJoP;151?a6z**DJZi9
zLVP#L2LIFmV-t$`bOYvRmL0$H5aycFUqZ5WA$!||VV{?M`(Bm1M=-x6>?HOcUpM(J
z;LCw3xZOPTC@4Wl#TPdM3i(qYNs9w^AA<{^H)~}e*~Ghi5l>=HOS8t$nZY0YJ@UJO
zvlQ&)gq-2oKZAzi&JVJJdI1{WI)*~H5jk*9gA%+vH*xf6{vAg*NsMhz*$|N#xVT5-
z81a&pQy3VETA(A@-Mp#%)1GFQE8D1Z*7qgA&Gkstoeck>mc6+Llw|8k8sca$0(!GB
zj9qcmcn*<{mWVwi#d@{@R?rgjd>&Xt@#W`4MnEUwItSP)0s=WwB%Q({-pd7#0w|!L
zMwEsUmI*1O&!n88DVF~c-eck1JSnsB4YI+iNa}k0qKQ5RS@-NII~l%y<;s$HY_KEe
zLzU84U%EL(#*2^zIwK?W8c(tOG=PBEdOO&|eCh1n9h^U$L$GTr3h(a?sN3Rz(il#&
zM}n{jyuZ7%qpWHgVK@wnKL9yd96KPw1_!+y2J1W)59_h`nidAVWrBigNrM3LgEF~$
z5JbXe7`eZJuQlRFP-N9Vrg6di%*Fo$YrLB)1pm8x83iY)C0)qH8^UoMS-MDBGoPZ8
zF__Qtx&gS6$o;>u7TYAN!oB9i>oBMD1+v{BYu$~xwp<4uz&)eX!ev4-8{d)*_6^m-
zTps4sD!gSH=JA*!7bHnyw1{CCKB4k*X#8M=iXyn7HGENzHy0lj`2wt*vywi&RCqU$
z1$Tjn2b$!^3L!*BP9Mg?mk1<k0dR(v3K>hu7}GIjQc`$c{2Z8~pt{Tzggea>xJ@zw
zHw4P@jpvvp(QXKNxra1%J(xR=9dQP6^0C7Y@o$YZewzMgP_jp$ePa^$h3${$&-MQ(
zC^4vQG*25Cm7F85mtI#wOMgz|C+1F|qWKQrW>|}}e=eE#hP-nQO<(V&C48OHB_!&u
z0-ZDQ0*&*=+1AXlS%El6ij+XqGQK0C%+$Yh(nwAvs2~ewzrvi^>w6YE^l8{Vsp14V
zpMzkf9(9Fb<Fw-Ee=S!M<m-7%B-@cF1Z;Hg+a5viT@f`f4gtHDABR#|iMWn$3YX5o
zf=gpI9p9j`N66`U^CFeZTTd>YMuN-3B)F_mmm^K(b>BDJ0uiRU46@@eR`c`V>huco
z7E@$p+4~nS#FMO#{X_lg5j9N&xnG0DpPx|S=PtNy;hQOs@c-_<?!v)<3*aDv=Qd^^
zDDpN@&fchh)UNOv=Hz07rioEu?+#wLJFu7)vO#m7=GjA#AwQdEgO@mXl=r=@wT`6n
zr1bxWIUVf~S%?>j{5*%+H6;rHC6P9CXnSMegKSz_l%^Sc3h0GM+bgp1DW<D!+AB!W
zjLIuCz6ORNh1>w~y`98^sHMvAGzP27W#XJhx^~GLme?(#BaN?z0_`$QR17JdsJi48
z`zRk`exs-Q=W`(7`AkWe_TsipW}G_4?xBBN@aah1u_>$1CF#B5M(bZ|Jc&;fpfvsK
z2NsFmF_3SBI`NYjaW*5%?*Zp<?s}}9QjQ@4UC=@)oK$;3Qjh)S+FEH@?tAS_HRRzr
zF7=3l`qN{-5i@M&B=nv+y8Kh*o<DZx%2hW@G8{QvicK%kRfG#T7wx9Y!y+~y-xcVI
zifm|(;9Ctf;U58c308>K9>-LM{W1a7w;F8_R55TL`(b!*2?yTu1_6B{TKI;3swnvp
z`{T>_xBeV=Il7B0KEu3^V?HMNeW|L)X4y3$+eBc#un3t{ID^h!SV))je`7EQ|M|jI
zLbgA)TWY0(s%gdxH=y2C!hp=cEci>O1P<0b>m!h-LCLg7AGF&U+3&S$<D1s?iYr}(
zn+Sxc`4T?DjXV*<d@?VSk~?2Glp?$4!iv25{v*Z)n{8&0XGq|8Gy95CuW8x@&ylx7
z$-mJ{_=cqTY~(0*31H&nyhd3!c!L7WY9N1uIUMC<4M&jUif_-hZ#rLc7<tyJ{Tb$p
zp?{V%5n{w@6w)UG^FF7s^hg)Y!$}as&6H`sUwAXt^iq8*V%qYY_RCi`*uN=eR#|aJ
zk8hrRI)*caDzHXdP<1LLDu9+zX#F1=`(eQf$G0le4EKoqfCgmP0exBGjEXUKBSqk9
z`Xr7o?U{!(lir%&D;ZJ}l{eVo$~w6N&b{_9^(CWAAifofcI4yF3HWgp7~gF7U_%`H
zV<}S1h1tbpJt;2N&q*oGs|dVHyTv9~@H<}6;Ttp0hC`TpY3U!SFzn<t8eAm8<8T$P
zlu0UcaaFxJ%oSxEOR_yMKFSzY^(EOPfa-%d^cO6AgXWo2nyEX8D=N;>W=Qkao*x2n
z%y?vZ-0FmsUGb|7e6mQgS^C0Q;iCwLIVIz>l|B6gkli~A?n%m;*Ns1de+<<yc2`Hh
z{G_&fw%b?{CeGL%Rf7>#D)lx+R*$8a&YfiClRBve17$Pm#po=UU$9e&4jIl7wUSg!
z`KJ}I2(IX%oF*-ivMd!_cQDB?-}o;L7ml#eTh~i2sZmf7&Jy3gvAGlSRUWlzDq#m?
zxJi2_4%5hwgP5o@UZbdFm}g}93V|aBg&eP(uUza=EgGHk;nntZa3v>78n_cQZm}dS
z>cl-QQ2><+38-3P)|3~}K)Rj!MhdXbq!j|u9;V;P+p0i#?b$dbNp><hkz*aDmDhU$
z@ePOnahIJdm=-&i+krIVud5^3kOmb;CLG$63%`+W7gpy-jAS&b`gLP$hv{Z5SyOQS
zG&D_y?(T-n4NEu?pgRuu1&QX_xjO{`=+WwI!1!}R2fX>yy@1b<Z%_p`w0|ld_>!Jb
z__#L_767;c(YQ6vj^!9TR+>sx6|&6@@+=&e#|JDkc+4u$RES>6W8#36B`^a#f87>p
zSaH=53tu@h@BkR42jFpq>2yFft9=IRyiF+ocq_&(Ppq^CO5~H2^zAcJ)0g$ka0MEG
z8|<G4cWZQ5vvnafP(2_J+Qv^fJeyYU@MxY*Xor&lO=CJ*Bn45$TyUF{Z@i-Njqnp!
z;QZjnU6U(bzQpV8(-0NtFmn?hE6u`aUhU%}>@Xc#Q37x_pNZRiN{r01p|NMci2(zb
z07;tm2g_1S?3;iyu<_njEQM%(ZO)MAjfO?a)4@uDqdk30AxiKd_|KU0=o#{K4X~tP
zP8Z_Th;RP{89#UOVr2MYgOx|*Nz2z?7WLTlGIJwcSo%pLa*q6xRmbGl5$2bh85thT
zst0^xtml~CT^MDRQ_nh_Q8x*HR7k%-6a;cFv*6o{M!mX=7Z@4wb@RO&?j1*oFh9h$
z0O3h|J@)ypjo{4in0iZ!BZ?0d*B!>A2Zy<M`)nbHZLq2JHbQIzO$2TiAAiqaLW-Is
z139`F#S}+2%@iz_6<$fy4lv7r`O<5c8T?P`U=>`E7pZrYxQVa(RYxvU$5>wwbc2i3
z(PHj_O6Lt8o+tR`)2OE&@1f@N*~m|;(eEGE)JcF56r(-F8*KQdZVJ?pS(2Oqb5yc?
z)Jn1nYf5$47Do1cFJ59FC5l)i;cG_*T0|6AC`GshY^;$)7*}D*5ti@)Cxa%kM$=7?
zCG7{r0bX%{yDsD=zRj|{6q`tQ;LK*xaN9J-bqcI`msu(%veofw^d)O&PU30PGQnB&
zO;@C4*_PUW7b1Ly??14_j_~QpyF3EeaY503@Ds|Vk)I{5x&kDK4<oQkt#Bv&gy=db
zDE&?CZt!LzqK;9<tP)|WGRPZT3XpmB<JSO_9v~8B%BBT`Ju|yB6rLtYvaMkyA^=Z;
z1o|^(ihR%FK9LTKuL1Tn-VDT8u$1^Yw{&AgBwZg+nF-wF)0?HaaPPVDP2UbfTI)YB
zmxLi$L?*o`8_^LG$}9%at<|YA*Wckod>s=N1@02<JDxaH-M+fiZb)x0N`n)V&A>@X
z%txDId8D`j-xRJeT?lgm+9UV62rPu&UP@wAkEUH>3|K$grc`~|uf3FJ&>W$yfhBRL
zA8VUjPR?eOdU*Rba=}Gj+&lI&%y}QG;0QlG@`pt;e>}B@`5kRNW<p156qOapelJGN
zgc50nr4*Q>QY7C<2H}{mBpFM!F|=V1s;i4Nq<fN|48eT#vL9|BqP0e~bN#Vhw6{#O
z&3Z`IPWA|d0lxNcr9B5_6}0ETxR4JDckoTCPIJPcZ5P8qlZ~ya{tJsK&?NKf1|lC?
zEc+tvi#c*}&4sQ@#+)K+dSGzA?ceRmCb-&G{q1{$mURoVyE|(_LN5S?>_0;B?{C>|
zxf7zyddPEa*f`IKQA*{<HtgrxS^XIIFE24xB9x*nC*f3HjzNS_83t6xh}i-!yo$k3
z|Nj4|)7mWwJTTw$eUGz#J@&_@urI%Fw2gjAC51j5A@laIgxpztsDB2N;gSr(h!ewu
z6<F$k%vc;9qqyyIX;@At5Us#1L8AgGOoaJ^B~NRipe4yFF1xZ&A@=A5*+;Kp63m<X
zyiVztiO)!3wO#MWmzcZuYGP-ZGoI?4%mFwBnreD}*AzD(7~)N5m7Yu2^(Ro@?t9ob
z!Z5wBd77lN7{iUT%+Hx(*?xU)aJ&-B<r};m^mUjs&6JTj499_#S3_5e%~b{}^xLz4
z`H_TY1uFT&YWI7;;yBZ-hbZ!%7Sl|+fFn*pAmO&kCf%GLg&_aZHLd<kE9OpNHXWLW
zXP6$~KnHvchO>%NE@dhxF$0c#^yuQdLpn_sw?r?`k9$hs?4J<;ZQzrrGMlCtF1SX`
z0N-ZC9OPeCv(oi_G{B0EC`M%e_?$(Go@n{%Op<$>mbp8tn)*31EU50qD>_E$x>H@M
zq5k)Xx5)kxQ=(#P1?t>Uei`PDc`ClyAI%HO=4?=dwOzG(2A4CRVhbav@GYg+dL^xf
zbVlcRa|gHvbEz=6N_A6H7CKy69Al#i)BJVJR{(R#j-F<>U*6@wH#Jl(2k`ZR$5rDQ
z^5bnKY^RvND-WFoKg{i^jr8LN+B}$FM9Am?Y9-zV+nYBV_#~CL!hxKClvNuS>YkQ7
zX8fm4u?wya7l=&9V{S({_p4>n)${My@?OlkMh}DAV557LRFAsH4SvHsxdvmVB&3fF
zFjn5n@3=VT>#@;bp}nW_gu+Y$6N%4FEs<w#RT5*Pf_f~~){d3y!Pr<&`dcSlfF}9|
zFo0%()V>Wn%ZtguZ@Ve7nG=a0x?cw8B~vJJfm<4nuro<pen?c|=Vte=&1u${!mb*Q
zOMh?yIBC{F2CDFeLre@KnfG7rpt%CR_S%&G$I5Cx^N-s2R^KaEn9!5@X~6dLmK+48
zLOr=inqljK1afay0&ujxeE*GKALP5k>jF2PP@s#y_lI~SSe1blFor&Sc8Nr?^>?Y=
zMMDns&V0LES`@l?i41%=C(rup%F~-1_;!cfOn#!@u|4|%%hc<b3s#OcPEQZVQV7Q_
zS90h`w)x8|IW3sUEr7^++GxF64Z*YHz+E;g$SVD1b1<fU=q4ZE<qi`EG8}p(7IM?%
zIxCxw=p|+o<_p87&>95J-Btq7hFq~>04xE=9-p}Yru+Zt{e4pTlfHyE31kReLqj>*
znxSV&L0|KeUk5ADi?Tku3W;A(KtTSwX%zA>BYdC!1ah;UlsOkZP+vSi?wG%-8GPDH
zNJ~Vbu;*hO<tK3$C44y<_57qZTKyho&jCDf&cJWFwTRX>?{5Uz+WE?lrnUqP?1$zT
zMXM|&`5LG!id-y$@&4p;623XXOe=ai&rL=%?K-}>tFlFC*qY2squBH1O)EwX^*R$Y
zHIf~=D<x8SL*e|G96o}|m5tB<u!ie}446xINgH%RyJndn__X4bN)D`;Fa9SHatN;Z
z_zR7~gt^JQh>cUWgQmN*?wm;3{1*z9`7VepkgLcuU;IELS<v%qbk)fD6e*;VcN0NS
zv2(+Rtl8vW4Kh}M!<Ow~@`d;g!p}{LtXWd|1Ah^(jb(zm$n^w{V3k`ri4=;gCx`&*
z9=K$&On9(<EyIMq@)BtNu^aB$CAbYw9f5j7zY2S=iAQj9Fa{B0y8xkRLzq|q=72eW
zEPf=FR~l4UpPHxg;+Ln~r^?va1e3g8Iuy%6)sLwexnh9281K#7-&TillcKJArV6$B
z$fF^M`m;+aJm!5Zb2$D5qZEd9SO_jqm#BXAbois|Ye0#3ro6t8Ed<QhbSjqT$B^jd
zBM&bgTG3a&nuSj=6-u5X*`^f;M1U4q!!9J5Zp#`9RJ*>jh)lw_m0tMkWt%)tkp&Oj
zX3%bUSV-sGS=vQFtl!MrL$s+tIYGT2AX~5d=DXqF>LXBHi=QG!?L<j7F0dn7i*3bC
z7FTzIU31=qwknMTLeCN9^({;=Pnc5mi3;bx>&z#k(G{*%jFO`YNUEDo2!kbuH?eo#
z6u`B0ie)b%O8$!(rhdlez+CMHGv{rYL7kw=c*|u){Wa-D?hzSIOFX?;uPX3Q|K}83
z%|Czb$PQshF!*uabi2vYZVq%u95z39L2rK%S^+OYHEy^*0#pLNs%14%VOo6KAfjn*
zo<VnZLW=+rIiEBfki#`latw3Z<HJ_idbg;9=Gjr#V6g}@@d;$VKb?is-d>mr`ssyq
zf9ywo{H96=gB5F4D;383gY`SwmtCDH+K2i;4f)Yi+J9hHt7J*2iO>af0<kACa`8<<
zZP(V&XL$MnQc;o@rG`D)0CP933eb|BPDHaX#Qj%{n($DADlRAt2s5~_va(847JFQ=
zKl@e|`-4RpqAc=fk4Ax^&=Ru2PAuf6!Jq#tko!(^=K^xy^ij<<F+iM^^~&W^+JS`2
zC2WCT?P+oBeLx#6T?#QM#gy;*r}e+w_p!6FRiaFwQGzHLc$wR-^ZwUini^IzPM988
zqlLU~@}w~mdVqg_l~D4d50HnD8JW4$qR@ykem?gH60}0v4Jq`ZOlUN;kc%E5F-S>N
zzHW@{k^M#(g!+C@$aM_KUxt`M&+xG_lP>Vlb(V3dLwqXL^CqT&HVB^H9il@21Tyj@
zhMdPjln%VbxrDI;=sVjuyeolkmu213pujL|zc+N4*!5qgn@`X4wI^qNgpmi_2}qQ#
z66h>2!dS;zD`Z+<j(L!-g&yXkFWi!3z}Vuw4jKywC3+vbLdcl<XAw6Mu+Rf7O$(#6
zt=&z`-9mLK*5@qf<Mjw=J*!x0+2YCmQu{FUj6EGrAYJ}F{(amLd;iyu<Og%1GN1=Q
z$XR*M5A!FSe;V1@Um^hKGQp2A<C}zh$S`(<$%-0s$SpK%$#k&1Fm{h{K0-R1rMn0%
zg0WudXUBhKFQJb1_2X+#wc=L-6(+RzotFt3KIJ-tN?|7bHkQuV$^#eo{2>!DGq{#b
z`G9Ll?)`t_7EJIrRmqIpzoiJ;6$-EhOze+qU*c=FMi&uK>JsSviv7Z@_IQlT7CHWI
zbg%_1Ftxdfu|9UwA=+K&{`vi$7ILwS?`U+&rqc(0@vLzLb=uXY9Ao{X$}`wLmZ5<j
z@=ak^4N1vW)8?9u{Meaiy@jo5Viqx$Ku#ljT$I>vW=$?%JTC(C86EhMl)>j+q3n94
zVz^)nON9W;Hz5(U-q0&&HZmG%0a+=|4zdPd*1P)@|NawWEDnKF{ioD*qwmu(qq|aW
zn-wHKd<8s)0_<!wd7|fKFQ*>Af;bXIaH@v&jsc(W?X!xY<*SAsXR4G#RFViY*Zy-)
z_D7{I4Ne`R;9$?zYsG-+BCt-<lnN>A4s=Q~-5a7$!;Sh9eiW&`UtG1ahoTue3#4kZ
zf-lCEvOb^zRfk^V>ueJA^hcz(Z>{`RztJ%KqU=G3Sry!zclh^zBz|5Ou;O7|tM~e^
zhTzUlG=|`qx{V~Bn?CMmh4kDmmT!bq(h-^Vm_UWp_13rQpQ7bq{e$5n5E`@`fPy?_
zii#;MtU>i`FD;-~Kb%#HNxOWwo|TS%Ex`>bWKSJ7W|b;EdlaKg@x#~^LWZF=42FR9
zle}|~6c&2l%(M5{TU>C&cpP)%&vQgM!IXYCMDSlzdi=aMw{*|5R7)VjLQzW948GiJ
z&)&@fxC1`8B3AmN*r&aax7Oba0`Fa6h2ZF`02@d-+R<D<SC;i};=?J>#t?zS0=kMc
zI0kzS$*5k!mM8~W7u0=3`2hqyU<2jmP0cBj;!Bv3J1vB6(4oZ)83AG7J73K(7wa#*
zwY9z(d=tRX_PH1c6_Aoa?%=d$*$nL^=L*%&bK)`OoypHXCWrepe;tNykoRP8409!)
zCXj0@)cAGK9|>+qi#YG8;pE-Dqlm;@dZymfmrVFpq7Z<CG|_$ddl2lwvR$#erapHI
z29B%PX!26XkF~bHIA`cv_Xm8v{GQ-}U?86e!Fe*_<%oT%J!kv`VIfa&rt~agYl+Q2
zf+CRLAeHP-sthN&+F}9Jc}gyW^Gu(q&Q$!1B~F}9ilKpFeL3=2Iz$Ru`{~g$8gEXv
zE1BVAV$W3-l$^2s;{exldQjY`J@|Vo7%0tD$}|fGHNH20s^_*o;!B!N^b36{D87dq
zKejay#{M>bO!%e}?W4#fP6?Wp<>(tR7#kWku1w1}yw1S{+57A&TA95y#@Hm^`8tl0
z=6KWLWkNKEBzCHHNatR$UK_SMwt@S=&FyiLJ0Y%P*z52^c&L!=G_pSkQmTHUZJLWr
zggNXEgqg*6#w*<={m;pJM(~etUFE68`JXD8VG;P|C)0^BUxY@I0`YZ)qkEWgK7VW-
zwoT-sfjr9v(Cf-LNA)4|w!Uq$QOkNv=^nVt>x_Mw9g(D7Wvb^CP5N^F)i(lTr)A$!
zUql~EG^mm_s>Lx3ulZ8E5%}8VOSArWn|!tcK*#OtjgB+A$$s|QA8J0dl5B2<`CnE!
zzRYue2lROqkSvlnuEwWI^whE7-vbcQhdQj6{+rko%C>`^Y|YZ*LE}vJ#2hY$c8|eO
z&!H?m*UXT{V-a%)kT{kGLhn45Jg&J}t1Z&?rx2{{rVUu8gO*^0G{_SUIi?76bLqF$
zx6Q~uNH(GRsl1m!hc-88Z#VxZR_Om<cXJ{rWrLntPzG7hU%}Y_#Mo(bp^4o3(yHIR
zI61lW%xyo($*w9-D%?eL%PK;zgsW$gtO%QPh5RW`^?Qv(oL-}&kI~AL98InDx9`d;
zVP_5LW_jaUbQSL0#s%8SzMEQgg844v<Rl;|oV?norLQ<r;RRzk=q|pa=wgKPou7XL
zOnId2J<WQKkPQ!lGYQe!JsSruNhNdCRd)iz>GxQYT~SG_#o1|p?Bj5)?g_Bc<H6ZG
z80!dz0L0heZH(D7svOKu&QE@~hke6MgWW7IA2}bisr;bx;MRi)7;hI<K)#og^MzdQ
zH-fk|E|S+q;dD}Exj7ZC)<YKZq0BY+Sj-oroany9n@!072Lr&{flKhW+HK@=e%wbw
zh3PwSjMW<QsY{OjoxI}TFo&_)Ey4MBA73#4hWTWm#q?M2az=pR8w1KW{FLqp*Ui>h
zf$o(*A*r3v<ubqAPl0flSB=kGmsg7fIWIj!82n;2wC#Gd)G{GzZWOZog1rc|QTv#*
zqs5KApMoBj8m;ICwIKGQ)>D|DYODJ@miUj%xC(q-LBS`gfXb#=#;&KbHXRGTLk+lw
ztG!GZ7oryxm7-PUm%d_Cny70UF~2<q$Pi<I&Nhb9tMM>TQ})ymJ^^SAR|@g^r(6$1
zdGY(t)!rUOl|`kUS~C)0rOL+!B%3m=Wi7!-nCr7=&o>*GuF%-XASXC`jZB6x+-Z5a
z;KMUtM@!j0UOpqx6HDC|<q0}V384WPh?>Gs6~g=fJS6T%HKPzf*R5Lv)$j1F9yd}<
z2Y+>A`ixnnrH&;qceko&Md>GjJC#Zog`%0LaDTzxXXN4UY(GhwsWm+g45Yg?y+>=?
zS0r9G+o|B6vs`8E^>dW_bOkZ@DK;w?(-xO^&?q_p@o;=xjDjS&qq9!zY|aRzEiN%;
zBL_l;srU}ida6J}<jROW^$%HrX0QUUG8Gs?RHlON2zQcsn~uWFA4M^PrIHJKz7ODQ
zpU11`pm`YG3rOgtPAXh`%4UKsaxpS%?obfs<fPFjOmQ!{0kOUYvtOJ1o){3TSGqKz
z`W1y-Ty@lBHxtlwMd%5E3J)9N*QS(zpjzI{QZONza!++Q$F<J}JJ8ctk#jOwX&;@)
zOy*@9Rap+YOn2@3=l|Ikxds0~1kQ`h_avvNs3Cj(gHE4j{8`F^^?)vLz6}R6RrAUZ
zB%7lZ0Zsq?hXyVfo7<KqCHzA2-EtwJ$d5~Ur!z{E+BpW^5>(!-?&aCQoF>b1J}R$X
zff;Q<YjX5^q5FgH?C>=YZotytZ8>-!`A~Upw#nw{T__yvca<ELHO79tWAM|}A~cLw
zD-V>--4mbXf4&$~sU`R-59H}zQ+0Y_;;rufQocPTy9@wDjDbkgMjkKROAa8iDu@AA
zjK{s8&(<7CiiM|+=TV=J#Yu|IXkZH=Cqd`9w#@YeGo64CMdwM|?^!WdaW5gWVBAq*
z4mroEth1<XE%=SF-p}_=L~Eh6B4dAS4CGl{iFh?%v4?eSp?u+pz+<K_j@`x@H}Orm
z0*QH>MEVb#=oq3j+gfCoQZ%FIAKA~ahfl9xH(2XFO`)k?NZB5sXYu=bmSCcL^|jb4
zmA8=Lhj7Yo90M7sjP!`UlKZ-89C;OQG<i<|YDHiY<BmRMAu;uJMh8!qz)j-iS|WL`
z$FZ`~+!ra9(_w_vwo)H*>H<zzzyxdXqW}mHf;cUyCP%`&)A?2~z<K=vg}ie4=k&Da
z<G)J2N53NN5lU&=g1Z!HYSPar<!K^O>IeETUR&-2Y;TtwEPR;et<!T(TkS`qPui^h
zuWKf36tz>K`lhQG<=|O7<={g}mncZI0OK)g*E)n6!J6X+j+c19M<7QZs00Xsz#e&N
zO9w(F6xnRWI~K`WNp*Dxs_~3uxVn%@;hc|I|JuWnBo=(rm8I_U2TU#>en?Yfe~;^J
zv>QDBo{Vq2oVDKq^~>e<5>H?Cg838(R>c%xkFZI%doWf@KjS-lvUFu5jxhhEVjjUi
zZqdTETw+!l6UwJAkX<cD{B70-ZLRM=f|s(#0kdh705Y+e%xe{FLn|n>rs?}L9&^W?
zV&L$1*RZ@qEfL@R&Me<%eOJ;fz2EY}Cdo=eMxB}H`{dSWgcE4i+8>_Kuy7p>(6Yc-
z-On!$&~oWHs@9;dSC<XLz7#4i|GfW(a_Ph`HdVT*6H1W{)690e+%2S~d50YVb8-_W
zWT?yd?X9!En#qBA_O0CyZc)wj_hVQl{1s(<N8}f^TX>Y=kLGa&dKLO}ie>x35Tz7F
zsqUc5*BJ>F^v_|9d~5eSaD!0sK=#)$*e|%C&-!!LpN3}@y)~{w|J%T~;Lfl7POC~0
z`1CV5Kb4ohY-&i$9PeT9v7U;rH}s4={)Rc0UOF|x*hCJU#*_U^vDu)}0E9@hNsxy5
zrp5ewgi9NeY)ZvpK|pSyU<v`f^=Kw#SRvaMF|j}4`z9DzD>h~NR3<Nb412`RQ&Q9I
zOPT*$Q`Wb9%h4a(6DXp`;dpj(segkjUIY92V6Q5$E9QgB$E@!^z>u@5tWj-P<vvDF
z{Bisol^4<Uyz<KBYo|(Tf(*VI*pC{MqsKX_8|e9X<D)Tm0xP@_|3;7}yVi$SJpjSe
zRC)Qk*O9&p#`>&ZQ^18}To`)q80M38q2rXF*Q!pc<S^xbv3<OPe|8m&RZ1vJJz$p=
zZ_9-4e^2;7WPN2=l->9BzyO0NF(M!_3=S&NO6P!*ih$B62uMli&_jsGNF!2`(w)*B
z0@6swFobk>GymJ?`d#mr_Zt^*_I>*7v-UcB;bp2}n35i(R@?Cb6AgI+_fNUl=`h{T
z-Bqs`!xXwV1~=6CiQ9GGmi}3$95x;+GJ(%`%D!2;W+Cll>eeHzzM{1i1R#l!nXkaR
zI?@S>*ZT6w4Rp*o!C$oO*L=*n_q?2Y*R26MP=AMj!jtJCta13r=8T@)z%P!tgHhUn
zvi%T0w#J1tuEw*HeXoMkgY*>R992wdZQ`Y>2dl}VJG0r9etQcn?pHwj8?nhS@nM$>
z(zu;pLD|mcJ(wmc&>|rfF*QijxB?_G1Dg9pItMAJMg007-wwFx){v?FN1=)Y2#9J>
zOpW5u0@r_T62N^><4y087nXhVr#zzV$=U?cn~>^}f7^?ebHr+9A>eCEhm_qlB=RU_
zxg{+y*=!reS}!*jIyy%@M{nEaM)dAy3E(QTEErH>f)@t$adSk5V&)HM;gyK7T|z-3
zs!vjwCh?tjpf@k?g6Rm|dPIS|7?RUe5p+PJTY^(?#Nf?lM=gcUTW-OVRlRv!){LE$
zEA2X_DMF;EYYvP9-%-uSK1^9(U437C(=~-RlB5z-DN0{6)P?`F82BRF=<ivI6Jxuc
z5mqL(<(gwzWSs@T4qJO29Ja<xh1EqzjOHEaZa0*USUR~<WU0&QZFZuW-(R#{_vj0Y
zzNXbZJ*7_T(Wf6uMs)0)CAJKk3p%dY4n27R|IbgNW88L%kCPLAKrm4$)$Jws%YJFt
zY4t}F#mGGH4AUlTan6djUe$;4!c0T%S8ZCw4#%;BhIzNnX|Pl|#pjip!QMMLmoq?c
z<-OC>Z~ZeUzS$rzpmk5`2qtpeN6a5j@it95&@z!L$HUBr61(|<sIzy=F7{;d^`uCb
zO%oJq&bjV&dqu(8laY7hpB>5Q3QB_cQkShmq%Pn-1~wW{tDg3jr~m0WRIB?COkw*b
zEEZ)qBA+0%E|LUmoA8o5eSGT<n9wLym&i(TBM78MNYxtg>2`Fbc!b#;X*2)!Pvny{
z-cCto;2DP-i3C(??-PI2;Uz&FsSXwXZ~Yx<OcTZ7+IS5Y!30UJ;WPZ#1Lm2tQxcXZ
z;(o7Ymk&>acQbxc4uO8AJ`Be0Qh&}oA?MBUDFi=Q{1eHefN26Zt2}!;pJ~KCY=5&^
zIsD#dkOD@y{z}3%>kdHfV)PXT4M8H>2#?-N)B2kD|E^A!ZYX;uho-2!MqGMG-;(Bg
z_QeOIP%uYq$kKWHl+<@?<91(YyG7)n{SMSynT2TXakHBMCzX{5frxQVTm;_Z6FzQm
zT^#nS-5^<!0B%YZa9eumz4Q%5L$^3B>Z_T>@1~nqO^(iTdu{}ZH_m>M*z|9(jM0ML
z5mF~+K&Wi9tbL<J)*TYt!mbf#Yalg(lvm_!$L(aZpkDAhHyZA0hudRSPZm$pW1;RK
zB9?pBqz3zp%?cYpx57R*{^gq?_HOdRzT}|%TJK&AHI90oYt9?2=cqTz2%l~g(G<z@
z0SE|M{`j!I(BQ@a6}LjDsZZiGBU6F*{Hry79&3MW8kd>UqxnPTh@8|RBj-2dSN#Bk
zfN?y!(?k3!1wxtSf?G}c2F!%0VIrby^I$J0(UPa@eQ8`Fn^{OscaMVuHWy0ZFtM9)
z-NVM134uJhb8EG-FlBfLHc9b-p$jIM(B&d=yWV}fvVgV*#(RMZ#i@F70Zyfdl40Ql
zM{prH)X+89<=vLhKoXwj5%$>DS<VkWIO>-tHM7{4z?rxMHC&<ygo%;EZaFX@TKAx-
z-dHE+Tn$k}%YTsRUB+#%^%crk(<cX;tN8j?XTE5trSR40$;T#rVWlMI3s^X&VyT?M
zB}>VLG9lBdI~vWQCs(9|3GaMe_xdFqY8Bt9@W99Zp2{VM)bfYmgg`R??>1Ci$C^)8
z0Hl`P7RD=DT8bAhaej%H)$vJ@^0EuIt^!m{s+}1@m52q`tuX|d0^MqFtnO{=ZF7e`
zI{0QqQ`$F<#Bdq^pK`xeP^E)j{OwCeI}`=I7wx*x*14Wu^R&v>Bd#Jy#A0!!#$(m?
zQ@^FtzdP+rIl=np?S-8(_?d`uvj>HZ8^|E(0uICiZP9|o@!5c$Pyb5GcnGHCjMFY8
z{jPTy<JWq)>h!@ZVlhaBM{oOmF9v&!@=>_a4UiLfR^~2E;I=<cFCV8o1tL$zx0Z*W
zOdcp)J_#56HPlhne(;`$<py_V%T3l!KKEWam2Mq9xej&wp;H+25&TR6_9R^j3N;q%
z_)a54e?0SByL7u+ysZ2?0x{Q82TlLYC@j(a0E-RykjdtXsh&Q#Hl80V5BSB^v3}pK
zUj<XPoJS_H&N)AHK{*c)SZ}=YNjtvmw*F!E^ag`3!8f@&z8DyZz)tU>^HEZoF$!SM
ztl*eh7x=wpeScZQPfuO{e#Vqpv=YD8HA}ej2!E@K|1|hh;6-u!=4KP87g%SrxCz*%
z+lRvXElSjy_>4cg@6l4&lpbCn&x1KPrG^*#jrM4t-%pCBbF%m>ER;~N3AkLmDYme+
zz>KzryA~^!oOV@ua)~{xPhYYu$$2dvx=OeKRDUkUMz`-g^ieg)1X~|hIMj5YZ%*n-
zFC6xbhr5HQ{ms3aPKw}TI_0+NT!T{}I)aIO;piKZ#o_IZ0|@AWH^Md@OV+ezMfZvS
z!${~Ex09<^W;7TvACORhmdFYyOM6>Czc<qJ8i`m@%V1}*b%x|YxGRU~bo+<zJv==|
zCiZs=Ar{8&Cvh&@@uLSc;cRZfs{J1hQyRo8jnl6IBsaFVLdI-nvUbKv2JL?+_t~j_
zARv$YY(gjQkpiaDOh8uH+u_rx@Yytn58lf$jmNc<k(1jv%a%os0Wo|cGCxG?{ER+q
zilRJ>tzA#B3io;}T_yfl^3_uyFsFA_-Csqce7z!ioAiuRh|6qi03eZu-YIj*c8bRF
z5IS8^1a5D|r9f@FCXnQNsg@~rb#-zIQox#8bd^%So}N3=czgZ%@u^QoInfiKjrUht
z_ODxiDOWzvPRdE_5l?~|KdFV?e9{%^GCA2lv@I;UM@z`RbS|`9HIqcssAc?yo*sAd
zx|B|=e|Kx*Xy9|zs<m9yKEPKpe~LaH2#j2kOtF)HdzJj?hPSm`=y5MjfF|T>+4~zM
zHRMLycSOGlyOmf1XX7Bv1cfa76k@ULY@|1NXY>wpoBsU1eh43;HGF<J=r29h%w>mg
za0ni_2yn-bm*^RIiFZATxq9L(wFPxr;!1kFGr$La8xB=*yOzh4?yWnh`&`&&r&me+
zlIIP^R7{4nrY$OKg&V8hOt+<KfI2zpE(nGoKSi6IF+NanKq4kN1b=aG;$6jTA0IVp
z|2dH|?p?=JZeJ9dy^!Mj@x}J)n_2MTiqR9=731W%dx6l*GoJn_S1H~-2igWMd!}#`
z-t-$tu1{-DTYIH+FxC=1Y(T^#pS#I3uLsXkei$FhRbG(M@!A@C?X=a1X=7!=f#9Ai
zx@k5kd?QHScouGIhN;ecat`a2q8A$Ie;4TFbQ-MZ)L)M=G8&YU)srb4{cc@+@oJ12
zC7v7dAN8GqaYtAaigOLr>D_zhOf0L@-6QZ@OvO~iKgO+^p*k3LHq-605}&r}#i197
zN(L}{wO^dC?9LjITz#n<#sKcus<8s+Aw|e)w`gp3^2_S<+eH&FZev?F_;!73y}1Aq
z#qf}FcxSt<4AS+py~IPrxUKhNj{C{f-!bpbPOC5)a-p>sy`HF^rq067*B51RUBL;z
ztSbtVVBrq?Cu~40tFsB(pD6}8$hs?zhZ;qH{_^?mPKxNajmhYlB$6AOp0aPP8&^_@
zRxXU`UY=RJ!kicgx9hu$^TJ2(TqaKY)wI5@RA=HLZIcr5hdLS6xEWIfve(6@N8t*@
z;s=<$<f50VCw!vMmgo2G_II>Z|0+x4u?}qU2*savv+*)#24(wT+uL<Fb&eQW;H?jF
zemU>=J6D6_cZ1COdzOFQ)j<ijup+paxAUC%^TZ2lc018fL(08A<?=>N(J=2M$YDIx
zqHaf6=jl%~9OY-Y{{oL)+1=BvL@@%=Qx*>P&29l;fiM-z&nYiPR;DE$V=5$$1bm)+
zQcvCq!^}L9c0qKyYP}cm)_Gp?)(&rxRA>HIF<8=;zbIt-Nmfhs&<KNJ`2tsC_ghTZ
zE#c$nYqOhS+rToxi~28E_0?P~g#|M9uMg4kK{(8(**0e>&lC2ZklJ0ZV@iI6*#(CR
zm=AfyE(_>biKTIo`_x^PE-ZXI%!dp<nAucFon3ic9nAjD8%DjWbR#OWgihl3HI_*?
zlJ-v3#Om=ya?X(#4Wut12vZY}eJ{~-!#~?jp6fLDe&XL%q>H7=-%nmJnet>=Oilk3
znV`uFyXu_cWnlh`Ij%0+ua@WVJUWBNhqwiQM$adbw>&+d0Jv}@^s>Cwt_gpQk13*o
zr3)PRjEp<W;%9pOux0O^<3aoA(_pflP`E<)>df4kZVce5yhPF9hCi7Df+J#S-0)39
z_dTY9a|s_fvt;w8T<WM;PQWtC{Ug0&<<>u}8&$BHKmV6r!@U&$q<0pvY;6MVaNVrV
z+0&Tj>%&w$$G<$&P3^ZBI-SW0rjIB?QAiH(aS1HlNITKikn^YA5E7L+4-dwdu9Qn#
zc6<o-pLAFemp0~}2!;Levs>UHXH22b>~51uE1YoOMSlb?;f17dW^B@0UB+-uKji#3
zkbBmYqI0<1?ubNOY>MqVfax5u;NoQ<(skb=NxntOD4{A`0uNk5tg~O7L^nC)`MFcp
zA*oRGc&GT+v}(fE4kVJ-THnSLo%^abRN4WCeq?wyO)RaHQ^>bDfO>Mqv`CrYgH;%^
zm@X~m&<9_f2Ag<Qz+V2IP$s!=8J}r}Jq7?5TWILk;`CC|k`jB0x;f5%HTeGL&Q536
z<gZ>-pRrb~uko9iJcy311AD)rx5?+Cr{k?ZAxMCAVs3OOeq`hwq@XoFqUe~$l~45b
zP5gjxA_qlCVfY<qr+@briT=`&75Gc1VY^S%3*43P6zcg72K(i-;ZB=dk<5s>+p8@@
z6SKaeDv>?eO2q9t>oN)a*5H<Xwm=K)t?J<LCJjAv<Jm7VWshUC?}h+A)IhZInNQAQ
z+6-{~3T$ryYsh4;Ai4!H8Ir_lpvBsqQp*RB%BnVY5{(A2<GVqRXRdY&nfhj0_GqaO
z)_rQ>tCgEAd#-q1GEA9cqIeQVwM^#`KkS(bdI~XKsk_DG0~5l}&xAv+_5e@_1(W?`
z-J#&O!lux~Te2jpx039pFSIqwi#K~GrY3J3(5}Of-SIN1Y(J;mW$`j2CH^~NQsK<S
z{;UzJ)25*QAiR@_=ikg_VmyT8Cy$^?)_qD>x-Qs5FqO>KIjXBdk4)YZ)d5TZVdI+8
zMP;+_$$rW}m#qaZJ|9y-x)HIkO%C=AW`T)d%)pq~%Wads{p4`0nd}?uKvY<~)VBTi
z+ZV#ate|7WsO0X}LYDE%2wQYWLWWhYN=`7wBn}6sh*`+Or<cP?dM6inV7QYJ@HR3$
z<-<a=TVWrjw4*UgTlX?a#k0`ClpDWC%eaEeZ>A(d-)WL@Ae>49^QUqkx)W#QQfCA$
zmpy*k?T?2arJSI=<S`}lvya{waJHOmP-NTfPa#&euiOKl;*c<Yuaw^RXrappIMmWV
zoKfz&!-Mr6Z&(<8+$F$937NKC2za3+MUfcWku7uw$;b^b@sk@S=Td$>E`PLm7pqbv
z<rW+?^CC?!dY2(ptwzkC6_}ACmmW*&W~iEj^4fL*l6=u+;J8!tpHFfR*n!quuly7?
zp8y89>p|7)L7dyd>1ZRX%rPaVBq?@x>E}#Dm|MMfwt|8eJV%Xh3eoC{Lyt<w*v!0i
zu`N1(<O2}#EvlY(pL6%U!h9=$&STm83)8rEW?mzutfTO|8#i#n3CDnYOgb6rw^em2
z+v#0&*<}}riKK;D^}vNM01lpiFz^IL%3uo7-zJ`GzAhe@=H+lXp0%MTmz<H*6`_Tz
z^ntuS_2YBs_$k-c$T*=T79Ru6DIb8*-W^!rF_ZGkyZ1*l_Zpw`(v4C#jr(;9ceHrI
z?~w}=#$?GjAX+EE#vJ22!VjN2JJ!Sh7?E(63nX>1<d$g5lyF*PAF88Y;7Z;0p;`Rs
z%J)w3N>%8pmvuGROsl`wHuX8Sx)v52w)|o`7*mC_#@anvOhi+C<K-8?{XJUdLyY?*
zjYFFX!?VxGc7AnVke<D!?Ii0MVmj6~TxXi|PH9?bJ(TOK9j`uRk@<Bi#AQadA*3_q
zKg0sYxC5ImKruEZJmB3!CY`5nAX-D<yz9nhzrA~FjSYAZZH^_U{H%`7J`<N7Kk(~(
zi2j+jjAueElIomWF+9ZgqWkw~r37D^*sGwBKY}~ynHsJ;+I0qYm4&)l+y2gzBkcg_
zF0kd$yw@(!wryc@_cXY0u%NUK@-o?epPTyPt56ViZ9=>5&PRK%Cuqt^jmyrrEncU=
zqI((NftY#KM_6wfb^ud$rFR;NTXyPvni4uA-WC}st7jKA{bdL|W3<2g{LK4(M8@Sd
z4`QyjVf>IjX*>>@B5v!+!^6L6BKNBiHZq9HId?i4v^xiQ-E9MupPkA%SlnaM6<Q2z
zx0)@WCQeJg8V&kc`ktLlAPGRqX*|yCGb($ig5^F1a|Ipz;u(7=|A%0B;W3VSmH*b+
zthw#kK|Im%^9~?Z6;Gd>ggx*ObER1gjp>70br`oTB;U@w8N{E^>9+eB>-k*_F>1CI
z&E)#3qW#u=qx-Vi2bxd^dRqap0NZQ-C);h`r4AqTeh7Z_H->GHC6)fgZ}Yyr4Gr~U
zqwIDaCC&<Jz`LE!{ATed=@Wc`JL0xK6!J*I%b?CCF>w%^fKCLwu1U+o&Le`_dwR<w
z2B<v5fXzXX7Va7kt#>+<uz!9Ez@vOg%IW>;f+Dj{0zO9JK+x!xXh|Gur(T}xx;%#j
z&I~L)Qs(kUSi<?x%|nG1VM-0TM31S^*lInEpXaw2Jb(_z$GN2ETJF6qZxDlT^}cP_
z)x}I8Z@9|9?rdJ2hh(4at;3-9W^Kvr;2z2!*f%M*wzej6c^WtduP!sS3PzS6_dS^V
zf4ruH1{CNs_2+D*poUGkx`LCwPPX-DPYX#g%3e*Jx`+n=+}rc`XyPXWSzRiyDKG@y
zizy4Oa?LU@(>e93&to51WtDxC>^^+!_drwXsOvCaS=)d7I%dX0`n}CgOqjf@vFew_
zTTz#rO;GzkTrNE_?N+YaOem@LxL}!U8BR-Eqh9&++LJI<;3cFH(@Cd{-%hpjMI4g8
z6Vm>sR=4^zWV@)y3x3^*;-kj_KAft#fQHlk<Alu8PH1Yj7^26!pa4nV)c)rFT!3uE
z%r1TV8~j%k-!tOX5brZ($nQ=@s7=39?w<?Oq&vCSf0oMIbq%Zhix+E{Q$*d(VLUz;
zTTs&*J|}!8_nLIGWxN_;1R)hhL$oxLR)MO0q07U@DW(dCKSs_G9j8uv`<2^Um7^Fn
zF~P^rzBWJ|9&*1Uds;7dyYJg!uNEE;xH&BkFOd>v(&ywjbht(Ny>F#ch|Yfd)O8oE
zo9ah3+wLL4w}lHlE=B^|S<@xem#4>;#?jSr!Ei5czDH6EFZ|b{zV_TqKM?^4gZcrr
zD>ikuGfDCr9n3s&Y(yylBk9zA?+v5aPv}^E6VbiTwc}7H>)0=BNGP8a3Td>WUbnd^
ziYcXyubaCk%g65&*y&KW-1Z@WbsI?am+P&KlHK}tx|o(F4?F;*-o*r)YxfRLraU1e
z#n)|eSfAp@0M~3U{+GJ*3SI<L((j|89~&dE8mzZSC-mecjCd~42Rz~iJhlsU3A!i@
z7)okBPDf5G18-s8<|j*L{tewd$Zh3|R`_L&KMnqfZ*z8~kFlYL=aC5A#8lc%bo>BP
z|Jp5N_bXy5|0beu8azGp?)!3xpPz2m-446pOd(NX_VR!)_`u~aRyM^y1Sf&jc+6KX
zQ+PHn#n?%)<7qr%@|4#hev=DL@eu0O&kO}Fn9|A5T*}l{!a*Mn_ru?II$M{AU@F>P
z2Yv~H_K{&`D{t;%#{dt2xh)hfEUnNvRI9c1dvJXnxK-{)AJWXc((}IB_sB_HdwrS$
zwNx*(3rL}3^dI<uFLzk^2^VV`q7zAPU_^TDs?qet4cqVhH@!ii|1Sd>V=-E<v$1Sk
z@mOzBA#!yy*!zT+2de8(5Nlc#<%Hw_L=q#=p3$n2uA@U!68=nAWCi8={m2P)Uh0$x
z;L;E>)bfZPquYAolbkaVgN7sMLq@N&P1p%;`3i2(5Q^3oYdy5N=Q<?XA2@m^lXd1K
z$CJDx!_#w($jakr42de*1+0J>pIu>lII=$!6-x58v?uy|j|L7{73I39r`xTZ_{`!z
zDZwK-H=^c{dYG_a_OAEk6Pjp^uGKFu=^okVU6~FOS2cJCmEhiru7_p%0tSf~uGZha
zr8CG-lEM`g!;2J(<V^JUC0*A>Fgw2J>5X~*@t4BPY2y8wn&fRXEBdmb94pC3-DjoM
z^<o)Y63VQUiW+bDd!IA|wul*4vb9HFn=oxe*jR_eU%W+pMHhuuoQJD_*8;CE`GPIo
zn_WEAe>+0lUT6iz<r{10z3a&@{+Lz3Jz4RY13B$@#9K3f8Q<`T$T`^E|CiB&gu&nf
z_VTzkPyL88jr)})OKpCPAV2>onWp-x?$vm+7ovs<VoIIge@ASMPFVN~bp-rQ?Ax{m
z%$@&-=GO|{x8wLyS_-t|^Q^r$ldc@Bjj>9ASqQ_sGv+qt2=-%$UA&?G6KjqdIeX1e
zoTrEb((=Ti>YcrwY08f}o~YJBWv_C*IxN%P;+LZ+H;qi4TiZ7auPWjVC^ksTa>TY*
zT-A1We;ySaJTPd_65OTSpe~wo56Gr&E$U*ZStD%MR2AAqR<5Dq;aFKGJ6WxJx<|@e
z=Xu`$p$Mdmjz14I{o9#C^y-PQ$kyWc!HxRYlyycwpZrddEqGPFKtyMAp7y05Mp<`^
z3SZj!L;h=EB8h;k9-pE=6|+(0!v?xI7-Gbv(n{O=Ij_~{H=If*JI;^wDf53!&HFu(
zH=ydQBtK@^H7*<3p)fA`Dm%+)_a)E)HyF`1%k3U*PKBGnF7@k)z5UdZnVgFsAV<gS
z>o1H75l_`NtQQS0LdQz)_*t#(lt~_8KW_iAn_~`mPaf$zKLOsz8X<ILNgQ`6oM~Th
zCn1Oz@khUn+*}3!pwk}Q%_~1|Cf}J{mVNQT4ek=7%k0?`p<y!}6I_4lJGN2nq)&Eu
zK5I0%!G=%g{-<_K#;CA)Aoy|Xi@W)W?nd2v=lrT>96?W{hg?C`h|kH0PYj~{EEG_q
zOU*9YoNjdYh54n5rf(;CNd`>$8gN3GZ{hGT?>$4yEx<o+5)uG=GI7oKbNLy$*7_ZH
zs26M<O8qL;KA2(>JCHo?85m5+*xg=H0xj{0v+CyVpQCU-uG$JfJ#I3z&w>?$3A$y_
z55owdv_%J<d5AY&UypWN7r;ujs`|3^(-tHPg5gKs<eI_jC=<^E@w&_JJBM_h*&?8}
zpM(;32)pisUfnP_h47s0k<qG%gh?pLUtvGrHTUA$JN01tyYxZ@JRv?O%3PYGSTHFw
zHpgK!i=T-KB-bez`YfYSq%`5SnVEf;_c8n`bZlbZU_nP`lZ7;I<5~dSd1Ppb$D?(O
zMVDWIFLx`c<mMbT*H)V?K#Vxq=Z;e#slaxnPENS@vTWUjFPe(yYTSIM==->8h0b+P
zz^14!Gtk6aj3;Qe3P0v8&7)WsyRB|n(kcBa^dBYW?;a3a_oRtbIPRcWg5pE)bK<F_
zcF$I3%)u458SII57-O|ff2rY8rFcW6e1aa2*WU`dLC^(=jX*)Ne>XvVWa}2Je2*#Q
zukBNhAfWS&BXY?&lF)Hqk2_vp1vVrOM2TKehj#|}O`IH5Y5E*#uhrac{)BRIgVoXD
znKhAnTJQ}Hp{@Q}1L*B~WXW18f50=yzkP+Av2ztPo7QV8&0nLWTa`XX4pH~Ax=xX(
zZw>RcFlvg?pmB<U;e?Zh%uB~Z;uY+W;`Ay%r73p`WC>F5!91Ee;Go`MAlrAcynmk#
z>bzW|nftcb@_1pT_@;*<wzOFiHs*Rfo_+%arEG_`?JDs7O}^`8(K0uTKh7Wf*`slF
zOj7K<Sg7B9?={J0<^Ga-Vq5FN10-9EcH&ao4$BN>4)X7Etl(cWcLutDBrXbu_Uosg
zW*|J`ufSzR4T0JX?eY`)c*UwS-)_z80NgTIkwlxVB$NR1X~M2DM+Dg(wNt`_(7$T^
z)Nh#Z9j8Cn4C3E96n8*3thw#Eg6v>jX}qW4g$LU|d6q}Bf)<<g`)>Apa%ye&8+s}-
zP2(JbJw0T)?R(!6GzW;P?5p-Fl#TLyN%_tri)4|uq;cOT!_dXJ)o9y&piIrz-|xf-
zhH7!F?ft?&-?|RE*x*5Ei7x8_6{lqQW0{6t(*L<Dcikmin62aWaPtaWWfkbElq%}e
zh<`6Se&#pbG~l~*E$za0#k^5MaCA+u@MA_SW>f<|Ic`_JlYe7x=%g~AEXftYb*0oP
zu|s|WhqR``u?=U;7Vme`Dj){tR0MyK8*QJk=R)TkU1K<nGvv9s8zl1f+KP$WDo_n7
z#-)UomJ`N9lGxM7pk;#0KL<_ow2cINVrO%Z_YY>&yTm}p$D5mCu=l*e_+|#&F1Y9N
zE@d<L;$ulz-rP^5ryB;j?hfSrn(Q=xoeJ*333J9V)ISQzft;M!D_+Jh^G9$csxY}h
z7IqG9tbC0sq0|Xk9ypJO?{$LQeLSicoWT)N5v^YZLVYE^aeKK9eZ(2pUN8$LndxV?
zHJ=O3N#K_$r?Ml$0#|O&9_=8tt>K;<^=FZ`S#{5=N%L5n;p2PFg8o1DR_Iavo21wi
zW+WoP^^8hFrRiZscawQQhkCz}km|n!7|M7BEb4|Z1Ig(Ydx&-{0XN9O$FrFqQ*~*z
zLsz$<)RYWn*S-`W(LVLN8}8%2%S0Jqa7Zz`@!exA(c<HcIma(@AjOa9aDq3Au|B)a
z%>YyQqyIAYg$#VCO6%@>`Qmiz%D42^9QPmj_fmV~#g27a%v)R*h!VW3iIzVv19b1M
zJM#lvBapBTd(top{gw`jrroc8ba?2<1u=E=Mh|_tzYZv<giiM2xV=o}!F?rwhWl`u
z!l2on!Y_yTq__!Xa{q<AQHNdg2Oj@K1zTwX^Xeqei7bQp>3lE?Xx3NPCg|%Wa-n!!
zf^wH~Bz1u+l9R$c>7AO^dkDzJXWghRfgVn&JqP531o9%1R$SK|QQtuj5@;{~5ikK?
z6f=X4@m=H4_fEJ&U$M(%7(JACAGE)Hae%m`(Af78m|7^VwoLus;;fU*aMj?agFvs|
zW*AO^=&dnB3@LffpEj++nyP~#($Db0O>1-k`VDOh5>IR2L3waWHEz_Kq_~3ZvpIn#
z?^D<}*>Z4KOgS-^{msCOOGpM3f5caNvAy<W;4g|9Vj-7(CsSi&-73ZG-CCARvqDCk
z4OYwtooCkU*wq9F|DbetlW+2nYpM?=3ow}Pe!RAk(r$%SprJ0BG(!i~nUxb<tsZOx
z^`mC!Uf>cFS~*GCL$u$#4p8N#VrYMl9>BSrF6;M<J6$9>*IylZQhs=Pn}S7alg`pM
zJZY?`gC9gWZ^+Y7$ONA4Bqxa5TVNk6`gWk~c;QRQ<C$XYi)<P&gadp4x53P}-f6u-
zKyvOYLp%MJ@=<1rCcGD&DhyPn6xEC_K3&+U8np%q2T-xpT|uT}^#Ccv_ZHeJ2MBfR
z?Z=ukMXX-}^#2Gyz96JK@jYkLpN{@wHL^^STKD%YR;Kp9P3{iEa6B_&W=aKI-l<l+
z5}=^pNZ>%bw1nL#VX(Tct~<MwZrJa{F749G6m8>vXeU+``(6`n{LDnMLBx~A9)p}*
z=J8`7kxw^$ArXU-PyfQUoA?E?w+YTSI|wo$#JD0FC@&H$OL|@2>WjtAAsbz`6<#wB
z&>BSr*LaJNrdWg54k)Nd3Ik?NCWzbJ>_Pj+pZZ01Y0LGk!az*W)P45beeWN+mkxBX
zID9!7o<j<JN!@srO8H=s&wnSSPyxt%%3$QSOZT3OuuJp0ir|cR9cq^@1>~D%+5k;$
z&*W-fFu_qXvMdHA*$w*yS2#SV9|ob`8CHx^cF8v084*$5-&UxRX^JZ9R7m)@@6#~!
zJYzVUgBd>CenaQFOMz{uK`wBQ$C`MKEf5j$TqHvb>#lA>J=LSB*zllZf}|E#A73=6
z8?>+;?91f4oaxHh%NC%&!b1C0`yn&}LptmZr$^o3paLsR9NOe(nv9zF);CkK2r|Cs
z#X_f!l3~^)J7~jaM`N<J$I^A4q*S+x@V){~&A}r1RaIfsWVH$wd$eRd|MnSL#tZ39
z!m|Ku5A+y0fcJ4lW&2G`km}Z5&(4YZbkrT1;yp8~#XyV`lsi(so-ljzm-SU)$r9QU
zp`LS{7J1)UQQu<{%MT&ppLy)2m?XeG{;u}@%kJBhxR#anWJ@Mw2{M_WU8QZH)VQ}M
zYhZinMO~E|jW@pY%f~dXLZ9!Y`Tje*o2cn!>ADMWnm4BEIeoj1++LAbr%Wu_vNTXd
zI>se8DqjnblhYPx3S2&mZyBs>aJ{(Zz@x8aH`s<32>#k2&AZEelq5)-U9NZQ+$eCf
zOkhPlh@IC6-6KdnIDcG1A{3<Ha@GuuTB|s>ZM8`~fN0&iOoglWFXBX7L*h=Pwbk{=
zAES2ZdI)xz{KHF8O|8VfvJewLBO_^-KBK*C?Sl}u9DkKZ$snH6$G)XB`HweMziykc
zMOc$+ZF!4`kaiyE5F&_FoV4x5qQ7_UQVPT>QlGqQ>mz*F@>&8oK17tGiaiyYc|Oga
zZPfL+0UAs!8+Ch|;En8SR#IP6DDSjlDg6TaOd{n8l0p;jc^QbsmE;#Lg0At%E@A6$
ziYLzg$q|M?humeHG};%8;PJlirij{T#Ir7-Y}Co>|CGRov;62yR$px#1e#nF&2D#|
zSyl|&0(oPL#?jr=ZX~bBc?)`d(ca&mmMXMcRW$&rtCTys*r<SwvzdewDu!mBrk;{K
zOZy$bP1_oIJ_w18?)~Cwm%@O!?(ZrU-L7DUyR4f_^EbRb@co;bUyGVZp=6z*@m}D7
zxh^%s{HD+5qyh}4TmG(w`ZzHfA~AHl%|P^SmBcmgQmj{O`+7s{q~yX^qS1Q}TnA%@
z*aD5AXYBcVm*OQ2Dl_A4eD*VL+<M(*42KY&I;&|=hpE=C;Yea`^;JR>3*|lSMkCn`
zLs5?@WFOz}?uMFE#*f8m5){%>_1S`7>Mpt--<qT3b?+$?hrFxY8&ie*NWJo^yN23b
zI@36AS$K-asQOyKy-HZxjd_!wDhZG`KRaK&INk*3Q?MwEMFFxxUrwf$ea|}u=&0<<
zr8IHb_LQjveOK`(!~r16qOWxoZpf`|Hd!+Q6PR~0_^q#4Q}f=gJFo*y%Vf5b^>i(y
zGCb2kims)U_DZ$9?r8ltRtyZ?*rHcA3w(A04PGd_PWOVRmmFw&3BG~f^t~i0H&Auj
z0rrsD6VO=mCt41?L<-0C3`xu*$l$FVeW<k6TNQ*fOoy_+GUdc!7uK*1hu!cgen(xD
zA~EeCZJUs+T3+0ZuuV#8(cX%?`5?@yPzPdIEp}0z1fnR=oK0ytAYdE^(J4e&*@X$+
z+#^I_B|jRyy0x?4jKowqr@_dYW*=^tGsptFGLMf6OS=v@9}n6GtrHXg2P_)*W8|#6
zL=*%xgOPFa&7)}=p6$&64LE3Ae_VQNJbmY2PTcEIx=t>uX%&U{{X^#e!{|NlE<r(l
zb`r)Hizh6;gbb08`AXI~x={rtkO^H>VIuU`gaVpf1ke}t;OViwXNC;e6?RLZfu=hD
zOx0u1m=0wc@%l*<K+<Ssf#a$`<jW-t26G&22Gd`x0;sp~bMR(vjPNOFyxnvEGw+)n
z_sj9OhBq^%;kc7J{l%h$%V{VW1Zr`8F1d|U_zq#e3N2xf=EsaLnF&fgZ-)KbPnZ~b
z?hU#nBrRB*9>r-8S!Dal;~TEhw^_pLF8z6Entebh^b`kWiJ*s0ge{&Q(4ktEK8Uax
zpZ0|~v}&VOD19xw!w~u#rOi_H8`5ZxWWQeqI=<%;#N(C8EGZx-BkhAP!0=VEP}me_
zTqC5Btvhe`kQ8;J*Ij$Gtnb#lI=(dQ3S+OTz1lYjuCC%z1sxdhZnt*w{pW>#2wM)o
z-gk{_C3j*20^XhY_HQ3Gv<71RdS(w6h_NRQzAiMVtjKv+p9oZi)OSM&^e2P|XcLU_
zLb3F&mt4)b98Mn`+mI-B=S2I<mh(ZgXkBfxN(mg-4`jNPAmV8Zz|GCs5?o#D<E9+D
z0I?<1batfe4)CF)aw=<*?dyFmo}C#*==edbYr~8)jgPG=TM<EqToWhT7>*z_vUIG2
zdP{rEjLH_zB>H9S;ngk$3%xR>(3QY^`)bmSCWXh&;EjtrG>{h8X;(v-tkT*C)KsOp
z1go@QV^LcLcI#mL!~<^PS@^U9d$LPebc|b^s}@@m>RaH(<wjUf0BvDroT`W>n2>qb
z_|(@2(xNS;dr~obJ>2>9Se4GleUPz?_^P3q$zYSjdG#Q$MY|!+nE*R`4qDi#UL}_x
z_=Ss{bM~Wb+=4@RXx`L=bI9AZ8tmpoq2x{NrzG$22M-AD4rkGMETlQ#q48-((0QJ|
zawejK8dB_>BaV`tX*>rc#Msp9SZ6Ci-7h(gi$#3=7yY*{pAhn_1LqH%c(w}EP5qdm
zVRup4YFx;F`#O$iqlCnvbij3ih7^gv2uF&@4fhKGRk)N=QN<iXc=ZV954Y0hw++t%
zVgD8r2sDnr@CAOT_<yS32p5$;`Ww`rj*-@R895=hW9=`C%PqEfBBGhQE!7a}v?I95
zk%aH@R~j+yHwGU3!$t@Z?k{9&<X{5~atoZA57S2>p$K*g_0F<Lf43k};4MT%;%9b=
zPhXk4)gtfI*Lxb>ZGR0sDZdlPWIU~qiFjywZ|dGJ=B_`HcLIMC@rf~y{t1*@U;zw+
z5$?GZoIks}L^AlIM3>b?SK@m^KGrECW;``tD6~J17c20}Wme4C9KL7H5!e|1LiXRP
zB0`u7^WNM19&W>~_=VC2;f&w{5+%jo=&byfA@?boSWP!&NmXi;k2)nrGg>2Hk46K{
zp#BFDrp5_qXV?B-8>8Ao)&8u@x0GLr1<Vm6MvX=_(xb?kyE>qE9Frq48A$ifE75#$
z?klZ{vxq;pGgp$ev{ad=)Sl2ZpUZE<6}`|5@<2<&CHmcC(77vd7RmnDf89-ja6489
z{*uiFplbKTOGg57U${Ke%v6&|irC4^<xe4_83|RD63^9LTB=#f<=S_V&rF<V*#wG0
z5bl=mlHnS&J&K2D%C#3Ts5V7jNrT{h-LP2`UQQ%hpYsgVctuvec8nZP7DEo?dEyjQ
zjka=K#^>MG#E>QoR4vYDqb6x7GbOguE!RV`9F9Jq+0)o5uX1O2D|p#}Z;-M^YXtf@
zca0>BQ&x3HOiG~HvVw;e*co=nE4Q}uM(Pjxx_i3&l+ZeB5ewTUcg4bU?=C$<L{w!u
z#8xI3?fSb$Kh$%|`^K)&y`=)!yMaiN$#rM=9^cc=86B{-rn{1o(7dUT=kg4n=c(HZ
zsNTVR=ki?)%8eI8J{EUh7VRRxMKVl^yo#I4L8YFLRGq2y^doZ{I6Z9NDJz!$%lJ%&
z=m^csId=wTV(%N%hbvdq%DsQ(SVePBH_`AgK$>0A3vau^`)+DF(x}F~DEXbXoi7Ru
z!FRjO8*;N41U`Zs#}G`ppBcYH!ObKIuD<3){w>pWyATNbBxkdB)2W*Z_{dEJGClA6
z!(nk*HP{QaeJ_<fcU#@($ipvoKeUrg#zhA8`2fR>rti^J#^9y<9XClR@wIcjF%&6y
zuE!qI2ymr9*2c^W5sv_a$&P~NED;Ld^ABn#6!rv*N^{Sdl3Xby#vHVUAJ^DAfF1=s
z#Wc5q#D>3qYhQdq!iVF~wjv!1Vgchp6q}tDMf6G@Ivn3)!^?mO5GI2y+cJG~a0<xp
z%9t1N7pUqj#Fipw8)}O)_o5XgrK@JgGZuY=O?NZ+<&rLAOy-hLK3P_H{iON)c&YXL
zU8MB$&3?mM^BG9{yE<gw9!N94_4e*0^6f(Zy`{T0uLJgw0HL|VMQ%jc*iRYgt@#XY
zJgcf+8O8cuU(hJ2I~n+CRKU%F)FbKNSmmL2OnB566#=#?G~?d`8FIw0A0wX%exig=
z<+Hz4l~AzP=(^{knbq&T|0b2GpPYKn#8m$^^LDI~e#J)$0ZJ-Tzt`Es!2P>lV(2u8
zpkXCER9hR6UAD32Ns6e*FE=FERPanx<lElW<cm4Xbrs<txT-MDJ(kG*_6_(P1;R8S
ziP1t|`3NN}H3)68bYB_ks>D`;7EIVAqOd)_Ci$n+N{)itgsokJ4utv_>YiQ5u>04E
zM4b>Tn`RzBXz;wVdvj|d@s<z%xp^GZT*v|!jsI5IxP_@w_s%m<^`5@#sDe5xhQWV`
z4<!OQFw#5nNiNhz=|sUmeo6zv{ZFwsI$HLvZCGWNjavByd+Kt;r8BEykW5o8&g#Vr
zn)J?#TDHL9*QZlJZw2<H!IVUGFNS&jfe>d*_H>kHX2rk23l(BSp<GwZT}74iRIW+d
zLKQpy2Ex8_LQqoePpn4WcGAT-NqL%2l-RmL<26a__qdmU$$K+qrC9RdhBW1`2oVie
z5pn||%D+dB4s*za>eS^%>u(1UI%=eR9owoR&)Y&M>#u#QHwnw$-Ml+-q^=0i2YcU0
zvQF-T^L&0$?+lIe{~jdg<}AcgBo}3<1`e-TH3QXxvPLNmk?=R%GcN@7U*_gEm61!m
zA>7a}+Rr@R)zAD`{Pp?^OE5klpkgb2;JG0*!(YLkyNUS<LBT8`4kx<bI$Sb$&t>DL
z;o_(HSB{w_bytzi4_c(1IvfIh55ZLgcN&akiHVEw<PXI5Z;U}^dKgwh7G6F5v$J7z
z0V(xm>Nqj=LflX+sWFsl2oVI`=k*OT_2wS61+=Yr#Z1bXxSvWh!r{uQvk`VDGo5T8
z^49c8hmVW0k?qr00eN+ST23jT;2OBh?*~zZ_Vb6`#^(ZlHiqPOzoy*4Z)fB&f;L9C
z6L6G2OZE<PfacytAlLgosXSR)mQ|x0Ga+m28t+1as}e_n-0>GG#&hDTqm1Ser<z6D
z&Jf#V!b$gj#g^qciXVsGqU}JEXn)!a^Zi%)0mOgy1Nv`of_z+m9M<D4D||KNGyj&k
zC;kLJL5)Dprp@KV?cE7fE5i+)jK0{BB~y!W46diho`v4F`n#x`bW8H1%0%)bJ?V^n
z1wo0cmwSUGCvM|T2!$Izf6l?Dod~Rr#?=W-z)AzD=kL^)pv{cZ0+pNKDfNru)D6pM
zi$pKEhWrofV@Ge3IWWh1|1i@#2;`z5Vu$A)4669%+jUW``vrz7KPO<cV4jNHqQ*Nd
zholNPSq^$U+E0mN7p~3;=UA<1ef5ZJW(g<u+CP9VbaEgg`4TTH362U>2+jxz+?c8&
zo2A0|CrwNicr;TKt>YIL)t$CfJ{b_+l5Xe|pmU!S$WxzclOxTPD*2ZUp5|W_9(J}B
zMne_xA9KAA_1TpMaK2)`AtrTs#qkFQsB^hS@Rz~4b9WVk2dsWk_~r60Nhh4l_D-g0
zZYRa2zugb5WJWZmvSiBEd%sZwohfGJmH-+9Y|{b*xB7n7+QkQIWQ#d|5uknvo*$`V
zM+awBF3V%8dMRXI*m{?M&}sJ$qVh7C%k_Fh3*3j0XZ^<aIS5c;*Ri+dAd<)6i#6wQ
z&v$N+*Wd86FRZEo39_p6RKPwRqBJnSJ2b=nBJ=HBp4u6l%EBj&TX@Wm0WAu;rnBAb
z)(ufejg*E>_xIbS?mr<MbGivykhwYUQXVFF&tbv(AWlvQ7LYgU=f?ZgjaT8_AiV<U
z(vQk+<z^UDM8VUKX%7lY{EW0x2`cLSLO`ZL?fc|)TI>XR{>E}f4kTj=zNdc7M2d9f
z-bBBTFWvOub|6}rfS|@_KU_=1^i;_zO6ahw5a$Z)4X{gT7FlJg3Ts<&GyRmu$>ibn
z0qNt@f7{nx#6CGAfoPwl{BjexuqGUHqM=an<u(wOF}Z06vQT#Q8z~xUoujZ_4RyBn
zdKi61K?hO8wP<=XbDYIVht<#9LmS&EvbXQhsE*`_Z36rx8p)q4ZjfDrpNnm6#gY3v
zUEqsjvMRqpNK6c|{+3;+1?(AjO%aXdye9mg>qCz?uaR68Ie0J0+A~o2CHsm+y$Ah@
za*MwifS1m~F+zK8s6z>{3xcEE1>m}JxN-Q!%7hVJ96>T7SJ!eJ!!xtXAiHrWx8mE6
zynF?#YekPiiw;v%&kXV_H>KX_Ag)|sN{+G3e%eEKHGuCiAdm+>4SW|KB2N$B0Hh;r
zwd8$*46*2h*zeoEK9=*ZnDVUb-i<#$K375DOqAXLxA<0>Jj8T;3fU)mlxFYV>)YqZ
zYb4pHjyDQwh2=3EV(YRxsA&x%7WmN53x%jObhhSx>bm>M&={ababl3hTdi5yDq#&)
zlJy+0-um({7S4$H*-B*SkD@o)B1i%R){%K5>y~z&Ec&l+j~ruu;s(iiO1CGZKQ54;
zo7Oj@sf!B2T?xHlRza0nEF8?n>OO>SrxXU7x$TOHa#dxLGpky)t>iOZi}TB~_Q2id
zI4f)AggQqo7jLyo;@S~lz)@HmFom^~`8R8s5K?kYLPP;FoIH9{hzR@-mugd~`EgrB
zGn2F<PFAga;1psP0fej@0u4TG9Fn+1`%S$)1CUhT{?WF)R~L5XVkt#n5e~Lf<$XG`
zx-#^z%E!e*>#4UF1gMoF&s908F5)BiEjYT}b6FNjnthO$x!eqV7luHd^&al|G>Akk
zuv46ub4$K|Fam)97t~`+<w53~LH)*?h&PF{LKKai`b+MuX%CK>^Y^Ptk7ImMN*>8z
z5i#r`3}$s(<P<WtO_0GfNV!vno(-xksZ+5dt13f}lL1n&a|gD&;JQ`PhJ7}LhONiw
zrzi8bFWE4e4G#ll>BrsMpL@q#vv!qFDQ98+jRP}6O7`|cxRi@qZB2yBG#qMle$tp+
zjAVL9P<Z?_`xtaibJJ=7F~oeuW<W);ekDR&nG8CgvLU?#<08l1Q;=8pF*;F2$$HfN
zIJ`=FX2TA0XR-=!^xfD%Q`AX-yY;0MG{g>mk1Aj0HQrw(iG78Hx!!&t$=L`~MPkRI
zN$Z*~CLm@X{!_pLfl}}n)j*{x{GilNeSsecI4Zx#mh5nhvstywRm#2$!6wTgxM?D>
zo52;4f8Tg9OH|nLJpDJOgd8<)n@g0R(<2N=o@NNkx)mxO21E+WwbJJ@rk<0hi<!zg
zuFBwE?SD3LfAO*9IhBjNGaL60jvFYZkbhqSbJXaoD1Fw8?A8=@D~n9TluX`ybg1yz
zsv<Qi(!{jjaSq*}={?8iUHvf%CUQY6BadsN$-AAQ>Ff{=3T8RL0ue`TjY{6r2Q1k#
zj^@u$qB7d|KKLuzCPa5<iY-0#b4nFq*2})nt|G5n5@A6s3X%Bwn>|IWQtrp!IG{8!
zhn|1!DtFf#>aQFxf?1UzJ*kr_!7>^z6!Ifo9`M>I$$F_%zRXPwNBsU9gh@0Xa(Mi2
z_((Wvx%|+MWMb42A9L$_`_<DqZf6~+6@5IUAG%Yc3caU@43Sikb$k{jipa=tXN^`@
zv;8>pHT7fUs_0zDC%^)PqXzaXtSBx6CC{zJh0={&4N?{#f=$@6pN)GOPSW~4J|c}=
z4f~v-q4o_cu*3osA?0{?`9b&HtiEu_lCt{EDUB!#9at&!jreoh{YIF5`jEqLRz_@o
zQQkL+uRZJ%3AxM3(Z6Z^BY>heI8jfr#2nNU`^fwI!p}!C$JJx=bkEp+uJnQ&pboTn
zucZUMqFTlug`Z3kLoxz0zSZv}qf}n1e9rh+oQxB7e|;@X;alQFfZEr$f3de*5QCzc
z`BRggTU>mx($#Ap?me#yN{)0<VC7^i%6;Kz8}*?VD0q|8G-6a$3SpzPj2h80c-eg(
z9GA&HGU>DGrhk>n*bFWalHvh`JSnX%Xx-cdLAM|XQgWtdg7or%;fNX;RW@G-bRI(Y
zGGFya_Cq>ZwHL}mf8QMFMNJJAm`ninZ*h7)|9$Y~cP(Ee&4Y()_3>8a$q=tG?@A4P
z>G(l21mx_Me<2M4Ig;S;epUFb#?jcYvIh^{*|Ksu5)%H(v3IKlMo|HV$T>d!^-#J$
zDr~Gd_7<Tlo+&%(UYoC7W6%UP-fVJI2CY7&;-C<NNa2B?YWkL_l56%b*OXSL-zfBX
zVUcZ4|MTBu>VO>zPV|F^xuQZlMem%|bh-Hl##!FVMet6qcr~G#*OksI!f%3R99GnA
zjap<0Sv16EGVcC0tTM7*C4XC4YbB8M;Gx(awWEr>G+>L8(<n^YDE`|Qu_~vpZZjF*
zz7|W4FhsCMlF8GF{cxGk8W&#(9gG<ZS4jKQy%DQyJgQf#qW3ihC`twNOV_@Vg|_l`
zxoNuN3*{>gxZ;`I*Gn`4x955Z!Qq=$h47~dwaZ{>GyKKlMp>HTkqf;o(}v`r<@2>%
z&)c!`j*5UGD97;7NZ8VY{Ol;y@>pnBO-9)}Tc2;ln07aio?O#JNxJX57I3BTz!|Z>
z6ux;FzfLiJ&U%Bu^xD^#4}W$21;Dbepng60P0Kto#gw@u@F@s4Loh=!NB_sR;T@Yg
zl6aCc>*w&FjlRsF{eN@qHZWyoW0e;yEIkUabsk(Xs@Jt%5Z|CXB4Be7vES!0Nl_dU
zKLozjuoO#qT77Tm(O;=uj=Y3FuWu~U&uj?!^YvffQFD4FYsy90cy5@l#hg7zC|LV#
zF%!!wRewr6X5k=E8`V}AsGD|-bFHBMy4jtr)^}!G^mTfr(lpHrD1C=h7v-TBcc96m
zlssjrPis)Uihh~-_WUYZY+1t;uMC1=PXUl~*ph>wVBB(`B^W>NYQrwTz4JT;dktu(
zo7;>I{`yKioMo5BooT(1Ijo^y9|YK?;WUl>^Eb(DctiI=;gXtCWeJdLva;;>fDC7N
zH0CKNEs&cPd@oNNllP_Dlhq<mRe1Bu*AuU`+dx@bj$pPT)vrgRddc;%%F7lns!*Cj
zL0$d+UtjI>wanQI3}j6(NI`-_YW>KXzg)Nr24NqBB{m$72|jEFiqmoE(~-O4OimvB
zu07sAp8aj(Fivw-fevNsKI=D_%t;p8-at4YC0;>XH5*6WrgR^kaJveYp&Db=9fiw!
ze&lfrasg)Ua-x7sx8}p+8l<vGvhp8bPB=$3rlblc7N?-{H&Wrf(|;sm$}X>5cvF`3
zT@0Y7Q|staHeT=7|0+SxiDqNnvRJB&hH_p0)=AJeZy42U7~5{xQPJ#+ABxFzDr%fc
zdyp&2mRvcCrD%+H*^zoM`}^O3GH{xxNveELd5Us8O3zZuwkSK%74CaCs;yqIgM}`!
z>7Hp6YbWfzNpqh~;n<Fc-!}saF>-oKahFZr?i<znS{SQrBc>#X_JCTs>*Wh}rT7rZ
ze@|PUnmHeJ&U2OB;8u4ZQ+@EY%pNGm#A#ZjfU8k=oIdn3NH0iQu3=N+z&Egc?cXG+
zvMTBxeTQngaa`Nuw6$R+ZE9TD5TK=x(8=yJC<1l&jS7FA(tQM2fpL0;mvT4m>@@IN
zZmpRm<@GtL3gVb3o*rv&oj#04TO(0pJE)kAyr{P`DJO&Hb^4oYrpHH%IQEABkWgk$
zE7nbY^Pb<i$2PIWwS(lA=qn`V@Vg71`z{*Use#}1XLpr4X`I?pLvLJKouJQW$M*OC
zp<EyW?f+q@A9?>Ld4+I?7n?_UCAddz^VDh4Xe)GiG*E=V-GUVQbUkd=o-j7Jq>n2L
zAUM-=y-qJZH_u&`UM!6Owg?e+;`he-^InEz$v-c@HzpZjLzf}@yKGEmZ!?q~O75$v
zkfnjy42?2RNcRQ)AB=Ef{w@!tX8j_RvYmOLCHd0>KwFPY+G8xXMk?3Weh3e3hcHJ{
zv;LfN-_l6nRshNnAuKVI){9(!^0Ky+B=*nr8t8VqZ6Rv^N7i@8v-yQ@CsIOHtfIA|
zNlU9}t5$=cwMx;}s!i>^S0hBr7gei+8Z~MawYL~4T6=G?x7wqG81Livd4HexkN599
zx$pbj&pGEg=N{Kpb=WVm!`c=h>{ZGL7Xxl}N8B4<N!S~Ifd5b;?2*e~q;`QCsqcP!
zJ^OOm$-c|SSq4b!FCB|}?aLOZ4x=z_Ua5=E1Qo)=me<!JVS@Q-$=IUX={{=Y3tyXi
zkIb|I^5wJ?Dco9AC#Ysx`)*VwJ3#!i%*AjoH=#$|qKnt|od04%0HMw(vfWyL&J8Pz
zqvezxt@=gfNe+;aigyoe)|eQ6xgLYLPKYcjQ5Q31pJw+i-K$*=viIwhN)hblGx@DF
zU_3QFYIOW}L&e^}mI>`4`gY3t<(3py(^duAtT%1vU!0qGdbvK=cNtJd4Fu4-ZW>s<
z4CCt%AJUL&SP#VF&OVcw+Q0byx*E|un5!vu4t~Lu;y+l}gJ_A=wx9LzM@4^7_;x+~
zZBMXHS7`<4IMK5pv12*eKU-U;x60G*;?2+?f9jXta97R~OZGin8{SZ!WV5f+T`>~)
z7-*Yprk6Fs<G5twEGfpL?@J-YZ$0WVFFQ2NO~nAN=rR2lxC<W0FF7ddB;(Ec1;%3i
zWHVFbn{bN<xz191TSYYi<H<UJj>`yi^!t|&t|qs-w+l>-QGK#3?fLie)VM{ni#Jj9
zhYg*h;C~J-9HkKsoQg?idG!=lod}}Y;ITQ*9}(}3k7N=OOHi9wWroZ<eLcjmIZL5o
z84;z==>(5a$<Ct5z8AX)EuzW~Md1<gxkqZcfHw2v^MQZkByEiyM&lF*T@Dp-d)gZ5
z-_-9?*%<`u_L5oD@Bd3pxgcyU;$~&3X034nWiZLo3EIx2pA%DX7SheRU0_x_EV=SG
zF0Vws{=RP&3bwXp%m*qZx=1HM-{s%)<UD!$@mDX%{N6|EqBEh`c9D|`#8&n|fE09x
z;)Dgb@TmZk&oA%7$yX4)p4qxj`}LMScHREeBffV3Z`lmqvL8DoF6<jq5^+d$uKOB}
zdGusM#ze~0`>f|?Nw@hn2aoR#zUsw-3k;zQw?A4jo1l-8viS+&xla30@$;of3V9H_
z30O_Men>TdVk<k7t!%<iq0II@E~1osNCRNx`V7#y4CvS0_LNCtq0dgfn6q>UG`>kl
zq>t5c@YumEzn^zV?6|N!IRKq}9M+Ld`ZE|hHOi&pRqhs*cA3rZ5<5yRw?jN3K@;!Q
z$<%$PwFv&SD@047;fKdYL;&;$`}vv2l?VCE*VH7D9zDVcqZM@Q(~1Q9DeRLRe>`SW
z*ka5EPznQZ%q@AJS^;a349D=(M>bF&COho!b*1lYM<95g^|uj|t4MbruR0~Wlz5i8
zCl&9^Z#8YDZ&Wbv%-*7fG*W`|N+a$=@M|oDWZ+;J-))*1SYwl|4k7hvzK~Lz;^6|K
z8X9R-L@~ykMJB!SN&mqH<NaDdH4qN%&;(LADKca1DFvT$YO@STmdm~Lg%P?d2@V!c
ziT33kT#hTSL5T8Ned!+R>ENbU>8lrmW9l)fqR*zwWjaaidScc90^70fKNHp<&2B&_
z1A_3&B|+nu1sikcEP2CxH7gPEa{AHV&$j+am@5w2JdstR**~b?{58sQP~{8;Vc}7u
zsH3lMf(~K>Nsq)k?P`wm#Jgv>)~2dbe&3*HZhTw#`Y(+u^0Q=M!M*v|!Liu3DNPbj
zOBP-lmMLRp@_1|f7}4K$dm3q)w@&sC_5o~QM4$&-1W1jDPi6hS>SKh*m$Uami|7Q|
zc{t^?O1uYxr(86LZsX0A-s25NeN7p6Z*54pm^`J@0mWSU2iotuW=I0KHb6fDx6GEk
zU|`!vS?Es9AJ~&UDo{jgVBf8(VK74l_to1rV+8wqCKD%XAWjLFANH4B9}}R(o#kN!
zw=tFLK|C;H0xwrn2o5U~kXUtQ3OZ|i8yDbT{zJd@t7r24$SN`|z=d7ZT-DeVO-=?$
zN3eMG`@-K(+Wn;}0w-3FJ^_|qSTCJi`uWzT?+FUg{7I}`x^3q?fb?>s;D-QzK2112
z1*(#n@S?#?d?oylPxFi>JLNALZ~zboo$JnUZ~q&bF;-Txn)*mpyjBRQz1*7{P?<HZ
z0g1knV?jo5d??5H!}YkOQYg2pguLoD%8Lg69i-ym{ShOPAKoTgLn<+s>m%v~sT(Mo
zwg`FK*n7jSeTQo%Y9K%dGvWZ^%7n5!Kz$M^(KyCeyst40?-9mL?q9N9j&<(${4P76
zrfUaU`}vAasee`cL>Cp+(jN^pUA?8_vJm4R<MmLgc^x!a{yP7YEY@c9CUx+%=#e==
ztl?32%nNSNW_;$Sm3JDqr{%ocUL3Bn9v6-STCXBH<)xNOZK52DMbcHR5?oiE>(Uno
zdbW|jyuQ-lY#sl^%P3|NUl*}6-1@mTRc#6xodK7Z=gm9@yJ&IQ&Im+3WGr*=ZKic-
zCBWr|O9}c4A9&ynlP?K&p!+yOS)8#tYK6e6B<F2Mb?<y|*mzkv>5-Kxi-R3FKP%+r
zsY4nAc?n3%d-~2fCHp#L04A{@%0@q+xz<l$wTCzWf6GHX69~*GHqZ=5yjyivLw|Ps
zm|)?r`0)^D;9SI}Z*f%-H&lVwin&TzvT9A%2}bir@ENT{`N2XDd&&FI!E>OY1Or)=
zQp!F~1;n!=Y7J5Dcf_5*9s5+Dca!_Ag5VBc9Vb?(qK&?rmF?}j65MQ(hDR;btXx<J
zf@5JH*@SJ3vaeKjY8@Ps!sMo$AZruozX@s$nC(EU)_Dxm*!LT=THi0;AsYg{;+4)`
z!#z&%{f?wZFH&PK_k`K+Z<!r}Xr+!b@hBoI_OTLqrvIB-Z?iJnzp7F6d>~fhZts=4
zET1RuGlRK{9@!_G?S!*)nHGwOaWD8jj%IO4sk;4)#cO*IEX9_I8)@$wZk-HXq0FFO
zbHEvyfut`(Dk5%6K*GR0Qheh#KXQVb<G@RNL=l`N<)^KW*PyjRPiXn3Z>OkLG1RN@
z$=i=Q-fo4w59no|mKCj?=V70g)7m=~N?BR6x|k5xfXH#rf1R}se@fqYddk0an&2_X
zntr<#N@vEF)Q9d%Cn&D?cxpQ1T#hSLwWsprV-`qmTj6rcL@~;7q%z+i-s%J7l^RJM
zG3Bx%wAadTC1;sL`De<TxgdefE2ap)PZ0I93LSa&+_QpUZ_^9@H|;62$_m6dm!XY<
ziIAoo`LQ427tXv6L@R4*F$6>5FLQTf)N#IE!MeSk0x22f6;z7i!pdkEm}oJ60=F5L
z&5k|D!yO-^`+Y*GbVeBq$f!Lagz9ed8S0quBu#wuN}=Bm6q|o!?cR4fnH2dq0gZI~
zBlDUEHLFaQu={X7NBZospZ^;nWlsNcxAf;~;?m|0s}+vaVUb-sC;c*_gj+pq|5&uH
zAGcVkTxkcXNPs&^$+Or_5wnba(Vzq3yBrgH#LKoj<78RUAWd6~z8~5LEE+PsH37K4
zwR<<%Hn1_jO;Sbc2?4$f)R0{N<II8Qz%V%wGP3sV`6<uN<K-ByCLTME_hfw{Un0ol
zItnEF7_xW+pt52KUf;3brQ{WH0e;Qe`@CaO5+3pm3ez_%l)u>k6z)7G_gAQiqQDtV
zEm3|tTeIibavwov_TA?{eOH*idSFiYpiuUtS<bsO^xdrY%#}j(=2ukFfO1a6p-d!B
zmwVwD-IWTT^0|_x(`BKW6*AzIXmW#TtB<WFv>3I4^E%wt;$-n_>&4zlDF<IR_^uc<
z4T3kTTH&swzsqNa8i=N7>`RbWfW?-@aOWJ>z}{CB=J4@D-oL`$rR=c+W}6WDFAk${
z+h`Ak8ogdXF&AQw*a8dTXByK=BvOAKa1cs89*z(e;6IvsEm{HIDa&>&NW^e!X&jCh
zN@+QwzcD&CV($<izNWnWv1=3jML<g_`vk^l+s8UiUmpr2_xXZNc+5cT*~ehdO$t%!
ztVv$KOV0M4=)ze|5jcJAoFJFRfu{fgP|c0lefXq;@5z#8R!{rLmjmnuvV(=2f9$(#
zZh#c*75(Oz5uXkJ#&>O152a5-K!Wvz9QCHmsz40x@Ciw98}Gj<B;5D)4?zZRucd$+
zbWQX4?ibn%6)E)(E$gMTb=W)lwauP=#82NKZ&c=4VoNokO{5m@ojp|Lnar@9yr~o_
zG6R?a0{?&AYKXGqwZk81xql_=HN4}Ri}4<(EDyi%CkJ?!?G@HHpia3=)KpdumzB#n
z%Hxn_k_~4bH3Bu#rhqgGgb`;eTPwo$k)!CH;nwyFg$Cc8@5`&jsqN4Iy?j``ta&w!
zj<N`N5`xHj&)K^2Rhx>Rw&N3bW0b;(X0$cWfl_L8n5Xn4Q~go2y;|=yy}@5YWB<tb
z3*na#M(WE+GfVg4unu`Kj?i|`5+MnP_k;1*HHP!^R;h@-1N8Nlj}AO#d~;gyQe-aW
z?w6K0;E$AuYVPOzitA-w&qqd-%WsZ%XLve3jbGqpzLk&^Rnj-6QqABYw@a7K13XNH
zI5GS@xf_yHnLU#mx?p|V{{Fy>q^eDWA39T`;PV&>aumNGrJ`l1*^~XP{i|`p)oN%v
zyFAxLxCx5DALdhz<~@F{E%zo!Z!e4XzwTcQM_yO&ggmx;Sn>+~0)LB9*Y{1{S_Y{T
z?XXkU!8izib}yTJRm^;o#qVmz%j_&#4W5=)sott?1=C`s1(<&Gw4A5kAGr|#@ze;c
z*Kv&k&k?IX*Uc8B_+qiBYK(_xcq{s3ZHbprxwMBuTo<{uXt0#>53B=1=dR|9tYzhh
zy>Hi4!twzEXb{;iG#_z?W_BK<)T9vo{F%Jf8hhQFr6A5}J|n|37VmxNA#dRf{p(xf
zJ}$cg;i=>+-J7`$O2eYxggPD;lob{dj;*6S)#W|(=>d6{5%|T4kDmMwQ^!Qr9v<dx
z>_AFmtenksG*2Cbj+4-r@4vqSf&>s?g$Igx=bRvC24_+e5ExK=`LOs=<h!-Q#Mw!I
zPZe8T<@c@Y?dBc_$BXv?v9yTh%FK<LM7M&Lt>Ma&v19P$krbU#|EBfM8TQ{){Ssq~
zA%w&Mx`aOGR0hrXFiEXQK!zK3=5Q<Yzr!41F5D!#+Yv!Ay(G_^*RmD@DfNufBgF@|
zlds?)>^#?Tm((VWal|&!4QJ5Y$I0eVHGkaMa!gB8;hl~edC%Fp+}s!jz>F)%Q_6lp
zKAz}<<bO{a9yPqN;6RaA1NMD94Nqw+N3hBBTl<&pEx(fhos23!^W}W?07nydfTP1%
z`O&3PzB`_A2Qjkk;ZsPK_pt60vLTc8Mk?+_xvkqN>RP$~?KfxkEndt{Iz)%k%e9!p
z>4%y9J8!nWdcdFU`RbCnbkPsedO0dPrq7xR4|vacz;)A0mz)}ujBL|dz&B>RnY-V;
zO;@0$(m2QGoD|PEz;LumlhY_wooT`X9ORhhS^nz%r;2^D+P&8K&9iQLT!1D<<-hgF
zVEt#ZfLa)$zdNUMgUuz--PS~WEN-tUeKW5v!|}6wtY?}$tg*RGZ6jw;p{|yKuzpw&
zSa`m9H0$*XD>u--&fw>Bg%BqB{zG-$1m{(XUG&FpPHbl13WmCQgUjO-{uD0&No60<
zP!{E?uQ4PGXJuY2EP4d?(_eM#q2VvwTqX}^wT{3)u;*9uQWzf$9S@$a?%#wCd6&`2
zda*s<Z<l9(8)?N&c0OwzIsUtFmE=(Y(N|oNoK$0d|5M)Gh}UC!gkpo}+h}_HbV0}p
zGZ4ECC}2PwF$TBiNQndGF}FtgJe_lZOro0;nZ@Ms+My9o$}gwTDtWdU+QMUb5SP(W
ztw6Gj5h_09{e$CXkSCP#A>%#W`-KDx-fjBE#%d%@-7u4Ebf0svgzu#eILdfDUK+%$
z=~T1n=lGPU#eeL>qE+C<V(@~^b8pt`sdN%x03(9*H}o?ZVIml!yDV{vF>vn&P5pIR
z{3b(Po-ONkIPzvJlBpLo1)f2kZ{jzWOkNhtZ;J#hd9^gZzDp0zAF%@WUI|$`3{3`Y
zk<a;T<z#Kcnx6b|M}h*NG0yAI=U^KjXprndDBD@7%%A9M5HhP2%&2hs?6zzm!9&&$
zla#jbid;7Y#~r$Yp&%H)Q{2O2{^QQe+SL?%Am7)m0JqjqEq~YCRf=uccORYlL!!wR
zdOh4p`%%|?`pow6xXjyp-h&2Bg1!5lo_b(JOvuv|jbiP%H&3*tc|ZR)5--AU<qJz|
z1;;Pv@(jGX91>HQwR|7ARXuq(83|*80_owYVIxt&e8v<eQKQ|W+f(>0|E*ROAE%}E
z)_+Pk=ujnQZME4$DYIfI(Gj&no=_}W!3y7Ipbxp2lg!9PsovF`6#3z?(`i){Mm<<*
zdaZC^<0sy|Ge~#l*yMP1yY*o-&Bzh;EBeo@Mf*|p=&S`@*Jr*__BH8!Y$vqMyOd|<
zm7$l&;WH0#bnm9txHprUT7zirnYL&>EN0OfZ_2B2xnaC%6CplV;9oPI{#PC2gJM$!
zlwU;*q<QyOB+fRk*5hnVkUW1$2kO-)$dO*I>=CzJHdxlgqc2{=x!;oNmk9#p*YB4I
zo(GCI%&@+yvHj=uF5Pi8VTscx>`_zdYtZ%2o^2!dwWN$Hi)P3P8lgNfB46JCxL3Rh
z+iX6hrU)tOU*6@WKta{Nb;s3l3KC_ion4nso__B?`gJ*_&>FXBIy3JrNKOyRpEeQy
zinb7$@@t4yZK3mG!(c(4(hRXGO==W-8XomR#dJUQXHT1eXM49-;et<q^5Mhj*0?)s
zt~b0p9*6D!$tWfW;f(U^f<`}j@~UO_L;)8HZE4Txe(9~=wZc@<%)39l1L7!k#!gTP
zF3b$3fCg4Xzf4qiAA1JTSy>z<uvYpu&2#4k_m<3?Js`z<ciclBXRWRqRtZ3c{!J9j
zkJEpiq(FCHX1FR9Co&R%3E8u4ynBfs6LvXN{1W|CWyKqhUyR&q%6qs$E_WG?j4zc8
z<ofs%@X*VT7vo_=bOip}G*rUFV;j=*=Bk(cWG%02U<ksYEVWaJmuIhD#GUXl7COoR
zB^ahfuzR{jVoT`}%y(hG^jCf021>VrDA#K2yD2yW1(da;@b!&8&$(iGw{|ZBbQgC;
z&yyvYTOUZIFmEQ-3Ve{Q)~=1>hCBZb|5>tlnck9UXDKZYbcrv=yry(4BjarKH4z;J
zZ<O-0x3wgo`yCnV^=pB;C-8t@Ly0jltbn!G5FI2RI)Ok?f6P{Q#o{lmWBQ8NO#}2)
zLa!&^-$5U$%E<{h^SjN(`ijE(WYF+m5`;gugXt!AvKD;0`CT3-3AEV2F~%BIdzLyr
zwJdMcr7Tb8uHbh=yf?{bl>DchRqe!g@~S9pN!$5MS&<q{$dk?EW&gE?+wVim#w8;!
zTy`DNKNUX*A%#8lPf{@A)2MHdm1s!9PH$wNf{s(L=u70`wL=S)aT^i}@+IHnw8hwS
zeD=^+oq*M9kjRsj!5<FyHQrdB8mc9rahCVG8Qsq>O=r0PWMLbbNh9SIKAD;-$hk{^
zCU)d0__E^)L%jj>)4YBDvor9CBX-X}(d53!fkIX?uDwg<WR)C~b8NZWTl&Rd=k;uF
zF;GY_?xmQ37*0}V+c?6EMI(dcjyE<C%`5!pazo{H|9q}w2Yo7B2WMCd)90^gqw)66
z2mz&xy5X@+O#M09ZZU9}tpS8pt7QfOCU79hq%hCyAWVYln<H-%MsfRvq;Uzg82-gA
z>rOOmWWkl2MGa*+BA$D>7&=+tpk7pR>)e%X<USI+k9{<HWo=zMw_t*o37>!WH}i&7
zwcl!lDt<Mk(Rl)2@PbE)+pz<KJC5H&=<K5oie_2$&xN+u*NO4NrsxY-b0RRZ*w-y2
z_wdRS{D3rr;E>^Ah}`zyldS{whOT^%6Xdkd4(fQ7s=z+&>|5tIuQv%v;E7VFLxhOs
zv1Dn^fGpPA>2&z;z(or}K7}<jr*NojEbzh#qw~t|9b;t9j;C5^YbFoNv;%3*Std{a
zqc4%diX?j|RsqVnfT3#->R5-;&)`qNHAnPXGmk3@A-V(a<o<algFDr0{1-6gMS+Y~
zDdf(9w*{xpYE|HC#P+eVXsE}4wS`TDcOKA@Nq<9!ADlmY#5zB7omjZObQymz1*!B;
zYhIi<J2W|T+0i_0OgDF`n^CL@WM6x>2z{JG;&Lpk1f2?%EocM}4*|6fN``<v+{lw6
zQE!QFhng=ozib`PXk#t(wpN+el01o6)s%z7&^p1WhGeA=HU5VMoNNIpjBD$Uw0A(9
zvfNXre3J!xTbsfJTl(x(_WENopUFS(dpFqJ^TYDD8n$G%QF~bMDLO>+kiK&D-ktRe
zbs+HnR|C&J`zd5|m^sd4ukA~L<NUhR3^_YW`?lX}0k*SELWD8?T@KB#Yn)P+h-eO@
zB4V6zhsCurwDMKFD0g;x^D&%J>GqF)M1?1J@!<C#778hEdg63a_@U?L>4UlG_fa1d
zuJy_&q%)dHUrry~f4^F$5VYK7?b>Ttto0@;tY{KoXn%WZ8)c}g=p&-wnJ07+tDxZc
z#=mSNm8=oJT1lUqKA>c$h^X6|91gKJ_lA4cn~$gjJVD$=@6RO1VXqslJDln&l>p`L
zH~1cY>Ny++d%I=!ZM^aKyu+x7WS7@DdNMnnXY@ApXz;LRM5%%?L*afjpajAZRJ)p8
z&E21;;c`$TeN`+H9m8rSIJITCV$>d|agaM!-u=t(P06&fW^3eTRm<3(SibOLL3Hw)
zt*LAwbjjk2i!7D6?Bf5_!q<Nshm?mf=0Le#XEv=~YIHg3|6-^WQWG*T@IO=!mpBru
zy`LU+rR`bxq5k|l?x?OlmX65|jJfK@+yCI|>(79n0#u|C0$f|Kw#hV@*{c|v{iwCj
zjGODhDn*smv3!hu`xskgpqT(DuXRgsRtn8y&GG)*5@ev8waF&tCp3zV`bjQY{?>zP
zUe&@vaiiaWkQCKp3pgWxxAw>!@7cUyMXq6<lVASD7C_1VZ8CyL)E(&YPA4h~|JRQ&
zCjwkBAD*xDBP`gKOC6BrKbv}uVr=7@w~q=mf+iqq>-;3p8H>LM##RA<?e}XHw=QM_
z8iC}qmwMsyw6H4d%T?izi|r@CrTosJ^1W=>+coVT;al*hsVwaB+8G8R7h!xV_MXZ&
za#EX^^`ilDW5K4!vfir4dEiKr=NL2P6QJoQbi^Bl+4kHpYR}GRv!D*ozs(>JZuQ1A
zLApvP<(t~I_Yxi)Wo}(I)}cj)GP5t34D_zz>p%XPPTz`pEjxMO3D+Qu`yT_pMjxOT
z75kOQVLugVYZS$4#zr=O00uzWr(M)}oAs4XgKYKP?^y~R4gS|se-D}!n*M?R(R1Ns
zMAOotpSJW43y1Za^_kU#Vn!k2>&DG>XXv<gJf>9e4PkPlb>tpxkrW9uJ_~X|tG93}
zrBAEEK&IfrOR|)^GnAm~Z*NmD?<>4jI+{tPc4fM}Ob?0W5Pg3v0UgBHx_~dyD1CZ5
z<O51ge_DGNKsZiJg5GoGM0Jo~E<}K5Q5MVKrn>(Qm>ndD>JQURAE61h{{qXKAK(6r
zyY+-2(|AsrYY+`r8psIPNCQ?MzhrI<E0c$Oc2tgnd@BH^592yHP|q@<sz60$EB~4k
zcr>rKWRdFv44#_3GR_NbwAGz#Qd;$l1>AlT=Iu4MzWY;<0NoQh<Va&kL?mRF_AN~;
zK^-~-4~ejPJ#I+lGyeruAJ~hd1&|P^gMx=*4r>gu0e=TGfZvxqMnoxs2vpP(U!Q9m
zgZpSXui^4vjs*|6?p*bHZT5=ZH0P-S=LZ%oahO>Aqd5U4i65gnMIu#Na+PRCOYd8=
zgJd<|SS5V2*JmtTUxk$WZ8C(}z<{&-)y`EQ0i;m-THq!z=9Vm%9^;>8^236|1K!30
z!?xMo@|dxNV-e!E8eEq@vHx4G!nNft72)r|({+Ccz))$}(eDO?V)|GLntIl$2c)(U
zjXx`=e5siIOfCnR2<lq@qS9kw{Bi6!4`o&khrQ82PUB5vA??0LPK{3Ij}A)rJ2cGu
zs%l5yIS>5%{4n}iJ*&XhgRakar@JG$V2RZ{6f8VKXE(B+a~d*n#wby?ad$O{n+(r4
z{`}^*_>*$ma~o|YlI>lwJo!O`Ao1mTg;-S16X;{!mG@7QeYX>1gALcCFjs`vg-(o?
zx5Mv#0pLNzmW{R%k7oemFS8TSW~|KC`Op6byiY~yI5If>*(y4<Lw~zI4-mqK{EgRb
zHuT(N0bjSza^2tlS~J6?!DzN^$iEDk*FlpDTNph$e_MTsfIGLDtUqO^Ab|HtRI;L9
z75Gqvn*ujgM)?<#3NG=G)fKs3KRqM}VI4)?14Xz|f)rn$pWDsbhJ?iE-uyPUahO@X
zOUEiDaipGh7L_*@!pIYw$hk}krxCv#EN?)*?&U&fcH9xfA&HX=9l`i$+ISu>V3sVW
zrbY5f#txh4@!f_Fz;I~U>j)D<kHQAAD6jDtJ%B=VU3(cf{G8UgJ}O6@MM*g3s(X%+
zi-<P8&E4i#?kV)uGTOT$n2AX6KkMo$4+->dvg1Tz{VR_-N`3cPZxolC7ncxvZ;#Du
z=pb?N7DW=oPZlnA`f5+`qxX}W&vyk!Bx#TJm2SH-;3VcFOI}&I-1~JCbi}xB$K>|3
zt@(*yz4POPZl>iTx=YEJ6~=&_$78|PE_8G6Z|&6GCb{`joT$b`G%k1j0q-aF4c-|P
z{9I91jh1M=MY_}kEit-ekH;{%)w5c^eH#T%qtrLEekXoD)$*irViU6Wif(Le33O~S
zQd!y@6$SSj;y<<jPfB^M8V?K7W9nRgXUlClZoT_+XATQDdu+2M=Nejc=u)lY9z5C9
zo42ET+imOOo_K}5Xu$G)$dAA1ETh|fT#RNUY*v8h@{?e>=i&4+AL^|Y4T(4`b(|Yv
zZ3$`$E1W@x3cuT2B3w6Atozjm8l^TFp1T5vhDUz;kYzYINmSZPvF%(5x0Uu6Ay&?|
z{yOikX{{ISON)<|&aY<|5uy2ynmsu>C(JTmnln@EvL`$w#LSV(MOfUzslx!x01^v_
z(6qXpb$d0_s^-fY3TOr%NI=u9x%je~uhD1xdaU%G!mQV?AwE_|BCQcbC8z60pl>ZY
z!sm=3f##DT-o2)M#d@&Y+rj{y_Uza)-j6ybS_@|5hzZG1paqnuvAK~R3vR~3O}AG{
zp}#aVCe^+$nsu&2N0delXoUHVxZgLv7I-wOE%S&{rL>`XFR){d)9d0uN5@_zln4tU
z20(OvgnJF*!KcYLwvDn}*`C&Jy4|XTnUX)nnR!9k+|9nHJ%`2#l{d{)kx5W*tESWJ
zJ>?1q#ji7D$0<Iz+q*4WP|BUcA5>-Q@yjw=UKJ@T&;z%SalZ(dG0$iq!t&9AWr#_m
zUj6#7E_<0nHcm-Cj*gB-fp7lY!>3Q8z&V$EzM1Rd;_-r}ciCd09taOm5ybw4ce~m&
z{5<5^M;J0vYE43+!2fhR!I$JD=ZM1TK|3_*xqV|>nocKV%SJ7@7&Ow?<GC*12GA!H
z<<&slXY%icUT1>yRLC3>RMDK-Q6;|nEE=od1=wKTG#RPD@L?Q5RTln+*?A#hrCCK4
zjRJ7S4c-mrP)77p->wyUVf*NnmLgK$m4_fy7qok`7g{m>?+>LKCiFr37u)-R{`U4D
z$?E1Xs8!v6hH~28@o=kM0T0KKbt;$8M+GNU=<d9;EXkj}Z!teT+<)9rx%?T@`6+(U
z^3d!MAAkJcLFmEoL84TSo;m#1&<BQ_bDEL2V75A&R?FVB2waV463}mdL`86e^aLf}
z#Jz4A6IiQ*e*lh6W+U^Fp2df^K3s-7khIcegLkFJooD6Ab=_AxlFqnbZVy;b;FwoS
ze9f5j4Z*T}HlMRM=RV;uYxC5+aqG80pL7rS#B+Td4mvwSfIZ;XL4Yslfiq1=5rEUY
zL$xd{C0CZk)wDQm-=J0zIm`AiSe|1x^g~$@wefbU<Yk1>2Badp2%hM8vLYn4lEiy(
zkj>gR!#&WpIyu_CBeuhZGoh|`H|uLEeC-aq3sv8Q2Jz6zt1jNpz$w0^jJ%c`kU8y(
zlj3v_%(Df~>K;P{O`nyTHsL1(y#0cE7N=!O*pfky_phJY8{iCVB8I+7O6Y96cn@yM
zrRM`JrH-3nA6sB~El|t}IcgqDR2EKUpWfkd8$|I%zrG2Kg@JuXSl2++Mbg~KT_8fb
z(hAhSc>f3GNL3VbCMGHUyXOf^jrJ@5*{^M=3utQVO+*5Euj`vv%-As1Muj=R^TK^N
z^O*b3lfqej6I^hmgZ-<){^H@OUrB8{=%#Gf`2>c{Fns*YUvDL1c{qCd(Y%X6E~kC~
z;4cM9mwthE$?dak&&+4)`TwT&S`=|ANN}1-hrvD9$;UfKg?~%=*#F}qeigZC)y{kX
zp6jm_v6!Hqc@5&8{6}&K)$7;|+>Qiqd@LS;6KBNTe2X|6f;);`M-D<6UTj|}wE6l1
zy}mJXBjMjk#H^SfYRNZ989GweUEjhefV0fl(&Gl7R{UBBd~nTAh!ph!2Y7>#9X<Hw
zXeSMTg*>9T{5F(*i*N%gpk0|NQkEo-Z@@TayfXA`-}UVJqqr-jSnta~LiM`?C!a=F
z3ZiXMXlLFunGbYKUlU0=$Q=Ejj_hluHSv>WFtytyqcU1%Fvr=b$&4E)UXGrmIGyp)
zik>y?ZzN>a*ASX|w~fp5^bby5)rBVD7oumqlyk%i^^}5L_1q)#z-kP_h3s$HX-Xl&
zF!hW_H&O!cQ=1BWEUiIBK8}SJ{S^Ji3q6v$<XlAk;VR^e%dGt>#d1Rs&m*Pev~@SV
zL1=Y{VqCqI?8#WX!QDs+*(X9Y=Jec95vC7aCD+^_Edp!DXWdTSOIyWr&!4h@J|n+2
zv$!mS{*%lZ6oftM6pbh?eW3J!$MuiN<Y<8}?wL=jc&vp8^hzPQ_+$oE;!|~vK=mpW
zcJJI@MVb5ZQ4cF;Ie5z;e&^4gtUncggHlfZ)NvN)6uaD7&(-iyl6lsOn*9%B5TiN1
z9-Nu;`zvXgQysw(u<eu3LrT3Ko>XSxH^bjGJWmv}yu9?_Q)Z-`0F%s4(z2%U#y0s9
z4)WTM#c{+oAPUK-JdDz~zh<U}0a<!mhid9?x+CN@1;S<z{5tH>3<5vlpnh20T-d=Q
zXnS3d4@vDL+;0tj4MCKtyI9Cf>{Wku8kabSeYqGY$0ne>^mvW?d86Q=Xj8KD&u@>{
zaoe-rcb3D7<_nx{TcDlk8_3@UaK}3Pke0d=G9L#$&OTrU?;;6n2nUUG%fi{!D@N+1
zT6>SsXMz@MT*0qJkoQ8pAf{dvSi>7dF(CML>lg{hkLXL~L3aB=o&M<08S)|XtI8)k
ztgMbI>qKuU*!aJlBRf`&2z_T$ZVqC{VVk7+<O``+<paCq95eImwZ9VQ>7m7;E&0!+
zsC315`nV4h*EQuv$`l%%>mn*930!)qA{8@mF9X+0v{L;nrs#(EQSM)?sUz!tZR@95
zC<CKr=18ex|ARS8T9?ogtz<J-hjUn9oG}7jR}o-RxP5NpIFn)&3r2FT4Jb9Rxw3o)
zYe;A&LBfUMp=?!h>9gD6N88XBLDzMG>I(1=s<>pwusR}m^c|Q;@<=udQPrc+s8?OV
z*879+et7=Q=!3Bb=U4jIs<F^NTsU8x&w@#dX3IRl^!%dzB^~24z9s3O)-9urS*1TE
ziSES02kgz$L6{{V;d7gg%dfG^JpEog1Ld+3gc?M2@^ztg6mau_j#BQYAi`!BUcKp(
zfQ@tDrL>9a4^E`QZ==sAVa)a~w@6pgKUB@!q*!x;QsX4+5+dRJO<Oi89NtMk6gHOO
zP@*%4TecB&{~~99l_Q0j`De^ERMSx>x|M-`jxOVb-%wCz02aDUr&c!VF?^fOcxHo^
zf)%pmSoXAWaWa#Dr3rm#;Kc0JY+mTH#0+o`rf;3_`rT{!R2YM1J=_(HF(uh(pZK!&
z`#^`CJ}trmrUQjtIBN+qpmCtlufCiAY`29GM0H6|RumFDfju=H2cbq<8K7cI_n|Zm
z!9|?$va+hd9arT+bMOG5Gx53P&l$6G(hR#v4-6g=7z#3-$7vPS_P%&zPm7#x4Ejb1
zqLUqZZ<;kFMcB(9x0w+Il@XTs+8enP(+dX3rr-`K0QlxhNX!hI(F6H;9jV7IS`>{)
z#_W1ym_&+D{L@|Q;80*SPADRp&2$}WwPeE%;t3*`ll~a34+_ad4RE=giHxF{t)x#p
zyuhg*cN;b8#@NlLM9`hbv2vx0-!?mjd#^+W6}j#(jTgZQfLmGE(aYVuA+u9X@Ec=5
zraJ=9sZrfJOnf^d%H^n_f>)d2RxOd<m?3!{LuT2Ev{HXShvWX$LNp!o8`?|FH5zKc
zgItWxw%d3Rr}6G37Eu4fx)e%<o(5Krm6>)oj}jjG4Z^lY8^u0u8(l4;e?kc47+Wmb
z<RWZtU#Y0qqiUh4Scu8+*#`g4e9{8pJD*0*<jSu{0o1kXdm(R{2zm}Pkk#TAlL?uY
zQTl?zO*Zfk=)oses40Ak0O=TuNu^&WK6J^^oR26G7{YMCKG1)CZdAEVLbEV$)c<(Y
zn11X1#W#bM9lgmX!sVkNzK1;v%@cO5=N9;Ona$jV4OVf)J<EDnrFX4^nH{kQobPb9
z7+HI2E+}*w27_a+8A9%u3N;iU4a>nDlVj`@;$`39z>3A4rnMA|2%V>X3RbP#_Tj`0
zq3kpGB=0}&<lRzQ0O<c-n)!rFUb4eh79D>6OsDj#_tQcp*H5MZQ7I|?*?ynx6@?K<
zOkYxj716zUtmd4+DQ}a4ak;^$ysce13d|u^IF#}G!;oo$R7hj69&39O_04M|p@%|V
z_$U<7CkiBgpm;GdHjb2+ojd9K?Gr~8lRX&rWhaf~%lIiY6TcBqYT6FK`>7i9jho<$
z=JgM@ziL;u{86D0KR_}Un&RLc+`QcU{WeftQ{e{SmKydlzY>IjH<tkc2v!M?KPEgk
zQqyz~ZpQa8b%`W>e?aL%o0NiC-LAX)_1C649CL(wqyBZ5I+6ZOzPj(*o{&dZBi6;N
zK`<A_6ze|_2GG<$-+S9|YG0vf-Zb%A$^-GJSgF0%xJqjZ2B*7$*KVT*W+nVn9~N!r
z=m?Fk0_bS1<@BJp%5=AgSct4|TQj@A8Pg2=xXF5Pqo6#;D;Lf$j_oueR<sK=MHQTR
z_x|&Tj{ir0s<;)(YKooi6mM_!KbbvaWOO)LeMMuM=U_K;UEc_J5bRkI$~t{nxantG
zcUfX>U(>ry2LRzKewVanKi9)%7ut2l!H0bGZWFfKMO${J{@DYv1;=RosR->ub?-3H
zrp|Bh#=CfCZNpo}Qvr`(V?PCW^Uw{WW*-MPi&=kNKkg~6wiZC`91!oX1o{w1QG<Ti
z%+`-Xu5oAw{uxO}5$F&H#wUW4&<YaYmb4~O#bUR?en=BcAbwP6O1f?21UK7Do9VKo
z#my4%^!*13v=j>b<s9N=4vh-t2ELAG4!vKMsSbC{S|)B!66|kB`I1Wc8gLz|Z`**v
zQ(KA|_Gv~Qu4XwNnYv%D1o*F!sxX+%P-NX4J6{a{;j$8C_f^X+El%zq*p1(#o=cA!
zw<5WuvwJwXT$9%~*9~0`%SdniHoN!{25MMSbOI@cXHD0XOIEaUeB=A?PP^}P<u@2B
z5`$sGsp8lzfBB%vlSO_+6b0ixigZE^q&NVlTxZ{wejSx0n94F=7g5U7DEq+@NI>+(
z5+8pTL7Z`MssqkEYhGExEi~KDK_u;`ah^0GB_Y!jFH`GLY+y!bKcFS>we$%pJ*(a~
zJ+u-7vI36oZ=Ji(al@>p<Pyqtg6*TgW*e%vgvDJX^@ow2{v6daq;a3US=VKzDi`{#
zqiZSl<;G&?VZroCQQl`fDbSEV4`~|SvoIERVSEHou(}KbF`!0{jGOt(h53Ewxt~0r
zK|ll}eGqx-s~k$WgT&ACDXl{<)_<p%U1HMz2W-6IU3!FjK5(b__ETufisfeCb8=NQ
zk2#3L*iQ}sXiB5tR%nRvXqt0fSQ#>D8W+*yMku2Brs1-W0gte=qj!o=%(i%6T5k>e
z1MG56v+bzOH*(dkejfZR7WR&*Tw}f3o8XhC*6nu=wXUqsIpdX7(cR5?pn;Yi485OX
zB;UOjlXKk64?0=9-#?5t9;nfyq==(XSuFE+A>qT|Q5Qcms0q&_=0aDhPPoNvsuRhI
za|^~6Aa%zD+WW4nScL_H3$n$zf%8w)5-9_#u&45`=;Y>Tmh?iV=9BKs2OGnTPWm1T
zq%hFq&%iVkqlRYe6Pn=-3Ae+q`BBx?ZCQo(r3V*R?#;~nNTI1Ch*rH<uQyYCOttHI
zt{VjhdEYfYV^~<*a$nGpSaCV!A9s1D)E-qf!>?bs@K|I@Sp;+i{JZR2&Xo$--t^$=
zZ~mP$HD$s!`Cs&(p1k81-dfTy&tkM~2(578yqH8B?0agowE;-grb7Nd=iZEhVs|1~
zdpS|yZz%`7FcuCVRm324XkNt-LO_>Ipj-EdMshD$nPHr$<uS9~D{1SO%q%bnfV+5p
zGEy(r`@JwMiSn?@&x3cbJoo-4|6wq+6Kzkz!C$RV8yLHFnbK!ToCiQYrp-A3U=S`>
zLi@lL*Fe6uwMKYce^c@BNDuhmr!?kL7_+;JhvirN(agi(Pf329{7fxts>%F_n2ooo
zl8!rK5Hh_U6F8>g)8JJWQ`takV2X)_=KDPz=P^hEPfmXObKMWGzZ-{f<&We8sxc36
z0gi4rvGYHl8y$^1X_<Py1GdWT>mC0v<s9^(;)LfvJn=g2Lf{PaFminba0@59jI8(~
zJsKzNDSCf;*dq-#x)fTpw8%VjeT=(5lJ_c_^mFvpoZyDA>#Pg(Adxy6h$)itI5mom
zxw)M0n}RqP?Yk-rw-31-Pb0av*!{}GqF5XyB-9$W^CqC&kmxlMohdyMH~+ZM7djUG
z{njSmpZCcmD1GU@xu9o0?zJ;-_<lez6Sv8|`01Zo5<0lB!@BNb9sC(Yl^#-zdJ*T=
z)|*K-mfx9=47qlgfAn#DLJOj5{9STF{)=A^aBX)E2~p|-H*GDvO1a)c8&OfsYI=i_
z2d?i&^@3g4-eyrTM88tg@G6%#_m&I(v*j)um*0mH>`AC%C<8}gu*t(qpl<M&O{bzj
zuI0$hkrW)}B7V)qjwX9=Q(Hn?&KiDfRgPWI-->OskCGI!g<Rlz<F}tFu-qo9lBktv
zOTRyeodz9%IL3;6EBD+c_MB#cQ~U{45tNa^Z^86B@r<+gN-Fst!QQ;(+g)%+MUvF)
z3pPcfYl}%)f<kOh*tTco-t0)`CF5VrpF*SQoYybiqmIHYuKQXye!g^X_P`X%z!~qe
z)PVD3XW^z8RrWlGyqJ4-V26vSN<-o%vxkcC3~0{uw7L9jQ1{}v1A`42{1YB*Jn=z+
z8^O$pATIrArSjqtLPiVTi(wtN;RpRC`l9$64I$yG!PHUU&n%{*6(ndZ0->}v!R2Va
z<>SExCQk7_Cm&Wl>tLj$scYU@QhFc7?EAMIz$s(l=P~eu_9tkEmVI}fvD@;d|D)ei
zmn|!D5hUYgmw5ufqol2D=7M8#{1Krtr0|C><mM}IP<;;{<Yl4zS}D%Nwt1&RxQVcs
zu}i~k{K+~Jz}nuHWR3%0kF1RTFX1fxnT<<$sh~IwdRDcpiq5=o{*s(dKyuMaAW#`&
zE<q=V{t>v|rZYe{aSClVu|0gjrpKxUc&g`e5t1HBH1raQVuWoU;3UgP9O%w+c~$4?
zd@K5p+jD-mwKq+3ngd7QD%FJmOaBCd+_(dBb-KOh?A{O>H@Yi&-q_a11Pfx$uK;z=
z-8K1LJ>>UII<qQfcx?0m=t^m!H?3zcM?;dJS1-Un2ls0&qH~VUR6l`^?7aBI#pOGf
zdp3Ir!U&OO+*<d~W|^ylNEo6uEQkQO1_b`!9`(03{%?;u@=V)jD(sbYU5I9h+I1&E
zpWTy&z1~NX?4y=((y<0br-R9D7|SxLooC_a)?+7e#VnAdx?VsQ1=3qiMRu<L4i(y}
zMpTY;UqVm9BLByq0fEnMR*C<X-rdpBog8|ulBfK*aX#xM_Ii6lo72m38gs^6^>-J>
zK#(?CJiE(VFWxIHr4QTXF=iu}5}I=9ctx+N(cW5nAY3law;=!MI==%sS7<8Qj`BCp
zpVW4<=1l$58;e#+M{A~lkV{CcG*fqIf_difgw<d6XI)o(2frYH?<*Y5c*IOB{q=q7
zQ~v3e!cQkf>02=gADO1vtmSv&siG%7nE$@W5mO?x(_fma;Hh6)w7R2EA2KcKhEuES
zpi+q+rQ$uK6Y##*wfRyyazCaB+<CfN;Nw?gZ^T(CVczx(_%jvKU;Mj(*rPY6!s#f)
zBGMWTE6$4vs_zcb8Ei@$7E<rQXLt&9SJzkO_yUBdEnn9SOpv{+=T==0hZh`G*+%4M
z04Y#Jjp~!aCdxFiX~X^Mp`A|$Mr_JC>m<C`S@npPW1{|)#>!<$Sd~Y`K(aAVmfYF2
zxpmlBa9(ye=!cJmYWKM0AzQI2uOc?JmyN%!bRaWdwBc`Ew3$*Ps(tze`l>ngnH!<E
zV(N6`s;lE!AIsGBHIwP-8c(D8hoi0a4&OAF>YtA1AXMsNomeSaLB672_fIOP^NcFJ
z_54SFCVw;M`yWGT5H*IKgE0>kvP$)iq---XML7-(>>O$=WBPRKwNCayewXgqNkOWp
z<l0NW`$aVH5guwm?v|j1R2H~TL@h07ZS6fst<~aRYV3ux<2DSf|ECBP=@}tN*Ez|f
z_w`|!Ao5jQN0d&cW4UhVzn=9li?eUR`YD^Cadt`IQDM-PB}mBm*u67?y?w{9t0}no
zrswgWM&%pY1~K(h+mAH$gUCR>x~}@Qc(R_R<gWJE=OVxhv`Bm6kfYbpo#ms1q|l>J
zBVQOdj`{MPR^zPnR}sd$s4^B%fS2VF)BR`{CeWyBiz>GW#qC=lX+ku}mdEJc?}rb6
z{sBjS^ngtLz4qRlrFBMnj*bDrZC;$ghPb|U6mnZ_jJbraFBggr{7FGB=jtB1W&9Js
zLQGk*&#}u|FHuYvi0~+}08F`pe8I1#KGCqxf4I*7#d}~Y;X$)1{v|QSF;DH-i%n+X
zsyu$Yo=K9jDUxdXJnW`9r}BN!6-6MtOkcPG4LFa&$zPR_V{jcI`FJ=cF3A6_OUTq~
zP^)s=9IyO!;CwD=*@1quVPmbF(RSxziP0fXq0{<|UeEqD^5^m?me%|;(WvyF;?Vv1
z=GK@*Bz-S?McG76;c;$*6Q|PrY2tpx#14`m{_U>S>-%~Iia|P`54l;vReA$!7=HAL
z@D-}o*v!8eZljNV+9a+QQe8TJKZm~H07Wpw$8Rnvdas4po=$e1`|uL~DGfM!2u($1
zd`sW3R~jnGG~QYZnd<VS<#M6g`9k96&0C4|S%khu^H3U{Kl!VoJcR9!1i~SYCr4s3
z`R%(p@i7VA!6Tf2Y<dJ4Ro?qZZHf?Jm06RH&RM1SuKP+MKbdj8^ZnQiR|(=^hnwqi
zg0QW$<=}a*S9_fhUN6U>w}KllEY4f!$;}q<OSjU9IH0aEpf~)W8KyXRt#m5(*@fK<
zNXsQ>B?DcAFW*Fo=HQ;)*HtzvJbl9pu2e~<CFU6;M^joSM$7mU0=4-zH|W1}w1hJD
z%-S-h8)yWI!zE5Hotug*JoSNjJb;@_c`y^==Ks54Hf!c>P5$&rJb(Kd2*|L2eEpwa
z?xR|AmbG_?Q}uw`nXF+Dz6l2dA1^-hjELYtX&t*a(_XpgwqspLLF+!$p$p5LCZ^~=
z_!Cmy5O{5y=B4^&6eOA*sauZIiKaebX<>RPC*@K_9Srgga3vkUHaT7BkWe6|zI84_
zfPrir(q=w`Od;mKTWINntA8!1o=Z@c1Un#=U{g1*7ipirdk$*3Ioa&Z39btUd72Ta
zyZke1?Yx+{)I)UHr3;BP3p;&FGcKU(uN@}S@Jtd^F*6Wywi_-e?Hb6R4O9y=s^=8o
zUy1v+p@D1xc`^uEcBYK?3nnh)dTU^O6tlhtKS>3~#)N!f)fJ@rvOIAT>s>L)RQXF&
zRcw^8RJ>0ju+uWIgGkcV4T0MDwyfNpk+2CjtBF|J@32|@r1{aNqZBAjy(>NES@Hq3
zDuvGoA3MQ_SB9>jSAbWpWSm6#c%#57f6C6p8J6(_P{oYY&sbF@_Z?^u=k@MxXh9@}
zy?ww#k_-4DL2%}w*+4T8_+BGMdlQfnNf1eTj7;7{f-}E#fk2@1*Ql!dINAxvXFv#f
zb13=8wT83v`i6@VP-FRjmEy-$D9);Pj&&;Mb@2s%)o4p@Tx=^>k;HU|m1_1v0$Et7
ze4;QvSqNac%0rkaZkCE-?%oqw(wd}y{R}|$pWW#cTE|mf=9!Rs{^0yHKtvwgRYeD~
zzsxhd0k{4pw0d)30@_#foziM)t0xMzr2{GpyZ&9U?FeV5W#c*B;{vXwSZjFQk^-t|
z6+ix4k%thnS}GmlC+Z!R;l-`Tr?jd|G-UykSP*g2Ug!C!4#TeV@3#`F`7$@Qwae4V
z0<11yUv|YAhj8D-Iy>?IofNk(Wql07I<a_1-MD|470y@lJC#kpOGW;z+99<dh}#IB
z&QJcnn2p5N;kwC{7@W0NepC(Lw^#{43o8;MUuuBy!MQSS<kmR-;GZ}d0*TUAtmnj3
zBxJ2bMrc+^peouEXEH>+t*X>0l4J*qZ|MGQ+8pY~<}c{%iN{EFRtz%;I%g0cr}bSN
zCD@R*Cf|RqSEJKMe%2>b3s2USn{pXXUAHqS(Pa9g^d9v0{NZn<_w~o>Rs8B0TBQ80
z=bvR)DWTPahT2)}XiJkB^{?cUuvudx;;vuS<Asoklw@;|CpZ6nJ$CbgGoF_71BI$v
zPJ;rn^aV5qW^-)=QuwzXc5kt}ZO=d5t9-mQ#Cf3N-;*ku&oA8B6F1<~TK+2ZBA0&+
zIVQm3O+vMi-)tto+t3&@-Og*k8A9*vL-gbF*HdH+A-X+5s%!u0ov&d8532L}Nf6aj
z+}XYpo>;%7#|0X$Ckq}lV31Q&1)X7l4;y;5H)irG`&jDAhlfE}FU#%?ebmQ`r2^Ds
z{!%GD&5p^PBG~Hp<W&whq-?A(7W_0ys2QorT}fhtKdSte_uYU*_h&pj)_=3?wpt%n
zyRViJyKi(xrBXVw_RaAX_GCUakFQXC`224n$#LM7<rs&(p=@1;sYpgBpoAT{-$#pE
zN0s&1m5NHoNNGE2DV7ME)InmW?Gw+_#7|cTWFtQ9JL`HKuo(~{pp$uQID3nubER}r
zpvN`~^AfQLT(`D`_3$`6Mz8vTzm1p4mDnAD0GNI>buRhgSf#wGlHQott}>vE0~uiJ
za-7h$;Q}2#F6{2E%kyn3Xp=^fSFUVjX6cjj$X?awc@0V~R|>7exDom(C0dG=zOkM{
zACeEcRHni$IMVmItV|xpi5y8DL|u+7f7*5p5X*_&-+92qqqlfa!#CcbWdE#ThB2i;
zG`{@oQ~n5<Pa`wQF~kTUu5}p4SM2k*r&y`pebG=C<CM%JT;18`q4BI#{GXH-HeM1N
zI;<N|&%YiXMDAa;Si5!CVe!|nmBOmeK5*{^6mcQio`u7`CJQ>(>ubQj`#1>j9soyb
zM(Q1`RG66Z*dgpZ(<tT<bDG!c)7ojIj&r^dqeOU!fuxvu1Q70L`cC<!{xm|0#X|$K
z-WezVP~sxjcLwcpYOqf97%O_`G0-W@2A!T^u`<e$e+R3uMt9=?wcLny_rTGpr-|kJ
z<g)BszA@|l?UcJFB=zJG0?_%RdRBh^^zalkx4N!<SS)^mFiMQsKK7D$h8R3$3DgDk
zA8hmQ`=)?=)pzD7WvJu6C$ll;@M1%Z)(|%}GU5#e(hH9vsu{b;j;ziBQ+TsJusw0~
zOtlaI)gX%h1-$rwpureaLUdx>o8{|L>qX&!JypC>T4vw-u0{wqw-h`GQn&^rxF6ot
zc2Tfh=d&BIPaje)hlOUytQ-db&~cdq7bBuTSnux%TbQ?s)wb@nCfp$T4{+DKe8BJ`
z!M%V!p0-4)Xr&W)48R1Akl<2Nl~jQ%8yic<1iijP)7>#kF|bPWe|Y-pxTe0i|BcZ-
zi4g*FQMy55AWYZ*l?D|NkS>Exi75z!5rRlccStFc0>UWi5R?w-kQR{mUB1undH&(G
zvDf|Fd+s@(exLWD13832++a*Fy3_Bsy0x6oZ>3v<AiuD6kEo+haL*;N3o+oS`io3o
z?LRJH0Q|d;%Mp%vX^f9x11>3e7iKinzz<*PO7%tN_#8{ab6z5uG>m-g6eh<_bsTer
zp!c5-`19XtM}opg03QXO@0GHyNfe!a8__r){i}J)X?A?|`ny*Z8{&Q9_9~g>9X-|L
zt)g>57G$fHbd4bZyp9x@UsBTy?N@A!et3te=xseuSJafoWSZ`hLC?Yji#kF7s^Xr&
z`FiSzKVMiyHo?gGSZg##$xd;@9|^)fBW^D+SY89=fJ7OJN0l;4Z;wMdhHi4HMAWGO
zk%bx{oGMzvvXCLRV<3tPtiW^p6)gOROB5U*D_8fB3oC&;i#_gncYBmU3H!wFS9apW
z)e||>l71y4Jc-o(o28E(eJ+@E_@av$=0J=MUzv{LF{j`M@OI?D%lkaN9Rs*EkYi-)
zg>iDi+me(t|5_Q}r@x6-gr4w(8axreK4n;4v`b0z3Cv!mofq|e;d9~W^cDGTT=H$j
zxbFufmqAp-<!n;`o+^|1%8P#YZ*tugdNtx5F6qxh9<JuP5h}l=5z3{5EQE+~z3d#I
zG4g3vF2%CWNGcX<+lA6a)4JV%uJzL$dT`9Jy7YpB0P!ND%{!iQ{hppW^4&-Kk)~VM
z<tn8Fd}O+!S)b~E*y~pwU)}w2PyhSV+bbT8Z_IwY>W7?m;$Je#1-)*7?lYWxRURsA
z@)E23DICpuw~}hRZ&W9jbNZ`fQvZIP&-vPaL?M@?z(dlKKul<IjX%#=%-l_lJ`KJ7
z&bNae`ao-F=1BK$etJkxs;1)J>Ftz@W*c%oS}^*nU%GwutQoCH8`D>63W@x)d-4S!
zq2MW^B!fU3r_`@g1o2%o%S-r?SS(}v%>wxYC_xH29bG9b%|^l))`WEN5sSx>$4$Q2
z({IHWvnO`{4Enijob_U|(fU`Ff1X%mZwwlOFkd@CaLClapi=MDy>6ck(~!kG%dzLL
zzCTX0;dOnT$LVt}ILQ1b->u}@RE<0F^FM3ckULl)N`YH7iYHXuB{^`1M>!>-zen^i
zE$9h&?g&WW;ePRt9!gL8?co7?E0%0bR4G1J{$rieaGOc8j->s4#iYfev%-aqA&?E@
z?cDFZj$a`AvKr5Aaopwf(f}WrR14V?Qij^|Tt`!BYjyqm(FWbdEB6~ZKN*n6(J59b
z`-&dhaaft9d)AyyV0-X4?m%bluYgp_3`&##s5S3=AG(rS+tloBOmPIWV2oH!POp~)
z*VSQluKaSE&1Hx|3zWY^c{-}?t`tjsvt0eiFKFb!d%<+q^k>RTgpR<59+z*Dj#A5B
z)o|ejwoy?RvIN<BZ05s>OxM_%4>f0vqTD?&Hdd2k_LTS?dHNIWyf8>uucHO&MHV)1
zyXRo8IvQ}W;3?>`R~JQ){~3EaVB%-{E^!S;DZD@L_ldjzKD1YIqMU7ViHq#X^Sh7r
zSo{~jGoplDn@pEK5Z@T@bmpWAefR#}fhIsGU7xz@46jI)S(r|-mOCfA#jdq!e?I~9
z>j33C+-A@(qH{SWdY;fPzG?<0f2t~PNluLAuL)uO{W<Oh>geP%x?OkG&feM21q7tt
zs(xcgVr{#nM8teNBcbyAYv~4TTi!_us}LvhldMcTg44pNqwLuOGJ&tFg-eTeNt(;Y
zU_WEyCwL1u;Adw|3GVzu#&&nFj+cFtHAI4Z?qt&gTmux&QRociU{|F^QSUaTemU-o
zUlwDZca9WXsi7=4AS@gW>b)<PEXh{P5#%QC58bMz@VZ;qX}g;`p`9+IZ0XI3N#z>D
zWZLyd1Hs&hEid`y*0il+6S^7I-dIdE%ca^L%FXjvikvmynJZvXq$vq!9LWAb63^Yd
zcs4e$6vPinr)j0_X&!)xgH`jAEV`x-_l!W=TaqBBi|;MjZwv}t2n+JaF!eq4sV2H~
zvN>H^b+}m2&v>f*Bj+`<2l_D$pP2%}xpb7<ga30XAe+T{mB7hd(!8)$Mv;GsuR-#k
zr`hk}PUR<0wBMLM8kuQhdH1k^A_Q9!Mp<%)hS~VdjJas}gemu~G;r0w>Rk`WK~t7p
zcrtWrQiFlA@pWN*zXoH;-oJ>V{7ah%Qu?k|DzM57?IGYAZl^M72Gh-(Ss5pGiWiof
z!hAz#ja;logR)(Fi!2F7WXx~lQCIFoG7^_(Kh(C`0eutyqJT!Yl!ml1s6(LDRi0h*
zIdAsYseXRf;5<D4-C~=;Y3R3Y@J1ks@9N1_8a<AJ-z<1`x#Lw3j#RCzUcR2Ul(+n^
zEHaY8IHp!ihm7vxYxbrN2kT2(urv@f*Yd}TD#`(D!k1Z<Lak?EDNe9ImJNQQhg^`#
zwkKHOYfsb-D#^UB%Y_G<g3kDxR~opN_SQ0Ou)*eBHLo<x=)_JMygL)m2eg}DOzr;X
z^$jh>-I=L?==@W70GHp^vknW!fV&_Ac&E!>JL3m1<G{DM&2txje=g-V)up-LroC;^
zdlr_z7c@6Eg3gZzHzBF#4>ez=VjyqtR(5K3&3#TFCd%i+cn#tS%~f`XA$^w90{00K
zJP$+duLh`qn;2MgLG+A~&!e-fyds|q$gR)$KdOU$A78$I1W!t5`Cg`U<QaS`%e@Hn
zHn7#juR_QZSanY%ZIdU$@4yK4Z@D0lGL~MLpZ4eVgWa@IyTY!)zAXPeTOC$pJ#_An
zbKC0Th*0QO@q3+Y4Ls4^aZPD@xhi{etC8smiv5YicFHUhiJ8mpDmX(Y>bZ@Dy;ar!
zL$JZZlm6zRab$4IQ6626ziT5we{v+hN<y3?@4VT@AM2)dila9jZ1&_C?mvOZG$y<>
zx;sbE=w9)Vy;+?%!;F)@KvM>m)0Tl}0)06{o`4IWCmJ$(CUXk?D7Hr#m3PTd#mbX{
zd%J`L^c5#ds$_)}n^uu$GQ&UKOgz+|uK8=op`+|hT3Fi01Q)nKPt5wuDvr%nua4~X
zpXlU%<yr9uiH$e>#iqC%9A`mcY&_`<bhH__GGB68`RK<_r|KLS^#6NuFCQeu)za!$
zCZLt}rg^5!PhNoB?}tr}k4J-tPJR|E{xtN+Ez>zE@^La!Cl7ssrVNNOw3&LNe<_ol
zC*3Uynb5|UPHVy&)ASbp-XC6gUc7%2m^5IjxOXO)UeBeo0V}Veow-J5@ppwx){{vy
z?{p!Pr!cT>+MmqeJUaj1{X>{wU~~P-_=_ifSvM3*k7i$hqCpm0l?7JyA}T|5tGQ1e
z>~JfNREI(2B1$^9*2ioK9aQ?+e@ZmX$8;O>Yu;ji<ZLB5FoP!mGPE{6Lp<{~{Dq^>
zS6klIfP!c*9e0->T4&hrYl{=!sQmPOQBXVwPs$t!eu7YMOovVk51AYtmP^uA*By#v
z`8n*Do}lYTt13mr_Q@OyzdA?W12<Qp>N-uozA^R&;`7rtA{_?sPj&Laxf19XJ1Oo*
zzFaNCVQ=0=CX89$nEDTX$;p!r3qB6pOZ{?d+U<~U=!MVXxd)ejbl$;O?s9TU`p)WK
zT-e9wtLM`*_n)Gvy!Eb}+cZ1Oay{J_P2cd46{^A#AhKUVISenDR5#_wBbrn{9@a<F
zA)Ia-#wLIRfDrvJvBLjV>IG}*o)R9tIJ|X}=avotv-ct|D_c4mn)gud%}aLnl?8T{
z6E<p6du6M}ALYiET-F<jgaS-;qfE(|rCeD(sP2U|5NeT5gk!p~vVr~MLg`c;(_g^A
zaZG%x>xoTbTh7X~4KT7>ty7f`UJDb9?d%;Xa`nhEluZ@QtjywI)~G9dzVae$Sa@OT
zK}D7E<9C9(uNO!3R~cfKHTfP{6RbHhG<mq=z>A56^aW)x9_*QX@*(Rv1w{qZ-jzIE
zqeam%cvV-!oIQo%-{#}&8Esm3Mswdf#srVDzrPvc&gfytmBR~OP9m6Dg!ruau~J4m
z8Lw9L4y|2D!&9nWawnQ)q)1ki_d#rF&8wUi+knuwVLYpf8>W@TvAf1OdygkBLljaW
zgVJzEZ@armmR`J5)AJsJS_Oy4yFY6g#+3MaF)2&^UJ1<0w|OQ8^!PhX4!tA%FBdzR
zV4ZJ6uOVO2KZN8~QoP!suTrakq$B&-VQnMv1Cp`FbAMZRX+K<Wo(c%>MMTwbWjvuR
zp!xbl`m;k<T1s#DTOV0KN%PBPNsnB}qrSK9MzP7JhtX$29j*HuB>UAWOzb_DoxJaq
z{FGLS9epzor(eNlNALM+{DMzTI99Fw+<agI{A#EI!}YXvse8N!{vAmnC{P-OV8ag&
zB<7>G``W>}$fC(6XP3Ke`F%mj#@vfulr&x1I|FF!>;YaT#o093Sk|CbT8K&%)3ABV
z(RKZneaCwtYtFm764vdYC`uvYLi;{kk<UP_q(_|-@<yz`!`6eKS&kx+2bId>pAmr}
zM86)adsUwp`xmaee#w<rY}n|iWPYq4`!Kd7;-Bgm)#VGO60EzC@{&EH+pd3Q3a)Rw
zYTa+pbyLGbc!szBML*y0G$o1{#LkI9>G(}ALP@Sd6bvE!SIUbOohj!ve!B=LomsH9
zZbiB<P>||E>u=}=@yU+=t}5HoE=<#?J%23HTRc`Iad{(ZA<sc!+treY_)(1%g^6YT
zO;7*gdSl~H4%OdCu{1X<2q5q3@iWoKugc|L3Um-G9^}{e?w*uf<iBML+8Wtk&8yV!
z{Zyn-b195Q$ZaHE%Kg2`yU&%<MTgV22a1KuC1rdAqlOG#+B1S;C#DhW#qK`5LxVDE
z4Sj9NrqM+_`J<2cq`SH<XO&in$1us}dFhx_egCdsa=&Pk)?KaXY3-5thwG`de76sd
zN|Z*=6nMfbvt3u7_kF{A#f<-0bxE>q_!u2SReD2JaqUtJoseHr0p6c=klC{Vzg2an
zbM|V2Z?hiu<?ev!>I$Rb=<%1d&2?IoX-rz!QmCsI`FpfaRl@M2>XJ8Vdv<qhw2eR^
z^g{Z-?Yc{n^gR7Wsulm`RIaAO_e`s7Yr-REtG^k|*gvq|o^#e$`RF*(n2^*FW0T=c
zEbF-TS1!^~X)$F>Rv@bf{~+()s7bA@`k1NemXGk|8-fcqynpv)@cC-PkDL!_`C7K4
zS#F=z8KO8Oe(E&oD?;vPHz!uAU3*ePc|9DKA(nVYj<mW;L-!~aBGYv8;7i!wyo0-W
z&1#2B)aEb?6vva_=43GkzNvxpE_1r?&}Kg*2ryJ|IgoYZZ;Nw6?wY9WZq8cat*X@Y
z$DIjDx4wW+a7D;W-+lBjE&sh@|5|QRL+VIfX)l4c2h&6_ioO0cjAQi;8`jjRjI#f(
zhTMvTv#;UnUfjWMM)A!9hMt2MQPT(GBPKJ~YqPt|L1_#^*2#W9dJkeJ_K)w^PUP)o
znSL5PKh4pGT6@pGocQ!m&G<*v;omB*EFI*taS!VX*QDgmFk6SMoUp<rn-SlJ(#s+s
zNMkF!Uj%YC$$Aufu6vw#184SEN2i~lQ)%m^^uco)^OaE`@(G>Y$uQG+y1F?xc3zk{
znBe=sd%eu39M@|X9~~3fJ*6|<iBDO=cuaKd*~F?B>X(C}nS}V-9kU)O6n{V11b0Ob
za6NwHpPVBKi~U<&$@i2OaTWIO@m4Clc)jw)iy!wj;=fmI9V`~~u5OUNzmYoB^^}{s
z8I-~-<e>j>m93{+C&g8J?dw-jC$qy^J+a5{Iqr<?`L0-eb{z2mtYZd+H;x|~RNsrC
zxtwc+kg*_N^7Q(jqJsK$kD^ld%m)*P`IK)c;(6D%)4g;Q&bI_d&lF96HSkTn8$g({
zm5`itHO7_c)@@-;y{f+c%l`92biFS5j|ikL;p3zCX{L6*U4Gxw&~`DoUoM}DMJT}W
zaqVM|;vxOUi8I~xvsC@{n}r-eZ$m=PCs{M}o|kb|x=oi~m*QA=$@r*n;V0jT!ZneX
zm$?$FkU`d?w5C<ko+%&rgwY$YEwojYJZk)@==tFd^<QQ0mU63}*Mo4bsmDWQj&hM)
z_t&aF3hFo&)Hdn}K|ld)g0VekN|}z;Gey<U?;nvpKUi`aF6X-cyU`OQ{*4%3M<Sm7
z5Vcksn%Z=`8TjcL&ZKkt(<9kx&)Otw9C$suVC*}kU!DobkJG=ko6^+{P5TxzM{N&^
z@2Bb183bAvtd1V;r&$*@M2uRC4v#vfB*btzc6VJq`&A+1Pj_tX#%p6-rMehwJu$Z0
zXZ2NX{?9L7c|Ny3e}|(1L_Ug4Ha#vc)?(I4HOM<i@QC-@crqIPrQe|R4k&>`$V_C~
z-PkXpG<U12VFvL1ap$6_cfISWjE_=&60Rz()Ub2PC$_4g+s7&8k?hB1>q;J<oXY;B
z1Shaq09Fu%0&E|>^y{qrf`0U9Wbt{LNs18i^}fZn;D~9%>C>AwwgDt+cQ)R9`q*@a
z9AAIwAFZ@HBMe^ni61)4aB(qv`39;O!@(%zQd|v$9E=Apzvx^XUH%e%@&DOy*`wKf
z!7Z3^N|B;yO#SVg&X7UoU-b6sNBDPoOWyd05f^RqB4)Rw6fH$8cf1Kk*=_SX2+r5@
z+dBvW27v}lM~>+#+%m=&Z4^8(4G_#|_Y^U2zPSu|<71G?(Qr30eLfXnVbGm#cm*Ff
zXyS({+>hjNVdl|Dg+GPsW$rNZ??hlqO*zE}5uDK&%swV)wU7nRh;Q}ACzBD52u8Uw
z*`G1tf?`Yr<E7{bKv-|y&r;-xs+8uy_dx{dP`KmsWT0<9<R7aP!N^xR3XeAaJvhdk
zgDDuNNrp3%w%FyM!2uJo!?<Ivn*mGXp_(#caK}CO{$W{7O#Y6~v>5#9si~ef!Q^5{
z0#_AbmQFB<V3Pn7An8E_hl?+V20rxLsx+pU09MwPa|Px_Rn^!DChK?u!DzTeG6QWq
z&`V}8XNarx=P8^QaVv`PMw<kW;L3NxPUzq+t88c^WQ;e#c)-sr6m2w;3yA7V<0{k!
zqj2RP!41r<!zW;V*`6OZfUDW9i%MOY2SlFeJED#4+hdqHxq1`m;Fc02xT<8f7{pD$
z-BQGZ6MV`*jdtM2ba*6i4ICScU1ynHS<}}H7|XLLlNy{C4n#y)3hOOs;M0_%HSqBK
zWT16WnXp1I{-e6I?~Nx_3(*ID^D2>{O$L?Hz}tXnTt_~j7L+CI{Vf}AsT60Ar}ssJ
zaEM#raMcIrL5@mJq`V&U=Lky?`+n+iC%C0_1P0fF1lq3onE`}{8U&-v{T$49{czkT
z(mX>;Q4Y;I-4%RHE*-AMpItwOnMq^OksMbQNtc5Occ>28VHQAupD-)n2d>oy3~m5C
zz+)uhQI@D8hanz~0!Ky6{&i&^WROs9TloXNg8dWliGx<~WGhSfAz*GFJo-%Z79bjf
z0Ab7~IZOy#&3^DN7v_p({pj~_Yw#>PW&!mGOeohX8wcDKjy=M^ePA0gvw}C}m`?JI
zVWy6h&FsciKIhhgyBQpY&t(bU0`}b$F}T#bXrmkpxT}~3!Fb4Np#k#|*i^$+kfpYR
z2avR^@Y->yd*h8#n1(svjypcJao%`12lYo5Jelq{I6`Y)MEWIWUJO)*z8bVi$lgsB
zcT8EdsVtWUo-t_-ZW%2#1dP7BrR<G2$dp{!p$ErF!al4qI4@#*_MV|&&V^Za-zO~;
zZITPB7LKr{i21JW8H{NK>Ocj{S_SC}I&vJ~F78Tkw78lgOi&@*YQUXSc#v7^)pU&h
zys#>5YTNDBd10yB$HN9kc&@g-`_h4+7EhwRe5$kSvP3lE6b;R;8{uh{Vq}c)Vy6g+
z$^}4}RVzy|k_PTZq7nltq(9HRsQ0|$CuvM?;b#(X8u|2Nb`W&Y!QP;q$W{Y>bhI7Z
zQa~H6Cnv`+(?&9mN5jpJQfb{SMFVNF265#z$faOVjkAz+aJTlLRk&+R5W(aP58V7`
z3LOhRr3L)|r7a?5|3ztk0k;%k69otk8u)09!D-+(j|M)@*9#Bo3);)jO9}Y)89xvW
zf10c$hTZT6r*CD)MGsenSMBh^)huLea{S<!2A20t!KI-4Gb&#eZM;$(9%7?Tc%+~Y
zU&GaEvDo7&k;&3txbmlZOAmuFILgd@Ty4iUmxV&OC7v>u{VgD@aH%SBxwJb79x)3B
zw8^Olt*=1|66mvU%y*<U#C#i67*5;q0M%D1$&3$mgillK*SRX^jtO$m`Wv+gcWmv;
zN*3kff;%p2X@S;|REr$X*Qy_b;77)I;Xd!_J_m$X6m^2YY2^ps?=#E(|6TwY`}j@{
zAlxFY1T6B$jGXBq$X1r~&&B42uhul;k~w!k#T-u&1b*K_aMs}C{uL2}>!FG!KkGB5
zlRaxw18-C>lk@?dhc;Qp%vvxj(h!WiBFXg9fTh74KvYq^$lxy@#)a7ev_RuF4i0-I
zqQG1n^N3{P@*sl6uO?lZZigADdA5eX4vvK1U1r^&IWCQ?#t>66;DCC@wkE)BrVE>Q
zf&wUD2VpzHWPnAH1n62=n0<sGAnC8K5#@)X%|O1|F6>oEDEKu`6VeRR#X!su@R#F!
zCIh#j<<!mBzq!s5qu90;vE=h&#cd~U?_Ht9<S46t)}Y_bBv^%;{J6%Mhxvc0AdIB1
z#m;%i?vh`-n?{~~sEun<DZ1GL{Rwp@2__^2nOOEIZB>9?=k^HbTSl_>G41xT7Voo~
z;I3pzoX8NgQM7$4+DHZ&>WiEg-tw!sPmQb4%JM6N+cJjjAQ;`5SkNZn*(>U}a!kg`
z*1pVTvxl603Sr7o2zOaoGO!EA^e^Qjlk^arWF312I|y2^1SraeB%?@4&&AbVp^?oy
zN{2g+r+)6M3;1Ly>SjNfhk#ps@pVFE?jWw6*g2w&ZmH>R%d@-~M94B0A@@y>!a-Q;
zLQno$KCU7@HMD4v5rQLLTqZZF&mj>XvbTk9@l4Z8V6Lg*n(kn!AZ6=!1-GG+w-M*t
z_m{b|#0JcXo;k?A(ZCYDwwRQCW5SWXp%l?Uc=8l{|LdG_Ck+rRF$=|{U&J%gXX`S+
zNdZIy8V}_O?ZPrctg&c_iB4^hWKc%uq$qGA2YpLw1c$I*F(<=byG>|$U7~y~g3RHB
zO9uBf5q6Ek91YPgcTXfk_qb?Kek!!IIJruTHvO6S0M<!4aO0Y1kw3^ZF~dU}L|)9E
zew-zIt)zdyOI5ftphQrD`O$*tCd0f4{e<$5*x!ft=kr;@?Tom3ih>()adcx1P@Fjn
zcl@iFY1s4t)ZUy1t723|c%qI`kA6jzxPt%Ciy<JvP@zKwG<^Q5yh=2um=L%5r?=$e
zE_JMM{yYUVy>HY&Yf~qm7mO(}E!3G8zQr*vWS564@0S`p^~6=AH&DYR;=cda-=JWh
zIkn8o2i>G}t+)H6CZ=_oMq(SLhv0X2Xu!0#>9q~q2Sk0jSY79ZSpX+c@8Pbu=5ALY
zWSv)rq6QJv`T28tpnVbKd(#pLH$UORh)N*1x>K~KqXwDz_oMg-X6DpHC`*-QqBt`q
zvZoVRIU{lnlu&~bu2uu|taQ16u*hykoNM8`0e7N%S44sF+H2h0JQ0hT9rv-p;teVb
zaylHo*xOKN8da2~w3E}k*!TC_FUbE8zk0T6*vtz70ihHcVs+IQzF4wZ7H6_d9Dl~p
z1CLX(?PXkj<=)orr-F5UFnh+*ksBojbOiWmm?L3uM4$?N#FcZmg>Ds+@a|&j+YZ+m
z`xLhe@Qx+~h`A<zNtATukVA4!IlVdIgA8yO(d@q{mYpg<C%p8*j%A1W`#X1Tnzvjx
z0pYgX2u!j{40Eq9mME5iG^670`+9SdoNpP(E=zS>ld+O;t+7*<@PW7F3U3Uv)hxgU
z^gqaq+d{zMh#PFVD^W~Z(O@L7FNX{T39e_!+*A}rf%ZVyLpA#pxMkAH*(&J7!UpU>
zC#JiGe#D{S;rpM{r(|D=jxb3lx{hfZ_(4$OBA6g!axiV}#3ynEc>KQaEjnCnQ}$pX
z++uR2cFTcNl!MIE8=v~4!1KN`7=Eymowon>wFcd*tyi{8+#hCKWiM&IlAH-9nkB$Z
zZwCFyEL$+N1?W>u#c&RWm|*sr5!dWVxf5OgFqN4@!eFSIlN3DDN}wAe!_|GK-aIj`
z$k@SEwb9so4(sgj?UYJ~`(kfGDWr*8<<X*A0T#?l5QiF4Yhfb?DpCY?S3antA1}cE
zJosw_F<}TKnXQ4A({!_6=*XumT6oeob8xf2@Pv(Ty+g5Ll_9coZx|#gQew6KvLv#l
zMHuVg8b-_Mu~?#}##0jQiC<oR1?VT}M94qVXB$ByZ_-42SX6$-d|`gBzWFg&oIWSl
z9^ZEpntEaCW5v)O;*o+wpvnbfkM}H{gz8h_-mwvELQ$XJxw?MULn+**rn_$c@fYBD
zC%Ab)2wSVU>?{xW7kt!dF249uM-M!48jRt5^(7FT<B;DOl0-x=?8qw~Fz8B4@N;E}
zt=!Si-#T<=c>kR{K15;nmQMwOWs}oSLP;#q1k>?4PXXnQNuRk*)~lK&%r-F9mpE?o
ziC}zAI^Q?!8Ay(QHFA68&gRuELEwkUQK>YpYFggV42=Ed>YNbIF(d>dzS~P32B~oK
zHEFZ7OS??PzFL=cQ*VR`Zkb}>rUk}}_809CC0xy%d(^;pH&A(5b|mFbF@?V=DRL}D
zE$BBm7#%zZ5oEf0-?M_-COh$@R3TAMXd^I%6FoCzgJTFupgAElTJg@#GTLZx?IBe*
zt4=4JSx@xAbII9^BYdJ)$bBYg9dI;D!rH8Dlw+oS03rTK-?Sndb(?t)&dmMUbIN2b
zXSb4-mKT^8x0JXzX|+h;HpvmTI>IY3&LN?N>IyO`fA?EBf%fk&B`ElBV{*T=*&TGz
z_)XkwfUYpzLFrv@Cd@yQrM8nIn4w4@62j19YU$4#cW>;xz8L{sr6#i$mKIMW)s4Cm
zA!i6-f>`TPL(CuO*gPwadaZBp$*C?4IKd(yw}`NO)NK0N*RzXf7dFhriE^6hLzvk#
zH6|Y(1C5d^SP_Vk9u@W~HnE&C$n}Ug3~K5PGbg>?ED)9%ENRQl5a2pOZ$xJ@#s&8y
zvPCiRnh(|gaf1G&t@Ew&25m~SrY2MkIxZ795zN(RCfUr!794kz%fELJ@k=;M-`M(E
z!lC$hCFknh#?f*HtQA($n$#up>tlO-CybuD3yYwS8Ii5~@`S?{iiJ&U5#jC*#C?de
z8G(31*0BU>qH_9OW1mh51hF`Avu?0!n=}TidQsjxoHFIi5F$%=zwKzkncC$^De$*F
zr_w-DNC)>xL;Vm}J3mw%f%#`nVgWk04_{;(>nz2TAljPdBcv6_r5BXX;nw2<1v>c>
zS;C*FWD-yJ!9Y}5>wWISWMH;Vp}dIy#Ks#B1KGTWfL4n^M?HT%X3fm$tELiQ-kAty
zb_=O@^~``-L%Oi#+YOjrhSp5f(Pa)z&Av8B7|zW)2fl5RC1vmeohzy`l9BzmPt}qS
zJ$kmmkllO(sa%)$k6=7FqepCSkC#uQ)y^Djk;a7LmG3JB)$TBBBTXgBI|P9RU2AoN
zx=1FtMN4+9KOhLS>n?{_ozBl%)}xINQ_PRHl&Bt~je6Qw+~$|*@)qXB`mhY#*3-bA
zmmeerqRZawJ4Ol+c*ya^%)#81G9}%cnhgi`G_3DGW9o16T%0cZkh(VFYQr~fCY!@h
zEKuDM()c^Khnz=pju<G#J|+Wu^v$CDF#Rw5$+0QWKL@^$D-gRHkpJoJ_VvJ3(gI4p
zxCC{h^;lSz(-};6at7`{z<?Ep*tH@lGFakcYs1?7)JnJ^O3+_a?${5MadFm?S2}eA
z8eUOnw6w~xPGqKkoo+^80isfsX2YcTDXz-xMEpMHda$OjIk_q&QI6OMi5`};#Esp@
z6{I?a?m~o*sGsF6-NAA}9D?L5Ves!7_h%pkXftgyCnG!7JuaSvO7UZhD#VaK67Gq$
zghp%FlVHUOmB*(9iegAJbWkX^n`o}^mf|;NT~f$3$bdAZIlHqc*@@v}d~G3r27ib$
z;V~(r9tGJ~7jub!=_YKd0Y!u>sY5%6M997aZ%qh09$8-b_s@G7F1V{otiA-dTZ8Fy
zxZCNrMS5TwInk88FKNP%HRg4zT47T0wP5#UCl>q`gy|hAw)Hy2%h6PC6d8A-H1W3@
zgX!N5ecHG$wAsR@;&pO0c&FO~>*ET=hg7&4!kPf7?$H++pmjC%i=oo3jKD!=)8o&S
zjtcUeWavk)l*0XL!HlmJWAqbGsxRH2>cUKB@CA%N?OzOnG;d_XiQ}Scj^Z_!OOl3t
zJstKsFAwB`46;4-kTJv*r>a|w^zQ!x6Zk9UuG#5&^P+46Ve`pm?wEEa)gMed^v%k+
zPrC(3(D%*#)=2YvsdwRxXRlpOqOOfYQZd0@Y+H+jxk%uENNQby-^WCw)ueq)8sms!
z7>VCVH?D@*{>3(5#|l1bKC`egIjX7%IL&}cvXGK&Lv?se?v+B!Bd|1#4gtRjM&3>=
zXj7D|-^BA`FqcCk2Hda2<vjVoclzu1${ZL?#eE39TX655)M4~p{lMLKuq#^HDze~Y
z5Y5xG@@DT<Q`HD?bJwL*7QZEW#v1-D>BGeXE%h#;vT7tSkmKqg702e)dTT|W9O4L>
z6%WOh-e}Yqj4Im#AW|#t*QL_(%*y!5tOtgMgVfA#RO6~PSVB6Ujjz1Y<v80wJzRKc
ziWN-l-f+j1+cUajC&^4m3B%3aF*nWGAj-3>3C-ptx-fI0&<`;$Q%oCzhs+s?a_!DY
z=20*7b-Ca^-OvzjzR2z>#9mYx3bxIHH8Em=^mbbJX%OXqfv#U|pWGJL<jp3HYs)T^
z#;jT#?>ER&v%VeR-IIA<tb4^B)6+PPz8+`$3KNSxbU6sSQ^A~@lQ3<SA@!-$9*<(r
zO|AsP<~#p|&C`D~B>3Z0X;6RsE~Y1;_IA7wN297YgeMsF6ZZMm1TrSLU2U9hvR^w1
zVGt~Ajhv?HL}!x`OuXv~TM9sbjw+a~!6&YeBU25{Yw)7eTuz!J4{$Z+;S$?@H49lH
z&gCm7oE!|=xC)I0hc^VHyhj7dM@j!>rnKxEF9ff;Agyf9ItLMo3ihe-b;zIK^qUtc
zNPE}n^uyf(uBv70j!8yM1G6>q6>Rz2Q+fzQ=rC<c&SDGDU6yDqyT-(ndcZ}6E8hyp
zri|_<dw{E`Oi*`%s}}YH1d}<P)lm*LqXWGtNnrl;s$hggFH^uXOb`A1>{&oa^nF$W
zE$+*V#cqI-4b}U{bPRCkJMFhCYX^B$y_CV#=S-y8%*rTs;r2X(`V+)n6K;vCARhwS
z1i&T7w@|O1zZ0MUF1cAYO<Sp$ED?z(HpNjj=Cl-8J!s<B?U{r!wYQS-9u=ka;uJNs
ze;->@;F|dAB<j4TWHp0T>1yp&t!0#eE$BEY1H;Z=_uxn7)=r+2UNzUaZ$zAtRkUtZ
zLn&1uuKKcW3It<F8%+1FVP*B^4>x^S1AElmgCQ0>_Me)VI#jzV@X2Lh(VyR(=IzDS
z4uW)k@H@>f{^dVU`6;2gWY7$2Qmzo}`nIUb>`TZtj>+yqq4V_#AjX4DB<62>g&N`8
z`wsgTb#$@?ReKisu~`AqOdSt3qP_w(XX@6wR)H)ahR_U<=tKO77$HU^uJNvzt)~Rz
zlNVAW?@;+d<4X4UkJqOk?Hvt)TbnfS2}KYAUTW@)PfF&+-KOP4vE~CD*003i0o68V
zTt8-=D_T|$;c(aMcb&Pl`IUffjN|+0Xcs*Mi-{*yM%56oB&Vgsr|T|z)f$sXDedPv
zrrr$}Rz@7HtK?&t0~xeS0EjZ4fBOg@V`c7@6ihJY9F%!|zzHmb8hqByKKpNN(XnsH
z71WJnQS%4jYQ9K@sIhZRwq^;-m!I7=v^`zH(?2m~Y`WS|1?KaT_`H^Rk;i^7LhTn?
zv*FGQV_I!o8npI!7G+hsNF~<yaA&gp`wE||?7zaTQ?*h}Qu#YtxI=4?R`3??lSA&x
z%wL&hOM&Gl^Q%*#s&2Nw_t0n))ZF$wy4C7K=ev1PPE;Iv;;LGRwD%EyJA?LZ^EGZF
zIcP?tHF5x&g>?t>yI^<`AgUq`>PQRlgJhpWXDB8BG|31vYK@M&d0i)pP5tNkK~!QN
zz!JbRmV<#(n3UuO|IFlGnHrHfRV&H@+wN5AgW?trjkd=VNSqyYiC#tVZbE`#kjaO4
z0!b#PP9$y=Q?1ZkuV#SzmpAv<-0@Qlv=Xvxw>hZRiwAVguMA9<xS`E51YsF1;T!&=
z+D<NzBE5s3-0AQauc8>zP($DES=%~}gLUuEC{I`xJ*f>fP0t4nF#&$M2w8i40dxp*
zlbTJFsPMLQ3G8+AMa#h*>fq=07IbS_&BZJDu|4naaZPE!e}%=5&D7sv*Vq_bN)Fiu
z1Ya9j*f0Ho2ddmn+W+NWg!0tmPd1ZpDwWqm(CwIA9nh`g`iFi@w{3nx*ZxfpA%8_w
zG=yA+hXz-h{pMTbeI@fFeDG2(t2?gd>CkI?kb6CQcF)sE^V|HqC_{n6m57>XZ@kH;
z6=&RgO*ewcR9e)&i<YKqP2#1Kqi5epA$4f)u16bfYW_U8?t3QNPB4zL|Lp4rPGUzl
zp@Rb3iUW%@a1~*n&r?~#3LMaJ-ee_?9&daEmu67QLXW+l4-y!wwy&q7!zKDH5gtwQ
zuQ?quL8ZM62uAEzzi^RGS&SIipiR0r22_Ie$W(y-6TYts!xjB-Yx9L%v*w$Lku-Im
zG12LN_-)$~(%EH|O2{5H7uasWK3HRp#03%)A3&FQ?)R|d@KDD8SGr^bGk>*P@?=E;
zuu5BEol|}>w5k65d2iE)vLLtY-#8PjdHIcbQR@*#7-QA|d#!j*eCj~3-9=J9bkLjl
z1~k_0Ms~^@w3#S0S^c{nb>+Xv=MInpX?KVq4gAvm&`njB%(CS*NK4Vbm6omyM_o+Z
z)n&Y~5yu=|J0lAGxF&J;Y14TIWZ{(}li3FeWm+(JZUNfBfH4`&qrczIhP%eaT)&>}
z)QhX$^VSE>24M8f?2zCFk%NKLH2)UJ4bVKycdXaEmqMGk^lSd==y03;A_??AVbCI7
zYCgi-p8enuILn^l2eTgX1UfE>@DT|Y1YOu~BU^idk$&<mG`Yw)i02D4l^^+2_qt$7
z23KCC7nHSbLh>2&;ToE}g4r7R852*pFB!VG`kz67vu}Pej>x`>&f5o{x5oUd`aBJ;
znu(?jZG@oywkH*;$_lp<P@Oxs#d*-}AjHYu+CJixH}M0@pb1=L_8+V|%1VJBT|3GH
zE<N@qbhz@{`F__T)qL$*dT|v!GDy~^a`z#D@TaM^24%Bs9f>*_Z-iIyv@O}AE&bVo
ziQa~okS&1%k@txFt5#^EhkiBH^aE!jNI|flWc=`TNd|(E6s4jvNn{A$d=y-TgT`JZ
z+7@`legPi`&V8{gq|e{CY(n^mGI$}waj$p5qjS0GE@;cwOW4EA$(yz6+UfC|@TXWQ
z_3IF8BKOxQB0u$a5JE~91Oe6ENyNMAvn8yj#6RYm7b_)K9*3E8ydy^$l3oplIvsP|
z;!@%y`j_xFNQQDOo9IJu+$&uu3nO>PD>GwMGqa9b`;~WbB3t5M`Hu7ziaI7N+r-gV
zQm4)BGv?qGY;U*~!ikjYBh`y5wkL(qU|ASYC{5m1`u2!Bk8`_9rsDH!XJ4I|>n6kK
z$p~2%cSNq)aKxndL5?69Fj^ua1n(;p<8I8*#h=)2L(D#wN|^{thf)m-yNlA)XW09z
zlDM#CP7PtgT0;JWY|}t8?5G89!S3k<w0;>aCuyd^YC|(%+w>t<VzDgD!ShXWdd%QM
zWWe5%7=@^yD6k>|H}*5-72xxtvF1eE17sOUNC1q8#g>};Z4g!0M5DsGJ@g^O*9f)*
zeXUBVa^-zOQ=k=?Mb;1>l~bcUN%X>niC45cr+zI%o<WYFV2;aiJ&_fg<!W%GvlS}K
zzk=7L#!@wV8c|>+eoMZE+LLp%bF4r^!N73?hJt+{q8FD9cwO;$_9TO>nUo}i0df<f
zti6bR(;lIq@YWUzfk8+!Sm<l0DX<E>u9ocqQL;{Oe_al&Ev%e$mJ;jvNcxK~874yH
zJ>DrLY)lwRPtgb!r@$7WRJ10t#qG3jkUteChfq@zVZlU<f%%azQT1ZZlQJSK@wZ$s
zMK|XYx!!Wc^{$YuLNu;P;RW|BV~$p+(9Lo(b9r2SW;WO|iU7MBrMmVngl@1ONUc1(
zuzyVs-==?u5}~GnR(PL-rC<fD9Pe*rjemKviiV|{Uz0hCq7@}>&aZlr8>fI<*3g6y
zNFjXA>=FE+F&-s>c!Z-^X>>R3c|&5)dWbS)AU_~RpRe^)z06UCzOn`zKWmydb8(GF
zPyvbNEGi<igJ-gwWMZ_Cl0=v@4a{&e?JrGh*C0Y!{`UTw5gad&s%!9u3~khX%ia7a
zg>>TMDJFd^yEboO#Y<{##P~hjN-3N$u#)~|%^pwPXG5lxy<qX-CqCFd|4hwP$<GJu
zHP4o1crkE9@}W&8J!m)(9XF}l2`2ihb#q^A^QYhliI$b1&d=iCxwTF&`?y!ww-&la
zWH{6fKz<RSR-tl3V_ZNDo{pd@tf>>)9*(Ps%<A}dH+&rEjt()=7T1ywN(RO_Ef-Qk
zMPJ)rJHiw7#cka%;EMN?s%*^?wbIO3R!TgJ4tcb^h&Gve-eV#=*``P;(q<3{{wlF~
zQt(ot0~HB(4fWSn*0TVuj}H9mMG2DP5wmEuxC!R9>v&{L6yyZYrx#dz0(4so+^aRG
zkeOw9+hpMNvcR|hj~j|X4q8NmYf6VaU?D#E!AqJU4Qb=@YJ;R;X&j%=BKVw%f8YE-
z^bB$n*GP%-WI5GrCd;KgY;0n|cVKV+-0T|BAhpt&6niWH_o<<1_SVUO&JaBS+qxN$
z1D?+)x_gXFrW*JH$f>lhA&Rb5eYWU3+8AQY-iu=urZ`@OJKobcM<5oCOu)Y3(FNFX
zzVrrhxqt{vscR-_10v3ydwqbBZ{zvMOMYr{8^+-JKfkiXB4AhOLA~L2wUBO*CcN5r
zIr$08AZg|mO2F!?vh~F+21fclAGqz$U28jOX-@LHnS;JkejQgAhNTM&{+5_!VRUyM
zn#f3QMtEvrPOGApsffv;#NOh4bw8j0|C#t2QiWdD*k#m`g$d>G*v`{54-B^D%vrga
zU#<LY;@)6ki=%4v8cY6*rRhYOliv7)z4(2E|4HnS>ioQq4%e{&b_!ewM+FzNpFN-C
zci0XxzvOpsDi7l6vyY+JVU|2U{qA;LzFD4BQNjebilxPWqROs0QYZrY6?#YAx<{3%
z@SX^8`a>xak!BW1Fw|W(Lq<bBh=OehrTrG-!9YP#u$#<k8o;vJcT?BP@N(@jux}l1
z3h~UrLH-R-aqt?EDMMQ%uf)KkL1sELN2{zgt9XPa*abX74;<gcCnA9bnOAY`RH1#A
zS)$axH%Z714Fl!|mIQ(CbVep+qe!{Q%ImZs>&{kQ{-1NcVVAVT8Mygo{2z>sy4c-i
zdpu9Y+j~p)i%yO3tAfBts#Z_5^TIw!IIcF`QN-Gj7B6*#PtqablX(zr=C4`0;fHBA
zTPW3lh7gPG(?@SLosBw{@<UaiRA=3cdd$G-5p37qft(bY8)B#Z{qs8%3i=u%%}-{o
zOFWm0wf*o~#Z>vw-Ce%5uQtDv1!if-_L|;SgMl>-_`&@_JmXtV+Jn_A!>Gz5r@$pJ
z9v%YgP$0J8GT@2B)q*>yep|3yt}9Xf|M|K+F<|=|KIHjIfCp?TV*A6jFO()%H7sgm
z8+(!P;R!B&8axNwQ@?;H>nD!P5^CXsu(r`|_exyBCwzp6@lr!^gD1NW{U9HbYAmTZ
z-~q*R{_dWyeY31FZ$yPN2bAG}tbCsuu4efem%v<0;rWu(a3I`Hq(f8w)4Pm0O6mJo
zmRInsM$w$|tNpZD65yVq6!rQ0%HP~QJ3a^kt+hL}a%<infAmWN?QYTdM0eJNu3_v6
zFfuQ4br?Y7IT|p9F%wegcI1QS|HUbc>|1|+x~cvhPdr$>J+?E*{Nyaxt<Nw3nNCfI
zt4u`37i?B8dgCKInrDxyT?YTvWP@msh0x(s6i8#$1h=w!O!X>7zT)AwL>s}FqjuWb
zzbD$xqx(JFtvK|}@Qdf9Z05%S277>T@YU*Q58bEC`^;`&cJ)U!jf*;Z&Qy>2(O#9z
z@vP^=^XNEmX%+rl32^r*_7hcX=7w90_G${ZfrnE3_@I+dvGpAZ^m7)6Ky<N`s@_>5
z;EtVt1(;<lr8x0fhdq98V9=2R{#2tCZJY^v=^#%b@ACp#o|&yeCt0@pqQ8d;d?cvK
z@meNWjP`moFqv}5fhHwgh~t90y{$Rbxuz9Fnq#$`MISr5d?zf-Yf_k&@c5d<@WAq2
z*t7D46D%{8#Z&uu6_!x;227uxk;LDCtXmQo>Y0OY!~}Pz<KOd&tJIy^ePwWa@x+dg
zYHtYiSXR3?2hDMsJq*o?87<7+psrVuL=>-5vk$#YL}G&>lNV9Us5lEL?s<_`c~$QP
zP6`@<k=NoJ>AN9+qKX$oSYEqh(p0a$mPQGIU2M{oo>J{=2Cwuw%`+6>&sgFXp9!b(
z($E~m6hIy0UP(Zdp-XfyV_@P2zewMy;gz>TwZ~79maRVir{GbGSXp5oq@r}=Gq8fZ
z12z}f-J2Ogt~8_4h!fmIAZ+i0Q0{D4PV|$e<9aXszfp2)l`oDyXQwutSpvdo=0#G^
zcn#;;+bR>_F6D;W7cm*t_FLUcQMj4_4)vghnaZwBxSI?>`FeY$GO4XqVuxABHvjjD
z<PV(@B=B7#PA2tUzK1tnsQsH0=0$A;uKbQe?nXbuIIuMJV(7)v16h;OUz44e84?rw
zRykXc^%8E7ajFeWq~u)o&svuPYri|P{`vuT#xV(;hd4pN7TS~SC^%PLM2J&87u@+!
zGHFVSRDOk!=>&J<Xirji+1%ObpbG(c6(iiZKS_MH{qw$oqftHrR~xKeu!q}SqQbph
z##MUH>FVVT%=N3fy~`4Y+i#dhW4w-zBrB)v&?a48ty$J|YdxZo@k&5v!LDa!6zs@G
zYL;$ZIIRk9V>~V&yL>Mg{YbuT+8r!oXQY5->}<JZCZD%N!9?`Lq&thd(wOb(m|)CD
z(4>@z+YbbdK{Io=@+Un%WObSDHgD8~?o8O@VXAtSa-PqHpt@WSnAyAk?OlVpj((aK
zfi%C6Q-YX(w)#cr56i3>^2D)f9O19#{H|VKD#cnwcAoA?DW9Fp$L;@JBACj(X>_Sc
z*Crw5jCE!&3(URiV|RovejD>C(t9_E!Zd*}CT%I2L0}qatdO9&p~S+aXes(u1@eN}
z0#ALrnf>9nEYVUny%dkAj(c6X$hX>MIhfFgtxInJ;lWG|yf|nOtH3Ih)D7C`&@K)9
z354{9b2CdqXrR5<733m>o7WPnGjgX61RrfC4vxsc8g2B(CKu6<Iu3>fSyi$pUslcw
z+jZ}prAsX=K90@?tGl1Vdl7w021*Yk1?>iznQ)A>**FtlB^h9>+-NmqyGX%+@8A$u
zb5Ze`Qxu5YZR{XCKJU$(;poryc$Ymoxq?ssn23=`91oCpKTgQH1}+_D_CL>~w;xdD
znb&#a$y}sU0^VKg-FufMqWyr2rp4$!4SgNR7RxLd{fLcMRyK*4FWf%u>o_n*e8c5|
za)XlXnTtZB+)sQ2lc>JsEl2ySpV)vtg%rBKEHI;mL%O&?t1MyhGfw$*NB$pe>HIzw
z%rb@#T5DF$OEUFSvV`k`2aMLZ;_aMQ(_OZ#2*wJ3r9EVOd%`9=csi7+_|V3$=0#*(
zd=nSgMDyis!Tdj}PwAnjRb8HnYDPsV=(f2Dn?AZkzx{}4mlFOMI+g*D6e4<(Ifos@
z_Z$y8T*X}jv`Myp3<xdE`ENzR!MPcNgHGy_lvD#B2|6oqXBR#$$5O-!M2~@6BV8}E
zV^$5qlRO9?zojbd(bU7NKaDmu|2iQEQ1>lruKcZVYQj~`cu2pz9^lA#_$r3^!3UQP
z0~;m0he&2R=nd|0Bp%UtxdF<5=7a4v`*}c0>kbyd=m~z!siUv_CEhi78yA(1yIx#O
z$y}MA=$PO(x9TD@!|gc>KiS#i>6(ADhYj-x5?PAMe3ukC%wu3msm7Jt?Gt<j4oztl
ze_m=lg8dKK?fL+<aETBun6`xrGrdb)#D{M0Q>$-J!FjBWr2THeAo=D9EaRhvVpfh<
z6fQ_-K!~Ptx_A_aPLj7^Xb~{>@u$btCCaE%!=m*aX2ZT`c_NJ*Qk6-As0Cx7TT1+x
zSrI8Vm8c%Q&@wN|)uAdzzUMWyPp1k6`x0)z?^lDe$jMZ3mzFFMj_2Dr>djF=_%sY%
z3M`bzdeEBDjVNr6HPCcez?n5YWJ4K!DjwX2w_{6zu|)}Br<sx-%vF0|iu~f@`ojVl
z&V;Zr(1NhJ{x{~VD28t?kP>ks69n8tr5;OogT1S377Zn5R5@}$!B_BEGHFm8wKx#?
z3k6@Tfq@VP^hMU|ea!EH>eqA!5PR~b!?0LL2~3kb{b(K#OSxA<uG|96gPjWXyd@f-
zzec1>o+TEY=_Lo%pcdz(nfvhp5*JJsF7^ifgeW0<me}5gLC$Xy@?Q8TQD+CSl<gY@
z(N<k1WkjrBf#}1kDli~b+cDCt6^p=z&R(&Tsklbod~=zP{{a02@2m8+)||3g$`0D}
zYh4aZlza%1|M0jbN?9w*d#JOQ<xqZ#lVfUGiFGA&n6qFb%=IXL2QgbqEyei(p$rY9
zg1m?N{tbivbi8vTx2A3|cbU)x4<N%@!b(6Ol&)DiRvt=9tn*JObb8xK|KGg7T!|m%
z2z&e7nFfluxao+ZMoFt*Kj(Ofpu5&lo1#E?5+e*LA@2On-dcQ{>=5hGysJ|7peG@F
zAsIMrL6LuleM?^(YNk+iJJoDS@a6IRw$J7XHgJDKf}yO^puHl5@Ho9LZFFC7xUl)u
zQQHr9Ni|t1^Grzkid0B~+w>V~FAv7{6e(2O<H;<#qs5~c)N9Q0b!@Ia!w}Bmm?XNP
z`^tVUgD>uYzD_85Kw+^sN$cb%QXXuDl7{E`iFv1tCobV?qqhTyR-*39fart!siyA7
zyBQU_pu#_r5o(z>;Fb4rxx`1Zux~Bd?a#65sd|R2vkfxWY<BLfT@3U2T0c9U7j|A&
zf>9eBgDh<6S3Bwn#?Ll02OIVFQm7Sw;yL2BXX;uTI;s&upemJefaki0MFj?b^H#^z
zR5K2+*M*`FP*X`R2o|2Eke@y=fgSklvN=6w!;N#@NO6$ee#?ACs9<<rnA^e9?;*`-
z#_{e4O-yv((l;M(Rm>07iz5)jJkfKj9z?qgN$rfwT{px;q_uQbE==iZ^GOHXoIo2H
z_aJn2X}fA^f(#O$l({S$ET03bkk6F$(AcAj#&XiRn%&{nr7o{0dE^Vzz*xvxeJyEl
zqqx=K`k=BKncju6og^?jY;?~cX9<~Zck8Rd2e4Te@$E$MWyRZHDF*=sAA9C4g{?>!
zX17+>0i7>i6KDK%uGLDwJdv&v?Xmhwv1eEpXp1~PajL(5VtHL$bywQ??kVO|vfKB$
zg{6+#*K;8?;1Da$2$XTzAC5n9^y%<*O8Irj;yyJVKhnDu_4@GNqNW7hCt<x9=0dk<
zpK9a%n${mu^{EpCBmckO^p>p5OF8K2vP2b@ZHB#O0%{}!_1<msRuPOO?uKr-?2#1s
zk$OtZ3s-NfaWR0jpuP4WCbrdd_H$jZuK6BqRy_!`nmFH?I4@t-3G7Mr4*=%2a=Ry2
z{){#Mkc@ZW1o{;*66Z8^WSEiGdEq8MC#mS{^yJ_-j)6%QJIud$Br67vtK{W6b53jU
zA+&jN+eZRRHZmZ}qczQLYn<#0<^Bc=SN?{L1EIf?-JiwO8G~TxI}uox$kT8WbZX;(
zyNvQeI6Gwf=ldN0{s$jpW&b17AC>)u1$G=wFaq<R7S_FVL3nhSK>eWo8m{8dhAz6>
ze?001-7CJD0zCSf(@a#hb*NUHUs-CFu$`nJppFzjDz5k3VQ#vS&PtQ?rtP2H!rV-G
z0X|8sBeAKVyzWLQc;6|Gz!QPif~Y@V#64s?PC<A;G1Yz21?nt<`qE=gKTL?+_JY-@
zz*liP%lLU5oSDXAJc!lD#Dn%oFzAUq=-0Vwr$Ps(Xpt$zA};>NwOJw$`z6Iv3JGZY
z9}D+6SN_@K*)PU2R;S)G-0zi+)DA?z9rImo54-<Avc4;>$>s?+F+h+Kh%^O4F!2*X
z1O=r82t}HL6afY4(t8a>ssa+Esz~ohmnOY;0qG#U_uhNWdHMg&xjI*Hk(t@q-FJ6(
zcjkFwv-T~E<{SApQyxiQO`I`DPH2q+FugJk-OG~iGOh$;(9(SCp$(82#H+?RPWP|n
z4%M$)YeZW^F|mbbsD@6+$n0oKbsh7iSGI2m@Vsuk@-D(XBc~ai;}3(SZlyJ=Zx&XH
zmdUuV{bopCZFO&|mI_IB`<^LMccAmun&XZF^%!bC$}AzE=@nVJki#&oud`{OXeJ>k
z-A<;-DEdhsJv9L-`S6kIhOSDV#Cy(6uXO39Y%V%!+>;xq!JF2taO2B|T_p&snV?6?
z^xdKlJb0+oLoi>AHO(}R5Oa^Bi`eIX%d9vS2K%4!lDh<carTt-@4nU0=KxDzdZf%i
z|5Qct_#ac;R<`x&zG-0mkD$H_s`+B=<B>DZ^uMNoIyJQej2_hAt2J#dq!N<fFK(0|
z`Ia{Bs|O14-r*k|F34u9IA6meP8_8oo!qDHRLXd;-0Cx0Y*shmC--@jfT%phu<=Zx
zx@RBB=M_|X4Pk?8Pv;)dTIvd>Jn)-y)G`n5qjzmejeX#rB@)`{Xz##ro%F=Wv~^|w
zgU|9W7P>Tt(lqYCmoO$D{B;c*MVO<Xn~WGrB{jtD&&fLPZk<tF8aHd5Ea`?{{P~*h
z&|-R<O;Y_-v#Qu@w1y8u&g>}FETsJ6nca3_YlEzT>{t57|B^Y4ZeMZS5qkJ4z6A)`
zH%_pW-}0C_9#}6?>zCTJ5;top-p)3v?EJ!OcLwky^`pi!*^|Qzq7ii+z0*b^Z}H^~
zs<<dr5Vg=@(}j?*)Q{@7iHT6<gArqcNjnC9P3F|BDyP{ga)$`Xbg`a)By*fc#>-R;
z9Q=0Cb}vub4EKp7wa#%rTcm!p_paLFQ$3;|{*lyVb`n1E7z{Df#8mhz<PlgbqTv>k
zd;ctTk<HKJ6CZU3E@C^bzqt8K*$y3*=gSIF$Im6zmpn@bf(^Q{6ip}=^8={{e0#@y
zi<Fs@Du0K;$OzN%Yaqy!rZRK7IEsx+zI8E40kmc@&5{Fu!N!U8;a{?;=J#rm)NnE&
z?ZtiBU8CPe&n2<|$!RY&vSaNGN!bsc07=#7O9sK|$|u4e4D}~CdPk{lcyFuAfoEZQ
z)6YMuo<P+}$9DIus`3(<zvuMsBbJ6GVX5wkk1Xli`^r^b!z*?dCxKs<{H6Zg%B2Xs
zgmsPs?;njrnQ<9f)pmbc%5<=(KlGLpsl6K=jWfx=aJ0IfhEk<lc4yqD{)rExoI@|8
zhv9l=r;+JG*p9uuJ>t`2f>jT`e7%Rh-ELPz`~BkW&UFU3o#}?>ZUdQMw@=hQGI~N)
zDzkYr;v)1(enHHC4?B%+a*0Z6HQkYp!Umn}2=YXG`&K1bBjC2(yOtKe){G27fBX){
zS5(H9M^$+ioJubo#ch?cHot?nc1<NFDjw_qZwF>#+Wt@A{f}1!!vq6)zdWX6;JKD!
z)Y#$fkMfo6xc$|5b5$vSeOkv>YeU{&ZGqZ5%Sdo+i9vyT&5wXxdgRu_zYLhlxIvXe
z@;-X{?yIP+i`Ea;Pr_d$C1nOC`XUsbvKrk`cgBPQhcor@jItEEs+FydRwj<Oz^PWS
zy>H~Eisyp!kKOY}bDX~?xHx-ySmg*$3=UkRg-G$`0QQ@hzu*TZhrU=T!2QI+QytyG
zGV(72)#C@L6{pJdiIgw>Rfrh*9=vApH<Hwlz3Q1QGO`8EA{iMk9)1CSP&HSP(=Z@(
zZ<ltB!pUhz#qcCB)}affED?$PTx5qa7N2Yd?rSPLsWQelOv^8NPP<^|5ApblM)iw7
z^+#r(RDx22x-F&B<*>2DUMnA%Rc}H>`xuavrxC5KY};{THfJ7B2*8?#aM#$ebcV$`
zPfD2Wv>E|70$#TNQH)n53e|e~)*DOn&o-qzQnCxp%niXs^OWHlCM#)y`UlHKg%n=j
z)`UFQ@E#yb<J^fSt|gY{YGc>xpSx7vsg<Osh{_hfU{t%;>oHW%=ESb5f)1TL9W!Bn
z?vZqXXU4`-OVNWw=}~3_;EB~j4e{+>q7++QtGF&6U+URF1f&WuN#o)>{RIxc;7hGe
zued`dhaY}Cjj!71qu0d2_(b-8Ut}rVd$PNDd1To~@6~2=kov|!|6qBM#r=YnwFj>6
z?>f}5m-#h$H04ndcZ=qtY*0uZ#xgY)NR9Kl{8w(c?4akJti0lW3%D}9Gi1f<KIZ#*
z3x{p6qeocMF_(m-Fb`fhe)#a+XO2rRw7QP_HkZk}y`UXwt7G-dK*;H?*U;wNhu-8f
zrrkuQ|J}qfGaYCe*_Jy=zfpDLy|1+bhwCj_T44z10U_<WY%1I?fw}V5v9slb1k%4I
z>4e0PU3yJEqfr0%9yj<rD12?|_)tAJ9y4_Y@>U*Fk6LF2$`?9L{_9{slrESlyaOKU
zg)Q8zL*LjbzjmwWJ>@I`@&U*7ZQYkiV{4Ve#k)E&sJ;gt6@|>3{7bWxHza_wcXG-Y
zr>w*AM}iZ+{(CpR{KES2iF-&<YxCD0yDP-){8n7EM%#NC(L7|X_^z_)#tu!Qq&nk-
z-pMj!R|>%)5tCF6<W3uXdZ!#MlhYMBp6TqrwH*&kkp|I6wf>t$oG$pSbpa3RC*eR<
z2v)O1l(AiW<dQ+h+BHo7OZPV1V0p_xS@x|CS}AgR_GQ%fD$~HkyNEG1J00XvW08`x
za9bcLom3i&=w;hKm1X|scgLg3D}+R%tXSOP!0|Z@U-)&pN~WwS3Wr>NbN)SD{LzRA
zaC@0MoG$+A%Axa9Wo7by+0y{H$(3EgL&k^ZmW#GnnGB~+4%8B9(|9(bFkEA~hG8Gk
zxyvBx)HJsuF|t3qr)_unqbL+#QO0Y0AR4!;ptF5IvD~b+wbt6l<-`|~?xm0loH3c*
z$ox0s;-6SWm}gFx>0?k0-0nNLo1q50Ut&uQ#-rf|JjWQ$@fb|>Hv_oAKPO8div}k=
zd8KmmYwt7Tt|Q=Nz(DhdXrto$L`%n&V0`e$%NW!slx2QCBK1n>>~X!1U*C~n3TN`M
z{=rJ8>%Zp(is`q3WB>>MKDh~uZyZan2v99_FTNWSIvKLCEk&ukt9cA`NG-G1r?U*N
zC~K;8MZy+P#&yZWWwY-tT5pgw$WjVKU!-g*2~z$Ft(@-D-+_BNdzL%5kCj%oN{GeT
zH71p>k1hzN12oU)Jj&BngGHmeop?g+$Rylu0!spmR!o{sz@mnWC_~;bmE#x&J2RS!
zrMjn?4dGqFYUDyvrG}xvVXB9q;gfbQ^dwxuNoJ+{p1bFTa6H_>I#jVIU1-aLhlvWv
zq(CnjheuA!u<?fQusz^FEvsB%5r}=ne5@~*cy-vQ`bi+_2cl6uQK8iI;@nwFDoD-*
zK^1S#@c1QfV(W8bJ(fhcU1^u%C&qifs;&40E9V}0cAo0I_Ki>MA@GYA42+>hpcT#H
z`?<qn%uB5`bakChSXAqILOLJktrG_^{qhM%%`NYAe0lMa&Vs80HygBb-9Y}cparlw
zsW&P1IexoB7Ri-4b(JPhdty<u`6rIrvGbUjuG8w^l)nzO`0^ii=?;fNhx&K>mMelX
zDRIdapXRvOj>YCppG;a~VvT-bguq6a6i%BxhJ@H(Y(R02W3~x7{`b#^H(mBlxrJuC
zB#+Jw{F}T+M**_lwDj|tI9hD9wSYDcYzqKMBZ|}vNuE5$<;w_i<J0wP3Zep`hg9ir
zFE1o`hRW|5U;twWrEGnIXBB;luj8$lyN>WBor$3yG}6Ztj=TnEEy{CTtojQdguW!N
z_Q?|FIQ6)@U9M>S#p6GFWtss`Pu3VBbBAe8`6bGyj#9qgNa0&gLi^Eo)Ptt$XyE!T
zQn%6>Xs-}7_9>itetMPMk0!I)A9dkjyhym={)N*xm4jJq)W6N}^1z!C>=Exf16&pQ
zZvS`$1n2CpVxnP9D^3e8btZx-k3KIR`JdQ`#BfZ!<v|cE`xtnR`YfHdiS-p}Qyp$=
zNp%Mobgd>D`8B^+eD$Q$6L<%EvbL>2-Pn^t`_ys5+89_Tg0SRFL(S@0(!#v_)Bh{E
zU|~8CDN@R>+mUUE_LKkVZqTegd3v{)z6=x8bjjBwlZ{%E70-p88;5L;aNK#JCDmZK
zBKkU{@2`kOx=;YVq$}L6mSR-feYMJ~>b3_4+uE!(?Z}<)`r5}?V_?bd_kW|(%^K=0
z1N;8UHw~s9RbEK>_Y`7pUiN&s#osbr_!nOy^Ws-I;kRFlWeF_Q7}>r{@6UaP-t5`;
zI=A^jk=&TVg`9ra5MOy5D!PSO37y`0Kga2~Wj|XP&3TB|PtUc-&_x@}andSD$R8M#
zY2P|6{M>iby-mPfD*U63zg!O!`_{5~bLn}VwV_lFr9f{bh1G$Jcy9xj=TftlM_)uA
zckNin$M^^iPJSR4-CwiZ-PxqIsWRkXGZfe-Hp?U?Hu;raG%ao=2lZM96$Rr<6^)f#
zRyZwY`=m9wt79$aQXYkM=$%;>orT73Z2q{QCa&WLK4#)lmAPl2R_l^GQXAdL25DWV
z0;*DRHDP7FZMZ5ad5aXmmrvUQ6L+h&vTXmw6+U@>S9`?0>gc3NSgK6_Bj<;#iVX+l
zg3fhwn^MdBs6S2`yUNkV%HU<F@{L{;s(UjcnAor|0rI9MRtovc?kjz@>EP4WocWaV
z@>6ZA6waB*QPoQ!cDp96u9Z@FC%)XC$ybCv-56be*;YIf88!Qr;f~0Zu@Elw6J}!N
zXP<ww#(!mW$j|$ukz5Q#Urk<m>H?(1FIYQQ`!fo)!!1`;?p;_)`DHv(z+q1du|8hQ
z4`u3rfNmPo+9EuYFlA87FIUS9TzM?P1XJFe7v)fe-1H=f-vCaKzfaD%nLR@~KR@;0
ze|I32?RErLu)mP@%}zwlaoLPpBY65oe{`n{o9H}NgP-%pIZ9<!_{^7{9_#Rs>l++M
zUyjdQ!W~jCBtNHUmPWNM{cqlaK>rV2=i@CjK+FOHgHhqJ&S^44M-?o7ZS>37YWTXt
ziD=o(%D}|?V<+XMN^NXf!`OPmo%PDTqerU%5(Xf2166bK*fa7YsY!nhyTz(C3C2pu
zlX8=BEMw-ajGU2~3R8*l;NXJz^2*uk@m!bN75waK>wp{t?YYW6xE3Wi{(}DNlh4LK
z<*5<HKcIa53OsV`DvkrM!mR9%VodBTST8(_zFf`#B1EXtELG)AZue@nw)4fUF^?1M
z_&dX~|NaZ}99<Pk<B;Wdie&c~I?Z|C|0~A@5FkcXqGk@v-~(w~+71bCCP(d26F)4C
zWURdUZhcdI&U1Um;z#SKTdZ(Y;J~r-os+<PY8gd9js#W2K4@;9hsm2HjJMU~O&+*S
zt2N!%If!4Yl$(gQir(6+oH<wfsolRBYBRPT0f<0Rns-C0eXFGg9Yw;CbA8&`<Edw+
zY6PnMcy6ug#tn{=74j|T6*Yow)x{zCCm>^W`t7uu+2>Z&qUXZP^0&5t4pNlg3yLGx
z#*N^9)9uW_vQ6yQ+tQ&(@c6X2JICS%$MR@4S>Mo``4_{A<HV!ybYf||>d!?IkFb-7
z^w=*7(>>G5Nq`yvqF(ZAg68Y*&v{KfOY>unE(gzMNRn|l_rrF=grTD8Dj|7|dH4eP
zBLit9G>4^oui9S}dlj>+FeYE=nKxJf9s1e}=pjRW51G*MEU6jG<FD}W^sGq8iHH)$
zM3!1*TzKmWfTjpyNcf^7;fo#bn@PmDX#V6gYgAG2IL>JYkOmOv&;Prb)_*TZ<b!7E
zDx2cCXB=ug{{msXHE=Y->~=2ugjRz@=LY{3_@KlSqZ#%}73tO9sBQ8{jH_-0Q5!8-
zZ_TPPmgR~}d;8=}GqAkt<cj9G)wP2ZsP#`-6ss;je)JLI(Q~Jl9w!`owNFya^Ac)<
zYo|&P0e#0CldY`mjLxFv&~GElWXJmeYO|v_K8b01g~{tmD1H2(H;F;!s(60j70z9%
z6ql?7=%qxzqM>~8J=Q$ryJ6zC1V_GAEUa$y));!!g+cdI(=Y$OrSWA~-gaJ|%t0t&
z)w>Q?s0m0p$JI>cZ87MpJ6>}rY)@5sjzy8ZX%%;s(De+2p?*9WeR`SUbnfV5MdO%Y
zKl|qB#ZoRoYKpF&Qp`R#ocnZPB^0;enxUP)*WCk^9;kjTMLa&e1v=vcT{)gUcRga}
zAb3Bko1xkqcIx@<%JBIFat?jk7X>J%LTfM}$1R3U94GmWu0Gx*Q1d?tuW3pfAlbY_
zK)JhAox|wq;GF{P?(W0WCE6cIsKJrP<EfPob*DqE_YO{F0Ugw++Oa%1=anvU@c<I*
zG%18_%HlE_&OdB+hvM#K>E!&eYNYh@bR_iB_jrMWK<1MNOaIcc9i8e0vDI@|S||t4
zDL@SzZC+`$Y`tHyc`lu3C};X*y~?Z5@x-sO`7zPcQ<{K&Z!^zs`i(4!UgiuXl7TSN
z;iJ74nvao$rQ>4|EDd~9><GkvoLvv?FCk<mG*g2YY>S{1zaYJ^{0k(AL`Ym&7+d;^
z!Rndf6pHE37Zy&gtNA1(cr@;?fSkLZQh;Jp^zZ1n;;OVlEY9ZK!mM@SdZOGy^|9kn
zvOQM1!&VFq)-gJX0BrEd#~vzJ#>f?F4A-wF|F7M5`2Ia{>}{J8i+)});o7_4zn}8=
z)a!`P9UaWZ?L8xwr;m`>$ztgBCqaWA%Z0vlBZN_+9}V+fei%NdigqLPF<zpCF?61N
zw8YWg#1yPz(BCbcHB&`uIGZ{#O|Nd}=lNR`tO^`<s|VYb*J^0dxXyvAVH3HlsY%#C
zX$OH?2nHxJCV=R>{8cRHxf3XL2_NL3!mZ@-@7AWH5$2`=o*}{@tH)uK>DaS(js?h0
z3RZ|`7yL=5Sd{B=p2YyiQ9H~+SN>aW&O;l^fSRMx{VMC|d#>t$H9E9=^xrDe2*`^`
zWC{x%$U*b~)^h>cx=eyvC(_t@;RniI<#?4EaF@ymFdzLp7a8jsi2VK-4pE}YkuFsI
z^K+(!a5R^vBWc<mu|4T*#FtfOsrxkYf>>t2M&i1g=~3&(>Rr~WrB@?FhB|$GqYek!
z2UhmPr5)+Nzr9nD%RxT7MMUDgS$uRs<JG`79=W~kmBgr<=2!p-GoZpEf?Xqc54}9Y
z*fon4(;JtabQ2y(C-e}a-X^URH`EGTSVPw19!8O8cz8tz*>4aZGmqvjW1?7RoAMIB
z@a}m4ui`S{ci-oEboBdgKCp}I`kt-5%gNSpiw<s9ok4f^ebx{BO*-+h<#G;L4z}ro
zk*&~8AR12euLtbkMukNeTTWM6#d1#yK)KIQ<IeJ>1pm>M8a{AWKEXsoyGYJt^?23L
zb-2Rw3Ocq*Al=1{#9n5rz4N>t%R8vv*sr-yt-Zt+>V8vRoo|Fom08w0X1O0s7LOB%
z-pR%gjuh(>96@}E=^wp8RyyO~2{Tmr2Z~jv;~8g2(H`W@$O8tizJK4oUUvro)Ew2t
zbP1Gh9NcfQaqNXh*VO!tfka?8s}wJRQdKc8tM8^`gaKlF-AptAEV-JCJG8_Mt{3GD
zZ^c}`ahB1ovf|zN2m(|wp~vn{Fj%CqCH7MWzA9;b`E+Bv)|tF+C2%k^(JP5T_c&yw
zDxFw&hs(=t^>A$c3aAe)_4;qCbIaS~LmI-ObJ6#Dg<wX%VsQMEn?I&|hILjvRoJX_
zTbVh3Qzxti;n3X==)2)@0y$N)8erRsJ~rF#J%4z3u6ThoAFdJ;z?uT`2*9K6o^#08
zj`p&Ct2bjg>8kQalZYbR3QWOKamU+(<7)SDCXR3;<H}F*f~;<YYP-lZYpWvB;mpR%
zAO0&=o6Qzb!-7_9l`r-58(10V@En15N=7@lLyDI_ZQonb7Ntm!KbU^?vuI<ycmz&b
zaQe;O^%qg|i$sHT56Acqj$GrOu_%=)793vz?!WI{c3H7wU&R2OAkZ-3+#C3(<P-P*
zh4W!tiQ$!9c`D_1s+&{NH@xj>&k_ni(7e^jXH|^hv(76PE4a-2_Ul8|bF*Q%3=32m
zz)jd6=K67U$Huh`_RH<(+5UenXDwU#i!Xm2YO^G*$zM^yZ36aI4$Y<gCEpCnq+i2z
z1Us0UUU0-ps(b1?Sc<G1W=E$SU{JrWhBXjYIh1MFZM(rljj?jVyPSC3#SP1-XrJL)
z$JVWIEh-)3xh9)7Ul!jbswo}}UHVThSXy!Xa=XhA*!=pv9B&Wn2}fehLHr_7DNb>*
z-*&ac$f2Lvf=;`m#_|Nv3t=>w&X~ptC*mxADUesW%X@DgRVA$Ha#iMLZ~JN<I$rK&
zBzQI6!~Y4F3zj!M>VLdT8{)acXYS!tIW1Ef$|(89JW`HPewZagxXQoUqfrk~3SiAR
zov+$0&kZW_Cx{fMBgO4#?Ez36W*{{{{wPvbdwv`mLyrHcUu*?9kiW97lN}#w#eVyX
zf-vEebq2Ko`{A-p14E<VG`+vd^5DzrJdb@O)z9nIi<r?Q@^Ip#>m^wpF0T~FGCxN9
zLGpE1bn%+@-sYQ2<>Th|x9;Gy;fHe^2v0wijzeIFInVOUk;prJeSVAbODQ8{iG}N*
z%868n2c79RB+|KWSR3vvfYTlse!KKH*D<zeEdj7Y!j#A|ogwdLMxzgmE09Wq4#igI
zW!yn{3SvTW4|bc?1D_PGbBcLnck&&rgI3f`U6=dqfO)6=?D!7&_V~t_%Tbk5TQ3&%
zJ<(l0b!_l}Bid~x$GKNXW+3f>rBub%&p!sM{Xp8|*PbH)8%|~b0HTpyj=i3KP)3oj
z2dR>pp`kJ*b|3rjg{^D;svi4%tZ!u|Lsg-iOM@zxVOESehS`bRbvpYk68QjoHU>E-
zGUcyhcgI=rM2u}<Bc@8)^;`M2fxv>F=Dne!ti2wx<LWb}VB7phtMZj{zp^efEP_+l
zUWeZPB2Pd1;ICI@Xa<mk*o{^7c=`G(HP8%FMuQ$U4T5~_uwqV}<<Pp1pRQch;44qC
znmc4>pL@wqX$VWl2tF#fNTFmd^|0}lKXTI&;1a$p(DJBj-b@j;4!5e_Txl&kRU#*)
zC5pY}&?u!da|fKM8oKTB#GB$lBIP|_gx=Sm$?w=SOrD+d$%KX?9kW;UAk$9$#GBf#
zZ|ity>F(H6whe#HjhbhB>~V%!N8hE5j9>C_n^eV2Kl=x?@+PCncLHPL1}5X<Z6D*?
z2dlZ?{a=RS%UmA#!1Mc#+m)DyD_z>=xyrF;5mq}aGI-vx;{s{jsuymJ!z5`!v(c2Y
z50G<)6a<1N%Z>Hr=5>IM{7^v#VJ58EWm6k&b_N8WO-*@6CEi1)#WIye!BLPkjbfWb
zsN4^kVU1${9wgiZDa&`6b+K&D%rR+xJ%D74*pR@!u}|+g{|LxqM>(O#E_q}bTdv^{
zxtzPo^^ld19?y_U`}(BK8a?+D&XMk&IU9kBCk%3jgYC!7@?}-RkewX;bM?RzWW5*{
zwM+nXCmsLs%_z>iQ)#!Vz+vPKku9XkFwE1=xbaz$gFz|gmK~$@k|0AEyJ~1lL#hlu
zPCo^MFb!c<#1}?7h2r6noiIs@tiPr{)_ak#VjFl0u>!{lRZQQLtb7k`?rtvFb+gGC
z3*}0+mPdnwu%pER?yF8G!kA{6os|ybBtgp|j!|}JhkD^p-Ic&ioAwftm}BrgYbbeH
zf+f=ZNyC81gMrN-q;;^m+U`Fwthc>MKyx5u1-;ewIZacm<k>w^eo(b7(eqS=%L;E<
zft_8UXirN?)W?oeKi!MR4l$*lyb$=!dcNE`TH$vs<&><xpz2rs%;Id?1;L8Qpdfa*
ziBO3D^C8Ukms;!W8+;eqLv2GvQ|P`Us=(*OQYoCa`%`38sT;jxJXvrP=2_*)wfqt>
zz$pr*_|aJ<O1*Wg{x0^6mTSwgkoRN9FRc?Fi#dwW)`ni@vP6kodn}DR%-{#CEP+FX
zyq5K;p9+Bo5{TcS*xD1IjHbzZ_uhS;Qrs!{^Os5%)96x!n>=I$rp*26!HuL_UdMCy
z=3Iw&xRj8cEDJaFzue?By->bbOmIy$|G@%Admo=)t*(J9oo|S_B#4?&A%EP`#!dU;
z{P{&1dku-Nl+5ctNXdaD1olI!M07)`h2sQv2aM|G)t!6rs82oLs=8%=WuvFFGe#eH
zq#8?AZaRCbvM_j9l+~z_xoNbL`j6j>*<{jGK9W>!l>tz-x)GtT*sk%SDH+Q?FyFt|
zZ(uo6)vcOyxE+%O+fG92{Jn9jz1gCwS$onk&{?lYUy0HtRn3j4(O_E?7KB}FY8#6_
zcxf;-=HiG=Eb8W~hdx=Jy14P{U42`N_shu$gU1w$A8$XLguPRIF=Gm;DmDHMj5aqj
z9iuE+ICS?OC#TX*(WZz>e=j87Tk_KP@Fs&_HReKXpRF-pVD)WpBJM-|h*u0bc5B&B
z0{A2ri1aOLA-{q>OU^%%c^u`uwe?{OO5KF<+{i>c2Y><mmvIf(p%sh~`-cXS9_}a=
zWGoP+_B#K!Ixg?thax`j{y~MtWVUhMw!N)BR))D}liv2G>&9Vt=&`z<sJEFH<cqhN
z-RE~tW_LcmY4+Cg5Q?+d>gnVW206>sEs%=L7=Ui$2uhpt!;yXlNttZF<8Iu2-%>LG
zX&bh{M+7uGRLt1w@IdNC9t1rq90?wh4Ij|t4MzG`oGEvv3*BxChS^a=-$OsbD!smT
zwb3aK&2Jq@*L;>kzf9do1j->#xV+5)j1-Vil#lg^QTC?$ATUug&yYy5l|W`Uo|CZu
zl#g_t23_aGQ!!P?Fy9L{cFEL&tebcuK>Z?ba_To2obH`3JZ!ed75;jtc`q~sY_%Lq
zT6yHlL7uR+<R>|EXS#mFHp{qSVf~i^>Lqzq!Q8zbkOR&x5~{67e}s{ochW!R#GKsR
z7GSLVzO0^3*ILgVFbgngmeDX1l@^e;_Y#?r{Uhifk5J0k+j~cooZYL!h0J?fv@C{Z
zL~1*USGgw=>*6D=09skcBw%L;GfhC$RYCl9&+|p>$`T;5>gR6$GN!nx?h<tY)%(YS
zz0fdsz#nQx?9iHvY0gvBg9Y9{ff&@pnRJ~Prq<hU`b#L@*YrvNHvVhx?(UbW$36gL
zMoES@PS5%VjgIZfaH+K-7LpIY%ddlhL~yZ9o=|k+3o?Chc0ukOY*mwbt{Ise!jN_v
zfAh%K?M2#(!W(gB#kC&F6YMPw?>7F>8dYHR-!^kM<>ObiNXqJAl1vlz);ug$%a6;~
zjZ<7AisjUEjFaix@6%^$0WF0yV&{eF|JkWJEAP@q+1QVvCyUfffu|1?)cBcG*H2Ap
zVGS16sjHSR_+ZmGkG~B{YQJTJK@O$^G+?IH&FBfpX<o?b4CgluHt#Ai`6QMj^510w
z?$t!?16T<pUH|CmL!$;+wlAz2SMH)>+>jrU1k#7JXvbd{7KW)_6PKlYd(#yeWXm@q
z34-S#b<?HG%=Zo12ijO6vOm8G(n=Lb+;FjFoC{bMxh!RTG7)5&(b&eK5j|nwM%}_T
z-xA=&{7CH8w;BpCN72_IF*H=St5NnLsvowT7&UY+4k|J0fA!GYp4}ucK(o-YsBK-H
zqUK_U6$-N8_9pYzeX?qA-=IkN)a)8(;H(0d6~a^1g*a(4r+rbbrXt4*7B0-bgfz_6
ze;s(#l8_FzL7!GeSKeOqDhC}Lx=mmqNu1sr8At_#I1zjtBzDORK4I&ikg*P{`7C*x
z*h-NwFz2#9Bvq5-q{^PJN9Dc2fu3q4{;Twj@&b~{8IMG|-SC}AetPA~@+s=CMoseI
zvm&uzVgR`le2WpgiHUl}WNsShu!})AtK*jQAQ9VR-~-6%n`*d?Ddl~LU1Zy<vAeBJ
z+kw)7Jf}Oc#-?!m<1n=8H!A#5&y!XrnwCj{*~f?eP%$iMt=D5X?Owuty_<h&82Tgk
zlz#8{p3CTC*?Nk`jb>&p<|JBfVjZK>>B_bDz>cf6a?ivNk~6UUFd$%|l@@j#?p51k
zYb9r+=Kd-S$-G@p5<M|H%-rc|krAu}W#z^OxE<1*(nYp?R=4$vKEo4{pAGb|`x6Di
z#ru7#BN*Io{G!xGNqGyDdb0gxlfFZS^l-xOthV>YPKb16_%GK~eN8pW8~rH^?dviP
zQxzqCwm}xI_-XS_)7*oTV9PEVDh9Y7&@D7fi6L_q;A{j{5wGn@D45)Mi7H?Rfgdh_
z{h`7izr*x}f-k4`ICpRVsop`pEH#B@sk}pnXF~gfEsVoX)HY~fI~4gA?6$g9CzMjp
zZ$7w1l9aj-?gAYy>6)AW``%RiE@#LKo6x7P71k`>e?D&B>zAf>t>;lozjaHln>jT+
zAIx$;qI-Py56cihqF`1NMLE9Clc*g+UN^(?G6pqe7tWqHCSF>w^1O9@3_;~>=I%2H
z)zx>x&pz4LIRjrlD-sBJpt=bHe4%B;E-lC0zr!7#70#y{Ez_(SG;13b>|_BZorZ7r
z&FLZkjJ?w*L5gf5QuScmz2}CuR4qVF*3q_4cP(4>wrMD9z5NY_I4-zl_bm19n}Cr7
z$)6uLxTxyQ#Vb{y^0@NUdR@y<)f<hhZIs`)26VwY2tT(e)U$dIq+^sfANZg2EnF&&
zN;Uab1#O(7AABp6^-G-AjOi}laE>=Dludj=eFtWBC$2hKk9mY2L`it6YWH*InYS+U
zjhU@p1rYPP%|Gyl^#)c;faFay<Thx0{BAvOi3))go^(gt_Iu2>AyZZltd2^UYcw<1
zGz@$Rw~D1Kwp35A8;~^oI+JsHBU$NswWMQ8ECS`J9~L*Ji82@)d!IpyXmW3Xuzs4n
zAPZ8^7HIB_=Qx0m1p%w|7OwGjdjC+2d7904%5|w>s7uk*|BJ7Mv8~EiVLGRT5z<~{
zqcD<{YW`n{i(`AF-f@T$R0$CPg4lR5->9eWB=PpZ|6`%3he)(A3J2yd;Q|xOcSuQL
zigCBah}dn(A2H?cAUiWB9Ha}eN2Tx5Y-cGU-k_;LS9!=hF<EG7yBOAcu<ujaO=?#r
z$(fwOhFf{zjjL4;sKd&+o6V_Na*Qp=eL_NuP4RS8!~5LC4Xt+`GnPt!$zesBPKsHx
zHl<+lKMe|E)^L*NJw8iEUHUsf56}Y)>O0cb0Fp)KldtspDVzcC^GzxBl{|K4hgawF
z`@nC@SAg%JwJBitR^J1XvI;{}m>iwu@H?IR!Wg)f4>^8@t5_!dhLS9Zhm+_5mH)E`
z{YTc;yHza$$6r_LRQ#KAqvnVp>k}@g@8ad^yw7}r&s$Tv7a+_w^v;yp;=TDJukSwH
z(sek@z?7JoNY%)S6rXi6o?i-z3UwMJuT-}?>Z&(``8Vayk6;l{7@j_$K1dNiKvlhg
zp|PC!5QBE+VX53U4His!dhg*hTml{4!nHX;Drr`pw5xK*N}t{V^(gh}F;AH=$8BhH
zf7g@cOU$Hk1yM0oT1#suw<Zj|?mj{Cx|}LM!CjF)XL(-njcbJMvQw>_p2!5|A5r6B
zt=Eda9#YEi;zhG9*e|!^Tj~=LLo*Z~>&R(ocNuMgAZ6p&ai0d7C$XBkq$WSpomnRF
z%A2dk)t@LThd6g96Dz<)&#?;8gKZr&T76fG(%#4i)w;=3sINeehTyNFNF|w!ZJ|n;
z+9|eoG{r<ehdp8>VKKbUsk_Y-I^VptQ>Grn|1<t}^QE!u7vG0EyYS{0@AEpJEd?Aa
zIErn9aL@CW1;e0xZ4L;|L@$`ntgTPmaDq&@8Fm1EBaLZ09y#KmeH&_G3h5~NXNeKe
zE-OU5nWf<VdY6$FL-0oe5I{6dxuT5T_Y@)DbitfpB)$;gG!+S6A}?zyrjtA$4K{k=
zxd7ftb_%{n0bY|>;G-WtG>8e1MI@EipBsLhZw8g#;4g<{&XPznjo1S3E_ylAGZ51@
zsd0WP{r)tGdcPEANuPkDkp)uhN;e-p$7mG89rz|ql>2|Sln>Uc>mX3Vlr1GIYPe<@
zbmlEuDgO~PG~ONL?M3D$ZEH70j{&XicZc8KZ=>6cDFp6iGD*UK?zzL1n6U7ofWZ@d
z!J<FKeD{sXha@4S89r>qK7S{H71n8r*TR(rCJ(*|FlgGEZ2PUYjCzW&>}LbjLdr(5
zN5T&z0YbbDHt|-_Uxa&G-(0?hOyjFkg(RviDlJ;vHY~^|p)Ur*nhlAV#0+pjB6ptI
zCm|=Pf*@g3d3~TY<`0|s)V;ifiw0+7^8+H(v)=vW1-T625pS21_UCz*Dln`P`G2rt
zc{;Zev3k&BL|L0U)$C9?=xj4=N03>(s$ynm)%kfFJlSd3JA}0{mwJ{to>==J(Caal
zcAqrr0d7}BDQBf`Y?M_7-F>}eF*0KJN<Z*E?2~a|px=ZW-<~%=CM_Wis$OCnVtdEW
zs!;kVQ>r8z#PU3ERZ?yYgN3Q3+6r;df}5K)Pnp{!iQZCM{Q@VIOG4J=GTWtTHludo
z!!KgJO;R57fGCTeDFAyVzBB>+kL&HHgwY3T8F&O2mG>%U^RD6Q?ychoT(IB&Z6i}>
zgxsYha$^I%%|K_$jH9e#Il8P3D%1etzNQ|CFSxkuNqrDx4Rk!tW-8ije-E|Y+@O*T
z#x2wMHRf;hI+jRU^q?i(CNPj}Kb?l%Pj@BVB-cxtt+9}Z4d8Te=Y0~x9kT@&cLdyH
zM?K4F^yUEQ_W<TPY-C~z?XsgL@*(Vg#;kZ1>Chnr*5#<^RB@L|g|^JzChlSzzln>)
zlZU12pW*kSxHf&)4NWN}U)8Uax4fHz-nDNGIO=S8{e!GhGQ`rX-tyJx7E}+TfIn)R
zK~r<O`M=}$^OFevk;FJnGb8BrGypa?yB9=ND=s5G!&#~@AM8B{1Fe~`SWWEC=`W3;
zi6q*3nYA}vRHbWv5;rELa?i0+Chfn!do<4aL8Zv<5r}F=h`d-1QrgvAO^*_Mo=K|f
zt6~!kIsqb?qf7xuvE;YEL0ekVdg}}B!kA-kSMcqQB?=^gs?OUL<ZR2Vw!<d&tkfhE
z_8k8t@~x7JM$h#Q&de0r62JqxBR{%&RisEwGQ&7#PL11W#Ro-5m%a#N<#+aG&KZ9N
zV{%hf^hqZ>mdOUFcPm(q16=}OG}|d2V{8frx}82g^X24ok1p7yLw!b6T~6yaH|PW>
zpgXfHM>5axJ2_J*vZ^T-OXN-AS6k@38$5pFTH@XwP>`#e|Mw)M#3N31Rn|lh&P}#g
zYra*Jmq?iroSPy{`V=Cdsrf!rE&bjLZ@(hp6ApKoN)xBP8{ERSr*W7IoX!vpXb7CP
zJfGm!1Mxk<9E01%oM1IcPd^5M^yj!jg?Fh>RPH!!L0*XOKy7y$x0gK9xX>N-k}xsA
zbp%srD;KX9Og86+R=kaUckgcRxn(56vQMLzVpF;Cd5W;4ZI1E6^ObmL;{>V7E0K}-
zn+IG}b^dRoI3T4%Fntx8)Vv8r@1T1sk8>)On5)FFA`=}G;(o$1!_|pY!5U>nH{c=;
zx+D=sTelcMl&RZu$<&3^@KS5=KWuXA7`kbG#stJ<k?Oz%1>oE#V;~xyn5%-!KKLzf
z4>x?}4W7JEs)+0=W)${>xc+JFpj(9f;tC{i0`ee~V}I*?YQ9@5_@*V~d~BzV<2aL2
z>}iNF?hHJ6@gZ565wnk{^P&TtVQG=TuiEg6`0GWE1#p=v=tQey!oIyX`Oj!99%7dv
z_RM$eKj`#hv=}7N*gnXQ3w*eo?KTO{4B~k28WAwjcn<@<%s!^U7bL<rqZ^cqC5O8V
z&GKzkyRTTMPaN-I{Njdd@jJ0QuYL=5vNgYOCwUW05=`es&E;_aX&{*VJgV0fgNFIi
zYzv5oX>U?v1?NPH#GH_1$F=-Gx$ubgCK(MP6xhIqiy?T~OpujZTljpk<asyvVz}TV
zQzXX`d{*f^l?VZCI5vmX-Y*Y`ISS)ou3B(Qd_sTf->Nf@CI#<ej`CoCn%a&}d~TNq
zlTp=lge!*B>d*E%0&asqiG=fV;GdF@aGL*{AW=z~x`7toqjF|<WZsqI9F}U?oh=h|
zH2(MV!(!FCrS%W1$`wB@AC7pI5J2z-D!DLj-MRR-y@*610}2Ck43XC4%y>@68sjUw
zH9l(hVUb-y+Dxt0qL2ig?5mvRc(*V9aPT@7fuK}UDY;ZKxmjm3CC1wLlKvrC<4FWb
z_+E#vSzl_~v&k4DwQv5l4E(`ya}k}wTv_23=W{(+M5vm_r&dH7h>0Aj0ek=OXY{X2
zAFla_uf2k*DyWQd>PV}7;QMJV?xR?m86xc_kt)KUem$>=Q8j<19sMO$A{;N*%vEwD
zJ&wW``Tye>Ez@czOM77MpJ_xwzN2VZ<lmdKbNJ5{sZY%H$^HQ#NrI|){x2JY3iCiU
zzuJ2Jh&9IOm2rRW-4OiKvD%-<1DXmoc}+)LeJcESGNe@-%{f)mIA|u-?NsUkVJIq@
z4w}@kU{XYq?=Z~%ChM)rq}pPB)4ZyWyGi<M>j>??-6c6)Bo5>O!*;pYZHJ);T=gb;
z105r8w4td9ToY--TtU~0NYM-vd@y7SXPQG1NBk36QL@U@XcHBYr@z&9G9KwklO_6@
zCfYSR-dO+am&JlrYb8=(gH_GcL8mhxYPJ2YP?0`Xb35pJQ3=cRnQ5My&7uk!v<39u
zM5XbGY~lUmi~1=;`|V3>sD`@XuUr;c!3Tp1YBhvxa9r6hCGD#zI}^6b0wL9!DaWm`
z#P?QQSwr#s55u1p06NIfidhE7D`%Q7w(fsbU7l85<i<U3TJxKoO=q*QIhKFV&ZtTY
z^CFn&sI-wdDbjqXswWxdi(s-e`Q0!7E$cPnt^@WgWX^N(_r!kjV<$i(Ia=|j>Yn-c
ztQWOe+iw2d6MT_Ti-G@6KZk?<fkd-ExLw_&lO&!#n7Qk8W!Vt|uQ%Zz9W2`*nX0t?
zjy@8bt!bR!s2l!zSC1zc&T(M5J8Wh2uMPwG{>pfuB|N4*x;^85g#}Ciutb4UNnuC2
z*P#AdFG@SlRC<0SM;fcUjKJXLmwkW4RkF8Y@<cwRHv5S;9M}Aub4M1=G=k8-L>lwA
zJ{u?(lz8`2YJq!68o5t8U3dtWg8=VqOozh<R$Xnfk`B3}vbEUA+6sjl^!22tL_d#M
z{FFs$h|e@gnfRqPZe73m%0A;$e$C;nTEFvw*E4sWXGmtn4{EyJJ}jk52On@8IvI8L
zo6$n-g;D=l^vJosmLs74_BUy{ewNK$TsmuQL1KQWjB#kk)_9$pmx&T&RJg9W(O_t;
zqDc7z-2<t*m6*$|NSTp~n!mAiGCjq!QFmvA)}{|CS9b1ldaS<ZKut{v6t>F1*xs$H
z?OV-lZ}h`Q-^?WiZPot+aTJmdy_srxZQWm=9TU;-iiv$E_1oq}2Vj8;?Qz%P>7iPh
zw|&3$Sf69^$+uOKv@rK?bz+<2Sv%+X+9!9@QD<uM^pU0-ll+bUjpslj<*F&q`zqZu
zY{xygzL#k*-w`EfMl_yEh^`ma4ZBfi@O_Z3)INv}-?L9YhyjdHqr!@wW`#O#+SF72
zvRTk}98YACDw}@)=*&jIR2a%3-gkG4PO+QI>A@LOIGgD2_8<I1O0>+gO0jj?f$e!c
zzlB#7CvtM?qz24CB?0>2=$@2klA1y<jJMW_70fp|R$Xo0Chi}+1#ejl9nK)b{u|%D
z;5t^&p=W==s$QEwA$Fs&OI2V%Or)+xOhn%Bm#E+L31|l7%K3Iy+1v4U9YI{Hp0d%`
zjX-uH%j{D?mHaXkv3<cItSqu6+&O!qMo6GU5+2*~dsAdd+-L{_+3dDTWRX5o{ezT(
z`+poij%FdmOP1W(<PeFJrI#MesBZu9EOsg0UkqsMEtEs=T7PSP;Sff#=e>1WD(BU@
zL%Oa)6&u%aitqY`81ag~oi_dSy5zP{ehrSP(ZB70jPm<M3n!^vZvmt3Xr|ZPyBUV*
z^}2UZ4u!D-<eRA@)iQgF<-Wr_nk=^a^?(f;bT<b$&1fptd2B6Xk&|a)>T0Og!W*HH
zB??fwljJ)NKz?;g(t<}+ZPzcsf0KFAQ;cAJ{$@Td`Zh6jxSwQ^G#1Z>0m?qN^O1Ew
z(J7H@rL<^;H=1-_wb6?bS!`D7h}wv+8w6d!M32}#T?-o!)$DBZyVnz&xh%)V<;QG2
zF1YE&XNhOZ!YlRQ!GF_aF(biLwQmdag;D1{D)lXd1*Y1G(J4>NqElYIm%W)OW0BWi
zyIh3j=8;j%b_4(UmQM3)OTa80dLjgY&~VUy>*>9Df4P^^e0wN2^CKxF<{W7=R^l}W
zB`wItuORjPfTB}v?DMHx#~xqU#u|ZKFSSXdFX6)%tkW8BBd!+FQ)7+DweDO5RVF4|
zp4S_+2Z=b|o4V|%>Mn+<x#qw0!bXDtgY+nT>_NQKIi`!S1Bqq7{Pq>Ac7>0eszTU#
zZEJCD?;@Y6iPMXJsUZGg4x{-SQV^GY;WxpP3n|eYUx5zYE557)S@6E>^agY>ptV#?
zB$*a6Ng~X>cGiI*7PD`w;q70#_;$4KFOk2k2TnwZ?-cT}JJF5c>K7;uH!{WvQz<*U
zj(;t9llJo#dj;L;9WY7-X9k_n-A@S(A7%%~wsS$1+XckEjNWEEHEIdFo*x>VbT6H{
z0fRtZNJWgxV2QUxd!A?{K^xQO{BM_EW4+Qs(YczzTGyHz+_Cr(yOr@3%QmeEy0TmU
zv10p}aCu(n9HWHR4tDj*gZ{hB>CUcg(GVS&9sDIzZ@solhj=%0cE+k*l0vaiSL1j@
z{hm|m+Pyodu>8hHp4mMPq0n)uSKEok)4w1kxv?G_BoU5YSs<M7Am3!bZ!;6ZwCH|f
z?yq={<wouUv6y2*?WKCo-<6MEeM5;JaI2Ja;Ka*0_L~CG$%yJLL%awzyNqxezNEHN
zDJ>g3yT3Z*Eb5bMK@hsUS+|y7do+A`$E)w~3_E4~wG|1M&)MANVeOfgd8eHhi?MRm
z4yidpjUCj$y`oM?iuOlu0BV`gGW2=>t}wNqeob?~9&~eW%C0)lt~~3{^~$KdnxY}i
zbtog$5~7FshuyaGr&d2;6TvEPxA_w+txhFXA)5Ri?sRH<uWSqm8y;9+)wm1r;kUgw
zKru5~fxS%cX=(n&<{;Np{-Ky?-hOR_^CfC}13G-ZUHg&g3deP}KR&oaQnpqESywq3
zJA*r&7E8wvl(q;cB7~5J<2V2n*t>pt+#}H{2B<`!6?8Y91szGdN@||2ZceRVNJ(m9
z#(USZS7LEieYZS+?CaV@0vS;&s@d;6%QD`|#4;J59|Ss9E+d;Syl!nLkYrSO#v0bu
zI*(sZ3Kn!vRM_b%zbM0pcVqE0S&201hz|?4h|mldsf<o+*5SZ%v$+RV`WZ(eic>23
zS9eUT6;FK-M}lo;fMV~OCv>2j4m{@Z75GbQY4`6Ed??DE_$h0UD#H<}SorS(Ycj5K
zz#((wlOhadKS9U=CPCo;pO4;U!A$mxxNyRALqe$H^0A`mw$^%fRx?v-@2+c7AKjEv
ztWZqotNSjJuaPWK{oL?(D~C#L{iq<RRoQ@o&6Puu2YvXWrEHNWX%zU_8siGb4>6QT
z*)Na#f*Da|c^O%+H((Y&VfBFZ8z}vS{hqsf8p{c;%hsDOmRJ;p_d5X&XbZP9@vg90
z2Zzp|A|=(o?8jCmfS*IqzN^I@+Zo@Nr+VV=7X7AYVDAy$pIABS56A!P3M+8EmEbB2
zFqY4#i4LP07h$e(k=SfNjtJ#yMRT*q_)SG*S(}@gZ1d~K73QwX-`bbs;XZBQ{yn^x
zS>b!G3xC(v4YF<vr`@9lgaCqia`N!yX!-f^mr^P0kE4#Hf!qdltrC`%*I#MS<Po(o
zK%>uBmrJDz3Wv?c2YNar^1Guum%j@x$CvdpUq?42DE;N{?VV8z6Q|BUyN!UhHJKIn
z?5Oc3i1Zit;(rRbE;+CZf9<jOd5_B=!8JTU&f$6<Kv84=^C_L?zRGX@2VNN}?bjXD
zk>nInx+8_v#(ZzBg!@X}Z8TQd@Ba^=yI(dG>=E|BynaIKPj%m(`nvg~C|B1fo0~6a
zdqhA(39eVoDm~b^)AAg%_2h6~bp^>6PDq1o48#dxf}I1N@@BAjhL#_geEq|l1(FL9
zO_!Nowc4XbnT}!W#CtFOE$rSk{3h#FL%y01@dJ{`W_bl8N7RJ>n(!p(F9X(YqGryd
z8Q2xiq>5%d05_3}UsC(gDeN#7Y~oL;Mu6jexSaFwC8V@jW4y%T@ln;mU)?tx%j<f`
zadjN~rs*2MTWqqA1{iN2oOMybpW+K<R|4dhqZN1NX8`qNsA<{8MfT-$w;3qc_a5O0
zH^Z0GN0eYKcW&swUn2WyWl}y%?kmo~e2ZPNr#`<DEzs7J=}|0(kcZ&Iy?QfvLm**O
zzu6}1rHOFjA;1^jA?6{!q|yoW{&nlg(f)xje1scHrAHX(=Wne8n~W}!>b7T?1i7dO
zTOxVkH#>AK(nRuJ%m@UqdN?^lLkXY#z7#LzeV`X10x>c>UaA}0#(xvlgHe|Ds1ltB
z5-!<o>V*P&=kL?ck@EMhSv$iRFl+-Vf>&(^gzP%mr~5rTfME(0HghGKy>IS4I}Euo
zCdZo~pOGLZoZ#uGm`-8@uF$B-a(1(<T~97oC(==;+Pq?6SbDwlVXv7SJ+q#~DX7PR
z8rvUd2f;r!5{X286naSE5c`o8+*^L(`p2HMaMt<ii6^0rp;d{j2d&xn3E(PJ5e)B%
z;8;#EJ*Q1$0mkukCU!##X&jykxEue$b>X_VDbfCgj?sJBKv!JSDJHBxD%nJLOX7!n
z*M%WlGY&9!%eKbl{kC51T~>L_F(GJV*f*qPyhBttqr_rfu~|<*8qNe|k%9bl+x=8d
zk>$E{)s%JBG5~z4`}NuS8Hw>!-hdStYNb+rw`!FpBBR?u(p>H&2YaLv?Du+NZy4ez
z^zw1J-{0D&*h}i+VvrRqzEiKNXOP88w0I$bUH}Fz7Z&oard$clk2R+M<OyPcmuF%k
z7Vkgzy?Q3R-%f8Lv3i9c7AF7wkoEQTDT@m2J7PQMQIcX6C|f!SOLu!s1J(72ki*kY
zf`<BkKPrnCouSG)BGFSYU6sE-HdavQNmUk9xT8x}a_--tb~b0LEle=KArry^m0i|Z
z(f~1vUg5qh*%}f~L()n`5ddOMlkcM9@j&}RQP0U=q#`e1lp38tUL*v!nhCVNFUB(P
zS7lZI*0^^P;~$mN*<-Wy@pn=gBg`My3&014`fm32xOZ;{I=X%{-v@e~C&6nfaY-z=
zj-|u*rK0flpukbs5xgnD+;yKt@xKJk@LD{*2ifo5H505$9{4aV-)Tk&=5MFDlarMz
zVnEid2M<8^ePjjIZ(eY)wJu*2yadU+Vs&JXshj1dccZR`GgcTQ*-ZG3In!Ui7&!Qk
z!kcs;3fkJSBEct`RWHn{J6P}kz5a;*<7m67%)H9T&7FOp6m=8`%`QIUPN`j8&o7mf
z?4$hozs{$3KqQQ9kH|V7_suX(ItCr_3SrtCY$sl};I=lT<9>xrMn4BX1&wXzJA{<~
zH}Te=_~qmHTP3ivPEHX?w}UaSz&CZzvz8OQ27wuJ?I}PzzbLHPXCnFfaZT0AIR?D@
zo{|b!D?NnVUUt?(QnRk~oWQxeY})r-=}FBsk3(e1zDav8g&1b`xP!id)bPC<Xx+)d
zeJ9?y^6w}AN-dqXTxV>#*oc8=rK&EE;jN!rPYO=8pZBtF|JXI_46mjA91m;FwB_}>
zoCtt?Z$3u7aDMHuzEFI7)W$&d?+lAdX5&F4Wm(fFZ)jtTQ5;BsKH2V@-+PaXghpXS
zeBb;k!N4Z@Z6D^6ZK{D9pde4|=CL^V2&^yH)0_tF??RQzqQ@^gk#+_(TTYyz<BB-i
zU0n#YnqdaAh3ZK8-IanFSH`b8bE=;~DLfy!5HC+Y-v{sW3yB*FXie;Qo{IU90i@e!
zUdeAq)=YT*SFA#d_P52q_3!6rcc{IDls$x{d%@q@=PgTcClB``D#UH8tluXI$uG!J
z^(O5)ch-ZOXlBJARZ9xMEu>`;^L^M)f`29qWTUu`LHWT$>xia#-0$tIAK)UyxOSjF
z<<@^*Zkxvc{ghjURyh~&K>!cZ$6RFo(}w3q3?RTQIuv&O4*UNh>pkP)e7-l}T^m+N
zc8L~sWhIel5hYlx5-rgZ(OD%3qKjS^@kR6yL??QW-mMa=MK95NuOWJSZolXAJa7JQ
zyzp_(nKLuyo;h<}*Bn^3%-R2wj#B~+_F?`mJnHH=i?*-Rm~h}q`IqAP?_8OZRa}Ph
zafNw11%)9^ht#Q0@%45e5i{7HzXUXK#IuMEXMS0H1KzV;_Xz~a9q-v*pZ)^bOJKF7
z`)xs2ryx)ApyNFh!5V|um8LEX1o2=%gAEBz$)#j`3fFrApz#;1vzRmF*>3uysvm`%
zEc&wIK<lWH<sGmVOG6jbU|?O%pF6p$CvT7E?i5G3r5)FI+?9|SIwusjM<0afa!pM6
zAgSR`<*XV>5s?6%)UbIsE9(=N1EWIrCAg6HoD~Q7qd}rK)-F}4q>YeIxxdGXT709m
zTG-}9t)}v2$JB}ZL47-h*MwH4cag;Hk&~NS_HY?}??Xgn=&{(IeBsY%D>rhOidPpE
z<U&TEC=N(tDocN>wEdBB(Nwi1E9-j$;NrUZa?r!Vq@|`MwHSepzZCD#iud;J{3sTL
z<OF+!V1={1jdnEAKvV7`(HGhA1Hw4LlP?M)eG48`R&Q!OMRP3_7VgLb%fREgb0x!m
zPxN090*9^;Ijbu5EC{1vbXP*ml{&@uF;^!(B-Vcv$ol&i`L1=^peo9JJSwn?;gNGy
z)qL~cs&375=Y}OnLAXZu=UMD1NMOx#pOM3H^>(c*KyKJ|U3%;6aRNPVW7`!}9O}90
z8(O58MD4OzNuD5Ma19^<)3O%iXq4Nqo3)aC&cHP|R9sbthMdPEwFi!BDG|!6P|00v
zjrylwq(R5?L}wOjwAWXcMo+bx1cRYEn&R2#u=2GaD;yei>OakMM(z<<^{MN-v(ZkW
z>NStZ%{h~f<@1q?w|}tj*7?v?-a#M@fKSanDX(?4G26cbVdo-klA{^YX@k^ddK~QZ
zx-#+kc+_b8d6S^jd9035>?^l*U>g#IVOH(#UBDVU%Fi_s$|s)LSajo=el_&ntQ2V<
z$+w#sPR|msdYwha#ML|B|8qDYKIU34`U+>F{O{INZ}W)MYOYyXEeAj4{VltD=T!2a
z&aq33&Tm+z>u$+R7X{WuF!+mBC^4FhmWi&*uOOh4E;QzEJS&V}+Z13#dc8^%1^)e;
z1EMe>#UwX(rM)SIN~SvoDC3mJyaI+!m$Wq4nP=0BTpl0fcpmH=hgD-l_Gd=pWlNLM
z<gQEirT4Vx>>sVd{IOjZ;3Uo~aQ6(`g5zoed2!=VGi5~ujNIc?HCybD=UJZ41(os%
zdYQ0K;byQHSw8=LUXU}E%{qRR4eSa-Di_Nk?5~Z@?3hxlai*{JY}eX>rN;5Z>L1tS
zmvqjIc7Ghx;OrkL<#o1x&G7Zh^{ewfo^60rls&b_6<xVCd60bxYYZ5|0?wI$k$FKC
z691JM{aYN`56`W+mYRJW)>yZdq%77QFzZ*0&%P{fJZIH$019ojp6nD>i6SV5;e$)(
zWX|+QBG>;7ZJXo2)T}dIumU@=YtPjrGMj>%TR{-`|0fgvf3<S9O23b40`O8dHe?;V
zFw*SbC+0H}s=IQfT&>V)Rh89+?bLsr^DB;%!kT~s0(Q?wETU17>rt{1@2A$NOL<cj
zL>m61lB`-?s!^~viCP+xDvkP~;>MemQ}Of>3rb0m|9>PX2>Z*!r?mXtvrmWDb6=%B
z)R9rBrN|njPe*YNPa~ApB>2R?J?Nym@1d9Z*j^+I2z86CHaR?<vM5xptJWy`tF^Dc
zADx5Ae=&(cm9lm(kM29%Q%R7x9m|~gAeSj{Sx62rA!Msx{x;07_*7LSA=S2)K6;u=
z;*C$mkFk-AUr$scmf?>}=^Xo8)_fnfb)45w11St4BkXT@fkbSz&*gf9%JEVThV)8$
z-Fm$1KwUgAH{42fgAVhcg3~$4nJu8LBcn5|K$a~!{LM<p%}7DnFhm0zbczFhD??dS
z^8O#c*ls@ikQ=6({ZxgD_1TBaE#(((T93ZE)f&_%<RGK-W994v06Su~^3NHjfeF)U
z28(&6L9X4+yYiz%7orOUCyvef80>ND$<tADVJ!v}Nsbu9U1N;Tv9cT{yivp5l|L#>
z(eTC1$>cU$wjA55As6@I(xgX&%BZhDY8v&DHZSTJUDd*i$I34;*2;3islQV4hpU$(
zokSX9!d0S|ZqSS*Y#8zn<Aa<p{>7x2<t<GruJmWb&f7uaAyEoie06^(RCc$xJ0Ry3
zo-^VtAnrRm@%F&BepWu)T#Sy2B)>=T6<^whR+FRr!<$YZWqUU{^49F1EK7r6S$T@S
zbk@voj^CM_)9MPR>F2I-wr_Yqcknav|J@~z@B8P_%o9-5vQ_-5Gh0bpw)33ES@Bg?
z{r9{u1#ZCC9d<=yN3+C~x@p5R8!C?cvZGkgPAR&+^Quy|Va$-cy;^PhGGF`(OcPsE
zz~JGsMdMki(CFS}Gy$(I%KM}ovvQWt%CVWbc*yiJI`)3@cMDnh?5z&K^If*Dk;$Wp
zQCd9f4#VFUvO|^9j){v|SDG9xEJg;h_^oYi-w-vc6nk+EXJcMhPSr}+Y`H4SX<LUZ
z-!u%yZt|o5OTZ_gu5C7+AN_U4gZ3830GzeY_}PiW`GPcpfg{N|$N6KUMxgNZ<#ZDy
zjL}%_`+lKCQH5UC!J$i7j;^r>S4R)v3eK*a&Sur*PKzNcwW<5v?W|t?R1gl^Bg?ZY
z$w$TC+G6|7x>LTHb;M*6f2gn5+;_cuVwDoBQC_~#lXh4d<sw%o&=~*w=E{qV?Oo(L
z=jg8=OP7tAQM(qMm-$#m?AEaTH|}vbo;}6*b*N<$8nypI6(mx6dS=7FRR1SN;d<*V
zyUYMECua-JaznObn1U6T981R=XjCiq&ClG3c2Zt^u>CGa<D6})tp~x<&n{3Aie5G=
z(z#)YhQb;!b3@n1wYH>-_k$R{SK+Glcf=v^z_CjPDxN~`OIU3q)L(~2=<w_0Qs}mm
z%?s^iPDgei+C6sr^c5j%$KlF8F}5MKF~8MIaQ7t%x#P!|(-Ut2r9j6D{iQVC&HN4p
zyQ)(LHlUnomc;XL(dN+1K@4-{n|+0abGp}Ml*$~Kl__2o=h`WP0JjuCcXG`JXzOI1
zd&b)1>-7}h&su$}8QWg?T#q)zTa9jR)@6epfE#Hv8pBHmmesnW*J{5_Ua8+Q*PE3e
z(oSr+82G#KS_%jFqGZ>9Y;QrWH8|#|bEuTbo^>GAq&UCFI65-k*ysmHIo6aP73-~D
zaRt>X2TV=QzHfBSSa$2rP0on?w8u3_yA_jg)2~!)k>(9FwB7QZ)AXG#%ahl=lY`o0
zCiY3^Df6FnHwGUve(L(GD@cbWa{jbgHv%2}5|P<)!2Ay+QX#YKnIFEBkt}yJQ>fYA
zO{;X)2rPYbn(p2_R`eQ3^gx>#E=j2Ryi%&SC>$AGJ6j5kTnml;nsUypRjizQQ;MQt
zmwhVAs**dX<2l522?wftJH?P#5Paj2_`J|p2cv%bwFa7kyMA(Tp_8#q!z$<j$v^Yq
z=30o3ub2I5Q!m9!!ck&%gi!@&v2#UAL*X~w9Kh>+b|t!q4W0EDier_P$us#^6uU<f
zP4<ZzzPauen=Wc~8C6%uWrL$tRRWIZ?UgaJmq8hmU$4%NtSjqY0QR)(N~$qd4d159
zdg~ke$`8{%y!(Z2qSMMY)<J2Zdg}xpR;kwRDCdvq?`GB}e5-quur@2H%lP5+F<?x`
z?r4^y7I!vXQK!GC)wS$#9NYU%IQDnuGj~sf=~CU%^rM`!%c9qteM+huWj0lS2|YWW
zs%XR^=~047)r2TUwb)(nsKMNHU!$_hWmEa#aktZGTW<Z8{v(%*s7`g>eVOHMz>0xg
zNyWz8YU4ou%gM1^sn_hL@#}{Do8Ro~**HagbrmSLzviG~olAJMU3;yaFYqzHs~@mq
zWLIL-oh@&i39D>6t~_n5ajfC|J={=GYpwe=qqst2uIBpv$LZ-&gi%#gbgdHR<8Lfr
z#l+q>_~`NBrv|g2r3}T+r&U(3p1ufTdAt;zAQhcJF7WW?k3iu6%YJ(fyo+v|yfGI)
zVsu=8U{nkM5io|+$~)mN+d2N}N<04;l9r*hqcF(-dE|L!wF+!CVLfg}ui20mP|Tp%
zu8DfdSwp6L(V>}cotn*$5#n9h0jjb5F{ixW?=wf)!V9RDDs-v>W)2;yPgqBiCUHPB
z2<U5e)jJzlyZIYqcr6{R91_0es$m__r916o=Axh8IURp9+KJ*TbIhEzku3#CWxAg2
z>H%u!)01@PA4UeR%W@G$(;?>j`CMv0GY%&C5prkCm_de*UXC~3A@s@k!5Y}ZAIb*%
zxgQD<w!t47V=OS0BRb6EUokyRAAaQfts~4f%GZ48bp_GkR!rQ1g-*Zu^@_aJ^?As7
zjASeM{svaQILi0+z*mxINcSo8H?(U|DGc2#-nZzJ*?@hw^x(C~+W9<2q){DTnUaJc
z4(hR5QZSc^z4TZ6g5c83n;+@@xf5;$JRA^SY}4V%@vzM1m-b%?=hpc17ncZUZw=?P
zf7gDSKk{YhL4aFAI-|O6ryz`3_lNjQ4aFkzr)bQwHG`Rdn>^AWzb=+gVnut+kw4Z|
zzg{g0k3%=zf==5N7lm7#oX9S|=UDxv?|6dnq<6(bn>BPWt0W=Av&*j=9ni(|&XxhT
zX9INORk_>nx?kltOFa?YuTP?3fAW-m$FN~IEPuZ&F3EGx9^9U!o6Q?_|NAx)RbsZR
z(jG04EP-9F-xCJe+1IZDOp&vlGZUsicUJN55ab{D9m*8Vn^g+iYs1rX1||S4jHzWq
z3VpTwxsAb1%qO05M(dAmA2ub;Rc>Y;lr9Ay^!<}{T)tjp;jWp3V_&Fi^8mp0+Sqj4
zwwYsrCb)LTP&o&l7RRX`CyECi<2;}?fesS2I6qk9d&@A0P91S+tkWj>+yC_a0%M!g
z@19B24a90fTYQTL#!608&rCOZ;dNSV_tE1|*s=+=eb>&yhG`V<2Mf)LqrW*1iq5Jj
zi$wDQO(CY6kFM+98ngMp_d7s`6`q=l$B$t7KFbb%$VP~knW;7UYrkN-bZ-pMVUg=U
z@18@tpB0=wxQ79~ZZW?I5|tr03V73V%QL_|ZShx6Yij<pJgu%J`igMY+1V9mK~=(j
zQNyFlK2;i<_dK7Hm6k~DjMs=#CC56OyW(_h=hbgPb<Ptr1XZyS50(3muoy#c5h%_H
z6d1}mLR1TTv-42#V&2~W<jy?SUZ!(=cLPL;6^B~Pd$3W_oc+iBO_SaAp~St{I8TG`
z^qr7V^mv?EjsxnF`>yuFV}QHB!!o&o(D<Xqzx(`5bT=p56)#0!;6fA=^gq3W+jOG;
zvK8KQ{Qg+^>RNL57ilKF%+R(i4~x#DZRZ7l-5ejY(L9BCzG_r#S229A%n=l8%k-KL
zC60hCxrrfwnp(5lgwyY>`@A~gRm7$I+rtZ~{EY6WMHgXw2hT3pm@FO3UXnX+OpH0M
z`ky-N?`|{J+x=vUKP;m=+V9v4u4ymEG)ZeuNtGbvE40aNMoH_s2IeFWPSEi;vxJ1M
z=GW`chiVxXbsr+g{MMZ&pTCX$tqeyE<g^xAE)Y&Wa_|&L&7)N&Hx*?&M}_C?G0K%o
z$C>{`(U>8|`bfh~Dd1G2OqNi&_ykL`Y4xCt^AC3I&3_+y{b|?nkLqkGUYC&5{w)lG
z7xsa$%<fj$T^23+WNGR;R*H_}ei-Apq4VFzGQ}(&kP(V-nkRxTd*CIA&Iv+a7!<M9
z8qm|N@}jJ-Wb-tV2?hrt<TK;lgEQLy^dQ-E(|LA&G9$<XW~s5lO@u1>b>-`}`CHPf
zA`qQE9@IGn@X|zZMY#e3S_I@tN{3GNhNNGn|E1o>ie*l&!3GZD)Wetai{#cG@Y-Z>
zTe_pzr(_svV=>Kk^G{be*4(w(B9O+3kBep2c+>xnbbkre$eCkHHS%(1oUi+Ii_F8d
zbGPH)#Rre_zhSaM2D}3V$F$3ZXZ_3(5>tuH>+Xj6me$-v8a?D#GV-Rs9A&&BN=+|l
zyqR*wXcOWc1Np^eW<Rt=9Cd(ZXW@~26u2XAe9bX{6jfsQJD5db&$Ndbo~!QG!7j-L
z#&&q%#HvdEu(?ks-S=o7n~TUlXp-F7r=SC<m^XmQJM>MkpZ^S&Ti3mt(=_Jb>&7Rt
zII#*hNbF$lkr576k>HLM4j{&QdV<c*UyL(Z0i^)(Dy;|a3LQ+JzlIe!k=u^jp~gAY
zJO3-#Je#9yesffA?L5yo$xZy52n7E6nqfBF^W%T1MFwTbS6b{oY}$g7UtMsInM@f(
z)>7#yy^s+W!j;NhOkV{t*TizIUE0H2z^(Z{$$api60z|vB^t5!ayIm*7Y{k*@pVCX
z`KhnH1|=w2F?#o*7^{$X2N}+C85Ad^KdA>AM&E}n;0?fWi>Wa^xOUL<TefSP#@3Jn
zYeC1uybGi@9}T=p<Q2||iOPP>F1FgX)^9f!bfNa+V`1dy6CVTn^I{xg_NMOBL`-?<
zpbGTPUHZD1+_y2Fn-yz}4LBz>yz0m|oh!+?98JLOPj2%umBnaVcZX7@@&R64vcHd2
z!MHB}L5nGxWs;Xr8FV%t_n4YSQ1hp{l%T3r36}^=PfQezD;=is2(O<X4dt$zcj~k(
zO6B*CsUi^g4}3NLXH_$h*r&^?6DVH{;VkV*y#%8Zp|=l~9_h}}jY^Wqy@ZPd@6HS}
zw3TpSAIo?MCT>PkG5LRs{zy!K8>=+s{H2NWVV=C+yK7}hlG5j~camcH)yBp{%?Tew
z<SyC9h7)a=pC1Yfr0$rzBt?MpH|qW*Yy-kKvjlODqarc@)iNv_$QwqtmuDcrM5W!s
zM+b@dJRndH!|`Fgy?K876;01rx~BC5cj<+_Af8e}?A16&xaA+mf*q2|SD?Wc10~JQ
zWjK3k6jC2&;#?1fRo#-i!)N_-KW=dQ{WI^Uz0s6r!6y{tyaBZAhW&bVc9wr^qx8N%
z4(Sp(F-Z1C_p#ifb@-tCyiN9Yl|#yv;cv@cv$arnj0aZwo}hSc!k0ztRv`}Bvg?c2
zP6%C~gzPB6$`#$Tit?fYuHg^qVXDeV$ycMkB5&4gJ@P;F5WhRdLL&(--X7~xd6AaO
zAn2j`KI-kb6Ch1E9lC4zq2gUY=2$podiqP?U!u{4JGYQeQK#jPPouK!G!ko+fH8XB
zlA13S$lza%+2TV(O5o2rJa;s6HgWa`Z8)c0vRwS6FNX+Thi*S^EM#@&7gT=nM^7V3
zz&vVe=1si_VQD~yVE2WEU{I+GsB(PR3t@?6%A5S&1t)DpB02Zr*uQufGaQ-Z{?#b`
zd-W6y3%QGDU{n^lm}wan)V#BZ2Nl3%tJg$#WSNYA(gE05a)TemE|GRCQFA}X5``2A
zXL|$x-fP`;OQpll>@6<7fAm9~DB>>XS5odZ#WNI;D8T#c?C&`+I!mjQ(rGl>-8L1M
zWLVnVvxRR{*gbG+k5EOOsqH}C<PcBm{`tH29}0EFkfT5Y6PcXpL9}FJEi6ZwSIS=k
zj}n?Y;{b9-{e$9Gzw&_F<Jeanf1~J^Qfr=V)2Z?AajUjiRp-4!cX~eQ`JHHOoVw+1
zzWk(L5Y-<-0rw`ZlqCg_<c`}eKB7B}3`BDXeV7=w_X<3<+8xr^R&@3B9Zt-*I0jH0
z+W}uN2i|(ny9YF$oW4Hr`RHj_VC<*xSjQ0XmepliOQw{?AJ=g3A0lU`CtUw%9DSI^
zoEH}j;2&6Kt~%oEP^>x+R;NoD#2Lvrtz2KGF79ljI}UhLEW?!e2>)9BXG^uERH4mx
z^emJ%g8cVdn_ZV(@1p|4JLFh;0@<qtq-do(QOT_(=5k*%@F2zbwbrw=p9R(wGsmB|
zP~I$ez_luRvRw}omkMytnp$5!M~OHWDN2glVq5ROzv}`1%LI8qNOZ?~Uf$a;ZsE~2
ztHvUV0iI|!-{P=LlhpcVP0Z5b`w0B;6YbHG;A?LKaJg^)a|06=nPp?J$&tx5&h(Y+
z`qNuJIkTCgKYjiENt^s5JMJA>3W#x!6PA({>1*Y4Ke+(IKRvRf4`Oc}`+VEprO-XJ
zu-~3RPnj+OKRQ!0*lHccCn%-Vq;L<SXkIk+7p^zp+Y2ivPh}KGy97Bq*;cE{R=)D-
z2Bs4Q))aJhN=yX-fo59gPKaVl6cvby4f3%j?wB77gwrjlbZx}IK-{CROFSKK%R|j(
zknT{)jt5LROdE~C+<Jf=xKn4USY0`Q_l8$h%n5Pa)f@Q3MM({{(rA0LmSSOGdxHMs
zSCmcIRcURzwx)rXI+qdA6@ebj=z-$yiTwkaWc#VU2Gd7XrhIn9FmRLMDB}<<Tem*5
zf}*qo>>VdR-#g=mJ1ZdqNd9_1diwGQ<$V>qxKy9kGeXCjZf`<~IeLs>b*Am`Qd-wy
zFSz*@krM;BO{q@cB8I&369IWBFeKg6U;0YlP@3H%WtN@6ORBiN3O3AFrp|<uQr2zp
z@fv+$TJQ<D{zv0(=jXmR!UXwmV;6goJYCZY<FngAvihGdk%hI&KU;OW&&_GTG;8zQ
z?lhWl#372g>a|LAOmuSkb4nMd%INms@4U7!>*-3?2*z)%B@7>*_h@DrY4>z*lB4N^
zni&ljix>TIjClH_IHTO?E<@U7Q`-=whBh-cq|RMx{?Z9#Fu9p#$;lU!QhR_y1sWYl
zmJZziY+)SSJTZ_8ylNa|`P&7Hq;eF-dV7d_ph+4sPHhvGAb>JFFhmq|=*ga4aQ#%C
z$@2`kVCO|(Vfgl3aI=9MbA`mWn9P!sg;AppK8xF5FzZcqeA&BGRLCs_&^UKl$QPBc
z827+RMtKoP_lHdufb9GUWNKrEf8t97e4<!z_JU7B!StsR*hgS30#jCL=5XAw{6*^X
zc8BQ6BSD*$pTfL!m5qdywhz5`A(0%WkLLp)aT`7n;4tJcPw?R=0^gfR))$#_77ftR
z-pWF5;&DzXOCq*`Fde25GZ_xm$GFQ<+iFN4Q3=$!&5ux90O$FbK)@1@b!IyOre^!k
zWA&)ChXADf0?pt-4H5u&Qs4px<+LUD>9Ppqts77{z+K#7sChx-AD-m0v-biybsS!)
zl!NL#HVY*QjUNxcCyVtq>s1xQjQA|whxTL2lwYt;@WB_;`A6m$aXjH5gpL4uVi{Ym
zSjOj~+U$m~@VWO+hsC#I9ytapZ^3_*cmQH+vnVHUt?<HHi#HnJuMZG=bMLRuSGwO4
z^*juq2$+4|<|rwV3bHD@_hd+X7-61lgoP8&Bx$<1q)FO*pCwgwUp?7TZnSRa@ccv@
z!V-QShdgaEp%WpB5`_CBEc<><?(;Ra>0~`I@T^!Iu09n<PX(FvvzWac<Tde{wl@De
zzqEe;tGf`{x{EW|vl~5eOcK}++8-#+r0@oG1OoemXNQ7Z{G3<2?xEXKoHY!@5HP=1
z{|VmeV7mYJ?vbwHqmj|IcE#;7`Y$0g_b0Wtty1a4#Tp994MjF*^1+vrS~w>vhdCYu
zp)9dK*RFt|2NR>C9~%;QFAUoBS>m{@gUA^dVhP^95cZ!^q7a>&7q?HP)kIiG%;62`
z-pdrKueii{lsZnv{eYU6EQ;$%H8p`4d;EyUPRpTJ;JG5ApaYm73eqizDgA^SAk4JW
zg{;ZdX-nNk4OB<KII)5BNXe0)6<izWAutbg1RYw@pZw9F3D2Jy3k040bKw1kQYY&j
zC-7-h7*lIUI5~SVKES8j<~24Dbgs!n4Pj=ntPG=jBJvJ&HTatZtaV?sET9*HbUpa_
z=Zlo$^~I*$&coo3<DveB8XfM%{$va(9~vya!<S(@MJ7QD52>BNmcn#W6)de=DNa3u
z&v=ks<YtLUgyNE9Cf6`n2_l70R2E@<H75x=5*&1p;wIK_SrCzl8zj7dbN~<6I6$8n
zqLDbhrpQ<Qfk_mpz|^FsPx0@=L)!`Qgzk<8Yhhe3c3H4XnZfrwOSu)0;KNd{_Z+r?
zs8N?U9*ph>ulmziwkAK=rg7U=0EEa*1e86@7dKTRY_pJh8W7MTJ(2B#=7s<q$R$rY
zOBrS<NpC=6jL~eC38K9a&<+}uy_Dgk5#<-HXCAi3^@3ikMm)d1nA^QR?u;f1S{Tt7
zyl%va71DW3W{d#u%u#>o#K|PW>2B??f(uY6l5)A*pQmSMz?Qak#)8m((rtQibISli
zneS%!#Z+1y7Q*l_ytvaP$<09!;AMsjL>Ss0wHR5AvIdoL?X$c^ZE`P9|FFOF^KHLc
z*$Y6jWa8Eb+iICwku@|c+eGtUT0{Fn+E%|Y(BM1$)?{#oHy>dn9@fydILrnKkXkXw
zH=bg<KIXgIiBCn@5oyUb3WFym6=n<%01%8;K;J=f3OwT>`R_Pgp~F~FFsp~h*7nwE
zV%yt6qMZWYmTy}RTz$?NsR^+@MEHvAsCjiMe~RJ@CI^U?#6{xKf$u7Mpe6!(FC^Ao
za>h*LnGWx7-;_TGoa7mre_mB~{u1zSnM=)=i9CPuKl!Qqz!7QUxrE)VbLv}#(<{yU
zSaj{5GMgyunL1);54GEhCaLX=F4HEdYlF#xCr_Y}C|GFIUb0L)-}xU7TU7^>>(Dr2
zyMqP((pMTmQ|B@Ud7Fk^OD^X#x!8}ZWbdB?#IDk}V0*t%)D=NTBF$|W3F5uYih*z@
zDUPwd8d{QW%h;3yO=Zx`0k9(Aq>HsVa6@wS`Ggz;so3R59zI&Jt1CGWy_64*6D72$
z(6qsze8l&*<^7YjCsvmaOPH9S`M;uLza0kg1(Yd{fm2yjHG`R}@TA^wsM5Qm=LYt(
zKKJYf1TmK^E})4PMbZlEyVuuj6F7uyBs{wA=L!QCS;^*vUD?Z*{`}j_QwH!|`vuRL
ztriiXH|J6dl*+njmI5~6yz%P8l#HB{IbrB*N0wP2N<^X5v+NTSD~?IR>h<H_9eZ~c
z(+NlNN&S0dZsrXweUszM5YxmE<uC@5GQM^enIdpuoh+jiy+X7H>L4^w;J^%I1J&FY
zy$EKK2nY(mo?Xd;6L0B}mU8aTpIvc`;LzrhvfV8T^?L@O`!IbL#f8jdqTLM!6iX64
zRBvB6j@be7ju{c4e}Vt<7R8ShhKGEP+`cs0%h46bh88ZlO1Xs8eQ>G<eIhBBCE<a+
ze<)*{f8IqBBd%6hZ2n`fM%D-M1nBZ@Mgv9}e;uz}w-?s73!LeKun%K|GcJykysw7L
zh$=(=_J4Jds+0i@cJxD?g3ei`-dUn%4-61yXeJTGAMzW044&67ASG!d?hNe#;eo~O
zewi*@SAyZ(WPuBF`5!h&5cegpFMJCr!UyQy^T|}2CL*Bybd>pj9H^cEbHNoSHgN0a
z8W$jUUTN?JNgE%Qt?Nc{+YL~!*w4|v<Jt~x_>umQlFDJ}m4Q79;ovsk6@Zy?kcgIP
z=ne-ixj$JZ&9|*fnl>@>o8cMBpScoIE13yOU-*$dc*9s(;?Re~fSk<*iT;zJgW7EH
zfD_H>s3G#xC3biP&-*`*daghVFi1=#;eF5Wa3S@MOW7!3LkO`kfNycWDL`K-`9}AD
zf6eIqfhI167)}~5>f9k4NOO#!Gjm|#ArTC9o|gxBpzfg2alvm>F4gnwm9GNuGk<AS
zu0uqUyn*km?KT<n=83NDN$Vpz)Ic)jUJgv}FPxsd@cWXA2qSP_&;>Iv8El@mL)$^U
zCf_A%+O=7vnuqjOzOk)?gb`LE!jg1A_t4X!50Vsqk0|IoEuXwPwFs;d_7{IC8(F+y
zv@HAGow&aN;jRQWpidXcpOZ+$?7s=X8bfVd;2UbCwoUXPSBD?os*vNr{)#Ua6W}Fr
zpyYWHrV3u(r*x2Q3I^?U3_e75(9}cX9E1YLdj7s<(JVpCEZ$+p@diZL%zY#$|E$qa
zvk^dV(NqHcxd(mR5_DWm6p1#itarmMK~DWGlvNSWQz5U~iYv-^$@*RU^Q8>$39gBx
z*x2_3j><Nb=$6#@Gm=@kNLT%O3u=Al>dTz_+K5n_@0*A81YSqC(fCvwqM-qm{N>XD
z$^QdrIM0uLiVLLTCgsWwpk+G^@+}sPEeHkyJ;6Yq68D^-P~n*pGaA^mS%x39rj1UM
zDO0(&{*shpbow%On^kW}>i+&O`9=$reiPPt`FrXCOK}8QIF)zb7{%DLlEX>f+x@8z
zXm3;u^zhLV@dv$5<{@fZun=zIw!g=RMvw(CddkPL40tqszMmmz7u+pnmYsZW-q_;9
zJpMTvbOcTW|GsSFPWu!r{Bm>^^a<R3o~R6Q5Qq8t21pi?e?G+VfTLxp-2DT27#ZDf
z_g8hJK{O2)YW}AI_YJ<|X-B-<5>epPO{9V=&E$A;ivgk~Ah_ZXTPq@7J(m;i-qM;$
zk=6}s3iA71LN_@nz{<sVf6OvWD4jT;%6Z|1!LqEx^fGBv0{Nn0w_3XMXTi86;#ymT
zI0DD(PhK>f%4f3A!#peck<vp1I@TisFk*ObmL*2|rX%gJ7e5Q!v5rq3P3_U)jR5Tj
zL9Fn5Uw_OlBP^6jqP%)&jvo&8oU9^Xm6DSZZ`g+U6`Rw436EArAJe}O)bQP12?|G%
ze4aUIO+`^TAEW~76SSYPQI?*3Hwe_t#C$$M%^)5EN#*$*xoehY_|E@jtYx35uEUR1
zI=y*AXDCIni>JR?V*Yt#I(Kk@e#?c>9IceyQP8hp282;~Qwe+pjfVy3_mF;OkO>_)
zZot3v@1|s*<PG8WV{(vcbC;UOw=d&9!Z8=p2Vu-T+3~Z#qS9KHpA(T*G)S$5l5>9l
zY{uck0MWVrEblwQHc)#(a3YbO>B#6f-$hO`&_c|MJ)7kn9=J?WuV;|1G)<ARXbPjW
zWQAcx0;_8LrOYs8PGAS{)Q@EbYD0p}VFosEfjBk<=sqU;ChWP-{6JWH;-xlt?dN{V
zvzqknX)K>#{u8a(ezhGz4=#ikX;W0k^I^!EBOpshN#jmEKiJwDxG*o!gJKQjISvf!
z*Cc&rM}Q!+S<-Yc><^wOIq_x$xqDNQ8~z=u7P;M;x|jdKi31Hl=}*gGg1SA%X-<JH
zBDU_5HUKr<>`t)(!?#~hai{T=$RcoNx}Y-;WW_8{x@kpnKmB2Y`yPt`p8P@E`PmpL
z+10}*03Pe_>v#t5K!J-eF5Bv021A0~lV@ZPo(l$hgF@fWrJjf+6^1qC5dIXBX<lK}
zTnulDoZ!Rm*+Pe9Yxn57smPv80vb116Oyq#ItknVe2d+VfCcaBC`S!@M&+(VejAp5
z0{yv)bE1^WJ}R)I(<BS*6@3GA76|-*Ijj{HN{fY!q7~V1^~Mx3wAp-ZlnTw4G@cZU
zwrpkO*1}t2!oBjEm{P}}BTxgt2LX#GzeFi|{B7m=y5-lbHQE1YR5<UfFAu6p%h1Wt
z8|O4@q0b}*pJ!W{zEjm^$ylQ4IJ<9tgPw*Ub;A`mU*%`0G8|^Aq`}Em8@lZ$he#v5
z;@<xl0>rozy=3g8q;uzfM9Da+_C{qrg(snKfZ;8cO9$Vn1alNm^SzE=ie^JuIi;fZ
zT&s%mkzXVQ_`WGVhyldzF7ob|1R003aQv5>7`G>r#gOBfDRk3fK=(ULHZN8-wnl?9
z_e}s&sNyqlf<7EkA2R+YAVvQQ_RdK{l{-F0lJ$w3+sAB`o>%48>3|&(i*hF3tzMe4
zCYC9}YgKWZ&4%~hkbA=hPe)Yj)2--;92@e&N3RU#>vgW{JB8rPy(-y5O8;fN$czB2
zp~%mfL-uH@wbKAjWHW!n`{>GPx?i%YowdB_>}!smL3s|*@huEhj68ND(HW*MQOGD&
z6RxkFkpnl@#7K-oor!eBw7{zc8;t0q+DHz89?DJ$m9Q*|4+DQ&i+yX~63wSJB`E{t
z5_cGafo+GrgYXF9yzDRQ!=4hMYIU~1ZhM~PY87xYf0dF)r9eG^nyZJ^JRvIC+_aIO
zbk95T4CeX|CH<^bAQ1=%5L+b~X^os^{%Tl{Q|C?Eqf3jPthV~D$e;|1&G%{?cd5Bv
zsC89Ke0SIx)jPg|S8!JNjMjC(b3@zn{xKXMxl?g-fd+6}@#}1+H7cSNYVrySQ5iJ$
z>HL3;p?y8@&j_AyRk-_Nmym&j;&oE;NH4P{DKj0Sc!XX5G?F47isWO+KSm19@mmvg
zdEI9YL5?qvh&=-FgW&89u=3}|zH373YV5)8#SOHksX#1J7Eb}G;vqJE7SW)NIuF;^
zYTos&c^1t`!tq`YR5V%HadH9m?$c}rkr0p|!r0A*7rr9}u_K$zTme63ieVMiw@!8q
zecxj;qoGL;c2PU`%NY+Cj;_K}f#6(SPF$Dc)R8nRu2nC-jZWn5sLoj349p!C&rF%|
z#&D^BdD$P-(UFW!+TcqsgppXMX;)Uq^-Lzca>aEoQp)^&#?V!3$3JE`XY@~oq?csE
z>i6G6K@lKR&(qyn-v#2F8R0-8Tky~N%}sLd7udU3ds&q`?AjjT8S*yQauuvrV;=?#
ztrMD;O84b}xOV~KttxN2syt&x+y+L>?P6u7<JkCRv*btL{f6deBVkRGOvmRB<5nv!
zE?&>k>N}OjxReM&bo_jMB0x5$ad|qg^i9XunTPS7<ePIeqVI+z@#~GBV~zs$f_rU&
z05Ig6eV%cuy8~kXXzVLK79`WlofPT^D1>{dE)&hakb<b_#Wy*9NtA0QYESSg%bst|
z*J9(-0Bv0RTqNlSfA`Wb0?sKmhJ#mUmoGA^<}dUThRguJaF#J2N3N8_0~;D`ZPc%A
zJNx9agEh5^Jqd_y4~c(ZChAKZGMeHH*YPHP=7A-fRVcmJ_^ohKHGioia<>AZTui2=
zQtbf)2gJ+~qoi<=X_UP#brR%!kX24&sAFMX0|SDPu~_(}@T`#)mD~prwP0NOqBQ>K
z&WiJWch|r5Mp%L!hMYj>Wj=XkNv`cbsejm1H^Vl#p(Hydduj%9_3kacWYlpU8=(8;
z<?WgxF;?5Z2KXdLp7Uhn{L}irmUjVQi@Wau+KIg{V$Z<^hps;<gNk+%$4~AVdRD)a
zieMu2>E7AP*<&(~dFXg(J>d64kO8cA*&QPcdmc!(?dY6XP|+8i5#X5(W-jwRoc2Q4
zPGtj_e-hS%2QPi<u6Hj82PmaZmDWi=frJt-tgh@sNI?55`5z9y*3ER4dMj#}pFTS$
z=2pY=k3GCu5$~~Fl2!n;xV)$))IrM+OPkGE>s7TeO)B?VNY#3Qbm^^%N8;|YRj~dg
zP(FDo&Geu-)v@Lsy#Di^^SWv$&<xmd<i~Gik5oQ!EXHd*<*6J_4o1dIgBg`Ay>euj
z<Mk(j#Hwe!+Tc!MDnjifR)Y2KwGr=#K=M5Ary{~Dhl9h>6(iVrY!`?J_a$2Vd%^47
z;+C0JGA#Ho;L_tnx$f(LI7f}XaMi4LJ;ow!OiX5~euB9#c;-OV`5b%!q(Ff@j#>-n
z&t_M4JKGsCQ+vE#<E>Pid#I^YKYDI6SXI*r)?ktJ%hqtBPvB*?fZKvct_b`sWx~87
zLmS(9@Fk>K@e>Y1tc9_P|GJGAw`2LPG7aqOaKh$w7dwce2CTDpR-xr2tw*tZ{mlPh
zFo4eb>&l6ljOmK(38!1E{3^;7yMXMp>b0`_*ncw@yLw@ajw=ph0`oYT<-;k(tM`v`
ziw|_Ij{9k}x-YKtX0kJ=Cc{zA4PR3>S_)H^XPm62K|mr@EPcOHwAIm$j})sXG#kYf
zE05|<ThqqW<`^WIPwr}c?YgbAmi7TdAYkS|Fv!8^FmlPJ4kvAD-2gF)&h{A?g6<QJ
zxn0q4tG42xZLeaEcOxGR3@}5FYXzlf9ICm42?T5+?utX-`dSrQ!@TcBfuONu&z=s9
zT`+nF-P`pdw;74BJRUr#oEpl!nH$tBFVl37W4g-nc8lCc4)r!wCQY%UJdH@KMyjx}
zNmgSe!KTgQ42@@+9$r@TR$hlG8iRdE2}kEY>73cKlIs;|dw>@jmf!3IRL-;d;^;E>
zl#aaZdM+xV7e9AK@fcK!(MFh>V!9!xtNN^I?tf`!Vm>84z(c$ifn)moaMCfz@N6O#
z6C1p!0_z{x7ZR+eKRJGHaATid9B_P}MX705WxMz!-=uOk_mgsVL(y4d{Y$)*{6z~$
zhtT3eT%Vh+sh@OrTl1^OPwu-m=C9sM0`lap6gc6!VwPVjc!Lrl??CmstJ}ptu%WZ5
zb(i^{XslDR-#=Tm`~3QxRbMoSrMKc=xl+@{Zo@(5Wl|s(2uq7RXp_=W(rS#F)c+Ui
zohqc_El+puAkoxMUi|ZD{mKPCCnQwN3S5O;pI<p`c$_yT|C?y#_<mI~N2}DhweZk=
zCLee$AmC;3*<<e&lg!g2@uo3h%+05hjs@fOQ@wGhws(Xz_o|G5Mk7K0i0a+6R4_?H
zA!u;p<Q8j_Uv_cQd3NQPxh31R>ANW^xWCTI_cqN?qhjUKyUYEamrHV7fK*BL*%tb6
zp8DE=aop>Q&C42T*bfAtXXy)Po5~fL2AXY-*2k!bI26`0tEvB!Dij2Lf`30@^eVrr
zzZLGdjB~m+us{CedDYW2m%H2J=bV}Dc=fn_w(jH9+)Ch)wzETQqvU&jeRGqR?Z%b=
zA<+Pi|D(*)Zte0lNJ4U1_Cm`p8vpv$bw5L6<&t};E+n?9pBCf!yJ0ob`Zrfq_jT{8
z4hq1PXG-o0L<E;tT{@3;j8s_}Z(at>YJ>K#(=GOr^rc?yz9V<?&hA%Rn`)EN1X2K~
zw}pmnq>RswP}5CYz&0&=VlDX9#YSx`zoX8@8KZ!kbj719Y-s+qxRdv)Uf=6F_bblZ
zNizvrYzYo7`Ga<#eYAH6>d-@~&(VXzvjOr3aLU9ovv&gdvtjwSsMDy;qS)u(DKCco
zurJoTWV5MZw}fu?k91(aS~ox_LD)PiPL)YYY9k$E!d&^SH`0v(ICyR3RCYM=iz}A|
z81p+D*>@I_+cBQlG5tA9<xHUy2G55LZZt}B(!RyA0|J-iVtdeoYXwN~&2$10{9hif
z(0#u5k8W3=c<QrdEOwT09BQz={IZcHDmxgUf;1W<Zf(;LUv^4ROK#ny%a87`b2c4~
zHSJ1v-8;`Ytaw24mqIB!cS+0fh5<`}G-b6KuK5-<fq5{<+3mXV-PQF`S>+9<Rql%r
zaSPHUvA#=T946qFdz&GM*Rll!7(rMfSL8E!9}9nDQD2W-oRn)phKc`aK^o)vf>ytm
zQMTeMqcO;*)&Ha4Qrrn@+$dCy<Ie(|Mh6xSIo+gn3+bR~?(~*NB#md&S%spSO3n*|
zz<kOjt=t&NlH55}(GqAR<7CgZu+Hn>kZn;%=rSs5$K4<o2$9RLD)p9m5Mrn-#lP)&
z9@+i1qN|J~QmWD{J=??Kr|;&gR9xW^qnOAVa@m2<r{uCvUrVXnTav~*K0|xtoT<90
zAb;xKP-cjb%L;F|y#YW`oOwb;d3Oh%=_r#ak}~AXkqg6geZK`6Sr`^?mzQ&f%)NX6
zi_H1Y(PMqpV!w3`Pd1fE8Z{MD<Wrb^Vwbcr*RdKxDe|)v;1r5<r_0ig$!PB^L|J^q
zZuf4y6+DH`Ry^waCemw>%*bQ?R{62}(2)HXbfVJd_Z-4qJFoN5nNK|4KP7czSPRA!
zJhEba0yqMQx>oVuJI_&>gIbJ{P0jyi4pm}k`-rKjQmHkIx%GT2La7P_@Lxhgc_p-a
zTOLBzHqh8!)Z3sH_Z9<23hvuvRGDopB}~n4sl&H{dr7*;BZMc&)4<*i2QgQNQoOma
zqkEZQhgQq_1-cRhSxH@5@q=0NST$*#icEo@-Ig5e5*`~i%)?R{eXRct`iG9lj%H}t
z24)CN75(#(@0bG`c^m0&{87ePs;A=nv^*YAocEAs-~qsrtfy}_r`1$u@q=&7f^a*R
za!7PM3f|zlxLqjnsW6w3)Xh~%S;R}AC?Z7qfx(H78Iw|-siJaGMZ%xW#n+8$Z;zhJ
znFYff^($6KWdEe~|4+1-1eql9FJ$@8nZx%?voDI9#w1D|U4z^6Qlv_o^d;xw;RUuo
zDd-4JaHrU10d9#i<;wIud0Pg-9g}Q;ei@x@q*m==t;y|u0Y0uw<LQGTgZxGxU*!<J
z6%G;>&j88j;SfB_CKL<&*;pKiuiUsxbKm80Oa?H@)*qD-x+jB?l;IWSK-Q$lWx1&;
zq}EYZrcljm{hIKwM)Dz*;YNuSWH$X!aeuy|&)fa&qMBf3F-w>M1XWgITl1K>&Y8(w
zFv9ry@0(S~=gqy_s9syd1n#`b?H92s_=5j+Hxg^*9!|i!Q~0?)U)P=^OWPAKp+1ct
zvO9X>9Tp<ZB6tqA`}fg`+=%gZ=96>iS_ARlzm!IjA3jSn057}k{qOSwFoz3dhs->x
zzbJOCwm$tRfBvqI^Yq{26nQoqUu%Cwg#4{cvG(k%jh54ehiEE#PS8DToJiHY$Xlj+
zHoSC1fujul;&3mLu~Siuez;h&vTl`iXV)Lr=gn{C7&1SE#=L)-NMvArNi=)i5a6>+
z${Y!8hbBW=!f;Nb(Kx5rvHNPQaSEw6p8?^*nAK4be+*<p|LDioASdw`h1CnjoAu)^
z(rc$|KDu~lsE;*zxu6{S)YY@>8?CWj1sO5L<4@h%cAv@Ej+R`eY)3Ia{-F}Po#bwR
z5Vviw^Ae|Wm-8E5xJCY1p9IGs(JcO~p^pq6#`7)N^?)=m4wIT&ff@LBu&(LJFOVFP
z_30@N2nR#XIkI%wPn{1O1<Q>p&CHB=;-^OxZTyOVY{T1a&w!gfH@rE8*nmJOO!Wy+
zP`uFh9aSO?`lnp$bIn;rb%)F?ck3&b(!>!vsQ;qfn&h)B4C{e(f7io9l5NaEHMr-<
z?d9Ji{EqnR>4-iFg%w8LO?Fr|Q{*3dKt~*C036w#ZyFK*QTeIWwuPD)P*UH5O%)Ko
z^OiXJ3tFHt!QN%xe;i4>X}o#5kjJ=Q8jU)cUm{L?w0+i!FWm0p3#Jt$NglhEn3Y{~
zB&_p^PlLdiT!k#9J@h4amCJmye(_4%NpNP|;E7slh}y6jbZjo+PC6T~L3V$q<1)5w
zg*z=|9r+)(0C;xEZ&_#CnGPL$UT9sFIjJpP?&NtSQ@<c0-Xw1B>C>fs^8D+Yc34Q<
zS=nw0wLa%Bb4^E)&X}c%0K)ecW0ZE({hY7M*F4WvraX&snsH0-pWeU1>xasBVSz-+
zktG;4&I{t7!%e1dHuu4W{8f@gd5xrj1y<P)_|4yzS2ePYk!|8Q8tqzt@ddQtP*ri5
zWT1$qWx>0kzexTo@=dzu0c}|!R-d_`Jgkl2?yhPxD+dIZ^S+<%2X?us-L79P_VoJx
zeE-P3xLc`Gq244xd;NY4tH@T#dvA8iNme3%{-@`HIrN%$NH+;nG~ZMiZC+R*4Iwkj
zm!KRSNipdcwwfnO*&~WR)6i!_c;0;7?;+<2dYqJNyHaLBu#W_k`@>(OTpb-!l;Mpy
ze@^onkT)^2+zTTbcWeq-o7wFQWu(-mQyLd<`IB#P%OU!ordC+Fv%*1CKHchClR_JI
z&p9IfIwIacX^yDDOGH%N)V9!KP(4f*bhp^>3A0;T0QE`<sKbW>$bL~$71HkZsyP9?
z?C(?kcL@-G@}^sk^N{!AHekYHD2jy)S-eEWAwI0lszV`e=*<vLK~0sQ(Hu67X-y?2
zgvCfrmyzXNCBBzeLahEjaUZSI<@(9Fp)|jzyj)+?e1IG9l@j&m=?uo*H3_a<VMKV~
zEN<8Sbau4>gb8UZ9Jzq>DUiKsb7E!m@wzgZ(J^|iHrfEWG!T+-sQwMu_+>VHY{Jpc
zh(XEc-<t~UT{bm>?)`@?6b#jktR7QVA}c##{7xG1z^Id7_v9R2zBGj=#p>I<apZU=
z@y0a##qeH!WghxuMEOV>`Ocd+?-F$ok^=;#L;^TJbO1nqY&-A8eDpk2Jvf$n?JYvw
z2FUb(94zHeD4|nn?52AhIE+3sq4mp6;ZQ?+Fq#Y;CE_rT3eN0=rxpEstY$#vK92mP
z!2AKSgB<#FUv%#$3bGA}Yf*G?yZ#5Dg3{OZs!#3?Q(1KcX$<&nm*s9h9Z|kXn+jQq
zY*+rJGF4yD<N~Zf`nY^I^4C{mjd|!xKDXk$lm+9l6Rmqh%Ga4nI7r=DbHMfd!&fKO
zgM_;_&nkPALK^nqYecGCv+)wXGrFtEApW|YRPa!nxj08dp<55qr{gvb;F_&gZQ>!s
zApC6xkCsK>a2t2%7dU7p76*+M&{nmJgM2YgYu0m^?(K#g9{csa=$Ed@ZOKB%o|3&M
z<QEvuRh=DR0vbz=L?4_9Zt%X9cuN`Lrt@wSYd_1rLZi{4riY^)hHP%Z^ftg3sF+M4
zPXdS40DZNR*T3Q&3w#6n=~-u4|G?V$D}Xci)63h)cL4!}3v7~ATG^VuSsRcDXnBe}
zafbV=2y(y0t?6(yZ~&3WJ`Wn61ESKfBru?v-_rF}oH2TWdQV4`FC4`s3k}so>aX^M
z-p%rG>YbT+(RgYnktwXw`h53UM?kf+)IP6FehC_dCM>=hc^PzE4mpcILwE&dU$W{8
z<z41p%igTX_gNB*@RCMh8Dmc3<>|(G)_UrCdKyPng2C$900aAIM56~#3T2(Go<W~3
zs&Hw`&RprT9T{<$67Vq)OjbXG52tn4e$<p&kXs^wS1$QfJCkHnwG<mKG;mQl^f0?%
z0A<FfI}`q466hF6iz`v_H^tMciaU|(X}*{Gw+uzlB<1lxP1{ol0qt@$%gljv^FY>@
ztm9N6cR8w;xmUf}Go}(p1tfWOL7!jWtZcL_3B5R$y?HY7j4@|D+YRQyx^1hTB;xXP
z$ZOK_u=Ga>=+A5kW8$dVB{M~}Lrf_Ov;(g&Uu`iE`VdYM$2KyeR%OcnRGD*KhJc%_
zO6UjIUbwmWzsB!}Is?%Mmq9EuE*l8fIkB)Ni)F6jiQ#qIV0TFL%^=XRBtG#X|B(8a
z(Mw}m@d9KaZhfA6719V23vcAt297JtgJaWP!Hpl&)K{hCd@RU-D;dRx(WKE?(84#6
zJG}OjEEqtw%oAN%iu<O*ibc@y?Bf>Zyz)QQN#clUvrUWzx?S7WcMdVB4zz&3*ptls
zD&Klyu!VCP&|(EzK+lq3=CL}drIRG3(|{2hEJ}w6PPjI8orLFky99bLC|7P5w_1lY
zx4Ex%|IKZ1VjkM*Qq9+8wBc8fZB(UlHwz`VQijE!ym6mQk+jm430yD&n9_%`+HX)u
z9ghyqjiS9!M-ZKa^BzJ%bwqKK1UXsF^`jn$%)pXxXGF3l#=X!|v9V&GHBasA@daym
zqd404QegWB72C$<e)cZ$@Ys5m-u^8rio&{F`O5IHz_EA9g$)$$SaTArsb^58a|A|9
z)Pi4XbK7@YAS|!4Ksswsgd<dS_<V92;IpjuJDzGUiUaW&ktauqoQm==))w(ljw|C=
z>i<lR5z1l>wt3*p88XfvBeWK&4465F+K9L=oiliOvP>X3Q^Lkwcq0{NZt)pT*o*vG
z2o&j9pR@T-`UHoV@g&q<FR#ipojzchTieh+z<R1D1yz=#C$T}f`uN(~o&T3N#gY>G
z#*@r&A&q*3)@u3nZmQF0lKS~O?{9lF8mbku5&6}5RMxf(@s~(#+2#?&b91}VGl;Nm
z@thOTutS}4$cY2j7*t=%-4lFx$X}ssK7RBq@fNJ^{RVcr%8@_+2^(qSb2Pb4Z262#
zPLL<UGtz4LfB%Odg8xIHX7_aWpgC5OTrWK5`m_~Rf8SvzsgSq7BZHH--J<%%+=*IY
ztC&TY$6;{!4C#p8-H+j=H~%37>=ufu%c}3?PEfq5{_k=Pg{<xGpb!Mctjf~3A9?pZ
zM9m%4CFIGcU%q_`Nm5Mx<`<|G^tP6Z1piDc0<ed$drcaTFb^~D%R^x!g!NKUdX6L8
zLagx*_?~wNKm&73(+2YgH`Ek)+hRZU516@*7)`%a+nIiP6Z{stbKXQ=9)0RBKVs{k
z0iiowGOC{YM#Ul-U*sR>iVA#+$g_gl%fA<SYV3w?lB<hOdF19?)=37K60&8pW|dh~
zYGVW%eG`9_ai|4lK2#CO{I;>y8yq^LCv(VMsPT4)LncaY=}Vr%LExc0AMe2Ve_z>%
zTtjGXf)lYjYShTtyn7)L9gx1h<7z_l*zNwo=wNG13K8`{vS7^530B{Gs_6fRrt1!8
z`}_Why-AVSA#KqjW{V(JVpVIlMeW^I?LA|Z5H(6$vj{C+R@JT<vu0`SBDShgs<!XD
zpXc}Uhj{XM-`w1L?z!i@UT5$NN7vH?ULsYi2xwfrtgc+9o&h{fD<*Q&GV7Txzer-e
z)9Vki&+M^-8==2P?mE3_D1P_GbpM79IvNV}q4J%%p<kQ1SC3Rxp97wwyBbx+@P5%Z
zA@%E3*`j;<r42K^7T)6sAIi706WEoYtCr_)C#z{qqw?PpPCuEypoyZj3!t$LGqg%Q
zi2vCx`sVRh@i+^Ur>4)C{uF?K0qMo=>oyMO278W1-KQxE60Htv`f{*=p4_LsI6nC*
zKis!1Cok{IW{vVU#LFsk`p-4b7JpRu8Q4@^Vb-xq0tR3Z(;hK@>h4kW>S|*dw&1OJ
zO}Q?Gvfza6vupXuXI?zYhAD~>*{MK@>D6zu%Oy#|=Yrg9wjT^yfVgXqiu+IclzHYu
zCaB;x*utS_@Y^fDe@y(F7o%8!uI__%vniGD)=%H8IDIO;87LkZ_MpH!>Ntw_^{C>2
z*9v`eUpz$eFh!uOevb8hS^YgZi+UZ4@xMXUYn<>)1};S7wSOEglUSGpT;4d8=)G3|
z;Q3pF=f9hzbRtnvrr)F9{Cx9fOqRtmKq@!vz_g$<Lm3n%N>eeXPuXy8tyF?k#4SJs
zKN^5Gl4<9_Gkbe@CiofZ*cgIa1plfr>Zs-+86(H7ZB#~UjQ<XGX<YedSTc)g&fFoq
zUX359H?Yn%O2StbzbvI)R(ou08=N8FP5J9o;^8R}WAR&oE)ab-#HvO+MoVpDiI@t@
zG!mGVTI5AI^fkWu=J9&<u+rk>anOG>K8sj@@SCeQAX(G9PhS}11q53+1Ix_w!0`P5
zy$J`NWmao;Wl+(>Wd8(V`g}&e`(t4tS@N3qjhnDp&0?Rgp1{0V#X{bV{rsydk~jIK
z|C?&$B29kht;N%8Jrq2)9wD<H>~k=4Nt>r0HGNand$$rl(OuInoj{byuK6EZY1#q<
zu!$KAuJ6~^-O0(S36WIIe|Z0m+LG|1q-y#vs|!<=9+%Y3b|(ey_HLHhB$JQbfF~eg
z79-1V%d9u|8{VJZk@)r28X!7O#&WZFIqjw?D45Rzy;Pu-OE!N7+vu+ChT<-=4BE)w
zQMyHov)bDIPTA_xULzndcKA}6f>}Xep@q7)_$5sACPLg9t9egzaPeeP;_e&e(r@k|
zH#}a4KE?r`ctOl34W;qTqRe^(g_!xZ-aL;kJz%V44yE<fJ|FG#jA;HeuvaM4wHFHB
z7ren9fj<%Qhef2AMtl+YS(esJNjg;=59DqBvMI_!2|GXVVQKDuO4%p$gM+d~(cq2y
zi4V)$kPl;jX~E;iP|vfg=hqzgt}=||`UR<ae41Lbj(h&JK^B+>yVygKfvRA=?4tC%
zh5(U$PyV<hC<g3z#^f21<QD*$1qL5|oZq*`F5<c-w2E3h`R@Ho1$p`|{U4{rAr@df
zvr?~j_w)I)yf2vep2Y^a^Vyl2%oINOO$mkE0Oa!QcD&P3cE{91{;NkR<$kZbUIib8
zE<L^XcIn?vaf(UYUI=-!6msF&Lx1bPr)*cs6%F*>Wl?&E6c7JB%%pFgRb2v7isXNW
z{8f{v{=nnq!D7{9(Rp4RJO0e=*ud{u3or^)?4j`f^T{tke;?MAg*RUgI$3oee_Q$c
z@51swYDBm~Civu2$&ayz*&dGOhyTDUnAm;y^^f7RS6B9rO>9m%gvTFVT78rv^xczp
z(?;Qo3psk_*Sv4*Z555Svhq*&sBV3JSU<Sfc>Evf1f*u0zI-?{a__EWu7vyg--wOd
zXD-RxHt)`53(F4t!q}sJotv|_6+V7^`)>%16u5rB!Yt4DbP;H8NPT>gY`oBwwzcnf
zhKq3D^{WpExis=;?N@Vg>ozbiZm}@rBZ=nYixzLoY@Y6h)X%ImR=o?lGv*=r@T|kU
z>E7i*)7)>Y4-xgjH*6aEXYahLwEPcx7Yl#H@y_y3@af2lu?1`E=A*EWKdo-mzZ<hC
zbKbupzxhez`KyqykSv3Mr)lR*IcIrKuLB>)D|YMcuI|+`)n`D<;;)~ZR#zH7of{-I
z`@K82yA#qga<_gm=;vkk`l*l)@6!G~z$a$)pz*9K=gjh#|K`ttvTwiki)&VITi=*@
z_|V4$+tXBLb>-X4(mw{AU(D*^lKHop8#4`7O;ckQpTm%EXBs|4yc-e<+ao9mFE6ey
zexCZcaVA+>UH9km;Y%Qx`d^B6NK&1j*s0si<hp<}$cHBH#o0@T%@1qtRC-(<*rV~k
z?_-%Z^~<|y?B4qE2WpGKr{{Cofxv?wMZt6I=jU^H;O|cy2>>z;{D5mgbnpMYf<Ol6
z|HAY?C7=IaM^oPPB73B9I{u@<iKq->!n@{oV&pJ%O4C(&5MnP0BP8Q1PV9Fv7D4CP
zBP5I6LRcZt>atS=V-`P@O)?9P&=j`B;`O)jb#reDAa-7ybR@IU`vnm1#8Kzh_)0fX
zWEP_RtMZXD_KEs#L;=J$m#dX5u9d6}bnt*#2_V{!n3G-KBEGA51!F9R7jy{efx`w6
zySbhGRRV{PXs89E{Z#vj62=V0Dn~^!3#?y#dlj+p^=dT9GA`*DOBRo~`3!4BM#{gU
zc`FI=YLv72tm;aj9a??zOT7Y0{EXOwG$FpGG3Sr}TM!Cfx!A9X`09!IRN;OY{$mwl
z=L|8{x6(f%OR{Jj6v!Z%ow+22<IDF5!(=3OGRY5tG$Q+2BS_ZCT!g!c_aP33J;0aa
zkwYO!_ch7lE`_D3_&VAroJsid?b$A4#L6o~C^i8OE5eqI81}*;K1oHKFnk5<HjIk^
z3B=?<>{ET_A<htB6<?_!kSct)MPK7<cLJ{vO9-sAL2n=rh9@O&k|pjIHijX@HFFSl
z<$;8k>A@JY!kc5X_)n9P#2tK9zxsRM?O~WI&?D5VWT*(6VYsdeG(+o{+hGH~B_;1W
z=j5HG!4b&A5!tF!3E;c=60#2q$>J)k83!mL(g;}RWPZ8>LY%S7ULZjr4SvE;6p!FE
zS|B5pLoY(?)6ocfq&iWU2hqohug93NYbWn5W6XlJk|AD8KCh$U5Zi-4UsGYCJ4M)D
zV`=CIozJuw%U4&3NaKWJeB}qdV2ovq9mMO69>(kmjnPZQGEkYzagx0NSOj$XI=*(4
z@D<T<5m-Ru^gu$ah8(^^r{#c<`U>&i8yv$$*v^D`9fBlX+*icnMR?zTm?;&n*T+U{
zG@|`8V($l{>j?}t3>A>xyN+nj(-}&J*nLN#vpdL0E!uvFz1$sOW`^r_XNdVKR64#+
zj|Irh*9!!;Y0ov!0AlOQl-aiW3t}%7#zkPJBjrLK7$mB;6Nh1nsi>?}7_HIjRbdh!
zbh54A$Vgt~FI7JcL|5WPh>!6TYSKNI=fIFUjR^5JbSm_U>@Zp4K8!IDiyt|{SUzxY
zMaN>ye@2%A-wGxphyPS`n;GJ{Zlw7d|0x(%_@)Z`cz80Q2pdNr9bqgQ@A6>GUI{2B
z;wyH_zhu$6{*zN`-eK*mROm$pG``Z8HPaVgw+6?O%q;J&X(EuyVFHOeFqJESSn<dq
z#M{@k5X+G}s4T>?(cWGm$r26V`n@U$0BeM7`x90POsI4gA`y8F-8X!atJzLQM$n>E
zZfc*B#Z9o|z=Tn$Dn=;8_f#iV;s~%XGOtl)gt%)=1yz>Vj*%@rIbfpgt|vRtn+~g2
z(_IOORRotti7)m!V_|i4S02Qxjl3}mq=_rFk{`*#$w-roM*>N1*uGn@lXn6M7IFr!
z@pW{cU{%=m)xA;tC)aFP^cKXc;PrJ@h`mxCT!&yZ99TDs0>nXwz%MsTTF0mXD?r0L
z_6)wdrvgY61YZXO2pF&7Vc^gN8;05=wIHqpvrIiD0<f=)fq9Szuak%cjo6BzGu1rp
zc`so1O7`$|^Ki`$j2T25KYl=fceED{TB0K$wzuVOao&XZbVAHB2!tdwO($ahjN@+H
z3dy`ZZfMeObbSZPjjwXT^(Ot&!dJu?1|C5QA$DvQ<WYPDUBwW-c7R{&dXhoX3dyn%
z{1!OyyK*W5i0*oYb^ZmSc&g}%(dvW|Oz^6T(HDGq84v$FS^R(-!olZ=?TVZf`HE;C
z8cQgEIQbUu?Z5;_2_&;3KZH13_mvEw)#OaEgOqaCaU@IP!V9{8f<VhVMGJJ3D&L8*
zN4jd|$zgjjK11Pv?p!Uw<IBk<ZUevqGDapO6=E!<-!y8@Lp;A1e&&&eF&7>H2a0Co
z4;<nPJWf0>Ry2aLovB`ve+?Y+V29nVR3RdgA-b<w?SSwS0tc4l&(Nf%D?w@9ha3Q*
zHR3_cUr4%|>DdqQ;-Ou2c>EQyT*wWl{+J8#dcY8KTiX>FeBsJXBGS)}BmXVNvUrbz
z<2qve&&aUXFNiHlSkG~~Efm|+$Ub>BkdSn4tg6;c$o`tS26>bY#4}nmp%C+kEEQjT
z#Z7|?m#_&YoruxZer)Y3L60#$6@jt%%-2(e5Z8B8`e=f&ESSuUGg&1hYx@v~hX1KJ
zI^NmOq8|*%;zs?zIjQ@kxGT#Dh<-3@(Va6ydzBxnOdiQHmJ=x6h_P6Hz`g)<*32M)
ztwm+-1`@=wjEr`m)={Ew>F~8^d|@6xQ6h{g7e0`PO;-Ow;9T{pfFg$dRs#T;<mhLg
z($N=v&J&fyyU&QPIhd6G`%(?8xdN)0TayAy*%ggGb|vgR{qYdQ3D&1DO?#UHvZZi)
z5Q;tOb{k7=p$ExbgU1~;f=VbsSdb-*EIIN1fXiTv(87q5qB5jWN9%)zD8=b;Os3dl
zx07zih$oF`P$-3)7hV1vDLRl}BpaB4VHma<k4>7#9C~5TC+O`2wrd&Kr8@-0Zp1$Z
zi*phsXULFif_P9o!y>&W6Q~4%6S9SPQ_t&~`7^|7@k7EFK#r7EIr`!hNVR7m7MwvV
z8~6r8qo$!F_80?_1C2!qQXHyN(WuD+RztyH8PC^6=Ln+Yge_GIH_*}6jY5Hfjuqrg
zl>+8pcpB~N?}xGZ&_V~&9K1{&*`rQH*W&LXW_`OztkC7q2)14hR%gbEsF{MP=x@x$
zpNG&|KkP)D(g{Y2{^p`$Pg7%%#$Hy)KL3K+^}6LNRYEv|wX<(;4lCaAWYWdi(p=78
zHV~P-1vI(F_<ThpIzXy~BOgHNMcigBp5K99zn}YUzR?2F`5GMw^hBSpDjrZP!am^)
z(*cI!HZKXaPQaJLIUg7!NFg1oA;7iSVX8{{r%~v6S83H2M6bP6+O8$Uwcmdd*AKB<
zM!%GXitha+<U;KFlWr>mpR0pAizQj)E~sn1+JWAgGF<BW2>}YTtb#Z0B}F$0lFXF=
zYpK@JOW<WH6n-^Xj+-owb<V`bjj%G}D>TO^*;j#!nb!r>?%iUqK^1YTF7WmIGagK&
z!NtT-)Dm_SR<$({izS1Tt{5}tyDx;O?iW-75jprzj&3C~oE-UfyBMobhmjM7nMXR5
z+x$Wo>4P>%Z9DQ*0r>in-DSd3$&8{KceBBi-JW*OV8bTxcIOIX{!FgP$E>zRJxFTx
z7FnX=_mg{7qppNp-%|@IZrtH8)H=KB@t!|-mOs8SR3<d@vJiuo`KMHvYG7;0Fw|iw
z3vn7q!PaI-f8P1?!^>S9)nW@DRK*}zdIuUHlT_{cQ4UtiN<?zKug$_126)!nD`O+s
z1H9x|BLQtkjqMp77<eRAONbmYuaEYskIPNOSDr~Ce@N8e>o~u%?7%L|xI&2H;k6xo
z(U}kzSKm`EjJZp}4<>^w1h6*@ylYok-26C(VV8sEiO68Zbd)5-Zejt8#Z6=53I=8M
zW&ov#PSj40HEzTv3e!H;H+UT`jA%_qiJ|f^X5sgTlP$Sc3F*PEB+FNvtHV&Qr^BXz
zP7kIlGSeW7`+lOu=bL)P@xUPt{zhX8;5$6v4BK}^za9`$6X&dwN|x+y1Fn4`y($_R
zRXtBUp_2DhM~GYHzB9gjM)>h}oU_Ks<Dt9sE2Gb)zSz>_D}fbQ>J{l?C<CDHg%PJ<
zHF}W08IyNVgvaQLwJ8mV8^n8wSZ{UjJY$5Xn}UJ>re}oS6c)^%c^(tqCzfZ5V=8~3
z_1D11v%h==|JfFXv&7L}7R;CJ)jA!gBEB4;u%+n+N6NBa?@!|NNua>@$v5ytUo%G`
zj^<2h)$AuzM%};Y6d@NtIaDCd)3I?@C3oSf4A3!+Q;Yzc5!C_V2bWQpj;KSj4a1ls
zh>I<nq1*8}Pg>A3a7<s6h75JK=qS5VJy|lyR<QN)o2TEO@-}>=tLsRVxTuNh|Mr=V
zS-O@?w@O%b^h&;IsCjwG=K}-=glAY50`U|V^)NQ3U~Z}B6s+T^KlW{Cf6!6<#&xsA
z*V4Xd)X^l}^BWOAsGT30dIWK)4ZUTm0$0X%qLYr|8an<$AWjb=)4N6r!VwE9w8|93
zL$Wy91fy^1{X##Oj0|vUzxjOO)dCTT%)s1DmWeciDr=8uCgW?vt~7TU4Fa#ItQdUr
zf94<~@7mXk<Q-^5*bB}S!C@G`X#oWq@jZ@@Q?@DD%oqD+&qvhu;AJ2`zAn2>^=-m1
zw8$*2qcd~x9AnWuysS;#SPWRek2^eFit(SOZZdVTCN#0)YbD5!xS#0|GPOs_;*2aZ
zy`YwpMpu)zl6Rnq2Lvgvp;?(mGZu_lr==Q2kpk0=8+=g`QxjQppbNH0O)^okUqcGe
zA#xc^Ld>}**a<zSx0nkx^qM4dH`;ZtYuq~D3f|1P7^UyP`oWP*AM&h>TX=Db;*{3L
z4BbNRr5+V&^shL$cx<KwrCB>B)gYjaEO77*;n)r7D+XG8(Fn;TE(<ODuVHy%o3)ff
zS1B*BL%H-RMYZX*R34kRNP&W>LAUfTr>Dh>t`t0mLqZSECd+Bnl!QS!8Rl{ssU>2k
zT}`UUd}%t0qCTFxp&5i9nxJo&#qNEfcq2XqVrlVB|MRfO98<Q3jbRVE;q!h8ltUCy
zyoh!0VSmtZ;jFLlfto)!Q;LFof$>~OrO$nQV;Gi_q0bEdK`&~%HG1n4TZ>=sSw2+@
zON#^rUR>m|h>%EpWfc6BhWRij6uV#lMvzYLxFon3g#fw~5K<o_B)+s80nOZS_FOa|
ze+%xYusLe$Zm_5e6PO|VS|j#P-5x(@-mOq<oN{Pe{_7oQR(yHI4n%!O>3|?MXfRe7
z)n9-@v<fJn8vJDeOaRt-!}HbmM{dH1fq)oS-~vG?_%d-qY)|TyeXRgzHhw6mhLZ+g
z?ozOf{gM5jt;xi@-guMc^=u;y;^c;4{RTVerv+>lt>PWV*8@9HH24wQS*(eJ=PH5U
z=qF1g6hRg*<YjFq%h9#86Oo>Z`hBDM2ZY<$aU>G1Wr>aaoKGd(nIRg+vIC_cZ_U{Q
z>PRcYhoRW;1MB0Ct~iV(i{Zh1`<t|h2l?Oo>&eLQ5MB*sDH1ZTl8i)EQNA8GiH~+R
zA({C%j)M`Pau4X(tF9lWph8bd@&TwQ9ulhSuYIX`L<8|tLiAB;X7Lv*%D1?IZnq~y
zBu6?2?Z@Qz0bBa)Q!3nz*tfh~zc0zX$h0V5)3wT5#($n;(Q(3=xA^Mc;?Z;r-C#q{
z;iN!AQZyhbF_DViHe?h?1}x2#6~%3<s9r6_k3*}`xRUa(nrli47^t@a;%9W_3YV<B
z$xJ?VK4S`HS&Ie*#SY!a5u8q{;I&dwups50Cj&^5qV|I7pB9>WPd1zk$lA<KGz*+?
z<H~PB2fShFE#fE06-0{B7md{yPLrmS`@Ji3fpY9x*Myo3$eY5pkJ62jt#hEDL3TH~
zG*XIUjw@D3nd;I|XNNR4QOizG)rzf!k{qqpLUXAtTF<}{Y%1$zvrv0L_<iZ?Z$00z
zzw%bz0!yzx(oPSxw20#PFS0dJ@?LSa##3z5Zt#F@S<1PY7n0PPF!*{k4R8VoId$=A
zdvJx0%`VOov|7&8uEyFTyAW}S!yW<lq>PLQ*U3Nad84|mjF?Y}X4BBzYs7xn2X!;B
zJukiTHk>k}-$R`0*EcdK_?k@>7RQxt9DG{R$o)|$T!YJ9_uCHC!IX=Jt=h^yJdmI|
zvic}p9-UJ8w=YHxI}vP4VeD{8>e^##=M5Yzjowz6hpG{KO!-Ewgk)(VJ!<#1P&*gm
zNoUkO>SV$Vak6;Q$oZt;G>&wSpG6hp?y5vG=S+-RTZ8zV6031xtY*6iq;z`xhNB#|
z6D6U?4e{&<<U$K=E0HX5%ccQ8qfY)szA^LubT1RA=7&b-{342*uoKmvb-EHnZpi++
zrEH2V>)euEaNR&=K0HFS{!q4(s+T+`idVG1nlMs)MFD}aphXyP%nlP8L?pkKd%mK6
zGvJtdUV|*UN>@w=t&q&jd<SX;gcJLI;y;dZYTb!j0doN|4v*nyFB!kh5%dGG!l&q~
z(a#9ix}KZfW-l)BjJmdVDVTbd!1G&>+8if$0y5dMdamB+N^wbwhMMst84}uU0u&P)
znmRekE-gz7_7Sr)f_ljpULV&VJXbnj5W*G}5|Q#u<hhj5=b=4%CS8X?x*GE9_;P*G
zPv=?r46xqKB!1V+#mgarlx;9(;R5B<T1)Kj7GF)@XZ5_h8@5VJ!ZgoXJZiLTg1&0>
zpM7y2q6E>-83{$c?NJ*59O<99X|N&vUtwFWlqUbB3;WiremZo5SHUUN@j|vF?^?E_
zwK+A)a@rO{hI|I{efdP4uXmk2f0e@RQ^vaqe?VL~TM9Os*2q`vjJmcc@ns85N?a;W
zFQ^;5O{c)oBXsF``qLXaES6@>;%cU}VdG!C)rh+Bi&D&>3YVgMWix(!lf5Pb1zzQ}
zJWJCLLj__T0&V?vnU-S6e|lHW8h%yHHp)KY2H-t4+o#Q_u0zvN#OFcTJ_GpjEuQ9f
z8E&5PJFW!DmzGm81#^a^06qB7wTnT+K$2~bboF~R-O;zC>za;_ApTPzfmqNq4b>><
zcX#L#*#Zr3#GW!$F`ZvG-E^V6W6Soem!hELU~%#$zV6$=w58^YIky>&E{vtgflSE+
zQ62xWqcwB#Wdh)GXT=59DNHK-#g`*<+OtGb?OpH{-J>(B!UPD!JN?*%2N00@0n-W_
zg;f@OZ8$pJ5Wh;u;(hysy-WF@n6mJ0tY1yh4g|0W)Zw-WGN}S^m|x?8%fI|8zj@-Y
z1z;#LqPUX@aQ#<xC`8v!RGudc``v3BNYV=&kIQB!Up9gQ-s2}|Qwcc&U%TN3IE6Qw
z@Rg3***6cez_o<ip-7dcB=>s8`C%xxk;)@VrIG6>#Dbzg%t3B#y^{0}3<We#M#{3_
zX9lm^0E+vb!&o4WhK>tdART8tI@Tyf*(XIsC8!NjfdtucVJu^Jh5&yy?bvPSt6)|B
z7UV&0??U5@ipbyOH3RtK<*>XGQ)~%`@TDvZNX^!tl_5$d{Ut$J*}Se>pluo|L_)`=
ze6a!{FB@Y`e3&m+y0+o0V2}xd6{43!e0aqs1`QN5(6uz8lvI~a3hj}5AX1j*8l|YZ
zzW>ZI<9nfPflsxx>aU*8R@UY8;@G$LuzPB610-wSYlIW^!Uw)Sk4kw`69MteqRej-
zXnjSq-EtMj$8PlEvDZPEr!A#1x0D=3K5bnXmTgA}5pL4c_$ptDMkq%rHZk4Xvk{5d
zeNIVixb!sX^Pl_j1?D`H`g77CN9)0s5<2#=!%I>ukWxiCS}Zit%-+xfExS1k8~Tz`
zYIK9E{&Rw`y~fW*?9-9tLjPco+@MAA?6hoWd;?%nngf_x_&8X{mKw+NTp|#?_R%^J
zuvJK3qqWJ`Rt;Tu1rS}g6#At;3Qahk1O9#%I`<Yb&N&e~m{+Qjv8p6dQcH+sB$7iC
zqUeXA!DhEP@p9bbXaU4B1&52h9K}oV`xP*$1yS17@vFeiJ6K{jEW`2>Un??n(9nh$
zP|PwKVTpbp`cL3kc{dvVxVj7nD4-*yp(?Pb*UERFeGkR<=l<c1FU-=4MI*jt7G~tZ
zJL51aL~)PZT$X39xeJhoUx!s24Ho8xVM_cr&xoJpodg`Q1J$NH3O;INWo(pwzzGum
z&d?u_G8<-#H#OD;=_-KslxZ)B%2HzW)2!QpdWJEJX!@lhf(AGt50GxX=$sL1O$lv`
z*&V2Mk@=I`T;l{leM17J*qkY1TC_oOkTQQR_Faj9Nbq-iJ2TphClJ3j0B!^V!56Qe
zDm^-JRC{3PO%#uf1+GKKb<+0epUs88?+n(=&oqp^X-<Y=hIEYJA5!*G=iYeC@Q37v
zK!D5GwdDe<4Nz0E59d~rC1oHf(w_op?&~p}+vO|69m~Mu+_oGSMF=Yx8wVVTm@Mq*
z2{kO|nw##swa75UhQr0B+_*InI{6z)@jA_ig%{#}Q#<0`-@00&joOdouWZMkK_&Dl
zTzBP3HfkA$_VB%Ce(9!MYrMMdrE?;(3ffiXBM~#i#@1qM20ozSuUn(Q1p%phltDKu
zh1J6#P@Eu$!~jy7;iINf))jkK8%n90Q}zI?Km*3{obVW{iBptZqRIb3IeeV$0t%&8
zyQRsa0j8HGh|W!Wdu9+mcJ|$*c;b3UM8bKD5sP+QgkK=eG?bcMTIKMT&9PtJlSVE|
z<8oJ;nCSsXNP3A0<{lFtC%e3?;jVRT753$;<ku^kD;VQ3S~Gyyup{xnZ+*^@)a$cL
zg|_<2WM~xth}njBNg#gR;Tgo?(cu%M+n^FlZ>*FrHqJC8qGZ#LX&44oSc~a7zWJMo
zR0^agIEkVmFir@~aP?hIgIr70KUbKIcjK!VZ|+((3%)|zoF;M@jTpOP7RpiE)N2JJ
zBHbUUDiT8~$&cyqpMLdO>QtFz17+s0iM_E(Lr*lnK^!|2>J>?5@X?Z8D1g{sGvxTx
zk@-02o-+1j=~a06mDg*kh8>aPggaaLGgcM>tFEdZ5LcfMC$n2WGG0Eq9uNlcYJ$=J
zg!;*!i=*-ykcg?5x6*C0y=qlFxommxwNBD2jkKu87*>*%n$*BerU{!DImqqH7o-R?
zILjC)g*V&9^L4tv(VYOOeFY#pVgP;s0O(Y2v>T_L0(MEh9rn4y!{^|9%Jh`fXtY<t
zk9GS8<}WiP$dUtsRF`9O-hjH@N!j&W6auC>6nn||CNp<X6|J&6%nTH$0ZIkm*>2%V
zyRm%j0=NvoAXfyXGNMzS{8aOwy>~!^E-z<$B@MgJimax;(fJ>ud~-5CgW6(5htOuu
z8s;XswH(1k02nWTX23Vlxl#(ntDSCzQ(lP2$mQEKg^h*asONJsC@$;^oS+d$+#0qm
z{_fAi(Po64)_&>DdBeeEmh7^uTEfj*(>rjelF5fX>{Cz15-Pjg!aT)!BN*36LCNvE
zG7JD6vT}@|@Y~Xj*aRO7hsWe=%<=#}l=Gt>ek?jEtM-71M0E_)rjozFH3IOT;Bi>Z
zwYcG&&i_1H2=A{3WOkSPq7FMzTp=`Y_2iR!=-dIps1R^>SEx-yhgJz}#&5>5MEOvN
zcF7Khf-&Yne5Hdr!wN%jXh4FJKn=be6BV0Km_#T=tdIiHf%7X>%oj=K2hmI|vc!R(
zuv<_El0{sudS<#?0PDG4(t$Twd|xFo`i-e7z8EkI{c>fFa<xXBM$iHH%2H&aYStU8
zM1mur!=!(987uzo8M1LNFoLCkt9w9wF%*sO+JBDW5W*k}aG*1}XDp^gSk#Qx2v(W`
z#xto&fhly=U+sK$kbNaC#QS}YHlI5@zlFc(0*E6EB!#d4J#PWJ2p$GJk#B-2pw=QQ
zK_-wS7{}650^X*M`D*Lh+CWoSupO8|urLF;8D1EBO~pD$QIIbs1X`u(D3Wr07@pK?
zX9VjBV|;H2j=G?s_CO7e%RQ1&6Y29zn4=J6(yc9L>J^IJ{%Xq+LD2iw4Dfdc=3WNf
zGgt0(?tX~GQ8&_v>e@<yS{PE=A!nD#cV^;L%fNJ$GPab40Gd-IP0yrbkJh`OtBr56
zQ@b*N%kBS?!UUzNy*&#u1)We{!11x+SaE9L2b7SRE0ThncIVUEq99{^VH{cr7Z>a6
z4dZ&6+onH&L>!J2xie+GZSR*X{(Q>?+5o$9f~COSwjAJCCaxRZYr2y8xutkYDH>a8
zP%x+tBrPm0D=25{KKrC+*2(KjAYoUKlV)343kTkI{pm^30;an!#Xys$TXZQ+QD;F$
zQKFvXBxvjc;z(8gz}HcDnOP?jpxLDGwR^7+NMmk(mFfti7F*tw%BP%UN$h1k6zf~?
z5KG;)b7Sd~Q0%m{_^-(axT`$#TpLcI*e~C4?6DVcr4q?wPd|geq7Equ;sN;P+kJ8<
zZhNNU*&Ms!4Gg}r@H-sL;qT*Ja87<qvOK08x(#b)A*}cT!e_`A-`P52H*D0m1CysS
ze%$WfN9D{o>V9ef@tXLCb?%c`d+r(XWj6_5eI9rw)uV)n=%B}!AK3jwXO|}47eLrc
zMEJZ`tXR~I;A?d21B^RMR9?>T>{VXRl79@z1>Vij7H_0*t``5zE|TSn!nzV4Tr<ay
z6LLS7C^gG>e#J)Jfh^(rg$0fLS&&#u;I=P`v~`#4>N-IoMo&<2e4l9;@CSs1%{|ow
z>4J>y<;Wk1?scFp@G@i49T<QYLMM5phx?C`qj*V{y)yKwNe`SdM*ZB+5DR~ezulVT
zRh3(ZLmb!9XOs(3h6@#F#Qdpq@CAp;mrMZBsp$QV5R~maKwg_*;B&+7sL|ETu?}6K
zZ{+;d3St;a1Sq8Ut-1E$jb_Zf6oE*@5su4^2b4&4<*=oNC1Ij3!VBb{hFqmY{8r<}
zDN1}xVA71UETz^2y~J06$60z_u~QnG>@9{Ts(xDQ$)ReI1`pdxgU6Y4^J(02t54}g
zy|3T318#QCG*BjAB%dZYR%b}+t`0j_r5rYeDdlDh5BQd*w~ZFhO8g3PuO;&E@}){P
z`s!I+aSr1567Dhm^3iCdvAuz)Yc5f;mWvK_hni9iz_K@}&VMJ(zm15y)(95l0OP6E
zfC8;c{#@xaBFm>%RG`0&8Q@9K3lR+H4;MN92yrS(k<a)A<O<FQ4>M7Lq~}Z4F42fA
zHVcgWbGoVK0KjvpC?ow6)k2`HORI2ZkSFCdSV)=05VS#y<HOh#fE=mSBte0oLl8=b
znj|xl<I?x=PZDbmC5RHlRRnIKDQa`41m{bO0|@H^Z&SzsPN2vi4_>p6B1%?M*s7m-
z@`LW<<Un#7S{yV|uH2fkvY$ZtU@vA6BYi&4Wl_@5=+jaEtp;`g#5izer67XBc~q$}
zHnxDXg@evf5^e9>#kAS7WQTLvoLu7?%(ix(2AjE_aFzhSfuJA)=q~8hweq#Ktp&in
zDFR{uxao0<>Rlx3CICgqp={IyN8OO1{rxPK5f%hwr8^whw($xniHEr|fo_@Ey7pIE
zQh!r};ZSot>0nm}4r;GHZ|r5DvLy(>@3@M=Nwe_j_+_vn<I`9$wovR-6;%rpP9uqj
zM#qUAb+1C#UjVg|f<x*uUi7@GDdFr^Aq|_5pjSUE?va@XIa4z4*0lLe0D_??tC$M?
zs}I(dqM74?UI~!rx2Cv&>*ioq10n&AAiXXAE;slpmPcdr(=D(*4>?p<<S~{%jYt-D
zomh<}5juP&dzbdhE|%@{U5bTK4}5KYIebVNeVeu~C<>@8zY3ol5XJDiyM-I#2?>W8
z=;Y~ck7r$dz|lOeNL5;4Nnc(d&s1U4;y%%UyX#h@YEc~kDNnB6@gNN?!TEB?WTZoW
z7@wv|xbHusoSk=5;ScF*lJ_%x<!%C<`%la8XT#6k{9S;{G##BS$x<NX>G1;MI9I1#
zWjV?01;mbsxwzIAo^&;o!lj}S;*WMeQ{`#;M~8O#ku2HZtej!{%dJdZ@@Pcs%Kq{Q
ze+RGr$A0i0ckRY7^m^~gnG=^oRacf2hS-ShGWnX^<d7Bf@*_fA;p}}qpTxqTT>LEu
zZpZ^FXQSh{NvjI04nQ=C0F~2V!+!ECt~X;|s}b8#zi;&8VuNIF4!JrhtV4z<84J33
zKy61%!8U$g1JPIZG~THbWL2{_;}Dgm4y%)^qH!!*RDhEa;vivjCUCDBwP@=dUZN%_
zFopUtZcWgT(lpYV!kdTfCKKI)R#~yksIp%lvnbPLqQn~=z`oGp0b(R{2pmrk;y~tR
zodJN;7rE~Ihu6p42ZDHX_NYnLY)rKz=!;(GBv2ni<TKcyQi%I3?;Q<rFT8RP5A=2i
z@!H#oSHv{^T<H*mkqMOjk7vsHV?U(a`>8ey2?cOGc{O)Oj|brRpi3kP#(~mD_0lk5
zy}v_1|CB8pU#w>ff9!(Re(QeO=T49YmlPGUYbGUKF~*D_IrCBU$jNUjADJWazMG)D
zaJ2dv->-e@GCaOZ76<d#UR-^3jY9`t`*SO?kh|)R^1@oh$uEdY%@ooIVnVpskpui&
ziERQMns?_W){AT}(d2oJlQC^hNhT+v)d<D|-*CM5=w|%lDuFvr`!YVA72g4efB@Oy
z;N9GsO^VgdbVJkD;6L3mJA!|k%9dC8{`>tdQT+Xm=jj+NObSo1`a670%Vf8z_OBo2
zp2D-<2sTHn2$tAsB;pI|?7ra@FCNdrA9+&0Aa-NlfC<cP4VtK{RQK&br%>5)h4-Wd
zxSIs~g!BODpk(Dm<`{?bwXW8kWQgY(HvYhhWg%Y|Ups%CR-*2@Wba2;0d2m{-dE6S
z5@5^II<*X(i&mO*t#NI{$ji${p^Y<SaVOTGyqfl-S6%PD(76wl{$OmfLBg8sl!2`7
zLXItM0=8dMENDZ@L8h_bD0TR`&Wj6(77ihhD<$hwE^0_x()n2%d_TSNFzn<A0==Rm
z#D8@X(I?ca$2!^}k_mBsnlD?7#xX~$y};KLm0Y=^q+~>WS;PU5B|+x2?GP#73;JA!
zKdxxlBPWA%s8y%xq4gls!_MrA>F@Z4H>P0Y=8h$XoYKc0^@m#!54|L6=!-jk`dr*;
z$GAsiWUuLVn?2}I8K+iE5(;x@S;WrhrD%YhG8Drvk<y<`|GtQ^D*q;`OK%WAlAbQu
zJaNO75X`i(QSe7Ou3SK2A?Y<mExm#f1!618XejJ1c&Zlbi_K^RK!O-hQN{tWy-Y7H
z-Dv>_i3O*y`OEBEInohC-ut3&bDOfE5OalciuVG(IOjR5p3)rHb&)KVt-DCS$eS6}
zPO6sJf$<QNCTVNF)epOw!1jbBxbk6$RQ&_+mxwNFYg8OROBd4Z#21@XR>KH~THiU!
z&MjF#j3SDsJzht{w8BFNUh$L=xHeta9g-OGe<c%E|5+fMyqh`8%JRm`{8{mE$io+V
z+(*lgzK3R)0rg6ESt8pOW=BxR7_%?y7Ehuj;)m5vwdDa@K06?S#;I(02B%1DnNNku
zJRXV|_5C%GMdOY}beeb_NhFzNy!4pPMfxj$!<b1uL29=(nuS|h?MxpK?zk`P8SVEB
z?96Y~RZTU-$pQYKMbmxLNR#=DKvPurMKV%4j+Yju-ClCMkbV_0U;GI*F*v%6eGX_c
zhruZBu&cS>$@4Wp`((Rhmw^iDpIkEq4a@xV69CV0Xh_M_A_#`p!3@C&E=mmJdD^BW
zwkyULA+E<|F4mwt`Ch8hWIvFgM!7eqJZZ~YoZ*0}yf48kE5-Cmjq_Nly~PUR7W4eh
z9T7bm-B*#tNkYX<_WDL&jWdS0F&2e1u_7_y2Xw>KG=-ugEr}@IvZw8RLA9<AOkJax
zu!GTh>J34jwh#1F^xPchuIQ+fGmFOKQVQdo@iq3->F2Zu_7~J%+Mz+VS({(jOZ0>)
z8t7dK3Jl@2`;2Cm`Ltgy#Z{dYJ!|&TD#Z(5RtgX~04CaTL6>xa+U^R0Ykr0Mii2lc
zeZchcg`qhVh@;kv1BeaDh&EA=jP9B9He^Um4hK)4WTr&802;*_cco(SH^p2MHQRlT
zmet=7^ERDtEtl5str7|^#dt;IS>G`(F_YeQldSAsJw5O}0zjC5=z=vQkT425kz&GS
zTmvb8o(N$+n0~iXG|DVCfAqISs2${=(|JH>*mx{EtRurbq3*?753MES9@{<K37a)K
zI|Nc1bb<28Ryj1LTwQ*cog1%R<O~2id+<USe^)~BV5R{r4C0w4%Vf02nco<+2v7?i
zF)Z<=Lx&$9_(&fi$olc?uA#A(!AZX$UgI6{Xap-ijq-Rc5EB`cTk>J{0n6;sf7}<8
zcZ+$Or_H`q%g|ZD6#Eu5Jvb4hk^JnhVaby10fFlT8!eIRb$IZ``yjDk2gYSIysqpu
zq!H0xd%!il;|1e3vo9Gu<J50LW^6sdSEdfMtttikvm*g2&G3re!Yp<wC}P|`nk=rk
z>|ZE~=_-n+8K~*RSaz{4w=*bP&eRIr``D^jehzWqJ-E$n{v=biHY42M6k8~N?+={A
zu8RkWoN*qWV#U`@(D`(yI(I3Job+Dj>n1ReC<Q0-&>2sI#`Cnb+$t|&3!Rk@&mr^Y
ziW>GIZ=5kUi6F~J95*|anS?EiEC?543+=7Qgm?o@dU`9<J~pWu=n#t8hEuE6+p4Cs
zmY#I8ym!S|>40auRv5;gNP?##=UBw%A-*{HZl`TCn)#s8oCk<e-TrZ7t@E=qQ)7G8
z9=`sI&?||`YAKpD@YAk-9RgKVGWufBz`w9C-?G1izX5wi*lsy%fIHVAnf>F=dH%)b
z8B71Wo6Y}L1I9GSjlz4JwRA`R4d@D!JvTPD5&L(5m7v;rKhWR2YO2N^ftYw6aa*=g
zK~wrnDai>A@!CJx@!arS7ubS)9;?Qecb*8lb=GF0^xvN^wBaF8rHzUk#T+GDc=iCh
z9Vq<1l_P!bz$9FLp$gj(F~-;Ecsq_hUvo|fVwanNRu(xqqY;>n)aHaZshG_O^vWby
zqjD@J{~=K@-Yt=m1CI>#3R9?e6*g~lZ$RM)mRS*1#C<H0g&1IsH4IZ)7{iKo6IcpS
z^Iu<8-L6A(r%xC`ed^Yug&0;wm<B$QUytWOd_;%Y20UIf7Ro9B3>DYMxun2X(&>K5
zq$9EG{SaF%<>Ao{)nO4Jhno|i@p3ge4oxYSbE!WJWUI=*MU1X&@WUtUOFVU~P}xf^
z_}U;K*Pcqj(%}48Nzr=%XXZ#HV|$-F=rk$2_ID+{cAGf&u^0EjKP`0bHRAE72w~W>
zJ{;A;S4GVHPK;9JEw39e`Lnwxf6I<wUQDuy0rjY%geerj`A=L*!Ljyi&U`VDw?uIb
zxnbb;1mg1m6ABW8?biDL-Ajeq0TvcefC6?!I}xzHfZgR$#wK7_cVJi4OW?0B7sB_j
zAC%|hMd|124p@3JF_lq!*lz(i`kstRh%R4tdJ2=8T_pQiFDThckVa4hjN=4H>8Z;V
z6`j@$!+zEu?ToHlQotrvT%1UjGsNR7$%Prd?-pJndU};Djb}u_lc?3t&u`(YXYSt_
zmcDVYcK3<5@(k@;#KN247$0T68~Vro&YmR%lMZ#U_DL7+@vXV>cHnTvZ63?{crILS
zMT<{cVjufok4@s#^hzB#1z2qKaV6Pq`f6h75u@opyPJ!5k71cEz3b4&MS0<pn->~E
zmggJx7}(>v&{*)Bnjhj6VIL;F5%R#LmCbI-mB1^})qdTt)Gm(UcVal;_ewL>mR+|*
zDJ?q}yl%u+&YpNxHn<r?apQLu$jC?ds<5LWUyg2{9~Z62;ye@I>)n^7(;;g^o;Lys
zS68kg!_9I<J1q*!N30R8{qhR|)2Cv-SJqxMIFasMoG;GsZ9pmrJ<|V2H=e347p&yP
zX)ArSr-_yZ%qf>JgNbITp4gM{dujQr#(;HOe%jpn%}MHO;`uMLB9G^zq7_emPrV^a
zt}I@r;lu?Mg^W?K{>DA5o|=1eKw-#qHm|sINR;fX+Y6c8rk>-Dl01`ol9TtE3cd~+
zg+wfgDUhkK2XVzmf2ncTK;JHMF%(N*CISE!E8U#wwU)bN$@V5Vg*Ch^phXg#d=9$9
z<H^2@<HeCSHJRIHOA#lm5?rjSI16sv5ye($3V)<^ut`TVo?G|LIX%9a0u-##5`T_o
z9NA`8^8=)$9dvQ*vtF?O;k2dkg_%jj2@DiY;TFUsMWLb!(B({Yd3%Ob!GBe>;=1^E
zb0OhyoHS?{6o0PsevZCHW(L=zlp^`y<@<w?xfALg*uqy(45c{jS1>FO2gOD6-5^7P
zzndu3<?MZQ1ELdqwkbT>!HBjBnsAUFHIrzi-?~v{fDOmO{Lr;1b0E59o5Iu<12STy
zOp9Xub$L{u)l)GTrZ6nG-XGV9-BzdFkIzp4l`t;SKLy>QY$~GR05eaw=XR%?Z~9_?
zD}Z(A!Y>JJm#XIia?g|8CuU_W9Ov^561s>J19iCbXpwYVX^%nI?nN4tL?hkr4utr)
z`uo^RqSSzuw4o>{2zSKUQ&#OSex1POmAdKfo}F4F))r;%&p9@C6c0T8TF_iP@WpQ1
z^Vy~n3;xqu=ogqgS4i&7>eJdR-YGYJh>NeA8;f;Ua<PrGf3nK%b^OPDJ<qqO8WG(y
z)eOfIhun`OGu^0_0AGIQM82QI263Q>x~9|n9)k9-S$jE@V&g(#^)(}CP&USSWjFsr
zW`-5Z7fLT^$h%e9-K6W;N%1G+1cu`#r=<8&baLfU^xE^nEJUX}zt+hlA5x`S+6%^N
zRPJJDG;i6fnDZar&&|74H;8-`*GT&C2i<D}f!K8l6|{Lb$Qi$|moxfEzXOevx-DDA
zub%BhT8zV(4L0+Q&TQv#pp=5Vc`+7C&hf<Y17Dd{Eqvux(~k8Nt@<a}+4KleT=l?@
zmCV{cS1oNin?FJp&+(^BSN7pTChvY^#H|vNiuq6~xhcg{U1-K=lBL_a!X)~5DZXIv
zBT``#aAn>mH(z+f9q6?)OTCXTud-XDi->jUI`}nIS`!B=?}xZJC0u8!&^9?q67BW-
zV2?m5l-NGMV;XY(yeoinCly)}`bEA`_1q`=HSg2IMk%#rej-w+ZgX#Srdfc>{@3@J
z)t?UO?;WvkYyV^lB)NMz50!rEdewXY1e9;j%l!K8{*&0eaE5ZTUNc-Juq>Z$-)6h^
zeNyb=NRlc6h{+4d8`zt;r?lgHs_$<0R&mw^NVVX(%R-b5I4~|59Nj)Xt>Ee=i0Ni;
zIQsDSJ!|<rfEM=U1*Y)Su1j&J-Q;myxz}o;lV1`ezINKVH9WH(E<3;Hm7uYjSA9tt
z+wtz*m;Li_lt<I40t$I~&=Q+lt$^Wf;zMOK2IRlMfBYWQwkInnWN&|-@fpFpbyxv&
z_`94CeIldmOu52>+s9X~hx-P5bEi`N-FP1+Ei_ZUN)U4~$-H$kw`2Ni3X)%Am!pqu
z)5zFe4KNIYdZ9C8PXQHu%m?R7Ja>p6x}&zAe5d^c8xwY%;h)_Uu2pQPJ}Ac2pM~h%
z=h?jK_UVuK{I<My^9nV|>@X}UZg9x?Lg$+C3g4Fzr5YuY*}2=7K|b5UlGNtR$-K%#
zK*PJU)hj)kF+I<5A*99cK*Pf~U}7K2d6ISa77qv+R|&srj}-J?JmI{k6zYg=?s5KU
z1uZl~GJTv_h@$&XQh9jy#N=C8x00^kon7J<0Nmr{K@$6X3O`xSJO5dN(GE<eX2?h3
z$<5r9hno5A_7c@x65e)5VTF$P_#Tt@q1ZC(+e{8T*#Uhj_N&s()8m9}c|VpH&<k3*
z=33oK6~i#vx~joJDPQxv`utCf`08WSjKfmsL{fHc9;!b&g99M>r`+#<^vg?5cL|$D
zDGGT(`&0Olo0|ou%lb_sfdt;L?G4IRJN)T*IDvtkZHW$F(IL_Ewc2=MFf;G{uIN_t
z0SeI>pnCoFdC5roYdYukAgf$$jCt7CzP+A9v4O&!p^4pv6Ek{hjO8GHZz01X8K-_O
zK7Og_$vF^S9Nz!pyRZDgE^FMtli8)mH@kcW$$Qw+1;gVLVfs_Oz}j05Pl|u8Dgn2)
z;kQQq9Lsyf3Wf<`gLeVYy7JD+?@$!<^n1y&i-@7e>3~ru$*h}h>kn^<T|(yfLhV-G
zW@#Xf!g~G161<o<#RYLc#D4{1kGvGV-d=Ujf9o%V!)+_~$=9Vb0Q0zh%6NR>R-?Gn
zwoJ!;_=81f#tSBYemY^)ZK60zr;|I^_z{7W*UNn~>+CXuUbl{}Q9Xy)rFTDKryaiE
zDL%<$2AEA0p7UP4{&J`K0|6E<)bsqr0trtVPG9ghI4je5H;4}JhW2(P<3C+{QVi`w
zUG#UG)}Lju0RVA^DU&7Dc~c*Ad*Z{)Bz(n0waRL%Vw^!;*%(dO*%_jBw$#NoPyKx~
zu?zJV2)KO;|G0bq`BWx6S<06tEaf9ne5>=17<E_7%Tkx<fMv#AroP#_3y5!u3vEmc
z#W$`HgJ%CJAl~wflfEvN*q)!~tD6#C81uEMWYT?;@(ZD&hYfX8nj#-=l9A|NZGTV{
z)=93GrhqB@`IwqD_I#r^Njw)L#tOvksJpD49c=RJ2d!T;i8;~!k6h#B-Ku}d-JG<_
z_Xwp1m?ma}Gm8d;FO@v9mxgRV0foJeYuDX_iJKlXB^$yBGS^OTWFk6g{V=W@GLeV5
z$I@Oxe#sOuKl-H|uz~Gnd{sZ@iv77h65s<=BDboT?)ILcU<s;=UCTocLrdk6TpLQa
z<p0j1Wf%{?w-Y7MtG$N~%M-r`f54a9`vTwJkwL7`wXeD^gvrZ39%%^RhdAW4nyw!y
z@ok-f|6D(R`H*Dhys4dFGw*EZe6Q$8zGvVJ(U!jF6xLXGpT%<GyDX|7UwNlbd`UgZ
zhR;o=d{gnYd*7#IeEsmg;cq$P##dD~Pnl&N+hxCFF~xRLD(Xp>^qtQOC<<3}u|_u?
zH)5X^gyvEUY&A~o!}pZLDt{ozvZ3YcaFWE@EOcGb^L+80M<e#-Y15G*TB0yBM6Yzs
z=NVa|2L9p&&EfgV0$_PLe18NK<ortspcow8tjV%6J42e6C$`^mt(-y}{_HU%z`d*)
z!}i%ZL>5n8qY=wf?vG&K&qV$8nP-#mwYZe0+OLBhMe=?m&W73(k+R@3OtGG7?~P1y
z++YTVrbv&7yuflDE-|{e`c5Xf5FG%-WM8Z1fhqAdWm@q?aB}`}n}rZ1o);UQ(*`&^
zIa4ij4~WW68ivt}h*A&p?ygKHU+q((Ho4AshM010Wqz|Ob2vXbf93eG(dY`xFf?Sd
zchcy?zWD{bHC*Al?t4X|gt6|gkN!cK>OyTLNfRMuxw6G}S|m%Z#2UXm!Pe#vH&IO-
z$Q%#O#~8C;L!oU$y)u@ukm9c9jgwUZZ`NR~b)m;BEy*1k%Kx>WC|*~q>f?0sdfY*|
zEAztN6AU)5qQKz|;g}W9lyvUn(0mVoZ(!Xi+A24%pGLGMT_jm{c|`B==0~bGFpx{+
zF13kcUoIp*(~}DA>7VgEKK~Ef<m25#eyBZ==NwbooH~#?pEku3Ro(aeSa(#*S1;xz
z0q68X&OzP!ZMMxG#usmHT}6;>=51(4Sd7a<gV~P`(^YqYGzf~$1J#+n9osxU(N)6T
z@K(bOiM@bMSJ5<x%V~yB73<0abeHNy?N`9<YU}Q-I2W^2uzav6S3r{qahiFSZ4x%K
z9ma8aZHCXVgutM16mGx$8EPYgOm~=ZTqW4lIQ>mJtb;12&78Tsxb%D-U+J%Cw8k~f
zZ1i+inU!MN7n?UxdoFTEIZf8RaFYHOFi8AH`v8IJjo4m**TPy2YiBaP{CI_*)8oZ%
zriRJ$b<W2mT8T5@dUM_+U%Qar;40$&d}XOib>lVQ7a!FwTzOHkGIG&=;!JLLZMKY?
zj1<Y=Ke%79Heoj6c!_*zUga;BFk%cq)U-<$LP<HLpOMEeU++LOZQi#R_w~4-^O|RF
zY;2FG18IZH0tenn#KHdM{#-_7U$!Dq;0k3n9$in^cWVlsv*0_~ahclmWVRRg_$nGM
zs7^8D`$ZycS3b^xeGp$Uw!cm;IaGPk#1fe7R5|~A+6VykZWKPoTr&0dzQsDUZVShl
z^PcyAl3M868Ff6JK3K@!k%lHr+{kVy%Te?&s1I@OHA~>jpO=Oy1%8-bzdrHs_X;Oj
zd^=}mXVm(JQxYd7H#*a%hHNihGo38&ke27*I53+nE5lK-0}al65PRuQ<^>yv?3-U#
zs1FECd2QhY5mgZ*C1>;Hk*$$LQXoOOpop&K_<v-5XCRzU)bFmviY|g+mF!9+qD2Un
zAc>afLG%#4_g+`~BZ7#U=tS?mvq7TwZuQ=KZ+jo_eeb9HVZS|d&dixJvvX$7`Th7!
zv-v%1VHQBG6UMpKZYgKCIbIccd%k4Q{6SVlB0B9m8|~>P4^vLa+aJ%As4uSGA<opD
z1RIlrl$eayA{W`~6d~%yp6n5Lcu9;maul{UT7%<1UBeWvo{Ib|1ER6XqzScjrM8RM
zZl0fBXW9~}Gk+rn)y}UOsH_KAn%0)mnSo%Ff&SRi?D)bah~YVhlmx+~JN!=&ZUwU3
z!K_*LTwIi{&rsr@%!aF^Ple7EE!B#+`bVAS5!z1DV}>Y3@~D0wdw*G|c~E{Pwoc&a
zhT^}|HDDKy30nW+P+EWX-%>gURk^<B`o^@Z%yN~R(joOGaD0n&7ftvkDl_!^R0B8_
zw`r!89j3rIO|Yed(`Mg>Ql=v)97tUbCfc3aS@~szc^s0)DI7>N!&sF$PDOlK!p6jd
z96kRTq;tNQi&w~Y<n6@48k7ro3T15fA>oVA8b_D*mD)>5mz`2-{rblqHWYT4r%QVN
zpDz6&L6xsyKvCUXU3`kf+QiYST5r#>u9|>%aHT=Bh-jEs%rU;**M((igeNDw{l#JD
zzGokMih4xdm<K04QgH2;2z(9eHH~HDHmiA4w#vfOAAfMQ9tt6Q`BQ?G(TmCZtEF!<
zeJt>pwO4MW#Jbkqt<w65Utpn^E&6*+DAA1n;(5$u$qmoZ?{iBV%L5wxrfyS)#ZS-N
zB7_FX!ft>vRIHTzgPema5r(%~w-NCU3=ExaO;<}&ZQ37&VEbzARewf0ALsAY)FA~|
z9|G3`vNAV}Gi^|G*6wEOPZb%eJ{F)v&?at`fKFQdH2dQx&*p>l`18=8TG;eV)*82H
z-R&~smj^hDoIGb2Z4xGyEekzH<}^QItbn7f&-IsrVo8}76;}21IdO~ez_?_29d&EF
zkL5r73>^Gt-3(-@oI9jQ7+E^bS^f7z;=@fpkPEzNG`~qxr}bv+#vn^m_rx?bvB*Z1
zU%8z0zc0U|mL`2%f=gqUJTYI2t4On!WXZmYJd^8)q{iR9(yO_)-67_acf=gkrL%Jh
z8MHIOJZx*_Wun%vEqH)DYbR$>iqyuEW{Pjg-43fA>zc?0iL^%Zgp$8f&qO0LJEiXF
z)r7u&{m`w;kGxtBL6!0=Ni+Zolqki0COmG3&9xmJ_#R*PhrhbJP-CP&ru~=eIz`;A
zRU~jinSs3s3$D1gy?O9LMspQwRi_}hz8#*(3TWsy@iz?Ut8_8pc~cDZRIyonrShK5
zt?7#AR&dFS(HmX)neXq<FaP`$);M%37uO=Wid_G^_n*@1dfOVysuwX7Cfi#?@DI*H
zjCvbQ>mNVW83XkUH;O&HX1|22uXjMbRXZu-n#UPGM6E?c3z9_TCsrN~3GM73>2p-C
zJWn)4>Jo3RDz$iU`c1m71(#mBmtN?$J!ax^csy60>mc;JLL!JU&9>8L4E}U_xj<VN
zQTvZq0+sw9a6{MB9-8j(NSl*v@cWi)sO5j3_r#4`>r3MK+x%bicZw!an7DWyw9C{!
ze`(Xm&E(WD!MuH)l+K}14v#n9`}R-FLCNS@422QB$-<5lmVLN7UFEYegXGQ(ed#QG
z$)#1b$8?@+j<#h1E8jcrzgPt62kOMe%Hh{hWs~XQ*Q{K0B1D1*)bRP8-mm{{J3KUk
znG&9<5Idf%v}qgeo<HqkxcViZt*|s};4Z->uHIqu&w<o;OTe?O;+3U)z=xg;K+AIe
zs_BC`+d`P;Wa69X=NYUk5y7?1?>8@>+I9cOJDyE<0r<-EB8F<ZKBUbY<J`OAy&gCa
zQDd+)icGs~Pn``zVutsD>?nNi!rMW|B)@By4F^Fw<>t>w_~gH*QN$fvqJth^!f-Tl
z2dOoNmhB%?^GE7+yBs}kqMwDgE?7%NeEyhmn2;lmboMU(1;_Bnzi!z$Z5gIaNJb{X
zuG0>vMX@^p?a6y>QdJk85>)j-hL5qlTeJW&MTn>3J=u_>M7w2gz?)|;8a{a&zdUF8
z?j2m-#3wBBX?lN;zoUC+1B3XrDz0f&iakrZ99ybToS}^sP_h5S4g_g-MF!A8T3H9D
z_MM@<F)FfuM8IACv&RlO(YslSL^+EyN*IKQ7O=)iN~UesjrWdf%He?=al}3c)F1D=
zWYp(6c!odkO77Wd|DUo;5a|Cyu7X$Io_K8ixh=MkE&26P^IgWu*7sA*!qHEAHxW5g
zp(CZ2$*0#kmCna8tSK3H{|`9usvo&s8?R*Z)L8}>oW%=c!z=UO{0)DXRc3}Q%IwN%
zY%&@zE|k;xL{dkWo!a+J3}^&_S3^%+5g+L*%FC@rN_VrHpVw(bGO&b9tt<!U=hnyc
zn?<QE9&%X0fRAzEjZB#xR~zd!JkFuvZnQ|FwDnku=`h3CU%A6<N${91m4tW8V^w)Y
z`HUN{tv(K;fJS%-5A9!R?60O9PXwudr+6;byHti%7XP4n{Nxz(yK1)Bs9fu7B}O&W
z@#6kca-ivPD$ocY;bp(U?)aNYc`kc+-cR$aqu;pN?D6TkS7o~9`|V3ni*yIXT-qt+
zaaB<I&W0HpXaj{;DLkIT;;LL!I%}O(_P^jUb3XR`wJY~%Bv<g|)c{$pYm@#8vOXqB
zWqL}s_MUM>+2CC}0(j$b5tH+7v+g5m`<l3y?p~wYI&ZYr<^B*qv4v9CL*6+%`*J>I
zZNEUKJLO$AhL?E@EynR(AIx9fI2}_N<x&1I*w4n?jrATvjX#}(#jU$~c(Yu&R#8=X
z_9kzKt5s~o!KH+s58~M1e=JdcdlBz7o7}<oxF9*QXTlw##u7tOV7QlJqTa|d&~Er?
zEPres5Jm`(4I9u;T{BeY{D&D`yl9fnH$Mn_u4k^l3S-NG{pR4}#Aa)seFAp_l&$|j
z457c=)daa_DE7`J6Ln$ThOSNR6BVO(I4nd6kLPpwfUU=wu;O%a&rc4NElK%BlxAsE
zNTxV=+T}JXFFYC1_`T#c2EU%1xIzw@b#}8V1w&c2FRT5bShOfgh{40+MK>fmQ+5TG
zFnAxEm4_MnsKA?YX<^;To^UsIVtCz$cMDo(4ZR#R*%i@0FdiK7beVa-p?1TaxAh{Y
z;|>XQt|3Z;>Aq-?&8PjPKMB|qG&?hs&o)#nc;(%>ZOlF9x6?>)4xP}vkVo$RH#ebs
z;Nqsld;3uR?cqwTW7Cfk=Q{-j9x*eZx_(tH1v~3gOF%CP{F<kobIzu$?7-9I@71Yz
z`FXu1iLC88sVamwl!5>GRZiejZCtMHkE8_T>1+%5ZyufmZ?{>DR@jn&7U*E9Mxcj~
z67b*Mw8=f=C`{2nx*^oEu(MXC&sD5Ue(mruIy(+fLke%y#-!3}aMjwfVSPU}&DQCv
zH95E(%HsemT8ks6=(7s^;=GPiy-JyAno00%u^z-q*91knw-5de{=3)0w^6kgK?x1?
zXT`R86zV}$A19o#*5h*Us7RCwJPzZ`n0$@IRK=cF<k+x@0s6=gw?`@6YnO2zqA6Wh
z1y!qakEcmqwyc$TD}Uq`=z=<n**w3>qj0Zg0x+BQQ1m)u;kBRtOoOaXS8eE6TzP$N
z3S&V+Rin&9pQj)986pt`)oe0mnywO=Tl~_MZqK&wT#OuEC&N%H|6@olyHoTA9T;_V
zc{*<nUF8u9`N{oSQGx|}!W?lndE+5n)tlK;MEmVY>g4@0^M<6&(HfvR1>y#(epTGf
zF{>4&{A|7t^m1bE{hCbfR++9-fTb|!UauY>YukRY(`o}d8_shPY%PYn?D1|^q+hq*
zA}%*T6%}tUN;Z*XzP`|oDx|qsHPRP5ngDrmypt%`Jy)RuE!!Hr^gR=7ldrIboJ0i?
zF!}Tvj0gs2Y+vX7+>*fB8EaTi=!~X*MNHZ>rxzbWN@HcNHmI?0RQ@~6JS)iox_BRP
z>pLa2Qm}pddpadyrlIzn#)^7(dsP@$J0hc43-wD(ToUE}1i)Qt9JU9Gd|nZ{)q0U3
z`9qy!+BVF_$24sxQHImI6@te9*fuvs9>jaJdTk=S@~nXK_D|B!0nH$|{#z9o733jk
zZn+sH{betB){-2}*<A6XXJXYZJ%~5;KQh({;^IjRj51oVbDjaY@?i_h60g85wojTW
zXhFs3*2!w8jbD9cfcjSSI)KA(z9OnJKZ|TK)lz3`;7Ya69U>!x<@8YKs4v{H0s%v!
zL?{e;-@qrfs%KVYl#j1*s4I6**|6Dj{glwD{HgUcGkuO*VtXLz<)gUYLp=oz3xQ!(
zrN$r9R+Oqk&JtpblQuK&Z5en*Ms~@J0l<hP?_+<NDeUa!!r3hBiSwObJb>4E`pCw{
zv0#C`S1lW-%9;AOoo^E1`~t-<s4LcmED<k|Q^Qy^b-$>{o$1`glI6=ANf!SEfUGPo
z(bT#cyHEd+zd(_w!JmKeBvAaiya_&e5sotP^eqUrKF*&R_?mLxhUqUF&_#vt@xdLg
z!=WDP)s+#zFWZh7)!5Um_O73E$Km@<o2GA8@-m49-&@Z{d~O<NeFAU%sK0WqI)@a^
zUO%*@<81HikDUjv%&b4e-k!z*y@9v0``ho;(?&4+c8~)2y*}B^17unG<pIeIY=iGU
zYP`nkB-uAirIUP}0Mt_>ZYVOaAmKuG3g-({-`*L<=F{;tl}|bzYZ;`3AwX6y?4=fS
zB&Rce=0pkIr1fSXVOcdMkLL$_kA=w(mY>2s4_T#VGs(%A>pyOtx^a$TKh)d!rvj2`
z5FW{u*`lP?*x4H~HnJ-0UR*9(a&N}BZh#h*8%|+Nfc!7l7(e^t4-)N))EK#}XTHf%
zep~&u$*m_|KV?bs;94$K6-+*5uOq#$;KSBIVt~+x@Hm@dx1k}9@$#)YNR`@%Hb&~|
zU7Dip)z-_Uc9fmhs_U&h^BeD*zAumL1NZB%N1u~6%k5<9Ezq1&`W@5w9p_*B?SHPn
z4#!~>P*=SPA|ec@VY})kilqjh@Cg7gwJk*}KhC!mVxLp)CCgNz&V79%mpa-AxMsSg
zB2JY*Upm)Em29S*1bz5`odc{?4RneYp__8j!MS3-HFpkq&Vt=mIf{FKrjRORV!`Eo
z20-N=Roh%@H)SL}CF#E5nZcGluDfY~U{GG(pCDIfUz=Sfo5yu3G-U7GfeztqGije}
zrA}N}eAGE`^?7F|^QtxX6x`c*Ik07dC3YI#Yl`{WJP_ZXN~^on(kACtiSc49!g^vu
zd%YGJ2&)>o2&hvw3c<&KG<x_EYWq$3X{>YgNb=n08%s8y#Qdgx@U=p-I=HvK)2r^!
zE3NSjw~FQ(<UE<p;o{>tJ#7ZkGVEEiQ~$Y(cS(v*pHDIqU&2<W&;A8ADarm0KMjWP
zNSWF))5NyC&bv9o_?*Iz>x_2GtL8RQE4Np3`o%h6jHc$#%SBIx$|CDpF9y3fJ>F72
z%-MdZpifhH^SW0;ae)Bz_zZQ)1jev5H!y3IqX4-K2*=g#YOJBwZIJF>^L#Bfv>A<W
zt5ZF59UIBj=u4-2N!Z-8&RKlJ<by^y-++@o-^Nj#!e?&sk(DSCeZFR^9oAdEl<plX
zfJ)2aCY;LoYOhHc5X^|U32g+X<|e4Ga80W~tzGR2cD=LnIc5=O{Q|Qb_w&3`cZ+$d
zq4|ci{xj-w`6vQq=HkJuBPxA7HIV<Rxu3#CViE_NMO1#29Hfvv^mq%+G`9^sOL?RS
zwFTsZK;zh}yAf3SGW{=N8vH}{Y!Z0_Yf@A{(pG}~n|p>d0|gJI@~||3Za;B3ao)KG
ze2)Wn*7^ybj-;g*=d#MplFd$*?FgK7v$l{Cj9#7%G|x=nVgo({D4}1SghqaNH)$=K
zWw!(5YrYS+)-+D=d-AqV@hw6&=qHi54*4qZB`(~}O+Vr1;=ra{IXxF^gcU;it6bSg
z!*ripM^c=@96*l|)v+Dc_2g|kN9msV$H+UJ96Y$ATt`l_oA7o;w_6M!zjNlY+v-P+
zhs&=No_&DDn<aMEIVIP*EgzNLou=^NZoD01F~EZsYqDzOilMnk09hEX#G^x<t-9GY
zFh$$~eifU+)JP`$8JVF4B90ByYC>N$oThTrxvDJm;kUK;ou!~~N6lz^;aJ&7`X4=+
zi4B<+rFE}5a{Of+y6i`ey6vNrMG}&vhv2cxT_0lw%}p+p`+4qsj{yE<rePyD*R9rC
zy$E$1)zAO*cYkivrAR+_&A};6hUKx<ad+u@H}$(E&}ec`d7@`hGJ4o}T2VXF4`-gV
z;P9W_8|RjNfLAs2i%YlS1xHX+vHz#+;nHI-&5z0OsGi!vk?O}ON0}vnvU_kh8}oo+
z!RW*GXCEk&+jLRRDdtyFzv;sRl{r7L#bAQ-s=uFy$bIPTm9bCke=#)vf#65y+ON)W
zY0r@NQ3xVH1|fXntJaT>@iiHH3I3Vj^5@{+ohywB5GCsKuaut?e#%|D3JKnyI^FnD
zE`3U|?+*><;j5o}RNFVt9${Ru*0v3wii9QMp(LDLCXlZ#NyA|@gS@F`E3XTArqFaB
z6A#NBI?;e0BDfoUbk<r-R8PjnP^6LgN0B-w{`9o5evp@3&81Y<aiN&x&b*-L3u;Iq
z$Cn-^>m^n?V>@Mj<d|g>_uw!^Gpm+{&foFi^4~%fzed{|L1XHXh@E})kazxV;v(}s
zOm-vLnd#4LWZbokavv^jFD=CI!k-BMngN!I-}*iQ60E>3-GAvM43G(>Y_lb7`tJ=r
zZYLLzhyY;CyclG<H9e(Q7I>l3ga6jQvvU+;-+$~|>VOCR0fk{hh}tyQ8B_L410<U-
zV$%Xo={QhAq~Gl+%IrgB0+wWdq%ywhq6z}p!Ekf}zDuV$mm9zMWD7dipl~S>!5;t<
z`J?AU-O<7n3eUON8EgC;H-jd;NGnb@RxgWwbgl?oNdbTxzyI%X+0EMMiM>X2^|QmS
zsAWfn_i^iFyN*`B&uvxSpmyLINtF$?8|KP$wT}tO{I@5LtUQSS%~$YbS<TRvQaj?a
zoDqr}ycn-w9zwyHDWD7tSj`>)hd+Waj0$by&0+Z+jKNGejk&m63HQG#Q7yMC$&FFC
zlxhmnMR5LnpBVZyV|#Gp;ax^3DctK=?#YUyx<r=!k#1#ns&i~+Q(l>?Sk)rCLV@W|
zN*_j%6i+G(oJZ7lmgG|7y9(9c<L<TFvy|U=OLS#`xYQo}_{RwG^M(X`p-d~N5$R9+
z_{&5X*UUutFuGd!N0htz@jRf13@*~ct2PgCh;%O(cyWm$!8gxLh8~MVf2RDfN2ntz
z0)Wyb8`YZI^kux=z$RL=G6@hbz0D-5_A9XO)yQkA?-z9ub0?m640k-mgh6evzKI|=
z29wUWg4X{)=MIsbh>bM|h0dYGa}DZPADJerdxfE;byRN49@#$~hP>`Pgd9G<B~mn;
zQ7o)8-2HJnQ*;vN3Vf4Ip)@{7Jyk-d+x{-i0mkr>v}3yHbbLU!$*)B9S^3A8%38j8
z8n^UbOh&VPvsBJ8k!A|7DQr?V@8*#L5kqhM67BP4q@YqbyE4^&xT&88wZoEm8*-Xh
zL#m}DLR#-zx~%`Y;D~>-Md5HjIHF@})}pmWNe@EsJh}VtN>B*+<QxYx(~EM~c7Jdq
zKmeSgj_w)Z-a>i~T|R@8j*JAvmf}@j`v!p2JjVn{S$(_POJ`6EixF)ylhqLnZ<vKe
zlX=ZRcq4TP`^0O$#60y|5>Q{t#=DJ`+7I4)b^mj`yAL1OdQB_W>;0WWAn09qBM?h|
zldKLVF&G;u-g|#s(7g>kt}Xz5%b&n6Fqdj+(|?V1j0m3><SLJt5Tz5=s-5|`RC@uF
zhs4#!&OhHqFr1ejq)P6YmjGK5_cisx1d5thyZ#b$ru5HSGK>QnB4CH3OM^$bx3w$H
zk=RDaODbHFnA!jX2~~q{f^?rKU9iTZUq;aJ=l+QY**G>fO&saklF2Exw@0u_%_yeQ
z^n^LAt;AcaBuD0xev>{w@pKCyWg8FN--7!R9JO$}iP&7Q23s72^NK3d(4%}jFH{<i
zZeLICF#*LiW}wS0NbYGrl2r_tB1(8qsNkvPJc1x=X~)(6u_!Wv!fKstW91fF!L|uj
z!iiqF^Z|DuQ>@{skIWbJxB^?yMjk=)RQj*Wiy66bWl`Vx3CWM1#b0|plMe1ucUW}V
zTXdRT_FXD1|HaZx)}(9J5$!Fu-tvOl#q$r{eFln-aUs=8gJNGCp6JUmJdw47ikqps
zCGY^gW8f}w4XKI_IV?mnYqgQ0?PIPB4|b>$yvTm{%e9?L<V}U-p#lq_K@?w3%RU)%
z-viI5l2i`&3n$B**XcI)TCn#nBJfad2I`F9$|Hf6r^HzmtJIbf%@0k<a_=qR={c``
z@s7=oUMXx~6p5~nEFs>lMggj+-~(3{VqP*noRA8v7+<FFC2|}jnEmUL9KTQ?0=3fw
z#)Lu%j)Uz*Zb=2yVWoMH3Y?8TAP6+tnL^H}tJHgoFcDt~)ObuCVQu-8FX4pc`%DZ%
zzZgJuyeD&QDAM_bCw=@YiGoUJWkGqdrzsP54}G70Q($;C?Nr783pw>=7i~*QxrWb$
zMd_eNV<kbPX(JWA#?$y&BHRakl9{zwNb%2ovK@gp174yHA&OrWo`HaVQ^O}zIr`5z
zFTVP3tX*$-nG$f$Nyio}ytMEH#}s|7_Qhi%Q2!-oRCQlC#o@c%@YKguFPk?@b1<>$
z?`4i%rG^jzys_7ptq)?2nvqe0@K_VR`%nBMbl7hh11UHUvzq!F{n2Iwu>ul(hU=I`
z3BSS|ytj9AMT1CktgH_T{RRJ6cA4`1%jqEvm`DS42?@fCJ03bxft*~vc^y-I*mXUZ
z;Dvd=js7jpbKha1__#JIXf91{;CsD=)a*6n{OLOWC*^RIjtvgp@J?xlTtucAApIfS
zgu~{yySZ|**EVuobJjn`=|`ZZ9S--^I==HUjYpGM9NJak?pK*S&&JwmM}36W7K;EM
z;Ea8-Te|V<b5SgPP%41I9j0p6^6(bvJ`MR}*K<7PQ-UHm`38g+j^MpA%iO=VIa|Cl
zV(+E`1I4xEg6Zbn9x1B%7rM<u%necdDWF>h<6otp=7rlXc0}1#A>^R;H>XYKvWkDa
zDV%r2{&u0ftoX5I^K^ec0o8iERV7|~G=#xRH==VMaeUJ|g@w#hnzo+6aA@JlERG{7
z+n7EYqU_<4OWk_pP^ys3mVWNaN%~`vOUTu}m=^}f_w|ro$|yY9(D13M{+=V3dkmf_
z=tT)Ou}I^80^$%-l!*`Mlmbunm`34<>0UFQ*1*+qn7PBdV&Ug+jw}0cO}*|wis|6D
z@CKoKs1=00#%)V6n#o*ii}sCk9h55-A+x1(z(eJR<_o~XOu(8xl#%4)p+y5fUL~~@
z+AiW1&##{&XR`Y#+K0V?G{O7~lo1qD(jEM&2>!>0uwGb}%A2q%XG?a`lg7(=6xEdw
zb3qRp8WNrewHn0PdY5~58l#6F;<7;^yO2>1y>i_f==BIQMyY_0H#JE3+dW}rG{hng
zF_S13)+}b?4RUjOGwur6`T*hscxfgpj?O9vd+DC*3_#T;8K+7=C4stbb_)FpU$&%;
zPpH;*qkI6im<8(V;PEyBG~=wj-@@$`X*Qq~22Xqf*K!tXmX5xflaspz6Dha7HM4o&
z0-1e9A#)a_BOrpq{i$ixD;T0S;j7jLnZQ?>8z3&qk!Sz~ykRh#P(AOi_&vzjpHXuq
z|77W}>!>c=Q@jZ^ddy&BtU2lxq+4jks1TkhYWCfcU83<jmv9PEzq1E_5E@X<0B`dp
ztNwF3i@J<CCqe}_8D43C-1Oy}rRMy&2J&>vJ6O>Svn|4dI733;s$F3@Z+Fxo>!jiy
zePlS?+#r(1cq)%rg&?$OQ><8}DS1%q&iX^q+nq&y+&qi^2N3B98}Ti<-=@j?#2d#Y
zPSsD<^7~CO>vC%q44$BE$!0uVgT3_E2Q;9**vs!K13-rW4ATx*rv#z!W}&LDK`li&
z_%8B-c0lNy&DRoVBTlc07{aC<7ab#aL5yOebwwkK#BZ8fV{9xc2lB01-mT+R%Yu*h
zL(2ou49d3@duTzg;EMeeE4fA6`e_BYR10ZiC>3e_woYZ1&V*MXg9*CseYfUjkn%04
z56}(*{r^Pdp<GtHiFG0u4=rs>8(w<kX^OlmYA;M5JU~X8PYM6`dxly&RLMLs<qN6V
zmI_l`?%m#o1Hai+h_XN?q_YVpOS+3Qe*YCioNMd<Xrs|d*gH?sO(K%|<vMKrkwpy2
zkfx4=v|IEqYw=BFjKYf!pg9Cyr^%<B&i3+`#?Wg5mG<|h-gQw=&0eVFLI!L{BFMQ^
zW`{C*iI6{{*tn0sj~qdbGF4dBfrhy7YIW?1bFsc`zIs`s++bcFdzgBAMnP_;pooe}
zSrT2o5nGakYJ`(BYYdl5Ro+j9r%sWQKtnu)Q*rv}d(-W2IhACXg4{FNYwb=pqXhXd
zCD@NV>0_N2>oHG4oZU4=3_0k#!oO*51C8+EnO;uR*-y<%yfzs_r2SpwYo{D+^k2&v
zC&#qSHK+0=H6({tn$G6^KsJ^Q)lw{{k9G*IZ0^sfej(HY+5_(ic|~$VDt$%bMQS6T
zBEmR7$9^pA@e-2ZOekkJ*UnQOdi<=+qME2{X6M0=&bH3GHA(<iZeNZL&J}vC8mWX+
zv99`T=_tm@@$l@~?3*{A1PrzY$J$fK>AI+#2o`gphmD}ytu6J`Gg1N}Tu(W|BAIaO
z5JTnh3V!ii(|JJLJ%oiq-H(s7BZqJf{tQ7UHbi@Lh{E8xe5QM0bqO!jrVv~r=#i7)
zl&xo1Fg4ssRpCCLZ#HoJNX6suY$!`^SjFU3VNu!Os|G+AA;LmxPQuKrmR~iqBRpn@
ziD0CMOwbmF3VY*A{GI9i5B}LHg&wWW_%8lDxQ!Hx1r6<W;EP|u6~+SQ_610$YAK5%
z4A~$tQjg9$<c&W;HkFG$W}S6@17s7yv!5IpYUS~>u*t|FIT-tKSm2rEt`N=OLL3_g
zTFD?)`#e8&?DIC)ZBj7^Ps^VMkQ3J9HX-{q9N!1qj0Om(VUkR|Wj>eqS&aaFu92lX
zJj>~$bq62$v-^O2Vt`fNfoohfyHB0L;zY+IFFz@8cw54h{Li&W24vX!(eNC{sqXF&
zR|y}e>h_Qi%}8!@^X1QinB~Am2r<`w4T=V0gAJVBG&iE90G=QA)9;aUg6PSur`Dz{
zrY7=jVhjFr!y(M++M@%WvN-tURPOd45`+s|@d-E6hpY(cQJVM$qWp~It7Rr94o>%9
zkQc_FO^9QWCGomyOx@~C(C4aCg;=Yb>ojJj8EpK#$X!@M2!i?M`}Sk^_UApYSB;7~
zkNc80(|<U&=L+gnCRMGlaoMChNloABB8As|-dKBoII`IhBV3oYreKzt?+)RX^Iu}T
z=o_{7{VC%5_<DbyY<KJ0Q316x=gJ5(6w9lthO?72V_h`jnIZbzp+_G&-J0<<XtdHU
zkEINcqwidj3^DgMPe$3T(jqVGRC8nF?BrNgfZp!DL-Z2{C7eUQd)#w+m8W$v-p7!w
z@t;hg6<edpY3OMXzmtQ1I^K_&(0?|5oLj6YAL-~_w2$K9;pd`mlPQZFTR=8BVmv}k
zbvo&UPiT0@Y@F+2nW&LJowE^4C)fMHHAx;{Px8pBzY4Wolxmhe@N%i3&it+Hw~f~_
z6O*P_62tcLUW8@uhbQ;(tH%kd1l?2af+Y%s!*veQ_*gs_X&yUi#u(F;3)>UNI1kzS
z+U5Wkl&c||yUOb%px2FKwUg2J^&;GBQ8wI658i-gijP>^z1pi0wj>eF^*=FB-TQdA
znMvO@<4BTo9f_8dSYyve1pkW)ClbN>1%VvpnMVp5ovJ&pd#Q3DT}vf-*R1_-*LAG)
zps~Z)(BjfhEB|v8ypPb?&1FkcP4FS2q6|<G@7!6(ugEL<k(q>cCE`4uei-!!1{TA&
zrIbdX7!h-rjk=ToI~EkpFJ2_rX*b@(reBZrOST?W<m=hO8g-~5S~MUYhne*6%<Vf;
zJzBGHcCDycEP^7YSK#ZKoZo%OfRN9Rzc4O2zlWsZ&4ZiVuDsaG?Hk7Tm(LYE0unrm
zgUdk{_tjdsSJ$3~>LC_1M`pfT7F(JeZYfB|W(<0rGARJJbNQfCtca=$Gu^+TJMW@I
zT#w`F#(;(@gg~dgGk>K<j+2Y(J-|0+`g>;U`8S};7_XTn@ptEb>=MmrcX7DWy-iA#
zMUO~^qXb-iX84zN!s#O=oJ(7XePLyS1>0y>QxeF-YNe~VsxcGAQ)LS1cz`g|nV=}Y
zylIlDtNM+3W;T6EWku=iURwKCBVcQEfGqGMr&IB(+eRn|+<4{h3L4(u8c*6O09fg&
zbc@XEB5KG+O*WEJ4`8ja15o$h6lPOfQ<maEDr3VIDSEtBcMeB|@Ur4^?`y`%w@yx1
z*}jBSYB~9tr3!tM$dT`-;59FXgb(&SfIN%N!8^OC&@Xlz$ZSXd#h%>=6X;I4rKvr|
z53p$J)1#faxdvCju_KJ&9)M^Ac)qz1hZNPn2?l+(rJEV5H3pF)av5XQj%fe&a8}Tv
z%szUo&DUl%6iZXu7`p=fphn!j)-qFsx>yw=RE0kH@5pWGG(OHdIb20eL&eRdDSrk`
zl+s*+jsEWFiI&{vpQ(UvcGe|+Oj5_Y$^R5aGQ0Yw^NN(=u{;;Ic-*(II<@VDC5RsW
z4pk(v89TcO_TSJ0w9p{D?XeAz&4~B9FQ91W`l8Ka=#yBh0UcGj&CjSVJo|QYowu7%
zTCo)a#b41sB5zx&nS4s<6fplR#`SHyK{uN^!$0oK_7E|nrRFF}q1mfcb$b$|GIQy5
zI1kG?#43>m=+=Qxkbn5c-xd|4+Ofx&#Bx^^n$9+&LfM05eO%Y8(TxXk7z;9u1(&}j
z_Q|(snhC|vF<$F<msn=%b|S*F@u)F20d+-&8j*|j1((xgfN$|!?pB5>Fa=a~S&;<T
z_Rrbu8{43>F_e~b!IJ+x)2McW9IKS1#xOR?Y{2WXXvXD4Wl&KY=qD}Wq)^j@f?Xso
z_xNfXI_5nzsD?oXDCdI<Ma7V1N7leWJ!5m{8EA}3SC20fixyJ&Gg^&$*~m%3buO0e
zN@a7kA>yK?wcYK3eeF}mr+cFl*Kfaq0z}inwG%EZvZ@pse<}pOihDKX$%LmXMN0J{
zD?3QcF-b?bg<Uen#AYQO&&n)%H==yTK?8J2mOW-vcVn8r<+t`MneRlCw7Dk*<fNm7
zk2Tzya-`By!P)ebCJ)`1Y}q(;mAD+UsMdraO$$U$XTMu)%L(5y->p4*#GK*gj|7d`
zqQ5GQO~J#w+j67pa$BhgRp(PwA882SoR@CP1Svj6&dugHC^PcsHRQ~+vued^f)m7f
z#iOLndoBt*?3j7tje^#+Wx^x05!>7?E`2kalkgXIUS$`n3GckyIbm=e_st@J&!<AQ
zsA!!OGkGd9<vh}|IqH4W-#mDB3OwcaIrU$BtyjCAXKK^35lWMH&EImPYYG|LJVgzG
zPHjv1r&^urr@FB?EDCV7jr()AXdfRtMtB?1W(WRvTQ7`HW5}H`84$P7k3N|hc{W@L
zoc*`@ZEv6NLr*U?vx>(XRj>N6;vbzZ%Sd({eYKJw<mgl#j@e`EShYx-s^B+_3IST?
zyUe1&QJcW)!<Ck<4wFwh$*mYC3JJW)%v=q26_<_=mEjG&93V{vR52pX#2B=S&ct}j
zu8I$KJqlbyyw*u4y}Z0@2?907Z^^2zJ~stoytn+=i?8=dnYV5uZBE7N3qf67*DC_5
zbA4dPvn$eCdACx0>~GEPbZe)K;@ai&55=cU_O&g{`Fmf+e7LaE-vL!1@c*MH_v8BC
zXAC+Q(dPx9!?F%9db_Gd>s%&s%XnVZF=>Rym@MXtySKz>$xdyV7x&gj6q1y0Wgagm
zIysW|MASLw9^2#|BTIOgOcLQbC&GYq96Hb52n~R6Ey=nl?&idA$)fnvKyB8)gUY74
z&?fEUqiN=`h;lv$#QkKpc1g)Ht3bZ8WD#=!6yx)mm(k2(t&`uv@YLog2#^J#8+~7I
zdFeBIW04}5P0t&Ofh=+i<;i9Lq<s~r^@=RNCgioPD&v%7B-NC&2~=Aoimz+3QZ;nO
zn2J_oD9`rX5yMktDw~HHx6vjnyxSpg>E<+7*Xyl0qpVI^4ID}3jRz3gB6U*b!UWu8
zxi(#Sy=k8=Rd+SM$E$L^dXU!=9Mj}%Y98lQZoxNd)^X}}HqNT8V}Iuxcyw;B<Wf!?
z4|dXkI$p$Dwk<TK>X$8fFtz9G-;w#;o&5*-74JGmN~w)q$ucsy2C3q6{*LZ8(laiM
z_3G!Gu}{#-e>n~=sw@|m8@W|Yc(-BWzT@mPyXo#i_PdvTE_;k>Q}Zqy!ly^1jG8%R
z_WUdmTN&E!43S5F6DuUDHaFM>c$(KQH%3i^3I2StBCIIUdbe=q_7xSVU9Kkxx{Z2l
zTC-J7_bp%iLvoc~*<-`0?MY6es&%M~OQb$7gw4ZXdy=A{+h~~0Ma@dp)+wpb$$Sa1
zerXFZu5ba0p>!@@<E!~z6kMe=gN!kIt*i5S3Mm?`OT~g|<E_Cobxee@UV4UOy;p(l
z7=+ZjR3Yn2qvHv$f)z2*tmb%s>%$f06EvOH>XEXS9dI4j=f#=4zGdu7z4Oc97;0AF
zB}%!-NkKLCdmm6nK$p@tl28qu;})cK+qQJt4-1?FTR}C~os1zHj`fanbFyq#giT&k
zESXXmVa%2xn8(R)c}ryJo1&vDdDWTrWPNh37;jAB^`vnZ!&AA&WP^xMYbxhk+_(L)
zjyVhC<zRA#<n7ZO0b3IG@%lv;(%$6o9sq4fm;&^miB;8)fCywV2C;E1`t;H*ot?B0
zY{>Ld$f=RR6-<tAEiHy?i^fAg0?(_%8hkyF-;&bVNy>D2{h5*IlO%^J<`#}$*7*54
z3e_QJUV8P-%w565;92=5dWFwOe(iiu8mQI@aLaP;b*SQWw}suKyG>J$%%zVq*6J4l
zXYL?0ezX+-Q7K-8Z2r^YyJwy#0y_LB=PsQ<*E{N3N=~-;_$OVvSzq#iD?-+m=()}N
zgb8td&w+&V1@m%~FPE=Q3tEjPPs7NCGICeqs_-xfl7^h66#)loy-kN%2dj6Fd#GfN
z&7e}6uU2&_nFT#Y9OdgU8gn?sb;*fh;dky#NO$yQxb?5buhtF2nCp&F@2H)_{@`lY
zz&9?+y{MJX5cM$EOZ0mrWb7)4FnhARu8pK~%-7tYh!Y4<5=DensP`3Bvp4=2OMiwj
zQoVEcBR1$2aI~9N>+;08vf+1l;I_Q3_ZIb&WxkYKX<=GaXLpge<8_OaeLq5XtX$gH
z>CjJwU>?7LdJu+ZEPFo7+<jA4x+sW5y!#s}6cXEPmXWVLz0=9bcYz#mh#{<!W*`)q
zhyo`<wxrVehFIlXP^wFNKao0PeHLDP8N8lUc$mjYcY6pCT?&A>8N}C2a<*998s{A;
z+e|<m76k4#4mpV1h*L)SFbZIfx0)&RM1v21ZJq&XPT-i<xvv!4I<RSEN@zAw-9}!O
z!BJ3yGZKqMoUGiNAI07(C&lsKaD-2U8)f!fvl*56F0bPod|RBw2p=`=utPBORHWmL
z@?NuZf~_OazaG=jdZ+oaR}C|7Tzk2fP_LS7bHigg_0JV?X<n{_+$f5!RoIX(isPY5
zj8_&O!TX-bGh3+bS~F5-X?uY@SVvd_Mj`hQ+NK(=7vEk3jEb0UKL4e#3KQiH`7WgT
zkKO&#!T*$E!$3KlTbz{Em-XWM6_9m|aqGshR5%KMs4(FtlZn{N#vmDeZib*Ks8gV1
zVBP~uhUiqR7U`I$>-^RFk`<jm81ZS!3d&xrXoG7%l}eB1Ur_5yI<zP&#{Ih)-CKwI
zl>Z{&cJEsH(-J9sc9^3<0Yo!Fc2Ai-u56>qDEq;i;dIQ`=Czj`^r9?0N@Wp>8bZ+a
zT+plM2s*s>WR_{F1PQRoy=TN<48D0kZGWM?H4|05;CH4+f;RiWr#UG|eV*#O4en6d
zhc@8-G3i+<q*Kp$;0hDbn)7wph2J0t>awduLAzd>)J7S0iaFs(aN)t1K}y{KttrTP
zC|SeOnobiem0A}nLaA`Mxc6m0Bo#0f37tsQ78Q`z4MRp!TcXYIFrOLdEDiUDx%7xv
z(2ktfjQRbLlI%v*TMB|qI^7HfoEJEQu$F)~l4u4Di%WpEXz?#WrRAN@OTF?(3utqP
z<At%>4{pvqKJ=crZ)S(LeI%{^F?Khk793H|GhNw?f!V}VGAXQnUZ5chDj%el+?ML_
z6Pe5fglSRur>O6XV)yw$IqLU8p+AZ5InKwjz!bzXP--=~GW0R+5%(pSXSZ*Uc(mK1
z{CaKa{%kgho9)mOH@OG=nOa|}Y_W=+8b~5WGqtpTJ`As-6R1ft9dl~3#Lr3bXo>js
z>h@BEhf%62xO&dQRz)mi>~=9z^36#l(cKa!rQ3G;nOXor7T}@n=Wtl+l*%7d?3g@!
zrl?wOhTrW^=vT1W!$zhpUSHWUK*D@dsJiA`qb<cmRBeIWkkW}qiZPMGdl<zMB5cYF
zf41nIV`ejvW0H`nu#h#fAGgE(4>^ULH72^5HO`S!i>^_iZN*VWs6c45s^whIx82fz
zYD=yP)bq0PFT$m9jn5s4MX_e?2mhhfDa0tmaQr|~FtH6m(;0D{ze}w}v52V`EvY*^
zOn<q^MTBpnMaMrKbiEm8KsmR)6`R@CM)o&<XZ`}B6+g$XIxF;F;J5ff+5YFO1#}9>
z^ur{nIBy+uLV-!;4gQ``kMaUt@~#6WAfs>o7Bh?TV#GD$F>MbIoD+5phAz`jNT%|s
z)ue!2=$&$)r^B;k6)yW^3tdc3uE8RZ>QmIWO3s&|^@r{|6>e2&V;x6@#-{uAi?s%o
z<ETFAdmyQf@2bArtX;<CTp_DLUi3cq7;4l8bh=cp-yfX#&0k%U<5tbHk((-#hyEo!
z50hV(a3c%SoslYWQlu79eKr$c%Y+-o*k5`RP6)H6$f#o4d7bjKymMN;gr;3%Q<{!k
zfM7!xbVlGU&rb(tRGxhAJ5paCnbkd4OpK#6BO_hpRMMj~Kmva}2vi%JIe+^z;3%Ne
zaEJ@hns}N5<z&sfVek&G+_-;AnB&zP{tbXOVz}EG$>|zG1-k^-STSb}2VFs*-2hJJ
z`#U%!6c*|UUO8-&iTdd*0>R@YD&kbM-V~oF<KL)=`<;irRi>~$(4#hcTS!~vP4ftP
zz(;F5`-j?TN)x6K(|$mGI%%@da`v5D=g<;uAvs)Mk;9pw$>YKz2CZUu$Xl{yYVQg@
z>%oteZ`h}6*IM;_GB(^MW?pzHum5;ILprX<lgcB8eLci9ipTlRYbofCSpPfthzhHI
zyOT|By}QU7G&2gkKfIZL3s3^=2^y-4Od2vWNCj%{Bv00k38=_3?jQ0^Ea`id$$4^G
zNG`&}zfcAJQG#kcS`69Gm)tUOegHSf7TDhi7sb<f`O@2s{@zz`jUL%KsH-o0Rqx&h
zP=uJk&3|iaL?FKl>=*m{(hBX{7cM=_r3qoe(4SXgUyOVM3bbfDQhClAQ%iNk?A{#l
z=+qq~5lfAw9GJ%iO_;0y_g?0ep(XFan{DXhwGREki?)iFC>yIS8hYHlkbCEI|Gf~#
z8!HMpEE6k7ioWgRl~SZ^=Cx%H=O&Jj$)NqFw|~Sz30e{2#8zG;GD6;Rbkk;4i7KMX
zaG9sL9nFx#vkVXr=+C(@>F42$h`^{~+iT$nyf<w`{SH7-Mh@o)0&WLIz8r-U25MdU
zrM<vi*D1Ipr*d0FwBGHA_vxGa59YZdzHozPdlDxX76z`wk--64%TEZatayMBX+g?j
z(X!7d-5D+>sUna#-hc!xKA^E#d)IN$+FNWW={vymW^idIX@V@Ub$4pveox?w(+~>d
zce~qf<?TKcWU3)II`t?C7t(%x1jVBIaGCM%zk8zZh0*86W2wBxzwi5B_EDz=`J|Za
zlp*Q!kcta8K~i30mydx@2cAHN)6KZ|DOkd|Tm860$;RdazC9(X68z5;rwygtwRF$Y
z=e1#Z@S^RO;x$4L2P2f*Ue>ZBOk6@TKw0&eF0%|Im~Q^z`URe+<_DJR29IP$>eD}m
zXfvzzM~?S{4Lrbh?DwO1(67_=a5v;xh+iAjLZP9qPs7;Nh{lg8i6)93ekNgwSCc;I
z0-Y%lq2zxr)R3*tdw__OM+B0gEIGDNno@9JDK|b^uk7=tq7>ycWT_Z+IqG%q=S$~h
z`g_z*E$SWoK+r>#OuKqh>kYM=*1gNxB{2zoh8{+y`w@@{nVL-BT3wFAHwdgN{#j3x
z-dpR5bN#}1qW#`fg>U~>?k`nH*48j2lahV|#~iSl;#c>&__T?e3X_P-T)<S)6etY1
z%wro<ckn<%bF);8g~;Bfz=uYK?Y_CGr1QY^QqtAf?XOQydOH2uCTSz8K+A%6u63!v
zxnUF(F_u%}6;gyTPs2Rr{3ZmtCG{?P{CAG#>9qJC=$%6c{L?-KFSRz5azj6bwZtia
zbM-_T3&~{>k~#vg@^`7EX=-(A_pT_HS;&ZF?b2Kh)k$CB+FY?Yti(p9;Tb*>eC|}5
zMJ6zCljXe_qoeXLh$L7Zg4haSz#G~-igj2NgMn@wuAxRSm(=>@S_|I4IyP0-icCwl
z@ov<$$pTyFByzD(Rqh<s3`K{cTTWqFOOe?YTxTPxugr6!v=7Y}y$*vSf-JP;P$qOn
zjq&kfs&gHsbgEJ9cb8QU=&pVe1x<c)(3+Pg3(nY~{WD;zjkBp$na!DQ3#)if>pfXP
zib41<3f}MdH}%pLI-oHY_E(nLRC`U_9&ZPYj8KAwymnu^WfTuzO{{;Z05c+}PylsN
zv+*Ly>UmZLC|R|w4yF3htdB}t`3b;!^Xp4xRT+m5fD|~P+b<*71fQw#mp$J^Zpamy
z+@m?qV`$M{#_w|yp9Z@jaahSUJ0{-rIUT`jJrbd^RquZYEHFEKrVWGVh(2}D;+=k)
z2zn8Gd~KS1zf79sY504c)C%xShTUq<K1>9k3ELd>)_?w_2Ygb-PZ*7Jz9k9tpKSL$
zfxCXn5nS;{t;7-hH<IIc05Aj<eY5TBb|x?nukp1ZLTf@Yg6FR;B^)oE2em9;)gczz
zB<9>PyD>`?)J0KjBlw-Hc+p7nFQ`wT8~DFqqIc0FOB;YXhxGYJ!$F5Q)IA+7UXk;3
zGp=6iYA_mbcQOu6%R1S%$;h1jmImdrBK0u);tL!OSvLV70h#5@mXza~Bx+}Z1TEJR
z4w^lzpQ+c=1Knq7_x_hd^3JV|{GwS82@<I|MShWd@f}@G19HqFBdc>*PLnbUM)TzQ
zF@$NA;GfwP*q-FflObMj$GLdJy5a4&qDP~}n?1G~<VZ^}W-<{1u+kVV@|C$zx9O4U
z&4aUxZy8~=_@K9@z_cFxS1aH<!o+j%S{;4y;Xb4rqSi5}Zc9Gw3u21g`(ESZQ0Q#C
zhIz`GK>z4)j)+w=L^8=MvRH5a9J+rpHw%~T3esYE@#3LZWozpCR_VC5+5N%zN11I`
z;>+d+<4ovjs=I$sYPy>6CmKCC{IRC>9$~SjHOckUNV35l4}y{$&a+%)JXxbXd@^jr
zD+&*Sef#;VE4Foz9chKNIBMDAEytd#?MchtcZT58uzr8kc8xSe^RJB5M`>HE@AmZD
zKTs?>?F0D`9s91gvks3pm8XQm`D<1^0dOMc=n`k_#YNATuZW__XXY)^Xub+FItfak
z=0ZS82(w&R%Jfx(wq3Tc9aNgn<&@}}{%qL|ZF=Tr(+3ANDYb#FJYyGIQy*E>J<tCO
z4bqt+{_~1`T6l}nGU7q5;X{1?J^d_G`{FNjphL38wui1c5tf4*ZT7_M?G+!GwGctX
zFt142Fe=l2Lew_PIba7Gx>JZ_+ff$8hRn9u*qDLNkjX+cPzyo)LXpD1SdSqn0W>sO
zqQ2;r#m0jVz=W5`f?h>XI9o=FF}7sfq>JGz-QPib54NLWVhl5G-C7!(6lAQEbd&L7
zTdw#~ud`9-vi~M(<YtKqOzrN|%S2eJ%&3}7_e}mkG_c)Pl7%5z+h<@>r16W6RHk!5
z$+!j*rk@)B?60ak#|s%dEwEc{?*eCLaQi~v;uIE`LOSrPr2t&~LGG(QfsW9-iF`;W
zDwYu_Q=a3vh&x)o#zbLk9GNQQ9DLL+t`>6U%%Bw45MsG-AhLO2OP&D67@NWZC>J1w
zbh3;GSum$-H{1oDF^Mv~8X^t~6zpvSM9XSy7ThBlJkL||$b;Yrmg8%-YN9O(WKMP6
zev^QkWq|gf)bqju?{P4%q{(nWL;p~O<O<AFFJllSRG>yfi<!3l4G1(7j`I3KJojSh
z6K?a@hp}o3|Hw+>0^22sskK5>jE$o9>=&SmytWQ{_2L_kSqLP)9r-+cJ%+!N&{h^S
zU*~Dkwo!Jb$PoR^VDGS>hcMa%wNhsP@5{11ZVZ@==_%V_9Sj=6XlRQf)5jww&&M+2
zJ|@){ZYkcUVfxJ@4s{hHVuqLF>ULBW;386)=0<!s9ylt0(HGkW>KCHLn_KZt$g1B*
z3gDG|=eG(XW!AK{tv6owfGFK3)nFWaNR^u3Ttve}*!Y#TC7a2I@3WxYDmce$o9gYS
zr=C&`EA42&@U-;JF0F<#@zd2+?_wnbb^BM*lK%7cHq7nG^6^RBet4JxGMwz7kDWyz
zN!BC}zgQ$7>t|iz^`#<_RT$NCy+fxAfXq~ssIefmHWmhu*Ph2qd~5WZNO@?81Wq!L
z?<7_`7q>4i`-q~yh>WAdO+z<qDVl?5A8v{u$SkG&0h2gT3rs|SZjA}6jJe_+2M!+>
zro#S-@mB4V8Y$c}04gTHp!4w6SywufFi70KAUBa3G&msHXb)Zi5~=q%i3kb_ZsA%(
z^98pq#rUWLbkq2@(AcVYCOmcMIOg+0OGdvD<@}14=95?8Bmj{EAtN&M_n93IHF)M4
zItF?b7NJw_f}}`2GWa%L;uiFQfpUi;BPWG&Z&AB@7*=|?7i9ov0Zc_l2UNU4!T&x8
z%Ze@)CIy&6;zKPXnO@Eaz+%OM-Yjp;-WL&Y#O3UP3v=`ap@wekIkIrycf{V(5Q?HD
zC&Eno1j&`UUH$4;b0DFH@h$;OroHz??35W5nv>u7Wf*xZQt8nf>9(S`#gm0qcNoYK
z#f$7oY@JJci|A_u?won>wb*zKhq7-DaHnVTc4AB6V?+Sdw^oWEc>Itwcp!TV94&BV
zLqWjWUv&DNnO4rsNTEk{_DGhBBCASX+z%}pJh)hF=&9gWNcVuogM>Q;CfW|ps;UVi
ziYL+hj0+d0@&-9sEo-4HKsS4Oj^Y6z2djnAjsd7`ki~htpuVvZ&I9CN_yZBrSCazH
zVc-J2;JZ8xdODHI;0jSvhmHU2E~ExuKQu56HMWKMrNKCF^@x_>9%3*pUXTvw=D^ki
zCNPntSw5h^!%FzjZt%e%O|n?fOpV>z8{q!N7FK7=1O)wJ&ZiMU5j*6Z)A+W;;n8rS
zI=e>$NAr(LsR<!22Z)IBfNt=~>^z-{8RPb%BU9c+=feKFa0+2PcOnz{7uhElq(S#U
zi$`O6*{Mrhc5UmVZ@Fy!+(ZcLC-&DdS9GbR!>CKp<^xwEn`M&#&@JNM=fCU`L`<Zu
zh2^ivDoO~tsX%r<pi6-Xr6wYgGxA4^8piMTmRG|4=GW~QZ!>DNMPO_QzH0(Ws3beP
zquuE&L|qml{ahE#ACSNRg9ur`K0zWGsXSUr8M!C$tKv{Y1}G@7FoxMMZDc63dnSPt
zdVt+vbXVYm)@Rycf5{>+kp?{m1-*!@3bfc3=n&Hi<ZdCRFyU#}_}@u58j?Vl&H*z5
z>;9H-(B|$RO3D=`Cp~iijE-Vw{}1)N6VRbO*B`trtt+!``=?}$XnQ7sMBw3iF@_r!
z)?8?g5)6XQ?5Ml1!J%zu^KWm<ts?f*#3c0|73--=!Q`9K))XL;3{@XHMT+46L)Kfy
zHTk|_;~N7;j!-~Gx+z^sPZ%kPNGKp(f=Gvs1{w7QQ9wevyF-u^n1F(Gr?hl;%AT9w
z|MUFcJTG{~&hxzLzVbMZGcX^ta?KYG5y$`1r`|kU3n0!73vAjUvwk~Ye33vjG%rEN
z`WV(yw<uD<(AIlPa@#%}97P|SD<6s8I+TSTghSplLoV~hKnLIw->Ek^k?OiTe%F1$
zvptYC$ZvPt51~eTNNB~p1^)7xI!+|;q{Y9D0_ztt$&w3hv;#oER&Ad`#nJ{=rF7C5
zXat=xTvv}Hn%&q#R9R6#qp`qG^$En0R4NCcle6K~_kPBWZwc?A5Xl?c_hD)4I2*FS
zd8Atg(z~rMjsgo22bN1X%5Zicnej+8TS}1-A>H)j3PoEO*8!f^?_b(UkTLKIrI!tg
z44s`!l^byOJp^B|_(Ag0nbF`BkL<DWI#|(^<X+>HZ1|s_io4#dbVL=Ae%jXO*saG+
zUE0|h-#!aEasd}hD9~Sj%myIlW@P^u#A2LbdyZzG8)pO!O&IS$UbcOajNn6G6UzRb
zGB+Q9UQ7d+J<wO7MVEo%>cIYhayRpn!BgeWukNDLE`z45z$5d&@h9V;>xUv9AFC)n
z>}QBJ2)V^1feyAizpMn!I%9~_1|?X63(mvE_xF;|x0y?s5hDLPTe8BB-YOyWmgq=X
z(H)moW@|7OD?<a1ck)C!xj8-<ITrF7;6$)A^9J`G67R?Nggm3r88mwyb)Qt{>LV+J
zi)cT{aAGl%Q_74v-m`<1c**JWx$bey{F*km+$m1}vVBu=UKkKi`S>n_oewpc@E8jf
zV)5=H#}1;d2@zm8q$-S)&CiWpxf&vI`9}`BoO0WD+gdP;p5yoFx4fX3a%+lZM(hl^
z&gJay(2fo{IV(dCW*zyBq2m+^S%~agy>zDvMuQcpK!OagDJaWFxu!1l>8@ygNMt~G
zNLSOM@()dl@`XK0WN;6mlNlvKM58J2oR*DT#<X9*{0?#EKEX)>4@v?(nZQ7bLT>h%
zfdTPCZ=B7mW02p?P6Gt~e<|=yIrG=aLpsj+43n_`JdX46Q`)=(`=aY_8zSYUiLT%e
zJNTMD&y2OXy;m*zA!B*s8T~~Qa7BP<I{SyI_PzhID9AS8`hEYGuiqATLXY&t-*jb6
zk@C<lP5ssp=v}zDpRHbedxr5QJOFAdz4YyR)0M8~z)5r=)Igiv$zDjDwMZ<tW?sX7
zA~f;1!2jshhcYE@<ri<0qxt&t_5-wsJ=$^=*Bqms$lXjFgvetjNA)OUx~^OGA`eE^
z!al8id}#N2rkwFrq1e&qlcJoNmrwm7Hq`1l;EHQ?L)+(9dC&9-6Kd}O#zctA@^9L|
z58@1^Hj2pJuGDM8{z_eyM_E&Cq{6=rT*Tk=jZ0TsuYXvS<;txdJ(AXs(0QLVsviGL
zdh8_(19%`tS|_<bU1lwJQrurzcpdqIKg3gSQHLtx<8f-(QR<z_EVe77vK^k1&2O1|
z#hLlfL=_g%YJY>^|K$l?$^s6ch^sP#uAKd;j+3(O>}~6mrjoH@$>_$ezRy*&WB(OI
zzE2O{C^W)oy<0E)I7ETZJdo>q3fPe#ACIf{?1UJ`nY!C$zSOQk&$+#O{Vj3a*+YzG
z51@hidpMHdr6cQ=YjuQD!edbzd`3L4C#dC2FVQEXF=fQ#)^`5C>WE9@o$z*HzQ%XI
z$JehvO`eGFC<45bBCm(PwO#U!Z3<T5%kuWtUA(p96BLtEBda;RMq$O{sJPu1JNxg2
zKa$X|46mDf<&XSW&DYWOKWZ0%c?((lD$uudX)N&HK9tt-WUnCAgLQG>(q`?h<=^tl
zpQI3H?NiqbM-bDsKga^a^e;lJ>#~r6_-G8u$d6p?i`gn_Eq9mCZus$YK3f7P4>{78
zH*(wB?pf+LS-0P&LzRcQ>leBSmayN1e={ch%1#N`NAY;YJ8U@Ou5Cd-mj(9*XXx|1
zW--vBZBksp_8xS!pO9$gxpgty4?_T66WHi><CX$(S$gLB^XT9Be+Si@Giy|<&)xiv
zirpt-1|+SyM<x8JrtKCxo<S|lVdKTK_>PYfcUrD3Is>SJ$rf?emddyvcp%bG3&GW-
z?9Un?HqvkalYt<bjmZv-WoCIZN=2C!F_|taQ>0JVxBqe{w>f4;<)+gq5iM_vvZOry
zLPNu~&|l0bITA;mrtkxI?JfyFvn7K&DSI-?cp(!Ti!HtrRJp7I&*RVUP=W|<V<=m$
z`A~SH%_98no6@rFr_&sNAEysD)d5ZcFq@H6UQNrQVn(CsJ)Pr5ua>k9?Wa~10td1!
zNc|)f%fmozCOMh&zaEgrFMTZTzBu8a8NB@N2}F~!b@$Bthb#_+5V$5S`s$thINHKg
zpJwB1&NZ|_mH5$T4<G;)a?`b@rsXdSxZCOOzV3BYnF((By7TnSRGDwk8BA8b87o<x
zZ%v6)R5#{gxA9LUlrd@RJaIjJCP8|u%=kAN%p~1py~wq8KN4+IduQmlcY!|IQKrq5
zs*ultn^Wmf4GTn}M!uh8aq%6^H&g1XzWjHjR1@R&E=pzKV~fHrL`dw1Gdw)el~9NB
zGn2c4esP|@{y=P*qW0{a^%*}26dKPE|9*?on8U;MMTds#$R!g9a7hDz$<hVxI#Y6r
zZ%cQ(rym-DkJW6AXR2MP8V{)sPQ;0Z`4;N*2=9^Hhcvqi-t+fM9H;@8H5v7qfky~W
z*kRtg!s>>sQ~e+olOdPSeXq_waSe$j+*dngnfTzBEOU=Nz1ptEg#K|$1#eg4L?0*C
zS;_kv+!a3PV$i=+nJC!zVJyCJMr(QQ==2}0dd)mgCIH~(wH5xxxYvNc;j-^^fp({M
zt{D7f^o*t58@tnRM%HQt?hNuCtqs2|TucI4b+KnfpiYhWCuL-SLwtzyB03HM5U*Q)
zNBodsb&k5b%63(wN^3Oh*#}<6_t&Zxo)ZR&|Ea}2ti2^TH}xycL)`CQcD;q+7QgHh
z?7kGF_)`DrowN$+6gPwdsZ6bYyq`o&ZBG>`g*k{)R-gp~<<Z@C2Okj(iM(1;bCe<)
zzh+qEyWQHEwbTnv#S_x-^&RMJe)wGA*0NucZ3a~67IOXdoAEO)o|xqsZ#;uv22y5^
z*!`3Y`$^VVx~(lGT@o3$<`Z(eBa&UhN8*uo8c!!WrBkeCDzE+o+5zoqnbwi%f-F*=
zO0DtWiNjM>8~fLD@k9~T%7F9RNaGh?Njc}uLE{U<h3Ics=CKii-0@MzQ`7J0bnwE!
z-sa4UkZ`km3t&a_(fdl?s;{<WOxIm?%XQw?egf7~1A}q#9vHTP&ToMJv-EMV+LJH^
zs*SHLE}XLH(j%fV;7T^qa-4VL<fd=vkjFvZ|Jc0rz;}46yujO!-#MwanAYp3hK#80
zS`@PjgXMXC{NO2oFZiPcDA@4d3A%SYV~$glAhoA7<~<-(q8`W-AleN%EGX*vc%C*m
zKLAmFK=(HrfUV&z6^ydP3*sl(1}Wk=hii2TQ#_5MYX-Qwt7+9DL((q;w(WO8mC7;d
zDzbM56owx89#z-md38Bzzxim}>sw%Xt$fkb0hT~!Hl}E9bcUKnRSIf@jDU=)`QV+N
z#M;gN3$Lj2@{9B#24eUx(XX<#aAuSww~HYw;2<&~qb9VTQ>r5*`Ta(%>7r~vyrDR@
znMEfz@8y}muju9fkMYic>^iBwh{NEge-#_=q-<W8L4}|~7tYdDg|ebXUMXX>kR-PB
zuv)^00mra8?cLJ&Mlbu?mO=D5K5S=oMLksX2=&|aFhpTD_myBe$;~z39YB4)Wl?Gk
zrhieAzMKL%^EYL$^UZfP&|OuBME{i2OLso(!4M2lzD_^;ume8?n-h=&z%Qb`#$|V+
zy%qtyZ}+5xppkSRC(&qkHKtzo9MoV!e;ev_z}aEC#+3#Y+~!nV^a1wo;jorY!I)5L
z)0R#F<Q%{pvY8y;C_Xh~=_<c2n#KZUVMP9mEPS_{9`v+H&=n8uZGxrS5lBSeL*d_y
zfA;~lX#fJt>xek6<sV7QJjL!F8>r88!q=C`_>43(Zu+NcORDL`Ex%V~R8>2sSF*lj
zH7zRzzO@?{H}!-gjr}rD-VcAhUvvGDBDGdU<_Ok3n>5w3Vky@$P+X3cX#{{f70m=2
zBa0Zw`Q@<bn(H^i(kPBOB4fiUr;?roonpL2alydLrW3`M2^~D00}gP@g#72vbRG3(
z^IQ7m8bxW@`{KB@la@88xJ(3t>(-`g<GAS-YIkF`Jb$`r_!{__73GTOPH}8A??Mkk
z#%g?Lwop^2M<jDwk$wU5o2M4}#|SAFi88=5Ga}ybq@iT<4fb#WkhB;S%~hVMttvl)
zsQ#no)u&l173?2iGu@iLg0|ZTUIT|g2_BvI->$82taIzSEu^Q1IA7>g`E|&2$;L7I
z`_!6is^0|F?kZ@E<+Zyb;2(gkVLc5deA6%IDN4TK5tO#h7;yXH8H2R985RHBtgK8#
zO|hf4M$xISSUyqv<z~*MQ?9Q!tdOt2*Rkb(qx+_RKlf>QR#|y=2H=hrX?h(Rhgv>p
zjQAesG0&#B$+o-)J)L{f+_CSs%EM-7avim8((-MRzzZPcVA9xywb?9+$A@>11c32Z
zfLV6eI366I(|ubSvtw6z(zJ6T+hF`ZYz7GYe+l*fKN1arQU0SNm>N$P-#u~kD>gLu
z;M{kZ+Y)hPGL<*bFlV%4@&{FinYx)X2oRn=&C0!&3S#v!B433S^>ar$Pn2ww(w5YF
zzrPOWi~FK7<sfx<gP{VL_1?$_F{_GW&pv%s-N7Vve?RQ_w)8~tSry|$72`N7h06cY
z?f18{hoWu)fHE3tz={yzreyW(mzrfg?Ca69p>U~#vlBHn<<Oj6o0TP_^P!y&i7_Id
zhWH|Y-x495muARbAmS{a4gD5PzCQU7`Rw3>)RuRq#*?sT(N<StU;0lJ^Dk|^Ew*b$
zYCMq-R{$%3WUmx&Jcp95_83A~o-dpF4)aCtat(K{#;O4ifE+5iaVnRKE6S&N-=<%L
z{*LxEFNH<9#aB54wortpvgM>5-*nl#Dp?F7<{mK8)L#2x<>ULM@B$Ch`-~u$oB3&;
z3d+MCtq*ReuBPcq&qn5xX6)ZGZ{>Yecr(UH5Q{4&-S-mjtBJ&^SdEuz2wr%v@eJl~
z6>DC||87?LrFYJUV%OTt6i-RGln(bHj(5tPaJ~MxM$V}*)r~HaAYtbsa3&?a(3Asf
z-ty;T@MzzTC<(1V&6ovDteT5tt8$cP2-m8SHS}f_y@^v<O}gm~Qp7@4Wu*=dKCG7R
zrOz2>Wn3RY2f9e=iSC~zeNch7$Wz-Efap$+T)Sh2w9f9O+K)91kgr`ia6kDdaiLg!
z3znN?m%V;8Y*kfw9V&9zbyF2GWEu3uFUwx8n0~J4bA|Wcq?$dKl@q>h=09+Ef_6zM
z&a_iOu#htVT7M#7&+n3{RP@iRlG6|gW3%V${Dc@xVIi6TO|APs?~_h`O3D}Gc^y1;
zAM;fWPjYln0R$jN?5adR&yVlx#`AbuO^W5hwQ3b#_}j?lwCub89I=RqWUA1^TH-JN
zu!4JgfURkwM&6}k5T!Z4-w1K0Fk51p2+`46y&Dt5`=d(^#-}1>rd-jxr-LWlcNAp-
z{}hP%4gLFRhGQW^;Rgh_o+VbRfpb@-j;gF<9nifj&;{|xR#)zHwWF4cJeeGMg7Acu
zy^ohTAI&-|i{Udu#V7lnprAlM$-UuI%)Jktb%b8;^rYlIW(d?W{`ryfniX=fW^$Fo
zk{$t$Nhn^pq*|mP)&$om5y>Z$MuI&+i-QSy5@^sNN!q0jcib8W^XnNbi=1xfQDuId
z%F@<Q$PglC8U8%?5DS!*5|M^xu#a`9(xX^kJ_wh>r&gIkZ<kwUunk|sny%4Cv2esY
z5f7f&?O~fM{A7UB*8O`bUuMjYejp#S!1VvlZ%zve5`n%)U^0uHu_SVl_{E2Ef%sj2
zTAI<_D*if#r*G2b_asS7>q{eC0tC{~zX#)$5D`3K=-Z)H4|Zt^mFi|=M0}F~;AiH|
zmkL9)2NbSb%{7U}ISo;A4SnF7>R&4Kn>M(Qby4+}=7P-gAOPGyjipAclZ=-1@Z~4)
zb*8ep?zqN*Rsqfo#Ax=6;2~G0MI`EUk5$rx6l6~agMZu`b}H5W`shoR1;`s}NNKTd
zIau*HTOU4o@AZ&XG{+~eCGO?VKy-k5KlWc}0e=>^WxQh&<g(9Nt$3o*5i{I}kUJeH
zwrco?9ux^h9Y%(Zd*J*?5N&Na`neab{o{+J-!;$f<3^YlGzk?H%CWhvt)$}vt|tTn
z9=c$UVk>7Ba1n5$li>`yBTL*N#Kx@B<$bvOWn?H35hVI>vaRfRN;KU*fhX1>h9VcP
zf1k;+?BC6?0U+X6-mY~URI`p<)!Lez;)raVV9p;Drg7+tRZHV5=+YNy{`CQ&D)U5^
zRQ9Ffrz%yq&NZGBfdg#H>mx85CpGuBK#ce}Z#3eymmXeGbpa<@<G=|_122DDk}Fjd
z>EBNPqR=2bg`eI#>=wb(ibj?H`-2)p_zw4T%`V-grsS_w5_$Fj8=Pl*wJ2iVFef@s
zs>zT$e*>;Cjqm_%oPWZ6iKe!!ahP6C0sqUhC3&B%@qw80R%gT1!UL{@1Fuh<;OXAc
zNR~Y)L({9}G(WTZr3bRf^U{a!!S!)zO)LwA1X~u|U;Dag0PPqp2oyi<O!=g-dzn_V
zktLioDNVoGQV(ETr9J1oVA0^anILEpb^2AZ5IbS>nmU@r`@<?D(+<=&IhUdz^RITX
z6d7z&_v+O6ro=giNa0joa!8VvmHW6a8RDN5Za=$cMr*d{nh-_(m!!e1^Ct7~)?`)A
zC%Kd1k}KD5)8XrX2!rohF8Z(t4F4f`-=qA&k(fAFAh=**-d;U|{1)@ur0HXjK|ISu
z8u9#Nd^>-;yST@Ww~GW!+2TKQ#?biR(VyT<cyo*NXE<^BQ;XK)t2dobtVbpP5U^80
zRzT^T%-!>jMip#xzuXpzwqlYc7C}rX@w;kc+)5y-h&bM0|IUr)vAsKI?g?)OSzS{Y
z{501f4RGnXhf(Q5HC=yqWRyOubDEOQ%DyF7*ATo7Irmtulu;xJbE-i%@y&(h9|q2E
zt`xd`@+4SSoD@O>&2<ZbL(y}@b=Ne}sB-jXyiM~|yfD9=?NqV3nLji*8j;}E)c1ro
z<-?3r?0=wCzr$!r_0`_r0tAW&jbs6N)~9~tcM#+o@lHMg^n@JU`2*iS$^`wAu3Qm-
z#8z2Hp=|xK__GZPEeCT@po0`3-faZ>2>xGD!Z3nAi9<hbJ!nJg1cG{A^OSu`lxLF5
z_w04mtHPuCu=hQ5Li@Aw>QrODIet;{hj51utOzT~u-!=BNaeqGc*;>9cn5@Q2Z>#g
zBWJ2MKuj|t(3ASgUlPzMz4aNUAG-FJ5&7Fq{Nrz4;JeaZ0HNs+=)H9{x(9)4=Cp`8
zS&{s-=eg1P%~(5)Y-TAG!jQwidyhCSg~crqZa42QKmSN|wKK)}xdaL&xyOPOIscOa
zF|>mRhPIQCk^=|Cn#woo&3kReW-O-A9ms+7H2`#T^B^xjA7e(WZ9JN%%#&0$-Af@9
z#CFkokUO~7J)v0A#tEax76s?|fi(4VR46uYF%a|G9-Dt>q%V1D^rdA)6@O`XD&J6A
z;<QL`Yx!{b$FAyUEcPAb|C7rCBu*QJwM3<|+(%#hM#uTz`9N)Rp-0oy4m@h;9EyRM
zrp0KS$_6tC+X@Kl<mg|ITd4FeeTrx{2u}=`kb;@s=R0$5@QX>rLfZ|WU}2}t`k&f9
z40GX-K0(_L%VT5(MzS?f4T^{S^!=Y3t-1#JKG=7FE)c_;Qa%s^ea_^YC4m9)JygPo
z1vC_A<CAB|J1JOg5kYNl*62+y+X(yCsVy)ESt{iNEuuj?+nMI4ohVusU!@Q^ju?-t
zVD2X$VuGvbWrZWDS~RMk>D0(u*gR`72D+WNc7Yyneg{z>%K#?vSG~4;@>uF$77v|T
zjmlo*Ci)Qf7xG9c4ZV(6Ir;6I+nO1E|7BvXJPuXC=-=(rn&pB%PlL325+6KfPm`;*
z=^>=#d;;XZ4W<7rjkA^w7dtQiSo`FfXD|hmA<AO^>6goxa70VnuGNrX82JFzHe>s`
zCMADVp%vt!4JT2>&sYFk&}R8PC;>CH1dh0@T+-VQ;~*ELHC;xTy1!+4$zuhBr>u$H
zt{xOBZX4I&e4mONviJ}w+FAX&X(L9&Nsz)Ke_|GDn|fc|eyZp>8oOMjNmV}993-8^
z%7LCt@_+{}+{Pp4Hx+-JS_HS2enqNj<o&c$1=)}``j8BKRFdqeDvdURY_9M~!DfHO
zyM1c)0dIjv_r*9tHEEtF3SZnEKo_yyVjs-<Kw`g}a`sQ%`r@y7VsGNZ5i)Y>&h@6g
zYXu*DBlE63e89_R>J3lMTt$+vB0ijS?%fqmCnC?KbvQ#$v!5$&Dq(3FEq{o&V-&w1
z@IiPFtF6H#(9?y}iAzf-0kY~jwdTOm8sB`-Yd{8u#)tIO0Sna{UQee&$Mse}L&Z5s
zrL$<93;>at5Z}Yxf)$zs)0KXlOhMxQ&^&ePL2rA9H7za?(##j>*QgROr0_qdJzr#p
zl`>`p%MF#cN*_V_qZan4a{Z^3uoO!U(acam9OJAfnngoq;IeTRDbG*a+3syQ<Vic2
z;zM_9JDL+ro`)xDJ02$3MltwCf>X~}i}yCIT1B(0p(E8mIhYaq+n{T<dHA&0QEg7^
zr_7P6r&hxztH8sWBK8f<;yc6pB;RI{!P5@qeOF>v?Zy?Z=-)zXu(_sfBk%}%u$tKI
zx3F39k-uBzSPH<Jmpc5%WIsY@|M?+eO6)^(u-00vTyB-k&3eOv`0gHBu`tr8CcUuV
zmVpH1xRalX{prn%ao`k@t+5DFbbawVuQT4_!>Q+D**Vmogk(+#N$nU5b!d3x4}V_s
zd!CB>2<L`<{hnH|M(hG~aEhfunltQhOk*Eb4~{p<3WuoKkFZ&XkOq{uQRSy^sqxLp
zKD_B?R>VH1$BW3r6a-s{;R=FX>wRNP+3}3}C{%j&ZQE`JN~tC4;r#lG@^8j}>D+!B
zb5Hx`-D52KgAzj;f3+D)g|T7&-jOW`hfa%t{BD)?c!P5oY-)0&pMT$5gPzvSO9}<5
z4ALF~h^eOU8j+Bfe>kUHcYloAfscpPYiuQdPTeP(#`vpMs~Oj%4ed$N+#E_l;Qxo!
z&r=n_{|GVQ%c^WGW>}jq@=n?P#pzpqLQA)ZLCag^#K$*vA>ft2c$)nA$qThkv5zWW
zQ`uO^5=XT#4}V7FBKZR*F<t_^-BBlfa%DZm9W_BOgrD%=SV4I5U)b;ne|}GATky4k
zbl}b1h_d__mU1<zcWjZ_JhsYZpZ+pE&hE5LkP4N`q-8&%;7}~0d?ppp0~izXG>sY}
z$3MRK%ZA)~RQlPm^&wSWAxau}D3N-J;ze@GE2KVEV(iAKWe;*A3f9TAVsAQ}h^L|G
zO?9D-wV?VS>p4*o>;=67ir7O%{7oKzzRKV_$~LqJ6E&ywH}2li)4)Qaw2A*Q_K10^
z%an8DO}<TZ>2kloe1Xs1TjssHY9UgrQb;<`A=}#Kr1bZ(a?Z&p<-n`>XY1=lH^HDh
z^@N)_e{WY==X?>)e#vP1JXMt=Ra|`_EUBa3kzb4XKj~VnQJyciM{*u!ey8E5?7ZZE
z2H27C)Fh9@CQj-1sz)js@aD%z$HX__1=b0#NxoY9n|I&!P(=4Nvzfceg!x?J@ZXGJ
z4@$OurPZHkdr`o(qF5eOI|E)wd41gnE|S|+hHii4?$UmvsDpZ~m7_oQpSHr6-Jd>h
zyYo)sG=6^ZvHLOlET^dKnJ0htO|OvgG<f;AX1(1g{G0l6<MX<tNEf*leZXcT9(#%3
z#~Y1x9#h_{p4?d%OUl7?1+Cd814iV$zMRPF#{w#YDGguLbF~VsNInZ@N`3Y+s~Nsr
z%V@l|G~CSMHpxF#f2e1Ku%4mq&D0{#(LRV%kyKAE6!E&LH3hHlTgMkUMV_^_%~{;8
zt~#iAZQ^R!lu`B{igmZ)30ZimTca`FjLJVAzbfJ_{}VgZn=2{>Xo5h5K$FFfyBsjH
zD%?+-(DhG0<=pIjDS2vQqBaXHhwbtTIgB+b<OtW@1UX3bMeFW=!7tRFg9aEu#DHR1
zd0AieNIj?8Dx$Efu%uXnH+s7%{te&&#_NmGb}-e_{?lM<lK9BSR?XgD%vg@EWsZb4
z)vGDpF9cEtn!3;tHFS_a);40PMGU{3*#iuzc=83*?8A}^wH!5abMqQ!j!L8G*iDqY
z68Lut(oF-)b!C}MzJrgG5AaTMbNKbQx{SFw)g#fdGr4IP+qjz+r3PZhCgrVF&#0;w
zonnsShOa2nBxG87j_QT#6<(XYvD>Z6cjA6A{DNQfzxn?@Bbq~RRgX0LMw<b~G(0bI
zs^FL-$IvPjeCA>P@LN>})uXtu%Hhv!(|WIQV=Ex^ATeGzq{C#x>b)n6?IXo2PSI<N
zzAFWq*I_%}R4ogeS|M8yp0Y@eKcC0ixP?2PtT>@QJgNI9ju`u&x&$rnsOfV_;a-gB
z<HF^l<*9MI^+NYuKQor08c7l|tOp7H;^Wo(3V&5rW;y2UHx_QE#TgQm>=5s=4&I7)
ziTMxC2F&n#YbZ|VP5gtq9U-p>|NY{}%|dG3i{qeYJXqT07TMyf5FqC>&eSjSDn)~s
z8eCM+m+&u?J9B{egq~xkiVPyJ+!00&iPvp)Rq{>b5N%sW<mgCEbHChCE#%e%+Tj*Y
zt+!Zhu5@&ac0a$?kakM_A>^g66IhnFDHdNr+r!er4!iZ_3mX$Z>_bSIv3ig|@Z6gX
zFMCYDH&JfO?)vVkfu!jF@mX*4+SNw=Z8Wfr8QU3uG~~+7|Gvy03$hhgEI2Yy<v4IB
z)(!ZltI<|ka~im@&i`4In#b0#As*S80ThFd_jO)nZe?m@PQ-5;_*;z#1KSJsA*Xw(
zq643iKaSP&2i`$mFo+&4{FsMq4zE4HQZ?nK9`-1r&g~j!d1mbK1{)mR$r7J!llT$Z
zBMpwx@hAEt5pQy30pIkzI)fZ)TU%)=^<UR92kON`5KUGVDp-!~<1d$HR@enJpkUBg
zL2uL)TG{{jvjZF9SmJM#Q(GJk8vFU>K+af_L0LNgP&eR;f!AFJxp-tC&6#BPFL=uL
ze$hs{4%RK3MWoYF(<GC}B<J^k-8$YSQOr^H{xx1|x&8V+Q8ypj9bl}cs*1Y4NaYO2
z9P`xQn!8%@{{(VM*P!#MLQCoNFD#Z{5Ol{U7%>13YQWz`@oM5|c?rRu5eEO&L+AR#
zf~*_f>=#H3wTSm5>WDn#oaCQ<xjg=D5(l_v<aJdU9clE%L`SVlnW(LN)4k`J8|~QZ
z)wogWleRPZ+IFlp-`l9=WTdHitm*jBuIU~YFoW~@-sd<S+u6wN0t%*aF<b5q=#kpw
zndGhW9<S)OIO5CjO{tcRMGa4l-`>Pw;`Qa#Nopw6aHx)MuJ!dC&dd2?;#w|PTIg+O
zi5Z)76&TLKxNo0&@&P|)=5=>fQ>nk;>7`d0HYh7h$GVNp<QfY!)H{|NaC?1P=WRp`
zH?rucmKrwdyLOj54BoB)%vgBcIhJ{z7MrR~>G6yLE%w$nIVXx^wV|ZRb4OLDx#?gN
z@8D4A-Bc>gfBz;9EAM;P?$zTRmBVuHvY$49ytrMMkL%R3&s_AfCvxdyZM0{un<r<I
zz^ux~;rE!|p2r@56^P*fr4M^oPucDot#pKpqt?RGTX|#u6yI{xT5T2lX}IQlXmrS$
zT~I`l^Vl!fcpR0gS_oXdmU_ARIiI_hDij-Ad7Qy?FHA#pnj6o~-FeE4P@8>e=#`Ym
z-#f;r{&xdS0B<ZTZsHpof1;w_+}@X1cG7EHC4@n38ryfJuOAD>v>37&vFnuh&bWWM
z;EA8!PHNqTlZ9v>B8ydX!xMR1U^N`B!~BV<f3`-~Yj64k!t~u>eLGc;36uT`g>D>&
zf7Ka!)GwXRsG2m^_})EzO{Yi!>t_IoO<We%Z?v9TRj!H64=r=`j3O4Rrn62QDi2PF
z&Q!QMm1*aG8@?G5gmA~#N$Ry;>3^ohzV*&JxLM`p>daXgin@L9ePpNex;uON*^%}4
z$IiYkuD>{Yd%83dcTO-Ca+)9AvN_TQ=?5crCMIqmMnrJ$FXCTqHj9!i{%)pP*%!63
z7fkjJioG<S4Oo<Jwu*XfC>&76p6WTz+_oE4;o72Oo!~3wovDDR3tP4jJ^sb)Dt!Lq
zC89dpx5{??z0T+L?YT$3mDRrR=ZC|JFWhI}sn+glIH+X+v54Wgxpz*ny*^uGkPEvi
zL+RHYLo4g5we^}th_hf>rSe(W7hRVNoo4yvCa!6Y5aZKQX)7LFFxTYdB1gkd7lLY~
z?6qneg+;DqE_BdZnDOZfDs7?|W)UJ_hBRWc5T#1?*D0%L%M=2FLE#gLbH<POrtj{$
zqeDn)btUSv`Q7KJ8%x?_G7V~!a+3_FL6R*b{90$uVftlU(^fW>wbmmn_Q`|Wp+(>Z
z#g`oIhE}<T5B{q35il6Q3g_K!8EP6gzv>)n+UI=A%;GCB7wLFua*^h}A5j9QQyz8C
z+<O>K^JM9!e@NicKaO%t5S8pWnHmS%XLJ9(v<UuXDAG0$6D*r7*hqoCx^MKTbrs@v
zmdfaE9hxd_Gzh;rIs214Z4nLTi+&3@I@^qOHpt$6<x_^G|FPY=>#@IWB*hbeL$$1}
zL?ToWAgb4(A@Ztg4e%9zyPON_+`W4EHHb~W#GF=P*}!04)Os0Qx2s%0(CP%fYu>qs
zLlJzZ0Z~_w)D!Hn)0<Bys0&*l_+aIVFL$7@qDOLsM6#k=V0nd&AB03W;rUR|cR`c;
zTuKV7@09=oGOR?_Wl*l&29Dd$@vM_SI-2fZBw7to^i~Ypi4n!tm)1cHYutXrVAU3l
zxi@nuDZC{+yZDp(n9YLb$2Wke#F1;!)ONC0%QuC<ja4HbHm5kRlFj;+*7aAmhv1`m
z`Hh|fBJ9QXM+oVDb%P;|l?}CC`m546wt5Adf1&msu3womz-KyquCrC#Cn}_A<F?g9
z#>_Yv_v^{kE=iniaboN8BzzN82OGY+Y_=pxca@e!C#Y$#P}NvdBZ#CO3qG(|-1oR4
z=8?fGh_%?bd^!I`mI3MjM_KQ6C+YL4=pIe)!KOumbg~uK0*ygTFQ#b-&zzSWRv-NM
zOP-%z#jvz&y0rBwL{Pvn!g-L-xdJ@Hd5<s5Zf;0J<d8zU&tsuold4_s%fCa%E%l1a
zWBH-QuUM&?WBq?mS<mwpg^*arh4<jXnzS^6we>#hVI0(bJR*j5d!J1iI@h^R0Gfi-
zwqsZT<yWyq2gV*c(Dk@a+fGl6rq3^c^Rq?lzCbW2tebxxb#uZ2n8qOrd8TI&RVC@2
ze5kVjw6IVsMIAcUcK(sO(`RQRaPREhz1>Y_Z9d{J*n|&O){JF?tQa3|b>HrfdE%<u
zOr$4cyH~WVJdz`RTev=ucpZ1(f{E2e`)5b|v4Lr;x%{QM+n?PC$o{Z!$-8auIBBd&
zx)AQ(e=A8KsW|K4uttsGamkqykgMB=A5*&$kg(>+=F202E1kXD%AdU2Jb3!Hg^YM~
zG?)uE(v*{cB2&P>M-)ISX-aokG71FJ(v<1Qa_1CRJN^K74VCnh1;jPq5yn;=2;&t?
z`cvJg`A0179rJG|8KW|Bf=PpLOM>;tR@u>`aSMQUIJ0d(e_3-Jv&%HGAKq>Sc22|a
zJW*x4WSY1<4<J~zELpk74d5&7ojQ>BOkJ^x!~f;Va&hr}mupGtD|@8@iI8$9ZOwR$
z$F)s!CUA%11WPYw$X38H^}AoNZ@^3PEI!U;m6z`GJOo`$L%pogQe_^DD%RkP45~bD
z%k4?k+MbA*JwjxOH7=rAB7iFb;~kD3Ov;?Men~Iop*`W%S?m3KtfA4`_=0o#?oR#h
zv2=gZSrC&!XmO)thoarXjU^Kr7I&|UjQO>X-aQOtK`*VS&DaJ{5RY@=h`HisAR+ia
zng88JQNk;K?-?=sHsa16>n~zF5-xo}f5F=`dB5aF%@69OQmN2iQRq3`U!^*9ek!=D
zSC;LU;bP%7+zbbLKs(9ScMnrMYkz{e=7Jt*dJ&eu41S6w9D&M`x|kdVhW3h44^Kkc
zU-3_Sdbiwh4T(%ubY9b|)V;drrTA2k|AL5!HG?hG2G>c-sDPIXdvphU98PH_5Y>_(
zVn_an1R2(p;ju8ew}(<j^@D%(5cbnF^hgDA?N}dh-j)jVGY9<wi90n!JRx88fjSP9
z4GQ@-U7_2y;Rbol$g=fLLh={w?U3DDWpijmyZL~A?KjQMW<;=ZozBi%X^BL8x#qy$
z=8%~`1(KS@rJrp*zm^?w03!*;RF0-yRkSJTl?rtA2xlJJo}=>(W3Wz8qS22se|fp<
zoV_SQ=Y$mkQM3a|uA0Z7?8R1b1)t7PlZ`jGh9{(fp$xmWzgH$B7CTS!7R5QMQ>kj+
zl(j2tmssyHe9u0quHGF%eh`PsZ6Fm{A(u`}zgX|8o_c=bv|H>4AFr~pN}!vDeo=y*
z>tbI(sGV*TEFq5?t`lVvqu^Y3@K^rqaS_qF_aca8!L{y8jFZmBtNf+%>oe2-Ob^1_
z&nTaHP?Ys!x5kvd?++x;t22N)r@cuY2FZ;zE71VZ%`Q6Y6ci130y@^4dHOvZfHvet
zqx+Af&}kg)vOxW*;QOvU!QH?!$;-}@o*y)H^Wbm)<}Vv9lL9l~qbYI$TfM1S%xt91
z*l+`=0KLGRqM?$E{yaK(x}TPQKknltf%&iiB%1TDMcWwPG)?Ju)rE&RU&ngK>>%R|
zhQC2~Q0vn{LG;4OLH>**)!`a!R1z9=8K3vX;sxJ*l`kPQq|{aS;L@p4?y7E)7H~0p
z=FKb;CPN;{;<|*hmQZJI_Xq=zC<8dAcfAo(d;t=WlbXf&Ub1B0#*SB<mG0kDv%mvX
zxaE;!g+9>rc@#T*S|mKO+B!<smzB*rid}hH6x4S{ZMMbYeF+HYz)k$fZWdK)_<5)h
zb3!`nbh4GzilW}MA!uXupsaEVbh6{D?OTSGs#@`_oJUtHfdDE-@dSqp#$o3C8m0}N
z8LMgBD>=v%DxS?Q12N70q}iduuA?^g<tx!zA!N-@l<5;|3U?ixEXIYqzpww)8E)ty
z-@o%yv}n{V%JDy`|G;n(8Y%Soz=mH7&jp+6%+$Wzsm;b9@wL5DDEWu+J#ahZ%!L(a
z=YxC0NBr^wz-Twuq}X01ql&0@u(M3qLxM^+mHao7{yhZhK?6Tw-sYQUYs(Gu_EwyY
zeVxrb&mV7}R9rtViWP6R1RoM<?=c!ziRgR?GUfoc-;GsjbS~h}ReZ;v3?<2*WR|T9
z_f}XIt%Fy$KqfRoSNpaIdd<T{zJk(0VQ*hT{_eg}`J3ZUMaXHvf2dni(_`+Nep{DT
zL=pUSZ-_><hdS23xcXNv5v?I891D#GIo?s!9FnYU2z$<FJ@TnjA`IM+RViX8G+O$L
zD;(op_FO4PP=;*!_eA+Q_oMwbG%^D=d;Bq4mCNGl^J0MKFLIw&wTC88_r{nFh@Fd-
z`W$#-gc}!VlTP2^n4gYUL`nhNm<v6o;3?$K0@MP(lQl-J@+ABWLr1eaZ>vfEilT7>
z!lmf3*~don?<$qr43<R*v=S{GJ?qi<*`iVM=v@}iFh`U9&=P-Q<{%(7zWb0JC))C?
z1v^CTL0-mgfb<SFG`>W!=~gnD@542jYu>e!VS|U1Cut{>d~lG^w8t%*?fOc=dOq~U
z<(wqVW}zvE34s2`$6Dn_6@~XRVNY-#r_xv-o@n=GmBj~eJOvklEUpk_&P-s|itTFF
z5+^X9afrM$-(Sk$?>C_j_F;waRy9`#-Lo;|@|^6yBF^`Gv{)-A_i6PSA4$MDI*gr^
zq5Ea|4%Ao$1-(=7yClxMLxa2Z*-fv5vFCtVvqOsiSZMSRik4U^-y-oldcfCu+mrf$
zT>Uxkj<DnAYp%Wh9X3K_dDXX9VRU{H#Ov_hgFnkHoNSLABb#;2_zzUh^qJ1?!k_`z
zzd}Me&H*o}v66lSYxi?(-Qeyjzsz2O?(V^;O~6l4&a}JzvMihvJ%sn|p`!opR6C}a
zGS<&UJO@#hy&6c#zCHhp1k`98^47H$gy8Jj?R5$Hn4IHA20rp&<(ztSoM1;&ei=5A
zN<*?o|4)HdKa<>^?{12>>7R@UNyoFcF9|O?#nk~4M9uqLPzBKtOd2zNZNoaL5JDal
zq7b`qx(Ca4QsBQ8ibY}lw$!RzEIpw6cTk|6lMv{Sr3H}NVbG7ikW$9KmjpBmx>|j)
zzKv2ob*VN#27n=Oi>Zb4kMw(k5HDliiEz?@(wPhvS$WVDzRb{FFO+2F2x{9Q6iID9
zcE*DHOJ|M0O=l7OE>nv};PaJl)w2i=#Owg7KDhm9HKs@XLx(@vflubI$^3#zv$r!z
zk0t-+{DAkge!Ci(KM=8>_?%)kn%FT<1Lv=Ps~NOR`)9B%_#KHzjNsj~ix&@Q*&=h1
zi~O?>Xv?p!#?94zkFl!l=P9Iz>+apO{;G6$UP-cE&;d&0t`B6UKTr>IjW3<Y?=7he
zl<n!)dPAeI+c<PHv8-_ZX~fO0B-M{ux)eY*Q42b`WR6_k55AeyZ^I8K0?D+MgP5G$
z2%lATRzT^)Jx*%(yF*c(`zLi#*(4{u>}$kUvo3jZ@`53j-inehS?v2z?26>)n}}b(
zd~5>PH@EgrasK?{<sR_RQ`dROnr1!My#?`YxXBVqD^fLDx0dz2L|`_HU^l<?g-;L4
z%3}X0=b_BY!P|{CNgbPZR>1lN%*U1>rWL-ua!}16M>pt<xS~?NG_fNx7P3fKCYf|z
z|4G7y4lC0X4r0?f`p^Ly;-q;=TsF{un}__Sy8&J}+|>LjozH~t>?}BiV-Nw+3-HA!
zJPuJVyWlhwCT#Zz1OfG>gCBDlj<{(^>jo1|i^xiZ)~02gX(n4?|0DlOv<pMZx`9i#
zK}>B+rMLVU7r6)CH)XK4-jC`q?X3DGFSszkoJ1ggh+Gswo$h~TX*qx1jrb$!HsLa^
zcaQYWS4_vc@wJ3Y{fC{0oI;)iPT}ou32DK&===ZrWV0v}n7Ob8KyHGdvn7)3pJ6Q(
zJBsW!DJoT|Umvx&HnZkNgz)W2Fh8zVg3hUAFpuG!=OrGu%=@m+i$E;T!=En_EQGm&
zsD7V1W<9#L7cdwD&P9j&9R+}>GJVBHpG|bliy;5emp#6Cp{2K@D-e4qzjJjOKX!5V
zuR;gN8wPo!T*3U~9j`Hpxs?PS3qHfVzb(+u-ZX^`bwSsTd%K5%uBrJx5tqBr3&k*c
z6B5a3QZ;SO!?De~+1Sy2gdWxIU(yUX85ULj<m>XZaF7O($s!?xRS4TnyVAo?UPo0+
zxJ6LCL)@<tBI;;00Buax)j{`TrjX+-M514xVQ3#$J4$_Y_IbS}OjS9M9X#9rOFwYe
z*<0>JgC4a#dwYz{ZJb7VB0I}9OF}!7re^FjyCj><(Lgc*eb>Ur-=gL(Tz;0^*V0ls
zlB%W^4q0&48PcS{5&cQEk}ML3VlM`Bs)hZBz;N+ks+#U#Moi2rmD{o|^mp1J*ag<P
zyNiKA*s=HP-zo(tKm_e;vi`q}56;^|UsT3jGLPo#y)6uPPn|4^kV%vz*qVp2Z@+SS
zmD!_#6>n;q*(RXv;|vQjIlN71AuApNq?45L@i5MIUg{6(lUkEPoka!7jkf@~fo^sT
z3~=<yVphiPZK~Pu$|(9?ML-sdxDs`i!m(@4W`vWU%u>W|UQV@TFm`bYOx__>lx6K8
zH#C^a00hl6KU#S}oxfwabh4yzf9|aUT$?vE?eZQh6;y%SC7edDx2Wn!jLqlKx0OP?
zWbOlqfV*dBtq*A8>{8$5J>nbM&1#jcdF2bIv$^7Av&h$J6c$@pH86mz$>`0)oN74%
z;$?H_AbKWGuq|jx10nZAx92Ah0tb}(4*ak`u8Y9EKY?dvcHWkSw5gsJl7uw42Qq%R
zomebJKs|rpoAoTrVGaaW*y-yNBe-SE%)yGm$uvqkQ<SZ>2P-~*9=IJfK@(D~jvmZ`
zns2eW+0et#khpOx(~YhLdC->D2Tp3Ilq*s%aOt7+rxI0Z#RH<OXSH1JppB<MN))HG
z#ei8p>!aKEhk%FdG(zj2Q!CVvi`T6BOMO+yPqm;c9#THiebit+bPrF}R4PdI<88$P
z86^IQvhA35&pA=P;xGiqYT7sN^puG08v9!EbdLlpZR6AK5f1fM)x0`+q6yEa$arMS
z0AQ#WeR98Md=-&v3R?`sj;PQ<O@5Nhv$WnxgCg%hPY)>6ZwsK<Y|fIa=GmrQL*A8}
zQ3`-d|Bdm6J=FApJa``9R3&IuH+O3{18xe&i3Z%9H5r*2M^>p)FnLb`M87)U6(O{0
zWG*ls-1th^xJlzCQ?--QO+bw;fK3TcOfH9j`X*69p|JvVuo_3m6Os-dE8rrnk1Rxg
zfTby`q5zWI5`{B169u5|!2k6oTsox7fr}hx7It|H`BIvB+jgv<yB&EAkPYKwK(Gn!
znpr?|zco`?V5p4`<U%75*-3Uwlr?vzj->(#z7yzx_3$JXPxk{~LG(V=q0WM<)lrAN
zp|$%)A8dghV>fsMaHO4+F<WS|nnoozmW&KZ@+Pc6y>8mXS&9I@Rla1O@a%(q$YzR1
zuz@f^&<{B!h4Q6OM!C=tPn_2&2^}M_#+Xl?lRjiV+w7MhQ8IUL_XvGLbMr;O;m2X&
zyVQ5(x0A!_l(EaB;h-V0T>+RKo+@anQ+z(T8hAX$SZ{_hr0hV1*229*T4A1+<W>ou
zd(15%vJe~Dx7RG*0g*{MSuPuC_60DLt$k+~v>v%YpQJ2vFX&?Wr#g^nfC|=Z)`s8H
z$^G$so-b$`SsQu>g`2rb6`i?~I-7umLZ+3x!b9{n?PjS$o3FutAJg#w<wa>~Hcklq
z{9$gX`e&5}8A@F|!5~H0$#4qBfJe!K=CYjpq?BuvL_Ap$2I5nijSoAETCSNP=SqHe
z1Wu{>w4IqCx_g;}x7z3FyIA~wgo0j4ft#Rjn#0Mz<D(EFK=qlJT13J_+T9XNARDos
zW1T;Q4g)gjd-mXR%5tYBo+ybmMcmuL<c>qi1lU~bwnE^1-iK4C3Fu26(8+pOjYW7k
zYw;|&9sCC|$k>gPeS3!OBXe;-5aF62`O$GXYe|nGbXrN|w!_*0vTWzgkRUwSSIR3&
zg}@RcDb&tYC!`a4^1J>d8DPC4?td0c{Cg*5_F8%iiW3Z(XH!>d3d}r91s9(!_f(k^
z)8x+i?t)HO_b3Hj1_=<RXM8ZZfqC%g*6n<(v3rV=^?;~%P_Uk!X8=-k*M*uY-YV?-
zzEYQ2<18N*@`UJMJ9!6$`j#%mamxSdv3zI6rlMJ)vWPkT>4FB0`RVY@OvB97qUrHW
zo#tWa(uxpO+2kXVfZTm*<3lnkAOYa+s#2K{aop%)?4GtPcDt(jSzE|2<2wb!*;(AQ
zlXaA4#n{DCnn0W}6Pc)cV?Yx4cn2H{9{sFi-veY2=$PF%N<)#SmP?Vy=~nPa@UVlZ
zoRa1*70tqeAB>HKkbineAQn#1NisVNsjfh}Nsv_YOd@^^P?UQTKd+!DU&XPspZQzI
zbtKyNY<0pCy-6zl_b8ptC~}pdGrM36giAl)WRFp~tC{f0<10w0KMz&4qaC9Q0fT)K
zn@=RCb)X+iGZa%NW8!><I;F`TThM$CC>Z@Y3#8d~j(oV#sw@jM01HzKb88;mgYTG4
z<i{FyYfTKVbKR!Sf&Si-WB>2{g;(Lh*uJ&Z${$)Ykz(Wzr*T$_pB`#OEseQmIZM7W
zAD@~m83lRzylf&f1v^|}=mk88Jzs|Q&9luUDN2#(hXL1rDO|cREY>xP?U!jE9Z7b{
zubM+;aHsSan)&^cxL_l2Qxz+eZ*NgLTRoWhag92PJmT%Wi4@m8RyL}ph>nSK-TlRk
z&0t1v**Bm*AxXOy>^n(%BMK12yARMtL6m2gS1`=wm7VTV3v3;Dtv^NooI#_(<=97o
zxaD0s?jG%_(=u?5a!a8D?9+Zt?-++3)2EQv2FN;<J=fKg#k-udo`VEHOR&NZ-6PNU
zE~qruUX-Q|&9m>*f7ipzJD)8rvntiN2jg768B0X+AeCmm(-%5IEoAj!&4{2L$Ys?b
z`(4lwJ`E)jPD@n*D@*y{ab^U0lsQo>wvGF%jQzuWG8W1L#i3i;JtApHDreq^?h~*(
zg7MYr7DiG&3!4kNZzRJ)_lc+3O6>sN9Y0fvKRJ2m@C-BfPe&T~$Q*sm*{Tu31PwMu
zTS`noiZwle>txEEPYdemi0(yY6Xyq53JLTz)J&X}hLz1*kqm1`BQOlkd6$j}%N#!q
zk$qUpX>y!Slj*3`tSm2R=0d<8f)i<0u0@_{emnz=i`~RKOkAo=_7zn$FDJhJ0Crou
z9*qp3>yxws0e0XG`{o(y{}O2f?%tBSnMlEiTGy%rxvxc*Q%;n23_IE#adCmZ>AD>P
z)1G?siTqj{*I%<Y$VOi!I4O{;SdwxIns=nBqSCGS{VW{|)BI9z9?=Mp?!4=$xRt12
z%a}hkQc>^Z!orsc4T?J;MbQBU4>~1oJ$c|lroJ=vYg9Q4-DVS;Kd$aS_UQ}K_N{Al
zGsf+IV;F+;Zm=y4=}P&cp9+yQEjTO{^*lz1$r>*2>_k<w^)b*+WjhM}t@(zreY};{
zkLT`S&^5gI`U#P~3fjvIT9`kdhu*vG`=s)IsgCkpDS#eRn@s6CJiRJK*P3j+`ZkvN
zmv!>FReRUxkiMWjzdVop$FJxkOVGhLPKc1dmmO=p8BA?fpBAxX4X!^r(or7g$pI)V
z)4cggYC{Kit2l}dl0F@ih*j!Cb29$CfB|O2$R~A182^eBhP+Af`~SIBTVxqukL5>H
zc_f;B)R?RrjN8yYx&KW`TDwqM`blud3k-{7-_xjN-nD~Y&1Ic0p73|}0dAlO<4ePJ
z%cO@3BYUtH6iY)tcbu-rwLQQ7sg)UvvQ4{c>Tg&ZWoVv4!-~thisEZxPqRD^Cb`L;
z3Z3`e95G3d?K{a{w%w?b4j&C+(F6udjq7B`lSW@p%kqDaTFdX^W8{u?2Dcg}_*a_U
zove|6nn&NA>lqbUbrKy!)ICI#0C!MFzTH$fHY3h$ouq<PGh0Kv@}ze<#^+%9V)ctG
z5QG%@Vq^|&DDZdrGHvedpSg?18UL==L?fgT4q244p)`M$@B<R~f8TVPnvD(J^@HWS
zFf`=_c+$PgqK0pJ4>bOp2b_>0U-m6?7qVJ9{4r3E8UCi)m<(~*unj$cBwe2jKs75Z
zwa${Su+p&(c<)Iw2p454Mq!Y^y6he6QzjitZ-YmI&7rYJUf;i*()VHkf8>b9lNLRQ
z;i;>Lomfv?e7#>qvB7%D>s!&)3G`3NzxH3Z?u<V29BIS1ivH{PBjAQNW}n-8E~$0@
z>Epy_0`{VbHh0q^7wAVf`{pi@FSPsV|HA=pDG=ifZ=7_yH>#xPP$l@1xG0Ba)qf7f
z-X+sz&nQwj<=jTsy+s8ci6LeLiEsjqx*-Y9peq4Z|9iefw>rDDotHv0&_dl)89to%
z`6S?2;tMBEE=Ip=VrMW!6Eu6|g@_{3__tB=tEHkYotaLB0l_|9>h$mBVz)(6;i<v@
zUT`UqeitEzO=>fK8Fw9Cd+J)%G&l}VB?oj=H)Dv4%mU{ByX%4)c)NV*w+D%$-}>!q
zrgm@5^V(;Ni)g^l`E)$DT7nV_Lwca_S2l!1<KKWxvr>^V>pG4~cFknHode8e<nkfL
z44Dj<=+Sk|w8H}N?w9n}H^T{r^iFFusywMaGAwn_`L_qtNBgO`5tdM6Sd`1OifA5g
zkh~4>tK!~<D>n(Wb<C}|wyUdF$2+7bCs{`R>EXDiCvoxC7^6t3$cV2#J~JoiJvNC`
zziC%0q_0+eeVR#Au*PAh5KXBx`>-03X(^<}Y8ICpB#fF!r+M5fUj#h}$f@!wcf5BA
za}mpS$bI#;{{OUh?f*>n|9?`bL|52E4)?XYNNXff(zNWN`XD2RG&xI3&NZ?uDVHv+
zNw+9xaw>-#CFypW_;e#<Qt6h~X_B&%n8Utr_v7;?e1B}eY`eC{>-{>tU)OVczYf~>
zM3S_>qs<<+?#z7iW-#xdvj=@D`+P5iJLmYpF77(F;wx<itgx0CmE!(+q_Q|O`pB4|
zeox4mh0jq3jxJY<=(Ngmat`-8>Os|s2M5r0<hkdb&3`LT`yO>S5>S8ET?((6q2#>p
zaXq=3eVDK-<fK{)rKb5<EJgXAq@sUh#a=)iBL3K6$2xgGCfntB+(ZG1lC_C<&R8!~
zI^{D_S&}9l;kl)5^1U<pLbeHS<etd|lb6PK{HSjEnf=ruf*Z9MlUSWIp!i{YzT4hC
zbCwd)fU5;p16FF)&YUwmANp!&_KqXXG(tY9HS}$0C2Ou_cew?(EF3-}4RSFbV;L{>
zDSmFeJ;!p+s+wDs-2gaRM|AwtOmF-YcdMVdR&eul@PXjQyAyZZ#!}nJ!*3hV&jChH
z4*aHT_zaXDuIh7f%gZC&qO@F!>@eDUXCu{X$Bl&z(S>slDARKq-CNtA$C|vaQfgV&
zEuV^S_~;Nb9~Gw&?bhl&8jk(0{^hneZ=K>?)Rt?b3BG?WW4~Xx$Rzac#wm7HzkX;K
zd1a-RPtT*Rl?5HK%rk$OcvT`a)`W-mmNVX)bT6!)*V-#5!@9T@H{9s1@n>DCeP$v1
z(!x8cb?=F$$2-8likzYOHqh{<wD(k;CP_b6S?Q0q8R-!NXTc$b>x1lPJ+4P*r((Z&
z0g+XRi&tvneyn#KA1X;adODJC+UTC+|4n+|`L4??G<_&UP?7%TRnE@Q2dBN8<v*p+
z{l*H8+HPxiI9Fl(2-{8#S=r!qmY7I&GF2a)xutW$CAZ)VExYPzLD_cyLrk!MD)D6Q
z`-jr~e~i~hQhFLCu~i?Pjx<lRBQ`91Zs+OX+(Pqzt{RSSj&E$Al4p3%OAka3-#+bb
zaME1wt2;}=#}_Y7Zm?XG=7D3Q9$)s8v^(7v`^pFP&O_yQ$`{7{&TXCc`0Eu|NR7B4
zqiOcCnFZbTYX+lc(jGJ)3h+Fq6a3wUFQEP@`^lw|X&eWBY=8=^&#O(9vcN!$=7v~5
zZJBlt0MaH`<II}tWTQtxbAtOV%HS_d<{D?$pwK`NX%>udA-K8=+OiXI;J_JMz$tHr
z`(3=xxhgV2!ENnbEH@~xVm!d2oH7g;!4uEc-J88R_(LioOZOSh82rPs(CZzdOJp0Y
z6Rq0IPZyuG`qHYsFG-k(=Z;&%ca3hp^><O-PJ^jvBgKow7ek~Y8ML{D6}ZU3dcV<%
zBN39{pDb=m=x}^lr*^S2KGMG4&|v8JXM?BG7J0tL{Uki(x0GW@Ai95Y&sa=p9{W-3
z{6(S`fJDUJmqwlRGO5*z0CVEa3rXyTIzi%!6decq%UQQ>N3F=8-fHxay4IB7t+Mc`
zN^+{gb<R0$6wp#9I{oa`8_ePkE;KE}dwd-DS*<itWgVmEQb~{*uFCB1P-%HT+<i+%
z@YhaRY`!h;&Y|WWpOx>_vq7;n7y@I#BE^AP-enYmw&fj<m$j6t?=D(fl>VA0<*LMg
zaz5{R^uNA29$<P!TLDOs`fsaOxKw|)O4quXiuokow>3w`pMf#T_4c9Vx&J^RgFEg%
z3<XTBCk`~M8CiTbK09h%@uha-RHgiDCOcwv8EH7iy=DDTMvoLN`?#2RXuia0XnN`|
z4)x~{&fjtp<Y0*x9B!I^GxPNO(m0ZM)Z-qYra_FHh?rw}Wb}uJjJzyr8hP}73Uj@C
zt^!OwSU;UHU-=3o4p+@)o|f`!?@I#`J)PPwj;<d*yCdZ0UTaC;80*OWVT?DoSRehi
zfHl;uL|eUd2CqpxI^opO{uLy?r7cwWjc@%vKFnRG6~r>5y{(eSOx*o|%-3;(n^Jz>
z&5Zo0QaBL|>dh_<KMI-~m5*3V>Ir6@TiyIZZs_~@99;@JB%w$z4BULb#P0^;Vs6~a
zsCyOnTTKW5Ibe47Nb}F~QnJ*0XwF&E>dd(IbKnH)(M?w1g_9vAB`+S%|LF8EJegam
zkbUTW|Hj3(yCH@w9r>lWt3{l*Dvx?JNDdi`j2t{I9gMpgt8+l()5ye>+<ghrbIO^&
z9j(@?YQ+b{CM`}Ok{YuB(M48ZcHF@61@_|8Zwn*i1ATMD)nz?`q<2ekQ=2&4H&-8s
zh^8Md4oU8oJR8&u2&oTto%0yWu}Ntbd8EyGG>4@4&1RmLnE&^O<zKi6yPWWR7sRzb
zG&`;~IK*jqAylb1<eHRAF*ju80g|=)GNUR|Dabhi<E~Y&0K5$zG7UHd9veL4aLUq|
zrB680|4oq4%t`;Mj^#jwJVuHxAK%A#ur>g_-*vq>C=LqXa>RITvY0u8K}@L$l8AMT
zH6d3lo~rTOVk}NT-a;{j0zV^9!43@MNss{-znmV{ht?`<`+4%*v(<AIFv?ovKuqIi
zWjb23^3fW!IyO+u#GLz0_yo&9TmNm^@DP0vqNDXAhEq{6Dae|OCs4y~iwW9L5Y7Fo
z&dW^$Ja_4>Pixdn6OhEhv8*iknW1eX&25Aud{Ts5vF1QNr<-L*`S{0<TIQ(+aL;dP
z2H@IOo4i-%@Y}i--Da9HHTarTJ8c+<y-f2OwYZCk`HmV>Z(5bZulycb%{HSos<S!X
zHTc}#?`tp-=9>BTE#xiwP8X6ambitOO+cC^pQ%OooxH92Wgf%WtwTr(+g7ZMR)5`}
zy&p?!`a1z>hs75GUtH#T$h-3~*<T4XJ4)cAbsWBqJo@LkzL$YaEQ_0r-0>)7!DL4c
zm5=vg5g{KXzY|b67s#?lo#8{;RULiZ2CZjyh{Sk;&26zcJh-rl83%=PYy@ZnO9MKK
zK2S(05#!f8*4{J+Un=L=`a)ha{SZEIvLKPhpsdlL?FFLBYF7Q0SDJD&1M;113>b@k
z%yW<1-u;z;*35MX#c0ibzK~>nxg(6ATohNxb4zAOXl_Nv5_yb|odb{I_Wty*P`Ei~
zKbEq}!XB+|Xg`yTTo8ac;up(ol99?H8)mZ}&&@Qqe;a;Nf(^|**E$6znM6+lS5b|z
zhC7o4MF{BA4U_%*v$*)pc4laebumnm1X{yy_liEz7~X<>0R{drVWXxp2Ki*^^-YQ}
zW$@2$YkG`%Spk_|CK3}i<AKqWVKG5}3Q(J3X#f`OifBN(<(l5LO~(KS%*VjmCPhd_
z!ePHSw0cTB!o`~vc@)kg91SFlu=xiO3Qu41VhoUY;z$&d=ws@b^8PmXor!>nd1_e1
zOd%;bi8euGSkRSv+t)t-3HqR*d@lpZ&^Z_zwVcK%+G~*)iB#Rju8GFc`qy>`A(*68
zbZAu(@>DVOih~G)ieWN6G8suMI<~|N^9N82mq|Nv(K=H|_7*EAns3AJAc_`*B!@R)
zC1^cm_rM+tu$g*B{g8@m^`_;(yL_i&k-`q)DSHAGBtBa*4wzlJq#z*c3QhijvSi?D
z2N5B8-{vGfp7<2x!?mXt_Q-6*D`9*g*e>cbbug*lNDT^42Ac2c&w)o9Y$IXv9(|TP
zkI~8Z*{lQk_Uln!0}s))yzH}4ZL$GNp$fpZmxd7Xr(Q9`<lq*TrTOpfTi!r;V^Mga
z_8!3SY+VgOo;q?|k18Yuo$=83ehNicfO2jlro;s460smFA=x5QBe@hy_1j;qW_=iG
zziwZ4i7(uGY`dlchSQ;o&L{DK0VmWkrF`*i;A*CN`?lc~ON=cusdT*Rq{Ud`-sjks
z_$dodp4*7wkInN)mxbUAuqD<Hx4yhNVX_8Y3SDxVLn4Wx3LtDEFb3`HxoC|#GaCwr
zl0oQkn87sph5NC~{pn(Yj#Fxi0w1rD;1+eF2d!=-r*7fX3A(53laVrEnZ{0Fu}?`)
zVrYzZRPf3GxTkTUQsnDZXtnf2j=TYh0uP;u&Phw;9hsWRE{#=0Ym*ZT`;wsJD-KfN
z;;=A$w8Ue(l>saqw9%u7cJdhRrPTzw$Pej_>@j#C$Hkv`^@$EddoIzEJ9}dWOF5|C
zP!7KlfK)il*+$e(hTn)MIUi|mrn`L0w4f7jGgL%mxaG#f_Dm3Bi~P;ucbgKBZtHw;
zz8JsRzEp&%g1zNv@~;-;HD3_&>%@3V>~RkKrVeZ=nuJE>;<Y*2lpMId!)cF}aI4E>
zr?bYvRxs(j_?rktAGD2rCnxGaVe@9+cN;)>ZB)FIq7Jl>*YLg$NfZV)G(^hXLu;>F
zd42Z>(M_FYUJ8y+)}kye5Bjog_<{f(+edc2XstdvZ-0B14y<`bxo{QQp#R)I=+xQk
z$;R-T>J!QFBk-H@!c6L6w;9ZB!X|H;0>9Vww?J;_lTG&c3dveJ*5MnqK?{K}2j3H&
zfmn!bIWSx5z?sS83^y?!|FGYr9W3(Zz&#ce)bKtae?SKc6dQBw{gA{I*dDD>cnk|Z
z*-kPsRnC{F?MorKF^n2UAg-b@idQ^d+A0c~ujM%&CP>O56<_G2e2y{{`ks@jvY+S1
zv7`&4ERd%Mm6+cmk+KoR-94Z%zOCLk!=!X41s0agU1}FKA<ft6C4pG#$9~I((x?f@
zS4DIxRI(oO+0~QZHX{PFDy)mPy)uBG5)>ZEgMj6E+k4t;EzZvlH#BcMob18D>B=a7
zB+6gt!am&+G<4xeGB3)kl`Hnj&=vaxULx#^GPdL6q>S0Sw9~7u;nsN}(n=XsL}HmY
zKi(6su<o*k-F}yAIMuZ&oBmKMFdR6oWwSFk`V{W4tgK_MD_apqW#3>RlBa|wrY>6~
z$NtZy+0bQdMHy9@m5cDg1xX6Ck1F%;`!EUv*C%VMz*a=DY4ov)-0$s%YU~ZTi_3In
zRn=VCMlu%?+TsfgU(Iu0x2s;=*jBZMy?0*=io3MpKkR&?wyR+Ie`MlcUA<b4dv3<&
z>O$cwMnjdjHC=6)5$m|gt#rbd7G*T{e_60Nxfa)WUC<hppnGg>fEIL<=J^1(4wnnA
zWwaOJ*5VSut0IF*UXkCfs_lW;bW8lQ7L7?7E<|6K-6yw1CbvpmfHp_Uu9atRlQEXN
zoc`Qg;QtnfzlJ+4lNVS#(i067&W+iiV}n*xOiT^qg{1Wm#IkWK#pE5yo4`%xVRx-=
zEYjZL@REpRKwd9A4jHjv64k0K{w?IgJ=TXl*xxuBi)0kBU|rxWD>X-=^u_aC7-xTz
zaW7hZSEsimqEJXyo{9;vYC<~ItTfECg(L$*LITpYYvA;$hdTlFMHTzzu|ah#)gZM|
z0gbL9>_nA}O-x~4OrCy<nWIEV+TFLXE@rHNv<j;?Zn8uh{MMExSvqlm#x{K0Va8du
z++7K6rr>PZX(4J=yUy-iS$kP-QoF`{l*dT$hQiXny))0*MJo5Fxu>P89=fn)&GAg7
zYdNdY`qtEO^Gx-jo3k~6A1dMT4q{H8vVIpsfYx{IOQ2q@@3BoNx!2~imDzfO1=Z9X
zlmqwd<Q^lDBP?{1YN`HA&+GiU_;T}$K`89I$>SE^tp1G(!)9?%u*C9cZ(kAeN3uSj
zz*Iaa`#aocdG4PJ9#^*RJnCs_@BD?Wbq#k)c3s~d3jD($Ug%SH9SToy%iI9!B%|vb
z8Y4>QBas{Q;nn$Ef(|Ej!dgeJI~Hk;v`A7v?}v1zX!2~43K9Pp2!^hl!X~@J$VL5N
zd8aKr##w&hj^+R6;jPjf3z01p2+ZO30UBb0R0V&C;-|;@kR0JaK4G)=)Q$p@<{_(O
zYzAXgmTpipQ?X$nS7J9ux+gjrHX-e)oqa(Ckv=4PTNn3O2{9Kmm+Iu1>)4*-xor>_
zU-gMaIz)ZnHw(%1Hj&V$+W_u7GRgm2u$u;^PU?3r^Ao?H!zxQ<!qsI-TPg4AkQ<I`
zx}QSfX+@POIRR+nWXOxUaNsn*;Po$f{R>|Ig4e&`^)Gn+3ts<%*T3NPFL?b6UjM(r
H>-+x)v@sC{

literal 0
HcmV?d00001

diff --git a/tutorial/robot/pioneer/CMakeLists.txt b/tutorial/robot/pioneer/CMakeLists.txt
index 342717b4..321f5e2e 100644
--- a/tutorial/robot/pioneer/CMakeLists.txt
+++ b/tutorial/robot/pioneer/CMakeLists.txt
@@ -3,11 +3,14 @@ project(tutorial-robot)
 cmake_minimum_required(VERSION 2.6)
 
 find_package(VISP REQUIRED)
-if(VISP_FOUND)
-  include(${VISP_USE_FILE})
-endif(VISP_FOUND)
-
-# build the examples
-add_executable(tutorial-pioneer-robot tutorial-pioneer-robot.cpp)
-add_executable(tutorial-simu-pioneer tutorial-simu-pioneer.cpp)
-add_executable(tutorial-simu-pioneer-pan tutorial-simu-pioneer-pan.cpp)
+
+set(tutorial_cpp
+  tutorial-pioneer-robot.cpp
+  tutorial-simu-pioneer.cpp
+  tutorial-simu-pioneer-continuous-gain-constant.cpp
+  tutorial-simu-pioneer-continuous-gain-adaptive.cpp
+  tutorial-simu-pioneer-pan.cpp)
+
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
diff --git a/tutorial/robot/pioneer/tutorial-pioneer-robot.cpp b/tutorial/robot/pioneer/tutorial-pioneer-robot.cpp
index 91c3ec57..40c10084 100644
--- a/tutorial/robot/pioneer/tutorial-pioneer-robot.cpp
+++ b/tutorial/robot/pioneer/tutorial-pioneer-robot.cpp
@@ -5,35 +5,40 @@
 int main()
 {
 #ifdef VISP_HAVE_PIONEER
-  ArArgumentBuilder args;
-  args.add("-rp");
-#ifdef UNIX
-  args.add("/dev/ttyUSB0");
+  try {
+    ArArgumentBuilder args;
+    args.add("-rp");
+#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
+    args.add("/dev/ttyUSB0");
 #else
-  args.add("COM3");
+    args.add("COM3");
 #endif
 
-  ArSimpleConnector conn(&args);
+    ArSimpleConnector conn(&args);
 
-  vpRobotPioneer robot;
+    vpRobotPioneer robot;
 
-  if (!conn.connectRobot(&robot))
-    return -1;
+    if (!conn.connectRobot(&robot))
+      return -1;
 
-  robot.useSonar(false);
-  vpTime::wait(2000);
+    robot.useSonar(false);
+    vpTime::wait(2000);
 
-  vpColVector v(2);
-  v = 0;
-  v[0] = 0.10; // Translational velocity in m/s
-  robot.setVelocity(vpRobot::REFERENCE_FRAME, v);
+    vpColVector v(2);
+    v = 0;
+    v[0] = 0.10; // Translational velocity in m/s
+    robot.setVelocity(vpRobot::REFERENCE_FRAME, v);
 
-  vpTime::wait(1000);
-  vpColVector v_mes = robot.getVelocity(vpRobot::REFERENCE_FRAME);
-  std::cout << "Measured vel: " << v_mes.t() << std::endl;
-  vpTime::wait(1000);
+    vpTime::wait(1000);
+    vpColVector v_mes = robot.getVelocity(vpRobot::REFERENCE_FRAME);
+    std::cout << "Measured vel: " << v_mes.t() << std::endl;
+    vpTime::wait(1000);
 
-  robot.stopRunning();
-  robot.waitForRunExit();
+    robot.stopRunning();
+    robot.waitForRunExit();
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
 #endif
 }
diff --git a/tutorial/robot/pioneer/tutorial-simu-pioneer-continuous-gain-adaptive.cpp b/tutorial/robot/pioneer/tutorial-simu-pioneer-continuous-gain-adaptive.cpp
new file mode 100644
index 00000000..cfd27088
--- /dev/null
+++ b/tutorial/robot/pioneer/tutorial-simu-pioneer-continuous-gain-adaptive.cpp
@@ -0,0 +1,148 @@
+/*!
+  \example tutorial-simu-pioneer-continuous-gain-adaptive.cpp
+
+  Example that shows how to simulate a visual servoing on a Pioneer mobile robot equipped with a camera.
+  The current visual features that are used are s = (x, log(Z/Z*)). The desired one are s* = (x*, 0), with:
+  - x the abscisse of the point measured at each iteration
+  - x* the desired abscisse position of the point (x* = 0)
+  - Z the depth of the point measured at each iteration
+  - Z* the desired depth of the point equal to the initial one.
+
+  The degrees of freedom that are controlled are (vx, wz), where wz is the rotational velocity
+  and vx the translational velocity of the mobile platform at point M located at the middle
+  between the two wheels.
+
+  The feature x allows to control wy, while log(Z/Z*) allows to control vz.
+
+  */
+#include <iostream>
+
+#include <visp/vpFeatureBuilder.h>
+#include <visp/vpFeatureDepth.h>
+#include <visp/vpFeaturePoint.h>
+#include <visp/vpHomogeneousMatrix.h>
+#include <visp/vpPlot.h>
+#include <visp/vpServo.h>
+#include <visp/vpSimulatorPioneer.h>
+#include <visp/vpVelocityTwistMatrix.h>
+
+int main()
+{
+  try {
+    vpHomogeneousMatrix cdMo;
+    cdMo[1][3] = 1.2;
+    cdMo[2][3] = 0.5;
+
+    vpHomogeneousMatrix cMo;
+    cMo[0][3] = 0.3;
+    cMo[1][3] = cdMo[1][3];
+    cMo[2][3] = 1.;
+    vpRotationMatrix cRo(0, atan2( cMo[0][3], cMo[1][3]), 0);
+    cMo.insert(cRo);
+
+    vpSimulatorPioneer robot ;
+    robot.setSamplingTime(0.04);
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc);
+    wMo = wMc * cMo;
+
+    vpPoint point;
+    point.setWorldCoordinates(0,0,0);
+    point.track(cMo);
+
+    vpServo task;
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe);
+    task.setInteractionMatrixType(vpServo::DESIRED, vpServo::PSEUDO_INVERSE);
+    task.setLambda(2, 0.2, 10);
+    vpVelocityTwistMatrix cVe;
+    cVe = robot.get_cVe();
+    task.set_cVe(cVe);
+
+    vpMatrix eJe;
+    robot.get_eJe(eJe);
+    task.set_eJe(eJe);
+
+    vpFeaturePoint s_x, s_xd;
+    vpFeatureBuilder::create(s_x, point);
+    s_xd.buildFrom(0, 0, cdMo[2][3]);
+    task.addFeature(s_x, s_xd, vpFeaturePoint::selectX());
+
+    vpFeatureDepth s_Z, s_Zd;
+    double Z = point.get_Z();
+    double Zd = cdMo[2][3];
+    s_Z.buildFrom(s_x.get_x(), s_x.get_y(), Z, log(Z/Zd));
+    s_Zd.buildFrom(0, 0, Zd, 0);
+    task.addFeature(s_Z, s_Zd);
+
+#ifdef VISP_HAVE_DISPLAY
+    // Create a window (800 by 500) at position (400, 10) with 3 graphics
+    vpPlot graph(3, 800, 500, 400, 10, "Curves...");
+
+    // Init the curve plotter
+    graph.initGraph(0,2);
+    graph.initGraph(1,2);
+    graph.initGraph(2,1);
+    graph.setTitle(0, "Velocities");
+    graph.setTitle(1, "Error s-s*");
+    graph.setTitle(2, "Depth");
+    graph.setLegend(0, 0, "vx");
+    graph.setLegend(0, 1, "wz");
+    graph.setLegend(1, 0, "x");
+    graph.setLegend(1, 1, "log(Z/Z*)");
+    graph.setLegend(2, 0, "Z");
+#endif
+
+    int iter = 0;
+    for (; ;)
+    {
+      robot.getPosition(wMc) ;
+      cMo = wMc.inverse() * wMo;
+
+      point.track(cMo);
+
+      vpFeatureBuilder::create(s_x, point);
+
+      Z = point.get_Z() ;
+      s_Z.buildFrom(s_x.get_x(), s_x.get_y(), Z, log(Z/Zd)) ;
+
+      robot.get_cVe(cVe);
+      task.set_cVe(cVe);
+      robot.get_eJe(eJe);
+      task.set_eJe(eJe);
+
+      vpColVector v = task.computeControlLaw(iter*robot.getSamplingTime());
+      robot.setVelocity(vpRobot::ARTICULAR_FRAME, v);
+
+#ifdef VISP_HAVE_DISPLAY
+      graph.plot(0, iter, v); // plot velocities applied to the robot
+      graph.plot(1, iter, task.getError()); // plot error vector
+      graph.plot(2, 0, iter, Z); // plot the depth
+#endif
+
+      iter ++;
+
+      if (task.getError().sumSquare() < 0.0001) {
+        std::cout << "Reached a small error. We stop the loop... " << std::endl;
+        break;
+      }
+    }
+#ifdef VISP_HAVE_DISPLAY
+    graph.saveData(0, "./v2.dat");
+    graph.saveData(1, "./error2.dat");
+
+    const char *legend = "Click to quit...";
+    vpDisplay::displayCharString(graph.I, (int)graph.I.getHeight()-60, (int)graph.I.getWidth()-150, legend, vpColor::red);
+    vpDisplay::flush(graph.I);
+    vpDisplay::getClick(graph.I);
+#endif
+
+
+    // Kill the servo task
+    task.print() ;
+    task.kill();
+
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
+}
diff --git a/tutorial/robot/pioneer/tutorial-simu-pioneer-continuous-gain-constant.cpp b/tutorial/robot/pioneer/tutorial-simu-pioneer-continuous-gain-constant.cpp
new file mode 100644
index 00000000..bfe5484d
--- /dev/null
+++ b/tutorial/robot/pioneer/tutorial-simu-pioneer-continuous-gain-constant.cpp
@@ -0,0 +1,148 @@
+/*!
+  \example tutorial-simu-pioneer-continuous-gain-constant.cpp
+
+  Example that shows how to simulate a visual servoing on a Pioneer mobile robot equipped with a camera.
+  The current visual features that are used are s = (x, log(Z/Z*)). The desired one are s* = (x*, 0), with:
+  - x the abscisse of the point measured at each iteration
+  - x* the desired abscisse position of the point (x* = 0)
+  - Z the depth of the point measured at each iteration
+  - Z* the desired depth of the point equal to the initial one.
+
+  The degrees of freedom that are controlled are (vx, wz), where wz is the rotational velocity
+  and vx the translational velocity of the mobile platform at point M located at the middle
+  between the two wheels.
+
+  The feature x allows to control wy, while log(Z/Z*) allows to control vz.
+
+  */
+#include <iostream>
+
+#include <visp/vpFeatureBuilder.h>
+#include <visp/vpFeatureDepth.h>
+#include <visp/vpFeaturePoint.h>
+#include <visp/vpHomogeneousMatrix.h>
+#include <visp/vpPlot.h>
+#include <visp/vpServo.h>
+#include <visp/vpSimulatorPioneer.h>
+#include <visp/vpVelocityTwistMatrix.h>
+
+int main()
+{
+  try {
+    vpHomogeneousMatrix cdMo;
+    cdMo[1][3] = 1.2;
+    cdMo[2][3] = 0.5;
+
+    vpHomogeneousMatrix cMo;
+    cMo[0][3] = 0.3;
+    cMo[1][3] = cdMo[1][3];
+    cMo[2][3] = 1.;
+    vpRotationMatrix cRo(0, atan2( cMo[0][3], cMo[1][3]), 0);
+    cMo.insert(cRo);
+
+    vpSimulatorPioneer robot ;
+    robot.setSamplingTime(0.04);
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc);
+    wMo = wMc * cMo;
+
+    vpPoint point;
+    point.setWorldCoordinates(0,0,0);
+    point.track(cMo);
+
+    vpServo task;
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe);
+    task.setInteractionMatrixType(vpServo::DESIRED, vpServo::PSEUDO_INVERSE);
+    task.setLambda(0.2);
+    vpVelocityTwistMatrix cVe;
+    cVe = robot.get_cVe();
+    task.set_cVe(cVe);
+
+    vpMatrix eJe;
+    robot.get_eJe(eJe);
+    task.set_eJe(eJe);
+
+    vpFeaturePoint s_x, s_xd;
+    vpFeatureBuilder::create(s_x, point);
+    s_xd.buildFrom(0, 0, cdMo[2][3]);
+    task.addFeature(s_x, s_xd, vpFeaturePoint::selectX());
+
+    vpFeatureDepth s_Z, s_Zd;
+    double Z = point.get_Z();
+    double Zd = cdMo[2][3];
+    s_Z.buildFrom(s_x.get_x(), s_x.get_y(), Z, log(Z/Zd));
+    s_Zd.buildFrom(0, 0, Zd, 0);
+    task.addFeature(s_Z, s_Zd);
+
+#ifdef VISP_HAVE_DISPLAY
+    // Create a window (800 by 500) at position (400, 10) with 3 graphics
+    vpPlot graph(3, 800, 500, 400, 10, "Curves...");
+
+    // Init the curve plotter
+    graph.initGraph(0,2);
+    graph.initGraph(1,2);
+    graph.initGraph(2,1);
+    graph.setTitle(0, "Velocities");
+    graph.setTitle(1, "Error s-s*");
+    graph.setTitle(2, "Depth");
+    graph.setLegend(0, 0, "vx");
+    graph.setLegend(0, 1, "wz");
+    graph.setLegend(1, 0, "x");
+    graph.setLegend(1, 1, "log(Z/Z*)");
+    graph.setLegend(2, 0, "Z");
+#endif
+
+    int iter = 0;
+    for (; ;)
+    {
+      robot.getPosition(wMc) ;
+      cMo = wMc.inverse() * wMo;
+
+      point.track(cMo);
+
+      vpFeatureBuilder::create(s_x, point);
+
+      Z = point.get_Z() ;
+      s_Z.buildFrom(s_x.get_x(), s_x.get_y(), Z, log(Z/Zd)) ;
+
+      robot.get_cVe(cVe);
+      task.set_cVe(cVe);
+      robot.get_eJe(eJe);
+      task.set_eJe(eJe);
+
+      vpColVector v = task.computeControlLaw(iter*robot.getSamplingTime());
+      robot.setVelocity(vpRobot::ARTICULAR_FRAME, v);
+
+#ifdef VISP_HAVE_DISPLAY
+      graph.plot(0, iter, v); // plot velocities applied to the robot
+      graph.plot(1, iter, task.getError()); // plot error vector
+      graph.plot(2, 0, iter, Z); // plot the depth
+#endif
+
+      iter ++;
+
+      if (task.getError().sumSquare() < 0.0001) {
+        std::cout << "Reached a small error. We stop the loop... " << std::endl;
+        break;
+      }
+    }
+#ifdef VISP_HAVE_DISPLAY
+    graph.saveData(0, "./v2.dat");
+    graph.saveData(1, "./error2.dat");
+
+    const char *legend = "Click to quit...";
+    vpDisplay::displayCharString(graph.I, (int)graph.I.getHeight()-60, (int)graph.I.getWidth()-150, legend, vpColor::red);
+    vpDisplay::flush(graph.I);
+    vpDisplay::getClick(graph.I);
+#endif
+
+
+    // Kill the servo task
+    task.print() ;
+    task.kill();
+
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
+}
diff --git a/tutorial/robot/pioneer/tutorial-simu-pioneer-pan.cpp b/tutorial/robot/pioneer/tutorial-simu-pioneer-pan.cpp
index e18d02aa..453a74fa 100644
--- a/tutorial/robot/pioneer/tutorial-simu-pioneer-pan.cpp
+++ b/tutorial/robot/pioneer/tutorial-simu-pioneer-pan.cpp
@@ -29,93 +29,92 @@
 
 int main()
 {
-  // Set the position the camera has to reach
-  vpHomogeneousMatrix cdMo ;
-  cdMo[1][3] = 1.2; // t_y should be different from zero to be non singular
-  cdMo[2][3] = 0.5;
-
-  // Set the initial camera position
-  vpHomogeneousMatrix cMo;
-  cMo[0][3] = 0.3;
-  cMo[1][3] = cdMo[1][3];
-  cMo[2][3] = 1.;
-  vpRotationMatrix cdRo(0, atan2(cMo[0][3], cMo[1][3]), 0);
-  cMo.insert(cdRo);
-
-  vpSimulatorPioneerPan robot ;
-  robot.setSamplingTime(0.04);
-  vpHomogeneousMatrix wMc, wMo;
-
-  // Get robot position world frame
-  robot.getPosition(wMc);
-
-  // Compute the position of the object in the world frame
-  wMo = wMc * cMo;
-
-  // Define the target
-  vpPoint point;
-  point.setWorldCoordinates(0,0,0); // Coordinates in the object frame
-  point.track(cMo);
-
-  vpServo task;
-  task.setServo(vpServo::EYEINHAND_L_cVe_eJe);
-  task.setInteractionMatrixType(vpServo::CURRENT, vpServo::PSEUDO_INVERSE);
-  task.setLambda(0.2);
-
-  vpVelocityTwistMatrix cVe;
-  cVe = robot.get_cVe();
-  task.set_cVe(cVe);
-
-  vpMatrix eJe;
-  robot.get_eJe(eJe);
-  task.set_eJe(eJe);
-
-  // Current and desired visual feature associated later to the x coordinate of the point
-  vpFeaturePoint s_x, s_xd;
-
-  // Create the current x visual feature
-  vpFeatureBuilder::create(s_x, point);
-
-  // Create the desired x* visual feature
-  s_xd.buildFrom(0, 0, cdMo[2][3]);
-
-  // Add the feature
-  task.addFeature(s_x, s_xd, vpFeaturePoint::selectX());
-
-  // Create the current and desired log(Z/Z*) visual feature
-  vpFeatureDepth s_Z, s_Zd;
-  // Initial depth of the target in front of the camera
-  double Z = point.get_Z();
-  // Desired depth Z* of the target.
-  double Zd = cdMo[2][3];
-  s_Z.buildFrom(s_x.get_x(), s_x.get_y(), Z, log(Z/Zd));
-  s_Zd.buildFrom(0, 0, Zd, 0); // log(Z/Z*) = 0 that's why the last parameter is 0
-
-  // Add the feature
-  task.addFeature(s_Z, s_Zd);
+  try {
+    // Set the position the camera has to reach
+    vpHomogeneousMatrix cdMo ;
+    cdMo[1][3] = 1.2; // t_y should be different from zero to be non singular
+    cdMo[2][3] = 0.5;
+
+    // Set the initial camera position
+    vpHomogeneousMatrix cMo;
+    cMo[0][3] = 0.3;
+    cMo[1][3] = cdMo[1][3];
+    cMo[2][3] = 1.;
+    vpRotationMatrix cdRo(0, atan2(cMo[0][3], cMo[1][3]), 0);
+    cMo.insert(cdRo);
+
+    vpSimulatorPioneerPan robot ;
+    robot.setSamplingTime(0.04);
+    vpHomogeneousMatrix wMc, wMo;
+
+    // Get robot position world frame
+    robot.getPosition(wMc);
+
+    // Compute the position of the object in the world frame
+    wMo = wMc * cMo;
+
+    // Define the target
+    vpPoint point;
+    point.setWorldCoordinates(0,0,0); // Coordinates in the object frame
+    point.track(cMo);
+
+    vpServo task;
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe);
+    task.setInteractionMatrixType(vpServo::CURRENT, vpServo::PSEUDO_INVERSE);
+    task.setLambda(0.2);
+
+    vpVelocityTwistMatrix cVe;
+    cVe = robot.get_cVe();
+    task.set_cVe(cVe);
+
+    vpMatrix eJe;
+    robot.get_eJe(eJe);
+    task.set_eJe(eJe);
+
+    // Current and desired visual feature associated later to the x coordinate of the point
+    vpFeaturePoint s_x, s_xd;
+
+    // Create the current x visual feature
+    vpFeatureBuilder::create(s_x, point);
+
+    // Create the desired x* visual feature
+    s_xd.buildFrom(0, 0, cdMo[2][3]);
+
+    // Add the feature
+    task.addFeature(s_x, s_xd, vpFeaturePoint::selectX());
+
+    // Create the current and desired log(Z/Z*) visual feature
+    vpFeatureDepth s_Z, s_Zd;
+    // Initial depth of the target in front of the camera
+    double Z = point.get_Z();
+    // Desired depth Z* of the target.
+    double Zd = cdMo[2][3];
+    s_Z.buildFrom(s_x.get_x(), s_x.get_y(), Z, log(Z/Zd));
+    s_Zd.buildFrom(0, 0, Zd, 0); // log(Z/Z*) = 0 that's why the last parameter is 0
+
+    // Add the feature
+    task.addFeature(s_Z, s_Zd);
 
 #ifdef VISP_HAVE_DISPLAY
-  // Create a window (800 by 500) at position (400, 10) with 3 graphics
-  vpPlot graph(3, 800, 500, 400, 10, "Curves...");
-
-  // Init the curve plotter
-  graph.initGraph(0,3);
-  graph.initGraph(1,2);
-  graph.initGraph(2,1);
-  graph.setTitle(0, "Velocities");
-  graph.setTitle(1, "Error s-s*");
-  graph.setTitle(2, "Depth");
-  graph.setLegend(0, 0, "vx");
-  graph.setLegend(0, 1, "wz");
-  graph.setLegend(0, 2, "qdot_pan");
-  graph.setLegend(1, 0, "x");
-  graph.setLegend(1, 1, "log(Z/Z*)");
-  graph.setLegend(2, 0, "Z");
+    // Create a window (800 by 500) at position (400, 10) with 3 graphics
+    vpPlot graph(3, 800, 500, 400, 10, "Curves...");
+
+    // Init the curve plotter
+    graph.initGraph(0,3);
+    graph.initGraph(1,2);
+    graph.initGraph(2,1);
+    graph.setTitle(0, "Velocities");
+    graph.setTitle(1, "Error s-s*");
+    graph.setTitle(2, "Depth");
+    graph.setLegend(0, 0, "vx");
+    graph.setLegend(0, 1, "wz");
+    graph.setLegend(0, 2, "qdot_pan");
+    graph.setLegend(1, 0, "x");
+    graph.setLegend(1, 1, "log(Z/Z*)");
+    graph.setLegend(2, 0, "Z");
 #endif
 
-  try
-  {
-    int iter = 1;
+    int iter = 0;
     for (; ;)
     {
       robot.getPosition(wMc) ;
@@ -155,16 +154,16 @@ int main()
     }
 #ifdef VISP_HAVE_DISPLAY
     const char *legend = "Click to quit...";
-    vpDisplay::displayCharString(graph.I, graph.I.getHeight()-60, graph.I.getWidth()-150, legend, vpColor::red);
+    vpDisplay::displayCharString(graph.I, (int)graph.I.getHeight()-60, (int)graph.I.getWidth()-150, legend, vpColor::red);
     vpDisplay::flush(graph.I);
     vpDisplay::getClick(graph.I);
 #endif
+
+    // Kill the servo task
+    task.print();
+    task.kill();
   }
-  catch(...)
-  {
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
-
-  // Kill the servo task
-  task.print();
-  task.kill();
 }
diff --git a/tutorial/robot/pioneer/tutorial-simu-pioneer.cpp b/tutorial/robot/pioneer/tutorial-simu-pioneer.cpp
index 021e95eb..13202d12 100644
--- a/tutorial/robot/pioneer/tutorial-simu-pioneer.cpp
+++ b/tutorial/robot/pioneer/tutorial-simu-pioneer.cpp
@@ -28,72 +28,71 @@
 
 int main()
 {
-  vpHomogeneousMatrix cdMo;
-  cdMo[1][3] = 1.2;
-  cdMo[2][3] = 0.5;
-
-  vpHomogeneousMatrix cMo;
-  cMo[0][3] = 0.3;
-  cMo[1][3] = cdMo[1][3];
-  cMo[2][3] = 1.;
-  vpRotationMatrix cRo(0, atan2( cMo[0][3], cMo[1][3]), 0);
-  cMo.insert(cRo);
-
-  vpSimulatorPioneer robot ;
-  robot.setSamplingTime(0.04);
-  vpHomogeneousMatrix wMc, wMo;
-  robot.getPosition(wMc);
-  wMo = wMc * cMo;
-
-  vpPoint point;
-  point.setWorldCoordinates(0,0,0);
-  point.track(cMo);
-
-  vpServo task;
-  task.setServo(vpServo::EYEINHAND_L_cVe_eJe);
-  task.setInteractionMatrixType(vpServo::DESIRED, vpServo::PSEUDO_INVERSE);
-  task.setLambda(0.2);
-  vpVelocityTwistMatrix cVe;
-  cVe = robot.get_cVe();
-  task.set_cVe(cVe);
-
-  vpMatrix eJe;
-  robot.get_eJe(eJe);
-  task.set_eJe(eJe);
-
-  vpFeaturePoint s_x, s_xd;
-  vpFeatureBuilder::create(s_x, point);
-  s_xd.buildFrom(0, 0, cdMo[2][3]);
-  task.addFeature(s_x, s_xd, vpFeaturePoint::selectX());
-
-  vpFeatureDepth s_Z, s_Zd;
-  double Z = point.get_Z();
-  double Zd = cdMo[2][3];
-  s_Z.buildFrom(s_x.get_x(), s_x.get_y(), Z, log(Z/Zd));
-  s_Zd.buildFrom(0, 0, Zd, 0);
-  task.addFeature(s_Z, s_Zd);
+  try {
+    vpHomogeneousMatrix cdMo;
+    cdMo[1][3] = 1.2;
+    cdMo[2][3] = 0.5;
+
+    vpHomogeneousMatrix cMo;
+    cMo[0][3] = 0.3;
+    cMo[1][3] = cdMo[1][3];
+    cMo[2][3] = 1.;
+    vpRotationMatrix cRo(0, atan2( cMo[0][3], cMo[1][3]), 0);
+    cMo.insert(cRo);
+
+    vpSimulatorPioneer robot ;
+    robot.setSamplingTime(0.04);
+    vpHomogeneousMatrix wMc, wMo;
+    robot.getPosition(wMc);
+    wMo = wMc * cMo;
+
+    vpPoint point;
+    point.setWorldCoordinates(0,0,0);
+    point.track(cMo);
+
+    vpServo task;
+    task.setServo(vpServo::EYEINHAND_L_cVe_eJe);
+    task.setInteractionMatrixType(vpServo::DESIRED, vpServo::PSEUDO_INVERSE);
+    task.setLambda(0.2);
+    vpVelocityTwistMatrix cVe;
+    cVe = robot.get_cVe();
+    task.set_cVe(cVe);
+
+    vpMatrix eJe;
+    robot.get_eJe(eJe);
+    task.set_eJe(eJe);
+
+    vpFeaturePoint s_x, s_xd;
+    vpFeatureBuilder::create(s_x, point);
+    s_xd.buildFrom(0, 0, cdMo[2][3]);
+    task.addFeature(s_x, s_xd, vpFeaturePoint::selectX());
+
+    vpFeatureDepth s_Z, s_Zd;
+    double Z = point.get_Z();
+    double Zd = cdMo[2][3];
+    s_Z.buildFrom(s_x.get_x(), s_x.get_y(), Z, log(Z/Zd));
+    s_Zd.buildFrom(0, 0, Zd, 0);
+    task.addFeature(s_Z, s_Zd);
 
 #ifdef VISP_HAVE_DISPLAY
-  // Create a window (800 by 500) at position (400, 10) with 3 graphics
-  vpPlot graph(3, 800, 500, 400, 10, "Curves...");
-
-  // Init the curve plotter
-  graph.initGraph(0,2);
-  graph.initGraph(1,2);
-  graph.initGraph(2,1);
-  graph.setTitle(0, "Velocities");
-  graph.setTitle(1, "Error s-s*");
-  graph.setTitle(2, "Depth");
-  graph.setLegend(0, 0, "vx");
-  graph.setLegend(0, 1, "wz");
-  graph.setLegend(1, 0, "x");
-  graph.setLegend(1, 1, "log(Z/Z*)");
-  graph.setLegend(2, 0, "Z");
+    // Create a window (800 by 500) at position (400, 10) with 3 graphics
+    vpPlot graph(3, 800, 500, 400, 10, "Curves...");
+
+    // Init the curve plotter
+    graph.initGraph(0,2);
+    graph.initGraph(1,2);
+    graph.initGraph(2,1);
+    graph.setTitle(0, "Velocities");
+    graph.setTitle(1, "Error s-s*");
+    graph.setTitle(2, "Depth");
+    graph.setLegend(0, 0, "vx");
+    graph.setLegend(0, 1, "wz");
+    graph.setLegend(1, 0, "x");
+    graph.setLegend(1, 1, "log(Z/Z*)");
+    graph.setLegend(2, 0, "Z");
 #endif
 
-  try
-  {
-    int iter = 1;
+    int iter = 0;
     for (; ;)
     {
       robot.getPosition(wMc) ;
@@ -132,16 +131,18 @@ int main()
     graph.saveData(1, "./error2.dat");
 
     const char *legend = "Click to quit...";
-    vpDisplay::displayCharString(graph.I, graph.I.getHeight()-60, graph.I.getWidth()-150, legend, vpColor::red);
+    vpDisplay::displayCharString(graph.I, (int)graph.I.getHeight()-60, (int)graph.I.getWidth()-150, legend, vpColor::red);
     vpDisplay::flush(graph.I);
     vpDisplay::getClick(graph.I);
 #endif
+
+
+    // Kill the servo task
+    task.print() ;
+    task.kill();
+
   }
-  catch(...)
-  {
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
-
-  // Kill the servo task
-  task.print() ;
-  task.kill();
 }
diff --git a/tutorial/simulator/image/CMakeLists.txt b/tutorial/simulator/image/CMakeLists.txt
index 551651fe..81252ba3 100644
--- a/tutorial/simulator/image/CMakeLists.txt
+++ b/tutorial/simulator/image/CMakeLists.txt
@@ -3,21 +3,18 @@ project(tutorial-simulation-image)
 cmake_minimum_required(VERSION 2.6)
 
 find_package(VISP REQUIRED)
-if(VISP_FOUND)
-  include(${VISP_USE_FILE})
-endif(VISP_FOUND)
 
-# build the examples
-add_executable(tutorial-image-simulator tutorial-image-simulator.cpp)
+# set the list of source files
+set(tutorial_cpp
+  tutorial-image-simulator.cpp)
 
-# copy the data
-get_target_property(target_location tutorial-image-simulator LOCATION)
-get_filename_component(target_location "${target_location}" PATH)
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/target_square.pgm" )
-foreach(data ${data2copy})
-  add_custom_command(
-    TARGET tutorial-image-simulator
-    POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy "${data}" "${target_location}"
-  )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/target_square.pgm" )
+
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
+
+# Copy the data files to the same location than the target
+foreach(data ${tutorial_data})
+  visp_copy_data(tutorial-image-simulator.cpp ${data})
 endforeach()
diff --git a/tutorial/simulator/image/tutorial-image-simulator.cpp b/tutorial/simulator/image/tutorial-image-simulator.cpp
index efe9d0a8..fbd89e98 100644
--- a/tutorial/simulator/image/tutorial-image-simulator.cpp
+++ b/tutorial/simulator/image/tutorial-image-simulator.cpp
@@ -6,47 +6,52 @@
 
 int main()
 {
-  vpImage<unsigned char> target;
-  vpImageIo::read(target, "./target_square.pgm");
-
-  vpColVector X[4];
-  for (int i = 0; i < 4; i++) X[i].resize(3);
-  // Top left     Top right       Bottom right   Bottom left
-  X[0][0] = -0.1; X[1][0] =  0.1; X[2][0] = 0.1; X[3][0] = -0.1;
-  X[0][1] = -0.1; X[1][1] = -0.1; X[2][1] = 0.1; X[3][1] =  0.1;
-  X[0][2] =  0;   X[1][2] =  0;   X[2][2] = 0;   X[3][2] =  0;
-
-  vpImage<unsigned char> I(480, 640);
-  vpCameraParameters cam(840, 840, I.getWidth()/2, I.getHeight()/2);
-  vpHomogeneousMatrix cMo(0, 0, 0.35, 0, vpMath::rad(30), vpMath::rad(15));
-
-  vpImageSimulator sim;
-  sim.setInterpolationType(vpImageSimulator::BILINEAR_INTERPOLATION);
-  sim.init(target, X);
-
-  // Get the new image of the projected planar image target
-  sim.setCleanPreviousImage(true);
-  sim.setCameraPosition(cMo);
-  sim.getImage(I, cam);
-
   try {
-    vpImageIo::write(I, "./rendered_image.jpg");
-  }
-  catch(...) {
-    std::cout << "Unsupported image format" << std::endl;
-  }
+    vpImage<unsigned char> target;
+    vpImageIo::read(target, "./target_square.pgm");
+
+    vpColVector X[4];
+    for (int i = 0; i < 4; i++) X[i].resize(3);
+    // Top left     Top right       Bottom right   Bottom left
+    X[0][0] = -0.1; X[1][0] =  0.1; X[2][0] = 0.1; X[3][0] = -0.1;
+    X[0][1] = -0.1; X[1][1] = -0.1; X[2][1] = 0.1; X[3][1] =  0.1;
+    X[0][2] =  0;   X[1][2] =  0;   X[2][2] = 0;   X[3][2] =  0;
+
+    vpImage<unsigned char> I(480, 640);
+    vpCameraParameters cam(840, 840, I.getWidth()/2, I.getHeight()/2);
+    vpHomogeneousMatrix cMo(0, 0, 0.35, 0, vpMath::rad(30), vpMath::rad(15));
+
+    vpImageSimulator sim;
+    sim.setInterpolationType(vpImageSimulator::BILINEAR_INTERPOLATION);
+    sim.init(target, X);
+
+    // Get the new image of the projected planar image target
+    sim.setCleanPreviousImage(true);
+    sim.setCameraPosition(cMo);
+    sim.getImage(I, cam);
+
+    try {
+      vpImageIo::write(I, "./rendered_image.jpg");
+    }
+    catch(...) {
+      std::cout << "Unsupported image format" << std::endl;
+    }
 
 #if defined(VISP_HAVE_X11)
-  vpDisplayX d(I);
+    vpDisplayX d(I);
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI d(I);
+    vpDisplayGDI d(I);
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  vpDisplay::setTitle(I, "Planar image projection");
-  vpDisplay::display(I);
-  vpDisplay::flush(I);
-  std::cout << "A click to quit..." << std::endl;
-  vpDisplay::getClick(I);
+    vpDisplay::setTitle(I, "Planar image projection");
+    vpDisplay::display(I);
+    vpDisplay::flush(I);
+    std::cout << "A click to quit..." << std::endl;
+    vpDisplay::getClick(I);
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
 }
diff --git a/tutorial/trace/CMakeLists.txt b/tutorial/trace/CMakeLists.txt
new file mode 100644
index 00000000..73f50743
--- /dev/null
+++ b/tutorial/trace/CMakeLists.txt
@@ -0,0 +1,15 @@
+project(tutorial-trace)
+
+cmake_minimum_required(VERSION 2.6)
+
+find_package(VISP REQUIRED)
+include_directories(${VISP_INCLUDE_DIRS})
+add_definitions(${VISP_DEFINITIONS})
+
+# set the list of source files
+set(tutorial_cpp
+  tutorial-trace.cpp)
+
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
diff --git a/tutorial/trace/tutorial-trace.cpp b/tutorial/trace/tutorial-trace.cpp
new file mode 100644
index 00000000..737e2855
--- /dev/null
+++ b/tutorial/trace/tutorial-trace.cpp
@@ -0,0 +1,39 @@
+/*! \example tutorial-trace.cpp */
+//#define VP_TRACE        // Activate the trace mode
+//#define VP_DEBUG        // Activate the debug mode
+#define VP_DEBUG_MODE 2 // Activate debug level 1 and 2
+
+#include <visp/vpDebug.h>
+
+int main()
+{
+  vpIN_FCT("main()"); // std::cout if VP_TRACE defined
+
+  // Check the active debug levels set in VP_DEBUG_MODE
+  std::cout << "Debug level 1 active: " << vpDEBUG_ENABLE(1) << std::endl;
+  std::cout << "Debug level 2 active: " << vpDEBUG_ENABLE(2) << std::endl;
+  std::cout << "Debug level 3 active: " << vpDEBUG_ENABLE(3) << std::endl;
+
+  // C-like trace printings if VP_TRACE defined
+  vpTRACE("C-like trace");              // std::cout
+  vpTRACE(1, "C-like trace level 1");   // std::cout
+
+  vpERROR_TRACE("C-like error trace");            // std::cerr
+  vpERROR_TRACE(1, "C-like error trace level 1"); // std::cerr if VP_DEBUG_MODE value is >= 1
+
+  // C-like debug printings if VP_DEBUG defined
+  vpDEBUG_TRACE ("C-like debug trace"); // stdout
+  vpDERROR_TRACE("C-like error trace"); // stderr
+
+  vpDEBUG_TRACE (2, "C-like debug trace level 2"); // std::cout if VP_DEBUG_MODE value >= 2
+  vpDERROR_TRACE(2, "C-like error trace level 2"); // std::cerr if VP_DEBUG_MODE value >= 2
+
+  // C++-like trace printings if VP_TRACE defined
+  vpCTRACE << "C++-like trace" << std::endl;       // std::cout
+  vpCERROR << "C++-like error trace" << std::endl; // std::cerr
+
+  // C++-like debug printings if VP_DEBUG defined
+  vpCDEBUG(2) << "C++-like debug trace level 2" << std::endl; // std::cout if VP_DEBUG_MODE value >= 2
+
+  vpOUT_FCT("main()"); // std::cout if VP_TRACE defined
+}
diff --git a/tutorial/tracking/blob/CMakeLists.txt b/tutorial/tracking/blob/CMakeLists.txt
index 8e482333..a16031eb 100644
--- a/tutorial/tracking/blob/CMakeLists.txt
+++ b/tutorial/tracking/blob/CMakeLists.txt
@@ -3,20 +3,19 @@ project(tutorial-tracking-blob)
 cmake_minimum_required(VERSION 2.6)
 
 find_package(VISP REQUIRED)
-if(VISP_FOUND)
-  include(${VISP_USE_FILE})
-endif(VISP_FOUND)
 
-# build the examples
-add_executable(tutorial-blob-tracker tutorial-blob-tracker.cpp)
-add_executable(tutorial-blob-auto-tracker tutorial-blob-auto-tracker.cpp)
+# set the list of source files
+set(tutorial_cpp
+  tutorial-blob-tracker.cpp
+  tutorial-blob-auto-tracker.cpp)
 
-# copy the data
-get_target_property(target_location tutorial-blob-auto-tracker LOCATION)
-get_filename_component(target_location "${target_location}" PATH)
-set(data "${CMAKE_CURRENT_SOURCE_DIR}/target.pgm" )
-add_custom_command(
-  TARGET tutorial-blob-auto-tracker
-  POST_BUILD
-  COMMAND ${CMAKE_COMMAND} -E copy "${data}" "${target_location}"
-)
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/target.pgm" )
+
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
+
+# Copy the data files to the same location than the target
+foreach(data ${tutorial_data})
+  visp_copy_data(tutorial-blob-auto-tracker.cpp ${data})
+endforeach()
diff --git a/tutorial/tracking/blob/tutorial-blob-auto-tracker.cpp b/tutorial/tracking/blob/tutorial-blob-auto-tracker.cpp
index 34be5364..2e16f716 100644
--- a/tutorial/tracking/blob/tutorial-blob-auto-tracker.cpp
+++ b/tutorial/tracking/blob/tutorial-blob-auto-tracker.cpp
@@ -6,79 +6,84 @@
 
 int main()
 {
-  bool learn = false;
-  vpImage<unsigned char> I; // Create a gray level image container
+  try {
+    bool learn = false;
+    vpImage<unsigned char> I; // Create a gray level image container
 
-  vpImageIo::read(I, "./target.pgm");
+    vpImageIo::read(I, "./target.pgm");
 
 #if defined(VISP_HAVE_X11)
-  vpDisplayX d(I, 0, 0, "Camera view");
+    vpDisplayX d(I, 0, 0, "Camera view");
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI d(I, 0, 0, "Camera view");
+    vpDisplayGDI d(I, 0, 0, "Camera view");
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
-  vpDisplay::display(I);
-  vpDisplay::flush(I);
+    vpDisplay::display(I);
+    vpDisplay::flush(I);
 
-  vpDot2 blob;
-  if (learn) {
-    // Learn the characteristics of the blob to auto detect
-    blob.setGraphics(true);
-    blob.setGraphicsThickness(1);
-    blob.initTracking(I);
-    blob.track(I);
-    std::cout << "Blob characteristics: " << std::endl;
-    std::cout << " width : " << blob.getWidth() << std::endl;
-    std::cout << " height: " << blob.getHeight() << std::endl;
+    vpDot2 blob;
+    if (learn) {
+      // Learn the characteristics of the blob to auto detect
+      blob.setGraphics(true);
+      blob.setGraphicsThickness(1);
+      blob.initTracking(I);
+      blob.track(I);
+      std::cout << "Blob characteristics: " << std::endl;
+      std::cout << " width : " << blob.getWidth() << std::endl;
+      std::cout << " height: " << blob.getHeight() << std::endl;
 #if VISP_VERSION_INT > VP_VERSION_INT(2,7,0)
-    std::cout << " area: " << blob.getArea() << std::endl;
+      std::cout << " area: " << blob.getArea() << std::endl;
 #endif
-    std::cout << " gray level min: " << blob.getGrayLevelMin() << std::endl;
-    std::cout << " gray level max: " << blob.getGrayLevelMax() << std::endl;
-    std::cout << " grayLevelPrecision: " << blob.getGrayLevelPrecision() << std::endl;
-    std::cout << " sizePrecision: " << blob.getSizePrecision() << std::endl;
-    std::cout << " ellipsoidShapePrecision: " << blob.getEllipsoidShapePrecision() << std::endl;
-  }
-  else {
-    // Set blob characteristics for the auto detection
-    blob.setWidth(50);
-    blob.setHeight(50);
+      std::cout << " gray level min: " << blob.getGrayLevelMin() << std::endl;
+      std::cout << " gray level max: " << blob.getGrayLevelMax() << std::endl;
+      std::cout << " grayLevelPrecision: " << blob.getGrayLevelPrecision() << std::endl;
+      std::cout << " sizePrecision: " << blob.getSizePrecision() << std::endl;
+      std::cout << " ellipsoidShapePrecision: " << blob.getEllipsoidShapePrecision() << std::endl;
+    }
+    else {
+      // Set blob characteristics for the auto detection
+      blob.setWidth(50);
+      blob.setHeight(50);
 #if VISP_VERSION_INT > VP_VERSION_INT(2,7,0)
-    blob.setArea(1700);
+      blob.setArea(1700);
 #endif
-    blob.setGrayLevelMin(0);
-    blob.setGrayLevelMax(30);
-    blob.setGrayLevelPrecision(0.8);
-    blob.setSizePrecision(0.65);
-    blob.setEllipsoidShapePrecision(0.65);
-  }
+      blob.setGrayLevelMin(0);
+      blob.setGrayLevelMax(30);
+      blob.setGrayLevelPrecision(0.8);
+      blob.setSizePrecision(0.65);
+      blob.setEllipsoidShapePrecision(0.65);
+    }
 
-  std::list<vpDot2> blob_list;
-  blob.searchDotsInArea(I, 0, 0, I.getWidth(), I.getHeight(), blob_list);
+    std::list<vpDot2> blob_list;
+    blob.searchDotsInArea(I, 0, 0, I.getWidth(), I.getHeight(), blob_list);
 
-  if (learn) {
-    // The blob that is tracked by initTracking() is not in the list of auto detected blobs
-    // We add it:
-    blob_list.push_back(blob);
-  }
-  std::cout << "Number of auto detected blob: " << blob_list.size() << std::endl;
-  std::cout << "A click to exit..." << std::endl;
+    if (learn) {
+      // The blob that is tracked by initTracking() is not in the list of auto detected blobs
+      // We add it:
+      blob_list.push_back(blob);
+    }
+    std::cout << "Number of auto detected blob: " << blob_list.size() << std::endl;
+    std::cout << "A click to exit..." << std::endl;
 
-  while(1) {
-    vpDisplay::display(I);
+    while(1) {
+      vpDisplay::display(I);
 
-    for(std::list<vpDot2>::iterator it=blob_list.begin(); it != blob_list.end(); ++it) {
-      (*it).setGraphics(true);
-      (*it).setGraphicsThickness(3);
-      (*it).track(I);
-    }
+      for(std::list<vpDot2>::iterator it=blob_list.begin(); it != blob_list.end(); ++it) {
+        (*it).setGraphics(true);
+        (*it).setGraphicsThickness(3);
+        (*it).track(I);
+      }
 
-    vpDisplay::flush(I);
+      vpDisplay::flush(I);
 
-    if (vpDisplay::getClick(I, false))
-      break;
+      if (vpDisplay::getClick(I, false))
+        break;
 
-    vpTime::wait(40);
+      vpTime::wait(40);
+    }
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
 }
diff --git a/tutorial/tracking/blob/tutorial-blob-tracker.cpp b/tutorial/tracking/blob/tutorial-blob-tracker.cpp
index 23dae3bd..29081fa6 100644
--- a/tutorial/tracking/blob/tutorial-blob-tracker.cpp
+++ b/tutorial/tracking/blob/tutorial-blob-tracker.cpp
@@ -10,38 +10,43 @@
 int main()
 {
 #if (defined(VISP_HAVE_DC1394_2) || defined(VISP_HAVE_CMU1394))
-  vpImage<unsigned char> I; // Create a gray level image container
+  try {
+    vpImage<unsigned char> I; // Create a gray level image container
 
 #if defined(VISP_HAVE_DC1394_2)
-  vp1394TwoGrabber g(false);
+    vp1394TwoGrabber g(false);
 #elif defined(VISP_HAVE_CMU1394)
-  vp1394CMUGrabber g;
+    vp1394CMUGrabber g;
 #endif
-  g.open(I);
-  g.acquire(I);
+    g.open(I);
+    g.acquire(I);
 
 #if defined(VISP_HAVE_X11)
-  vpDisplayX d(I, 0, 0, "Camera view");
+    vpDisplayX d(I, 0, 0, "Camera view");
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI d(I, 0, 0, "Camera view");
+    vpDisplayGDI d(I, 0, 0, "Camera view");
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
-  vpDisplay::display(I);
-  vpDisplay::flush(I);
-
-  vpDot2 blob;
-  blob.setGraphics(true);
-  blob.setGraphicsThickness(2);
-  blob.initTracking(I);
-
-  while(1) {
-    g.acquire(I); // Acquire an image
     vpDisplay::display(I);
-    blob.track(I);
     vpDisplay::flush(I);
-    if (vpDisplay::getClick(I, false))
-      break;
+
+    vpDot2 blob;
+    blob.setGraphics(true);
+    blob.setGraphicsThickness(2);
+    blob.initTracking(I);
+
+    while(1) {
+      g.acquire(I); // Acquire an image
+      vpDisplay::display(I);
+      blob.track(I);
+      vpDisplay::flush(I);
+      if (vpDisplay::getClick(I, false))
+        break;
+    }
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
 #endif
 }
diff --git a/tutorial/tracking/keypoint/CMakeLists.txt b/tutorial/tracking/keypoint/CMakeLists.txt
index a407530f..46c8adc0 100644
--- a/tutorial/tracking/keypoint/CMakeLists.txt
+++ b/tutorial/tracking/keypoint/CMakeLists.txt
@@ -3,21 +3,18 @@ project(tutorial-tracking-keypoint)
 cmake_minimum_required(VERSION 2.6)
 
 find_package(VISP REQUIRED)
-if(VISP_FOUND)
-  include(${VISP_USE_FILE})
-endif(VISP_FOUND)
 
-# build the examples
-add_executable(tutorial-klt-tracker tutorial-klt-tracker.cpp)
+# set the list of source files
+set(tutorial_cpp
+  tutorial-klt-tracker.cpp)
 
-# copy the data
-get_target_property(target_location tutorial-klt-tracker LOCATION)
-get_filename_component(target_location "${target_location}" PATH)
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/video-postcard.mpeg" )
-foreach(data ${data2copy})
-  add_custom_command(
-    TARGET tutorial-klt-tracker
-    POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy "${data}" "${target_location}"
-  )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/video-postcard.mpeg" )
+
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
+
+# Copy the data files to the same location than the target
+foreach(data ${tutorial_data})
+  visp_copy_data(tutorial-klt-tracker.cpp ${data})
 endforeach()
diff --git a/tutorial/tracking/keypoint/tutorial-klt-tracker.cpp b/tutorial/tracking/keypoint/tutorial-klt-tracker.cpp
index 89f429b4..39a362f2 100644
--- a/tutorial/tracking/keypoint/tutorial-klt-tracker.cpp
+++ b/tutorial/tracking/keypoint/tutorial-klt-tracker.cpp
@@ -7,50 +7,55 @@
 int main()
 {
 #if (VISP_HAVE_OPENCV_VERSION >= 0x010100) && defined(VISP_HAVE_FFMPEG)
-  vpVideoReader reader;
-  reader.setFileName("video-postcard.mpeg");
-
-  vpImage<unsigned char> I;
-  reader.acquire(I);
-
-  IplImage * cvI = NULL;
-  vpImageConvert::convert(I, cvI);
-  
-  // Display initialisation
-  vpDisplayOpenCV d(I, 0, 0, "Klt tracking");
-  vpDisplay::display(I);
-  vpDisplay::flush(I);
-  
-  vpKltOpencv tracker;
-  // Set tracker parameters
-  tracker.setMaxFeatures(200);
-  tracker.setWindowSize(10);
-  tracker.setQuality(0.01);
-  tracker.setMinDistance(15);
-  tracker.setHarrisFreeParameter(0.04);
-  tracker.setBlockSize(9);
-  tracker.setUseHarris(1);
-  tracker.setPyramidLevels(3);
-
-  // Initialise the tracking
-  tracker.initTracking(cvI);
-  
-  while ( ! reader.end() )
-  {
+  try {
+    vpVideoReader reader;
+    reader.setFileName("video-postcard.mpeg");
+
+    vpImage<unsigned char> I;
     reader.acquire(I);
-    vpDisplay::display(I);
 
+    IplImage * cvI = NULL;
     vpImageConvert::convert(I, cvI);
-    tracker.track(cvI);
 
-    tracker.display(I, vpColor::red);
+    // Display initialisation
+    vpDisplayOpenCV d(I, 0, 0, "Klt tracking");
+    vpDisplay::display(I);
     vpDisplay::flush(I);
-  }
 
-  vpDisplay::getClick(I);
+    vpKltOpencv tracker;
+    // Set tracker parameters
+    tracker.setMaxFeatures(200);
+    tracker.setWindowSize(10);
+    tracker.setQuality(0.01);
+    tracker.setMinDistance(15);
+    tracker.setHarrisFreeParameter(0.04);
+    tracker.setBlockSize(9);
+    tracker.setUseHarris(1);
+    tracker.setPyramidLevels(3);
+
+    // Initialise the tracking
+    tracker.initTracking(cvI);
+
+    while ( ! reader.end() )
+    {
+      reader.acquire(I);
+      vpDisplay::display(I);
 
-  cvReleaseImage(&cvI);
+      vpImageConvert::convert(I, cvI);
+      tracker.track(cvI);
 
-  return 0;
+      tracker.display(I, vpColor::red);
+      vpDisplay::flush(I);
+    }
+
+    vpDisplay::getClick(I);
+
+    cvReleaseImage(&cvI);
+
+    return 0;
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
 #endif
 }
diff --git a/tutorial/tracking/model-based/edges/CMakeLists.txt b/tutorial/tracking/model-based/edges/CMakeLists.txt
index 6eaad4a2..532d5015 100644
--- a/tutorial/tracking/model-based/edges/CMakeLists.txt
+++ b/tutorial/tracking/model-based/edges/CMakeLists.txt
@@ -3,25 +3,22 @@ project(tutorial-tracking-mb-edges)
 cmake_minimum_required(VERSION 2.6)
 
 find_package(VISP REQUIRED)
-if(VISP_FOUND)
-  include(${VISP_USE_FILE})
-endif(VISP_FOUND)
 
-# build the examples
-add_executable(tutorial-mb-edge-tracker tutorial-mb-edge-tracker.cpp)
+# set the list of source files
+set(tutorial_cpp
+  tutorial-mb-edge-tracker.cpp)
 
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/teabox.pgm" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/teabox.xml" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/teabox.cao" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/teabox.wrl" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/teabox.init" )
 
-# copy the data
-get_target_property(target_location tutorial-mb-edge-tracker LOCATION)
-get_filename_component(target_location "${target_location}" PATH)
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/teabox.pgm" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/teabox.xml" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/teabox.cao" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/teabox.init" )
-foreach(data ${data2copy})
-  add_custom_command(
-    TARGET tutorial-mb-edge-tracker
-    POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy "${data}" "${target_location}"
-  )
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
+
+# Copy the data files to the same location than the target
+foreach(data ${tutorial_data})
+  visp_copy_data(tutorial-mb-edge-tracker.cpp ${data})
 endforeach()
diff --git a/tutorial/tracking/model-based/edges/teabox.wrl b/tutorial/tracking/model-based/edges/teabox.wrl
new file mode 100644
index 00000000..a452ea0b
--- /dev/null
+++ b/tutorial/tracking/model-based/edges/teabox.wrl
@@ -0,0 +1,33 @@
+#VRML V2.0 utf8
+
+DEF fst_0 Group {
+children [
+
+# Object "teabox"
+Shape {
+
+geometry DEF cube IndexedFaceSet {
+
+coord Coordinate { 
+point [
+0     0      0   ,
+0     0     -0.08,
+0.165 0     -0.08,
+0.165 0      0   ,
+0.165 0.068  0   ,
+0.165 0.068 -0.08,
+0     0.068 -0.08,
+0     0.068  0    ]
+}
+
+coordIndex [
+ 0,1,2,3,-1,
+ 1,6,5,2,-1,
+ 4,5,6,7,-1,
+ 0,3,4,7,-1,
+ 5,4,3,2,-1,
+ 0,7,6,1,-1]}
+}
+
+]
+}
diff --git a/tutorial/tracking/model-based/edges/teabox.xml b/tutorial/tracking/model-based/edges/teabox.xml
index c8a31267..38697045 100644
--- a/tutorial/tracking/model-based/edges/teabox.xml
+++ b/tutorial/tracking/model-based/edges/teabox.xml
@@ -18,16 +18,18 @@
     <step>4</step>
     <nb_sample>250</nb_sample>
   </sample>
-  <face>
-    <near_clipping>0.1</near_clipping>
-    <far_clipping>100</far_clipping>
-    <fov_clipping>1</fov_clipping>
-  </face>
   <camera>
     <u0>325.66776</u0> 
     <v0>243.69727</v0> 
     <px>839.21470</px> 
     <py>839.44555</py> 
   </camera>
+  <face>
+    <angle_appear>70</angle_appear>
+    <angle_disappear>80</angle_disappear>
+    <near_clipping>0.1</near_clipping>
+    <far_clipping>100</far_clipping>
+    <fov_clipping>1</fov_clipping>
+  </face>
 </conf>
 
diff --git a/tutorial/tracking/model-based/edges/tutorial-mb-edge-tracker.cpp b/tutorial/tracking/model-based/edges/tutorial-mb-edge-tracker.cpp
index 1ee84758..5852550a 100644
--- a/tutorial/tracking/model-based/edges/tutorial-mb-edge-tracker.cpp
+++ b/tutorial/tracking/model-based/edges/tutorial-mb-edge-tracker.cpp
@@ -6,62 +6,70 @@
 
 int main()
 {
-  vpImage<unsigned char> I;
-  vpCameraParameters cam;
-  vpHomogeneousMatrix cMo;
+  try {
+    vpImage<unsigned char> I;
+    vpCameraParameters cam;
+    vpHomogeneousMatrix cMo;
 
-  vpImageIo::read(I, "teabox.pgm");
+    vpImageIo::read(I, "teabox.pgm");
 
 #if defined(VISP_HAVE_X11)
-  vpDisplayX display(I,100,100,"Model-based edge tracker");;
+    vpDisplayX display(I,100,100,"Model-based edge tracker");;
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI display(I,100,100,"Model-based edge tracker");;
+    vpDisplayGDI display(I,100,100,"Model-based edge tracker");;
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  vpMbEdgeTracker tracker;
+    vpMbEdgeTracker tracker;
 #ifdef VISP_HAVE_XML2
-  tracker.loadConfigFile("teabox.xml");
+    tracker.loadConfigFile("teabox.xml");
 #else
-  vpMe me;
-  me.setMaskSize(5);
-  me.setMaskNumber(180);
-  me.setRange(8);
-  me.setThreshold(10000);
-  me.setMu1(0.5);
-  me.setMu2(0.5);
-  me.setSampleStep(4);
-  me.setNbTotalSample(250);
-  tracker.setMovingEdge(me);
-  cam.initPersProjWithoutDistortion(839, 839, 325, 243);
-  tracker.setCameraParameters(cam);
-  tracker.setNearClippingDistance(0.1);
-  tracker.setFarClippingDistance(100.0);
-  tracker.setClipping(tracker.getClipping() | vpMbtPolygon::FOV_CLIPPING);
+    vpMe me;
+    me.setMaskSize(5);
+    me.setMaskNumber(180);
+    me.setRange(8);
+    me.setThreshold(10000);
+    me.setMu1(0.5);
+    me.setMu2(0.5);
+    me.setSampleStep(4);
+    me.setNbTotalSample(250);
+    tracker.setMovingEdge(me);
+    cam.initPersProjWithoutDistortion(839, 839, 325, 243);
+    tracker.setCameraParameters(cam);
+    tracker.setAngleAppear( vpMath::rad(70) );
+    tracker.setAngleDisappear( vpMath::rad(80) );
+    tracker.setNearClippingDistance(0.1);
+    tracker.setFarClippingDistance(100.0);
+    tracker.setClipping(tracker.getClipping() | vpMbtPolygon::FOV_CLIPPING);
 #endif
-  tracker.setDisplayFeatures(true);
-  tracker.setOgreVisibilityTest(false);
-  tracker.loadModel("teabox.cao");
-  tracker.initClick(I, "teabox.init");
+    tracker.setOgreVisibilityTest(false);
+    tracker.loadModel("teabox.cao");
+    //tracker.loadModel("teabox.wrl");
+    tracker.setDisplayFeatures(true);
+    tracker.initClick(I, "teabox.init");
 
-  while(1){
-    vpDisplay::display(I);
-    tracker.track(I);
-    tracker.getPose(cMo);
-    tracker.getCameraParameters(cam);
-    tracker.display(I, cMo, cam, vpColor::red, 2);
-    vpDisplay::displayFrame(I, cMo, cam, 0.025, vpColor::none, 3);
-    vpDisplay::flush(I);
+    while(1){
+      vpDisplay::display(I);
+      tracker.track(I);
+      tracker.getPose(cMo);
+      tracker.getCameraParameters(cam);
+      tracker.display(I, cMo, cam, vpColor::red, 2);
+      vpDisplay::displayFrame(I, cMo, cam, 0.025, vpColor::none, 3);
+      vpDisplay::flush(I);
 
-    if (vpDisplay::getClick(I, false))
-      break;
-    vpTime::wait(40);
-  }
+      if (vpDisplay::getClick(I, false))
+        break;
+      vpTime::wait(40);
+    }
 #ifdef VISP_HAVE_XML2
-  vpXmlParser::cleanup();
+    vpXmlParser::cleanup();
 #endif
 #ifdef VISP_HAVE_COIN
-  SoDB::finish();
+    SoDB::finish();
 #endif
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
 }
diff --git a/tutorial/tracking/model-based/hybrid/CMakeLists.txt b/tutorial/tracking/model-based/hybrid/CMakeLists.txt
index 220abfa3..55f43330 100644
--- a/tutorial/tracking/model-based/hybrid/CMakeLists.txt
+++ b/tutorial/tracking/model-based/hybrid/CMakeLists.txt
@@ -3,24 +3,21 @@ project(tutorial-tracking-mb-hybrid)
 cmake_minimum_required(VERSION 2.6)
 
 find_package(VISP REQUIRED)
-if(VISP_FOUND)
-  include(${VISP_USE_FILE})
-endif(VISP_FOUND)
 
-# build the examples
-add_executable(tutorial-mb-hybrid-tracker tutorial-mb-hybrid-tracker.cpp)
+# set the list of source files
+set(tutorial_cpp
+  tutorial-mb-hybrid-tracker.cpp)
 
-# copy the data
-get_target_property(target_location tutorial-mb-hybrid-tracker LOCATION)
-get_filename_component(target_location "${target_location}" PATH)
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/teabox.pgm" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/teabox.xml" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/teabox.cao" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/teabox.init" )
-foreach(data ${data2copy})
-  add_custom_command(
-    TARGET tutorial-mb-hybrid-tracker
-    POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy "${data}" "${target_location}"
-  )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/teabox.pgm" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/teabox.xml" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/teabox.cao" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/teabox.init" )
+
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
+
+# Copy the data files to the same location than the target
+foreach(data ${tutorial_data})
+  visp_copy_data(tutorial-mb-hybrid-tracker.cpp ${data})
 endforeach()
diff --git a/tutorial/tracking/model-based/hybrid/teabox.xml b/tutorial/tracking/model-based/hybrid/teabox.xml
index d25cdf11..41a1afbf 100644
--- a/tutorial/tracking/model-based/hybrid/teabox.xml
+++ b/tutorial/tracking/model-based/hybrid/teabox.xml
@@ -18,13 +18,6 @@
     <step>4</step>
     <nb_sample>250</nb_sample>
   </sample>
-  <face>
-    <angle_appear>70</angle_appear> 
-    <angle_disappear>80</angle_disappear> 
-    <near_clipping>0.1</near_clipping>
-    <far_clipping>100</far_clipping>
-    <fov_clipping>1</fov_clipping>
-  </face>
   <klt>
     <mask_border>5</mask_border> 
     <max_features>300</max_features> 
@@ -41,5 +34,12 @@
     <px>839.21470</px> 
     <py>839.44555</py> 
   </camera>
+  <face>
+    <angle_appear>70</angle_appear> 
+    <angle_disappear>80</angle_disappear> 
+    <near_clipping>0.1</near_clipping>
+    <far_clipping>100</far_clipping>
+    <fov_clipping>1</fov_clipping>
+  </face>
 </conf>
 
diff --git a/tutorial/tracking/model-based/hybrid/tutorial-mb-hybrid-tracker.cpp b/tutorial/tracking/model-based/hybrid/tutorial-mb-hybrid-tracker.cpp
index 1e5b22c1..630546e5 100644
--- a/tutorial/tracking/model-based/hybrid/tutorial-mb-hybrid-tracker.cpp
+++ b/tutorial/tracking/model-based/hybrid/tutorial-mb-hybrid-tracker.cpp
@@ -7,77 +7,81 @@
 int main()
 {
 #ifdef VISP_HAVE_OPENCV
-  vpImage<unsigned char> I;
-  vpCameraParameters cam;
-  vpHomogeneousMatrix cMo;
+  try {
+    vpImage<unsigned char> I;
+    vpCameraParameters cam;
+    vpHomogeneousMatrix cMo;
 
-  vpImageIo::read(I, "teabox.pgm");
+    vpImageIo::read(I, "teabox.pgm");
 
 #if defined(VISP_HAVE_X11)
-  vpDisplayX display(I,100,100,"Model-based hybrid tracker");;
+    vpDisplayX display(I,100,100,"Model-based hybrid tracker");;
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI display(I,100,100,"Model-based hybrid tracker");;
+    vpDisplayGDI display(I,100,100,"Model-based hybrid tracker");;
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  vpMbEdgeKltTracker tracker;
+    vpMbEdgeKltTracker tracker;
 #ifdef VISP_HAVE_XML2
-  tracker.loadConfigFile("teabox.xml");
+    tracker.loadConfigFile("teabox.xml");
 #else
-  vpMe me;
-  me.setMaskSize(5);
-  me.setMaskNumber(180);
-  me.setRange(8);
-  me.setThreshold(10000);
-  me.setMu1(0.5);
-  me.setMu2(0.5);
-  me.setSampleStep(4);
-  me.setNbTotalSample(250);
-  tracker.setMovingEdge(me);
-  tracker.setAngleAppear(70);
-  tracker.setAngleDisappear(80);
-  tracker.setMaskBorder(5);
-  vpKltOpencv klt_settings;
-  klt_settings.setMaxFeatures(300);
-  klt_settings.setWindowSize(5);
-  klt_settings.setQuality(0.015);
-  klt_settings.setMinDistance(8);
-  klt_settings.setHarrisFreeParameter(0.01);
-  klt_settings.setBlockSize(3);
-  klt_settings.setPyramidLevels(3);
-  tracker.setKltOpencv(klt_settings);
-  cam.initPersProjWithoutDistortion(839, 839, 325, 243);
-  tracker.setCameraParameters(cam);
-  tracker.setNearClippingDistance(0.1);
-  tracker.setFarClippingDistance(100.0);
-  tracker.setClipping(tracker.getClipping() | vpMbtPolygon::FOV_CLIPPING);
+    vpMe me;
+    me.setMaskSize(5);
+    me.setMaskNumber(180);
+    me.setRange(8);
+    me.setThreshold(10000);
+    me.setMu1(0.5);
+    me.setMu2(0.5);
+    me.setSampleStep(4);
+    me.setNbTotalSample(250);
+    tracker.setMovingEdge(me);
+    tracker.setMaskBorder(5);
+    vpKltOpencv klt_settings;
+    klt_settings.setMaxFeatures(300);
+    klt_settings.setWindowSize(5);
+    klt_settings.setQuality(0.015);
+    klt_settings.setMinDistance(8);
+    klt_settings.setHarrisFreeParameter(0.01);
+    klt_settings.setBlockSize(3);
+    klt_settings.setPyramidLevels(3);
+    tracker.setKltOpencv(klt_settings);
+    cam.initPersProjWithoutDistortion(839, 839, 325, 243);
+    tracker.setCameraParameters(cam);
+    tracker.setAngleAppear( vpMath::rad(70) );
+    tracker.setAngleDisappear( vpMath::rad(80) );
+    tracker.setNearClippingDistance(0.1);
+    tracker.setFarClippingDistance(100.0);
+    tracker.setClipping(tracker.getClipping() | vpMbtPolygon::FOV_CLIPPING);
 #endif
-  tracker.setDisplayFeatures(true);
-  tracker.setOgreVisibilityTest(true);
-  tracker.loadModel("teabox.cao");
-  tracker.initClick(I, "teabox.init");
+    tracker.setOgreVisibilityTest(true);
+    tracker.loadModel("teabox.cao");
+    tracker.setDisplayFeatures(true);
+    tracker.initClick(I, "teabox.init");
 
-  while(1){
-    vpDisplay::display(I);
-    tracker.track(I);
-    tracker.getPose(cMo);
-    tracker.getCameraParameters(cam);
-    tracker.display(I, cMo, cam, vpColor::red, 2, true);
-    vpDisplay::displayFrame(I, cMo, cam, 0.025, vpColor::none, 3);
-    vpDisplay::flush(I);
+    while(1){
+      vpDisplay::display(I);
+      tracker.track(I);
+      tracker.getPose(cMo);
+      tracker.getCameraParameters(cam);
+      tracker.display(I, cMo, cam, vpColor::red, 2, true);
+      vpDisplay::displayFrame(I, cMo, cam, 0.025, vpColor::none, 3);
+      vpDisplay::flush(I);
 
-    if (vpDisplay::getClick(I, false))
-      break;
-    vpTime::wait(40);
-  }
+      if (vpDisplay::getClick(I, false))
+        break;
+      vpTime::wait(40);
+    }
 
 #ifdef VISP_HAVE_XML2
-  vpXmlParser::cleanup();
+    vpXmlParser::cleanup();
 #endif
 #ifdef VISP_HAVE_COIN
-  SoDB::finish();
+    SoDB::finish();
 #endif
-
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
 #endif
 }
diff --git a/tutorial/tracking/model-based/keypoint/CMakeLists.txt b/tutorial/tracking/model-based/keypoint/CMakeLists.txt
index 164edb88..52732209 100644
--- a/tutorial/tracking/model-based/keypoint/CMakeLists.txt
+++ b/tutorial/tracking/model-based/keypoint/CMakeLists.txt
@@ -3,25 +3,22 @@ project(tutorial-tracking-mb-keypoint)
 cmake_minimum_required(VERSION 2.6)
 
 find_package(VISP REQUIRED)
-if(VISP_FOUND)
-  include(${VISP_USE_FILE})
-endif(VISP_FOUND)
 
-# build the examples
-add_executable(tutorial-mb-klt-tracker tutorial-mb-klt-tracker.cpp)
+# set the list of source files
+set(tutorial_cpp
+  tutorial-mb-klt-tracker.cpp)
 
-# copy the data
-get_target_property(target_location tutorial-mb-klt-tracker LOCATION)
-get_filename_component(target_location "${target_location}" PATH)
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/teabox.pgm" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/teabox.xml" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/teabox.cao" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/teabox-triangle.cao" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/teabox.init" )
-foreach(data ${data2copy})
-  add_custom_command(
-    TARGET tutorial-mb-klt-tracker
-    POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy "${data}" "${target_location}"
-  )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/teabox.pgm" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/teabox.xml" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/teabox.cao" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/teabox-triangle.cao" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/teabox.init" )
+
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
+
+# Copy the data files to the same location than the target
+foreach(data ${tutorial_data})
+  visp_copy_data(tutorial-mb-klt-tracker.cpp ${data})
 endforeach()
diff --git a/tutorial/tracking/model-based/keypoint/teabox.xml b/tutorial/tracking/model-based/keypoint/teabox.xml
index 0937e9ee..6e1762b4 100644
--- a/tutorial/tracking/model-based/keypoint/teabox.xml
+++ b/tutorial/tracking/model-based/keypoint/teabox.xml
@@ -1,12 +1,5 @@
 <?xml version="1.0"?>
 <conf>
-  <face>
-    <angle_appear>70</angle_appear> 
-    <angle_disappear>80</angle_disappear> 
-    <near_clipping>0.1</near_clipping>
-    <far_clipping>100</far_clipping>
-    <fov_clipping>1</fov_clipping>
-  </face>
   <klt>
     <mask_border>5</mask_border> 
     <max_features>300</max_features> 
@@ -23,5 +16,12 @@
     <px>839.21470</px> 
     <py>839.44555</py> 
   </camera>
+  <face>
+    <angle_appear>70</angle_appear> 
+    <angle_disappear>80</angle_disappear> 
+    <near_clipping>0.1</near_clipping>
+    <far_clipping>100</far_clipping>
+    <fov_clipping>1</fov_clipping>
+  </face>
 </conf>
 
diff --git a/tutorial/tracking/model-based/keypoint/tutorial-mb-klt-tracker.cpp b/tutorial/tracking/model-based/keypoint/tutorial-mb-klt-tracker.cpp
index 46582ded..b8346300 100644
--- a/tutorial/tracking/model-based/keypoint/tutorial-mb-klt-tracker.cpp
+++ b/tutorial/tracking/model-based/keypoint/tutorial-mb-klt-tracker.cpp
@@ -7,67 +7,72 @@
 int main()
 {
 #ifdef VISP_HAVE_OPENCV
-  vpImage<unsigned char> I;
-  vpCameraParameters cam;
-  vpHomogeneousMatrix cMo;
+  try {
+    vpImage<unsigned char> I;
+    vpCameraParameters cam;
+    vpHomogeneousMatrix cMo;
 
-  vpImageIo::read(I, "teabox.pgm");
+    vpImageIo::read(I, "teabox.pgm");
 
 #if defined(VISP_HAVE_X11)
-  vpDisplayX display(I,100,100,"Model-based keypoints tracker");;
+    vpDisplayX display(I,100,100,"Model-based keypoints tracker");;
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI display(I,100,100,"Model-based keypoints tracker");;
+    vpDisplayGDI display(I,100,100,"Model-based keypoints tracker");;
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  vpMbKltTracker tracker;
+    vpMbKltTracker tracker;
 #ifdef VISP_HAVE_XML2
-  tracker.loadConfigFile("teabox.xml");
+    tracker.loadConfigFile("teabox.xml");
 #else
-  tracker.setAngleAppear(70);
-  tracker.setAngleDisappear(80);
-  tracker.setMaskBorder(5);
-  vpKltOpencv klt_settings;
-  klt_settings.setMaxFeatures(300);
-  klt_settings.setWindowSize(5);
-  klt_settings.setQuality(0.015);
-  klt_settings.setMinDistance(8);
-  klt_settings.setHarrisFreeParameter(0.01);
-  klt_settings.setBlockSize(3);
-  klt_settings.setPyramidLevels(3);
-  tracker.setKltOpencv(klt_settings);
-  cam.initPersProjWithoutDistortion(839, 839, 325, 243);
-  tracker.setCameraParameters(cam);
-  tracker.setNearClippingDistance(0.1);
-  tracker.setFarClippingDistance(100.0);
-  tracker.setClipping(tracker.getClipping() | vpMbtPolygon::FOV_CLIPPING);
+    tracker.setMaskBorder(5);
+    vpKltOpencv klt_settings;
+    klt_settings.setMaxFeatures(300);
+    klt_settings.setWindowSize(5);
+    klt_settings.setQuality(0.015);
+    klt_settings.setMinDistance(8);
+    klt_settings.setHarrisFreeParameter(0.01);
+    klt_settings.setBlockSize(3);
+    klt_settings.setPyramidLevels(3);
+    tracker.setKltOpencv(klt_settings);
+    cam.initPersProjWithoutDistortion(839, 839, 325, 243);
+    tracker.setCameraParameters(cam);
+    tracker.setAngleAppear( vpMath::rad(70) );
+    tracker.setAngleDisappear( vpMath::rad(80) );
+    tracker.setNearClippingDistance(0.1);
+    tracker.setFarClippingDistance(100.0);
+    tracker.setClipping(tracker.getClipping() | vpMbtPolygon::FOV_CLIPPING);
 #endif
-  tracker.setDisplayFeatures(true);
-  tracker.setOgreVisibilityTest(true);
-  tracker.loadModel("teabox-triangle.cao");
-  tracker.initClick(I, "teabox.init");
+    tracker.setOgreVisibilityTest(true);
+    tracker.loadModel("teabox-triangle.cao");
+    tracker.setDisplayFeatures(true);
+    tracker.initClick(I, "teabox.init");
 
-  while(1){
-    vpDisplay::display(I);
-    tracker.track(I);
-    tracker.getPose(cMo);
-    tracker.getCameraParameters(cam);
-    tracker.display(I, cMo, cam, vpColor::red, 2, true);
-    vpDisplay::displayFrame(I, cMo, cam, 0.025, vpColor::none, 3);
-    vpDisplay::flush(I);
+    while(1){
+      vpDisplay::display(I);
+      tracker.track(I);
+      tracker.getPose(cMo);
+      tracker.getCameraParameters(cam);
+      tracker.display(I, cMo, cam, vpColor::red, 2, true);
+      vpDisplay::displayFrame(I, cMo, cam, 0.025, vpColor::none, 3);
+      vpDisplay::flush(I);
 
-    if (vpDisplay::getClick(I, false))
-      break;
-    vpTime::wait(40);
-  }
+      if (vpDisplay::getClick(I, false))
+        break;
+      vpTime::wait(40);
+    }
 
 #ifdef VISP_HAVE_XML2
-  vpXmlParser::cleanup();
+    vpXmlParser::cleanup();
 #endif
 #ifdef VISP_HAVE_COIN
-  SoDB::finish();
+    SoDB::finish();
 #endif
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
 
 #endif
 }
diff --git a/tutorial/tracking/moving-edges/CMakeLists.txt b/tutorial/tracking/moving-edges/CMakeLists.txt
index 93d9a6de..e1e7dd34 100644
--- a/tutorial/tracking/moving-edges/CMakeLists.txt
+++ b/tutorial/tracking/moving-edges/CMakeLists.txt
@@ -3,10 +3,12 @@ project(tutorial-tracking-me)
 cmake_minimum_required(VERSION 2.6)
 
 find_package(VISP REQUIRED)
-if(VISP_FOUND)
-  include(${VISP_USE_FILE})
-endif(VISP_FOUND)
 
-# build the examples
-add_executable(tutorial-me-ellipse-tracker tutorial-me-ellipse-tracker.cpp)
-add_executable(tutorial-me-line-tracker tutorial-me-line-tracker.cpp)
+# set the list of source files
+set(tutorial_cpp
+  tutorial-me-ellipse-tracker.cpp
+  tutorial-me-line-tracker.cpp)
+
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
diff --git a/tutorial/tracking/moving-edges/tutorial-me-ellipse-tracker.cpp b/tutorial/tracking/moving-edges/tutorial-me-ellipse-tracker.cpp
index 319762e0..19b8fa40 100644
--- a/tutorial/tracking/moving-edges/tutorial-me-ellipse-tracker.cpp
+++ b/tutorial/tracking/moving-edges/tutorial-me-ellipse-tracker.cpp
@@ -9,46 +9,50 @@
 int main()
 {
 #if (defined(VISP_HAVE_DC1394_2) || defined(VISP_HAVE_CMU1394) || defined(VISP_HAVE_V4L2))
-
-  vpImage<unsigned char> I; 
+  try {
+    vpImage<unsigned char> I;
 
 #if defined(VISP_HAVE_DC1394_2)
-  vp1394TwoGrabber g(false);
+    vp1394TwoGrabber g(false);
 #elif defined(VISP_HAVE_CMU1394)
-  vp1394CMUGrabber g;
+    vp1394CMUGrabber g;
 #elif defined(VISP_HAVE_V4L2)
-  vpV4l2Grabber g;     
+    vpV4l2Grabber g;
 #endif
-  g.open(I);
-  g.acquire(I);
+    g.open(I);
+    g.acquire(I);
 
 #if defined(VISP_HAVE_X11)
-  vpDisplayX d(I, 0, 0, "Camera view");
+    vpDisplayX d(I, 0, 0, "Camera view");
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI d(I, 0, 0, "Camera view");
+    vpDisplayGDI d(I, 0, 0, "Camera view");
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  vpDisplay::display(I);
-  vpDisplay::flush(I);
-
-  vpMe me;
-  me.setRange(25);
-  me.setThreshold(15000);
-  me.setSampleStep(10);
-
-  vpMeEllipse ellipse;
-  ellipse.setMe(&me);
-  ellipse.setDisplay(vpMeSite::RANGE_RESULT);
-  ellipse.initTracking(I);
- 
-  while(1) {
-    g.acquire(I); 
     vpDisplay::display(I);
-    ellipse.track(I);
-    ellipse.display(I, vpColor::red);
     vpDisplay::flush(I);
+
+    vpMe me;
+    me.setRange(25);
+    me.setThreshold(15000);
+    me.setSampleStep(10);
+
+    vpMeEllipse ellipse;
+    ellipse.setMe(&me);
+    ellipse.setDisplay(vpMeSite::RANGE_RESULT);
+    ellipse.initTracking(I);
+
+    while(1) {
+      g.acquire(I);
+      vpDisplay::display(I);
+      ellipse.track(I);
+      ellipse.display(I, vpColor::red);
+      vpDisplay::flush(I);
+    }
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
 #endif
 }
diff --git a/tutorial/tracking/moving-edges/tutorial-me-line-tracker.cpp b/tutorial/tracking/moving-edges/tutorial-me-line-tracker.cpp
index 4881a04f..e01f9f67 100644
--- a/tutorial/tracking/moving-edges/tutorial-me-line-tracker.cpp
+++ b/tutorial/tracking/moving-edges/tutorial-me-line-tracker.cpp
@@ -9,46 +9,50 @@
 int main()
 {
 #if (defined(VISP_HAVE_DC1394_2) || defined(VISP_HAVE_CMU1394) || defined(VISP_HAVE_V4L2))
-
-  vpImage<unsigned char> I; 
+  try {
+    vpImage<unsigned char> I;
 
 #if defined(VISP_HAVE_DC1394_2)
-  vp1394TwoGrabber g(false);
+    vp1394TwoGrabber g(false);
 #elif defined(VISP_HAVE_CMU1394)
-  vp1394CMUGrabber g;
+    vp1394CMUGrabber g;
 #elif defined(VISP_HAVE_V4L2)
-  vpV4l2Grabber g;     
+    vpV4l2Grabber g;
 #endif
-  g.open(I);
-  g.acquire(I);
+    g.open(I);
+    g.acquire(I);
 
 #if defined(VISP_HAVE_X11)
-  vpDisplayX d(I, 0, 0, "Camera view");
+    vpDisplayX d(I, 0, 0, "Camera view");
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI d(I, 0, 0, "Camera view");
+    vpDisplayGDI d(I, 0, 0, "Camera view");
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  vpDisplay::display(I);
-  vpDisplay::flush(I);
-
-  vpMe me;
-  me.setRange(25);
-  me.setThreshold(15000);
-  me.setSampleStep(10);
-
-  vpMeLine line;
-  line.setMe(&me);
-  line.setDisplay(vpMeSite::RANGE_RESULT);
-  line.initTracking(I);
- 
-  while(1) {
-    g.acquire(I); 
     vpDisplay::display(I);
-    line.track(I);
-    line.display(I, vpColor::red);
     vpDisplay::flush(I);
+
+    vpMe me;
+    me.setRange(25);
+    me.setThreshold(15000);
+    me.setSampleStep(10);
+
+    vpMeLine line;
+    line.setMe(&me);
+    line.setDisplay(vpMeSite::RANGE_RESULT);
+    line.initTracking(I);
+
+    while(1) {
+      g.acquire(I);
+      vpDisplay::display(I);
+      line.track(I);
+      line.display(I, vpColor::red);
+      vpDisplay::flush(I);
+    }
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
 #endif
 }
diff --git a/tutorial/tracking/template-tracker/CMakeLists.txt b/tutorial/tracking/template-tracker/CMakeLists.txt
new file mode 100644
index 00000000..385c9d63
--- /dev/null
+++ b/tutorial/tracking/template-tracker/CMakeLists.txt
@@ -0,0 +1,20 @@
+project(tutorial-tracking-template)
+
+cmake_minimum_required(VERSION 2.6)
+
+find_package(VISP REQUIRED)
+
+# set the list of source files
+set(tutorial_cpp
+  tutorial-template-tracker.cpp)
+
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/pattern-template-tracker.pgm" )
+
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
+
+# Copy the data files to the same location than the target
+foreach(data ${tutorial_data})
+  visp_copy_data(tutorial-template-tracker.cpp ${data})
+endforeach()
diff --git a/tutorial/tracking/template-tracker/pattern-template-tracker.pgm b/tutorial/tracking/template-tracker/pattern-template-tracker.pgm
new file mode 100644
index 00000000..a9c08148
--- /dev/null
+++ b/tutorial/tracking/template-tracker/pattern-template-tracker.pgm
@@ -0,0 +1,4440 @@
+P5
+# CREATOR: GIMP PNM Filter Version 1.1
+640 480
+255
+>>?@?AAAAA@@@@?A@@?ABA??ACCBABBDCABCCDDDDCCCCCCDEEDCDDABDFDBDEEEEFEDDFFEFGDDDBEGEEEEDEFFCDECCDDEGHHHHGGFGGGGGIIHHJIGHIIHGIHHGHGHIJIIKLJHJHIKKKMMLKJKKKKLLMMMMLKKIKLLLMMMNNMLLNNKKMMLLKJJLNNMKNNLLMNONNMLLQPNNNMNOOMOQQPOOOONOPPOPPOOOOONNOPPQQQRQOPRRRQPPSQPQQQTTSPQTSSSTRRRSSTTPPQTVUVUTUUSQRTVUTTTVWWWVUUVVVYYWVWYXVVXXZZZZ[[Z[]\Y\\[YZ\[[[\[[]^_`][]`_]^_`aa`aaabbbbca_b`bccefdddfgffefgghgdfgjihhgghhjihijmnmmmooopommlmnopolhkkihggfeedbcaaaa_^]YZZXVTSPNNMHFFEEDB@>;:9974320./-((''&%" 
+			
+			
+  !! 
+
+					
+
+		
+>>?=?@A@@@@?@AAAABA@AA@???AAABBCCABCB@CCCABAB@CCCDCBDDCCDEEBDDDADEDCFGFDEFDEEBDFFEEEEDFGEDDCDDDEGGHHFDGGHIFFEIJIJIGGIIIIIIHIHEGGIIJKLLKIKIJJJIMMMIIJIGJJKFJJLMMLMMLKMMLIMNLGLNNLLNMKLJJKMOONLHLJMOPONKNNNOOMNONNOONOOMOOOPQPONOPQQQMMNOKNORSROPPQPQRTTRNPRQNRTSQTSTSSSSSSRRSSPTTTPTUUTUQSRUSSUWWWUTUVWWVVVUUTUYXXWXZXWXYZZZZYY[YZ[[X\\[[\\\[[ZYY[^``_Y]`a`_```__aabcbbcdb^baabdffdfffedaefgchhggghijhehijjiiijklnllnpqpimkmmoopjggkjighihdfdccbba]a^]Y[[YSSSRNPNKGGEFDB@?=;686623./.-()(($&!  
				
  "!!


+
+	
+
+<=>??@@?@A=>@BBAACA@AA@??@ABBBBBABCCA?BDCCCBB@BB@CCDDDCC@DEDCBBCCDBDFGEDDDDEEEDEEECDEFFFFECDEEDFGGGHEEGHIJFFEHHJJGEGHIIIFFFHIHHIFGIKLMKJKKJJIJMNMKJJGHIJKJKLJMMMMMLLMMKJKMLKMMLLMNMNMLMNLNOPNLLMNOPQONOPOOONJPNOPONNMNOPQRQQPNNPQQQQQONNPQSTRPPPQPQQSSRQQQPPTVTQTUTTTSRRRSTSSRSTTUUVUTTSSTTRSWXWXWTTTVWVVVUUTTWXWWYZYWWZZXYYVY[YWZ[[\]\\\\\\\\[[]^_`^Z\^`a`_`_^_abbcccccb^cddcefedegfcbaeihgghggggiiihhijikkkiknmllnoponmkmmnpnlkklljiijiihgecbbbbbb^\[ZYYXVSRQOLJIHGFC@@=<;8677541.,++)((&$"!! 				 !#$"!		
+
+<;=>??@>@@?>@AAAB@@@BAA>@AA?BBAAABCBA@CDDDCBB@BBAACDDBBCDEECDDDBDDEEGHGEEEFFFEEDFEDCEFEFFCCCFFFGGFGGGGHIIHGFFGIJJGGGHGJJHGGGJJJJHGHIKLLHKKJJJGLLKJKKKKKKLLMMMMMMMMLLLJLKLKLJNONLLMNNNHLNNMNKONNNOOPPOMNKNOPNNOPQQPPMNNPPQQPQPLOPPQSRRQPNQQRPRKPOOPQQPPRRRRRRTSRQUUUSTPRRSSTSSOTPQSUVURUTSTTSVWWSVVUTUUWWVSUTTRVUXYZXZTWZZXYYYYZYXY[\\[\[\]]]]X\\\Z[\_Z\[^_`\`^`bcab_bccbb`dedbeeeaebgeddddikigfeggihihhhiiklkhknnjjjnnnjmllgljpnmmnlljjfihhadcc^cdcb`^\XXYZUTRQPOLLGHGE@B>=<:8:8655//+-))'(&%!"  
+			
+"!  !		
+	<=??>>??@@?@@@<AB@>BBBCBA@?@BC@@@BCCCBBCDCBCCBBBABACCBCEFEEDEFEEDDEFFHGFCFGGFGGFFGFDCFFEFEDEFFFGFEEFGIJIGGFFFHIJJIGGIJJJIIJKKJJKJJIIJLKKMNMLKKLLKJLMLMMLKKKLMNONLLMMLLLLMMLKLONKKLMNMLMNMMMNOQPOOOPPMONLMOOMNOPRRPPOPQPOPOOOOOOQOQRQOQQRRQPQQPPRRRSSQOQRRRRRSRSUVVTTTSSSSTUSSSSPQRSVUTVWVWXXXWVTVVVVVVVWVUUWWWVXZ[ZZYVWYYYXYZYYZYXZ[[[[\]_^]^]]]\\^`_]]^^]_a_]abbbaaaccbccbddffefgfggfhhfciljhghhhiifijhhilmmklmmmkilomjllkhloopmlllkjiihhfdcedddfdc__^^^^[XURSQPMMKHGGFDC@=<9::887421.+))))&"!  

+								
+
  !! 		
+

+
+?@A?@@@@A???A@??AAAABBCAA@BCDBBBAACBBBBBBCCCDDC@BBBCC@CEEDCCDDFFECDBFGHGFEGCGHHFGGFEEFFFDDEDFGGGEDDFHJJGHHHHIIIIHGFDIJKKIGKKKJKKKIIGJIKLLMLKKFKLKHKKKLLJIIIILNOOMHMMLKLIMMLKKNMKKFLNNNMLMLMJOOPLOPPOOPNMMMMMNNPQQPOKQQQMONMMPPPQRQQPPOSSSPPPOOQRRRTTSPPQSSRRROTUUUTSTTTRTUUSRRRQRSUUUUVTUUXYXUUTUVVVUUWWWSVWXVVWZXYUYVXVYUXXYXXXYY[XZZ\]_[^]^]^^][`a_]_``^``a^aa`]a`b^cbbccddffefgffhfiihejjjehiiejkjkkfgilnnlmmmllimjnkkkkjoooklfikljkghfgbd^eeeddda``]`^\UTRUSRMOKJFGHFAC??9:8:68521.*+)*''#" 	
+
+		
+		
+
+	  	
+	@AAA@@@AAA=>@@@??AA@?ABBAABCDDCCCBBA@AABCCDFDEDCCCBDDCDEDDCBEDEFCCDCEGHHGFFGHIHHGGEFFEEEBEFHGGHHDDEGHIIHHHIIIIIHFFEFILIJHFIIILLLJIIJJIHIIIHJJJJLKKKKJLJHHJKLLMOPMKLLJKMMMLLLKMMLLKLNOOOONMMKOPPPQRQNOPOMNNNOMMNQPPNOQRRRRQONPQQQRRQQQQSSROPPPQRRSSSTSRRRRSRQQOTUQTTTTUTSSTTSSRSTTUTTTTTTTTWWWVUSUVVVUVX[XVWWWXXWXUWYYXWVYYY[[\\[Z[\\\[[\^_^_^]]^][`b`^_`a`aabccc`]acbbbcacdedfgffgghgghiijjkifgihhjkklljhimonnmmklmnnponljmlnonkljijklkjiihgfgggfbddcbaa`^[YWVWWTRPLLGIJECDEB><;::951/..-++)(&$#! 							
+
+
+		
+
+
   
+
+?@AAA?BBAA?>@AA>@AA?ABBAABBCB@CCDCC??AACDDDEDDDDDEEDDDEECCDBEDEEDCEDFEGGGGFFHDIGFGHFFDFGFGHHGEHHGEFGHHHHGCHIHGHHHHHHKLJJIGJHJKLJIFJLKJJIIHHIJJKKKLKHJIIIJLMLNKNNNMMKKLNNMLLMMLMLNMMOPNOOOLMLOPPOPQQOPPPOOPQOOOQRQPOPRRSUTRQNPRQORRQQQRRSRQQOPQTTTRSQSRSSTQQPROSSTUTSTTURRRSSSQTUUPTRTTTUVTUTVVURUWWUWWYZYUWWVXYWUTWXXXWWZY[Z[\^[[\\\\Y[Z\]^^^^]\[[^aaZ_\```acbbaa_bba`deeceddfgffcfgfcggiikkiggggfiilkkkkionponllklmpoponlnjmlmjmkjihdjhiahhhehgfbbbbaaaa^\XWUWVVRPMMILLIEEED?=;::953/-,/-+()%&%#! 
	
+	
+		
+

			>@@AABBA@???@AABAAAABCAAABBBABCCDDCA@CCDDEDDCCDFFFEECCCCBDEFFEEFEEFGGFFFGGFFGGGFDGHFFDFGGGHGHHGGHHFGIIGGGGGHFGHIJJJJJJJKKKJIJKLKIHJLKKKJKJJJKKJKLKJKKKKJKMNNMNNNNNMMLLOOMMLMNMMMMMKPQPOOONNONOONNOPOOOQSQQQQPOPQQQNQQQRSTSQPQSRQQQRSRQRRRRRQPPSUUUTSSRQTUUTSSTSSTVTRSTTTSTTTSPSUUUVXWVVVVUUUUVVSUXXXWXXYXUWVTWYXVVWWWVWYZZ[[[]^]\\\\\Y\^^^]]__aa^[]_ab_\ab`bbaa`bbbcbbdggffdceffeefhgggiijjjiiijhfijkkkjmoopqqoonmjlnooomklklmlmmkijfghhghiihhgggfefdabba`^][XWXVTRNNNMNLHFFC???=:985320//-+*&&$$$" 							
+
+
+
+		@@@?CCB>>>@???AAABBAABBBCBB@BCCBCBDBBDDCDFEDCCCEEEEFEBBBCDFFFDFFDCEFFEDEGGFEGEDDFFFGGEFGGGHDIIGEIIGGHGFGHGGFEEHIKJJHIFIKKLJIJKLJJHHIJJJKKJKKLMLMMKMMLLLKLMNOOONKNMMMMKOONHLMMMMLLLMPQPPPONOONMNMMOPNOMQQQPPONMLMPQQRRSSSSSQLPQQPPQRRRQQNRQQRRORQTTSTSPRSTUTTTSVUVTTSTVVTUSTUTPSTVUWWWTWWWTUUTUWTVWYUTTWWXWXUVVYSWXXWXXYZ[XZW\^^]]Y\\\[]]]\^^__aa_[^^aba^babcb__`ccbcc`egffedeef_ecfhiiihigjfijjjifijjhjimlnnoppomnnmnnokklmilnmlokkkhggggghhiihcgcd`fad`ab`_]XZZXRUPOOOLMHGDD@A>?;;772331-/,,&%$$$$ 
+				
+		
+
+			
+	@@??BBA@AAA@?ABB@BAAAABCBBCCCDCABDEECCBBEFDCCCACDEEFFEBABEEEEFFEDDDFFEEFFFEFFFFFFFGGHGGHGGGDHIGFHIHIIIIIHFFIJKJJJIIIIHGIIJKJKKKLKKIGIKKLLJKKLMNOMLNNMMILMLMONOONMMMMMOOOOONMKNNMKMMNONOPOOONNMNMKOQQPOPOOQPOOMMLOQQQSTSRRSRPPQPNPRPOONOQRRQSSTRQRSSTRRRSRRRTTUVWWWVURWVTTTSTUUTUVVVVVWVVVUVUUVXWVVWXWSUXXYXWWZZXXYYZ\\[[ZYZZ]_]]]]]\[\^][\^_``a`__^^`aaaaabc`_bccbacbaffceeefgfedegiijhhhijkkkkkjiijhjkkkmmnmmnminpnnooopqnklnmlnomkgghigfhghhgihddcded`bba^^^\[YXVVUSOMLJHGEECB@?=<9754320-,*((&%#!  
+	
+
+	
+
+
+			
+
+
+

+		
+
+@?>=@A@AAAA@ABBCCCBCDDCCA@CDDDDCCDEEDCBADDCBBBBBDFEDFFE?CFFBEFEEEDEGFCFFFEFGGEGGGEFGHHHGHHGEFFFFGFFFIJJJJJIKKKIGJIIHKIGGIJKKJJLMKJJGJJLMKIIJJJMNMLMMNMLMLKKJMMNMNLMKMNNNOPONMMNNNMMMLMNNNMOMNNONMOQPPQROPPOOONMMOLPORSSOQSTRRQPLPQPPPPQRSSTSTQSRTQSPSSSQRRRSTRVUVWVVVVVTTTTRVWVQVUWWWWVSSTWVVVXXWTWVXTVVYYYXZ[[ZZYZ[\Z\W[X\\]__]]^^^^^^Y[]^__^a___^\a`a_aaba`___cbaccbfffdeegfeefcigedddiiijkllllgiiijljjlnnnklmmnnonmmmqqoilkminjjjihhiieifhdgijhhbeeebbab[__]ZZZYWVTQLOLJGGEFBCA@;;775410,-+*'("!   

+
+
+		
+
+
+
+	

		
+
+??>>@@@@@@ABA@@BDDADDDCCAAACDEEEDCCDDCBCCBABDDCCDDEEFFGFEGFEEFEFEEFHGEDEEFFGHHHGGDFFGIHGGHGGHGGFFGFGIJJKKKJKJIHIJJIKKJFHJJLKHJMMKJIJKLLLKJIKLLLLKLKKMNMNLKJLKLNNNMMMJMMMLNNNMMNNMLLLKMOOOQPMOPPPOOPORTRPPPOOONOOPQOMQSRPOTTSSTQMOQQRSSRSSSRSSSSUTRSSSSSTTTTTTTUVTUVVUTUVVUTTUVVWWWXXWWVSSSVUUVXYXWVUWWWYYYXX[\\[[ZZ[[[\^[[]]\^^\^^\^^^\Y]_^^^]````_`a`aa``bcbabbccaccdeggeefhgdefgiifbdfiiiiillklljjjllkjlmnnopqqopqommpqqnlkjlnljjiigfgikjjhghijjhfghgccddda_]][ZXVUTRQPPNLJIGEDDB@>;98541-..-+)'$!" !



+
+	
+					
+
+

			
+
+@@@@@@@?ABCCB@A>DDDDDDDACBBCDCDCCBCCEEDDDCCCDDDADDEEFGGGFFFEDEGHGFFGGFFFGGGEHHHHHDDEGEIHHHGGIHHGGHHHIIGFJKIHHHHIKJJJKJIIKKLKJJLMKKKLLKKILKLLKJLJKLJHKMMNMLLLLIMNNLNNNONMMMLKMJMMMMMKMOOOOOPNPPPQQNPOSTRLOMOPONQPQOOMQRRRSUUSTSQNMMSSTTSSRORQTTUSTQTUTRTTTRRQUTUTTTWWVUUVVVUSUQVWXVWVWVVUUSUUTTVWXVUUVVYZZZZX[ZZYYYZ[[W]^\Z]Y[]\\]^]\\]]Z\W[\\\_____`a``a`^cdbbcabccbefecfeffghdefhhhgdefiiiijllklmljlkmljkmmmnqqpmopojnoomlgkjjijgiiibecjkjejgghifgchhgdcceac]__[UUUUTTSRPOMLKIDEDCB@<;5445///0,+(&#$!"!!
+	
+
+
+		
+	
+
+
+
+		
+
+@A@AAA@@ABACBCCCCCCCCDEDCCBCDDCBADEEDEDCEFEDDEEDEFEEDFFFFEEDCFHIHGDEGGGHHGFFFFGIIGGGGGHIGIIJJIHHGIHHIHFIJJIGIJJIJLGJJJJKLLLKJJLLKKKMLJFKMNNNMKLLLKJIHLMNNNMLLLLMLKNONOOMMLKKMONMNPOOOOOONMPPOOOPPOPQQSQPNLOQOOQSRPPPRTTTUVVUTTQONPSUUTSRQRRRSTUUSSTUTQSSSTSTTSRTTTVVWVUTVWSSUTSUVUWXWUVWVTVWVUUVVVVXXXY[ZZZ[[YXYYX[]\\\]\[\YY]\\]^^_^^]]\[[^__]^_``aba`a_acc`abbabcdegfeedeeggdefhgfghgfhiijjllklmkjlmmnmlllklnpmlnooooonnljjimmjghhjiggijiijhghihhggggeadeecbb`]\[ZWTUUSRPOOMLHFFDAA@=;9963220,+('&&%#! %(&#


+	
+
					
+@???@?@@AABCCEFDB?BCCDDCCBBBDDDCBCEFEDDCDFFEDDEDEFGDEEGFEBEEEFGGGFECGGGHHGFBFGHIIGHIHGIIIIIJJJJHHIHIIHFHIIIIJKLGLNKIIIJLMHKKKKMMLJLMMKKLMMNNMKLMLKKKLMNNNNMKMMMMLKLMMKLLMLLLNOONOPPNNMPONNOOOMNOQPRRRRQNPNPQPOPRRPQQSSTUTRUTUUSPPQSTTTSQSTTRRPSRTSSTSRSTSPSRSRSTTTURWTUTWWVTTSSSSTVUWXXWWTWWWSVQWWXYZYYYYUYZZWWYZX[]]YYZ^]]Y[]_\\[^^__^]]]]_`^^[aa``bcbbbacdaaaabcc^efeedefefffeeffehhhfhfhjkllfjkjhkllkkkkjlloonlnkprqlmnngkinolfffijhgifihiiggijjhgdhfeefeecea`[\]ZVWSTNQPQNNLHDEA@?@:9973210--''''$""!%&*)"




+
+
+
+	


			
+A@@@@@AABABCDEEC@?BCCDDCDCCCBDEECCEEECBCAEGFDCCDFGGFFFGGFDFGFFFEDEEEGGFGGGFDEGHHFHIIGHIIHJHKJKKIIHGIIHFGDIKLKKLMMNMJIIILLKLLLLLMLJKLLLLLMNMMMLLMLKKLLMOONNMMMLLLLLMMLKLNOONMNOOOOONNOPQRPOOOOONPRSSRQQPOOPQQQONPQPPQSRRTSRTUTTSQQPQSTTSQTVWVSORTTTSRSTTTSRRSSSTUTUUVVVUVVWVVVVUVVVUUWYYWXWVUXXVVXZZYWYXWYZYZYVY[[YX\\[[]_a_\[]^^]]^__^]]]^^^`__`bb`accccbacdbbcaccccegfecdefffffffeeghhihfgijmmkiihgjjklmmjkmmoonmmopqpkmnnlkjmnljhhhighhijjihghjjihijigeefgfeddb_`_\ZXWTSRRRQOMJEFEB?@@=986520./-+)'%##!!#&'&#


	
+
+
+
+
+
+
+
+
+
+		
+BBA?@AB@CBBBDDCCB@CCCCDDEDDCCDEBDEEABDDCCCFFECEFFFFFFFFGFFHIHFEDGGFGFFFDFFGEEDHHHHJJIIHFIJKJJHJKJHIJJIHHHIKMMLMMLKKJJHIJLKMMMMLKJILMMLLLLLKHLMMMLIKLMLOPONNMNIKJLLNNMIMNPONMNNONONPQQOPQROPPPPQPRSSOQNNMMMQRQPPPPOOPQPRSSPTNTRSPQQRTTSSQSWXUTQUVUTSQTTUUUQTUUTTRUVVUUUUUVTURWWWVWVWWVVXWXVVUXWXSXZZXWZZZ[YZZZX\Z\[[\]]]]^__]][]Y^Z_^^[\\]^^___`_bcccddcabac_acdcdeddegfcedfggdeegcgfhefeheefjllkjfigjjmmnnmnonponlnoonoiolnnliijmljghfiiihlkkiihhdgdjkjhfcccfacccaba]XXWWTUQRPPLKFFDB?@==99672201/,)(&%!#   $"" "##"


+
+	
+					
+
+BA@@ABABCDBAABABBBCEEFEEDDDCCDEEDEDDCFFEDDFGGEFFCEEEFFCFFFJJHEDFHHEHGFFFGGHIFDHIIIJKKIHIIHHJIGIJIJKJIIGHIIKKLLLLKJIHHIKLLLMNLLLMMLMOMLLLLLJGJNNMMKKMNMNONMMPPPNMLLMOMIMPPOOLMOOPPPQRQPPPPQPPPOPPQSRQQQQPPQQQRRRPLNPRQPRTSTSTTUSRRSSTSRRRTWWTSQUWUTTTTTUWVUVVTTRRVXTSUVVTUWVWWYWVVVXXTUXWXWVVXXXXXYXXW[Z\[[[\[\]\[[[[]^]\\]\]][\]^``_^]^_`_``____cccbcdcacdcaacdddddddefggfgiggfffgijiiiiiiiihiijklkjijmponnonoopnlnomnnmnonnlklmmljjhiikjhjmlljigcfiiijigedffeceedb`_^\[YXWVSRPLLHHGEA@=<<<:975420,*)''&#"!!$$""&((#"! 

+
+								B=ABB@A?CDCAA@BBA@CCEFEDDDDDCBFFEBDDEFEEEDEGHEGFECDBFFEEFEJKHDEGIHGHIGGFIIIJGEIGGFHIJJIIIEHJIEHGHJKKKJIIIIIIJKLHJIIJJILNMKKLKILNOONNLLLLMKLILNMNMMMNNMNMLKNPQPQMMMMKMHLNOPPLMNNLNOOLPQQOOQPNMNNNQRQQRPPORSQNPORMONQQPNOQSSRRTTTSTORRTQRRTTUSSPSRRQUTSTUWVUXWTTTTWVWVUTUUVWXXXYWRWWXVVVWWWWWVWXXWYYZZZYY[[Y\ZZX][\V[[^_^\\[]^^[\]`aa_^]`aa^```_`]bdc`abb`d`daacedcaaadcgihfgggcgghgjjjgjikklkjjjhlmkhjjlooimillppommklmljniojljmklhjijfjkjegilijfhcfghhhgicfefffgfbaa`]_]\[XTTPRMNIHHHCC>==>::8633/-,+(($$!""" "%+*$ "!


+						BAACCBBBBBCCBABBACDDDDDDDCBDDDEEDDDDEFFFFFEFGGFHGEFGFFGFFGIKHEDFGGGHIHHHJJJJHHHGEFFFGJJIIJIIHFGHHHIJKJHJIIJJIJKKKKKLLKKNMJIKJKLMMONMKNMMLMNONMKNNLMNNONMMLNPPPONOONNMLLLMPOMMNKKKMMNOQPOOQOMNNNNOQRSRQNORSRPOQRSQPRRQPRTSSQPRTTSSSSTTTUVTSUSSRRQQRTSRRVWTWXXUTUWXXWXVUUWWYYZYXWWWWXXXXWWWWWVUX[ZZY[\ZYXYZ[ZXYY\]\[[\^___^^__]]]]_```__``__`aaa`__ccbaabadeedefecdedbefhihfegfefhihkkiijilnmlmmlmllkgkilnnomllmpqpponnmljnpmllklmkhiikkjkieghiihihhhghhhiihgffgggfdcc`___][ZXURTTPNLLIGEDAA><:96520/--,)%%$$"!"#),,$ 												BBABBCCBB@BBCBBABDECDDEEECDDDDDDDDDEFGGDDCEFGFGHHGHHGEGGFGHHHFEFGGHHIGGHIJJJIIIGFCHIIJJJJJIHHEGGGGFFGHHJJIJJIKLMMMKKMMKLLHIKLMMKLMMMMNNILLOPONMMMLMNNNMMMMLMNMOLOOOONMMNNOPONNMMLLNNOOONONONOONNNNRRQQPORSRPPQQRRPSSQPTVUSQPPRSTTTTQTSUVUSVTTTTRQQTRRRWXXVWWURUVWVVTWVVWXVXUVRVUVVVVYXWUXYXVXZZ[ZYZZYYZX[[YWYZ\X\Z\^]^_]^]][[Z]^_Z__a``````_aa`_`ab``aaadddefeedecdaeghhgehhfghhhhjkjjkilllmmhlmmjlhljmjoooklmqmqprromnknmlfkjjjkgjhmlliieffhffehfjghghhhhhfgggdddcba^`\^\]ZYSTVSMMMKGHCC@@<<785432..**$&&%"!!# &*-.+'%#" 
+						@AAAABCCDCABCCBBBDDCDEEGFEEEDDEDDDEFFGGEDDFGGGGGFGGGGFFGGHFGGFFEEFGHGEDHIIJKJIJJIGHKJJJJJIJJIHGHHGGGIJJKKJJJJLMMMMKKMNKKKKJMNOLKKLMMLMMNMMNPONLLLMNONLKNNMLNNLNONNNNNNOOOOPPNMNMMNPQPONMOPOOOOPPNNQRQQQOPSRQQQQRSPQRQPSUUUTQORTUTSSTTTTUUWVTTUTSQQUTTUWXWVUWUTTUUVWWXXVUWXVUVVVTTUVWXXWWXZZVXZZZZY\[UY[\]\YXZ\]^\Y\^^^]]]]\\]]]^___aaa```aa`aa`abcb`bdcbcddeffeeeec_behhghihgijidhklkkklkkjlkflnnmmllmlnoonnnpqrppqrpmopnmigikjjijkllmkjieijiiiigfiiijiihhhihgfdffebcca_`a_^[WWWTRPNKJIGEDCC?<:976420.,*'&&"! !$!!&(+,-..,**)(&$$ 

+
+
+				AAAAAACDECCCDEDBCBECDEFFFFFAEDCCBAFGFGF@DEFGGBGEEDFFFGGHHFEEGGGFEEFEEDFGIIJKKFIKJGHJJEJHJJJKJIJJJGHIJKLLMKKLLKKIKLLKMLLILMMMNOONMMNNLKNNMIMOOLNMNOPPOKMOPLMOOLMMLMNNNPPMOOPLOOOJLOQRONNNQRQMPOPMMMRRQNRQRRRRRRRRTQPNOQSOTTTSRQSUTSSRTPTSVUUTTTTTSSUTVXWSVWVTUQVTXXXXWVVUXVWWXXWTTTWVVWWWXYZXWTZY[Z\[YZZ[^[YXZ\^^\ZZZ^^]\]^_]]]]^_``aa^a^_aa^bbbacddab`c^d`dbdadefee_bcffgfighiihhikkjhkkjjjijfllmmlkmgklnmlmooppomonomopokjejljghhlklihhjeiiihihgfhijjhggdgihcdehggcfdc]bb_^\YXWURSNMJLHHGECB<;:96532./+)&'""!!$)*(-(,+(%'(''()%   
+
+
+
+
+			ABABAADFFEDCEEDDEFFDCDCEFGGFFECDDDEGFFECBEEGHHGFGFFFEGHIEDEFGIHGFGHHFGGHFHIIJJIJJHIJJJIIIIHJJKJJJIHJJLLLLKIMMKKJKLLMMNLKMNMMNNONMNNNMKLMLLNOOOOPPOPQONOPPOOPOONLKMONPROOPQQPOPONNOQQNMOQRSQPPQOLOQRQRRRSQPORRRQQSTRRRSSTUVUUSQSTTTTSTUVVVUUUVUUTUVVSVXUQUVUTUVWZZYYXVWVXZZZZYYXXWWXY[[YYYXZZYYYX[]ZZZ[[\]]\ZY[\]Y[[\]][\[_a`^]^_`a``aba^^```bdedcedba`beddccb`cfghedccdefhiihhihhjkjgilnljjijklmkkklmllmmnnnnopoknolmoooonlkkljgikklkkkkjfggghjkihgjjjihgeghhhhjigghgfdcbb^]]Z[YWVUSPNMJKIFFC=<:986420/-*'('&#"  &+,--.,*  !&('#$$!

+
+
+
+		ABA?BADFEDCBDCCDFEFEDCBDFFGGFDEEFEEFGFFEDCFGHHGGHGFFFGHGEDFGHIIFGHIJHHHHHGHHIJKLKHJJJJHEFGIJJIIGIIIJKLLJJKLMLJKJLMMJNMLKLMMJNMMNNLNMLKLMLLOPOLPQPONMNNPPPNPPOOOMMOOMNNMLOQQONOPOOMPRPOPOQRQPQQPLPOPPQRSSRPPPSPRQTSSSTTTSUVUTSRTSUUUSSTXYWUUVWTTTSTVSTUURUSRRVTWXZWXUWWXYZ[ZWWXWYYWY[\[YWZYZWZYYYZ[[YYY\]^[][YY\^^]]\\[\]^abb^Z]\^__ab``^`^``ddfdeeecbaabfee`cacghhgfebefhhhjieigijkigjlnmkljkjkiljkmmmnnnookmlnnoqqmmnplnmlillmikijjiijijgfghgllighjkhjiichijihhhggggaecba`^_]^\ZXWURMNJLIGDD><:9974400-,''&'$#  ',.+.--+'" &'%!"!       





+			BABBCCDEDDDCCEECDDEFFDCEEFGGEDFFFFFGHGFGGFFGGGEEGGFEFFFEDEGHHHHHHHHJJJHHHGGGFJKLKIIKIIHFEIJJFHIIJIJKJMMJJKKMLJJJLMNOOLLLLMMMNNNNONMMNKLMMLNONNOPNMLLLNNOPOPPNNPQPQPNMMMNNOMOONPQOMORQQQQPRRRRRPNOPPPQQTTSRRRSTTTTUUUTRRSSTTUTSTVUUSTTSVXWVUVWWUUUTUUUUUVUUUUUVUVXXWXWXXXXXXYXXXZYWXZZYXYYZZZZ[[[XY[[[[\]^^\ZYZ]``^[]\[^_`aba^\]^^^`baa``bbbdeeffeeddbabbfgfeecchiihgfgfegiiiijiiikkihjlmlklnljjklllmllmnnoppmlnnnrrmoqpnllhgknonkjjjjijkkkjjklkjjhhjklkjkkjllkjjihghhffeecbaab`][ZYXSRPNLIGGEC@>=9855421.,+)('$"! !" %)-.+..-+,+(&%'((%!   !#%&'''%##"! 	AABDDCDEEEDACEEDDACBFFFEDEGGECFFFEGGGGFFGFGGFGGFGGHHHGGGGHHGGFGHIHIJKJJIIGGGHHJKJJIJKKIHHJKJGGIJJKKLLLMJKJKKLKJILNOPOLKJLLMMMMOOOOLMMLMMLLMONNOLJJMKMNNMQPPOOMOPOOONNNNOPQPPPOPPOMOPPPRQPNRPSROMPOPNPQRSRNRQQRTUUTUSSNQPRRTUUTUQUUTPUSVQWVVVVVVWWVVVVTTTVSVUTTVUWSWWXXWUWVYZYSXYXTWYXUYYYYZZZ[[[[[[XWVZ\^]]XXX]`_[\\]]`_``a[_^^__^abb^^_ddceeaeddccdcabaefdceeefgeicedeefgjjiijfijkjiijkkjmmlijmmgmlllnklmqrplnmorrnnmoiklifjjnmkejikhjkkkjilligkiigjgkklllllgjkjiihjfhegbbbbbb^]X[[XUSLJIIIHBC>?;;765520..*)(&"# !# $)+*.,/..,++)")$(&$"!!"""#! $((('&&&%#!"%"$#AACEEDCEEFEDDEEDEDDDFFFEBDEFFFFGGFFFFFFEDEFEEFGGHIIJIHGGHJIIIGHHIJJJJJJJJIHHHHFIIIHILKJIIJKJHIIJKLLMMLMMLJKKJJJKLMNPPOMJKLMMJMMPOOLMOOPOOONPPOONNNNMMOPQQPOOONOONNOPOMMMPSRQQQQPOONPPPQQPMPRRQOOPSRRRQSSRRSSQTVUTTUSRSRRRRSUUSTUTTTTUWVVUUUUTTUVWXWWUTUUUUUVVTVWXYXWWXWVWXY[YWXYZWUYWWYYYY[YYZZZ\][[ZYZ\^]^^\[]_^Z\]^`a``a_^^^_`__`aaa`_cddddcddaccddbcdedadedbceghieabeefikihhfhhjjkkkkmmmmlklnnnmlmmnnmnpqqqpnoqrrponmmnkijlmmkjikllkjjijjkjijlljjjkkkkkkkjiijjklkkkjjhgeacdcc`^]\ZVTRPONLJHD@@<<<:98642/,))''%#!!#""'++*-..-.-+**+**)&!" &(&&&'%##$$#%'))(()'$"!A@ACFEDEFEEEDADCDDDEEEEFFFGGGFEFGFEDEBEEEEEEEFGHJFHFGGGFHIIJJHIIIIKJKIIIIIHJJIIIIJIGLJIIIHKKKKKJKLMLLLLLKILLJKKMMMNNONNHLKMMMMMPQPOMMNOPPOPQQOOPQOOMMLPQQONNOOOMNOPPNMMMPRRPQQQPQQQRQNQQQMONQOPMRSTPQSURRRSSTVVURRTTTRUTSRRSUTTUUQTUVWXUWVVUTTUTXWXWVUVVVVVVVSWXYYYWWVWTXZ[[ZUWZ\YWXYYYXZZYYZ[ZZ]^\[\[ZX^^^`_X^^_YZ[_aa_aa`^`_`_^^aaa_a_ccdcdcbdddeeecbbdceecbaaefhigbdfebhjhfhffekjlmmjmnnnnjklmnnlmmpponoppqrponokololoomhkjnmliihlmkijhjhkfjllkljkjkjjjjhhhjgjhljllkggghcedeac__[YWVSRRPNLHHBD>=<;8985/..,)''&$# 
 #()(''(*+--,*++.-+(%$#"(&'$''&%"!#$%!&&''()'!!
+
A@BDEEEFEDCCCDDCDCEFFDDGFGGHGFEFDEEDDEEFGGFEDEHJIHGGFGGGGGIKJIJJFHJJKKJJIIHJKJJIIJJKLKHJJKKLKKKJLMKKLMKJKLMLJKLNNNKLMNNMMMMMMLMPPPONKLMOMNOPPOOPQQPPOLMNPQQRQOONNOOPNNOPPPPPNQQPPRTTQPQSRQOPQPRSSSSRSUUSPRSSSUTSQRUSUWVTTSRUVUTTUTTUUVWXXVUUVVVWWWWXWWWWWXXWTTVYZYXVWXWWX\\ZXVUZ[YXYZZZ[ZYYZZ[[\^^[[[\Z\^_\_^]_a_]]^`aa_a`aa`aa__acccbaacbcdccccdefffecbdeeedceffe`ihefggghiihhhhiklllljloopnmlklnmmnppopooqqrrpnnnonmmlmonklkkkjihikljjjklligilkjloljjihihgklkjijkkmomkjhjigedcbb_[][YVSSQNMLKIFDB?<:99600.-,*)'%$# !$()  "$%'*++)*+,-+)(*+,+((('&"$$&%%%%#$%''''&$"

+CADEEFFFDCDBDDDEEBEGHGGFFEFFFFFFGFEDEEGHHHGEEEGGHIIIHFHHGEHIHGIIHHIIJKJHJJIJJHIHKKJILKKKKJKHKLKIKLKIJLLKLLLMNNNOONLMMNNLMJNNNNNNPOPONLMONMOMOOPQQQQPOLLMPMOPQKOLNOPPPNPQPOOPQRRNOQVTQOQNQRQQQOSSSQRSTTUUSSTPPRQPRRSSVXXVTSUVUPTTTTTTTTUVVUTUWUWVUTVSWWVVXXXYWTX[[ZWVWWXXXZZXWWWYZXYZ[Z[[ZVWXZZ\]]^]\[XY[__^\^^__^]^^aaa_a_```aa`bbcddbc^cbc^bbcaccfeedccccdefcdfgggiighehhihiiiijjkllmlhlnnlllllmnnjlmnnmkqprnrnojonnjkkmmolkiihkgfeiiifjkmnkciiihlmkgjjjgfhnllijjljlmlhjgjjhddcd__\_^]XVTTPOKLHGFD??=;8710//,,*'$$#!#&*)%  "% &#''%%''('()-,-()(('&%''&"$#!$&'%&#!
	
DEFFEFFFCCDEEEEFEBCHIIGFCDEFGGFGHGDEFGHGFIHGGGFGHHHIIHGHGGGHHHHIIIIJJJGIJJHJJIIJKLKIJKKLLKJHKMLLKLKIJLMLMMMMOONNNNMNMNNMMMMNOOOOOOOOOPQOOOMMNPOPQQPOLLLPOLOOPPPOOOOOQRQQPOMQRSSSSTTTQOONLQRQQQRSQPPSTUVWVUTSSTTSSSTTUVWXTTUVVUUUUUUTTUWVUVVXWUVUUVVUVWUVWWXZYVY[[YWVWVWXXYYYXWWYZ[ZZZ[ZZZZZ\ZY\][^^][Z\____^^a`]]^^^^_``a`___`accccdddccdebabdcdcceecbfgedceedcfghijijihhghikkjlkjikkllnmllllmnnonnnlnmmnpqrrqpppqponlmnmmnmkjijllieiihhijmolkkmlmmkjjjjjjjlnomkkkkjkkkhijijhgghf```aa_\ZYWTQOLJIHFDB?><97541/-,(%%#" $(*)'%%&''%$#$ %)()+-*($$%''('((('&$"!&'&$"
DEEDDGGFEDCDEEDEECFGGFECDEEHHGFEFFEFFHGEFGHGIHHIHHHIHHGEHHHGIIJJIGIFJJJJJHIJJIIGKKKIIJKKLKKIJJLLMLKJMMNMMMNNOONLMOONNMNMMMMMNLNNNNMKORROPNMJNPONQONNNNNONNOOOPPPPOOOPPQNQPOPQQRRRRRONLPNNNSQSRQNOPQRSRUTUUUUUUTRRSUUTRUVVTVUVSUVVUTTVWXVUVXXWUUVVWXVVUVWWVXXYWYZXVWWVVVUYYXYYWXXZWYYXWZZ\W\\[V]_^]]Y[]_`_^^^_aa]^]`^^]``a[`^^___ccbcccdbedc`ddffdccccbfeeeedddefghiijkjghfhikfjikijkkgnonllmllmnmnonnnnmpqqrpnmnoooklmlmliihjlmnnlkgljigkinnmimmmjlkjiihjjljoongkhiiijljjiiigfgegcb\bba^]\YUSONMKIHCD>A?=785400+)''$#   ')*%""%*+)''%"&())+(' !##! ""$&'%%%&&&"! 
+CCBBDFFEDCCEEDBDDEFF@ECDEEEGGGEDDFEFFFFDFGGHHGIIHHIJJJIHFJJKJJJJIHIJJJKJIIIJJKJJKKJJJKLMKKLLLKLLJKKMNNOONMMNOPOLNOMMNNNMNONMNNLLLONMOQQOPOMKNPPPPPOPPONNOPQOOOPQPOOOOOONQRPPPOPQQRRRQPQRQRSSRSQOPRRRSUUUTTOUVUSRQRTTRSTUUVUUVTUVVUUVXYVUUUTWWUVVXWWWVUWXYYXXYYXYXUVWWVVXYZYZZYZ\[YZZYXYZZ[[\[\^`^[]]\^_`__`__a`^_bcb_]`bbba`aba`aaacdccedbbeedfgeeffdbedfhgdeeeefffgilkkhfhhiiijklljkmnoonnonlmmnoooonoqppqqompqqonikmkllkjiimnnnmklmljklomlljnpmhkkiihhjllllmllkijkkjkkjiihggffggebceb^]\ZUTSQNMLJFDCBB?=955520-+(&$"!!!%(($  #),,+*)((&'')*+*'# !!"$&%! 

+
+EDDBDEEBBBDEFEDDEEFFFDDDFEEEGEFEFGGCFDFEIHGGHHIGIJKJJJJIJKKKJIIJIIIJJJKKJJKKKLLGKMKIKKLMJJLKLLLLLLMMLJNJNMLLNOOMMMLLMNONOOONONMLNONOOOOPPIJKNOOPPOOPPPOLOPQONNOPPPPOQPQORPQQROOPQRSSRORRSRRPOOPPQSSRUWVVVTSTUSSRRSTUTSUUTRRSUSUTURTVYYWUUUUVVUXWZTVVXWXXYZXSYYYYWVVUWVYZZVZ[YX[\[ZZYZWWXZZ[Y[\^^]\]]]]^]_`a_^_`]^_c`^]acc`bcbaa`b```dbdedbdeddgceefgfbedffgcffebfddeiklligggihifjkkjllooojnnnmmmnnnkpopnopqpnnrtroojlnnnmiklklnkllmmnfkklnniijopniihiijjkllkkgkkljmnliijkkjggfhdefgccda_^YYXUTSNOILHGAC<@=;67321/**$#"#"!#((!!%(,,+**))'())&)& #""!

+
+FFEEEFFEEEEEFGFGGFEFEDEFEFFGGFGGGGGGFFHIIIIHHIHGIJKJFIIIJIHIIHHIIHHJKKJLJJLNMMLKLMLLKKLLIJLLLMMMMNNMJLMMNNLLLNOMHKLLNOPOMNNOONKMOPMONNPRPMLMNNNOOOMPRSQPOPQONOQQQQQRRRRSRPQRSSRQQRPRSQRTSRQSQONRRRUWVVUUTSSTTSSRUTUUTSUUTTTUUUUVUUVXXXXVWVUVVWYZYUWXYYZZYZXXXYZZXXWXXWY[ZZZZYYYYXXXXZ[[[[[ZYY[^^^^^]^``__ba^^^aaaba``_bcb_bdcbcccca^bbddcbefghgecdehhffebbdfffgihgfghilmihhhiiijiijkmnoonommoomlnnnopqoononnnprsqqpompoolhlommnnmlmoliklklmmmnoomljiiiklllkkkkjjkjookjijllllkkjiggffffd``^^]ZWUTQPNMIBBAA@=<9632/+++(&$#" !%('"#'++**++)''('('$!!" ""!!

+GFGFGGGFFEFDDEHIHGFEDDFFEEFGGFHEEFFFGGIIHGIIHHHGJJJJIHFFIIIJJHIHGGIJJKKKJILMMJKKMLLLKKLLIKLLLJLLMNNMMLMMNLMLMNOMLLMMOOPONNOOPONLNNNMMNPPQOOONLNNNOPQRPQQQOPPPORTRMRQQNRTSQRRSSSTTTPQSRSTSSUUTQRUUSSTVRRSSSTRTQTTVUUTSRVUVVWVUSWXXXXVXYWVWWVTWWWXYUWWZY[[\ZYXXYZZZVYZZVVXYXXY[Z[VVVYZZ[\[[\\ZZZ^[^__Z^__]]]`^^^`_`````_bcc`abbcdcb`_\bbdccbfggggeedfhhfffcabcfgijjiiihgjkjjkkjgikkkkkmnnlmnnlnpommllmqoqjolllopqoqqponnokmimnminnnklllgkhjkjjmilmmmljjilmmmlilmllljnljjkkmmnmmlljigghihfabb`][WWVTPONKCBADC@=;7521,+++(%!#" !$&%!$'+)(''(('''''("" $'&$""%# EGDFGGEEFFEEFHHHGGGFEDFGEEGGHGHIIHGGGGGHDGIIHIIJJIIJKJFIJJIIJKKJIIJJJJJJIJJLLKLMMMIKJKLLIJJLLKLMLMMMLLMNMKLLMPONNPPPOMPPOOPQPOOONMNMNPQQQONOONOONNOQQPNPQOPQQOSTQOPPQQRSTSRQSSRSTUPQSRPRTTVVTTTVWUSRTUVVRTUVUUTTVUUTSTUUUWWVUTWWVYXWWWUVVVVXXXXWWWWYYZX[[ZYWWZZZZZZZZYYYYZ[]\\\\ZY[\YZ[[[]^___^^_`_[\^_^[^__^`_^``aa``adddbabccb`^`abddeccefeeggfdfggfghfeefgghiiiiihgihiklnljjlnmlmlllloomlpqqponnoqsqpolmnoopqrsponlmmnpnmlklmlmnmmmjfijijkhilmnmlkjlnnnmjlmmnnmmllmnnnnnonmmmlkjjjjhbcca^\ZZYVSQQNKHGFDB>;875310,+)&%$""#"" #&'))'%#!#$%%%'''%%$%')*(&%%%%&'%"
+
EEFEFGFEFCDEFDFGFEGGFEFFFFGHHDHHJHHGGGHGFGHHHJKKIHIJKKJJKHHHJLLLKKLJKKKKKJJJKHMNMKJKLKLLLKKLMMMKLLMMMMMNMJLNOOONNOOOOMPPONPQQOONNNNNOPQPQLKKOPPOOMOPQPOQQOPQRPRSRMPOOORSSRRNSRRNSQRQSSQQSSURTOTUWWTRUUVWUTUWVOUTTUVQSRURVWXTVUVSWXXVWWVWWTVXZYXUWVWXYXXZ[VXVWZZZ[YZX[[\ZZ\\[][]\^^^^]\\\\]^^`]_`aa`\]^`a``aY]_`_`ac_]]a`ccb`ddcba^aacddcc]defcgffeeaedfhhhghgfefgfhffgihhfkklmlknommnmlknikkpqqppoonppoonmmhnmqrrqpomjllopolkjlijkolnnkhiklmmjjhlikglkkjmnmjmkmlpmnjkinnnnnkplnnmikkjjjedcb]]\[ZYTRPQMLHGDC=;:98653-+))&'!  ##""#!!%'((& "!!$#$$&&&#())((%''(()% 
+	
ADEFFFFFEDDEFEFGFGHIIFEFGGGGGFGHIIEFFGGFEGGIHIJKIFFIKKILKGIJKLLKILMMLLKKKJKLKKNOLJGLMLKMMLLLMMJKLLMLMMKMMMNPPOONMNNOOOOPOOPPPOPPNNOPPPQQPOOOPPPOPOMPQQOQQOQQRRRRQRPOOQSSSSTTSRRSRSSSTTRRRSSRSQRSVWVUVVWWVSRVVUUUVWVTUUUUVXWVVUWWWXWUWVVYXUUXYYXWWVWWUWVYZZXUWYYYYXYZ\\[[Z[\]\[\]^^_^]\]\[[[]^\_````]]_aaaba^^a`_`ccc`_``abaacc_bb_a`adedddeffhgehgddeefhijjiffdgjkkkjhihijjijmlmopnnnmllllkloqpopqonopoopqolmoorqonnkhkmlmnnlklllonnnomlllmnnmkkklllmllimomilloqponnkjlmnpoopqpnlijjjllkheccba^\[ZVQQPNKHEDDA><;9642/-+*(%! !##%&&%$##$!%''#"!     #%&'()(('&'(((&"
+CDEGGDDCFFGGGFFFFFHIHGFFGDDEFDGDIGDEGIIHHHIJIGIIHCFHJKKMLIKIKLLJJLLKLLKHLJLMLLMNLJKMNMMLLMMLLKJKMMLJLLLLMMOPPOOJLMOPPNNONOPPONOPNMOOOLPQPOQPOONLNOQRQPPPRPRQRSSPQRQNQSTTRRUTRQSSSRRQSUTQRRSRRQQPUWVUVUVUUTTTTUVVXYXTVUVVVUXSVUVSVVVUUUWXYVUVXWWXXVXWWVVVYYXUWYZWWXZZ\\ZZZZ]]\YZZ\^^Y\]]\\[[]]]`__^`^^__^_]a``ba\`bcba\`aabbab_bcbaa`beecfgfdghhfghfcfeiiijkjjjijlkljjijgjjjjkennomnkmmllnoojoppmppompponqsqmoonnnmmhkhhihhnmmilmmimjmimlmknlnlllmjkllmkimonjllppmkonmknnnoqnqspllhhhkmmjjffeda`__ZZTQPPLKGGDD>==:6511--)('$! #$$"  !!!!""#%&#""#" !#$%(''$&$''&$#
+EFEFFEDEFGGHHHEFEEEFGHGGFDFHGGHIGFCFHKKKHGJLJGGGHHHIJKMNMMKIKLKIKLLJJLLLLLMMMKKLMMNNNNLJJNNLKJKKKMLLLLLLLMMNOONMLMOQPNMMLNOOLNONOPPONMPPPPPPKNMJEOQQQOQSROQRRTTSPQPPQRSSQQSSQPQSQPPQSVTRRRQTTSQRUVUTUVVTUWVTUUUVXZYXWWVVVXXYWUUTVXYXWUWXYVWWXXXYZYWXXVVXYXWVXYZZZ[[[]]YXY[\\][[Z[\\\\]]]\[[]\_aa__`baa_]^```aca_`aaba`acdb`bdedcbdebdedcggdbehhghiighhiigjhikkiklmkijkkllklklmmonklkmnnpppqqpqolnpqqpponpsqonnnnmmnnmkjkjhnpnmmmlkkllmkklmmnmklmlllkklljmnnnnopnjmoppppnnppopsqlnnnlkmmlihgffea```]ZUSRROIGDEC@?<86421/*)'&#!!  $%" ""!!##"!"!"!  !!"#$&'&#%&'%$"
+EEEEECFFFFGHHGGFFCFEFGIJHEGHHIJHHFGHJKKKIEKMKHJKJJIJKHLLLLKHJKIIKKKHKLMKLLMNNKKKLNNMLLKILMMMKKLHJKMNMKMMLMMLOMMMNNNNNLOOONPPOOOLPRQMNNPPPPOOOONLMOOMPOQQQOQRSTSSSRQPRQQQPQPPPOQRQPQQRUTQSPTUVUTSUUUSUUWSVXWUUSUUVWYWWWVWWWXYWUVTXXZZXUYZZVXYXVVRZ[YVZWXYYWWWXZ[YZ\[[]][ZZZZ\]ZZZ[Y\[]\\Y\\]^^_`^^]babba]__`\`^a`____b`b_caacfgddeegccddchgdccdfefiiiihiiijihjikkjkkhjjklnmmklimmlkmkmloppponnonmnorooppppjqpnkmlmmnpomljijoomllknmkkmmlilmmnnkkklkkejkklllooooqmmmnnnmmnnnohpoqlnopmlhnnjigdggd`aa_\YVUTSJGEGCC??987611++(($##!"$% ! "###$$$%%#%%'$!
+	
BDFFEFFGGEEHHHGFFGGFFFIJIGEGGJJHHGGIJKLLJJLNLJJKJJJJKLKIJLJIKKKMLKJKLNMKKLLLLJJKIMMMMLLKLLLMLLLKJKNONKLMNNNOOOMMNOOMNOPPPQPPOPPQRSQPOOOPNPPQQPNNOOPQPPOOQRPQRTSRSSRPRSRRQPPRSRQRSRRQQTSSUUUUUVUUVUVWWXWVWWWUUSUWWYXWWVVWVVWWVVWYXXY[YXZ\ZXXZYYVVWYZ[[YYYZXXXXZZYYZZ[\][ZZZZZ[Z[\ZZ]^^]\\\]^^]_`^_aaaaaaa``bca`bcb`aaabaabbbcffddefgfccfggecdeeffiihhihhiijkjiiklkjjhiklnnmkjjllmmnnmmmnomonmnnnmnpqpqqppnnpqpnnnmmnoomlmljmnmlllmonlnnlllljnnmklllkkklmooppnnopmnlmnnnoponnpopqqompronoolkfhhgebbb`^\XWVSQNLIHDA@><9851/,()(&$! $&%#"%%#$%$#$&&&%#	CCFGFEGGGCDFHIIDFGGFFFFFIHGHIGIIIGHIIHKJJIKMMKJJJHHHKMKIKKKKJJJLMKLMMLLIKLLJJHJJKLMNNMMKLJKLMMLMMLNONJKNOMNNNNNNNNONNNOOQMMMPNPQSRPONLOPPNPPRQONNOPPQQQPRSRQQRSRROQQPPRSRPRSTTTSSSSSTTUUVVTRUUVUUUVVXVVUWWWTTSVWWXYUXWWVUTWWVTYYWVXZYWZ[YVYXZZYTXY[[[XZ[[YYVWYXWXXYW\[[WZ[ZYYY\^\Y^``]]]^Z[[]`a^`[b]`_``aabbbbbcbabaaacbdbb_bcdeeefedbfgfbccfgghjegfighihjjigglmkhighioonlkikhjjnnmkkjoomnomnlkloprssqpmmlprppollkopmikiljlkmijjllmmommlljloogkimmmmmholpqpmnmnonlmjpppmpnoloprrrnqrqnppmlllkahdda_^_ZZTTSQLLGF>A?>9953//)(('  !  "$$!!
 !##$%%#"EFGHHHIGFDDFGHIIFEEFFGHIHGHHHGIJIHIIHIIHGIKLLLKJJIJIHMLKLLKKHIJLLMMMMMLJKMLLMKIJKKLMLMNNLKJJMNMNNMOONMNPONNOOMKONNNNNPQQQOOOPNNQSSQNMNOQPOPQQQPNMPQRRRRRSSSSRRRRRSSRPPRSSRSSSSTUVUSSSRTVVUTTUUTTRTTUVXVUUVUUTTSWXWXXWXVUUVWYWWXXWXXYYXXYY[ZZZZZYZ[[[Z[[[[[YXY[YXXWY[\ZZZ[[[ZY[]__]^`_^]___^\]`a`_`aaabbbbb_`bb``babbbcdfdcccaacgggeddcdeecehhhhhihhihfhiijjfehkkjhkllnnomlkkklnnmmkklnopnpolnooooprtsqoppoopponmmknolkjjlonklmnnllnnnnnmlikmnnmnmlmmlmoppqppolnonmopooooonnmorssrrqrqnoojmonlkhfeedca_\YVSRNLJHEC@><:8541/,('&%$"  !  "## 		
+FGGEGIIHFGGHGGIIFEECGHIIHFGFFGGHJIIFFGHHIIJKKILKJGJKKLLJKKKJJJKKLMMLLLLILMLNNMKIKKKJLMNNNMLJMMOOMMOOOOOOOKOONNOPPPOMOQQRQOOOPPPQRSRNPPPOONPQQQQOPRQQQORPQRSSQNRPRSSSRQSRTSRPONSTVUTRPPQRVTTTVTTQSUUTVWWSVVVTUUUVVVVVVTUTVWXWVUXWWWWYZYYZZ[[WYZYYZ[[XZZ[Y][Z[[YXXYX[\]\[X[Y\WZZ^``__\\[]^a]]\]]a````abbcbcbaaa[````a^ccddc`cdcacfggfabdedfdefihhhihjjhfghiijfhkjgiikmnjmmmiljllonmmlmoooopqpmopoppoqrsnoorpmkolnnolklnnnlmoommmpnmlnnmloomhjglhmnmjmilloppoopnknkmlonllnnnnpopqsrpmqmplmonmpmljjgedfdc_][XUTONMKHGBA>=7764/.)'''$"  "" 
+FFEDEHHHHIIIIHHHFEFGHJJJGHGGHHHIIJIHHGGIJIJJIIKLKJKLKLKJJKIJJJJKILMMKLLLLMLMNNNMJKKKLMMONNNNLMNOLLOPNNMNPQPNKNPPPQPOPQQQQPNNPQQPQRRRRQOQQPPPNPQQQTSPPQQRRTTSQQSRRRSSRSSRTURPONQSSTUURPTUVVUVWUTTUVVUTWWUVXWWXYWWVUTUVUWXXXWXXXXWVUUWYYY[[[ZZYYXZ[\YXYZ\^\[\]ZWY[[]]\]_]][Z\^\\_baa_]][^aa`]]^`aba`a__abaacabaabbddbbccbbbccddeeeggeceggdfhfdgjighhiiggeiihjkklliiiknmllmlilmlmmmmllnpommopqqoooppprqqqonpqonoonnoomknppqoooomoonnnnnlkmomlklkjkmmmmnmmnoooonkloonmonmmopooppqrsropqqpopqppoomkklhcffd`]]YYXWTPNMIEDB?<;:730+))(&$" !"
		FEEDFEHEGIIIHGHFFFFFHIJJJJIGHGGHIJKJIHHIIHIDHGJLLIKLLLKJKLKHKKKLLLMMMKMMMMKKMOOOMKKJLMMMMJNNMNONLLNLKKNNPPPOMLMNOPPPQPPQRRQNRRPMQQPPQRRRRQPOPPRRRSSPPRSRSRTRRRSSRPSSSRSRTUTRROPQRRUTSPUTVWVVWQUTVVVUUUWVVVWWXWXVWUUUVVXYXWWYYZYUVVVVYUY[[X[[YVZ\\YXWZY\]\YZ[ZX[\]\][]Z^]\Y\]]^__aa`\[[_a``__``aba``__abacddcbadbfedbbdd`bcccebgfgdccgihdgbecfhihigghhhikjilkmnljjhimmmkglijlmmnmoomjokmnolppolnnpppoqppnnoqopnnmpnnknmnnolmikjnhmnommkkklmmlmimkmjlmnnnmmkpqplppnmnnmlopnoolqqrppqsrrlrsqnnnmkjjjdhhfca`]ZZXWQPMKFDB@>=<842-+)*%&"! 								FEEFFGGFDIJHFFGGEEGGGGFJJKJIGFFHGJLKIIIIGIIIIHJLKJLMJKKKKKKLKKKLLLLMNNMNMLKKKNONMLLLLLMMLMMMNNNNLONKKNNOPPOOOMNOOOQRPNPQRRQQQQOOOPOOQRRRPPPOPQPRRSSQMRTTTTSQRSSRQPRTSSRRSTTTSRRRSTTUTTTTSVVUVVVVUUTUUUVYXWWWXVWYWVVWVYYYUWWYZ[YSVWWVXYY[\[ZYYZZ\\YWXYZ\\\[ZZZ[\\\\[Z[[[]\YZ[]__^````_^_a`a```````_```aa`ceedccdfedb``ddcaadffgghgfefghhhfeeddfghiihhijlmkkkjjllkkjilnmjhijjmmnnopomnnlloooonnonmpoqrqqppooqromnqqomnnnnmnnlkkmlmlmonoonmllnnopoonjlmnomlknqsrqppnlmmlloonnnnqsrqqqstrqqsrnpoqomlkkjkieec_ZZZXTROMKHCA>?=:542.-+)&%#" !!!   
+		
+
+
+
+
+					FEFFFFGHHHHFEDIJGEIIHGFIJLKIIIKJIGJKIFIJJJIGJJJKLLMMLMMLLHLLJILKLJKLNNMMMJKKLMLJMLMNMKLKMNMKNNNOOPNKMPOLQQOPPOOPOMPQPNOQQOQQPOPPPMPNPOQQONPNQQQOQSTRRRSSTSSPSTSRRQRSRRQPSRQRTTTTTTURVTUUTSVSVXXWTTWXWSVUXVWXXTVWXUVVXZZYYXYZ[[YSXWVVYYY[\[YVWWY[[ZZYZ[\]\[ZYYYZ[\W[Z\YYZ\[ZZ]]_^`aa____Z`a`\_^`^`]_``]a^`bcbccefecc_bdfdb`eefffffffegfgggeggfdfggfgegjmlkgkgghkjjklmmmkejkkjmkmnnmmknmppomolononrprssoqppqsrolorqlninlmnonmjmllkkjnoppponknmplnookmmmflloppoqpqpnhmjklnnoookqqrqqrstsqrrsprqspolmilkifg`a[\]ZUUQOLKDC>??<651//.*'&%"! !!!
+
+		
+
+
+	
+
+				
+		FFFFFFFIIHFDDFJLJIIIHGFHHLLJHJKKJGIKIHJKKKIHIIIJKMLMLLNOMLLLHJLKMMJIJLMMMLKLLKJKLMOPMKKLMONLMOOOPPNKNQPLPPOPPPPOOOOOQQOQQRQPOOSSQPPMORQPOOPQQQPNPTSQRROSSSSRSTRQSSRRQPQSSQORTVVUTTUUUUUVUVVSVXXXTUXYWTUUWWXYXWVWXXVVXZZYXYY\\\[YXWXVZ[[[\]ZYYXWZ[ZZZZ\\\\[ZZ[[[]]\[\]]\]^_]]]]^_acb___^\^``a```^``___`abbabbbdffdcdceggecbcdceeffeffggfhgfhiggggfffedhklkllkjkjjklllkljjlnmmmmmmllmnnpqqpoqqpoprsrrrropqrtsrpmoqqmmjmkmponmmmlmlmknpppoopononlloonnmmkmppomnooopoonnnmnoppqqppqqprrrsqrtsrsttspmmmliihggd`^^\ZVRPNLIDABB>6653/.-*&%#"!
+
+
+	
+
+	
+
+				GHHEFFGIIHGGGGIJJIHEGHHIKLLIHGJLKHIKJIJJJKJIIGIIIKLLKKKKLLLLKJLKNONLLMNMOMLMMMLMLNNNMKJKNNNJMMNLPNMKNPOLOPOPQQPPPOOORRPPRQOMOOQRQNPNNOQPONQRRQQOQRQPRRSTSQQQROQPRSRQTTTTSQQRSVVQTTTTVTVUVVUTUVUTUUWVUTUTVWWWWWXUWWVVWWXWXXYX[[\[XWWWZ[ZW[\[[ZXZ[\\ZW[[[Z[\\\\\]]][\X^^^^_^^V]]_`bca____]^_abbaa_a``_`abccaaaa`edcddafhfcddcdfgfcfdddggfhgehjjhjjhfeghgkjmmllllkillmljhijnonloonlkkllmlqrqrsrqprssooonnrsspropnolpjmkninmommlmnolnlopoonjoonhmjnnnmoqpmooohmnomoppoompmnmpnooqqropnqqrqsttnrqrrqmoonkjhhhgc`Z_\XRPNLJHDECA7656/-,,'&#"!
+
+
+
+		
+	
+
+
+			GGGFDFGHHHHGHHHHHHHHHIIIJKHJHHJKKJIJJIGHGHJKJJJJHIKLLLIJJKGMLJMOOPONMNNNONMNNNONNNKKLKKMNNMLMOOOPNMMNNNNNPOPRQQRQPQPRRRQQRQONONPPQQPOOPQPRRTTRRSSQPQRRSTSSSRRQPPQQPSUTTUTRRQQVVTTTRSVXWWVUTUVWVUVXXVUTUUUVVUTVWVVVVVXYWVXYYZZZ[ZXYZZZZXVY\[[ZZ[\\\Z\\[[Z\\\]]]\\\[\\]]^__]]]]]]`a``_^_`aa_bbccbaabbb`abccabbabcdcddefgdddffgggfcfgfegfehgfhjklkjjhghklklmnlljlkklmnmjilnmnnpppmmlmmlmlossrrqqqqrsspoonsvtrqqqqopnmnonmmoonmlmmnonopponmjnonnnnmmopqsrooooooppopqonopppnnppqrsttsqrqqqrssstssqrqrrspmmkjihebba^ZYVSPNLKIFC@<:772.-+('%$#!


+
+
+
+
+
+	FEGGGGGFGFFGGGGGHFHIIGIJJHIJKLKKKKIJJIJIHGIJKJKJIILMMLLKKKMMLJNNONNNMINNONOONNOOOMMMNNMMNNNMNLNOQPONNNNMPPPQQOPRQPONQRSRQOQPOPPPQQPOPNPQRSSTSQSUTOPQRSSSSSSQRRSQQMQSSQRTSRRRTUVUUTSSWXWVURTUVWWUWYYYWVXXWVWVUUXUVRUVYYXVWTYXZZ[ZYZ[ZZZXWXZ[ZZX\[ZZZ[[Z[\\[[\]^]VZ[]\\Z^__]^]^^``a[^^]\`bb^acbab_b^dddbbbc`cccbdcdbecdedbdfgffefdghhehffghhiejijijjihkjjknnmmmlmhijmnljklkkooqpooonnmmmqssoopqonnrrpmpnsutqrosqpinpqnokmnonmkklllllpqolkknopmonmmopqrpmpppoompopqolqqqlnorsrstttrqrrnrqsssrusrrrrtoqlllmkidcbc[]]ZTTSPKLGEAB;:760/**%&#$! 



+

+		
+GHHGHIHHGFGGEEGIGEHIIIILKIIJKLLKKKJJIKLKFGHJIIJKKLLMMNMKJJLMLMMLLMMLLLNNNPPNOOMNMMNOPPOLLMMNNNNOQRQPPPPPPQQQONOQPNNNOQRRQQNNNPQPOPONOOQSSRRRRSSTROPPQRSSSSRQRTSSRQRSPPMRSQRSSTUTTUUVWWVVTSTVVXXWWYYZYZYXXXXXWXYYWUVXYZYXWXXYYYY[ZZ[[ZYXWYYZ[[[[Z[ZZZ\^]]]]\]]^[[ZZZ\\]]^___^_ba`a_^____aba^ba_adcdcddcbbcccccdcbdeeedddbcfffgffffghihggfhiiijkjjjjijjjkmnmklnmnnmmkomkmmmlmoqqqqpoopprrrqpknprppqqpoprrsqpqrqpnmnppmopnnnmmnnnnnlmqrnmnoopoonmnooooppqqqpnnopompoorsqppsturqsutrqqqsrqrrsvusostssrpnopomkihifca`\XWWQPOLHFDA<67631,(&%#" 







+FHHFGFHHHFIIGFGIHFHJJIIKKHIHJIJHKLKKKKLKJIJKKJKKLMMIMNMKJKMHMNMMNNNNMLNNOPOOPPNOOMNNPQPNMLKKOPPOPPQQPPPPPQQPOMPQNLPQPOPPQQPONPPQQQQOQPRTSPPQRSSNROPPQRSSRRQQSTTSSQRSSRRQRQROSTUUTSVWVWWVUTUTVXYUWWWUYXXSXXXUWVYXXVWXXWYXWVXYXWWWYZZXYXYWZYZ[[YZY\[ZY\]^\\\]]^Z\[\XVV_^][_a`Z`cb`_^__``^^aaabaaa]c``bdcc`cdcacddbeefccccbbaefhgfddeghhgfeijkikkjgihjklllmnjjfmkokomnnmkklmmlnqkqqonojpqrqqpnmqrqpqlplqrqppmololmnnmokoqpmojnnoonnmmqonnppomoonjommlnpqqqooonnqnpqqqrrqppqtprnrtsqrmrprqrnsvuttsssrqqnqrpnljjjieca^WXYUQQJGFE@?66661/(($&




+
+EGHHHHHHIJIHHHHIIGJKJIFIJHHIJIJJKLLKJJJKKKIJLLKJLNMLLMLLKMMLNPNOONNNNNNOPPPOPPPOPOOMOPPPNMKMPRNMNPQPOPONNQPPQRRQLNQTSQOQQRRPMPPPQRRRSTTTQPQSRRRSSRQQSSSTQQQPSTTTSSUUUUTTTRSTSTWWUTUVVVWWXXWWWWXXWVVWWXWXXVWWXYYYYWWXXXXXVWYZXXXVVXXYYYYZ[\\ZZYYY\^Y[]_]\\]\]^]^__^^___]]_a`^`ccba_``a`]^__acccbaabbccdcbccdcceffeffgfffeeddfhhfdddfhhgggkmmkjjjjihikllllllklmnmmnponmkklmmmnppqplmnonpqqrsqqrrqpoonopqonopoonoppqpnkoqqpoponpppoolnnnpqqnnmnnnopooprqqpqqoooppqrrttrrqopqsroqststuttsssrrtuuuvutpqrtrqolmjlmjfgea_]ZWRRPLGFA@><;7420,+(%"#!













	GGHIJJHHJJHHHFIJIHJIJIIIJGIIJIIHKLKIKKKKLKJLLKJJLLKKLKLLKMNKMOONMMMMMMMNPPOMNPQNOONLNLOONMLMQRPOOOONOQQQQONPRQQPPOQRRRRRRRRQPOPPPLQRRSSRQQRQTSSRUSQRTTTURRRQTTTSSTTSUTUUUSTTTSWWVRSTUTVWYYVWWWWXWTUWWXXWWUWWXYZZZXYYYXXXXZZ[ZYYVWXZ[ZXZV[[ZYYZZX\^^]^\]]^YY[__``_^`a`]^_`[^^_acba`___^___`bccbbabbcccddcccddcbfffaffggfdgdffghgaedghgegikmljjijljhhijhkjkhkkllminpoookmmmnnmpppnnjolmkpnrsrqqopmmkoopmponlnjnpqqsonknqrkomonpopoplllopppppomonqpporrqnpnsoqoqnnortsrrlonqprprstrtrutsssqqrssuwwwustutookolonmgigd_a][TUOPIICA@?<90420*+$$!!







+
+HIHHIKJHIHFGHHIJHJJJJKKKJIIJKJHHJKKJKLIJKKKLLKHKMMKLLKKKKNNLIMLMLMNNMJINMOOMNOPPNMLLMNMNPPNOQROPPOKNPQOTRNKRRQOOOOOQQRSSRRLQQPPPOPQQPRRQQRSSTTRRSSQQRRTUSSTUUURQSTTTSTUUTTUVWWVWWVUTVVTUXWUUVVVVVUWXXYXXWXXXWXZZY[[[ZZZYY[[[ZZXXY[[ZYZZZZ[ZX\]YZ\]]^]]\\_^^__^_`_]]`_^]^^^^`accb``______acccbacbbcbaaccdddeddeefgggihgffggggggghgeffgffhjkhihiijhhjiiijjjkkmmmmmnomoppnmnoppqqpopqplmopqrsqqqponmopqppqpnnmkmpqsrqomkoqpnlnpqqpppmmopqqpoqqqqpporsrrrrqnqsrsrrqqqsssrqoqqqrqrsttssssqrsrtuuttuwxxwvvtsqrrmqrpnlheda_\YWVRNMKGA@;97531/,)&$"!






+HGHHJKJGFEFGIJKLLKKKKKLJKJJJKJIHIIJJKLKJIIKMLJJKLMMMLJKLMNNMMMNNMLNNNKJMOONMOPPONLLKNOPQQQPNPRPOPOMNOOQSROPRRRQNOMOPQRSPSTSQPOPNOQRQPRRQPPSPRRQORRRQPOSTSSTVTTRPTRSPSQTSVVUUWWVUWVUSVVTTVUTUWWXUUTTUVRYZYZZXWXXUXYZZZVZWYZZ\[VVV[\[VY[]Y\[ZW]][[\Z\Z^^]\ab`]]Z^^_ZY[`^^Y`a`\`aa``]]\]__`cccbbacbcccabcdcdeedddccfghiheeehgjhggghheefhhhhijidgeidghijkijjlmmnoknnmkmopoooonqqqqqqqqpnoprqrsrqrmppqsroppppponjmoqoplpnmmoonmoossqpojnonnqinlqrsqopqqqoqoqnpmsttstutssstrqsrorqttsntsssqnrstutssqstxuwvtrsqtnqqqnnihfc[ZYYXTQOMJBB<;88420.+)$$#!











+
+	GGGIJJJJIGGHJKKLLJJKJJKKKKKJJKJJIIJKKLLKKKLMKIKKJNNMLKMMNNNMNONOJKMNONKMOOMNPQOOOOOOPQRRQPONPQQPNOKNMNOQPPPRRRQNOPNPPSRPRTTTRQQONRTRQRSSRRRRRRPNQQRQPSSTQSUURQRTRRRSSRUUVVUUVWUUWVUUUUVWVUUVVXXWUVVVUUXZXYZYZ[YXXYYYYXZZZYY\\\]^]\ZZZ\^^\[ZX]^]\\\]^^^^]aca^]\]^``_^`baabb`__^_`aa`^\`bdcbbdddcddddccceffffdeebceeggggffgjjigggfgefgghjigjjjhhjkkklmljijlllmnponllnppponnopqpqpqpomqrrqqstsssrqqstsomoqrqqponoonprponmlmorpqssrqpnnppoqppqrtsrqooopqpmqqpqrttsuwurrturrtsstuussrstutrqrsuwvtsstwwvuututtutqqrqnkjigfc`_]YSROLHDA>=;94//-+)'%$"





GGHIHGJIIGGHJJIIIIKKIHIJJKKHJKLKJHJKLLLLKJMNMKLJJMNMLLMLNMMLNOPPMHMNNNNNPPPOPQPOOOOPPORQPNNOOOQRQPOPPMNOPPPQRQQNPQQRRSQNPOSSRPQPQSSRQQROSSSQQQQNQORRSTTSSSUTSRTTRRTSSSVVWUTSVSUUVRVVUSVXXWVUVXYXWXXVUVYYYXYXZ\\[ZZZXWWZ[[[[\][^^][[Y\\]]\YYX\]]\]^_]]\^___a`^[^^```]``b^a`_]^]_`abbabbcdcbceeccdeedcd_dfggfcefffeegdifgefhhhhihdhghcgijhhikljhijmlmnmkjjkiiimmmllmnookmjklooonmnnlorsponstrosrppporpporrpkqrqoomopolollkorqnrrrpqqoqrqsostsprsqpooqrqmsproqsspsutpsttssstuuvuqssstvuttutuvwstvwvwstsuutuuurlsspklkkjgaaZZTSRPGEDB?=:701.,()%&! 





FIIIHIIIHHHIJJFHJJLLJHGJIJJJKLLMKIJLILMLLLOOONNMKNMLLLMLMMKMNNOPNMNPNNOQRRPOOPPONMNOPPQPOOOPPNQRRQQPPOOPPPPPQRQQQRRSSRPOPRPQQQQRQRRQPOQRRSSRQQQRRSSSTTTTSSUVUVUTTSUVUUUUVWUSUUUVVTUVVUVWXWSUXZ[YXYXVWZYXXYYYY[\\ZZZYXVY[Z\\[[ZYZ\]]\\\\\[Z[[[\]][_^\]__^]^`aa`_`____`ba`_`__^_aabbcbddddccdfdbcddedcddcdefedfghhhghjjigcbfgghhhhikifgkkhjjhlkjijkljlmlmlkjihkmmmllmlmmllmnmmnopqqpprrpnnrtqqrqqqppqtttrpmnqsrpqqqpomnpoooppqrqppqqpqsurqstqprsqqrsqqqsturopqspqsssssrrsrstuuurtussuvvvvuuxwutvvuvtsrusqtuttutssqolljgec`\YWVRNKIFC@;8531-+*(&! 



+JJIHGIIIIIHGIIIGJLLKJIJKIIIILMMLKJLLKKKLLMOPMLMMNNNLMNNKLLMNONOONMPQPNOPQONLOOOKMKMOOOQOOOPPPMSTSQQPPOQRPNOPPPSSRQQRRQPOQQQQRRQRQNPQPNQSSPRTSPSTTRSSTRTSSTTUUUTTTSUVUTTPVVUTTTTUUTUVVSVWXXWUWZZYXVWXZ\ZWWTYY[\[WVWYVXWYYY[]Z[ZYY\]]]]\]Z[[]^^\_^_^^\^^_]]\_aa^^```aaba`_``____bba^bbddebbcefdaeecacbcdcaeed`fhhgidhijigcdfgegggfheieijkijjjlkkjijdiklkmkkkliljmlllnmmmmknmljnkppppqqqnnkqssrrqsrqoqsttqpnnqrsqsqrqonprrrqpprroplpprrttrmsrpoqqpnssrmoqtqrnojsprrsnrqoopqqrsstsvwvsvqtwwuuvwqurutvtututrrvxyvtsttqonlifeda[YWTOOLJDB=<652/.-''#"" 






+	JJFIGIJJJJEGHJIHIKKKLMMKIHIKMNMLJKMMJIKLMMNNKKKMOPOOOOOMLLMNNOOONNOSRPOONMLMPOONNMMPOOOOOOPPPQRTSRQRQQRQONNQQQRSPRRRPPQRQQOQSSQRQOPRQOPTTPQUSSSTSRRSTTSRRUTTQSSSUSUVVUSSVXWWWWUUUTUWWUVVXZXTUXYXWWXZZ[ZXWXZ\\\YWWYYYYYYYYZ]]ZYYZ]]]^]\\[]]^``____^^_^]]^_^_`_]]_bcba```ba```__abbbbbccdddddfdaddcdccdccefecdfgefhgghghhggghghighiijljijihijlmkjiihhlmkjkkmopoonlmopolooppmlloponoqqonmnpqqqrrstsrrqqpqpoonpqrsqqqppqrssrqqqqrrqqqsstusrrrqpopqpoqsqnopqoqmoqqpsurmpqqqqrsrtsuuvxwwurruvttuwvuvuvuvvwvuvsvyyyxuutttqmkkjfd`]ZVUROLFEC?<:420.+)$$$!





	IIKJIGIGJJIJKJJIIJJJLLLJHILNMKMMLKLLKJLMNMLKLLLOPPOOOOONMMMNNLOONNPRQOMLKKLMPPOMOOOPPOOPQNPPPPRQQPQQQRSPPPQRQNQSTSRQPPSSRRPPSSSSRNQRRPQUUQQSRRRSTQSSUSTRTUSQSTTSSTWXWVTTUVUUXWWRVTVWWUVXXWYSTVZWXXYZZWYWWY[\[WYX[[[Z[WXW[[]ZYXYZ\\\^][[\]^^^_^^^`[^``]^_`__^`^^_a^`_`bbba`aa`^__cacbbcdeecefeccceeeaecdeggecefffhggfiiihiiheijijjglklfiihikkkjjgggignmknonprqppnopppppoqqmmnrrpnnnmlmmnoqpqorrspqqpoppqmomnprkpqpostsprmomqpqnrrrssssrroqnqnoopoqosopqpqrnspppvutmoqtrrpqrqprrqqvtttuuvtstywwuuvuvxwwvvuwuvxwvutuusmnjlfdba[YVUMOHIB?>>75/-,+%$$# 


HIKKJJJJJJJLLKJIHJKKLKKKLMNOMKMMLKLKJKLNJMJLMMLPPNKPPONNNNNNNMMNNNOPONLMNONNQRPOPPOOPQPPQRQPPQRQPOPOOTSPQRRSQPPSSTRPPQSRORORTTOTRQRSQPQUVRQQQRRSTTSTUWUUVUQSUVUSSUWXXWTSTTVXXWVVWXWVVWYXYYYXXZZZYYYYXXWVWYXXXVY[ZZ[\\[ZX[]]ZZZZ[[[\^^]\\]]__]\\__^_`aa_``a``aa`_`a_^ababaabbbccdcacdacdedbffee`efffgfeddfhgeeffghhghjkkkkkhhhiikkkjkjfijkkkkjjjlllkkmmmpomnopqpoprqqpppqrqqrsrpmlnnlnpqrqqspqrqqponnpqqqoloqqooqqqstrprqoopqqppqqqqqrtsrroqrrqopqssssqqssuuutuvxursvvtsrrrrqtvstusuvvuuvutxzxxyyyyxxwvxywuvvvuuuvuttqpnkhgd`^]XUROLIEC@=9630,(&$$# 
IIJIJJJIKKKJJJJJKLLLLLKKMMMKMKLLKJLMLILNMLLMMMLOOMMOPNNNOOONNMMNOOPPNKMORQPLQRPOPPPPPPPPPPQQPQSQPLONOSRQQRRRRQQQRSRQQRTSRQQRTTTSRRSSQORTUQPRTSSNTRRRUVUUVUUUUVVSSTVWWVUSUUVWXWWWWXWTWYYXYZYUZZZZYXYYXXWVXXXXYXZZYVZY\\ZVYZ\Z[[[X\Z\^_^^[\[^]]Z^__]__```_``a_`aa`_a``aaabb`aaabeedaddc`cdechffeedefffgeebfgfbfefciiihjllkkkjhhehgkkkijfjkmllmlhlmmklkmkmonijknoonopqmpppqrorqqmolnonmoqqqqqrortrrqnnnpmppqlmpqnooqpqrpptsqoonqmporqqpqssstpporrrrsstqtqqntvvuvrtwvpuuutttsrsqxwwvwswxvruwvuxzyyzzzuyvvvvvuuvrwwwvxtssrrpkjihbb^ZTUROJIGD?=860/)'&&#"



+JKJJJJIHJJKLJJILLLLKKMKJJKKMMMLLKJLNLKLMKKLLMNMMNNLNOONNNOONNNNONPPOMMMOQRQOOQPOPQQQPPQQOOQQRRRRQPONPQPOOQRSRQQQQRRRPRSTRQQRRSTSSSSSRSSSSRQSTSTTTUSRSUTTTUVVVVUSSSUVWWVWVVSWWWWWWXXXWXXXXZZYYZYXVXYZYWWWYYYZ[Z[YXZZ\\\ZYXY[]\]\]]\]___^\\\]]\^^_]]_`^^^^\aa__`ba_^`bbbabbadeddccdeeedcadfghhfefedffgghggggefghgfhjihijkkjijigegikkjijilonmnnllmlmljmnonnmmnnmlmnlooooooqrsrqonoqqrrqqqmoqqqqsutsqoopponpqrpqqqqqqqrqppssssrnprqrstqqrsstutsrrtuuttsttrqrsttutssuuruvtsstutuxz|zzwvxyxuuxwyyzxyzyyyxwwuwvwzyxwyz{zxutrsqpoligd_ZXXWRLKHFC>98520,*'##"		JKJKJFIHJILLLKLLLKLIKKJGJJLOONMIMKKLLLMMJKNNMMLMNNNNOMNKOONMMMOPOPONOOLIPQPOOPQPPQQRROQQPPPPRSQMQPOOPPOOOPQOQPPQTTSRPMRPRPRSRRSQTTSRTUTSSSSSSSUTVRTRRRSRSTUVVVUTTSVVWQWVUUWXXUXVXWXYXWVSYZZWWXZYXYZZYWXXYYZZ[ZYXYZYZ][Z[[Z[]^V]^_^```]`X]]_^]^_[^_^^^_^^aba^^]bbaabcc`bdcafge`bcddebedeegeggfef`dcgdhiighgggihgghfggggihhfkigfhjlkjiggmnmlnmmjmkmmnnopolonomnjonnmompopnrrrnpooprrrqqnmpqnqrtrqqqqokpppqqqstsppqqrsooprnrttnnotmtssqsqssttsqroussmuutppornututtturustqqrusvwxy{yvsyyzvwrwvyyxuzywvwwytywy{{{{{{x{wwwvvtqqhjhf__][WVMNIFDA:;761/))%%$!			
+HJJLKJJJKJKKKKKKKKLMKIJLLLMOOOMLMMKLMMOMKKNPMMLMMNOOOPONMMMNNMNPPONNOPLLOQLOPPPOPQPTSRQQQQNQRTQNNQQPOQQQQPOPQROSUTSRQRSQRRRRRTTSTUSRUUTTSSSTUUUUUVTSRSUUSTUUTTTTTVXYWVVVUUWYZYXXXXXYXXWWXZZWY[ZYYZ[ZZYYYYZYZZZZYZ[[\[Z\[[[[]]^^_``_``a`__```^^``__^^__^`bbba`abbacccccdeddefeccddcefeeeefffgfedbdhiiijiihiighghhhjiiiijkklkhfjjklmllkkmmiknnnonmmooooppoooooopomnoooqrqrrqqrqpstqqqromnppoprssrqstpooprsrprtttrprtsrrtssrsrnqsstrsssstsssssssptsstuvsrqrsuuuuvvvwvrrttssutuvvxzyvtxzzzyxwwwwwxywtsxzyyxxy{|}||zwzywyywwwsommkgca^\XTRQMHDB>:852/+&&$! 
			
+	LLLLLKKKKHKKKKKJKLMMKIKLMMMLOOMLLMNNONOMKJOPOMNONMONQPPOMKLNONNOPNNLNPPOPQRRQPPNNOPSTQRPPQQRSTTRQRRQQQQSRMPQRTTSRQPORTURSRRQTUURSSRQUTTPTSRSTUVVVVUTUUVVUTTTUTVVUWYYXUUUVUXXYYXXVTWWWVWTWYZWYZYXY[ZYYZYVZZ[X[ZZXZ[\\[Z]Z[[\[[[___]]]a]`a```_^^``__`_b_`abaabbbdbaaa`dbededdddcdeecddeefdffeeeddadhjiifigghhhgghhiilfkkjijkkijllglnnlnnnljioopppmnmpqpmpnmmnkomomnnnoprqprorpprurpopqonpmpnqrtorqttrmnprkrrspusrormrqsttqrqqotuuqsotstqpqsssuupsrtttttptrssssvwvrxxutvsttvpwuvxxsxvyzzy{xxxvttvyutsy{zputy{}x}{ywzxxyywwvuommnjfcb\\SUSPMIEB;:540-''""!

				KLMLLKJJJJKLLKKLMMMLLKKLLLLLNOKMMNNOOONNLMORQOOQOOQQQPQQOMLOOONQQQPMNPPPQRTSNPMOOOMSTSRRQQRQNRTTRRRRQQQRRRRRRTSRPONORTTUTSSQSTSRQQPQSSTTTTSRSUWWTUTTUVVUUTSTVXXXVWXXWWVVWVWVUWVXTVWXWUVWWYZWXYXWY[YXYYXXZ[ZZ[[[YYZ\]\\][\[\]^^__]\\\`a`a`_`_^^__^`accbabb`aabccdb``bdeeeeecc`efeddddehgggfeeggfefgiigeggfgihfghgjklllljikklllllkkmmnoonnmnoooqqqpqqrpooonponooomnnnmopppqsrpoqsqppqrrrqqqrrtsrpqrsrrrtqqqsssssrrrqpqrtrrrsrrsuuuuvttssssrstvvtsrstuuuuttrtvvvwwwvwvtvuuvvxxvvxwwxyz{zzxxwwvuwwxyxyz|yvuwy{||}}yxyz{|{xxvutqpnligec_[XVSPKGDA<6420-)'&$ 	LJLLKKLKKJLJJJKLMMMLLLLMLKLKMMLMNLMMMNMNOOOPPNPQQPOQQSRPPPQQPNOQRQPOPQQQQRSOOOOOPPQRTTTSRPPOOQSSRQRQRRQQRSSRSSRPQRRQRRUVTRSRRPRPQPQRQRTTTSSRRSTVVVTTTSVWVVVVWXXWVTUWXVWXXUTTWXYYYYYXXVWYYX[XYXYWYYWVXXYZ[ZYYYYZZYX\[]\\[\[\\^_`]]]][`a_a`]^_^__`a`a`bba]a``_`^a`c`bbdcdcfggfdefec`ebcefggggfhhgehijgfehhffijieigijlklmkjklmllhllkkmonmmlmnnnnmppppppolpqqrqoqqomnonmnopoprsmnoonppoossrprqrosrqrrltorqsrrpssrmsttqqnrqrmttslrstuvsrpprvtrotuuptsstutwutrvvvwwtwuuturvwwvwuwwwwwwxvzyzyytvtxvuuyzzxzuyuwyz{|}}yxxz{{|zxxsvtrqqmkjied][XUQMHGB@87630,'(%#	LKLKJKLLKMMKJJKMLMMMMNLMMLLLKMMNMKMNNNMMNPPOONQRQONOQSRPPQRRMNNOPQOOPPQROPQQPPPQRSRQRTTSRRSRQQRRQQRRRRQQQRSSOTRQRTTTTUUUTRRSRQRSRRRSSSSTSRRQRQRUUUTTUTSXXVSWWWVVUUTVXXXYYXVWXXZ[\[XWXVWYZ[[Y[[[[ZYWVWXYZZYY[[[[[ZY[^]\[Z]_^\]^``^]]^___a`^^^[^`bbba`aaa``a```a`accccdcccfghhfdcdbcefggegijhiihghijjhghjjhhillkkjjkllkljjlmmllmmllkmollljkmoommnpnmmmmopqqqqqrqpnnpnmopqonqrrrrrrtusqqstsstsrrrrssssqqqstrrrtrmsvuttuttstuuqoqtvvvtrpruvtrstutrsutuvxxwsruuwwvuuvvwvtuxyxwvvwx{zxxyy{z{zxwxyywxy{z{zyxuwzy{{{zyyy{{xxy{ytwxvttrpnmkgd_YWROMICB@;753/,*'% 
+	LJLLJJLKMNMMKILLNNMIMNMKNLMMMMNNLKLKNONLNNPONNOPPLOOOQRRPNQRQPNMQRQNNNQROORSRQRSSRQNRSSSSTTTSPSRRRROQNPOQPTUTTTRSTUTSTTTSQQRSSTTSSSSRRQPONMOQQRTTSRTUSTVXTUVVTVUTTVXWVXXYWXWYZZ\[XWVVVWXXXYZ[\[[[ZXWYYYXZZ\]\[[Z[[[\^Y[[_a_\][^^\X]__Y^_b\__^___cdc^aba_``bbbbabc`bddbcdddgggdccddeghhgghhhhicghhgjhihjjifikjkkkllllkijiljnnmmmklkmmkkmlkloooooonllgnnolpoqqpooknnmkppqqpnpqqtsoturpqqttttttroopstsrrputsorqrkstuuuutssovsqitvwxxwtqtutrsrstuqtpuuwsyywrssxwwrsuxywwvvyyxwvqz}{uzyy{{w{{ywytyzzx{u{wwsy{yxyvyuyv{yxwy{zuyyzvvusqomjeb\[VSNLFEC?7853/,''"!

+	KKLMKIKLMMMMLLMOOOLLLMMNMLMNMMONKLMNNONMOPOOONMNNOPPOOQRQOORQPOMQRQPRRRQPPRSRRRSSRNQRSSSSSTUSSTTQSSSRQRSRRTTTUTRSTTSQRRRQPQQSTSRRSRPNLIDBAADINQRRQQSTSTVWWVUUUVUSTWXVUWVYZYYYYY[ZXXYYWXVVYXZZZY[[ZYZ[\[[ZZ[]\[ZZ\\Z[]^\\_`^\\]][YZ]`_^_bba``__`_bdc`aba_baccccbbb_bccadffeegfeffeddgggffggfggfeihfiiihhhiiiigikllllmkjkklnpommlklmmmlmlmnmpppponopopppoooopqnmooopppqqrtsnmppsrpppoprsstutstrnpqrtttttuusrqqpnruutttqqqrutqqtvwxxwttuuttttsuutuuuvvvwyyyxxyzxsvuxxwvvxyyyzxxy{yz|}|~yvy{zzxxzzzwy{xwvwz|{zxwxzz{{{zww{||{{{{ywtrolkhdb^XUSPNJFC?;950.,*'#								KJLMKFKLMLMJKKMOOKMMMNNMNIMOONOOLMOOPOOMOPONONMNOPQQPPQNOORRQOOOQSQPSRRRQQQOQRRTTSRSSPPQRPRSSQTTQQUUTSTSSPSRTTTQRTTRPPRNRRQRSSRLOPNJC=5-'!$'19@FJOQRRQRRVVVTTTWUUVVUUUUUYZZYWVYZYXYZYWYWWWYZZZ[[[XZ[\[[[[YZ]][ZZ]ZYX]\\[[[\[]]^][[^`_^_ab_aa`^^^abb``a_^bbaac_ba_^babbfffeddedfgedefgfedgggbhhijififffgfihjjjillljklllmmmlpkmmmlmklmnnnmmmoppnoonnopqorqplmnnpqqqprsrrrsroprqpqrrpopsssrssrrsorsttttuqtsrqqpopsuuptpoorttussstuvwvuvwsrsutuussustouuvsyzzvxvxtvwxxvuuv{yy{zuxxyz}v}yyvwwzzyw|{zxxtvsxy|y|zywyx|z{x{xy{|z|{{zzwusrlljgbaYXTUPLFGB@:832.,'%  !		
+	MLLLKLLMLMMLKLLONKMMLPOMONMOOOOOLNNPPPOOOONOOOMNOQPPQRQOMOQSPPPPQSQQQQQQNPPONQRTTSQTSPPQSRRRRQRUPSUVUTTRSTSSRSTSSUSQPRRQRTSRSRPOOOKB6*
	&0:DKOPRRQTVUUUUUTWWUTSVWWWWWWTUXYWXYYXWY[YWXYZZ[[ZYYY[[\[\\]]\Z\[\[ZX\\\\\]^`____]]^_^_``aaaaaa```abbcca`aa^_accda`aacffggfedddefceffggggghgfgiijjiiiiihijikkkklmkklmmmnnllnnnmllmnonnonloolmnnnnmnpqprssqonnnqrrrqrrooooppqssqsuussstutpqssttssuuttstsstsrssrssruvtqsttuvuuuutvwvtsuvvttttvuttttsttttvvwxxvuwxwxxxwuwy{yy{zxxyzzzzzwxyyyyzzz}|yywuwzz{{|}~{yy|{|{{{{z{{y{|{yzyvuurplhgd`\[XTOKJIC>:852.)(%" !% 					MLLKLLMLMLMMLMMONKMNNOONPMMOOJNOONOONKONOLNNONNLPSRQPQPOOPQQRQPPQQQNQPPPQPQQQOQQROSSRPRSTSRRRSTTTTUTTTTQSUUPRRTTTRSQSTTQRTSQRTSOQOF8(		
+",6=DJNPRTUUVVUTWSSSVXYWUTVWXWWYXVYXWVXZYXXYXY[YZZYYZ[[\\\^[ZZ][[XXY\[\Y_^_``^`\___^_`_```a`bcb_a]cddc`]_``_cccbc_bbcddegda`abeddfggiihbgggdgeijigghlkkjjhjlkhjlkglllknjkjmnnmlhlkoponnloolloonnokprrqqoqqqnoopprqqqoopmnkqrsqstuuusvutprstutrqssrtrsqssrqsssprruvusuuttvvvvvutturrtttvrvwwuuuvttutottvsxsxtwxwtxpwvvwxxyyxvvvz{yvvuxw|{zv|{~wttxuyzzz{x~z{wzu|w}}~|{zz{{{{x{zwwxssmlkhca[YWTMNJG?=6620**$%  #$
+
+			LLKKKLMMMMMLLMNNMLMNMNLNOMNQOMNPOMNNLLOOPONQPNNNPSRQNPPPQQPPQPPQQQQRRQQQSRSSRRQQQQSSPRTSTSRRSTTSRSSTTTTSSTSSSSSSSSSTTUUSQSRPRUUTQL?,
		
+$.9AHMQRRTUTVWVUVWXYWSTVXXVXZXWXYXYXYZXYYWXZ\[[ZY[Z[\X\]]\\__][[Z\Z\_aa^^_a`_``_^```_]```acbaacdec`^^``aadedddddddccdfdabegfecfgiijgfgihggghighikllkmljikkihljjlmkklllkjlnommljmponmloomnpqpopppqqonopqrrpnopqqnpsrqqopqrrssstuuwvurqrsttsrrsttstssrsrrrstsstuvtrttrrwzxxwurstuuvusuwwxwstuwwwvtuvwvxxxwvvvvxwvvxyyxxyyuxyyy{zyxwwv}|{|~|uwzzwxyzzz||{{||||||~~~{y|}|||zwy{ztponkieb]WVSPNIE@;862.+*'%"$'		KLMMMMNNMMNLLMNMKLMMNNNNNNOQPNNONLLMMMPPOOPQQNMMPQPOPQQQQQONNNPSROQRRSRRSTTSRQQQRRSRQSSRRSTSSPRPRQQPSTURTRRRTSRSTTSQTUUSSRQNSUUTNE5 			(09@FLOQUWWWVVWVVVUVXUYVWWVVYUXWZZYXYYYYZVZX[ZZZ[\\]^^][^_]\\\\\^`a`^_`aa^aa_^_`bbaba]`ab^cdcba___``a`dddeedeeeecdghffgfgfeegfhefdgkihihhhheijjklmmkkkkkkklmmhkjkkmljkooonmjllnkkkpnonpqqoonqqpmnmpqssoknponnotsrpqpqmrpuutqtvusrqrrtssrsvvqsqsrsrtsrsvwtrvtqpqrrsxxwowttttsxxwtvtxvtssuwwwwuuwtyyyxwtwsuwvtwxywxvzyzz{wz{{zzxxt|z|y{yxuy{zwwxxyyx|||||}}zz{~zyy|z~~~}|xyz}}wqssoijcbWWWSMMGE>=75.-+*%" %#	LMNNNMNNMNNNLMMKKLMNNOONOOOOONLMLMMNMOPQPOPQNPPOPQONOQQPRQNMOMQSSQPQSSPQRTTSRQRSPRRRQRSRPSTSRSSRQQRSSSTUTRQRSSRSRUTRTVSTSRPPSTSRH:(
+		
+&2>FMRVVVUUWXXXWWXYYYVYZZZYWWZZZXVZ\ZYYZZZYXYZ\]^_]\Z[^Y[\\]^^_`^^_``abba\\]_bccca^^`abbcca^`cddbbccddcadffbddehihgfeegfghhffeehjlkjhhihihhgkkklnnllmkjkmmllmnnmllknonmnlkjlnlmpqoonqqooprrpppopqsrmmoqpoprtsroqrpmqtuusqsutrrtutssrrsvwusssssttsssvvssutoprstvwvtsstvwvuwyxwwwwvtsvwwxwwwwvuxxwxwvvwwxutvyzxxwzz{z{{zzy{{zyz{|{xz}|{|~{yz}~}|{|}|{{{{|z|~}}}}|}~~|}~zxwurpmida^ZVQNIGEA=962/+&$!##
	LIMONJLMMLNNNMLLMMLLNONMMPPNNOOPONNNPPPQPNPQQQQONKNLPQPOQRPOONOPRRQOSSQQRRSTSRSRRRSSRRSQRTTSSQTOQPSSRORRSTTQSSTSSSSSTUSQRRQQPPONA,		
+
".8AHMPRPVXWWWVVVZZZZ[ZZXWWXZ[XXZ\XWX[YXWXY[\]\\\\[\]]\\[\]^``\^__\`a`_^^^_`bb^a^^_aa``ba`cefeeebddecbaegfdefeegcbafgggggfffdhiklkgfehghehijflmnijkkfkjmjmlnnlikkjkmmnlkimoonnmopqrrmlmsrqqppoornppqnqorrrsroqrrostustqqrqpsqvutqtuttssroqosttotsstssuwurrtuwxvuopqvuwvutvvvwxstttuuuxxxrxwvuwzzvxqxtwvwwxzzz{w|zyyxxyz{wz{|}zv{~~}~z|{}}}~~y{w{{zy~|~z}z{|~|~~~~~|xyvsqqjgcb[[UQIGFD<<65/-)'"!# KLMOMKHJLLMNNMIMMMLMNONLNOPOOPPPOOONOPQRRPPQQQQPONNPQPNOOQQPPQPQQQRRRSPRRRSTSRSSSSTVTSRQTUTTTUSRRSTSQRQQRTUUTTTTSTUTRSRSTTTRNROH8#
+			
+
+#0;CJPSVWVVXWXYZZZYYXVY[YY[[[\\YYZZYYYZ\\\]]\\\^^]]]\^\[\_`_^^^`ab`_^^^^]aa````aaa````adgfdffdddefdbbffedddefecdfgggefehgehihjkjhejjjjkkkkkkkhjkjjlonmmmmmllnpmhloonllnoqoonnrsrssqrrqpqpqqqrsttrrqpqrrrrrqrststuvvwuuvuttuvttttsrqpoprsttsuttttusuxwuwttwwwusqsuvvusrtvvuvuuvxxwvwxwvwywvwy{zxwwzyyyyxz||{x}~{{{yy||wxz||yw{}~~}}}}~}|}€€}|{x|~}|{{|~{y{~|||{|}zzywvsqmjfa]ZSPMKFA=:740*(&# ""
+		KLMNMKKJMNNMNNNLMKNNMMMMNPPONMNOPQONNMQSSQPPQOPPQQRSSPPOPPQPPQQQPQSSRRRSRNRSQMSTSSTTTPRRSTTQTTSSSRTSQSRQRTUUTTVTTVVRSTSTUTTTRRK@/				
+ &3;DKPTUVVVYXXSXXZWZ[YXZ[[Y\[[XZX[Y[]]\^]\Y\_`[_^^__\]]_^]^_`caa_^\^_`aa_a_aab_bba_abfecccbb_egfcccfecaedecddfgggghihgeijihhghejjkkllkjkijhijlllmokmlkilmppohkjnonnnmpoonnrsqrrqrrnpopqqqsuvuttsnrrsssqstutrpvvwxvwwutousvvsoqproqsuvuruvvsvuvprtvvvutrxwvtrotturrqtuwswvvvyxwwwswttuwtuvxxxrwxzyzyuwxxzw}}{x}{z~}vwy|xvw|}}~}{~|}{}}}{~zzy{w|~{{v}~}y|yyx|~~~€~~}{zxurrokb_^ZTRPKCA@;83+)'$ #	
+LMLLMMNOOONNMNNLNNNNKMNOLONMLKKPQRQONMNPPQNPPPQPQSSSSQONOQQPRSRPNQTVTSSTRPQROMSUQSSSRORRQTTTUVVUTTSRRTSQTVVTSWUSTUTRTUSTUUTTSPE3	
+
(8CLQRTVWXWVWYZ\[ZYZZ[Z[]][YYZZ[[]]]^_]\]____^\]_`^_^^]^_accba_^^_abbab`abb_bcdeddefcbccccehgedegecffffdddfgghiiiiiiijjkihhjjjijlmllkkijjkklllooomjlmooooommopoonloppnoprrpnorropnnpqrrtuutsrqrrsssstvvwvuvwwvuvwuutuvwvrqqqtuuvwvttuxwxwxwvvwvvvuuvvvvusstuutsstvyzxwwwwvvwwwwxxywvwxzyywvwxyzyuvxxyv}}{z|}{}|{{}|{zz|}z~}|~~}}}}|y|~|z{{{|~~~~~€~|{w|€€~}|{xutsmjda][WTOLHD?:61-(%" "# 

+MMLLMNNMNLNNNNMLNNNMNNOPPNNNMLNQRQPOOMLKPQQQPMPQQPQQQOPOQRQPRSSQQRTUSRSTSQTTRNSSSSSRQPSPSTUSUUVUUUTRTTRRUWVUUUTRSTSRUUTTTPRTRL=&	*4<BHNQUVVVXY[ZYZ[[XZY[\[YYZ[[\\^^_Z^\]^]^^[]]^``_^__[aaccb`_\^_`aaac`abb`bbefebccbcdbedeggcdehhhhggfeebgfhhjejjjkjijkjiijjjiiljklkhgflmljkknoonmmnkkkppnoommnnlorqlopqqqlqsroonopqprouusnsqsuutqmtttttuvtwtstuuttuvvusqrrtruuuuusvqwxxqxxxsvtvvwtusvpuvvvutvpvwxwwswtvuyzywvvxxwsxz{x{{ywxvxzzyzywv|{{v|~{yzz~||||{}~}}{|}~~~}zyx{}}y|||||~}}€z}y~€~~~~zwvtpih^a][WSOKFB=911*(##$%
+LMMMMMKKLMNONMLMNNOPQQPOONNOONMPPPOPPQOOPRRQPPPRRQPPPRQQRRQORSSSRSRRPOPTTUUUUTRPQSQPPPSTTTSSTTUUTTTUUTPTVWVTSSSUUVVVUTRUSQQSOE3!'2<DMQSUVVYYXZ\ZXXXZZ[[\\]]]^^_^^^_aa_^^^]]^___^__^acdb`^]\^__acccaabbabcddcb`cddeeeeefeeddgjihgffffghiijlmjikkjiijihijhkjhjjkkjhhiknmnmllmmmnoonmnppnnmknooporqonoqsrqqrpnpqrsttrsuusrsrutsrqrssqqrtvwvtstuwvuuuutssrssqqrsuvwvvvwwwxzwutuuvuvutuwwwxyuwwwwxwuuwwwwvy{zwwsuwvtxzzz{|yxxvwz{}||yv|}{||~{y|€}}}€€~}||}€€}yzy}€~}}€~}}~~~~€~€€~~~|xvurnkgc`]YUPMIEB=830+(%# &$MNMMLLLKNNOOMMNMOOOQQMOOOOPPPPOOOKOOQQPPQQPNPQSSRQPOPRRSSSQPPQRQRSRRQNSUUTSRUUSSTTTRQPSSTSRSTTTUUUUUVUUTUWUPQQRSUTTTUTQTTPQQI:'		*4=FMOUWWXZRZXWWZZZ[[\\[^^^]]^^`aa_]_Z]Z]]^\^]]]`bca_]^]^_`accdba^`abed`aabdecfefddceffcfehggeefggiiihkkiihggfiggeiikkjiiklkkiiklmmnonljjhnnppoooonolknopqrrqpnmqssoropnopsttssrurssssrpsossttutttwxwttrvxvuvvtnsttptqoorovxwuvwvwxtsststovvvrtuvtwyyxyuyvvttwvvywx{zvwrvwvuywzzzxxtxxyyz{|{zw}~|{~zzz€}x}~€}|{~‚€{}z}}~~~€€{{|~}~€~~€€{}~}yyxuqpkgaa\YRPKHFB:80/((## %%MMMLJKMONPOOMMNOOPPQQOOOPPPOPQOOOPONPRQPPPPPPPQRQQQOPQRSSSTTRQQQRRRQRSUVVUSQRRRUVWUSRQSSTTTSTUUUUTUVVURSSVUTTTSTTRSSTSQRSSQM@-		
+
.9CKQUXWWYZZ[[[YZZ[[[\^]][[\^__^^_`^]]__^]]\_``bb`]^]_`bb`abb_^_`bfec``bddbeggfeeghgfffghggfggggfdgjighgggjjjhfilkjjkklmkkjkllllmopoklmnoopppponommnnpqrqponopqrqrpppsssttssttttttsptuvussuvvuwwxvuuwvvuuvvsqrtuuuvtssrtwvvvvsvtqqsuuttuvurtuutvxyzzyz|{xxzyyzxxywtvwwyyzzxz{zzyxyy{zzyzyy{|}{{|~~~|w|~~}|||‚‚‚ƒ€|~~~|~~€€~}‚‚€€‚~{}~~}|xttrlgfe^TROMHDA<83/*'$" '& LKNLKJLNPQRPONNOPOOOPQQPQNOMOQPNQQOLNOROPOQSROOPPQPOPNRSRSSSRPRQSSRQRSTSUUTRRTSRVUSPPPTSUVVTSSTUUTUSVVUTSTWWWSSTTTSSTPQRRSNE4
+	
+
+&3=EKOQVZ\\\\[Z[YZY\[\]][]]][^_``_^_``^^^_```abb^]\`bccb]`\_\a`beec`^ceecgfhhggiihfecefghgdfeedfhjiiiigikkijehjldklkjmmlkkmlhlimppkmnmmnmoppjnqpopopqplmoqqrqqqonqptsrsuottttttsprtvuursrvoustttqwwvtutvrqorrutvtwuupusrrvruvtoqrwwursrrruuuuvtx{|xz|{xxyzxyywuttuvxsyyzwxy{|{wxy{z{z{w{|||zxxy}x~~{y{{|yxy}}}€}z|~€‚}~~~€‚‚}‚€€yxwwspjkdbXTQQJGA@;82/('#"#'&NOOONMJNPQPPPPNOPOLLMRQQPPOOMPQQQROLMOQRQORTSQQQPQQQQQRTSSSRQPRSSSRSSRSTSTUUUUTTUSRRRSTUVVVURPQUUUTTUXWUSUWYXVSTUUTTTQRSSTJ9'		
+*3=GOVY[\\\\\\[[\[[]^]]]\]]___^_`_`^___^``^abcbbbabdbabcbbbabccb`acefgfefgffghggdcefdhhgfffehjjiijjiikkkjigjjjjlkhkmmkknlnmiloonnnkjlnopomoqqppqqqqoloqrrqnqrrqprrqrtttuttusqpstuuutuwwxutuuuwwxwutstutstttvvxxwutvvtsuuuuuuuvxxwwvvvvvutuvwx{zxxyxxxz{wvwvwxyyyxyyyzvwz|}||{{{z{z}~}~|}|xz}~€~}|}~}|zzy}~~~~~~~z{|‚ƒ‚~~‚‚ƒƒ‚„ƒ€ƒ„…‚‚‚|yvsqmiea[XVRLHC@;72.*%#!#)OQPLMMMNOMMIOPOPQPPNPPPNQPQQOQSSRRPMNMPQPORSQOQPORQQQPQSSQRRQOSSRRSTTSTTSUVUUSSSTSSSSTTRUTSSQPRVVRRRTWWUTVVTVVUUTUTTTQRRRPB-		
+#.8AIOSX[\[\\\]\]]^Z\]^]]\_^^^_]]^__]\___`bceda`a_cadeedbaabcdbadeefdddde`ddffebfgfdhgfeefjkkfigkeiijgjihgjiijlilnmjmnopnilmonoponnmnmmkppponopqrqqqrnqprrrsspqqqmrrsptsuqqquvvtuuxyxwvvvsvxxryvtqtvvuutuswxwqtuwxwsurstsquxxwxwvqxwwturwtyyxwwuvvwz{vupqrxyzzz{{zzvzz}w{z{{|{|{}||~}}}x}~~|€€x}€€~}}|y~}}{}x~€|~zz{€‚‚‚‚‚ƒ‚€|‚ƒ„€‚€~ƒ…†„€ƒ€|ywurqkid`\ZUOJGB?75..'%!%OPOLMLLMMNMMOOOPPQPOOOOPPQRQPQSTQPPPNMOOOPRRPNNNNQRQQQPRSRRQRSSTSRTTQTUTTVWUVUSRTSSTTUTUVVTRRSSWVTTUTSTUUVUTTTTTTSSTTPRROI8$			
+$/;DMTXYZ[[]^]\^^\\\]^^^__^_^\]___]`ba``bcb_`bdcdeddecbbbdecacfggfeddeddeeeeffhgfffdefhjkkjiiijijiiihiijigjklnomlnononmmnnopqpqpooonnpppoooqsrrrrrrqrrrqrrqrsqoqttsssssqquvttttwxvtrvvuwxxyyywwvvvuuuvtvxvptuvwwvvvrsssuxwvvvvvwxxwvvvtwxwwvwvuvyzwvwwvwxx{{{{{{||}|xz|{|}}}}{{}}{|~~~~~~}~||~~~€€€~~€‚ƒƒ‚‚ƒ‚}€‚ƒ‚‚ƒƒ€€‚„ƒƒ‚€}}||yvtngea\VRLJGB<741.(%"LMOMMMLLLPOMPPOONJPPQPOPPMQQOOQRRQRQONNMOOPQQLLLORRQQQRSSSSRSSRQRRSSRSUUUUUVVVSNRSSSUVTVVVUNSTUVVSUUSQSTUTTSTSRRSQSSTPRRJ>,	)2=HNSVX\^\Y]\\[]]___``_`a`_^^\\_ba`aaa_`acdbbdcd`bccacdcdeffggeddeefefffggeibdefggfijjhiijhjjjjjijkjhjjilnnmmmmmkonnkklpmpppooloppoooplqstssrrprrqqpprotutmtqussrrppqtruutrusrqsuvtwtxyxuvvwvusuvvsutuqustuvswvssvtutwwvuuqwyyvwttsttuvvvuuwxywxyyyzw{zzy{x||}}|x{w{z~x€}||{}z{|}~~~~€€{}~€€~€€~€‚|„‚„ƒ}}€€€}‚ƒ„€€€‚‚ƒƒƒ~|{vsjjb_YUOLJF@<740,%$MNOOMMLLLPQOPPMNMMPQPNMQOPQPOOMQRQQPOONLNMOQQPQQQQRRRRRTSSSTTSRRORRSRQSTTTQVVUTQPSTTUVTUVUTSTTUVVVUTRSSSRUTTVVUTSSSUUTSPD1
+				
+.9BKSW[\[Z[\^^_```a``aba`^^^^`a^`^baaaacedcefc_bdccdeeffefhfddffdffihffghhiihhhhdikigiklkjkkkjklmlkkkilnnopmklmnonnoqpqqqponjnqpoppooqrssttqrssrrrrsuvvuvutuvutsssttuuwutuvuuvwxyxyxwvuuvvwustvvvustvutsuvwvvuwxwvwwvwwvuwyxwwxxxwwwuvuwwwwxw{{z{{y|zyz{|{|{}}x{|||}€}|}~|€~}{~€€€~€€€€ƒ„†…„€€‚€~€€€€€ƒƒ„€ƒ„ƒ‚‚„…††…‚|zvsnhb^YTPLIE@961.+& MNPPPONKNOPPPQPMMNPPOKNPQQRQQPQQQOONPONLNNOQQQRRPPRSSSRSSSSTTTTSRQRTSPPQSSTUTSTSRSSTUVTQUTTTUSTUVVUTTSSSVWVWWVUTSSTUUSSM<#		
+
+
+		"1<DLRVWZ\^^_a^aa`^`]`_`a``bbaaabcdb]abeedecabbdefffggcfggdghgcgiigfchffghiihhfjjhhjllijkkkkllmlklllmnlnonkklnoooompqqqqpplpnooonpqrqpqttsstqpqrrtuvrtrvrvvutvuuvvvxxwuuquvvwyxwvxuuqtvvuwsstwwvttttuutwyyxxwyyxuxxxwwtwwvtxrz{yuuuwvvvxwxx|zyy{x}zyz|y{w{|{z|{|w||~w}€~~z€}~|~€}~|€~~}~€€€~€~}}ƒƒ‚ƒƒ‚†…ƒ€}}}€~‚ƒ„……~‚„„…€„†……‡~‚~}yzvrnib^VTRLFC::31/*"!NOOPPPPONMOQQQRQONPPPQPOOOPPOPPSQQQPPPNMMOQQRRRQOQSTTTRRRRQSTTSSSSSVRQRSTUUTTRRSRRQTUWUQTUTTTTTUUUUUTUUVWVWXWUUUSSRTTSND1	
+
+				
+
+
&2<FMTY\\]^_``^]^__abb^`abbbbabdb`abddcccddeegggfffeefghijhgghhfhjigggghiihjjjhhillkklkkjlmliklmmoollmmnnmnpopnmoqpopqrsrrqpoprtssrrrrstropqstvwtqsuuuvuuuuuxxwvvxxvtstuwyyxuuwxusrwvvxxvuvtuuvstuutvyz{yxyzyxxxxwwwxxzzyyz|zyxxyxwwxyy{zyyxz{{{}~|{{{|}}z{{zz{~}}~~€€~€~}~~€€€€~}€‚ƒ€‚„ƒ‚……„‚‚ƒ‚‚ƒ„‚‚ƒ„………ƒƒ…ƒ‚…‡††……†…ƒƒ‚~}{vrnjd^YUQLGC>:60-)$!NOONNNQQOMOPQQQPOMOPQRRPOPQMOOQQQQQPPPMEMPOOOOPOQRSTTTSQRRRRTTUTTUVVTSTUUTTUTRQPQQSSUWVRTTTUTUVUUVWVUUVVWWWVVUVVVUSRQPG8&

+
+
+		
+	
+(4>HOTYZZ^\\[]\_`bc`^_`cabaa```aaddcbegfefcghgbfbfffgihhhhfhiiiifghiikllkjjkjkmmkmnmlllnhjkommnonmlkkononmlomoponoorsqpsrqqrrsrrqppqqqornuststosuvvvutqsvxwusuwwvuuvrxxyxwuvrwutxwvwwyvtrsuvsuvvuwuxvyyzzyvytwwvxwx{yyyzyxyxxzzyt{{yxxsywyx{x}}{{|}}|}y|vww~|~~~~~}}{~|€€~|~z~~€€|}‚€€€€€{ƒ‚€„‚„ƒ‚€‚„…„„ƒƒƒ‚ƒ†‚……ƒ‚……‡†ƒ…‡…ƒ‚‚ƒzwpoli^[WUPLEC=:1/*("!MONNMOPPPPOOPQMMNNOQPQQPPQQQPPQPPQNPQPLIKPQQNPPQPQQSSSQSTTSRQTTUUUUUUUUUTTVVVSQQPQSUUUVVUSUVSVWVUWWVTTUUVYWVUTVWWVTQNK=*
+	
+				
++8CNTX[]\\]__`cdba``bcaaaabdccefddgigfffgigeeeegeehjghhgijiihfhijklmmmkkkjjlkkmnnnmmmlmnonkloqolopppooopoooopoopoqqrssrqpqstrqqqqqpstwvtttsstuwwuttsquuvuuuvtvuvwwxxxyxwuqwxvywuvvz{wstxwstuvwwyvvwyzzzzxuwwvwyyyyxxxxwwwxz{{{||xwxyzxyyyx|{yz{~~|}~~}|~~~}}}~~}|~}|~}~~~~€‚ƒ‚€‚€€€€€‚ƒ‚ƒ‚ƒ…„„€„„ƒƒ„„„„…„„††………………‡ˆ…‡„„††„‚~zwtrnjd^ZWQKFB=72.*'#OLMNNOONPPOOPQPMOOOOPOQMNOPQRQRRRQPPQONKKNQQPQQQQNQRSSRSTTTSTTSSUUTPTUWWVUWWUTSRQMRTUSWWUSTVWWVUUVVVVUURVXVPTTVWWUUSMC3
+		
+)4>HPUWW]\]]bcb__`bba`bcd`eddedcfgeegbhihdedfggchjihhfijiihfffiimjkilllkkjigmlmmomnnnnppmjkmolompommnoniooqmqqporsspqpolstsoonrstvvuuststotvxvtsuvuvxxxvvtuutrwyytwwxsuqwxyzxuuvwwvuuwwutsxxyyxtxxxxzvvwwsvxyzytuuyzytutzyyz|{zyyzzxxwwx|z{|||||~}}|||}}w}|~||~~z}}~~~‚‚~‚~€ƒ€€|„‚„ƒ‚€„€†…„~}|‚„…„…ƒ„‚‚…‡‡†‡‡†…†‡†„„…ƒ…†‡ˆ†‚ƒyzttnja^YVPKFA96/-'& QOLOONOOOPPPORRQQQQQSTRPMPRRQQRSSSQPPOOOJKOPMSSRQRRRTTQRSSQTUTSTTTTTUTTWWWVVUVURSRQRSTWXUUUUVVTUUVVXYXVVVWVUUVVVVVTSI9#				
+
+
,7@GOUY\^`a____ababbcddeeddcddcdfffghggeeiihhijiihhijihfghhjlljijkmmllkigllnoonmmknpqonomopoonnmnmnnnnpqrrrqrrtsprroprtsspnrtuvtssrsstuuvvustvwwwxyywwwwwtswyxwxzxuuwwwyzxuvwtuvwvuvxxyyxyyyy{|yxyvwwxxxxzyxyyyz{yxxyz{zy{{{{zzzzxxy{|z{z{{z~~}}|{{|~€~|}~~}y}€}€€~‚ƒƒ„ƒ‚‚‚‚ƒ„‡††„‚‚ƒ„………„‚‚~‚…†‡ˆ††‡‡†…………„†††ˆˆˆ…„ƒ‚€€}{wsojc_[WQJF@:50-(%!RQPOOOOONMOOPRSRRRRRSTSQPRSSRPPPQRRNPOOQOJMPPRTRSSRSSSRRRRSSTPRQSTTUURRTTSSTVWVSUTRQSTVXWUUTTQUVUUUUXWVTWWUTUUTTTSSPB/		
+
+
+
,5>HQY]\__^]acb]bbecedddeeebfhgeffhffdifhhihhiiijjighihhjllhifkmmmnkjhmlnmmnmllnnoooqnqqomnlonnoonnnrtsqprsttqssqqspttsntrttsrsrpptstpttsrvtwvxwyvvvxwwvwyyyz|yvxvwvyuuvvwwwwwwrvxwuutvvzx|{ywzuvvxyxwxxwwzxyxwvy{zwxzyz{{yyyywt|~z|z{|}}~x|z{}}}€€~|}~|z~~€ƒ‚„„„}‚‚‚~ƒ‚„……~„€„………ƒƒ‚‚~ƒƒ…‡‡‡††ƒƒƒ…‡†„†„†ˆ‰…ƒ‚…€~~}||vrnjd`ZVNIE>64/-$$MRQOOONPOMMOPQSRRRRRQQRRQRSQRRONOPQQQPOQPMJPQQRRSSRSTSRRRRRTTTSSTUTUVSQSTSRTVWVVVURSUVVWVUUTSSUVSSTUVVTVWVRTVVTSQRPI9$			
+
+
+			-;HQW\__^ab`_abceddeeefedeggfddgigdhihgfegiijjiiiiijhjllkjkkllmmmmonkllknnnmmnnmoqrqpomoqonnomprostrpoqsttsttrpsuttttuvutttttstuuuutrssuuvyxwwwwvwwxzxzxy{{ywxwxyyuvwxvwyyxwwwwvtvux{zzzzxxyyxvvyxxyzxwywy{yxzzyyy{|z{|zyyyux}€~}|{}}}|{{y}€~{~~~~~~|~€ƒ‚€‚‚‚ƒ„ƒ‚ƒ„ƒ‚„†„„„…„‚ƒƒƒ……†„„…„ƒ…ƒƒ„…‡ƒ……†………ƒ€…ˆ‡…†††ˆˆ‡„„†ˆ†„zsojd`[VNF@8860*'$!OPPNOMNOOMOOPQRRQQQOPPQRRNRSSRPOOOPQQQQPRQPORPRRSRSSSRRQRRRQTUUTWWTUUTSTUUTTUSVUWVUSUUVUTUUSSTUSTTUWWTTUXWTPUVUTTSK>-		
+		
+
+
+
+&6AJRWZ\]`_``ddcadeebecedgffdghhdgghfedijiijjihigjiklkilmmkkklmmmnjjlmmonmlokmmoppoojqqphmmoqsqssrpprrrrprsqostsrssvwvuustrvuuqwxurstwxxtwvvwwuuuxyzzzxzvywxxyyxuvwxsstwvuuxuttxxxz{yyvuuyzzvwxxx{|zxzxxx{z|zzzzu~{|}{uz{zz{}€}z{y}}}w}{|}|~z€€~€z~€}~{€€~€‚ƒƒ‚ƒƒƒ~„……†……€„ƒƒƒ……„‚„ƒ‡ƒƒƒ‡‡‚€‚„…„„„‚~„‚††ˆ†…‡‚‡†‡‚…ƒƒ|~wslhb`ZRGF=<95,,'% NOPONMMMOQQOOPNPQPNQQQORRRRTSQQRRQOOOPSUTTSQRTTSSTTTSSSRQRRQQUUUVVSTUTTUVUUUUWWWWVUQTVVUTVVUUTUVVVXYXUUVVWVTTUUUUSE1					
+		
+	
+
#.8AKT[^acccdcccdeffffggghhfihedhhghhiihghkiggijkkllkkmlkkijmmlmmmnopppokmnlmnpppqrqqqpmloprpsutrotssroprqqssrtuuvvutttuwwvuvxzwsuwxyxvutwxwtuxxwxzzzyyxwxxzyuvvxwtrtwzxwwxvvxyty{yxvwwy{{ywxxyz|zz|}{{z{|zvyz||}w|{vz}||}~}|{|~~}~€}}€€€~€€~€‚€€€‚‚ƒ‚‚‚ƒ„ƒƒ„„…‡†…„ƒƒ„‚„…†…„†ˆ‡†…ƒ††ƒ††„„‚†„„…„……‡‡†…„………†‡……ƒ‡ˆ…ƒ€yvokhd_XQLID?:51.*&"NPPPPPONQRQPOPOMPPQRQPQRRRSQRPRSSQQPQQTTVVSPQSTRRSTTSRTTSSTTTSUUURRTVVTTURTTVWWVUTURTUVVUVWSUTUUWUVWWVWTUVVTTUUVSL<%										
#-;DMV\`abcdc_eggggdggghghgefghghhiffgghfdgfjiifmnmklmlhjllklloppopqqlnmlinpporrssrknkoqqnsuussttqrqqpqqstuvvvwwvttuvwwtxxyuwuwxwvxwvtwzwttsxvv{|vwvwxyvzxwuvtxvuvwwxwyxwtyyxz|zxvvwyzyzyxywxyxx{{zxyw{zwuyy||{z|v|~}w}~~{~}}~~{{{€€}€|€z€~~}€}}}~€‚„€‚‚‚‚‚‚€‚‚„……‚‚‚‚‚‡‰ˆ…‰Šˆ€ƒ‚…†‡ˆˆ„…‚ˆ„„„††…‡…†„……‡ˆˆ„„„ˆ‰†…ƒ}zqmkif_VQKID?963/&$" OQOOPQOORRPOPROMOQRSRRRQPRQPQQRSSQQSTUUUVWRPQSRRRSTTTTUUTSSUTTTTTSSUVVUTUUUUTWVTTVVVUUWVSUVVTSVWWUUVVWWVVUVVTUUVOB/									
+
!.>KTY]`cb^chhhfdeffgffgfefdfhhijjjhfhhffhihjlonlmnlkkkgkmnnpppmqponnlkmoooqttsqqonotsqqttqrtsssrsqrrsutuwwwwwuttuvwxyzyxwuwxxwxxvutwvssuwvuzywvvxyyxyyxwvvxyxyxwxxxywwyzyzzzywwwxx{{yyzyyzyxyzzzz{{zyxy{{{{|||}}z{}~{~€~~{}€€~€‚€}~€€€}{}}‚‚ƒ„„ƒ‚‚‚‚€ƒ„ƒ‚‚ƒ†Šˆˆˆ‰‡†„ƒƒ††‡‡ˆ‡ˆˆˆ…ƒ…†„†‰Šˆ‡†‡ˆˆˆˆ‡‰‰ˆ‡‡†„{vrnic[VRNHD?;83.+)%"    PQPOPNNOQQOMQROKPQRRRQRQQQPOQRQPSSSTTTUTWUSQQSSPTSTQTTVVUTTSTTTTUTTOSRUUUVUVUUUSTVVVVUUVUTVVUUVVVUVWWWWWWUVVVVVTH6%							
+			
+8AJQY]^bfffecdefggeghgfecghikldhfiggdiijlmlnmnklhkkklnjmoppqpplponkonnnoosqqnpmosunrrrqqstrrrrqrrrsstwwvuuttsssvxxxxvxuwxyyyuvvutupuuxwxwxqttxyyyzwwwxtyxyyxxysxvxuyyz{zz{zyuww{|zyyyyyyuxx{{{{zzyy{}|y{||{}{}zyz|zz{~}~{|}|{€~€{ƒ‚~€‚‚~~}||~|€‚~‚‚…†„ƒ…„ƒ}}~ƒ…„€ƒ…„†€„ƒ†‡ˆ†……„…‡ˆŠˆ‰††…††‡‰‹‹Š‡ˆ‰ˆ†‰‰ˆ‡ˆ‰‰‡ˆ‡ƒ{vskg][YUKJGC<901,+%$!#"" PRRQPNPQQPNOQROOQRQPRRRRQPPQSTSSUUSSSUUVUTSRQSTUTSUVTTTUUUUSSSTUUVTSSTUUVVUVWVUSTVVVWWWVUUVVUUSUVVVWVVUWVVVVUVTP?*					
+
+
+
+		
+
+
+
-8DOY^acdccdeghgghjihhgghilkihihgijjjjllllmmnmmlllmmkjmnoqqoopooopqpnnmpoprqnoqtutsrsrruusssqttsuuuvvstuuvvtuuvwwvwwyyzzzxuvuvvuuuwy{zyyxuuvxyzzyyxyzzxxzzyyxxvyzzyyz{|||yxxx{|zyyy{{yxwx{|{z|~{|~}y}||{{}}|{{{|{z}~~|}€‚€€€‚€ƒ‚‚‚€€€‚‚ƒ‚ƒ…†ƒƒ†„†„‚‚…ƒ‚ƒ…„„ƒ‚…†ƒ‚ƒ„‡ˆ‡…††ˆ‰Š‹Š††ˆ‡‡ˆŠŠ‹Šˆˆ‰ˆ†Š‹‰…ˆ‰ŠŠŠŠ‡ƒ~yyulfca\UQNJFA=850,('&&%%%$###"#$#""#" PQRPPOPOPQQQRQQQQPPPSRQRRPOOTTTTUUUSSTUUTTTSSSTRQQUVVPTSSSWUSQTUUTWUTUUUWVVWYXWUVVVRXXWSVUVVVVUVVVVWXWWWVVWVTUOF4			
+
+
+
+
+"4?HOW\_`abfgghihgdghhejmkiihiikljgggjijjkkmonkmllllmmlqpmjompqrqqmmmnoqssqqqsvttsssrvwvstqustuvuuttuvrwvtuutxyyxxyzy{xyvuuwwwuvsyzywyzzywvxxwwyy{y{yyzzyxxyvxzzyyz{z|xztyxzwvvyy||{wxy{}|s}~{|{}y}|}x}}~}|{}~}|||}}~~ƒ~z€‚€ƒƒ|‚‚~€‚‚‚ƒ‚ƒ„†‡„}„„††„‚ƒ€ƒƒƒ}„„…„‚†‡…ƒ‚…„†„ƒ…Љ‰‹Š„‡ˆ†‚ˆ‰Šˆ‰ˆ‡‰Š„‹‰‹‡‰‰ŠŠ‹‹Š†ƒ{~triiidZVRQJHB?:81-*+*))('''&%&'&$$%%!!!!!   RRSSQOPPNQRRPPQRPOQSSRORRQQRSSSSSUUSRRTUUTRTTUTRRSRUVVVVUVWVSRTTTVWWTUUVWVUWXYXWVWVUWWVVUTSUVUUVVVVXWWTXWVWVURI9'			
+
 		
+
+
+'2>IQY_bdffhhgccchihjljghhjklljhjjjjkkkjlonmlljmnnmnoplnnnorssqooooqrsssprrtsssrtvuvuuuuuttuvutuuwwxwvrtuuxzzzyyxxyxxxxxxxxwwxxyxxyz{{xxzzxvz|{zzzyxxvuwyuwxvx{}|{||{{zzyxx{{{||{z{}}}}}||z||~}y}}~~€}|}}}~€~€€‚‚€ƒ‚€€ƒ‚€‚€‚‚ƒ„„‚‚‚ƒƒ…††„„…††…„ƒ…†……„ƒ„ƒ„ƒ†‡‡‡†„„„†‡†…„‡‰Šˆ‡‡‡ˆ‰……†‰‹ˆ†ˆ‰‰Š‰‰Œ‰Š‰ŠŠŒ‹‰†…|vrqpje`[VRNJGD@=96420///.-,,--,+++(&''&%%&%$#"!!!"!! !! RQRRPNPQQRRQOOQRQOQSSQQQQRRSSPRSTTUTRRTTSTSSUUTSTUUVUUWWWUVVUUTQTWXVSSTUWWVSXTWSVWWWXXWWVRTVVTUSVVWWXXWWWWWTTO@-				6I5!

+
+
"4AKSY`cfhhfddhjgikjeiijhkkiglkllkhjkkmnkmklnnnnmopqonimorsroopqqqprsssrqrrstuusquuvwuqtsututvwwvvvuttvyuyyxxytywxwyzxzzxxyywyz{|{yyyzzzw|}{zywzsxvvwzwwuwy{{|}|xz{||{{{z|w{{|{|}}||}~z||~}z}~}|~€€}}~~{}€‚€€}€€€‚~}|~€‚€‚ƒƒ„„}~‚‚„……„ƒ€†‚‡„…‡…‡…†„…„…ƒ‡†ˆ‡‡ƒ„†‡ˆ‡~ƒ‚‡‰ˆˆ‡†ˆˆ‡…‡‡‹ˆˆ‰‰ˆ…‰ŠŒˆŒŒ‹Š‹‡ˆ‡„€xrtqnfdb]UTSPHEB@?=964321012220-0.,++**))**%&&&!&$###$%"!!!!""" PQQPOONQSRSQOPQRRQQSSSSRQSSRQQRUTUUTQUURPTUTUTRTUUVUUTSWVTTVVUUSSUUTRRSUWWVVWXWVUVTWXXXXXWWXWVVWXXXXXYXVXXWURI8%
			3POB)"
"-8DQY^dhfdehjhgjjjiiklkjijmonlkjmnmmnnmmmmmnnnnqqqnmmpppqqoprsrqqrssrrrrqttsstttvwtsssuvuttvwuvvuuvxyywvwxxyxxyz{{zz{{yxxyyz||{zyyxy{|}}{zzzxxyzy{|ywxxyzyy}{wwy{|||{y{||}}|||~~~|}}}~|y}}}}}}~~~~€‚ƒƒ€~€‚€€€€‚‚‚€ƒ„„†ƒ‚ƒ‚ƒ„„……„„…†…†‡†‡‡†‡ˆˆˆ†††ˆ‡ˆ‡ˆ‡†…†‡ˆ†„„†ˆŠŠŠˆ†…‡ˆ‡‰‹‹ˆˆ‰‰‰‰‰ŠŠ‹ŒŒŒŽ‰†€spvxtpliea^ZVROLIHFCBA?>=<=?=;666666655420//00.,,+*)**)''&&&&&%######"      PQQOOOPQRRRQOPQRSSTSSSTTSTSQRSSTTUUTSTTQRTUTTTSTTSTTTSUVUSSTTTUTSVVSTTTTWUVUUVVUVUVVVWXYYXYYWVVXXXXTXSVUWWVTM?,		
+8EA7*&# &0>HRY\]chhgfijgkklnljjjklmnnklljimnmmmkmkmlpqrrpnprqkrsqruusrqqqqstsrqrrpttsrvvusssuusrtsxwvtutvvwwywxvzxxxz{|zxt{}zvyyzxzzzz{zy{|}|yzx{zxtzzzw}xwyz|{zzzzxwvyz{v{y|}}~x|{|}~{~~}y~|y}}}}€€~~y}€}€‚|‚‚€{€€}ƒ‚ƒƒƒ‚€€ƒƒ…‚………„…„„……ƒ„…„ƒ…„‡††‚ˆŠ‰‡ˆ‡‡ˆˆ‡…‰‰‡‚†‡†‚†‡ˆ‰Š‡‡‡…†‰‰ˆ‡‹Ž‡‡ˆŠ…‰ˆ‹ŠŽŒŒŒ‰ŽŠ‡€xt~}|vtkigda^XUQONMKKJIIHDFFEDA?>=>>=;;;987678631////0/****+**(('#((($! !"##"   NPQQNQRQPPPPPQQRTTTSSTTTSTSRSTTTSTTSQRSUSTUUTTTTRRTVTSTVUUUSRTUUTVVVVWVVWWWURUUXXUUUUUWXWWYZVUWXVWWWVTTUVXVSF2181'&%$%%"


+
+
+
)5@JU]dfefhikkllmlijijjjnnlkijjkllnonnlmoqrrrqprsqpqrssttsrssrqstssqrrrsuvwwvusqtvvuuuvwxvvvwuswxyyxyyyyyxyzxwuz}zyzzzyyyyy{{{|}}zzzx{zyz}}{{|zyx{}}z{yyy{{{|zyz}~€}{|}~~€€€}|~~}z}|||€€€ƒ‚€€€‚ƒ…„……ƒ‚ƒ„ƒƒ‚„„„„†††……‚ƒ„„……„…„‚…ˆ…„‡‰ˆ‡‡‡†ˆˆˆ†‡‰‹ˆ‚„…†‡ˆ†‡ˆ‡†‡ˆŠŠ‰ˆ‰„ˆŒŒŠ‹‰†‰‹ŠŽŒŒŒŽ‹Šˆ†ˆˆ†ƒ€|vpmkifc^ZXXWVTTTRQPOONMMLIGHHGGEDDDBA@@=<<::989754443310/.,,-,+*)))))(%%&''%###"! !!!OORSQRSNPQRRRSSSTTSRTTTTTQTSSTUSTTUSRNRTTTTPTSTTSQUVVUUSUVVTTUVTUVUQVVWWXXXWWWXYYVUVVUTUVUWYXUXXVWWWUUUVWWSL<$&%"!"!"" 

+
+	
+-9FQX_cfggjjkljijkkjlnlkjijkklloppolnoomrqpnqqnjorsprqqrrttrrsrrssssrovxwwwtttvwwuvvurutxywtwwzuttxwzuwvywxwxzyx{{{{zyxvz{||}|zy{y||z{}}{xyxwxz{}{|yz{}~}z{y||€€~x}}~~~€y€~|}z~|~~‚€~}~~~€~ƒ€‚€‚„††…„‚„…†„ƒ„…€ƒ€…†‡…„………„†ƒƒƒƒƒ‡€†„…„„…„…‰ƒ†ƒˆ‰ˆ…†ˆ‡Š‡‡„†‡‡‡‹‹‹ˆ‰ƒ‡‡‰‰Œ‡‡ˆ‹Š‹ŒŽŽŒ‹Œ‹Ž‹ŒŒŒŒŒ‰ˆ„„|wtrongdaaaa[[\\YYXVTTUTRPNNNMLMMMGKIHIFCCBA@?A?=<;;:976761120/.-/0/-,*++*)(&&%&&$"#$PORRQQQPPRRRTUTRRTSSTTSTTTTTTTTTSTVVTQQRQTSTUSSTUUVXXXWVTUWVVXWVVVTQTWWWXYWYYYYYYVVWVWVTVUVWXWWWVWWWVVVWWVNA/		
+	
+
+
+
+
+
"3?LX`bdgiflkhilmnonklkjkmmmmooonlnpoppqpnonlimstsrrrrpqsuttuvusttqntutvwxvtswwxxwtstuxyxxz|{zxwy{{{zzzxxxxyzyz{||{zxvz}|{|{y{{|~~|{w{ywyzvxzz}|{xz~~{|}~~~~€}x}}}|€€{|~€~}€€€€‚ƒ€‚ƒ‚‚ƒ„~„†ƒ„„‚‡‡„ƒ„„…„ƒ„†ˆˆ……††††‡‡†…†‡‡‡…ƒ…………„„‡ˆ‡‡‡ˆ‡†ˆŠŠ‹‹Šˆ…‰‹ŠŠ‹Œ‹Šˆ††‡Š‹‹‰‹ŠŒ‹ŒŒŠŒŒŒŽŽŽŒŠŒŒ‹‹ˆ„€~|zwspnlihhggdcdec`___]\[ZZZYYXXVTTSRPNNMLKJJIHHHGFDCB@?>=;:99:::864210110.-,,+))**OOPPPOQQQQRSTSSQSSRSSSTUTQSSTTSRTTUVUSRQTTTUVSSTUUVSWVVVUVWUXYYXWWURUVWUXXXWYWWXYUWXYYWTWVVVVVVWWWXSVUUUTSG5%
+	

+
+
+
+=FNT[bfjjiigmnpnnnmjlnnnnmollmppooooooommlpuuutosnposttpvtssssrossttvqvtvwwuyxurutttyz|{yvyyz{||{zzxvwwxzz{{|{zyxw{}|u{|{zzz|}|{ywvuz|{{zy~}|z{~€|~|~}}|||~x~y{|}€|{|}|}~€~}}€‚ƒ‚‚~€ƒƒ‚ƒ‚……„‚„ƒ„…‚~……‚~ƒ…‡‡†„…††ƒƒ„‡„ƒ„„„†‡ˆ†…„……ˆ††„…‡‡…ƒ‡‡‡†ˆ‰ˆ…ŠŠŠŠ‰‰Š…‰ŠŠ‹Š‰Œ‰‰„†‡‹Š‹ˆ‹‹ŽˆŒ‹ŠŽŽˆŠ‹ŒŒŒŠŠ‹‰‡†€|ywqqommoqninnmjhhhhfcaacbaaa\\][ZXXVTUVTSQQQPPOLJIHFEECCCC=BBB=:75457654210//..PQQPNOQQOQRTTSSTTTSSRRTVTPSSSRRTTSTVUSSTTTSTUTRTUUUVUUTTTWWXXXYYWWVVUVVWWXWVWXYZXVWZYYXWWXWUTVWWVYWVVUTUTN>*	
+
+	
+
+!*8CNYbfiijkmnonmmllnnnnnnoooppmnponnoonprvvvtsrrporstvuttsrrstsrsutquwwvvxxvuvvvwxy{vyxxxxx{||yyywwyyyyz|~}xxyvy||zz||{yzzyzzzyyyz{|}}|}}~}||~~}~|€€~~~}~~~€}{|~z}|~~~~}~}€„ƒƒ‚€€‚ƒ………„ƒ„…„„‚~ƒ„‚„„…‡ˆ‡†…„„††………†‡…ƒ†…†‡‡‡‡‡ˆˆˆ††‡ˆ‹Š…„ƒ†ˆ‡†ˆ‹Š‡Š‹‰‰‰‹ŠˆˆŠ‹‹ŒŒŒ‰Š‰ˆ‹Œ‹‹Š‹‹ŽŽŽŽŒ‰ŒŒŠ‹‹Š‡…ƒ{yxyyzzzwvvvwvttsrsrolmnmkiijjigffecbb`]]^[XXZXWVTSRQPPPMLKJJIHFDCDDBA@=;:8888RRRPPOOPRSTSSTUUUSSSSRTUTQSRRNRSSRTRVTSSTPQOUSRRTUUVUSUWWXWUVUVVVVWTTTVVVVWVUUXWYXYZZYYYXVVVUWXWXYWUVUUVPE4
+		 	
+

&9FQZ`egimnmlmlmlmlkknnoknqpopppooppprtvvuqsrrqppvsuuurqqrttrsuvqtwwtvxwtvswwy{zxxwzzzwxy||yuxwzzzxww{}wyyz{{yyy{{{z{{zvyzzx||{vzx|{{|}z}{}}|z€|}~~~€z{z}{~€}}|z~}€€{ƒƒ‚~€‚„„€ƒ‚‚‚‚„‚„††…ˆ‰‡………ƒ††††…††ƒ„ƒ…‚††‡‡‰†ˆ…‰‰‡†Š…„„ˆ…ƒƒˆŒ‹ˆŠ‰ˆ„‡‚Љˆ‰ŠŠŒŒŒ‰Š‹‹ŒŠŠŠŠŠŒ‰ŽŒŽŽŠŠ‹ŒŽŒŽŠŒŽŽŒŒŠ„…}}|}}€|||{{zzxwwwzxxpsrrrppqqrlnomkjgidfge]_a`_``^\[ZZ[YXURQQQPNMMMLLJDCA@?>?RSRQQQPRTTTTQTVVUUTRRRSSSSTSSRRRRSTUVWUSUTSSTRRSTSSUTSUWXYWTSTUUTVWUTVVVSUVUWXXVYYYYYZZZYWWXWWXYYXVTTTSTK9"			
"$"
			"1?KU^diklmmmlllllnopommqrqqsrqqrqppsuvtrtusqsuustuttsqpstuuvvtrwvuxyxxxtwwz{zxyz{{ywwy{}{xxxzywwyww~~{zzz{{xz{{{z{{|{xx|{{}~|zyyzzy{}}|{{}}y~|y|}}}~}}|}|z}‚~}}z~€‚€|€‚~€€ƒ„‚ƒ„ƒ‚‚ƒ‚„‚…‡‰ˆˆˆ†…ƒ€„†…„……„†‡‰‡…††ˆ‰‰ˆ‡‰Œ‹Šˆ†‰‰ˆˆˆ‰†ƒˆŠŠ‰ˆ‰‡…†ˆ‰ŠŠˆ‹Œ‹ŠŠ‹ŒŒ‹Š‹‰‹‰ŒŽŽ‹ŽŽŒŒŒŽŒŽŽŽŒŒŠˆ†…………†…„‚‚„ƒ‚‚‚€€€~z|}{zz|zyxwwvuuttutronmmnmmkjhgffeedcb`]]\ZYXWVVSPONNNLJRRRQQRRSTUTSTUTSTVUSRPQRRSTSSTSQSSUUVVUSTUUUURTTTSTUUTUUVUVUTTUTUTWVWWVVVVVTWWYVXWWSYZZYYXXXWWYYXWVPWYVQC- !" 	
+
+'5AKT\bgjllilkknpooopqsrrrqpqpqmqstrrrstrppovstruuuqsvuouvvuvwwuxuxyxtuvxyyyzy{yyuvw{}|xyxxxxwzx{~~|zzyv|z|}|w{x{{{xy{|{}|~}|{{yzx}}{y}~z}}z{{{|||}y}~|~{~}€~~~~€€}€€‚‚€€~ƒ„„ƒ}„‚„‚‚€ƒ‚‚„‡‰ˆ‡„„€€€…‡†„„„„…†ˆ‚‡…‡ˆ‡†‡„‰‰‹Šˆ‡‰†Šˆ‰‰ˆ††††…‡‰Šˆ‡‰ŠŠ‰‹‹Šˆˆˆ‰ŠŠŠŠŠŒ‰Ž‹ŽŠŽŒŒŒŽŽŒ‹ŽŒŒŒŽ‹‘Ž‹Š‰Š‹‹†Œ‹Š‡‡‡Š‹Šˆˆ……„„…„„„„„……ƒ~}z|~}y~~yyyvuusrrrqpoopnfmmjggbbbaa^\[[XUWXUSPRRQPSTTTSQRTURQRUVUUSOQRRRTSSSUUTTUUVUSSTSVVVUUUTPUUUUTTUUVWWUTUVWWWWVVWVVTVXXXWWWWWZZZYXXWWYZYXZXWYZUK9$
							!!"#"!
+	
$4COYagjlkijnnmooqrsroqoprsrqrssrrsssrptuuvuuvxuuvwurtvuuuwwwwuxzwvuuuwxyzyz{zxyz{}}yywwwx{zz|}{{zyxz{|||{zzyz{{yyzz{|~~~~~|z{|}|||}~~}{y{~~|~~}}~€€}~~€€}€}€€€‚‚‚€~„„„ƒ„„……„ƒ„„ƒƒ„…‡†„ƒ„ƒƒ„…†‡††‡††…†ˆŠ‰‡†‡‡‡††‰Š‹Œ‹‡‰‰‰ŠŠŠˆ‡ˆ†ˆ†‡‰‹ŒŠŠˆˆ‰‹‹Š†ˆˆ‰ŠŠŠŠ‹Ž‘ŽŽ‘ŽŒ‹ŒŽŽ‘‘ŽŽ‹‹ŽŽŒŒŒ‹Š‰ˆ‡†††…„„†‡‡†…„„„|{|~|yyxvttvttrpponllkkifcdecaOQRRSTUTSPQRTTSRSSUVVUSRTOSTTTUUTSTUVUUSSSTUUVWUUTTUVVVSUUTTWXWWWUUUWWXWWVVSWXVRWVYXWV[ZZXYWXYYZ[[XVYXO@-					#  #%'& 
+
+	
+
+/:FS\bdehknlonoqqpprrqsutsttssstsqrqsstuvuuvvvvuttuuvwwwwxxuyzxwwtuuxz|yzyywz{|}|yyvvtuwyw{{||zyyz{}}yzxxxyy}{zzyxzz{{}z|x{}}{}~}y|~~|}}}~€|}~~}}€|z€~€€~€|€~~„€„‚„€…‚„„‚………„…„„„‡„„ƒ†ˆ†‚…ƒ‡„ˆˆˆ‰Šˆ…†‰ˆ‡††…‹‹‹ˆ‡‡Š†Šˆ†„ˆ…‡‡ˆ…‹ŒŠ‰…Š‹Œ‹‰ˆ‡†Š‰‹‡‹‘‘ŽŽ‰Ž‹ŽŽ‰Œ‰‘’‰ŽŽŽ‘‘‘ŽŽŒ‘““’‘’’’ސ‘’ŒŠŒŠ‰‹Œ‹Š‹‰ŠŠŠ‡‡„ƒ‚‚‚}}z{|~~wxywuvwurnlnomkPQSTUVUTSQSUTSQRSRTUUVUUUTTUTVVUTTSTVWUTTURVVXWWVUUVVVVTVUTTUWWYXWWVVWYYVVVVWXWWWXXXXZZ\[[ZZYXWYZZXVWTE1	
+  "%&&# #%$!

+
+
+
+ 3BNU\djlnnooppppqssstttuttttusssqsrrttsrtuuttruwwxvwyyxxyzyswwwxxxz||zyzz{{{{z{yuxyywyzzz{||{zz|}|{yxz{{y{}|zyyyz}€}y{~|||}~~{yy}~}|~~}€€€|~~~~€€‚€€~ƒ‚‚ƒ‚ƒƒƒ„…„†…‚„…†††„†……†ˆŠˆ†‡‰‡„‚…ˆˆ‡†ˆ‰‰„ˆ‰‰‡††‡‰Š‰ˆ‰ŠŠ‡Š‰†…ˆ‰‰Šˆ„ŠŒ‹Š‹ŒŒ‹‹‹‹‹ŒŒŠŠ‹Š‘ŽŽŽŽŽŽ‘‘Ž‘“”‘’’’’“’’’“’‘“””‘”“”””•••’‘‘‘‘“““’““’‘‘’ŒŽŒŠˆ‡‡‰Šˆ††‡‡‡‡†„ƒƒ‚€~|{z{yxQQRSTSTTTRTTTSPORRSQTUUUVUTTUUURTTSSVWVTUVVUUVVVVUUUVWWUUUUVXXWXXWWTVUXXWWVUWXXVWWXVWXZW[ZZZYVWWXXWVSK: 		
+ "%')+)%   


+
+
+
+")6@LV_fiinoopooqqqrtuututuvuuuqsrqrtpstuttstvxyzwvwwwy{{yyxxyzwxyztxyxy{z{{{|{vyyzxyzywz{||{|}{{{{z}{{yzw}{zvww|€z|~}y{z}{}{{|}~~}}y~~|€}€~}~}}}€€€~~ƒ„„‚€„„„…„„…†††‚…„…ƒ„„ˆ……ˆŠ‰‡ŠŠ†‚†ƒ…†ˆ………‰‰ˆ‰Š‡‰†ˆˆ‹‡‡†Š‹‰…‰Šˆ‡ŠŠŠ‹‰„Š‹‹ˆŒ‹‡Œ‹‹ŒŒŽŠŒŒŠ‰ŠŒŒ‹ŽŒŒŽŒŒ‹‘Œ‘““’‘”””“‘Œ†Š”•–“”“””–˜—‘•”•––——’•–”••••”•’”“ŽŽ‹ŽŽŒŠ‹ŠŠ‰ˆˆ†………„~ƒQQOTTQSUTTSRSTOQQQSTTVUUVUSQOPRSTUUVWVVVTWUSSSSUWYXVWXWWXXVVXXWXXWWWWXWVVXUVVWVUVZYXZZZ[YXW[ZWWWXWWUN@+			
+ #&''*+*'#

+
+%7FS\ejmkoqpopnqsuuuuuvwvuuuussuuuuuuwvruvy{xvuvuvy|||{zyyywxzywvxyzyy|}|||zxxywxzyvy{||{||{z{{}~~|y{|}||{ywy}~~||||||~}}~€€€€€~€‚€~~€~~}€€€€ƒƒ‚ƒ„……‚„„„„†…ƒƒ„„………„………„„……‡‡……‡‰ˆˆŠ‰††‡‡†‡ˆ†„‡‰‰ˆ‰Šˆ‰‹ŠŠŠ‹Š‰Š‹Š‰‰‰‰Š‹‹‰ŒŠŠŠŠ‰‡ŠŒ‹‹Œ‹Š‹ŽŒ‰‰ŠŽŽŠŽ‘‘‘ŒŒŒŽ‘‘‘’’’’Ž’““’“’’}€ˆ“”–˜–••——™–”•˜˜——˜——˜™˜™™™™™˜˜––˜™šš™——–••““–˜”““’’’‘ŽŒ‹ŠŠŒ‹‹RRSTSORTTTSSSSRQQRSUVVUUUTQJHGJLOSUVWUUVWWVSSTUVXYXVWXWWVVVUWTWYXVXXWWVTUXYXXXWXYZZXZ[[YXXZ\[XXWXWUTH3"			!$&))')&))'!!!  
+
+!.>JU_dkpqppporquutuvtvrtvvtuuwvvvuvwswuwwupvvvwy{{||wzxxwyxywwwxwyw|||{|zxxzxwwzxzyyyz{{{|w|~~||z{{zz{{{y|}~€~x|}}}~~~€€€€€}|{€‚|€~~~‚€„„ƒƒ€…………„~ƒ‚†…„„€……„…†…†€†„„ƒ‡ˆ‰ˆ‡ˆŠ‡…†‡††‡‰‡‡‡ˆ‡ˆˆŠˆŠ‹Š‡‰†‹‹Œ‰ŒŠˆ‡‰‹‹ŒŒ‹‰Š‰‡‡‡ŠŠ‰‰ŒŒ‹ˆŽŽŽŽ‹ŠŠŽŽ‹ŒŒ‹‘ŽŒŒ’’’‘’‘’‘ŽŽŽ•‘’’Ž‹’””––•””“•–•”–’˜––”™–š˜˜šš™›˜š˜˜—››Ÿž™œ››˜˜’™›—”———˜˜“‘‘““Ž‘‹RRTTSPPTTSSSQSSQRSTTVVUTSROLIF?AFMRVWWWUVWUTTUVXYYXWWWVVUVVVVVUXXWYZXWVUTWYYYYXZ[[XXYZZYXXZ\\ZZYYXUP@*	 $&*,+))(*+,+)'$" !"!! 

&5EQ\ekmmqrsttsptutuvuwwtvwwuuuuvwxwxuttvxxwwyzzz{{{yyx{zzzxxyzzz{zy}|{xyz{yvyzzzzzx||}|{}~{z|~|xxyz||}}~€}}~}~€€~€ƒ‚€€€~ƒ‚ƒ€€‚„„„„ƒ„…„ƒ‚‚„†……‚‚ƒ„……„„ƒ„…††‡‡‡‡ˆ††……†ˆˆ††ˆˆ‡†…‡†…‡‰ˆ‡‡‡ˆ‰‰Š‹‰‰‰‡ˆ‰ŠŒ‹‹‹‹‡†ˆŠ‹ŒŒ‹Š‰‰ŠŠŒŒŠ‹‰ŒŒ‹‹ŠŒŽŒŽŽŽŽ‘’‘‘’‘‘’‘“““““’“’’‘‘‘‘‘’””‘’“’‘’““”•••••”’’’““”“”——˜˜™š›™šœ›˜š›š˜›šœœžŸžžŸœœš™›™–ššœœœ›š˜˜™——–––•RQSTSRRRRRTSSSRQTUUQUVUTSRRQOMH:EFSVWXWVVVUVVVVWYXXYXUVWWXWSXXVXYWXVXUWWWVXWXXYZ[ZYYZZZWXXXYYWYZZYRG6 				!%&,/,****,0//.,)'%&'&%$"


!,8FQYaipqqqqrtuqtuvwusvxvuutwwvuvwwuxwyzwvyyys||{xxx|}{zzz{{zyzyz{{{{{zz{wxyyz{{||~y}z~}w|}}xy{}z{|}|€}}z}{|~~||€}‚‚}}€~|ƒ‚‚|‚€††ƒ~‚„……ƒ„††ƒ‚ƒ„„ƒ„€€†ƒ……‡ˆ‰‰‡…†ˆƒˆ††…‡…ˆ…††‡ˆŠˆ‡†‡ˆ‰„‰ˆ‰†Š‡ˆˆ‹‹Œ„Šˆˆ‡‰ŠŠ‹Œ‹ŒŠ‹ŒŽ‰‹‰ŠŠŒ‹ŒŠ‘’’‘‘’‘’’Š–“•“““”“•“““’”‘“””“”‘‘‘“’Ž‘“Ž™—š›™šš™œŸ™›˜™—˜™œžŸœ›žžž—šœžœ—œšžžœœœœ”š˜›™SQRTTSSSSSTTSQQSTTTTTUUUTTUTTURNNRUWWWVWVVUVVVVVWWXZXVVXYXWWXYVXYYWUXXXXWVXYXXYZYYYXYZXWXXXVTVXZZWM:$			"%'+.,,--.134442/.,,,,*)'"


-:GUbhloqrrtsstvwtswyxvvwwwvuvwxzzzz{wxyyyz{}{yxy{}|zz{{xwzxz{{x|}}|{{zyyyy{{|}~~}|}~~}{}~}{}~~|{}|}}~~}}}|z|}}~}ƒ€‚€|€€€€‚‚ƒ†††ƒ~ƒ„…„ƒ„…„„„„„„ƒ‚„ƒ‚…†ƒƒ„…‰Šˆ…ˆ‡‡†‡ˆ‰‡†ˆ‹Šˆ‡ˆˆ‰ŠŠˆ‡‡‰‰Šˆ†ˆŠŠŠ‹ŒŽŽŒ‹Š‰Š‹ŒŒŽŽŽŒ‹ŒŒŽ‘‘ŽŽ“’’‘‘‘‘‘““Ž“–˜–“Ž‘”••”““”“””••“–——–•”•••–”’’“˜šœœ›˜˜šš žœ™™š››Ÿ œžžžžž››œ ŸœžŸžŸœœŸžžSQSUUSRRRSSTTTTTTRSSSTUUUVUSVVVSTUVUTUTUXXVSVUVSTUWXXWVVXXWVYYWXYWVUXXYYXXYZZYZYYWZZZWVWXWXVVUWZVRD-
		 !$%'))+.001233333200/0.,*& 

+
+
+
!3@LW`gjoprtvvvvuyzwqvvvvvuxuxwywyzyyyxzzyz{z{zz{|yzz{xy{zz{z{}}y}||}~~|u|y|}~~z~}}}{z|}~~}z~z{z}~}}}y~~~€€~€€}€€€~‚ƒ‚‚……†‚‚‚|ƒ‚‚ƒƒ~……„ƒ‚ƒ†…ƒ‡‡‚ƒ€…‰ŠˆˆŠŠ‰ˆ‚‰ˆ‡‚ˆŠŠ‹Š‰‹†Š‹‹‡‰‰ŠŠŠ‡‡ˆŒ‹ŒŽ‹Š‰Œ‹Œ‹‡ŒŒŠŽŽ†ŽŽŽŽŽ‘‰ŒŽŒ‘‘’‘‘‘Ž‘““‘‘”–––’‘‘‘“•••—‘’“““”—™™˜–“˜•——–Ž’‘““‘’›œ—˜—Ÿ›œžŸŸ™››œ• žžž¡žž  ž—œ›ŸŸœ šŸšŸžžžRSTVVTRROSTTUWWVUTRQRTTTUVVVVWWVVWVSOTUWYYVUTVVUTVWWWWVVWXXYZZWWWWVWWYYZXYYZ[\[\\[[[ZYYYZZXWVUVXSH7#	 ""#$&*-011023256652112/+(#! 
+
+
+
#5BNZekotxwuuvxxvtvxwxxxyzxwwwwxyzxyyyxxy{{zxyz{{zzzzzzyy{|}|{|}~~~~}}}z}~~~|~}~~}|{}}~~~~~~~}~~€€€€€~|}~}ƒ…ƒ‚‚ƒƒ„„ƒ€€€ƒƒ„„„„……ƒƒ„†…„‡‡…ƒ„†‰‰‰Š‹‹Šˆˆ‰ˆ‡‡ˆ‰ŠŒ‹‹ŒŒ‹‹‹ˆ‰‰‹‹‹‡‹‹ŽŽŒŒŠŠŒŽŽŒŠˆŠŒŒŽŽŽŽ‘’ŽŽŽ‘‘‘“‘’‘‘‘‘‘’‘’””””’‘••’“”–˜–”““’”–––˜˜˜™š˜–™›™˜——–—–•–˜šœš›Ÿ™šŸŸžŸ››œœ    ¡ž  ¡¤¡žœœŸŸ›žŸ¡ŸšžŸTTUVVVSSSSTSTVVTSTSRRTUUVWVVVUWWVWVSSTVWXWVUUVXXUVVUUUWWWXYZZZYXWXYYYZ[ZYYZY[[[\\\[ZZZ[WZYXWWVWWM=*	  !"!!"%)--/0..22666652332*)#"  

+	
+
+
+	
$9HT]gosutqvwwtvuwwxyzyywxwxyzzxxxxyyz{zzzyzz{{zw|{{wxyyz{{}~}yyy}}~yz|}w|}}z~xxy||~}~€€€~}~y€~{~€€}||~~‚€~~‚ƒƒ}ƒ~‚ƒƒ€€ƒ‚ƒ~ƒ…ƒƒ…††ƒƒ‡‡†……„†ƒˆ‡††Š‹Š‡††ˆˆˆˆ‰‰‹ˆ‡‡ŒŒŠŒ‰‰‡Š‹Š†‰ŒŽŠŠ…ŠŽŽ‹‹‹‹ŠŒ‰Œ‹Œ‘Ž‘‘Ž‘‘ŠŽŒ’‘‘Ž“““’““’“’Ž“’”——””’–˜–‘–——–˜–—‘˜—˜š˜–š“›˜˜—————š˜ššœœ››œ•›™›žœŸžš›š›Ÿ  ˜¡ž¡Ÿ¢£¡žžžŸŸ›žžž¡› ¡¡TSTUVVSTRRSSPTUSSSTSSUUVWWVUSSUWVVTTVXXWUWWWUVYYWXXVVXXXVXYZYXXYXXZZY[[ZYYZ\[[[ZZ\[[[\[ZZ[[YYYXTE/
+ !!$#"!$%(+,./0013554689994.)%$"!  ""! 
+
+
+		
+%/=KYdlopsuuuuuwvtxxxwvxzzxyxxyz{z{||zz{|{z{zzy|~|||||{{}}}}}zy{~}|~€€}z|}}~~}}||}|}€€€~~}|}~}}~€‚|}|}}€€€‚‚ƒƒƒ~‚ƒ‚„„„………ƒ‚„†……„‚…‰‰‡††‡‡‡‡‡‡‡‰‰‡‡ˆˆˆ‰‹Š‰ŠˆŠ‹‹ŽŒ‹‹ŠŠ‹Ž‹‹ŒŽŽŒŠŠŒŒ‹ŒŒŠ‹Œ‘Ž‘•“ŽŽŽ’•““•–“““”’‘’’‘’’”––˜––—˜–”—™š›™–—’—˜—˜™˜™››œ™˜™———šš™™œ›››™—˜šœžŸžž žž¡¢  ¡¢¡ ¡¡  Ÿ    Ÿ  ŸŸ££¡¢¢¢TQTTTSUUTSUURRUTSRTRRTUUUSWVUTVVVVUTWXXXXXXXVSXYXXWWWWXXWXYXXVVTYYYYXYYXYYZ[Z[[XYZ[[\\ZU[[[XXXVM;!			!$%'&&'(('**-/0/0331138;=?90+&%%%$" !#$$$"!" 
+
+	
+
$2ANYaglprtuuuwxxutsxyxuvuxzzv{x}{zx{{}{zyzz}{|}}}}yz|}{||{yzz|}€€}}}~~~~|~}€~}{~|~{~~~~~~‚‚}€~}~€{~€„ƒ‚‚|„„€€{‚‚‚ƒƒƒ………†……„…‚„‚„†‰‰‡‡‡ƒ‡…‰‰‰‰‰‡ˆ‰‰‡‰‹‹Š‰‡‹ŠŠ‹Š†ŒŽŒŠ‹‹ŒŽŽ‡‹‹‹Ž‹Œ‹‹ˆŒŒŒŒ‹ŒŒŒŒ’’’’‘‹’“”ŽŽ“”•‘””’’”Ž”’‘“’••—˜—””’‘‘™•™š˜—˜’˜˜˜˜™”™–›œ™“š™˜—˜•™š››˜˜—š›œžžž¢¢  ¡¢¢¡¡¢¡Ÿ¡›¡¡ ¡¢¡ Ÿ   ¡¤ ŸŸ££TSSSRQTVVVUWSRUUTTTSOTUUUVVVUUVUUWWWXWWWXXXXVWXZVWWWWVVVWVVVVVUWYZYYXWUVXYYYWZ[[Z[[[[[ZYZ\[VWXQC,			"&')*****+**,.-/.221369>@A<3-''&&%#!"#%&$$"""$#!  !"#!

+	
+
+
'4BP_gmqsvwxxvuuvxxwvuuwxxz{}}}||z{}~{zz||zz|{{|{z}}{z{||{yy|||x~}~}|~~~€€‚~~~€~~|€€‚ƒ‚‚|~‚ƒ„‚€„…„‚‚„„‚„„ƒ…†„……†………ƒ„ƒ…„‡ˆ‡‡‡‡‡‰‰‰Š‹Šˆ‡Š‰ˆ†‹‹‹ŠŠ‹ŒŠ‰‰Š‹Œ‹Š‰‹ŒŒŒ‹‹ŽŒŒŒŠŒŒŒŒŽŽŽŒŽŽŽ’“”“’’’‘““‘’“‘‘‘’“’”“’“””•“““•”“’“”•–––—––•”–™˜——–”—™š™˜˜—™š™ššš—˜™™ššš–™›œœš—šš›žžžž¡ ¢£¢¡Ÿ ¡¢£¤£¢  ¡  ¢¡ ¢¡¢¡¤£¤££¤££TTTQQRUVWVVVTRUVTRTTUVVUWVVRTUVUVVWWYSUUWWXSVVXYXVWWWUVWWTSSWXXXZYYYYUWWXWYYY[\][\][YXZZYZ[VWUK8#	"&),---..*,+../1244056<???93,&'%(&$"$%'(&%%$%&&%$! !#" #%#
0ANYajnrtuusuwxvxsvtvwyz|zzy||zw|}{zzv|{yxzzz{|}}z{}~{yy}}~~|{|~~}€‚€~}~~|€~€€€‚€€€|ƒ€}€‚‚€‚ƒ„ƒ~€~„€ƒ€‚‚‚„„„ƒ‚„„‚}ƒ…„„…………†‚„†…ƒƒ‚‡‡‡††††‡‡‡†‡‹ŠŠ†‰‹‹ŠŠ‹‡‹ŒŒŠŠ†Š‹Š…Šƒ‹Š‹ŒŒ‰ˆˆŽŒŒ‹ŒŽˆŽŽŒ’Ž’’Ž”’”““’’’”Œ’”“”•–””’”–“””””””“——˜“™˜™™™‘’“š››–˜———š™˜—˜™š™š›—ššœœœ———›Ÿžžžœ£¢¢£¤¤¡Ÿ ¡£¢¤Ÿ¡  ŸŸŸŸ ¢£¢¡¤££¢¡££ŸTUUTTUUVWVRTTTUVUUSUVWWVWWWVUSTUUXVVVVWWXYXVTSSWWVWWWVVWWUUUXYXXZ[ZZYXXXWXYYY[]][[\\YXYYY[[WVQA-!&+024441.-/012456789:<>=:5/(%(+*'"#')**(&&&%&'('''))($!!! 

+
+	
(7DQ[cjptuuwxzxwwwwxx{|{zz{|yvy{zz{{||yxz{zz|~}||~~z{}~~}~}|~€ƒ}}}€~‚€€‚ƒ‚ƒ‚€~ƒ‚€‚…„……„ƒƒƒ€‚‚ƒƒ‚„……†…„„ƒ‚„„„„„‡‰‡ƒ…††……‡‰‰‡†ˆˆˆŠ‰‰‰‰Š‹‰…‰‹ŠŒŒ‹Œ‹ŠŠ‹‹Šˆ…ŠŒŽŒŠŽŽŽ’‘ŽŒŽŽ‘‘‘‘“—–•”“’‘’•”““”””‘••”””–˜–“””“–—•“—˜™š™˜™œ™——šššš›™˜™šš™™™™™š›œžœœŸ˜œžžžŸ  ž ¢£¢¢¢££¢¢ ¢¢¢¢¡¢¢Ÿ¢££¡¡¡¡¡£¤¢  ¡¢£UVVVXXVVVTQRUUUTUVVVWWWVWWWXWVUVVWWRUVWWVWWWRKHGLRVWWWWTWVVVWYYYZ\ZXZZXVXYYXY[[[[XY[[YYZ[[ZWQF5 #(-02552-/0223568:;==<==52)($+//($"&))'('%"$$&'('.0/-*&$!

		
+%7BNYdkoqvxxxxtvsxz{z{|||ztvxyy{||xyy|{{zzy}|}}|y|}}z}~~~€€}x~€}}|€€€ƒ‚‚ƒ‚|~ƒ…„€‚€ƒ„„„„€‚~~ƒƒ„…„„…†…ƒƒ€€„…„„ˆ‡‡„†‡‡…‰‹Š‡††Šƒ‡‰Š‰ŒŠ‰‰‰…ŠˆŠ‹ŒˆŒŠ‰‰Œ‹†……ŒŽŽŽŽŠŽ‘ސŽ‘‘ŒŽ‹Š‹Œ‘‘‘ŽŽ“––•“‘Œ””‘‘”“””””•‘—˜–“•’–—–’—˜™–••™—š’˜™š˜š›š–›››”š››››˜œ“œœŸžŸŸž™žžŸžŸ Ÿ›žžŸŸ¢ Ÿ  ¢£ ¡ŸŸ ¡›£ ¥¥¥¢ ŸŸ   ŸŸ œ¡ŸUVUXXXVTTSSUVVSTTUVWWXXXXWWWYYUWWWVUTVWVTVVVNC007KUYYWWXWXXWUWXYXZZXZZVVWXYYX[[ZZZYZ[ZXZ[[YVJ9'
+	
 #%)-031./002237:<>ABBA=81)'(/52+&"$&'('&%$##!$(-2540,(((%" 
+	
+
+	
+#4FVaiptvxxuvvwzzyz{{{{zwwxyz{zzz|||{{{}}}||{|}~|{|~~~~~~~~~|~€~€|€~}~}ƒ„†„‚‚‚€‚ƒ‚~{€‚ƒ„„ƒ†††ƒƒ„‡††‡ˆ†„ƒ‡ˆŠ‹‹Š‡ˆŠ‰‡‡‰‹ŒŒŠ‰Šˆ‰ŠˆˆˆŠ‹‹Œ‹ŠŠŒŽ‹ˆ†…ŽŒŽŒŽŽŒŒ‘Ž‘‘‘‘‘‘’””’“’“““”•”••–””•—••””•–”•”’•———––˜š—•–—˜šš›ššœ›šššš›ž›š›ŸŸ  ¡ ŸžžŸ ŸŸž›ž Ÿ ¢£¡ ¡£¢¢¡ ¡¢¢££¥¥¤¢¤¤¤¢¢ ž¢£¡ ¡¢VVWWVWVRSSSUUUTSSTXXWTWXXWWWWWXYXUVVVSVWVVUUM?6,<IUXXWVUWYYWUXZZXVWWYZYYXSYZZ\[Z[ZZ[YZZYZZWQA*
	" !!'*+,.0121168?ADFEE>71+**483,'#$!%%%$$#$$$$*.46520*++*'$" 

+	
+
+
+
+
+$3BMWagnrvwxxvxyz{{t||zxwvzz{{|z{{|{{}~z}|||}~}y|w}|||}}~w~}~|€€|~~}ƒ}}|{~}ƒ„ƒƒ‚‚|{‚‚~ƒ‚}‚ƒ††……„‚„…‚‡†„ƒ…ˆŠ‹Š†‡†‰ˆ‡‡‰ŠŒ…Œ‹‹Š‰Š‡‡…‰‰Š…‹ŠŒŒŽ‹‹‰ˆ…ŽŒ‰‹ŒŽŒŒˆ‹‹ŽŒ‰ŒˆŒ‘‘’““‘’ސ‘‘Ž”””””’‘‘“““’’’Ž—“’””•–”——•“““””˜™™—™–•“””˜”›™š›œœœš——˜žžšœŸŸ ¢¢¡žœ ¢ ž Ÿ ž¤¦£œ¡¢¡¢££¢¡£Ÿ¤¤£¡¢¥§¡¥¢¢ ¥¥¤£¢£VWWVVWVUTTTSSTTTVXXXWVUXTXWWRVWYXUTWWWWWWWVTNE?DJSXZXWUUWYYXVXYZXWWWXZ[\ZYZ[[[[ZYYY[Y[[ZYYTJ7#

",.-*&"!#(,/35446;AFFFFF>3/,-1674.)&$#$$$$""$&&',13554430.,)&%%&$!
+	
+
+
+$2AKWcmruvvwyyyyz{|{zyz|}||{z{{|{{}|{|}z{~{|}~|{|}~}~}€€|€~€‚‚‚„…€}~€~~‚‚‚‚‚ƒ‚‚‚€€ƒ…‚‚‚„……………„„ƒ„…††„ƒ†‰‹‹ˆ…‡ˆˆˆ††‰ŒŠŠ‹‹‰‰‰ˆˆ‰Š‰ˆ‰Š‹ŽŠ‹Š‹ŽŽŽŽŒŽŒŽŠŒŒ‘’”•“‘’’Ž‘‘’““”””“’“““’’“”–™˜–“’“•–——–”•••˜šš™˜™™˜–••”˜››™››š››œœ›žŸŸŸŸŸ¢£¡Ÿ›¡£¢¡¡¡ žŸ ¢¥¡œŸ ¡¤¥¤¢¡¢¢£¥¦¥¦§¦¦§¨§¨§§¦¤££VWWVVRVTTTUSTTTTWWVUWVWYYXXVTVWWXWUVXVWWWWVVSNOPSVY[ZXWUWYZYWUYYYUXWXZZZ[[[YZ[ZVWYY[\\[YYVM?-	+47752/+('%###"$(+032248=BDDDD;0,(/57630,%#"$%%$$ &()(/33466641.,*(%&'&#! 

+
+
+
+
$0COZemruwwxwvvxxxz|}}}yyz|{|z{||z||yx~}{~~|}~€{}}~~~}|€€}~‚}ƒy‚€~‚€}‚‚ƒ…ƒ„€ƒ„ƒ…‚ƒƒƒ„†ƒ„„ƒ€„†…†„ƒƒ„…‰ˆ‡„†‡ˆ…„……„‰‡Š„‰‡‡†ˆŠŠˆ‰ˆŠ…‹…Ž‹‹Š‰ŒŒŒŽŽŽŽŒ‹ˆŒŒŽŽ‹ŽŽ‘‘‘“’’’Ž““‘’’Ž’“‘“••””•“‘’”•–——“’’’”––•”•–•˜šš–˜˜™–••–––œ˜˜›š›—œ™™›Ÿ›œœœœœ ¡¡žž¡¢£££œ ŸŸ›¡š¡Ÿ¡¡£¡¢¢¢¢££¤£§¥¨¡¤¥§¡§¥¨¢¦¤£¡XXUVUUVWWWVUUTTUWVVUVVW[YWWWTWWWYYVVWXWVWXXWWWWWUUXZZWVUWYYZZYXXXUYYWYYY[\ZZ[][XWZYZ[[ZZXRD1!	
(3<>=;866784.*'"##%+/..124<?AA@7,'(078732/*$$%'&%$#%(+/36667763/-+*(%%%#""!  
)7GWekpvyyxxxywx|}~}|z{|}}||||}|{y{}}|{}~~~~~~~~~}}}€€~~€€€‚€€€‚€ƒ€~„„‚€ƒ„„„ƒ‚‚ƒ„„…ƒ„†††‡‡†…ƒ‚‚………‡ˆ‡†…„‡‡‡†‰Šˆ‡‡ˆ††‰Š‰ˆˆˆŠŠ‹ŒŒŠ‰‹ŠŠ‹ŒŒŒ‹‹Œ‹‹ŒŽŽŒŽ‹‰ŠŽŽ‘‘‘‘‘‘‘’‘“‘’’””’’’’“•”““••••““’’“–•””“”“““•—•“––”‘–˜—–—˜–“•–•˜šœ›››œ››œžœ›šœœ›œŸ£¡  žŸž¡¢£¥¤¡ ¡    ¢§¥¤£ ¢¤¤¤¢¤¤¥¦¨¨§¥¦¤ ¤¦¥¥£¤¥§WWUUTUXWWWVUUSTVVVVVVWXXYTXXVVXWYWWXXXXWXXYYYYWVVVXYXVUUYYXXZ[ZXXUZZYXXWZ[[[[Z[ZZZYW[ZZZTK:!
+$/;CCA=5448:;<70,)('***),-0689982)('/899984/*&&&''%$%%,14552453/-)(&&$%!!!!  !#$!
+

+
2ALYdmswxwyuvy||~{{y{{}{|y}}}w{}}}|y{}}|~~}|}~€~~~€€}{€‚~ƒ‚€€‚€ƒ„ƒ„ƒƒ„ƒƒ„…„‚…€†‡†ƒ‡ˆˆˆ…„ƒƒ†ƒ‡‰‹‰†„…‡‡‡ˆˆˆ‰Šˆˆ‰ŠŠŠŠŠ‰‰‡‡‡‹…‹ŽŽ‹Œ‰‹Š‹‰Š‰‹ŠŒ‰ŽŽŒ‹‘ŽŽŽ‘Ž‘’ŽŽ‘“’’““’’Ž’””••‘”“”””‘’”“‘••“‘•˜–“˜–—“˜˜—•—•™’˜˜™šœ–™—œ›ž–››ž›œœ››Ÿ££Ÿ¡ŸŸŸž¢¤¤£¢ Ÿž¡Ÿ¤¤¥¡ Ÿ  £ž¢¥¤¤§¢¦¨§£¢¡¥Ÿ¥¤¢ž¦§QVTSVXXWWVUVUTUWWVWWUWWWYZYXTVWXXWWXYYVXWVY[ZYVWXYXXXXUWZ[WY[[ZXYZ[[ZXXYYYZZZYZZZYYY[\[XO@*	)7@EEC=431/58@=58::60,))''*.//00/-**-7<?><93.)(&''&%%%+14530110.+(&###""!"""!!#'(&# 
+
+
+	
+
+"5CQ_krvwwwx{~}}{{|}|{|~}}|{|}z||z}||}~}}~y{€~}€€€|~€€€‚€€‚‚‚‚‚ƒ„„ƒ……ƒƒ„„ƒ„…‡‡†…†‡ˆ‰‰†…‚ƒ……‡ŠŠˆ†…‡ˆ††‡‡ˆ‰‰‰‰‰ˆˆŠ‹Š‰‰‡Š‹Š‰ŠŽŽŒŒŒ‹‹‹‹Š‹‹ŒŽŽŒŒŒŒŽ‘‘‘‘‘Ž’’“‘ސ‘‘‘’“’‘’“’’“”“’‘’“••”“‘•–””•–––“””“•˜—’•–––—™˜˜™š˜”—–š››œœžœ›™™šœœœžŸ¡ž›››¡£¤¢¢£¢ Ÿ ¡¢¢¡ŸŸž¡¤¤££¤£¡Ÿ¡¢£¥¥¦¥¢¡¦§¥¥¦¥¡¤¥¤¥¦¨TVVSUVWVVVWXWWWWWVWWVUWXYXWUVWXWWWVWWYZZXVXYYXWWYXWXXXYXZ\[ZZ[ZWZ[[[YXXYZYZ\ZWZ[ZXXUYYXTH5!		*7?DC@93113587B=DFFC?:2''')(+)**..-*07;>>=93/*('''&"$(+.674022/-+&#! "#%%##""&(((&""!
+
+":HUajpty{{}|}|~||||}||}z{|{y{y}||}|}{~~}{€~}~€€€‚‚‚}‚}€€~„ƒƒ„‚‚„‚„…„ƒ‚ƒ…‡……‰ˆˆˆ‡…„„„„„††……„‡„ƒ„‡…‡†††‰ˆ‡…‡‡‡ˆ‰ˆŒŒ‡ˆˆ‹†Œ‹‹ŒŒŠ‡ŽŽ†Œ‰ŠŠŠŽ‘’Š‰Š“’””’ސ‘’’‘‘‘“”•”’”Ž““”“––”’””˜—–––”˜š˜’““’’–—”™˜˜”˜—š™œšœœ™œš›œžŸŸ›Ÿž¡Ÿ ™ššž¡£   ¢¢¡   ¢Ÿ¢ŸŸ ¢£¤¢£¡¥¤¢ž£¡£Ÿ¦¥¦ž£¥¦¦¦¦§£¦§¦¥§§VVVUUUVVVVWZYXWWVWWWVVUWWVUUVWVVUWTUWX[[YXWVVWWWXWYYWYYYZ\\ZYYYZ[[YY[[ZZ[[Z\[Z[\[XWWWXVO>*	#,59@@;410249=DOWTNJMHC:1--,,+*+,-.--158;<;52/)&)('$"$,158964340-*&""!""$&&%&'''&#&&&%#!

+	
+(=N\hqvy|}~~~~}|{|}~}}}}{zzx|}|}~~~~~~€€‚~~~ƒ…ƒƒƒ€‚ƒ€€‚‚ƒƒ‚„‚ƒ„†‡ƒƒ‚‚„ƒ…†‡‰ˆˆˆ‰ˆˆ‡…ˆ†‡‡†‡„‚……‡‡ˆˆ‡†ˆ…‡‡††ˆˆ‰‹ŠŠ‹Ž‹‹ŒŒŒŒŒ‹ŠŽŽŒŒŒŽ’‘‘‘’”’“‘‘’’‘’“”‘‘‘’‘’”–”’‘””””•–”˜–’““•––”—•–—™—••˜––•”–—––˜™˜™™™›œ››žžœœž ¡¡ŸžŸ¢Ÿœž¡¡ž ¡¡¡ ¡¢¡£¥£¢¤¦¦£££¥¦¦¦¥¥¥¥¤¤¥§¨§¤¤£¦§¨§£¥¦¦§¨©WVUVWVWUSRVYYWXSUUVSVVUVWWUVVWWWYXTTUVYWYXWUWWXXXYZZYZZZ[\\YYVY[[XYY[[[[[ZZ[ZZ[][YYXYYRE3		'07;>;51047:=CK^npldVQ@<22//.-,,,-+-*01357620/**+)%$#)26998777641/*'$%%&#$$&()('&%&&&$#"! 

+
+
+		*8FR]hpvy||yz{{{|||y}x|z{w}}~||~~~y€€~‚‚€}~‚€|ƒ€€‚ƒƒ‚‚€‚„ƒ€‚„†…‚€‚…†„…‡ˆˆ„‡…ˆ‡†‡‡‡††ˆ‡…ƒ……‰‡‡‡‡†ˆƒ†‡‡…‰‰Š‹‹Š‰ŠŽŒŒŒˆŒŠ‰ŠŽŽŒŽŒŽŽŽŽŽŽŽ’‘‘ޒАސ‹‘’‘‘‘’Ž‘‘’“”“•‹Œ’••••”—–””””–—–”“”–”—–˜š˜—˜•™—˜“˜˜˜“—˜™™›šžžž—Ÿž›¡Ÿ ˜Ÿ› Ÿš ž  £ Ÿ ¢¢¡¡Ÿž¥¥¥¤¤¥¦¢¦§§§¦¢¥¢¥£ª¦¦£¢¡¦£¢¢¢¡¥¦©¨VVVVWVWWUTUYYZXXVUUVVVRUWXTVXXYZ[ZUTVYYWXXXWXZZZZZ[[ZZZZZ[[[ZWXZY[[\[ZZ[[[\]][[\ZZ[[YWK8#				"(2;=:4,+/59>?CMau|yup`M=768740+)**,-....011.,--,+)$$$+5=>:79=>=<;973/+,-,+))('&%&%&&$"###"  !"!  
+
+
+*7FTalswxz{||}}{y{||}{{}~y|~~~€€~}‚€‚‚€€€€‚ƒ€‚ƒ‚‚„ƒ€~‚ƒ…„€€‡‡†…††††„†‡†…†‡ˆ‡‡‡ˆ‰‡…‡‰ˆ…††ˆˆ‰‰‡‰‰ˆˆˆŠ‹ŒŠ‹ŽŽŒŒ‹‹‹‹Œ‹‹‹ŠŽ‘’ŽŽŽŽŒ‘’Ž‘‘‘‘““‘ސ’“’”•’•—••”“”––•“–•”–”’•—––—˜•–——˜š™™™ššš˜—™š––—šš˜š›œ žžŸ ž   Ÿ ŸŸ¡¤¡  ¡¢££¢¡¡ £¤£ Ÿ ¢¤£££¦§¦£¥©¨¨¥£¥¨¦¦©©¥¢¢¤¥¢¤¦¤¡¦¦§¦UTTTUUWXVVXZYVXWWWVVWWTTWXWWXUYXYZWSXYZYWXXXYZZ[[V[\ZXYWXXZZYWXZ\]\[[ZYWZZ[]]\[YYZ\\XRC-	
+
#%0:;4+$'+07;<<;M\cfioeQ=;<=:72*)(+-00/,.**)'%*+)&&$%%/8@@;9<AA<@BCDB?==>>952)'&'&&$%#$$%$" !"#"!!  

+	
+
+
+
+)8JWakqvy{}z|y|z}y}|€~}~}€|~}}~‚‚‚‚‚‚ƒ€€‚ƒ„‚€}‚‚‚€€ƒ„€‡†„ƒ„„‡…†ƒ†„†‚‡‡‡ƒ…‡‡ƒ†‚‰‰‰‡‡ˆ†„†ˆ‰ƒ‰‰ˆ„Ї‰‡‹Š‰ŽŒŒŒŠŠ‰‹‹‹‰‹ŒŽ‘Ž‹ŒŒŒŒ‹‘ŒŒ‘“•”’Ž‘’’’•‘–˜—“–‘“‘“••••”””•’”‘”’“•˜˜——˜˜™™˜–˜–š•™“œœ™———œ˜›™›™Ÿ›œœž™ŸŸ   œŸŸ¢£¢ŸŸ ¡œ¡¢¡¡¢¢¢¢ Ÿ¢¢¥ £¢¦§¦£¥¡¦£¤Ÿ¨©©¤§¥£¡£¥§¡§¦§¡§¥¤¥STTTTTVVUWYYWVWXWXWVWWVVWVVWXYXXVZYYYYXYXWXYY[[[ZZZ[XXYYWXYZXVWZ\]ZZZ[YYXY\^]\[ZZ[[ZUK:&	
+		#$*/97, !$$$.342127<?G^\K?<??;61.,+,.3410/-+($$'(&%$(+.5;BC<=?BCCCEKNMLLMOOJD>830-+'&%$$$%$##"##"     
+
+
+
+/?N[fovy{|}|{~~€€€~€~|}|‚ƒ‚‚‚ƒ„„€€ƒ…†€€ƒ‚‚ƒ‚€‚„…†…………„„†††††‡‡‰‰‡‡‡„‡†ƒ‡ŠŠ‰‰‰‰ˆˆ‡Š‹‰ˆˆˆˆ‰‹ŒŠ‰Š‹‹Ž‹ŒŽŽ‹‹ŒŠŒŽŽ‹Œ‘‘‘‘‹Œ‹““’’‘‘“’’’‘“““”•“‘‘‘’““•˜˜—•“““•–””–˜——••––•“••——˜————™š—˜—šœ™š›œžŸœš›š›žžšžœžžžž ¡ŸžŸ££Ÿ ŸŸ œ ¢¢¡¢¡Ÿ ¢£¢£¤¥¤¤¦¦¥¤££¤¥¥§¨©¨¦¦¥¦§¨ª¨¨¨©¨¨¨¨¥¥UVUTVUVUUUVVUVXYZXWWXXWUWXWUXVXYYYYZYXWWYZZYY[[ZZYZYYYYWXUZ[ZUY[[\[W[ZZ[ZZ[]\\[ZZZYVN@.			
!$(-074($""#)++--//12:HHB<:<=8121.*/079774/.+(%&&()+-049=CECADEFEGIMOSQSSWYVQLFA<851-*('&(''$%%$#! !  
+
+
+	
+%4CR]fouz|{~~~}~€€~~€|‚}€€ƒ€€€„…‚‚‚ƒƒ‚~‚ƒ€†……‚ƒƒƒ‚ˆ…‡……†‰Š‰†…‡‰Š‡ƒ‰‹Š‡ˆ‰‰ˆ‰‰ŠŠ‰‡ˆ…‰ˆ‹Œ‹‹ŒŠŠ†ŽŽŽŠŠŒŽ‹‹‹ŽŽŽŽŒ‡“’Œ‘““’“‘“‘’Ž”‘”””’’’•‘’’””‘“‘–•”‘“••’’”—–—•””••••••˜————“—˜™š›™™™˜—œžŸŸ¡œ››œ›œ ››œœ›  ŸœŸ¢£¡žžžŸŸ    ¢   ¥£¢££¥ ¦¦¤¡  ¤££¢¥¥§¢¦¤¨¥¨©¨§¨¢¤¦©©§£UWVVVVVUUVVUWYXXYXWXXYWVWXXYXWWYZYWYYXXXZ[ZWXZZYZYZZZZWXZ[Z[[[[\\\\]\\Z[[[[[\\[ZZZVSF2

+	"$',020+'!! "%(()*+,,+*576446720220.269;::851/,*++-//037;?CFFGGHIJJMNOUXWW[^^[WTPLJFDA<7200.,+**'%###"!##" ! 

+
+
+	
%7FTbmux{||~~}~€€€€€€‚‚€‚‚‚€€~‚„‚ƒ„‚„„…„‚‚ƒƒ„†‡ˆˆ‡„„ƒ‰Œ‰‡‡ˆ‡††„…‡‰‹‰ˆˆ‰ˆ†ƒ‰‰ˆˆŠŠ‰‰‡‡ˆ‰ŠŠ‰ŠŒŒŠŠŠŒŒ‹‹‹ŒŽŒŽŽ’‘ŒŽ’‘Ž‘“““‘“•–•””“‘••““’’””‘’“””“’“—•”•––––—˜˜••—˜™—•™š˜š™˜šœ›™›œ››œžŸ›žž›Ÿœžž››Ÿ  ŸžŸ¡¢¢£ ¡¢¢¥¦¤¢¢¢£££¤¥££££¥¦¥¤¤ ££¤¦¥¤¥¤¥¦¥£§¦¦¥¦¨§¦¦§§©¨¦VVXWXUVVWXWVWXWVWXXXXYWWYVYXZUVWYYYYXXYZZ[Z[ZZYYYYZYYZYZ[Y[\[[[Y[\]]]]\Z[Z[Z[[\\[XUM=&	!"!$01.,,#"!$$&&'&&&*),/1+*)-010210.6:;;:78520-+-.//..48<>ACFGIIKMOPPPWXWW]^^]\WVWWUSSOIFDB?:52/*&%$%""###"!#$#" 

+
+
*?LYcipv||w|}~|€€€~‚ƒ‚€‚€~„…†ƒƒ„†ˆ‡ƒƒƒ„…†ˆŠˆƒƒƒ‡Š‰†ˆƒ„‚…ƒ„†Šˆ†‰Šˆ‰ˆ†††Š‹‹ˆˆˆˆŠŠˆˆˆŒ‹ŠŠŒ‡‹‹‹ŠŽŽ‰‹‹Ž‘“ŽŽŽ‘‘‘“”•••••––•“’”’“”“‘“”“‘’”•–••”—“••˜™™––˜——––›”š™š™šœœœœœ™›˜—˜˜˜›˜žžœœ™žŸœŸžŸŸŸ¡¢¢£¡Ÿ£¢£¦§ ¡£¢£¥¤£¤¤ ££¤¦¤¤¦¡¦¤¥¥¥¦§¥¤¤¤£¨¦¥£¢¨¦§¤¦©©¡WXYYXVTUWXXWWXWUVXUXXXWWXYYZZXUXXYYYYXYYWY[\ZZZZYYZYYYY[[Z\]\[ZZ\]\[X]]]\\]]\[\][YQC-#

+#! "*4BC>2$$()&#&(+-,)&&-.+(%%*/330/4:>=<:88730+,.10,,/5:;<?CEGIJKORSRTX\\]^abba_^_``^^[XWXXVOG;5-*(%&'''''#""#$%$#"!  
	
+
+
+$0?LYgsuux}~~}€€€€€}‚„‚€€‚‚€‚ƒ………„„…‡ˆ‡„„„ƒ………†‡‡…„„…‡ˆ‡ˆ††‡‡ˆ†…††ˆ‡…€‰Œ‰‰‰ˆˆˆŠ‹Œ‹‡Š‹‹‹Š‰Œ‹‹ŒŽŽ‘‘‘ŽŒŒŒ‘““‘Ž’’‘‘“”””””’—˜–””•–——–”••“’–˜———––—––••–˜˜˜˜—–•–˜››™™™šœŸœœ™˜˜™˜™›œžžœž ŸŸ¡ ¡ ¡   ¡¢¢¢£¤£¤¢Ÿ›¢¤¥¥¥¤¦¥£¡¢£¥¥¦¨ª§¦¦¤¡§¨§¥¢¥¤¨©¦£¢£§¨©¤¦¨¨§VXXVUTTWWUVWWWVVWXXXXXWWZZZYYZZYYYYYYXZYXX[ZYWXXYXZYZY[\][[\[WZ\]\[Z[[[Z[\]][Z\[YUI7#
+
 &,'"+6FSTO>('25,,,2873-#&'((''()154004<?=;:69751.-00.)-1:=<:ADFHKLLLTXWUXZZZ^acdedc_fca__^^^bb_ZQF?51)+,--,(&!! !###%###"! 

+$2ES\cluyy~~€€~~€‚‚€€‚‚€„††ƒ„~‚„…‚…„††„‚‚‚…„„„…‚‚ƒˆ‡‰„‡ˆˆ†‡ƒˆ†ˆˆ…ˆ‡‰‹Šˆˆˆ‰ˆŒŒ‹ˆŒ‹‹ŠŠ…‹ŽŽŽŽŒ‡Ž‹‘ŽŒŽŒ‹Ž‹’‘Ž““‘Ž‘’’’’““““••‘“’———–––•”•••••–—”—––”•’——˜•˜˜˜–˜—šœš˜™˜™™ž›œ˜™™š•——™šœ™žžŸŸ›Ÿžž¡¡¡¢¡ŸŸž ¢¡£¡£¡ŸŸ¢¥¦¥ž¤¤¦¤¢žŸ£¦¦©¤§¦§ £¥§¦§££¤§¨¨¤¥¤§§©£¦£©©VWWWUTUYXVUVWVTWXWXXWY[\[YXXXY[ZYZYZZYYYYZZXXYYYZ\[YXZ[\]\[[[ZZ\\ZZ[ZZZZZZ[[[\]\WN?-	
+&7C>12ET^_ZF*+<FEAGIJC92-(###&/35443//6<>=<:89962011.)(-8?A@ADEGJLMORTZZVVTSV[adfhjjjjihggffffhjibZRI@953122.'$"!"$%%&$%%%$$#   
+
+
+
)6DScmw|~~}€‚€€ƒƒ‚‚€„ƒ‚‚…‡…„€„„„‡ˆ‡…„ƒ„……„ƒƒ„†‡Š‰‰‰ˆˆˆ‡‰‰‰ˆˆ†…‡ˆŠŒ‰‰ˆˆŠ‹‹Œ‰ˆŒ‹ŠŠŠ…ŠŒ‹ŽŽŒŽ‘ŽŒŽŒŽŽ’’”“‘“”““““’‘‘‘’‘“”–—••—˜””—˜–””•—˜–•””•—˜—–“–™™›˜–—™˜™˜—™šš˜˜™™››™š›œœ›Ÿ œžŸ ŸŸŸŸ  Ÿ  ££¡£¤ ›¢¥££¥¦¥£££¥¤££¡¤¥¥¤¥¥¦¦¦¥¦§¨¨¨¦¦§§§¥§¨§§§§§¨§©WWWSVVWZYWVVXUVWXVXYYY[\[WXUWUZ[ZXY[ZXXVX[[YXZ[Y[\[XY[[Y\\\\]\[X[Y[\[ZZZZYZZ\\[[SF5 
+
+$*BWR@CNW^]UA*,CYgd\TRK?BB6"!!(487422-28;<<:959;85441,))1<CEDEGDHKMOQSW[ZVTJRR[]eilnonnnnnnoonmmnmifa[VRMGB?=93.+%&''&(&&&''&%$"&)%!!"  !!
+
+
+
/>M[fov{}€}~€ƒ~€€„…„ƒ„„ƒ‚„………†‡……€‚ƒ…†…ƒ‚~…„‡ƒ‰‹‹ˆŠŠ‰‹Œˆ‰‡†„ˆ†Ž‹Š‡Š‰ŒŽ‰‹ŒŒ‹‹…Š‹ŒŒŒŒ‹ŽŠŽ‘‘ŠŒ‹‹‘‘‘‘‘‘Ž“”“““““’“””‘“’‘‘””•–•”•‘””—˜–”••˜–••—‘˜™™——’•“š›™—–™™—”š™›š™•››š™œšž›žœž œœœ›š›› ¢£¥¥¢¤Ÿ ›¤ž¦¤¤£¦¤¤£¤ ¤¥¦¥¦ Ÿž¦¢¢¤¥¦¨¨§¦¦¦¦¦¦¤¨¨¨¤¨©ª¥££WXXWWWWZZXWXYYXXWUWYYXXYZXWYXXYZZZYYYYXWWZ[[YZZYZ\[XZ[[[[[[]]]\\[[Y]][ZZ[ZZZ[[YXM<(		"),F`^GHOU[UH8(.Hi{vfTOMEVQC0&%+8852/135:=;:889;;86551+)*4>EGDHIIJKNQSUWYWVTSSXZ]elnpqqpsuuuvwuttpnlmjfee`XROKGC?8521/-+,*''('%&)251-(''&((***)&"   
+
 3DTdqx}€€€‚‚€€ƒ…ƒ‚„„‚‚‚‚‚ƒ„…†………†„……†††…„„…‡†…ˆŠ‹Š‰‹‹ŒŠ‰ˆˆŠŠ‰‰ŠŠ‹ŽŠŽŒ‹‹Œ‘Œ‹ŠŒŒŠŒ‘‘‘‘ŒŽ’’‘’“’’’““’•”““””•••”“““““”–––“’•˜˜–—˜–•˜šš˜™š™˜˜™—–””˜š™™˜™šš™š›œŸž››šš›š™žžŸž¡ žžžžœžœœžŸ ¢£¤£¤¤¥£¤£¤¥¥¥£¥¥¥¥¥¥¦¥§©§§§©¨¦¥¤¨¨¨¨¨¥§©©¨§§§¨©§©©ªª¨§VXXVWXYZZWVUXXXXWUXVZZYY[ZYYYXYZ[[ZYXXYYYXZ[ZZZXYZ[Y[Z[[[[\\]]]\[[[\][[\\[[[[XWRE."		
+
!(,Gb^G>=BGA4.(3Nkyo\H<?AEI@5.+5>:11.227<=:737;>:60231(*,7AGJJKLMONSTWTPLMOYX\__\hmppqrtwzzyxyxxvsrqokeghd]YUQKLKGCA>:6531))*'#(.7=933245444432/&#"! #!!     
	
+
+
#.BQ^ipuy~€€€‚‚€}‚ƒƒ€ƒƒƒ‚‚‚‚ƒ……†……„ƒ„„ƒƒ„„„„‡‡‡…‰‰Š…‡‰‹ŒŒ‹‰Šˆ‰Šˆ‹ŒŒŒ‰ŒŠ‘Ž‹‹ŒŽ‘ŽŒŒŒ‰’””‘Œ‘Œ’’’‘‘’’””“‘“‘“““”••••–”“Ž““”–•’’”˜—“”–•”˜›œ˜š••”˜™™˜—šš™–š››–›—š›œžž›š›™ššŸžž—› ¡¢¡ ž›œŸ ¡Ÿ  ¡›¢Ÿ¤¥¥¢£Ÿ¤£¤£££¤£¥¦¥¢£¢¨¦¦§¨§§¥¨¥§ª©§¨©«¥¦§§£ª§©¨©«ª¨VXXWWXYZYVUTWWXXWXYYZYWX[[XXXXY[\]WYWWYZYYZZ[[[ZZ\]]]\Z[XZ\^^]\ZZ[\\[[Z]\[\\[ZUJ9&

	"/Je\?+*++*)$+9Zjm_J5221148657=D?430236;:7437<@?6/+10,+0<DHKMONQSVY\XPFBDXacegeejnqrqqsy}}|z}}zwuuuqledfea]VTOPRPNLID@??;750(&)29>;6:AFJHGFDA?:3-+))'&%$"$$#"!"$"! 



*7FQ\hs{ƒƒ„ƒ‚‚„††‡…ƒ‚ƒƒƒƒ„†…‚ƒ„„…„…ƒ„†‡‡‡ˆˆŠŠˆ‰ˆ‡ˆŠ‹‰Š‹‹Š‰‰‰ŒŽ‰ŠŠŽ‘Ž‹ŠŒŽŽŽŽŽŽ‰‘”’ŽŒ‘‘‘’“””’‘’””•“”•’‘“”•”••””–•”“•”‘“••””•–•—š›œš™–˜˜™™›œ››š™š››››š˜˜žžžœœžŸ ŸœœžŸ ¢¡ ŸŸžžžŸ   ¡¢ Ÿ £¢¡ ¡¢¤£¡¢£¥¦¦¦¤¥¤¡£¦¦¥£¥¨ª¨¥§£¦¨¨§§©©ªª¨¨¨¨©©©ªª¨§WWXWVXXWXUUUXXWVXYYYXWVWYZYYYYYZ\\[YWXYZYVZZZ[[\\]^^]\\\[X[Y]]ZWZ\]Y\\Z[[[[YYXO?,	
+		$5PeZ<,&%%+-39K_gdQ70..-.-3668?E@63///1420105<@B<1.--,06?EHFNQRRVZ[XQEFFTbhfhkjjloqpomqw{|{z~}{sssrrmhggfc_UWRSSSQRLJGHIHGE>5,05;=;8BIRVVVVTQMGC>840.,*))))('#'(%"%$$"


'3FUclrw}€ƒƒƒƒ‚‚‚††‡…††‚„„††„„„‚†ˆˆ‡ŠŠ………‰‰‰ˆ‰‡ˆ‡ŠŠ‰ˆ‰ˆ‰‡ˆ‰‹‹ŒŒŒ‹Šˆˆ‰Š‹ŒŒ‹‹ŒŽŽ‹ŽŽŒŽŒŒ‘““–““Œ‘Ž””““””’’”’“‘“•”’••’••’Ž”‘–——–š˜––™›œ˜––™š™™œ›š—š™š™›œœšœ–˜œœŸžžžŸŸ  ››ž ¡Ÿ›¡ŸŸžžžŸ£¢¡ž  žœ   ¡¤¢££¤¥¤¤¤£¥¡£¤¤£¢¢¨§¨¥£¡¢£¥¥§¡¨§¨©©¦§¨©ª©¨§§XWXXWXVXXXXYZZVVYYWWWWUWXWWZZ[YX[\ZYXY\\ZYZZY[Z\]]]]\\X\^^^]]\YYY\\[\]Z[[\[ZXTG3			
+ '9R`V@.'$*/2@KU_b^G1))))*-2577@FB:4,,,-0/..04:=A?80,+-3;AEHKNRTX]^WNBAHWckkgilklmopponntvwxx}~|xtqqplkjjhd_YXYXWWWUSQPRSSRQLB979=>;?ITY]_`a`_^\WLFB>;8653221.-,*'%%&'&$#" 

->KXeox~€‚„„‚‚ƒ„‡‡††††…„„…………„…‡‰ˆˆ‰‹Š‡ˆŠ‰ŠŠŠ‰‰‰ŠŠŠŠ‹Š‡‰ŠˆŠ‹‹‹ŒŒŒŒŽŒŠŒŽŽŒŒ‹ŽŽ‘Ž’“•’’““”•“’’“”•“’””“‘’”““””•––”••”–˜™›™—“–——™™——™š™™šš™š™™›œš™›žœš›œ žžžžŸ Ÿžœ›ž  žŸ    ŸŸ ¢£¡ ¡¡£¤£¢¡¢ ¤¤£¤¤¥¥¤££¥¥¤¥¤£¦¨§§§¨§¦¦¦¦§¨©§¥¨©ª©§©ªª¨¦§ªXXWVWYYYXWZZZZYWXZZWXXWVWXYZZ[[YZZYYXY\][ZZ[\\\Z]Z]]^][Z^^`_^]\ZZZ[Z[\[[]^\YWP@&""			
+		!#)8KXPD8/,-04BNSRXXI/+''"(,/012=EEC<1/-...++,59<==:2)*)6=CEIKOPUWZWL=@DUdmpnikkkjjglnpjnppotx|~|xsnonlllljcb[[\]]ZVVTUUXYYYXTKA?>??@COX^_bedfghhfb]VOIC@==<;:930-,)**)'%%'($

+
+!0>MYeov}‚ƒ„„‚‚ƒ„ƒ„‚„……‡‡ˆ††‡†„ˆ‡Š‡Œ‹Š‰‡‡‰ˆ‰ˆˆˆ‹Œ‹ŠŠ‹ŠŠŒ‹Œ‰‹ŒŽŒ†ŽŒŒ’‘‰ŽŒ’’”’•“–‘”’“‘“•”’’“’‘‘’“‘”““’–—”‘“”“”—˜˜”••—”™˜—–—™›››–œšš—›—›™œžœ››œžŸžš›››žŸ šžœœž ™Ÿ¡ ž¡¡¡œ¡¡¤£¢Ÿ£¥¥£¤¥¥ž£¤£¡¥§§§¤¢¤¤£¡¦¥©ª©¤¨©©©©¤§©©§¦§¨©«£¦¨ª¥ª¨©ªYYXVWZXZWXZZZZYXY[ZWYYXXVXYZZZY[VXXYXZ\]YYZ\[]\]\\]]^]\\]____^^^[Y[Z[ZYZ]^[ZVM;&$,#
+
+	 "#*7ELJB:30/.2@LLKLPG2/,)&'*+,+,6@GKE=861-+)++4::::6/((.6=CJNPOSTVQI?9?Q_lqpomllhfgfhnprqpinptxzzvrnnnmqppliecccdc`^[WWW[\`a]XPHDA?>AJT]_`egeejknoomjd]UOJEEDCB@;631/..+(('''%$#!
+
.;O^lv}‚„‚‚‚ƒƒ……‡…‚…†……†ˆˆˆˆˆ‡…ˆ‹‹ŒŒŒŠˆ†…ˆ‰‰‰‰‹Œ‹‰Ž‹‰‹ŒŒ‹‰Ž“‘‘‘““Ž’Ž‘‘Ž’“–‘’’”••–•““““””””•”””•”’•–””•–”‘—˜–”“–——–•—›š—••—™š›››œš—šœžžœ››œœžžœŸŸ›› ¡¢ ž ¡ £¥¡Ÿ¡¡¢¢¢££££¥¥¤¤¥¥§¥¢£¤£¢¤¦¦¦¥¢£¤¢¥§¨ª¬«¥§ª©ª©§¨¨¨¨©©§¨©§¦©©ª«¬ªªYZYXWY[ZYY[WXZ[[[ZZWYXWZ[[ZY[\[ZXWYYZ[\]YXYZ[\\Z[]]\\[[[]^^Z]^_^\ZYY[[ZZ\Z[ZTH:+28.

+
+
+#&5<KLE93013209?><=?:2.,)%'+.0-&4<INI@<83&'')(04576-,'+29>EIQSSTRKG<=?N\emononlif_egjlrstrooposvuutsrqsttrpnjdgefhhfa][X]]bb^WPIFCA<ENX__`efddjjlnnnqpjd^YTOLHGEC@=755420.,*)#'&*($ 
#7GUbmv{€‚ƒƒ„…„……‚…†……†ƒ‰ˆŠ‰‡…‰ŒŒŒŒŒŠ„ˆ‡‰Š‰ˆˆ‡‹ˆ‹‰‰ŽŽ‹‹‹ŒŒŒŽŒŽŒŠ’Ž’“”“’’’Ž’‘ŒŽŠ‘‘’’—“”’“’–’“””””•–•–•–•’–––’”•”’—š™——”™š˜“”–š˜—’˜–••š˜›˜˜˜š›Ÿ Ÿ›˜—œœž¡¡ ŸžžŸ¡ žŸ¡¡££¡ ¢›¢¢£Ÿ¡¤§¦¢¤¤¥ ¤¢££¤£¤¡¡¡¥£¢¤¦¦¦¦¨«­¥©¬««¨¢¨¦§¢ªª¨§©¦¦¦©¬­ªª¥Z[ZXVYZZYY\\\^]\[ZZZYXWZ\][Z\\[YYYZZZ[[[XXXXZ\[XY[]]]][Z]^]\\\^_\\[[]]\[\[YUK>7<AC8#	'9FPTQC4&(-330/0,(&(*(&''%'39;3,4DKNID?;3)&(**)0/442-'-6>CGKRVUSKA:CLS[ejkknnliebaelnprtxvrsrqpqoortuuuvvvuqnjhilnomga_^_ddc]UNGFDCAIT\aacdddehkklnoqqojkjfb\VQMKIFDBB?:5410/.,+),,+)'"
%:IXeqy~ƒ…„„„ƒƒ„†‡ˆ‡‡‡ˆ‰‰††‰‹ŠŒ‹‹Š‰‰‰ˆ‰††‡ŠŒŒ‹‰‹†‹ŽŠŒŒ‹ŒŒŒŽ‘’‘’“““’‘’“““Ž‘‘””–˜™—•‘‘”•””•••—˜——–•”—•••——˜––—––š›ššš™š˜––—š™™——˜–”™œ›š˜š›šŸŸœœœ ŸžŸŸŸžŸžžŸ  ž› ¡ £¢¡ Ÿ¡¡¡¡ ¡¤¦¥¡££¤¦¥¢ ¢¤§¥¢¦¦¥¤¥¨¨¨§¥¥ª«ª©«ª©¦¦§¨§¨©ª©§ª«¨¤¦¬¬«ªªZYXXYYYXYY^]]]]YZYZYYXYZ\]\\[ZZZ\][\\YZZ\\[X[[ZYZZ\\\]]Y^Z[\[Z]^^\\\\]\[\[RF<-:CEA4"
+	
+ $8JSYUL=.$%++(%" !"$%&'3=CC:.;GJHE?EE<1.+/1337::71(/:AGLNRSRMD6AKW_dimhjkjfh___hprqsw}{xuvrpiidlpssrrstrpmiknqssoiccdhifaYPJCBBCDO[acd_dbdfffklllmhikoonmic^XUTRMLKHB>9656631000.12/+&

+
+
+(>LYeoyƒƒ€ƒ…‡‰‰…ƒƒˆ‰‰†‰Š‹Œ‰‰‰Š‹‰‡ˆˆ‹ŠŒ‰ŽŒŒ‹ŒŒ‹‹Š‹‰ŒŒ‹ŒŒŽ‘’““‘’’•”“‘”–––—•˜•‘’““”“’—–—––’’“–———™—–———–˜š™™™—–———˜š—™•—˜—•œ›žžš™›œœŸžœ¡¢Ÿšœš›–ŸžŸŸ  Ÿœ¡¡¢£¢ž¢ ¡Ÿ  ¤££¢¡¡¥¨§£££¥¨¦¡¦¦¥§§¨¨§¥§¥©¥¨§©¦¦¦¨¨©¦©§¨¨«ª©¥§¨§¨©©YWUWXZYY[]]\\]\[ZYXXXZYZY\]\XYYZ\^]\]\ZZ\^^]\[[]]]\[Y\]__\Z]\\\\]]\\[\\[\XI4(4>E?3&	%-EVZWM>-&  "! !%*17>CED<6?IHCBDNYXPB64:;:<?>93.1;CIMQPOJC=>IV^dhloolihhgffjottsw‚|zzywqkigglnoppqppojimpswuqmefhkje_VLDBA@FLV`dffhfefiijklllkjkoooqtrokfb_^]YUOLIEA>=<9854334431.,*&"

*>O_mx}~€‚ƒ…‰‰†…‡ˆŠŠ‡‰‰ŠŒ‰Š‰‹Œ‹‡‰ŠŒŽŽŠ‹ŒŒŒ‹ŒŒ‰‹ŒŒŽŒŒŒ‘Ž‘’“•“‘‘‘’“’‘’””’“““••–”•––”“””“”••–”•––—•’–——˜˜˜˜™˜——•”˜™™šœš–——˜™™š™˜™™˜—››ŸŸžš››ššŸœž¢žšššœŸ¢¡¢¢¢ Ÿ ¢¥¤¢¡ŸŸ¡¢¢¡££¤¤£¢¥¦¤¥¨¨§¥£¥§¥¤¥¦¥¦§¨¤¥¥¥¨«©¨¨¨¨¨¨¨©©©¨ª«««ª©©§ª©¥¦©¨XWVUXYZYZ[[Y[\[XYXWYZ[YVZ\\\ZZZYZZ\\\ZYY[[]\[[[]^\\\\\\__]]]\]][^^\\\]\ZXQ@%*6;8-
+		
 %1GVSLB31'# !%,5;<99950:BA>DI[iiaQ=7==;>?<94.19AFJKIC>4;ALW]aijpqlfhgiknruwtlx€yyy{yrnkgfghioppmqrogonprrqnfhiifb\TIA;>@IP[cdbggiiiklmmmmmmloqonttutrkjccbcc]XURKDC>?=;78777533/32.(#


"1FT_hpz~„††ˆ†‡ˆ‰‰‰…ŠŠ‹‹ŠŒ‹‹‹ˆ‰†‹‹‹Š‰‹Š‰ŽŒŒ‹‹ˆ‹‹ŽŽ‹Ž‘‘’’’‘Ž‘‘“‘’“Œ’ސŒ•“”–––“—–“”••””•”–•”˜˜˜–˜™™™——˜’–™˜”š›œ—––˜—™››—˜™˜˜œ˜œžž˜›ššš™™œ–™›—Ÿ››˜ž¢£ ¡£¢¡ œ£¤¤ ¡ŸŸ ¤ž£¥¥££¢¤¦§¦¤¡¦¥¥¢£¥¥£§¥§¡§§¦¥¥¢©¬©¥©©¨©ªªª©¨¨«©ª¥©¨©§ª¨§¦«£XXZZYXZZ[[ZYZZYZXWXZZZYY[]]\\][XWY[\Z[ZZZ\[ZZ[\\^^\]]^\\]^^]\\]\__\\]][ZUH3*.84%
+ &1CLG<8<;7,   !%*373000--268:FXgrpfWA8;=;<<975105>DDA<7327=GQZbhmqqmihhkotxxusqw~}xwyyvrnlhhhhhmoooqtrqpomllnnkkkig`YQF>;;@IW_ddehklopprsrnsvvwxyxwxywwwwrlfbgnrskaTOKIEDCBA@@@><97541/.-)#



"1CTfr}ƒ†…†‡‡ˆ‰ˆ‡ŠŒ‹ŒŒŒŽŒŠŒŒŠŠŠ‹‹‹‹ŽŽŽ‘ŽŒŒ‹ŠŒŽ‘Ž‘’‘‘’’Œ‘’‘‘’“”•˜–”•––•’’“––••’’••–—˜˜˜—˜˜–“˜™™˜˜—–˜››ššš™™šœœž›™œ››››–™œš›œœœššœŸžžŸ¡¢Ÿ ¡¢¢¢¢¢¢¡  ¢¢¤§§¥¤¤¤£££¥¦¦¤¢£¤£¡¢£¦¨§¥¥¥¥¦¦¤¦¨©©¨§©¬«©¨©«¬ªª««ª¨¨©ª«ª§¦ª­®YX[ZZXZZ[Z[ZYWZ[\[ZXWTYZZ[^^]]\XXX\]\\[Z\\[[[[]\^_^\^^][[[]]]\\\^^\\\[ZZP=.'-2)		$-7=8.3:<:. !!!   !&+,,,..,)+,.1B^pvodVD95<<=:;;9640;?<52+10138<MZenrqnjhensw{yurmtywrqpphllkhiiigkjomqssoqqpnkgnnljif`TLA>9>ALZadgglmmprstvtnvy~‚„‚€{||zx{|zxqafks{ytk_ZWRMMMLKKIE?@><863221-("

+.:O^jtz€…„‡ˆ‡„‰ŠŠˆ‹ŠŒŒ‹ŒŒ‹ŒŒ‹‹‹ŠŠŽ†ŒŽˆˆˆŒ‰ŽŽŽŽˆ‘ŒŠŒ‘’‘’’Œ“•’’’’’“–•’’’“’““•˜–”•–•”““••™™–’–•—™š–™—•”——š™›››š›š›žŸžœ›–›š›•›žŸšžžžœœœœž—ŸŸŸ  žžž ¡¢Ÿ¡¡¡¡¡¡£¥¦§¦£££££¢¡¥¦¥   ££¢£¨§¦¥¤£¥¢££¦¨¨¦¨£©«©¦§¤ªª©©©ª©¨¨¦ª¬¬¥¨©¯°Z[\\ZYZZ[\[[X[\[^_]ZVWY\[Z\]\\\\[Z[]]\Z[\\[[\^^^_``_]^][Z\\]^][[[\\\\\[WH1"%&"
+$***(+576-!""!!!  "$$&),,*(''(-=gy|l`TD<:<?=;>GG?;9982.,1664434;N`ossoigepy}}ytplqsrnkiifgijfghhijjosuwurrsrolknnkhee]RJB?>AEO^ddilnnjnpqrvutw{Šˆƒ‚„ƒƒ€€‚|rc`ky‚„yrkc\UXWUSPKGECBA?>:520-*)*'!4CScs|„…ƒ…ˆ‰ˆˆ‰ˆ‹‹Œ‹‹Œ‹‹‹Œ‹ŒŽ‹‹‹‹‹Œ‹‹‹ŽŽ’ŽŽ’”’‘Ž‘••““”“’”•”•”‘‘””•–˜•“–˜–“’––”™›—”––™š™™˜–“•––šš™š™›–™›žœž›››ššœ  Ÿž ž ¡ŸŸŸ  ¡Ÿ¡ Ÿžž¡¢¡ž ¢¥¦¢Ÿ¡¦§¥¤¤£¤¤¤¢¡£¦§¦¤£¤¤£¤¨©£¤¥¥¦¦§¨¦§§¦§¨§§§¦¥¢¨¨¨¨¦§¨¨¨©ª¬­ªª©®®[[][YXXYYZ[ZZ[[Z[]][ZYZ[[[\\\Z][[Y[[]][Z\Y[[\^_^____^[\Y\\\]^[]^]\\\^]XN<#	
#%'&+.1+(!"""!    !       %&**'%$#-3XzŒ|b[IFCDEEFW`WH@;7/.+17;<974-6>Viprngffqyzxsooloomhe_eddegdffgijksuy{xuuruonnoolhgd[QKDC?BEVehgmooooopquvvwz~„‹Œ‰‰‰ˆ…†€„„‚}q[iq€ˆˆ†€{wqmid^ZSPKHDFACCA:632/0240)!#<MZfpx}ƒ‡†‡ƒˆ‰ŠŠŒ‡Œ‹‹Œ‹†‹ŽŽ‰ŒŒŽ‹ˆ‹…‹‰Œ‹‹ŒŽ“Ž‘ŒŽ‘“’Ž‘‘‘Ž‘’““’”•”””“•—–’Ž–”–”’’•”“–š˜”˜™˜’——š›™™™“”“–—™››™˜›œ™š›žžŸžœœœ››™›œŸžžš Ÿ¢ Ÿ ¢Ÿ ™žœ¢¡  ¡¢¢žŸ¡¥§¥  ¡§¦££¤¥¡¢ Ÿ §¤¥¤££¤Ÿ¨¨¥¡§£¦§¨¨§§§£¤¥§¥¨¥¢¡¨¨¨©©¥ªª««ª«¬ªªª­«[[\[WUVWVYYYZ[YY[]Y\ZZ[[Z\]]]^\Z[\[Z]_][[[[[[]__^]]^^]]]\[Z]]]^`^\Y\]\RB,		
+#(,.12/&$#"!   ""#"!!!"!"&()(#$$'2Wx”ŸŒwe]WTPQYdmqbLB92/.049==:96127Lalomnoqrvrmlmmnmmljecbbbdcbdegikmv{|}|zy{yxvuspnlhcZPKGFCCJ\imnoorsrqvxxwvx}‚†ŒŒ‹ŠŠ‰‰‡†„„„„}sjn|†‰‹‡„„…}vof`YTOJHIIJGEB@?><:874.*&"
);L]ky„„…ˆŠŠŠ‹‹Œ‹Š‹ŠŒŒŒ‹‰ŒŒŒŽŽ’•‘Ž‘““’’ŽŒ’–”“”“•••””•˜˜–“’”•”––”‘”–——˜šš•––˜™˜š›™™™˜˜——–•˜šš——™›™™›œŸžœ››œžžŸœžŸ ¢¡Ÿ ¢¢¡¡Ÿ ¢£¡  ££¡ £¥¥£  ¤¥£¡¢¦¦¢¦¦¥¥¤¢£¢¢££¤¦§§¨¨§¦§¦¦¦¦¦¨©©¨¨¨©§§¨¨¦ªª«­¬¬«ª««¬¬®¬ªZW[[XWXXXYYV\[[\]]]\ZXZ[[\\\]\[X\]][]__]\[\]]^__^][\^Z][\\\]^[_]]]]][WJ6%		
+!# !$*/37>A;,("  !#$###"&((&)+*&'&,2Uy’¡£ž‘wtrqlgjpplXF;31./18:ACCC@=9-FZgmmnuwvrk`hkkgjhkjigc_]Z[^cfghmmw{}~~y~~|{yuqqojdYLIGFDHP_knpqruusrx|zxwv}ƒ‡ŒŒŠŠ‡‰‰ˆƒ„„…†ƒzvr{…ˆˆ‚‚ƒŠ‡ƒzohb]WTPMKLEIHFDB@?=;9711,'!

&.FWeov~ƒ…ˆ‰‹‹ŒŒŒ‰‹‡Š‰Š‰Œ‰‰‰‰‰ŽŽŽ‘‘Œ’”‘”’’“’‘Ž‹ŒŒŽ‘•“””–“’”—˜––””””“—˜–’–’˜•–“˜••”™™™•›˜˜—˜šš—•“––™˜––—˜›—œ›œœœœœžŸžšž›Ÿœœžž££¤Ÿžž¢›¡Ÿ ¢£¤£¡£¡¤¡ ¡¢ž¡£¥§§¢§¤¥¤¢¡¡¡¤¥£££¢¨¥¨¨¨§¤£¨¤¦¥ª«ª¦¨¡©§§§ª««¨®¬«¬«§ªª­ª©¨ZZZZYZZYZ[YZ\^]^]]]\ZWZ\[ZY[\\[Z[]^\[]^`^[]__`_]]]Z\^^][]_^]\Z]\Z\]^ZR@*	()%#""#$(-5=DJRNA1"   !"#"$'*,,,-.,+,05Tw–¡¡œƒ‚ƒ„…‡‚woog]J921/,,3<BJ]b_[VH9?O`lnsxzvla`ehheghiiiid_WNLV`gjnoqv{|}}~€€||vtrsmdXJECAEKTbklnrvwwusx|{yxx|‚…ŠŽˆˆ‹‹‹‰‰Š‰‰†……„~y{†‡‰ˆŠŒŒ‹‰…zvod_[VQNMLKIFDBBCC@<9653,%


+9IXgr|‚‡‰Š‹‹ˆ‹‹‹ŒŠŠŒŒ‹ŒŽŽ‘’‘’‘‘’Œ‘’’‘““‘’“‘‘’•––••––””•–”””••–•’—˜–——™˜˜•’––•”™™˜—™——–˜›šš˜˜–•˜™˜•——šœ››œœœŸœ™œžžžŸ ŸŸŸŸŸ ŸŸ£¥£¡ ¡£¥£¢¡¢£¤¤£¢£¤¥££ŸŸ ¢¥§¨ª§¦¦¥£¡¤¦§¨¦§¨¤¦¥§©©¨ª«©¤§¨¨¨§¦¨ª©§¦¤§ª©¨¬­¬®¬««­®¬««ZZZZ[[[Z\\\Z\^]\[[\\[XZ\\ZY\]\\ZZ\]]]\\\^[]_^_^]^]]]^_^[^`_\\Y]\[[\[TG3		!+,,299-('29?AOYWM7#"!   !!$(*,-,///-56Uu‘¤¤œ{}€‡ˆŠŒŠoYND<010/*-6?B[t}urmX=<>Xjqvxzrda]aefdddgegcb]SEHO\dilqqvy}|€‚‚~zvuumbUCC?EGNVdhhhptwxwtyz{zzt~ƒƒŒŽ‹‡ŽŽˆ‹‹ŒŒŠ†‡ˆ‡…‚{‚…‡‰‰Š‹ŽŽŽŠ‡†‚zsmc\VSPNHH@CBEEFB@?@>82/)#*9M[iu}€†Š‹ˆŒŽŒŽŒŒ‹ŒŠŒ‹‘‘Œ’‘‘‘‘‘’‘’’’ސ’””—–“”–•”•–”””””•—–—™˜—˜™™•–’–——•˜˜˜™––˜˜š–š•š––—˜š™———˜™˜—˜™žŸœ–š›ŸŸŸŸ œ Ÿ¡  ›¤ ŸŸŸŸ¤¤¤¡¢£¤¡¡¡£¥ ¤£¢£¡¥¤¦¨§¥¦£££¤£§¦¦¦¨¥¥¦¨§¨©«¬ª¦¨§§¢¢£ª©«¨§¤¦¢©©©¨©ª«¬­®¯®¬¦XYXYZZ[\Z\\Z\\YYYZ[\ZZ[][Z[\^^\[[[\]^^\Z^_Z]^^\_^^^_^_^]]^_]\\\\[]\XK8"	"&&+5BLHB;7=>DPZYO;$#"""! !!%(+--.0003:Ss‘¢§ “‚}~†ŒŽŽŽ†qW<52.01.).8>Oj…Š…}cA8@Qiswyvnga\^bbbdededa^XOCDKXaekpuyz}}ƒ†…ƒ†ƒ~}|zul^QBDFINT]dhghnsuwwxy|~~‚…ŠŽŽŒŠŠ‹Šˆ‰ˆ‰ŠŠ‡‚…‰ŠŠŽŽ‰ŽŽŠ…~xpia[UQMJHHGEHIIIIFA>;840(!

/>Rcs{ƒ‡ˆŽŒŽŽŽ‹Š‹ŒŒŽŽ‘‘‘’’‘’‘’‘Ž’•—–•“”•”“”•••––—–—–”—›š˜˜˜™˜–’—˜—™™—šš˜—˜š›œ››™˜™˜›œœ›š˜˜š››œžŸœ–—šžŸŸŸ  Ÿž¡¤£¤¢¡¡¡  ¡£££¢£¤£¡¡Ÿ¡¢£¤¥¥¤¡¡£¤¤¥¤¥¥¢¥¦¥¦§¦¤¦¨¨¦¨©¨§¨©««ªª©§¦¦¨ª¬««©§¦§©«ª«ª©©¬­®¯¯«©YZYYYZ\]\[ZY[\\WWXZ[[[\Y[[[[^_]Y]][]^^[Y^_^^__^^]Z^__]^ZZ[]]]Z][\]ZSB+
 !(0>FIGEFEEHONF4#$%$""!! %',//00/38Sp£ª§›‰€…А‘’”•‘fK33/0041?JRZmƒ‡†€xcFFJ]nvxwmkhc\]]__bb`_caZPJADITZ`fmtwxy{ƒ‡†‚‡…‚|zyxuiZPCIHMQWafiiinpqptwy{€‚~}|€…Š‹Ž‡‹†ŒŒ‹‰‰‹Œ€kprz„‰‹Œˆ’Œˆ„}vnh_YSQPMGKKKJNLIDBB@;6/,("
"<M[ht}„‰ŠŒˆŒŒ‰ŒŽŽ‡ŽŒŒ‹Œ’’“‘““‘’‘‘’”–•’“”””“““””••™š—––”˜˜š˜˜–š™˜’—˜™›œ˜›™™•—–›››š™™›˜›žž››š™˜š›œššœ••—Ÿžž   ¡£¤ žŸ¢ž š¡žž¡¥¥¤¢¡££¦¦¥ ¡Ÿ£ž¤¦¥¦¤¤§¦¤¥¦¥¤¢¨¨¨ª«¢§¢£¤©ªª«ª¦¨¨«¬ª¤¨¦¨§««ª¬«©ª¬­«¬¬¨¥\[XXWZ\]\[Y[]]^\[[YZ\\\\\\]]]]]\]][\[\\\^`]]__\[\\]^^^^]]\Y]]^]^\[VK7%	 !&-6@DHD>7>>8,##$#! !""%*,./0/.7OnŒ «­¤”„€€ˆ“”–œ™ŒvY?4115=ITcihlsvupj^QOXfsy{ztlje^\\[\]\[[__VJCACHNRYagmpruz„„…††ƒ}zxsqfWNLNPPSZbgkkmoolmqvwy~‚‚{{ƒˆŠ”””’Ž‹‹‹Ž|`VW`lw€†‰ˆ‹‹‹”“‹‹‡{wqjd]VTRQOOPPLIIIGD?;861,'",>O`mw‰ŒŒŒŒ‹‹ŽŽŒŽ‹’’’’’‘’““’“““’’“•—˜–••””“’“““”“”–˜™—•––šš˜–——™™˜—˜˜™šœžœ›š™˜™™˜—˜™››—›œššš˜—™›››œžœ››ŸŸž  Ÿ ¡¢¢Ÿ¡¢¢¢ ¢¢¢£££¤¤¥¥¦¤£¤¦¦¦¥¢¢¤¤Ÿ¥¨§©¨§§¥¡¦££¦£¨¨¨ª«ª§¦§¨¦¦©¬«©©«ªª¨¨¨ª¨§¬®¬¬¬¬««¬¬«©¬«]\YZZZ[\][[]]\^]]^\Z[\ZZ\\\YY[\\]\[YZ\][]^\[^_^]]]^[^^_`_^^^^]]Z[YO?,			!%)4862/*))$ !  !!!"&*+*.+/1Jh‰Ÿª®©‹x~€‰Ž•˜™žœ’„iJ>7=EPY^kqlbXXXXW[Z^bnx|€…‡rj`]XXU[[YXYZQFDADGKMTX\_hkory~€ƒ„ƒ{vrkbULLOPQS^dihoppnmmpotvxz€~‡‹’”—•ސ’’‘ŽŽŒŒ‹ŽyXQFQUbkqw}ƒ†ˆŒŠ‹ˆ†‚}xnhc^YUTSKNLLIJHF?=<84431,%
*BQ`p|…‡‰‰‹ŠŠ‹ŽŽŽŽ‘‘‘‘’‘’’Ž“‘‘‘““”’”——”–’“””’“••”•–—’–““’”—›š–“——™•–˜š˜˜•š™™š–˜šš—–•™˜œ˜›šš™™™™˜˜˜ššžžžœ ŸžŸšŸŸ¢¡ Ÿ¡¢¡ž ž¤¥¥£¦¤¥Ÿ¥¢¥££¤¤¥¤ž¥£§£§©ªª§ ¦£¦¨§¦¨£©¨§¨ªªª¦ª¨¦¤§©ª¨ª¦«§©©ª©ª¨¬®­¢­©¬«««©¨­¬\\Z\[[YYZ[\]]]]]]`^Z[[YZ\\[ZZ[Z\\\ZY[]]]]\\\^_^^^]_`^^`a`_`_Z^][XTG1			
+
"#$%'()(% "&)*,--06]„ž¬±¯¥”}z}‚ŠŽ”š›œš›—wYFCLX^cdhmiXKFJMR\gkmsz‚Œ’…rb^YXY[[YVVSLFCAEHLPRTWZ`fjnsvx{}€‚‚}ung]QJLNOQXahjoqroopqopqvvw{€‚‚ƒ„ˆ‹Ž’•”‘‘‘‘ŒuWNIJLMRWakt{€„ˆŠ‹‹ŒŽŠŠŠŠ‰†ƒ~xpib[USQOMKLLKJFC@>>??=7/' 


!0G\mu|„‰Š‹‹ŽŽ‘’’“’““”’‘’“’“““”–•—–•”””’“•–•••–—”‘““–˜™˜——————˜šš˜—•–—››˜—˜š›œ›››››œœžœš›ž›™šœœž žŸ¡žœœž     ¡ ŸŸ  ¢¤¦¦¦§©§§¦¦¥¦¦§¦¤¤¦¦§©«©©©§¥¤¥¦§¨¨©¨¨©¨§¦©««¬«¨§¦ª¨ª«««ª«ªªªª«¬«¬ªª«®®¯¯¯­©¬­\ZZ[[\[ZZZ\[]\]Y^^^\[Z[]]Y[Z\]]\\[[Z\\\]_Z]^]]^_^Z^``_^``^__^__]VM<#	   $''&$ "')*+-,.8a£®±¯¢ˆxs{ƒ‰“™Ÿ  ”‹ycOLW__^a`fe\KGDHM`kmotuvz„•zaYWY\\\ZVSKFA@@FJQUUTWXXYaeiloprv{~{sl`WIKMOKTZcjosturntuuuuuvswy|„ƒƒ…‡…‘’ŒŽŽ‰“““Ž‘‹tXOHKJKLNQV[afmu{„Š‹Š‹Œ…‹Œ‰†yrgb\XUSMMMMMKFECCEDC>70,("

3ALXfr|ƒ‡‹Ž‘Ž‘‘’‘’‘‘’Ž‘Œ“‘•“”–—–•‘•’””’“‘–•”–••“““•—™———˜˜˜’˜™˜––•–—›™™”˜˜šš››žœš›œœ™œŸœ˜›œšžŸ—Ÿ›žœŸ¡ž¢ Ÿœž£££¤¥¤§¥©¦¦£¥ ¨¦¥¤¥£§¢¨©ªª§¥¤£¥¤§¨¨¥¤¤¨¨§£ª«ªª«©¦¦¬§ª¬¬¦ªª«§¨¨ªª«««§©«¯¯°°¯¨­­\[XYZ[\\Z\\[[[\]]^^^]\\]^\\\]^\]\\\]]][]^__`_]^^_]\^__\__^^]]]^]SC.	
+ ""#$'&$"! %(*)*+,-1^‡ž©¯®Ÿ…vvz‡‹‘™Ÿ¡Ÿ™‚sbWY]ba`aaaa_]SDJWclnyvlcgq„wXJLT[^]ZWPGA>;AGLV]^\ZWVUY[]bdfhkottqi^SJJLPRV_fkqwwwuotwz|{zzxswz‚ƒ„……ˆŒŽ‘Œ‘‘’•”–—“‰pXPLJJIILNNOPQV_fmvŠ‹Œ‹Œ‹ŽŒ‰†|unic]YTPMNNNMMJFCC=60./.-+%
%4J^ozƒ‹ŽŽŽ‘’’‘’’‘‘’‘””“–––––”‘””’”””–™˜—–•–•–––™˜——–˜›˜–——˜˜—••™›š™š˜—™›ššœž›™šœœœœž››››œžžžœŸ¡ŸœŸ ¡¢£¡ŸŸ¡¢¤££¢£££¥¨¦¥¦¦§©¨¦¥¥¥¤¦¡¦§¨«©¥¤¤¥¦¦¦§¥¥¤¦¨©ª¬­«¨¬¬©¥©««¬««««ª¦¨§¨©¬¯¬¨¨¨­¯±±°­®®]\YYZZ\\\\[[\[\\]]]]]\]^^\]]^]]]]]]^]]\Z^^___]]]__^\__\\^\\[[Y\YL8&	
 ""#"%''&$"!  "%&((*)(*PwŒ— ¤šƒyxz{…†Ž˜››–…wl\]^_aaaca`Z`d]GO^inzyfa\cjt}oTJ<JU[][UOEC@BGKNZbb][XWWZV[ZYY[]bfghbZPEJJOPZdlptyywvotx|}}{ywxy‚†ˆ‰ŠŠŠŒ„’’’““˜›•‡jNMKKJIILLLLLLQPSU\ev‚ƒ…†ˆ‹Œ‹„ŠŠ‡…{xpid`VTQQQSQOHGC;/,)*,022.+!
4BUdr}„‡‹Š’’“’ŠŽ‘‘‘‘‘”–—”“–“““–‘Ž”‘•—˜˜—“—•—˜—””•˜—›™‘˜™˜˜—”—š›–˜–––˜›™–š›š–—˜œ™œ™œššœ Ÿ˜žŸ¡ŸŸ™ ž¢ž¡˜Ÿ ¤¤¤££¢£ž¤££§§¦§§£¡ ¥¤¥ ¥£§¤©§¦¤¥¥§¦¦¦¥¥¥¤©§¬­ª¦¬«ª¥©¨¬¬«ª­­«¤¤¥ª«¬«®©©§«­°°¯­®¯]\ZZZ[[[[[[[[\Y\Y]\[\\^`_]]^^^]\]^^^\\\\\]^_^``_^__^``[\]]]]\\ZSB,		!%%##%&&&%#"""  #&))(('<cv}}–”vx{€ƒ‡Œ”•“…{phcbabcdecb`_^acNTeny€ynaXX[bkg^N:?OW[ZVOEGHKPSU\ccba``_\^_]YUTTTY[\XRJGIKNP]gouvz||xtvz~€€{}{|~€ƒ‡ˆŒŒ‡…‡ŠŒŽ’‘Ž’™œ”‚cROKLMLKKKJKIJNONNLQZcinswzƒˆ‡ƒˆŠ‰ˆˆ‡ƒ~xrold^[ZVSPNKF;-*'(((.36:<:9/#

!6HZixˆŽ‘’’“‘‘’’‘’‘“•–”‘”••—˜–”““”———––—™™š˜––—™˜—š™˜—šš™˜—˜šš™™››››™™™—™™™š›››œœœœœœžžŸ ¡  Ÿ¡¡¡Ÿ  ¡¤¤¢¡¡¢£¤£¢£¥¥¥¡£¥¦¥¤¥¤¥¥¤¤¦§¨¨¦¦¦¦¦§§¦§§¦¤¨ªª«©©ª««ª©«¬¬ª©­¯¬¨¨©«­¬­­¬«««¯¯¯­«­¯\YZ[Z[ZY\]^\]]\\]][Z\\]`_Y\]^^\[]]]^\Y]\]]__`aa_`__``_]\]^^^]\UI8!
+				 "$%$"  ')&#"!%%$#$%%##""""#'('&7OZao…Œ~yw|€‚„‹ŒŠ…{tjd^dbbcffdcb\ZSXXalsyyupkf\SCOTZXK:?JTTUWSI\dhi_U^acbbacddeffaVYJTQUSPFDDHIKN]gmmv{€}vy{}~~}~…‚‡‰Ž‹‡ˆ‡ŒŽ‘‡Œ‘—›}_NOKLMMMKEKJIINOMKLJPSUV[_bflrtux|„…ƒ€}vxyskhc_RONKF:,)%&$$%2:BFMTWP?&
%>O]lz†‹Š‘‘‘’’“’’“’”•”””••”—”–’‘‘•–—”˜”™˜™™™˜—˜š™š›››™–˜™—”–˜™™œ™™™™œ›š™šœ››œœ˜™šŸœœšš›ŸŸ  ™ ¡Ÿ ¡žž ¢¡£ŸŸŸ¢Ÿ¤¢£Ÿ¦¥¥¦¤¡¤£¦§¨¦¨¥£¢¦¥§¨¦¥¥¢¥¥§¦©ª©¤¨§¨¨«ªª¨ªªª«¬««©¬¦ªªª§©«¬§®©¬««®®¬¬ª«­[[Z[[[XX\^^^^]\]^][[[\\`_]]]]\[\\\]^]^^]^``__``a`^^``]\]\_`_][N<'						
+"$%&'(())'$! &*&""# "$&((&'&$#"$&&'3DNQZt~}~|~†ˆ‰ˆ„}tkfccfgfegeeeb\XTZakrutogaaeeS=DLNLC:>HPUVWVh‚— •ƒnddcb^\`fhhjnlia[VUTPJDBEGHKNZdjpw}€€~€|}‚†‰ŒŒ‹Œ’Œ‹Š‰‰‹Œ‡Š”™v[MNMMMMNLJKLLKMOMKJIJJMNMMNQSUX[aiotwzz{{{{}{ttqi_UOKD9,(('''*5BHMS\fieO@4$



$?Thu‡‘“’’‘’’‘”•”“““•–””•—–””–—˜—–—–˜™˜™—–˜˜™™š››š˜”˜™—•™››œ›™›››š››œ››žœ–šžžžœœŸžžžžž¢£ Ÿ  ¡  ¡££¡¡¡¢¤¤¦§¦£¨¨¥¤¥§¨©«ª§¤¢¤¥¦§¦¥££¥¦¦¦ª¬ª§§¦¨¨ª¬«««ª©©«­«¨¨§¨«««¬¬«¬¬¬ª¨©¬¯¯¬¬­®[[ZZ[ZZ[_^]^^\][]]\\[\]__^^\\\\\\[^]^^_]^^^]^____^^_^]]_`ba_[UF- 	#'***((),-,+*$&'&! #"""%(*++*(&## )-9EH@O^ov{ƒ„€}vke`bafhhfhbffb^THUdnsoldSKF]iZ>?A@>8.;BIPUXjˆ¥¹¾¹£…i^`_]\aegdjmuywtj`WLKBCEIKLOU^fmtz{{|}€€t}~…‰Ž’‘Œ‘“‘Š‰ŠŠŠŠ‹‡‰‹–—‡mXLMLLMNNMILNMLNONHKJJFMNMLKNNLNPPQX]_bfjuvyutt|ytjbWUG?-,,+*+-<HMOSTaf`ZTOI@4 

+

"2JYjx€†ŠŽŽ’“’’•“““”•––•‘”‘—––—˜•—“”•˜“–’”“•–••˜”••••™›—™›–•–›˜˜™›œ››œœ˜œœ›œ–œ™šš˜žžžž›žž £¤£   œœ›¢¢¡Ÿ¡ž¡ ¥¤¦§§¦¨¨¦¥¨¡¨ª«§¦¡¥¤§§§ ¤¤¦§§§ª¬©¦§§§§¦¦«ªª¥¨¦¨©©©¦£¨©««««¬«¬§ª§¨ª¯®¬­¯©[[ZXWZ\]_]\\]]\]]]]\[\]^__]\[]]]Y\^___^^^_^^[[Z^^^^^]\]_ab_\WL:&"%)-.,)((,./000.)(&$""$&$!$),-.+)('&%*6=DC@FYe|‚ƒ~~€|xutoe``a`ehijhgffb]PEQgprmf[L;=Sk_E6421146;AJPYv¸ÆÌȶ–o]ZZ[^`bdfjoy€…†~n^RMGDFJMNMKV^fmsuxz}€„Š’“’‹‘““”’‘ŽŽ’Ž‘••cOJKKKMMNMMMNMMMNNOMMLMNOMKLMLIIHHJKKJPVgsz|~ƒ…~xsme[K=61.-/5@LQTVY[YXWV[^]RH</

+:O^mz„ŠŽ’”’“”””“”••—–”“•––•••–—•–˜—–•–”“•––—˜—˜˜—–šš—™š™˜™™™˜™š™ššœœ›œœ›šœžšœœ›œžžœŸŸœž ¢¥¤¡ ££Ÿ›¡¢¢¡¢¢¢¤¥£¤¦§¤£§§¨¨©¨ªª¨¦¥¦¨¦§§§¥¥¨¨¨¨ª¬©¦©¬«¬¨¤©©©¨§¦§¨©ª§§¨¨¨©©¨ª¬¬¬¬««¬­­«®¯¯[Z[YW[]\ZY\[\[]]]]\\\^^Y]^^^^^^]]]_\_]^^^``]\[\]^]\Y^^^^_[YXO@.		 %'*/10/,),/1223441.)'&#'*(###*.1-+++*)'*8?B>;K_p„‚„…‚{shiig_``aaeghiheffb_RAUioood`NF;XifVI=:77799=BHPqš²ÂÈÆ¸uUUVWY^^`dhotx~ƒq]XRJHGHIMLOSXZciloty{|€‚„‡Š‹Œ‘’Œ”•““”‘””“‘““•‘“”}ZOHKJJIMNMMMLMMNLOPPONLOONHMNLJIHHHHCJMWlz…ˆŠŠ‹Œ†ƒzqeTC?8406:HRSVXZ[XWUWY``_\WOC1%
+*:Q`o{„ŒŽ“’”””“•••”””–“—•””˜–•–—•••—”””˜™™——˜™™ššš—™šš˜š›š—›™™˜›œœ›š™™šžžŸ™›š›Ÿžœ¡ž ¢£¢ ¡¤¥£¡  ž£¤¢¢¦¢¢Ÿ¦¥¥¦§¤¥¥¥¦ª¥¥¤¨¡¡¡§¦¦¥¦§©ªªªª©ª©­£ª¥§¨¨¨§§§§©¦§©¨¨©ªª¥§¨««­­¬¬­§«¨®­XYWZX\][[\\]]]\]]]\\]__]\\]___\\^_^____^]__^]]]]]]Y[__^_^[XSF2 			%+/14530.-.35567678972)(*-.+(&+1451,-,*(+8?A:9Net}€…ˆƒ{mc^^__^_bddeghfddggdXOYkoqssj^U[fjlxyp^N<;:99=FTjŒž±º¼µ{URUWY[\^adhkklqrj]\UNLKMNLMRTUUX\`cjquy}€€ƒ‡‹‹‹Ž‘“•••“””‘–˜—™™™›š™™š•zWNIKJJILMJKLNPQPNPQQPNMNONMLLKLJIHFFHKPYrŒ‘’Š†…wiWJGFBABKU[]\Z]]][[\^_a`ba^ZQIA/!


1DVhyƒŒ‘’“““”““””“–šš——–——˜™˜•—˜–”–˜˜š™˜˜™œžœœœœš™™™››œœ›šš™šœž›œ›ššœŸžžžžœžžž ¡žŸž ¢¢ Ÿ¢¤¤¤¤¢ Ÿ¢¤£¢¢¥¥¡¤¨¦¨¨¨¨§¦©¨§¦¥§¦¥¦¥¥¦¦¨¨ªªª©¬®¬ªª«««¨©ª¨ª«««ª©ª¬«ªª«ªªªª©ª­­¬­¬¬­®­®XYZ[Z\\X[]]Z]]\]]Y\]\]__]]\\\]\[]]]\___^]]^^^]^^__^^_^]_^\UK;"
				
+!)0465420/.3788:;;;=?CA;544AB6*-2684..-+',3>B;1Jfupz{}|th^WQV[^]aeebffgdhihg_Tblpqz{tgfouip‹ŠlO:::>CT]j}Œ™ ¥¤–xUQRWXXXXY]_^[[Z]`_^WNOMPOOOVVWRWWVS]cglptz{ƒˆŠŠ‹Œ““”••–—“—š›œž ¡ž—xSOJLJJIMMLIMOQRRQQRRONLNLOKKHKLLJIEHKPUex†‘‹ˆ‡†…„ƒxiVIJJIIOYdljfdcca^\^`bdc``YVUZWND:&"=O`n{„Š’“••””““•˜™–—“•”˜™—–™˜—”–—š—š™™“œœš•œš™•™™™šžžœ—›˜–•šš›™˜˜›œ›šŸžŸ—š  ¡¡¢¢ž¡  ¢£¢££¡£¤¥§¤££¦¡ Ÿ¤¢¦¨¨¦¨¥§¨¨¡¢¤¨§¨¢¦¦§§©¨¨¨ªª¬­«ª©ª­®¬¬¬§ª«¬¬«ª«¨­¦«ª«ª«««¬®­«ª«©®¯®¨W[\][\YY[\\\]^Z\\[\\\^`_^^\Z]_^]\Y[^_^^]__]][^`_]a`__^]^^[Q@+
		
+%.46732///27:;:===<=AHWYSJR]dU>.059731.+'(0<D>8Ghx}}~}{olbWNOW`]Y_dfhgghijjihdaflqy~€yqmr{mf”­´¤€X;:>I\ejltˆ††Š„qSOQUXUSUWVUPKIKOU[]WOOOQQSVY[[\ZUQMLSW[`gnv}ƒ†ˆŒŽ’“–™š™›¡££¡ŸŸŸ –xTQKMNMMNONMNNPQRSPPQNOQPPOLKKLLLKKKJLQUlŒ“””‘ˆ……†„vfVKKJJKUapyzyrmhb\Z[^beec`]ZZ]_]ZWM@4$(@Rcr€‰””””””“””•–••–””””—˜—––™™™š›™—š›™™››——˜™™œš››œžœœœ›ž›œœŸ ŸŸž¡¡   ¡£¢¢¢¡¡¢¢£¢¢¡¥¦§§¨¦¦¥¦¥§¤¡¤¥¦¦¨¥§ª¨£¤§¨©¨§¨ªª¦¨¨§¨©««ª©«ªª­­¬­«ªª«­«¨¬­¯¬ª«¬«ªª¬¬­°°®¬©¨¬®­ªZ\\\[[YW[[\]]]\[]]\\\^_^]\[Z[]^]\Z[]^_^^`_^]^^``_____^^_]YK6%		'/46640.//37:::>>=:<>SekkilsyiN4*28974/+%'):FC9Nqƒ†ˆŒ‹†}ndWTR]c_X\bdghgheifgddcgju}‚}wqkus{•«´£U@GLXglmjmprlhtrjRMLPSRLRRLBBAF@BFSXVPPNRQVYXX[_`ZTIIJQQSVafntyƒˆ‡…ŠŒŽ‘˜™š˜œ¡¤ž¡™   ”rTRLNNONPPOMLKNOSSQNQNQSRPNLKJLLKJLLLMQVt‹’–••’ŽŠ„„ƒzt]RKLCJJUes~ƒ~xpcaVZT[_a``]\[\]^Z^]VME=0"
 +EUdtˆ’’‘”•“‘—˜˜˜–’‘‘––——™›š˜›œ–›™›œ›™—”–˜œ›žŸœ–Ÿžžšš›žžžžŸ  žœ¡¢¢   ›¡£¢¡¡¡¡ž£¤¤£¦§¥¤¦¡¦£§¥¦¢¢¢¦¨§¥¥¦© §¨§¤©ª¬¬«¥¥¤¤¥©«ªªªªªª¬­¬««©««¬£ª®®­­¥«§¬«¬ª«¬®ª°ª©©ª«­§[\Z[[ZZ[[[\^]\[[\\\]\\\\\]\Z[]^]\]]]\___`_^___`a`]\____^[TC,

+"'.1331.-.0449:=>>=<=H\krvx{~}nV:+.57861+&')8GGGSy‹Ž‘“„vhYX_cgaWZ_dffeeiieefedeiv}€|uooq}”¦«›xOMQT\fjkinsrmmpphYKJJNOPOMA@ACDDBBIRUUSSRRX\YUYafg]RJKNRRRVXYciov}€‚…ŠŽ‘”•—˜šŸ£¤¢ ¢¥ŸmTRONOOPQQOMLLNORTTTRORSRQNLKLMLKIMPNNU_}“˜™““‘ˆˆ‰‰ƒ~r^OMKKLOWfv€…Ї~xqkgaZRW]`]\[\^``aa`^XUTUKA5!-FYk{ˆŽ”•““—š™™—””•——˜™œž›™šœœžœ™›ŸžŸœ™—”™œœšžžœœžŸžžžžžŸ Ÿžž¡ž ¡   žœŸŸ £££¤¤¢ ¢¦¥¡¥§¦¢¥§¥¢¦¨§§¤¢¥¦¦¤¦¨©«©¨§¦¨¬­­ª©©¨¨¨©ªª«ª©©©ª¬«ª«¬«¬«ª«­¬ª«­¬ª«¬¬«¬¬­®¯°­¨©«­®ZZZZ[\\]\[\\]Z]\[X\^^\^___^]^^^^^__^^_`^`^_a`\_``]^_`__]VJ7
+$%)*++*)+-2589:;><><>L`lpuy{xncT>(*/2551*$&(5EJGU|Ž’†{lY\`fibVXYdgfegjjfghgachu{|}~|xniZs›ž‹gKNSTVUa_ipuvsqpoi^RFIMTRRQNKJHKKICEKSYYWVU[ZWU]cikc[URSVVQWTXYY[ejrx}‡ŒŽ“”šœŸ ¡ ¢¤™‡fVTQONPNQQOKLLOORTUTSORTTSQNMLLKKJOQOKZj…˜››—’‘‹ˆ‰‡„s_PMKHOS_j{ƒˆŽ‡|xsppke^S`_VMSW__abb][VVUZ^\SE6-&6Pcrˆ‘“—–˜”–•••˜——š˜—–—–™›ž——™–˜˜š›œ›šš›œ˜Ÿ œ››œŸ˜Ÿ  Ÿ¡žŸžœ  ¡¢¡ ¤¥¤Ÿ ¡¥¡¤¦¥¤¦§¥¡¥¦§¡¤¢¢£¦¥¤£¨©ª§§¢§¢¬«ªª«©©¨©¥¦¦¬­«¤¥¥¬­­©«©«©ªª«¦ª««¦«©¬¬®®®®¯¬­¦ª­­­ZZVZ[\^^[]^^_^^][Z\^^\^`aa]__`^^^`]^__`a``aa``______^^]ZN;%	 $$%%%$$%*/3678:;=?><@ObknxzyujWN>+&(,00-&$#%1FKJWzŒŽ‡}n\]ejkcYXYcjihgghgikifberz}~~{reVbŒ{]GKPSW_dgjostsplkkdXGIXaehhhhaYSPLFDEP[^`]]]ZTYagikg^ZUTY[][ZXVVWV\bjou|„‰Œ‘•—˜••˜œŸ “`SSSQQQPPOMMLMNOORRSROQUUTQQOONKMNOQRR_w‹˜šš˜˜•‘Š‡…‚€q\PKIHPUetˆŒŽ…xrppqojhdb\MHMZ_`^__^ZWVWZ`ed\TJC9-
3FZl{†Ž’“•’”•–˜—––™›˜–˜˜—˜œ›››ž–œžšœžœœœ›œœžœŸžŸŸŸŸž  Ÿ  ¡¢¡¡¡Ÿž ¡¡¡ ¡¢£¤¥£££¤¥§¦¥§§¥¤¦§¨¥£¤¤¦§§¤¢¦¨¦¥§©©ª¬¬©ªªªª©ª©©«¬®¬©§©­¯®««¬«ªªª«¬­­«««¬­¯¯°®®®«ª¨ª®®®[[\\\]^]^^_^__^\[[\\_]^\_`_]_`_]^__^^^ab``````__^]^^_^ZSD*$&$##$!! (/233478=@>:>Qcgowy||qbJA/)$&('%$""$8LNGRq„ŽŽ‹Šƒzpalyvpe\WV_efefbdcgihecdow{|€vfU_s|u`RGLVl€†ˆ…|xupjhijh^M[iu||{{|ysi`\OJ=O\beb]bb``gmmle\[VY\]^^^ZYZZYY[\]aiqz‚ˆŒ…{ƒ•›Žv_NQPRQPNPLJJLHMLOQQQQNQTURSRQQOJMNOQTWd|Ž˜˜’——”‹Œ…ˆ~}{mVRMJEPSfw‰‹Œ‚mf`ggfegf^RPLW`aYXWZ\\YXY]`efbZZYSJ@3(
%=K]lw‚А‘”––˜–˜—š˜šš˜˜™œ•žžžœ˜žŸ›œœœžžž ™š  œ Ÿ¢¡   ¢£ ¡¡ œ¡££¡œ¡¥§¥¢£¤¨¨¦£¥¥¤¤§©©§¥¦§§©££¢¦¦¦¦§¨«­®¬ª©©¦ª©«««§ª¦««ªª¬®®ªª§¨¨¬¬­©¯¯­¬¬¦¯®°ª«¨®­«¢©¬­¬Y]^^\]]^^^[_`^]]\\^_`a`__`^]^_``_^_^]^aca`^_``^`_]]__^VJ9"				&)+.1/)#"&+-./137:><7<Qenqwy|p[E2+$"!!!!!%<QOFMfz„ˆ‹‰†€xpl|“™zjXTX^addabbfhgfcelsy|ƒ€wgU\jpqpl[FAPt‘›™”‹|ma_eiga`m}…‰‡ƒƒ„…†„sfTEO\dhecdedcimmiaZ[Z[^^]dd[[bfeb\YVWZ`fpw~€~pfew‰•ˆq^QPPRPQPONMKLMMMNPQPOOQTTSRRQPOONMNQSWi}›˜‘””ŠŠ‰‡‡‚yiTQMJINQdxƒˆ‰ˆt`\[ZY[^^TPU[`ca^[XUY\\[[^bfgc```_][[bJ7)
":K\o‰•–—™˜˜šœ››™™šœœ›œžœžŸœžŸžžŸŸŸœ›œž›Ÿ¡¡¢¡Ÿž ¡¢¢¢¡  ž£¤¢¡¡£¤¦¤¡¤§¨¨§£¤¤¥¤¥¨©¨¨¨ª«ª¨§§¨©««©¨©­­«ªª¨§¨©«®««©¦¨«®®¬¬­¬©¦¬¯­¬¬­­­¬¬¬®¯°®¬ª«­¯¬¨ª­°­[]^_^\\]^]^``__`^]]]`bbaaa]^^___^_`^_`a\`b`]^_``_]\Z][O@-			"5?GJLMOKC7)($'(*,/158639Meoqqvy{|oZD3,%#"';NN>H_ov{‚{vpnª³­†vXWX]\\[^cffd_][gnuz~€}ueWY`b_gkdPLLm…‘—–—~fRW^bccfw…ˆˆƒ~yt{ƒ……xjWFQY`ddcc\`_\Y[ZVVY]]^^_ii^\flkkga\XWY\]_cilbW]d€k]POPROPQOLLLOONKNOOPQQSSTNRPQPONNNOQSUg‚’›™‘’ŠŽ‹‹†‡„„weQNIHGLQg|‡‡ˆ‰‰~p^_VSQPNRS`fd^^_^[ZYaa^V^acdcba[\\ahh`QD9(
&BTdr€Œ”””™™˜—™”›››™šœ˜œšž›žŸŸž˜›”Ÿ ž™œ˜™ššš ¡¢ž¢šžŸž¢¢¡žŸŸ¢¡¡¡¡ ¢¢¡ ¡¢§¨§£¦¥¦¦¥¥©©¨§©ª©§¨©©««¬«§¨¤¬¨«¬ª£¨¦ª©¬«©§¨«®®¬¦«­¬¦®¯­«ª«¬¥«ª¬«¬¬­««¬®­®©­­°¯\]^^]ZY[\_____`a`_^\]ba```^^]__^\`aa`a`]_b`\^_``^]Z[ZVH4
			
+
3O^dfefjg_P@-(''&)+-15316E]jklkkkj`Q@7/&# #(9LMBC[gjluxyvrp ¸¿½¶«™{f]ZXVU[bde_YU]cjpuy|ypbUPTVX^eijc^at~„†Š‡|]QP]_^`gr~~yqmjkv{{qeWORW[]`ca[ZTD@BBDNYabcejnj`\gmoqpmhc`^\YYY\^USW`y‰|d[QPQPOPPNLMNQRPNPRSRSRSTSQPPNONMMNPRSSf†–™—’Ž‹Šƒs`NKHFFLRl‚Œ‘‘“Š~rjf_UJFSakobZY^_\]aglga`bcbbb``_\aeea\WRMD9.#(CXm{…Œ’–—––˜œšššš–š››œž™   ž›œž žšœŸ žž¡£¢¢ œŸ¡¢£¡ £¡ ¡¡¤£¤¥£¡¤§§¦¦¥¥¦§¦¥¦¨«ª¥§¨¦¦§©«¬««¬­ªªª¨«¬«©ª¬ª§ª¨©ªª¬­¬«ª©¬­®­®­ª«­¬ªª«ª©¬«««¬®¯¯®®­®°±\]^][ZZ[\]^__]_]``^\_a`\^]____`___```a`^^_`]___`__^\VN>'
+		
+=\nwwrrswsj]L70(''+,020(/;OZXTQNOOMKA5-$#  !%(:LNGKZddgijmkgpŒ«»Àþ®‘mY\ZXW[^__\V_efgnnqusk_PRJKJQXfrspljihjlsvpd]ZXS_gimspicegghfb\PQLSVYV_b`\WIIIE@@AO\cfjooj`_hmorqpmifb^ZYQVWRJS`y‡x_YSQMQOQQNKMORSROTWVUSQRTSPPPPNMMMMQQRTl‡—žœ˜•Ž’Ž‚p_EKFEFOUp†”•’’‘†zrkbWNEUdpugPSSVX\bmurmkii`ca`_`\`__[[V[XSMD;2(
$5N\jy†‘’™œ›šœœš–ššš›š—š›žœŸžŸ¡ œž¡£šŸœ¢££ž¡œŸŸ  ¢££¡¤¢Ÿ¡¡¦¥¥¥¥¢¤¦¦¥¥Ÿ¤ §£¡¡¨««¥§¨¨¦§ª«¨§§¬¬«¦ª¨§¦«¨«¬©¤¦¨«­ª§­«¬««¬¬¬®©ªª¬«¬««««¨©ª«¤«­¯¯¯¬¯«°¯\][[\\[\\\\`_^^___^\^a`\\]`a_`__``^]^_`_^__^_____a_[RC/"			
+*C^r}~}}€~wgR;0)'*00.+&'3BGA;657>BE;/&$"!&*)(();JMIMW`dedbcaarš±¼ÂÆÅĸŸu[]``a`^_\[^elmkkiglli\]^YNJGQ^t€‚ztmgZWZiqh^UPQ`nqtoh^dmrpkaXOPQRSVX[gssiTXbjaR>9>Q`kmpoh`djnpqqroigd`_\XUSOJPaz„uZTRRQQSRPOOOPSTTWZZYVSQRSRPPPPONMMMPPPYq‹™ ™–•““•••‘‚m\NKFEGR[tˆ–•’“’‰{rh]VPFPdsypcOJLPVdr|{yxvrnjgd`_[_^\YZ[YVQKHCRQ=



"5Mas€‹•››šœœšš›šš˜˜™šššžžžŸ  ¢¡ŸŸ ¢¢¢¡¡  ¡ ¢¤¢¢¡¢¡Ÿ  ¦¦¦§§¢£¤¤¤££¤§¦£¢¢¦©©¥§©¨¦¨ªª©¨¨©«©¨«®«©ª«««¨¥¨«¬­ª©¬®­¬­­­­¬ª«««¬­¬¬««©¬®«¨ª­¯°¯°¯®¬¬]\\\^_^^][^``\]Y___]]]`]^^`aa`^_``_^^^^]]^^]^^^]^`]XK6'2GWmt{|ƒ„‡ˆ„udP;0$)-/,(!'/;?7.,*-124-%$"!!'-0,,+=HGEKT[cffc`^[¤·¿ÅÆÆÃ¿­‹a^^^\WUTSV\ekkiiijjqrxzn_VWWam„Œ~zwo`^VZ\SKKL`nrrj`fnwzwqh[XVVTTUY^q„…{nky…~mS:=C\joqpbekptssuwrigeddb]YRNHPby‚nUSRRQQRQLNOQSY^`defcZWRSPQLPPPKNKLMPPU\uŽš œ–•””””••ށl\OLGHIXczŠ‘—–Šuk\YVPDMas{xo]EMLYgt||yxxwvrkjbb\a^]YZ[WLM<;>RcH%



+*<Tfw„Œ—™š™›•›šœœ›˜™šž˜ ŸžžžŸ  œŸ £¤£Ÿ¢¡£¡£££žŸž¡ŸŸž¤¥¥¦¨¡£¤¥¤¤¡¤¤¦¥¤¤§£¥§¦¦§§§¥¨ª©£¤¨§¥¬®­§¨¨¬¥ª¨ª­­¨«ª­­­­­©©ª©£«ª«­°ªªªªª®¬¬¨ª«®¯®­¯¨¦¦]\]_```_][]a`]\[^``_^^__^^^`___``_[\\]]]^__^^_^\Y_[RA,
+			
(<KZjtv|€‚ƒ‡‰…|n]K:,&)++'$'/9;0,)(#*'+$$#!!!"+1559AGC?BNW_cc`[ZjŒ­½ÃÆÆÅÇż£ƒe`ZQFBAEOYaggfilmmz‰•œ”mcbecd~”Ÿ–ŒƒxlaTPD@EK^nomgenx|}zwrnhd_VRQU\p†Š‚ys…Žƒc=5EZipuqii~ŠŽ…tledfihd\SMJQfy|dSSSRRRRPNMNNTbrywvwsj^WSPQRSRPONMNPPQW_y›ž˜–—˜—”’“‘Šl[ONMMQ]oŒ–•“„wjb]ZUNJKat~}wj\VU]htzzwtuxywupkhhf`^[Z]YSKA86@PB 

+	.DYk~Š’–™ššššžœŸ ŸŸžžŸ¡Ÿœœž¡  ¡£¤¤£¡¡¢¤£££¤ ž žŸ¢¦§¨¦£¢£¤¤¤¥¥£¥§¦¨©¨¦©¨§¨«©¦£ªª©ª©¦¨¬®¬«ª¬«ª¬®¬¯­««­¯¯®­ª¨ª©§¨««¬°±¯­«©«­ªª¬«¬­®¬­®­©ª[Z]]^^_^^\^`a_]\^`ba__``_^ab`^^^^^^_^^___`^[\]\\]]VH6 
					1ER^jsx|€„ƒƒ}yqcTD0*&)(%$,59642100.-*&#!""$%/8?CGJD7;EOVY[YVZq˜´¿ÃÅÇÄÇÉÆ¹¤‹ldPI=??KQY]_bdgiky’¡§œ|jifhev‹ž©¢˜Œ„|riYUCCCS^_^]amvxy{~}vjeZOHFHH[lpomn|€‰„e??K]jouuo‡Ÿ®µ¶µ¯¡‹qkcjonh\OKBUnzw`SSRRRRRQPONPR^€‘•Ž‹†}mYUPRSSSQQQOPQQPYa}“šš—’šš›’‘‘ˆ|kZNNKKL]q‚Ž”—–•q]`_[OMMZgv~yshc\ejvyzusnvxyzumprpd`]\][VOE<1;D4
+
+	
+
+
 <MhwŠ’—˜šš™œžŸžœœ› œœ›œœ› œ ž¢¢¢¢¡ ¢¤¢Ÿ¤¤£ž£Ÿ ¡£¦§£¦¢¤£¤¢¥§§££¢¦§©§©©©¥©ªª§¦¢©§©ª¨¨«©­ªªª¬¥®¯°°­©ª©¯®¯««ª«¥ª«®¬®®°°®«ª«®§­«¬¦¬®­¦°®­«Z\\\Z]^__`_``_]\_abbabba_^bd]__^__`aa````_Z\\^^^]ZN;%
+
+
+
+						
+
+&9LW]isz}†ƒ~wwwsfYL8.&&%#!$,3569:9961+'# ""$%*8AGKMD83=FPVWUSZ|¢¹¿ÂÆÈÅÇÈÉÆ½ª•pVIBCGLQUWZ]_bgu‘ ¡šŽrpponnvŠ—™“‹…„ƒ~yreNEENPRRYfmjqw|rf^J?7<?@ANVY^gpy}{`==O^intvŠ¥¾ÈÌÎÎɼ¤Švnosqi\OICYt{r\RRQRSRQPQPPQQ[~œ©¥”ˆwbUQRRRRPRSSRQQS\h€”šš˜™ žœ˜—’‰zfWMLKJI[p„“˜˜˜”Œ€idb^YRR[dlx€ysooqux{zxuqswz{xpvyvsmh`^\XRKA9;@.


+
+
+
#6HVgy‡”––ššœŸŸ¡ ››œ›œž    Ÿ¡¡¢¤£¢£¤¡ž¢¤¢¢¤¥¥¢¦§¦£¦§¥¥¦¤¦§¦¦¥¥¦§¨©©ª©©©©©§¨¨§¨«­©§ªª­¬¬¬¬¬°±°°­¬««®°®¯®¯¬«¬¯®¬­­­¯­ª¬¯¯¯¯­®­­°¯¯±²­ª[]]]^]^__````]\\___`aba``_aa``a``___`aa``]^__^]]ZTE.!						,<NW\hszy~‚|yutoeZO?/$# $%,1369;70*"" !"$%.5<AJME;:<FOQQONZ€¥¼¿ÀÄÇÇÆÆÄÊÆ½²¦™‡o^JKKNHNMQRSTf{††yvsrpmhd_t€€~xry~€‚„€rcXDCCKS]bfkqto`deV:88889<HNU[`fggV=DKZcmv{˜¶ÉÍÐÓÖÔ˳˜€ptupg[OJE_yykYORQSPPNOQQRRPWgˆ §¤™ˆvcSNQPQRQRSSSPRV_n‚•š›š— žœ›–’ŠwZQGKIKK_rˆ—™–‘Œ‹ƒwoh\YUakno|ƒ…„~usty}|}{yxtuuwwvpwyxutqlcaZUME<EC+

+
+
+
+
+
+
+
)GYhwŠ“šœžŸ ›š™›™Ÿ žž ¡Ÿž¢££  ¡ Ÿ  ¢¡£¥¤¡§¨§¡§§¦¤§¦¥¦¦¦¦¦§¨§¤©¤©¨ª¤©§ª§¦¥«¬ª¥«¨­­¬«¬®±®¯®­©¬­­«¬¦®­­©¨¨­­®§¬«®¬«¬°¯°®°«­ª°°±®­¦\\]]]]^`___aa`^]^^]]____aa`^^```^^_^^```````_^\[VL:&			#0?NX^hrwwy|}|ytpibZQD0!  ""%'-262+! !"#'*-036?IMF:9=HPQOOQYr¡·¾À¼ÄÄÄÇÊÊÇÃÀ¿º¯›~dVTNLKKIHEEI\db`bhvurjd`cn~{rkkiqs|„‹Š‚nU<;DLU[bijh`cjulYG:9766AJNNJQRSQOMMV`lw€™µÅËÏÓÔÓʶš‡{wunbWOKGc|xcURQRSTQPOORTRPT\oŸ–ˆp]QLOPPQQRRTSQSV`o„“™œ› Ÿœœ›š”ŠtYOGIJLPdwŒš™‘ŒŠˆ…~tl]X^nz{{~…Šˆwqt|‚ƒ‚}yyywtuvtsvxz|{ytof`XPGDKF(

+
+
+	
+
+
+
+
-G\q„–™›œ›žžžœžžžŸ¡£¡Ÿ¡¢¢¡¡££££¡¢¡¢¥¤¡¥¨¦¤¥§¦¥¦¦¤¤§©§¦¤§§¥¨©¨¨§©¨§©§¨©©©ª­«¨¬¯®«ª«­­¬«¬­¬­¬¬¬«¬¬«¬ªª­¯®¬­¯°­««®®®°®«¬®®¯®«­¯]]\]]X^^^Z___`^[^]\\^__```___^___]``_^``a`a`_^][QA-						)0=NX_empqtvvusqld^VPE1  !""#$(,*" !#$&*/32.4>IME88=IPRQONS^„¦·½¿ÃÄÃÉËÊÄÃÅÇÆÁ´š~hTPOPOKID9DBOISYjvunjbdhz|udknnputz‚†‡v_H:FGUWadcbv€ˆ…uZ>:434@IMOMMTWXXVNVWgqxŠ¥»ÇÊÐÏÉ¿­—ƒwusmaZMNKf|x^WQOOSSPQPNQSRQSViƒŒŠ}m]IMLOOPQRQRPURSP_p„‘”—›ž  š“››—‹tWPGICNSj~™–‰„„ƒ|sk[\gz†‚vyˆŠ‚yrn{ƒ„„€uyzxtuvutww|{{yvmje]SIDND$
+
+
+	
+		
+
+
+

1?Tdq~‹–š™œŸšž ¡¤£Ÿ¢Ÿ¢¢¢££Ÿ¤¡£¡£¦¥££¤¥ŸŸ¡¦¤¥£¥¡§¨¥¥¦¦§¤¨¨§¢£¥©©©§«ª¨¦©¬¬§«­¬¥¤¤©ªª¤®­­«­«¯­¬¨¨ª©©®°¯ª®±±­¬¬«ª­©®­®­¯««¬®­]^\^_^^^]]]\]]\\_`^]_```_^]_`__`aa``````aaa`_^\XJ4
+		$/5<MW^bghkmnnkkmicZRMD2    !    $"! !#$&+152/4@HKD86;IQSTOKHNd‹¦·¾ÄÈÉÉÉÆÄÅÉÉÇÆ¿®–wWKOPNLIDBBFKLNUfoogiqu|~sghovxyxrsuwzp\KFJSY^][[sŠšžŸ—‡f>7226BINRRTWYZ[[YVZdijsŠ­ÃÈȶª›Šzwsplg^TOUj|lYQOOQQOQPPRRSUVWbszr`SHGKNPPNQRQQTVTSO^u…‘”–›  ˜’™—‹qTOMKKOVp†‘•‘І„‚}vog_`u…„tu}…‡zspxƒ„ƒ{{zz{}}{y{{{{ywtpkaTLLMA!

+
+
+		
+
+
+
+
+
+




#5Pg{Š”šœ›™ ¡¡ ¢¢£££££ŸŸŸŸ£¥£¢¥¥¥££££££¤¦¦¥¥¦¦¦¦¤£¦¦¥§¨§¨£¥§¨©©ª¬­«¨§©­°¬ª©©¨¨¨©©«­®­­¯±¯­¬©¬¬«ª¯±¯®¯²°®­­¬ª¬®¯¯®¯°±°¯¯­_]]]_]]\]^]]^]]]_a_]````_]]]````ba_\`a`````^][YQA)		2:>HNZabdddgjjfkjg`WKJD6$""""" !"! !"%+152(5AFGB98;IQRSPKG?Qf®½ÄÅÆÅÃÄÅÆÇž·§—wYIEKNKFFAIMQPQR]b_\et{vdikv{~}vutsnfTKFMVZ[WM_}•££¡˜ˆd94/6:FKMORUVWY[___^ec]U{£»Á¹­œŽ…zxwumkif]_cŠiVSPQRRRQQQORTUSVZXUPEHJNPRRPPQQPSTTUQbyˆ“–—™Ÿ¡œ•š–ˆnQQOMLP[u‹Œ…†ƒ€wnedcm~‹‘†uu|„‚‚zujsyƒ…„ƒ{{{€€€~}x}|}zyxuoeTPMK;

+
+	
+	
+
+
+		
+



+@[n‹’——˜ŸŸŸžŸžž¤¡¢¢¡¡  ¤¤£¢£¤¤£¢¡£¥¥¥¦¢¥¦¦¤¤£¤¤¦Ÿ¥¨©§ª¥§¨¨£©¥ª«ª§¨¤®®«¦¦¨©«ª§ª¨­®®®¯¬®­­©®­¬¬­­­¨¯¯­¨­¯­©¬¯¯ª­¯±²²±°¯^[\`_^]]\_`________^`a]__^^^__`_``__ab____[Z\]VH6'				'?NVX[_bb_\]cgjkjid]ULID:85.)*)$! !!"!!"!$.34315ADE@:8>IQRRPME>CSs¤ºÂÄÿÁÄÆÅÅÀ¸¬œ‹ydN??EKIGEGLPSTRQUXVU`owwohnu|‚ƒ‚~{yuoeZLGMRTTNRe…˜£¤¢—„]956;BHKLMOQORW^bcdfd^SKp®®£”€xtstvtpkipz‰—¦¯­Ÿzmg]UTTSPOOPPPRSRPILJJKNPQSSQPRQPRQUWYg}Š’“–—˜œž›š”…lQQOMMR`|ŽŒ‡…„…ƒ|rhb`etƒ’ˆxv|„‚vkkv„ŒŒ‰†ƒƒ…†‚€}|zzwsj^UTJ4
+
+
+	
+
+	
+
+			
+
+




+
+
+


8Pfv†Ž”šžžžžŸ¡¡¡¡¡¢¢££¤££¤¨§£ ¡£¦¤¦¦¢£¦¥¦§§§¨¨¥¥©ª«ª¦§ªªªªª©§§¨©¬¬ª¨§©©«¬«¬ªª¬®¯¯®¬¬®®¯¯®­®­««¬­¬ª§­®­«ª¬­®®¯±±±±°°]X]a_[\]^`a]````__```a`__^^]___^^^__``_]`^^^_\O=,
+				2L[dedc^]ZXU`ilnlfaZRKF@FLNLIE<0$!! "##"#!*37;94:BD@=:<AIORRPJD<?Ek¸ÂÄÂÁÃÈÊÉÇ¿¯”qaE=763=CC<DFLMQSRNSUUO[ehihfox}~„€{wpeYKJHNSZb|›¢¤¢–‚`??AHONMMJKKNPX_dffeaYOHo™žŠzjb\aemqqikmuŒ£¸¼Ãº¬žŽsbTVTPONOQNPRQONMMNOQSSSSRQSSSSTUVXm‚‹‹Ž’“’•—›š’jRPMMNVfމ‚ƒwgfdgj{‡“–‰zzyz}‚yoor†‘‘‰ˆ†„‚†††…ƒ€€€€z{sxulbZVH-

+
+
+		
+						
+
+
+
+
+
+
+*DXl}†•˜œ˜Ÿ¢¢ ¢££¢¢£Ÿ¥§¨¤¤¥¦¦¥¡¦¢¥§§¦¦¦§¦©¦¥¦ª©©¦§¤«ªªª¨§¦§ª­¬©«¨©©­«ª©ª§¨¨­®¯©­®°¯±¯®®¬«­®­«ª¨®®­«¡–¤­¯¯±¬­®°°][^_][\\]_aa_`^_\^acaa^^^]]]^^]^^```^^__`__`^VE/
+		
+#=Vckllhd\WUT_muxtm_WMGCAKX]^\XI3%!   ""!#$$$%&.;@A?=@DE@<9>FILPSOIC<<Ecš¸ÆÇÆÇÊÊËËȽ§„`D4.121279:?FLNOPOOORSQTYZ]aeouz|„‚€€ƒƒ{reWMFLXn}Š•™œžž•„cNQ_msriUNILNPW]cgebZQJFl“ŽtTGCKP[dlkilpvŠœ¦¯·¾ÁÁÀ±”qTUSRQPPQRQQOOOOOQRQSRSTRRUUUUSTWYq…‹ŒŽ‘Ž‹‹“•–™œ’€hRRPPS[jŽˆƒ‚‚|rgegnx…’––‹zzw~‚€~zvnp†••”‘ŒŠˆŠ‰…ƒ„…„‚}xwtk_YVF&


+
+
+				
+
+	
+
+
+
+
+	
+
+
$2K]oŒ”šžž   ¢£¥£¢££ ¥¦§¦¦§¦¦§©¦¤¥§¨©¨§¥¤ª¬©¨¨©©©©«ª©ª«©¨¨§¨­­¬¬¬©«¬«ª«ª««ªª®¯°¯°¯°°¯±¯ª©«®­«¬­­¬®¬”›ª­¯°¯«®°¯\Z^^]\\]__a`___^^_abba^^]\\]^^^`_`aa```_`\__XK8!
					
+
+-DXemoplbWNRWdq{ƒ‚|oWNB>:JV[_^ZH/# """"#!$&%$&(5BEBABDGD?:6AHJJNNNID=JMi—ºÈÈÈÉÊËÆÈȶšuS<-0220/-/1<GJLLKKKORSPQRUT`dnov|€ƒƒ„„ƒ€xgUG9ERaov|~‚ˆ‹‚mYpƒ›–‹xbXMROW]cfc[VKLEh‡}\K?GKMO[cloqtux€…‹•¢«´¾¹¡oSRPRRPLQSRONNOOPRQOPKMOQRUVWXWRY\t‡ŠŒ‹ˆ‹ŽŽ‘”Ž|dQSSTT^o…Š†‚~vl^hmv~”˜•yyy‚„€zzwrp…•–“’’‘Œ†‹…ƒ‚„„‡„~vwqj\XT@
+
+
+
+								
+
+	
+
+	
+
+
+
+
+
%4Paq~Š“—šžŸ ¡¤¤¤££ ¤¥§¢¢¢¤¤¨ª§¢¢£¨£¨§¦¥ª¬ª¥¦¦ªª©¦«ªª¡¨©ª©©««©¬¬«¬­©¬¬«¦¬¬­«°®°®­©¯®°­«ª«««ª¬¬­¨¬ª¤ ¥«®®¯¯®¯±«\[_a__`_`^``^]^^[^abba^__\\`a``___`aaa`aa`^\P=)				2FWemqsk^MJKXfrŠŒ‹lTB7;JVY]\VD+! "#"#$$$'&$(1<KHBCFIKF<98CIIJOSMFBN]jt¸ÇÈÉËÍÍËËÆ®Š]B3.3410-+(09DGFHKKKNQQNKPU\bimosy~‚~|„„‚€vaK;8=EINRV[ajw{xtu…—¤¬«¢‘|h\VOU[cea^VRPUfqkZHKLMKJQboy{}}€Œ—ª²˜jQQPPQOOQQPOONMNOQOMNMLMOQSUX[\[[_u‰‘“‹‹ŠŒŽ‡waVSTUV`t‡‘†~yqg]jv‰“›œœzz}ƒ†‚|wtpq‚’”“”••”’‘‡„†‰‹ˆƒ}{xrhYOL;

+						
+
+		
+
+
+	
+		
+
+
+
+	
+
+
+
+
#3Mbv…”›ž ¡¡¢¢¤£Ÿ¢£¤¥¥¢£¥§¨¦¤¤£¦¨¨§¥¥¦§¨§©¦©ª¨¥©«ª©¨©¬ª««­®­«©¬­¬­­­¬ª­®¯¯¯®¬­¯¯¯®®®°®«ªª¬­®®«©«®®¬®­®®®®°°][`a`ab`_]]^_a`^]_aba```^]_``a`^`ab`a```ba]XI2#
+						
+0CUclpsl\UPTXfq}‰ˆzbIDBOW[][VC+""!#$$%&'&$,?LSKAGLOOG:9<IJHIQSMCBSj}¦»ÆÉÈÍÏÎÎÌÄ£tN420661-..03;@ABCDGGIKLKLPX_elnpru|~~{€…„€yjT<98;@DCCCA?MYafiq€‘›¢ œ~m_]QVX`cba_\^hx…yh\TOLK@Rdr{||‚‚|{y|yƒ’„_OPKMOPPPPNLMKKKOLNMPNMLOQRMUY\[Zaw‰”˜“ŒŠŽŒƒrcUTQTR_w‰’…wvlf]o|…˜ ¡ ”~~„‡„}ulif{Ž•‘˜—˜˜—‘‘‹ŠŠŒˆ~}vtrgURL7
							
+							
+
+
+					
+	
+
+
+
3BXk}‹”›ŸžŸ¢¥ ¤¢¤¤¤£££¦§§Ÿ§¥¥¦¨§¥Ÿ¥¦§§§¦ªªª¦¨ªª©ª©©¨«¨­­®«©©¬­®«®®­®¯­®©®­®°­¨¯­­¬¯¬¬««¬¯¯­©­¬°¬«©¬¬®¯±¯^^^_`ba_^^^]`a`^^`ab`^__]^__^``abbcca``_`_ZQ@+
+								
+
 +>P^impkc_[Y[en{†Š‰‚wgNNQTW]a^UA)# !"#%&&'&#%0JXWLGKQRPG;:KOLGKPRKBBPi‚š²ÁÈÊÍÎÎÍÌȼ•_<115770037;>??ABAAAA@DFHKRZ_gmprstwz|~ƒ‡„~o\E<:::>@@AA=73>HUYaoŽ•“‹~rnj_XW\]^ba^bn„…ufVMJHHUit{}€ƒ„ƒƒ€€z{xiTNNMKNONMMLMLKKMOPOQQONOQTRQRTVWYdyŠ’–”ŒŒ‘‰ŒmaTSQRS^z‹’Žƒ}wpjghuƒŠ’œ ¤¤›‡„‚„‡‚zqifgtˆ“˜˜™™™—–••“’ˆƒ{vpeSSL3

+					
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	
+
+
+
+	
+
+
+
+



.HdyŠ“™ž£¥¦¦¤¤¤¤¤¤¥¦¨§¨§¨¨¨¨¨¦¦¦¦¦¥¨««ª««ª©§§©¬ªªª¬®¯­«ª©ª­®¯®¬¬¯¯®­­­®¯®©¨­¬¬­¯°¯¬¬­­®­¬¯²±°®¬¬¬°³±¯^]^^^``]]^]\_````aa__]]]^^___^`bbbbba``^^]UF4!				"&4BN[ckjeggc]eku|reTLGHOSW^`ZO;&# "$&('&$#"1NXXLGPTSMG<EPSNLLMNG:<@Yu˜¸ÆÈËÏÎÍÍǯ‡O?/3576316:BFD>BCA?<6;?BELT[`glpqsrtux{…€tfOC==>=<A@CAA:76AKNP[j{‡‰ƒŽƒtdXXWY[ZVXdqzunaOLHHH[muz~„‚‚‚„|kdPJEKLLLMLNORTRJKMPOOPQMOORSRQPMNMXh|Œ‘““Ž‰‘‰Š†yf]RPONHd€Œxligik|А—  ¥£‹†ƒ‚}uob`^p„•””–‘——˜˜—•‘‹Š†ƒyxqfTUM1
+
+
+					
+
+	
+
+			
+
+
+	
+
+
+	
+
+
+	
+
+




'FXgv‡•¤¦¤¤ ¤ž¦§¦¤¨¨§¥¨¦¥¦¥¤¥¥¤¥©¨««¬®«¨¨¥ª¢¨¦ªª¯®­¬¬¨¨¨­®¬¤©ª¯­¬ª¬­®««§­ª®°°­®««ª«¬­­¯°¯¯®¬«¬±²±ª]]^^\^__\\]]_`aaaaa```__``\`a`abba^a`_]]\ZL8$ 
		
+%()2:HWdhgllgccfmrgS;:017EPZ^_UE0$"""##')($"""4O[YNMRUTMHDKTTPOLJHA76;Ef•¼ÈÈËÍÍÎÌǼ£ySE:646653:?EIFCDDA>756:>DMT[afkmnpqpoorx{xpaOA=@BAABDEFDC?==EILITcu}„‹˜¢ ’lXQQRRQMJSY\]^ZVRMJPaqv{}€‚…‰’šš–m^KAAHKJJKKRelhZMIJMMNPQRQQQPOPNLOPVj’Ž‘Ž‹‰†€rbYRONMKk†‹}rhdbgm‘𢤥¥¥žŽ†…}zvm_^[k€“”•”•–™›™——“ŒŒ‹†|xhTWN/

+
+			
+
+
+					
+
+
+
+
+
+	
+
+
+
+
+
+
+
+	
+
+

#A\uŠš¤§¥ ¤¦¦§¦£¦§¦¨¨§¨¨§¤§¨§¨¨©«¬¬®¬§«®ª¦¨«««­®­®­¬¬ª©¬ª¨©­­­­¬¬®­¬­®­®®°¯¬­®®«¬­­­¬¬¬­«­­­­®®®^]^^^]__]]^``a``bccba```aaa`babcba`a``^[[TC*								
+
")+,-46JX\^aea^^[bbT6:<:777IW\\N7)!#%$%(+*&!""1M\aXMQTSKFDQXWSPKFB<68;F^˜¿ËÊËÉÍÎËŵ˜w]OC:36764=CFGEDKOJC</57=ENR[afhifjknmmhlomh^O>;@CBADEGHHGFBBBFGGJT^ht…¥¢’ƒpZOHJJJFKNRGWYY\\YZ\juwx}Ž ¬­¢’€o_KA?HIIIJIf€Š†lHDCIJLNRQRPNOPOLKMMXnŽŽŽˆ‡‰}|nYVRRRQPsŽ”‘Šzo_^]dm†™£««¥©¨Ÿ“Œ†€yzun]\\h}Œ“–”—Žšš›•—˜—Ž‰ˆ„€zkUWK+
+
+
+	
+	
+	
+
+
+				
+						
+				
+		
+
+		
+	
+
+


-=a~—¦¦¡§¨¨¤¥¤¤ ¦§©ªªª¨¦©ª©©©§ª«¬ª©¨¬®«§¨«¬««©««¬­¬¬­«ªª®­¬¬¯®¯¬¬¬®¯¯¨¯«°­¯°°«­«®¬¬©­¯°¯®«©¨¬­a_^^___]\]_`aa__bdedbaa`\bccbaabaaa``a_]WJ5%
+																	
+"*03337?EFIOVWVVVVRA?BHGB;;CT[YF." "$%%'*+(###.J]g^NQTOGDLV]\YRIC<75:?Js¡ÃÌÏÎÎÍÌÈ­whXG=9898;AFFDEKT[ZRF:55;HOR[adgfdehklib_cb_XL;9>BBBEEHJKJJJHFBABFJLM\w” ‚p]KEBEHJMPRPT^grwqieqyyz|~’§²­ ~paMB>GKKJGSw—¡›{N@@FJKNOPQROOPOLKNNZp‚ŽŽ‘’ŽŠˆ…€xiWURRSUX{–š•Šxl]\\brŒ «±¯­«¨Ÿ•Œ…~zzypfcbg{‹’˜›™™šœ™—˜š™–‘ˆ…~{n[WH(

+	
+
+
+
+
+
+
+							
+
+	
+
+
+				
+
+			
+
+
+
+
+	
+
+
+
(Z‡¢¤¥§ª©ª©¦¥¦§©ª«ª©¨§¨©¦¨ª¨©ª¬­¬¬«««¬«¨©ª«¨©ªªªª­¬«¬¯¯¯®­¯²±¯®®®¯®­®±±°°²¯ª¬«­­­¯°³²¯®«­©©¯b`_^`a_^^^_^bba`cefeba_`accaaaa_```]_`]ZP>*																							
 )0589:<<827>DHJLKJFFMTTOG@FO\ZC$!"#$%%"')'##$2H]f^OOOI>FQ[b`]SIA777?B^…¬ÅÌÐÐÌÎÊú¦‡|n[F=79;<?DHGDGNYcb\PB94<JQT\_bddcdffge^\YTPOI;5:?ACEEGILMLHLID;=AEFGJn…•“‡yqcXJECNQ^dbZ^cp„yg_lsvzzz€ƒ›¬®š˜Š}paNC>FKLKQ_ƒ ¥¡UF>FHJHLLOOOLNOMKPN]oƒ‘“ŽŽ‘ŒŠŠˆufWTQPRU_€›Ÿ™wk\[[l|˜ª¯²­£¨¥™ˆ†{puwsggcj{Œ’œžœ–—˜˜“››—”Œ…yn^WF%

+
+
+
+
+
+	
+	
+							
+
+
+
+
+
+
+
+		
+
+
+	
+
+
+
+
+
+	
7| £¦¨¦ª¬«§¦§©¤©¨©¦¨¦¦¦¥¦ª¨¦¦¬­­ª«¨«¬«©¨¨©¨ª««©«­­©«¬®°®©­²²°®«¬«­­­¯±­°°°«ªª¬«­­²²°¯®¨­ª­²baaaaaa_``__abbbceeeb_^_abcbacba`aa_^^\UE/									
+$'+157753/,'.27=DFEJPW_c_SLIV_]?%!"&())'$$&%###6M^f\NJHB=GS^db\RE=67;BRm–´ÄÊÍÍÏÌǾ±ŸƒtXH<88:=BGIGFGMWce_UF<6=JRX\_]abaaab`^\VOFFIF;35:?CCDEHKNOOMJE?:>CFQ]l‚€xrod[RP[gu{xsqrzŠˆ|d_fqw}}}ƒ‹¤°©˜ˆ}rbOB>DGJMVb‹¤§¢„ZG?CGHIJKMLMLNNMORU`s…’”“””Š‡‰‰ˆ€qaURPNPTa„¢Ÿ’kcbgz‘¤²´±ª¥£Ÿ“ƒ{tmnrsqjek{™ž¡™™š˜˜››˜–”…wibXD"
+
+	
+
+	
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	
+
+
+
+
+
+
+
+
+

0wŸ¤¦©«ª¬«¨§ªªª¨©©©©¨§¥§¥©ª¨¨ª¬­¯­¬¬ªª¬«««««¬¬ª­®®­­­¬­«§ª±±¯®­®­­¬¬®°°¯±±¬«¬­¯±°°±²±®§­¯°´``a`aa````_\_]accccab`^^__bbaacbbaa__^WL9"			
+
"$$"(+-.-,-++*-.27?AIRZeklcYX]c_F(%$(*+,( $""###8Sbg[IGF@:HQ\a]VM?94=ARc€£¼ÇÊÊÌËÊÀ·¢–…thYR@;8>DHFF@FFP[_\TG=4<EPW[___```^\VSROJC=DC9.24<@ABDEIIMNLHFCA?@CVk~Œ˜™‰otsk`^^r~•–••”’Œ|tbfkux{|„«³¥ˆ‚|qfXI=6@BDFU_ލ§ž[G:@CFIJLLIJMOMUY\`p|Š“”‘—˜‘…‰‹Š†€o^MRMMMWb‰¡¤¥’ƒopsŠž¬¶µ°ª¢£œ€{qndhfpsnejxœ¡¢Ÿ›››š˜›™˜“““Œƒ~wh\W> 


+
+
+		
+	
+
+
+
+
+
+
+
+
+
+	
+
+
+
+
+					
+	
+	
+
+
+	
+
+

.tœ¥¤ª«©¥©§©¥¬¬¨¡©¥©¨¨¤¨¥©¨©¤©«¬®­­¬§ª¨«©«««­­«ª«­­¬¬«¥«©¯±¯¬®¯°®«¨«­¯®­®±¬­®­¯¯­¯°²²°©°­¯­X^``a`]`a```__`cbbaaaa__^aba`abc`_^``]R?)													"#"!#&&)*-.-,+**+18?HQ\fnsl_[afbK,(())*-+(%#""#%;Ygh[KIE?EMTYZUOG<8:BTi}«¿ÈÈÌÌÌÇ»®™Ž‹„ty~viZKAHGFD@DEEOTUQG><>CLV[]^^^_^[VTNLID?<>?80139<>?ABEGHIGEDCA?@BVt£§£‘|uuqmnŽš£©«¬­­©£žš“‹†utz{…“¯²Ÿƒwo_VJ@77=BEHTr”ª¤—wTF:;BEHJKKJKLPUbt‚…‰”•‘‘•˜’Š‹ŒŠŠp]RPONNYj£§¨¥Ÿ—‹™¤®´±®¨¤£Žxnjgefmtqjiw’£¤¤ Ÿžœ™š˜•““Šƒ~wh_Q5


+
+		
+
+
+	
+
+
+	
+
+
+		
+				
+	
+
+
+
+			
+	
+
+	
+
1s¦«ª©¦£¨ªª©ªª¨©¨¤ª«¨ªª¥¨¬«¦ª­«ª«¬ª¨ª§ª©«ª¨­®«ª©¬­««««¬°°¯®¬¬°±±¬§ª­®­ª¬®ª­¯¯¯¯¬­®°²°°±±°¯\[_]^^]_`ab_a_acbabbbaabaab^abba__bb_YI2"
+						
+
+	%&#!"$&)*+-0-,$)&'(17CNXbinkdcdhbL0--0100/,&$# $'C`ljXKIBDQWWXSMID;<>Un„™²ÀÄËÍÌÊ´¥’Ž„u~‘‘†wbLEBA@A=>BJPOHB?ACKPUYYX\]\WURLGD<:06:6,.169:;;;@BBBD???=:=ARn‹žšŠzpp{…š¤¬±´µ¶·ºº·³°®ª©¤–„v“ª­”{phYL678<>GKi‰¢¬ž…hIB;:@EGHFLJLKS`ƒ¡®³µ³ª›“‰‘“‘Љƒ‡‰o\QQONJ\u‘¢¢¡¥£¡ŸŸ¡ª«©¨¥ŸŸœ~vmjdebmvsjny“£¦¨¦¡ Ÿž™™‘‘‘‰~xjVM-

	
+
+
+						
+			
+		
+
+
+
+			
+
+
+	
+
+
+						
+
+
+
+8x¡¨«¨¦¦¤¨¦«ªª©§¦©¤««©««¥ª­­§¬¬«ª««ªª©¤ª«­¬ª¬­ª©©¬¬­­­©¯¯®§®­®°±®¬ªªª®¬«¬¬ª®°°«®®¯©°°°­²°²®^_`__^]__bcbbbccbacca`acaabbbca`__bbZQ<(
+										
+"&'%%'(*-00121.-,)'(+3<KT]bfjkkmi]G:7:<;:94.&$" &-LhqkTHFDJ[][WQLHC@>NkŽž  ¶ÁÃÉÌÊÆ¼­›’“‘ƒux‹›¦¤˜|WB><==:9=BIJEEJMOMLMTVVY\ZVSOJEB<7.-54,*-147889;=>?@@><978;C[q‚~vofv‰›¦¬±µ¹»¸º¼¿ÁÀ½º¶´·¶¬žŒ~z‰Ÿœ‰…~uhN269=@GYyœ±µŸ‚\E=:9<BFHJKMLLUm»ÇÎÑÌÀ®–ŒŽ‰}€ƒygZRPPOJ^}•¢¡ £¦¤¤¤£¡ §«ª¥£¡Ÿš‹{smhedcmvsmpz•¤¦ª¨§§¦¡™”ŽŒˆ„€yjXG(

+
+
+								
+
+
+
+
+			
+
+	
+
+				
+				
+
+	
+	
+
+
+
+
+
+

A|¤©¨¥¥§©¨««ªª©¥©©¨¨©¦©«¬¬®­¨ª¬ªªª«ªª¨§©«¬­ª©ª©ª¬­¬®¯¯±°¯®®¬¬®¯°¯®««¬¯°°°¯®¯°°°®°°¯®±²²±²±¯^^`a____`aa_bccbbcda`^_`bbbbb`bb``a_UF1
+												#$%$''),./011101/-+)+/@JTY_]imnmbQIEGIHFB?80)#!!*5VpsgRGE@R]\XSOPPONWb†¤°¨«´½ÃÇËɶ¤“Œ’‰yioz¤¤fN>:6;:99=ABCGMW[ZYVRQPRUTQOLHD@;6-,13.*(,.214689:9<>=;8444;@JUVUVZp…›«³µ¸¼½¿¿½¾Âþ¼¶°¹¶±¨™Š‚„‰Š}r~vfL37;?@K[t³¸¡„bE?654=DHKKIKGZ{¢¾ÆÐÖÔÊ¸šŠƒsfv}r]XTQPOIb€–££¢£Ÿ¥¤¤  Ÿ¦«¬¨¤žž™ˆqlgfdd^jqocjx”¤¦ªªª¬«¦žž˜”ŽŠ‡ƒxhW@!

+	
+
+	
+						
+
+			
+	
+
+
+						
+
+	
+
+
+	
+	
+	
+
+
+
+	

H¢§§¦¥¦¥¦¤ª¨©ª««©¦¨¥¥¤ª«­¥¬¨§¥ª©¨¨©¦¨¥©¤¥§¨£©ªª¥®­®°¯¯±©¯¬ª«®­¬«®©«­°²²°°­¯°±±±³²ª­«´®®®²¯aa``_`^``a^_abaa^ec``__`cdbb``aca`[\O:#		
+													 "$#%'))**++-..///.,))0ERV^`binleXJIMQSROKE>4+&"$.Gaup`QIFJU\YRJN[ehhoˆ¡´¾¿¸²³¼ÃÇż¬˜‹ˆzc\`l{Œ™¡˜|ZC98:;7667;@IT\`dc^XPKHMMKIGDA=83-,/11,(),-.0258889;;:7324678@BAD_~˜¨±¸»¾ÁÄÅÃÀ¿Ãý¼¹··´¯§›Ž}€}txƒqZF87;>?JUj‡¤§—}aD>8549AGIIHJM_‡¤¸ÁËÓÒʹžŠŠ‰za^kuj\WUQQOJe‚–£¤¤¤¡¤¦¢Ÿž£§ª©¥Ÿœ—‡qcaceecfjhbao ¥©¬¯®¬©¦£ ˜’ˆ†‚v_Q9
+
+
+
+
+		
+
+									
+
+
+					
+	
+
+
+
+
+
+
+	
+
+
+
+
+M„£¤§§¥¥¤¤¤§¨¨©ª©¨¨¨©¨©©ªª«©¦¦¨ªª¨¨ª«ª««ªªª§¤©­ªª­¬¬®®¯°®­­«¬®­­­­­­®­±²²±°±®°±±³°®®³²­­®±³baaaaaabbba`a`bbbcca_``abccb``bab`[TD-									
+		
 #%'()))%'&)+,()*+,+*+3JZ^bddjmg[MCIPSUSRPKB7-*,0FXjrfQLGHLVZULOUgqtv… ´ÀÅÉÁ°©ª²¸³¨—…„ƒwdM;HScsƒ‘ކpRI9==:30*28GU]_eif`XNLHGEB>=;841-,*/0,&((+--./1338::874445899:;Sn’©±´¾ÃÃÂÈÉÆÂÄÇÈÆÅÃÀ½º´® ‘zrmrx„€ybB<49;<>HIW^o}wkWC>9618>DHJLNM]† ¬·ÄÌͲ™~ƒ‹„qZOah]NQPPQQNi‚• ¤£¤¤£›š™››¡£¤¥¢œœ’‹vk_acc^`dd\`h‡£¥«®«¥¨§¤¢¡–Œ†u_N4	
+					
+
+							
+			
+
+
+
+		
+
+		
+
+
+
+		
+
+
+
+
+
+
+P†¤¨©©¤¤¤¤£¨©¨£¤¤¨¨©£¨¥¨§¥¥¦¦§§ª¨¨¨«¬¬©¬¬««ª¦ª¬«¦®®¬«¬«±¯­«ªª®­¯­®¯°¬¯¯°­²³²®¯«±®°¯°±¯¬¬­¯¯b`abccadccbbaaccbccc`^___ccb`abba_WH3"
+																	
					
+!#%'))*+*'%(**(()''(()3M^^ehjlndT?@EQRQPNNLD9/.8P`lojWJC@@LSVRPUiquv|’±ÀÄÈÊö¥—•›“…xtrpaM701:DWizƒ†€ucN>@=5,+.4CS\_fkkgb\SPGA:753.211.+,,*&'(*,---//04887655458999MhŠ¢²º¾ÂÇÈÇÉÊÆÇÊÌËÈÇÅÃÁ½¸®ŸŠq`^cm|ˆ{gL876:;6<CHMQRPOPL@<9657;BFMTROZ‚›©©¸ÆÆ¹ª’{zƒ|gSOSUMEEFHKPXm…• ££¥¦ œš™™› ¢žžŸ ˜…wh_^\YY_`^^d†¡£§«©§¥¤¢ žœ—‘‘‰w`N1		
+	
+
+										
+	
+
+							
+
+				
+
+
+
+
+
XЧª««©§¨¨©ª«ª¨©ª¨©©ª§¥¦§¦§©ª¨¨©ª«¨«¬«ª««ª©ª¬«ªª¬¯®ª©ª«¯¯®­¬ª¬®­¯®®°±°®¯°°²±±®¯°±±³²¯®«­­®°ba``aabcb`aaaacabcddba`^bcb```bb_\P;(																														""##%%*53.&$')*))(%!$&+2L^chlnondRC>MWWVRHJIB722Ofqum]J:74ALPPPVhxwmrŸºÄÁÈÇľªˆ}sfYURSRI82*./7;O_o|‚ƒ|m^MJ:2,./CP]afiijhgd_UC@7534564/-,*(%(')++,./../167645159=@Rjˆ¡±ºÂÂÅÉÊÇÉÉÊÌÍÍÍÉÈÅÄÀÁ¼µ¥Žn^NNOaldQB6:<=<76@FJMMMMME8:9:7AEOPY][LZuŒšš¤³¶¯§jqzr`OD@<<<=777ETn‰—¢¢œ¡¤¡œ—šœ¡ Ÿšžš—’‡sgUXPVYYW]e†œŸœ¢¥¨¡ žŸž™’’’‰uaP1
+				
+							
+
+
+
+		
+	
+						
+
+	
+
+			
+
+
+
+
+
"_‘ªªª¬©©¦ªªªªª©©©©¢©§¨¢§¦©ªª§ª¦¦¦¦¥«­«¦««¬§«ª«¦«­¯©¬ªªª®­®¨¬©«¨¨ª®¬°®±°±°¯­°«°¯¯¯®­±¯¯¬­®±³ab``aaaba```abbbbcbccbbccccbaabc_XG/																			#%%%$$%,AC4'$%'()(&$"$%*1MailmqpndUHQ]efaWNHE?54F_uzyiQ;616ALLHFSqyom‡¨¿ÄÅÈÈÅÁ¬Šlg`O>==;62--/2137DUk{…Šˆ~scN7228EV_ddfhijkkh`TIB@@@>9621-+)(''())*-..,,/2554676=FYpŒ¢³½ÃÆÇËÍÊÉËÌÏÑÏÍÏÏÊÇÄÆÆÄ¾±–t\PHDCIJB97>AA>86>CEGHHIH@58:>EP\chjmf_\fy…‚…‘š£¦egphYG>968;:8526Ijˆ™¡œ–˜ž¢¢žœž¡¡¡Ÿž›šž›”ˆvf^WUUXY]k†˜››ž£¤£¡ žœ•ŽŒ’‡s`P1
+
+		
+
+									
+
+		
+
+
+
+
+		
+
+
+
+
+
+
+
+			
+		
+
+
+
+
+&f”ªª©«ª©¨©ª©¨ª©¨ª©§©ª©ªª«ªª©ªª«¨§¦¨¬¯¬©«¬®°®­­¯¬¬®°¯¯¯¯®°®¬«¨ª¬­®¯±¯¬±²¯¯¯­°±°°±²®­¯¯°±°°²´bbbabbb`a_a`bcb\abcbcbbcccccbabaZN; 
															
+ #$&&%(*9KH9(#%%&''$#"$&*.Mcknmnnkh^bkv{ui_QKA<3<Ohy{zhD;568>ED>@Ii€€w’´ÄÇÆÇÈý©Œ~ugSG<;32/..221.01CWkzƒŒo[GEER\acdefffcegbYLCEGFC<7310/-'(((%('+--*++0/55:>BGd{’¦³¾ÄÉËÍÏÍÍÎÏÐÓÓÓÓÓÏÍËÉÈËÊŸ jYVKI@E==>HHGE?7@@?@AAA?;3:8KZdnptuuqjeZhj`V\eŠ¢‹ccg`JF=:8?=;95135]}˜Œw„”Ÿ¤¡›¢¢¢œ–™šž Ÿ—–‘ƒwl_^Wchmt‰‘˜–ž ¤¤¡ Ÿ›–‹ƒo`L+
+
+
+
+		
+									
+						
+			
+
+
+
+		
+
+	
+
+
+	
+
+
+,l•¤¨©©©©¤§§§©ª¨¨©©¦¬¨¨ª¬¬«§ª¥ª¨©¤¥¥®°­§­©­®°«®ªª©®¯±ª°®¯ª¯«­«­­±°¯¯¯­®­­«¯­±±®ª²²°¯°¨±±°°°«abb``aaabcbcccca__`bbaacbaaaa`]^R@,
+														#$$'('+3BPI7($%%$%&&$#$%(,Kdkligjlkkpz†ˆ€vi]M@95@VlxzygN<89<>=:55>`{ƒ†’¨¼ÈÈÆÃǶ¢Œƒ|lYPG;521124631004DWk{ˆ“™—Œ}tolebaabegfc`_a^XJDDGFE?732230,()(''(),-++-/15;IV^p…™©¶¾ÃÈËÐÑÒÑÐÒÒÒÓÒÑ×ÔÎÎÎÌÉÎÍȾªŽskkk`VPOQW[^^VLFDB?@?;6754;DXlu{zz{zywne[PG>9Feˆ‡`\`YHFHMQKF=:61/0Ol‡yfh‡™¢¢£¦¨¤š•”–› ž˜—’Œ†yplmt|ƒŠ•˜› ¢£ œ›–Œ‹~h]H%
+						
+
+
+											
+
+				
+
+
+
+
+
+
+
+
+		
+
+
+
+
+
+
+
+
+
+1p–¤§¦§©¨¤¦¥¥ªª©¨¨¨¬«¨©¬®­¬«ª««¬ªªª«­®®¯®®¬¬®¯­©­¯±³°¯®®®¯®®®­°±²³±¯±®­­­°°±±°®®¯°°°¯°¯°¯°®­a\a__]abbbbcbccb_`_bb_`]```^_^]XI0$												
"()((()-9HQD+'$$"""%%$"""(,Hchc`]_bdenz„‰‚zpcN445H[lqtvl^SGB??<6.16Up}‚–¯¿ÈÉÅÇÆ½­™ƒwj]XQG:713378533332BSm€•—•‹‰}i`[`cghe^`_ZSG;ADDE?213453/-)*''((*.,--02=Eau†“ ¬´½ÂÅÈËÐÓÒÍÒÑÔÒÒÑÒÔÓÎÎÍÉÈÎÏɲ™{g€’–•ŒŒŽ‘’Œ„oTVYPHE:7321<H_rwyz{||{wriX@9-69YneXUWRIFH^omdZD;3.,CVgodL`~’Ÿ¤¨ª¦Ÿ›‘“Œ––›–“‘…{||„‰•š›œœœ™˜–—˜“‹‰‰‰…ybXD#			
+
+
+							
+
+
+						
+
+	
+
+
+
+	
+
+
+	
+
+
+
+		
+
+
+
+4s˜¥§¢¦¨ª¥ª§§¨ª§¨¨ª®¬£«­­­­¬¬ª¬ªªª«­­¬¯®¯®¬¤¬¬«¨­¯±³²¬¯«¯°°®°®¬¬²°°¯±­­¦¯±±®°®®¯°®±°¯°¯®°«¯®aaaa__ab^^`bbccb__`bba_aaa``_^ZQ?*
+										%+*()().ENM>(&$#"!!%&$$##&)Eae_WSPSW[dr€†}tfM26DUdlonqpng\LB>:3,,0Jao~˜²ÁÆÆÇdzžˆ}pca^ZQG@9678974452-0@Yp‚“””™œ›ŽxYW^cfgeeb_XN=:AFED;00565541/-,+**,//..1@On…˜¤­³·º¿ÂÅÈÊÍÏÏÐÑÒÓÓÒÑÑÑÐÎÌȼÂËÏËĸ¤‡–°¾À»µ±°±³±¥“dmuobQB<514=Lbuwwz}}ztmX<42=IU[WMJLJD@Ch‡Œ{iUA.-;GQTPFZw‹–›¡§©§¢›’‘“•™™•’’’ŒŽ‹•šœžž›˜•••”–‘‰„††‚saR>!

+				
+		
+				
+				
+		
+					
+	
+
+
+
+		
+
+
+
+
+
+
+
+		
+
+
+
+
+8x›¦©¨§¨ªª©«ª§ª«¨¨«®¬¬¬¬«ª¬®­¬¬¬«©¬®­¬­­«®®®­®«¨­±±±²±°±¯¯°±¯­®¯°¯¯®±±­¬¯±±°®­®®°®±±²³²®²²°±``cb`]_`]\accbba``abbbbbbb``^]TE4 												
 )*)**++9KOG6&%$#"" $%$$$#$&A[_TMHHHJLYe|„€}rbK7EXfppqrprppl]G@83,--BXj{šµÁÄÆÆÂ¸¥†wkjgc`ZSLC?8::81120+,/DVn‰‘—œ ˜…hRY^bceedaWH<<DGD>7.167455410/.,,,/234H[z“¥¯µ¹¼¾¿ÁÂÁÈÇÉÅËÍÐÎÒÑÒÐÐÎËÆÆÂ¹»ÊÎʸ©—¢¼ÆÇ¹·­®±°¤’r~Іy]FA;::@J_qutvx}{zzriW=:8IVZYTFEC@::;eŠ™š€kVC2=ACDDDXqŠ”œ¢¡ž™‘–™™—“––•‘••“Ž‘’˜—œ™—“—’“”‘‰ˆ†‡~qWM1

+			
+
+							
+
+				
+
+
+				
+
+
+		
+
+
+
+		
+
+
+
+
+
+	
+
+
+
+
+
D§«©©©«¤¨¥«§«­¬ª««¬­­¨¨©ª®®¬¬­®­¬¬¬¦«¬ª¬¯®¯¯¬¨­°°±²¬°±°«¬«««¯±°¯°®±±¯©²²²­®ª°­±­®­®°¯®³´²®_`cc`_\\]`acdcbbcccbddccaa`_][M7#
											
+$+,))*,2@NL?,%$##"""#$#$$#$&=TVLBAAABGRgw}{ym\HHVjuxwuuvtquvkZD94/.-9Og »ÄÆÆÃ»¬”ƒ{umppmge`ZUPKGD@85/--,.27BRjx‚Š’˜ Ÿ”s[NV\adffbTD=@EE?82/16655554320/../5<Qk‡ž°¹¼»ÁÃÂÁÂÂÂÇÈÈÉÉÉËÍÐÒÐÏÎÊÉÈÇ»ÁÉÌɸ¬¥ºÂÂÀ½º¸µ²©‘‰ˆ•”†fECA@@AEYlruuuxywwndTEAFR^^ZUJA:5349b‡›¢—‡t`L?>??>>CTgtz|‰Ž‘“‘‘—œ›™———˜——”Ž‘••——–—˜™™–‘ŽŒŠ‚oUG+

+
+									
+
+		
+									
+
+
+
+			
+
+
+		
+
+
+
+
+
+
+
+

OƒŸ©©¨§ªª¨©«¬­«¬¬«ª©ª¬ª¨©¬¬®¬«««­¯«««§ª«©«­®®®®¬¬¯®¯¯¯°°®®®®­«¯°°¯°³²°°±²´³²²³±±±±°°²³±°²³±²``babb__acbbcdccddccddb`aa`^[TC(											
+
+
+
+#)+*+,49HQJ8'""!"!"##$$%#%'>NL?:887=DTgnnmjbXWYgt{~{vvvtquyvlZ?910.6?a„¦¾ÈÊÇ¿°›…stotwvrldd]ZUURLGA:40/.2575DObp~Š“˜¡Ÿ‹m]MTU\``\N;<AB?91.*/045546872221/6>[u¥´½¿ÀÂÅÈÇÃÃÂÁÅÇÇÇÇÅÅÇËÌÌÌËÅÉÌÊÅÃÄÆÉǹ® ž®»¾¿¿º¶±©›‡Ž‘“Ž]AB@@AA9QahnnpqkjhdWRHJMUXZ[UH=43368Xy—Œ{bJA899;798HW\^`dfhnt|ƒ‡‹—œš›–˜——™˜ŽŽ‹Š“•””•™œœ˜“ˆŽ…nSD'		
+		
+
+
+	
+
+
+
+
+		
+
+
+
+
+		
+
+
+
+
+
+			
+
+
+
+	
+	
+
+
O‡¢£©©©©©¦«­®©«¦¬«©¤©¨ª¤¬¬­®­©ª¤©¨§§­©«¬««­©®®¯®­¯®ª¬°²­¬­¯¯°®­¯°®®¯±°°¯²´´±µ´²°°¯²²´±°¯²®±±ababee`abcbb``bc`cddcbbaaaabZJ7"
+																											
+		
+!&)*.7@HNRG4$!"#"""###$$%$&2@HC843259FUbeb\XSV`jqw|}{z{yuty{ylYC9214>Y­ÀÉËĶ¡Šzoquz~}xqmic^[ZXQJF>71114658?FK[l|‡’œ¢œŠp\OPRUUPC89>=83-+-..14559;943314@_}•¨´½ÂÂÂÄÆÉÊÆÂÁÀÁÂÃÃÀÃÂÇÉÉÉÊÇÆÇÊÈÃÃÃÁÄÄ»°¢––¤·ÄÆÀ¯­¦œ…‰“•‘„xTHCA?A@?FS\cfjhfb_YSPMMQTUWZRC943457LfwvfJ6..156768:FNSVWSSNXbm{‰•œš˜™–˜šš›—ŽŽŒŠ‰‘—–’ŽŒ‘”˜››™“Ž…lO?"
			
+
+
+
+
+
+
+			
+				
+
+				
+
+
+
+
+
+	
+
+
+
+	
+	
+
+
+
+
+	


O‰£ªª¬ª¨¨¨ª«­®¬­¬ª©©¨©ª¬¬«­­®®¬«¨¨¨¬­©¬­­«¬®­­®­¬®­ªª¯¯®­­®®¯¯®¯°°¯°±±°¯°²²²´´³±°°²¶´±²²²³±±abbddcbbb```__bcbaddccdbaa`_S?,
+																									
+						
+
+#'*,8BKPRQD0$ """$$#"!$$%$):DF>130:>BHNTUSOLSWjsutz}~y||zxxy}}xoaKD>BHl˜µÄÇȽ©yrgpuy€{yvqjgb_YUMI?6/12335:@CCCUbs„’Ÿ¡›ŠufTSIHD>6:=93/*+-//14558:86327>\}—«µ¼À¾ÆÅÍÑÌÀÃÀÀ¾ÀÁÁÂÅÃÉÊÈÃļÁÂÁ¿¿ÀÁÂÁÀ»°¡–’š®ÀÆÂ²›š–x‚Œ‘‘‹„vh\KGDD=KU\c`^b\`WTSPKIHPSTTO>733069MW_e[G</.+-/133/6=JQTVRPNLKKfŽ™—•••••›˜˜ŒŠ”“‹‘–—–“ŒŽ‹hK9
+
+
+								
+				
+
+
+
+				
+
+
+
+
+
+
+
+
+		
+
+	
+
+
+
+
+
+	
+
VŒ¤©«©ª§¨£¨ª«ª¬¬¬©ªª©¦«¬¬©ª¬­«®¯«¤«ª¬¨¬«¬©«¨­­­«¬©¯¬¬¬¬­­­®­­®°°°ª±²°«±®°²°°²³²²¯¨°°³²±¯³­²±bccdbabcccbaa_abbbcc_bcc``^XH1
+
+			
+																													
+
+ &/6;CMQSRN?+%#!!"$%$#$%%$#,>EC<9:>GNKGBABDEMZitywvy~}}|zy|€€ypg`_f}¢»ÆÇÄ´šrljptx|}}~~ysold_[WL>2/./0/1:@B=>AJZq‡˜ š‘mVLB@<:>?;8.,,//02555677646?[y”¨µ¼ÀÂÄÅÆÈÑÖØÔÎÇÂÀ¿¿ÀÁÂÅÈÉÈÆÁÀ¼¼¸¸¼¼¾¾ÀÀ½·¬Ÿ“ˆŠ™­¸½µ¨ ¦žz‚‹Ž‘†wjb[OKRclrkdcfd^RQMHCDLTWWNB8324:DNWZVE941/+,,,0133>FMRRPOMJ@@LtŠ•””“‘‘–š˜”ŽŽŽ‘’Ž”•“މˆŠ‹‡{dK5
+
+			
+					
+
+
+					
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+		
+
+
+
+
+
+		
+
+
[¤««©©©¨¨¨¨¨¨©ªª«ªª¨©©©¨ª¬®¬«®±®««¬ª«««¬¬««­°®¬­°°®®­­®®­­®¯°°²¯­°±°°°°°²²±¯±±±®­®®²²°®´µ²²bcccb`bdedd^a`a`baba_`bbb`YM;!
+
+
+
+
+		
+
+			
+																				
+		
+
+#*4<CJPRQPH8&%$""#$#"$%#"!,>C;>ADIPRI<98:<OXhsyzxy{{yz{||{~‚‚€~|{«ÀÈĽ§‡ujjlssqnquy|{wvrmga\P>3)))-,/7?DB>?9FVs‰”—œž™Žz^WE?:DJJC8-010-23325557;?Zw£¯¸¾ÂÂÀÇÇÌÔÜÜÙÕÎÄÁ¿¿¼ÀÁÄÆÆÄ¿»¸¶¶µ·»¼¼¾¾¼¸´«Ÿ„{~…𫵴°²­™|w…Š’”’‡~{zursry}yuvxreRJLAECMT[_XPHA84;FS[YNC520.+,)*-018@GMOLMOOLHCYr˜”‘„ƒ‚ŠŽ’•”‘“ŽŽˆŽ’‘‘‡“•„ƒ~…‡uaL2	
+		
+	
+							
+
+					
+	
+		
+		
+
+
+
+
+		
+
+
+
+	
+
+
+
+
+
+a•¥ª«§ª¨©§¨¨¨¥©¥ª¨¨¨¨§¨§ª­®­©¤®®¯­¬§«©©©®©­«®°°¯¯­¯­¯¯°±°­¯¯°«¯®®§¯¯±°±ª°°°±°°±®­¬­¯³¯®®´µ³°bb``acccdedcbba`bab`]`abb_SA-
+										
+
+		
+		
+												
+
+													
+$+2:BIORTNC.(&&$"!""!!"###$,:@@AFJMONB878<K\lswzzxz{|}~~zxyyy{{{}‚Š‘›±ÂÈô™zjgjqtpmlklmuz|zzume]QC4,))++)2;B@>=:6CYr„‘™ ¥¦š‰ziQKMXWN>6320011.03207CYtŽ¡­³º¾ÂÂÆÉÉÆÖÛÝÝÛÕÍÆ¾¾¾½½½¾¿½¸´°®«±·½½»½»´²°¬ €umpv£±´´°¢‚u€‰Œ“”ކŒ‘Ž‹…‚ƒ„yhSHNOOMNR`qwxmY;46HV[SG<30.-+*)(+-/4=DIMMMNNLNSauŽš•ŽŒˆ‚u~‰”•–”“’’“‘’”‡€‚|o^L1
+				
+
+
+
+	
+
+
+			
+
+				
+
+
+
+
+		
+
+		
+
+
+
+
+			
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
e˜¥©©¨¨©©©©«ª««ªª¨§¨§§ª«¬®¬ª¨§©¬­­¬­­¬ª©­°¯®­±®®®¯¯¯¯°²³²¯¯°®©¯°¯®¯¯±²°°°¯®°°°¯¯±®¯°²²°±³³±°ba``dddcbbdcbbbaabc`acb^`[K5%
+					
+													
+								
+							
!#')/5?INROF;235.%"!"!! #$%%/9DEGIJIJDB;@BGRftwwzzywxz|||{zyxxz{{vˆ‘’ˆ™´ÃĽª‡c^]fqrommnhkovxzzxph]SI>0-*++++179<==::GNm‚– §¦£šxhehaUD45//010-.1/09Tp‰Ÿ¬µ¹»¿ÂÅÇÊÌÑ×ÛÝÞÝÚÔʽ»»º²±°´¶³²®©©­·½¼»º´®ª«ª¢“†rg_gl†ª««¨™}€‚„†Œ‰…Œ’”•”ˆ{yx{|s_YL^gfZVSlƒ•ˆpS:CL]^M62/.-.+*))())+0<@HKKIJIJMUfyˆŒ’‰~n}ˆ••Š’‘‘’’’’’’‘‰…wiZI-

+
+
+
+									
+
+
+
+		
+				
+	
+
+
+			
+
+
+			
+
+	
+
+
gš§«©£¤¦ªª©¨«ª«¨ª¨¨©¨§«©ªª«©§¦¥¦¬­­¯®««ª¯®°©¯±¯¬¬®°¯°¯±±±°°°®ª°°²®²°°°¯®¯­°°±«®°±°°°±®²­´¬¯¯bccbddaccbcb_abcdddcdeca^UA+														
+												
+																				#%%$%,6@FJLKGEFG>/$!"!"""$$$2ALTVYYTKHGGIJKSgtxww{{xx}~}yzzyxwxyyz‰‡ƒ”°¿ÀµoRLN]lnllrrokmsvvvwuk^WQI?71.,*(*.17;=<<?EVr‰’œ¥ª¨œˆqstjXF54/-//.,/0/2Ge„™¨±·º½ÀÂÃÅÉÎÕÛÜÝÞÝÜÚÐĵµ³®¦ª®±±°«¥¡¨µ»¹¹µ¯©¥¤¥¢–‰ra]`cgƒ–žœ«¨•}{ƒƒ‚€‚‡Œ‘””“‹|qqrqplhjr|{ukm|’ £•€fWUZbaH40.,-//-,*'%'*4;@ADDEEEBA:JXk}‹’––‘…xox‰–”‘‘‘‘‘””––‘ˆ†…‚{oaSC'

+
+	
+
+		
+																
+
+	
+
+
+			
+
+	
+
+
+				
+
!jœ§ª¨¤§ªª««¬ªª¨¨ªª©ªª§««ªª«¬ª©¨¨¨­®¯­ª¬¯°°¯­­°°®®°°®¯±°°±²±±°±°­²´³¯¯¯¯°³²±²²±±±°°°¯°¯°³´³±¯cccbcbbcbbccbaaceecbccdbYJ6!
																	
+																			
+						
+#%%$"%&+048AEHLORH8+"!!####%$8M[cgkjf]PONMLKQdrvx{}|zx|~|zwxxyuuuuw‡…vf}›¯¶¨Žb<;<Oajmpvxunmnpplqsm`\WRLC63-,(*(02:<>=CH^kml{‹–—ŠzkrxmVC53.--.+.01-AXy’¡­²·¹½¿À¿ÁÈÌØÝÝÝÝÜÜÛØÏ¿©©¦¡¡£¤¦¨¥ž¢´»¸³³®©¤¢¤ž–‰s`[`bcmˆ”«°¦‹t|{{x|}…‹Ž‹…xhehmwy}ƒ„Šˆ‚}ŽŸ¥£}slljjiR51)+)//.)+)')6BFJFB?=CDC>71=Ho‡‘—–•‹~mfƒ”•’މ…€€ƒ‰‘”•……†ƒxjOM?$

+					
+
+
+
+	
+
+								
+			
+
+
+
+
+			
+			
+
+	
+		
+	
+
+
%nŸ¥¦§¦¨«ª¥¬¬«¥¥¥«««¤ª§ªª«§¬¬«ª©§«­®°®¬®«°¬®«¬ª¯°®°¯«®°±°¯¯²°±°°¬±³²¯¯­±³²¯±®³´´³±®¯°²¬°±²´³²cdcbbbcc`dddcbaced_^`dc`R>&#																														
+					
+		
+
+								
+
 $$$$%&%#(+-1:AGMPK@1$ "$$!#$,@Zisvyxtle`XRLKP`osx{}|yvy{|{yvux{zyxx~ƒ|ra\c}’ž’xU78:BTalotxvomlkjlnomga]ZVNE:40-+,/6;>>AIYfi]X_qˆugdnymT?52.,,,-.12;QqŠœ¦­³¸º¼»¾ÂÂÊÒÙÝÝÝÝÝÝÝÝÙ˶ž›˜•‘—–“¢²º¶´±­§£¡ š“†p`abcacet‡®¾¶š„ywuvxyv~†‰…„|ob]bvƒ’•––¤©£‹tst{‚€u\<2+*,/0.,+*),BU`fbYJDA@A=5,*9dƒŽ””‘‰~ldz”„wlb\esƒŒ‘މˆˆ‚vePM?"
+			
+		
+
+	
+
+						
+				
+
+
+
+
+
+
+
+
+
+		
+
+
+			
+		
+
+
+
+	
+
+)w¡¨ªª¨ªª©©ª«©©©«¬­«¬ª©¨©¬¬¬¬ªªª©ª«¬¯¯®¯±°®­®­­®¯®®®«­®®°±²³´±°¯­°±°¯®°²´²°°²²²³´³²²±³²¯¯°²´´a`b`bbcccdddcbbacd`abb_XH0#"													
+
+
+				
+	
+																			
+			
+											 !!"#%()+.,(/+05<BCA6%##$%%$)3Kboz}~|rsqh]OEEE\jqrxzyvvv{||ywsuw{zyu~€taWPSWnwjWE468:=NXblprokkfknmmnjfc`]YSI>911-6;@@AESahcR<BLcmja][htmUA31*+,-./5>Jh“ §«²¸¼¿¾½ÁÄÌÕÛÝÜÝÝÞÞÞÞÝ×Ȳ–‘‹†~~~‹¥´¶µ¯¬¨¢Ÿ˜•ƒmdadd_Ugr–¶Å¾©“†prosuuw}ztjb`y•››˜——•‹’Ÿ©§“wrmxƒ…~dE9-/-68632136Up}…~u`H?7993)+4`ŒŽŽ‹‚wlVsˆ‹„oRI654Nezˆ‰‡†„~scTQ@ 
					
+
+				
+
+							
+			
+
+	
+
+
+	
+
+
+
+
+
+
+
+	
+
+
+
+
+-z¤©©¬©©ª««ª¥©©ª­­¦­­®©©ª­«¬©©©©¨§¦«¬­¬¯²±ª¬©­­­ª«¬«ª¯­®ª°³´¯±®¯­¯©ªª­®²³´®²°±«°°²²³²µ³°°²¶¶´b`aabcccbbddbccccbaab`ZO=)!																										
+
+		
+																															
 *+'!#$(,6>CA;1*%')4:=4%$$#$$%.BUepz{{yttshYIBCH\koruvvvwy|~~yvuuxz{|}|oZOOPPRQKC5104446AO]fmookkmnllnlkgea`^TKD>:<AFFBDLYcaUC53:ENQRT[bnkZB1/,)+-.08Icy™Ÿ¥ª³»¿ÂÂÀÃÅÍ×ÛÜÜÝÝÝÝÞÞÞÝ×Ά}wqjfes‹«¸º¶±¬¦ œ™”Œ€pfhii`jyŠŸµ¾º¯©žŒuoptqquxttmcatŽ¥©©¨§¤¢£¡˜Ž†“£©œŠueiu€yfMC97<BHHHGKQYoŠš ›sQ>1-00-+7_~‰ŒŠ„xth_qrW>/*((*Dd|€yn_TM<
+	
+						
+
+
+
+
+
+
+
+
+	
+
+
+	
+
+					
+
+
+	
+
+
+		
+		
+
+
+
+	
+
+
+
8¥§©¬¬«ªª©ª«ª©ª­¬ª¬­­¬««­®­®­¬¬­¬¦ª¬¬¬«²²¯¬©ª«ªª¬¬¬ª°±®­­²²±°°°°®¬®°°¯±´µ´±±±°¯±°°³²´³°¯²¶·µbabcdbeccaccccb`b_`aa^RB0
+				
+							
+					
+
+
+					
+																								
+-9951-04<ENVSMC1,&*,240&&$####9N[dipqrqomj]KC=DM`lprssuuyz}{€|yvty{|}}}nWONOOOJF?:2/,2132@G_nsspnokkgijjiibaaZRPJJIKMKDIR\_VD;222349>R^ekj[@1.,*)**2=[r‚™ž¥ª´»¾ÂÂÀÂÃÐØÜÜÜÜÜÜÜÝßßßÝÒÀ£‚wg`X^n–²»»¶²­§¢œ—“‘Šu{„…Š–œŸ§ª´´¯°°¤Šikmkdkpqoh]u‹ž­±²²³±­¨¢—„™¤ŸnHNW^c`VRIMPTYZ\[_it…™¥¬§~ZG00*0,-<^xƒˆ…vl`SrsWD.,*(%(,Pky}|zrgZGD1	
+
+
+
+
+			
+
+
+
+
+
+
+	
+
+
+
+
+	
+
+				
+
+
+
+
+	
+
+				
+
+
+	
+	
+
+
+E§©©©©ª«©§§©««¬­¬««©«¨«¬¬«¬«¬¬ª­¬§«ªªª¬°²±®§¬®®®­©«©¯°¯¬­¯²±°®±±°«°±´±²³µ±²­´¯¯­±¯³²±±±¯¯°²µcbdggeefecbcdebabcccaZI3!
+
+
+
+	
+																							
+
+											
+																									/=JOOLHGLPT[`^XOD:4-**,+*'%$" (CYaaadggfdb\QE<;EVdmqrrtwyyz}€~{wv|€~nYONNNMKFA>9/.02238BYnvvtppnkkjijljhda]YWVTRRONLO[_ZM<3112/./;Qbipk[>2/-*)+-5Nh{…”§¯´º¾¿¾ÀÂÈÒÚÛÜÝÝÝÜÜÞßßßÝÚÒ¼žydXSUsœ·¼¹²¯¬§£—–’ˆyv’œ¤µ¼»´°­®¯¯±³­–|dcb_ahljdb„¦«¯µ¶¸ºµ¬¤—‹ƒŠ™šŠd=7AMZ]_^__`cdhjihr‹—¡¨ª¢ˆcRA:73-0A\nx~{nbVVr}fE4+**(%'*5Wp|xslcVH>*
	
+
+
+		
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+		
+
+
+
+			
+			
+
+
+
+
+
+O†§«ª©©©©¨¨ª«ª«ªª«¬«©ªªª¬««ª©««ª«ª¬«ª¬¬«­¯±®­­®­­­­«ª®°°¯­¯±°®²²±±±²²³´³´²±²³²±°°°²´µ´´²¯²²³µdcdfgdeffddcefdccccc^S?&"!
+
+
+
+															
+
+			
+
+			
+								
+
+	
+
+																											
'@Q[_a]YXYZW`eb[UMKKD6.#()(&%!"-JacWVYXWVURNE989N^hmtttvxxyw}~€w}{yy}‚‚taXLLLKIFB@>942035:AXkswuqqponnmlkjjf\ZXZZZZWQQR[`\SE40.00/.3<P_hro_C20-*)+.4Rkz‚‰”œ¨®µºÀ¿¾¿ÅÊÔÚÚÜÝÝÝÝÜÞßßÞÝÛÙ̳eRETy¢¸º·²®¬§¡›š™“…rdr µÄÅÀ¼°¯®²µ·©žŒxaaSW]eehm’§ª©³´µ·º¶­¥–‡~uz…ƒvV7;BS]aabddegfigjjlo}Œ•œœ…e]NRUK45CZbhkif^QTZmsZ:61-))&($.Fdwsgd^TI<&	
+				
+
+		
+
+
+
+
+
+
+
+
+
+
+						
+
+
+
+
+
+
+
+
+
+
+
+
+
+P‡¨«««ª¨¦§¨ª©©¢¥¥©©©«¬¥«¬«¤«ª«««¬¬­­ª­©ª¦¯­¬««¦©¨­¬®­¬¬±­®«±­®±±¯°±²±°®´´²®°¯±«±°°®³°²²³¯³´µ²edbdedceeddffedddcabYJ1%$)!
+		
+									
+	
+
+				
+
+
+
+
+														
+	
+
+								
+
+												
+
+			
+	
+/HU]dfc`^\]`dhfaVPSZTE2(')))&##1NdcVLNNOONHB:34?Vgnsvvvw{|{}~~~~~|{y|z€~ztgWIKHHFCBBA?;669=J[ipuuusquxvsqoljf`^[Z[]_]Z[_baXM=2////.06;JXcpqdH0/,*)*-2Phv€‰”Ÿ©¯¶¼Á¾ÀÇÐÖÛÜÜÝÝÝÝÝÞßÞÞÝÜÛÔÛlKCS‚¥¸·´°°¯©œ›œ›‘j_`fmƒ”«ºÄÈÉÊÉÊËȽ§™Œ~n_MV\^e…Ÿ°±µ»¼¶µ³¯ª¡‘vkdonaA;@M[fffhjklkjheknnnqrt‡‹{djntxiS;F[e[VSQNOQWhiKDCE?7.*'&(;Ypng^WOG8!
+				
+
+
+		
+
+
+
+
+
+			
+
+
+						
+
+
+
+
+
+
+
+
+
+
+	
+
Q‰©«­­¬©¦¨©©¨¨¨§¤¦¦ª­«¦«¬ª©ª­­¬­­­­¬¬«©¬¯¯®­«©¨§¨­­®¯°²±®¯¬±°­¯°¯±°®¯¯°²³²µµµ²±²³²°²¯±³µ¶´µ´²dcddcacfeadfecdeeddb[L8&'1/#
+					
+			
+
+
+		
+					
+
+	
+
+			
+																		
+
+								
+					0AGNZ[[\]Z_bdfd`VIR\XL:*)&,.,*/5ObaYMFEEFE?84.3E\msuuvtvy|}~~y}~~}|z~}z{|€ynaPMKIDCCEGF@ABNZejpowwusyxyuurqnldc^[Y^`_Z`dbYTL?1//00/059AJ\lndL1/*)(**4Kep€Š–¢¬³¹½ÁÂÂÃÌÒ×ÛÝÝÝÝÜÝÞÞßÞÝÝÜÜÕÆ rO>\‹¬µ¸­°±°ª¡›œ›waQSX`gv›­½ËÕØ××Õ˹Ÿ¡ ˜„qZ^`|—«·¹¼Á¹©¥£”†wp_^`^\RHNT^fijjklmliidjllmlkonprkfp{ƒ‰€oaThj\IE<BFKRfm^KQTPJ:+)&&(Pih]XND<1
+					
+			
+
+
+
+
+
+
+
+			
+
+
+
+					
+
+
+
+
+		
+
+
+
+
+
+
+
Xªª©­¬ª§¨©ª¤ªª©¥¨¨¬¨§¦«««¨««¬«¬­­ª«¨©©­¯®­­¨§§¨ª¯­­­±¯°°°ª®­¯°°°±¯®­±±±®µ·µµ³±³²³²±±²´¶¶´´´¯ddedbbcffddfdbdebdcc_TB5-7970("
+
+					
+				
+
+
+					
+		
+
+					
+							
+																									
+ .9@KPQPVZ\adb``^THQ\YTD:0.0;>>=@N\^XNA@?>=72/.2I`pstrrstv{~~}}}}}~}~~~{|}ƒ‡ˆƒxlYQMIEDHKMORW`josuy{}|{{{{yxz{ztoje^^^__`df_UQL@/./330//37DVfjbO<.+-/-+7Oes‹™¥°¹½ÀÁÀÂÉÑØÙÜÞÞÞÝÝÞÞÞÞÝÝÝÝÜÔÄŸuRAg–³¼¹µ³²¯ª¥¢Ÿ™‡oTC?HPYbnw…˜±ÉÖÙÙÚÕË¿´Á¿³˜ycn‡ž¬´¸¾Ã·£™•Ž…xri\R[ega^\^`djnooonomjijkkllmmmkhdckv‚‰ˆƒ{vsm\G>78:CNesmd`ccZG:5.*)IacZQE95*
+
+				
+
+
+
+
+
+
+
+
+				
+
+
+
+	
+
+
+				
+	
+	
+
+
+
+%a‘ª©©««©§ª¬¬­¬¬¬«ªª­®¬¬¬­­­¬­¬«««­­¬­­®­¬¬¬«¬¬­®°°¯®®°¯±²±®­®°±±°°¯¯°³³²²µ¶´²²±²²°³´¶µ¶¶µ³³´µeeededeffeffecffcdddc_UJC9;98640(

+			
+
+
+			
+
+
+									
+
+
+
+		
+					
+		
+
+																		
+					
+",3>FHGEEIPY`a\[XRLX_baZRMIIKLKGCJSVWO@=4577/./<Mbomifeinrx}€~}z|}~|}€}z†Œˆƒyi^OKEJKOS^houwy}€|€~~}{|{‚ƒ~troi`]Y^`ff]MPNC//0463/./4?QbecVE8,01/-5NbsŒœªµ¼¿ÀÀ½ÃÍÕÚÛÜÞÞÞÞÞÞÞÝÜÝÝÝÝÜÓ¾œwTErŸ·½¸·¶²®§§¥ž•hL331<CQ\ben~µÑÙÚÜÛ×ÑÏÐÏɱ€}—ž¥®µ¼¾´¢—ˆ…ysld[V[pyqhg]demqqpplllighhorqmngdbbY`aq}ƒ…‚wrm]I?881=J`rtmhki^IDA410M`bXM<83(								
+	
+
+
+	
+
+
+		
+						
+
+
+
+
+
+
+
+
+		
+
+
+
+
+
+
+


'f”¨¨¨©¨ª©ªª­­­®®ªª«««®­­¬¯°°¯­©­­®®­­­®­¥¬«ª©®¯¯®°¬¬¬°°°±°­¯±°°±±±­®®²°±´´°´´³±°±³µµµµ±¶³±³´³fecdeffffefgfhigeefedea[SLA;9<<<6.$
+
+
+	
+
+
+		
+
+
+
+
+												
+
+				
+	
+
+
+
+								
+																				
+#,3;AA<3./=KY]]WQMWaimmidb`\XWUQKFJNSOF;637977:CUcibYRPU_gow}~|z{zz||}€„…{~…‹’’Œ‚seXQMMO]ju|€„†‡ƒ€‚‚‚}€ƒ†ˆ„zxsme]^bebZSQPE8004641+*,8J]de]RB40///3EXk~ ®¶½¿¿¿ÀÆÐ×ÛÝÝÞÞÞÞÞÝÜÝÝÝÝÝÝÜÒ»–rUJ|§¹º´·´¯¬¨©§Ÿ‘}cD/-+,4@KSY`p§ÎØÙÙÙÙØ×ÖÖоˆ”˜™¡¤©³µ­¢”†€wnf]VSXv€zumhilqvtqpklnlkklnorrqqnjgcZVYlzƒ‚}qj\J@=;86B[ptmglfYHJLIDESbd\K<84&
		
+
+	
+
+		
+
+		
+
+
+
+
+	
+
+
+		
+				
+
+
+
+
+
+
+	
+
+
+
+	
+
+
+
+		
+
+	
+
+
+
+

(i–©©ªªªªªªª««§­­­«««©««¬¯°°¯¯­«°²¯¬¬­®¯­¬­¯¬­¯°¯¯®®¯¯°°±®­«¯°°°±³±¯­­°®°²²±³µ³³±²´µµ´´¶µ²°´´¶eddddeffecfgghhgededdgfa`^YRL=:9751-+( 
+
+	
+
+
+		
+
+											
+										
+		
+																
+
+
+				 %/5=B>0-)+,>NTVQFO^kqsspikicX_`]VL?ELOLE???BEEDP\abUEDBHO]bowxxwxww{z„…‚~ƒˆ‘”‘„{uni`fmw~…‰ŠŒ‹Š†„‚…†„}„‰Šˆ‡‚|zvm^`caYVUTRJ?6.23420,15JZbd_XJ93.0049IZw¡«³º¾½¼½ÅÐ×ÝßÞÞÞßßÞÝÛÜÝÞÞÝÜÛѶŒiQP‚©·¹¶µ±««¨©§Žv\?-,++*39<APh¡ÊÖ×רÚÙØØ×줙˜›š £ ­« “Œ‚yqg\WOW]swxqickjqrnjklpttusmoqrsvwvqkf\LNSp}„ƒzkaLIGC=9:Wmmca`YHCHOOHAN`b\L><5$
+		
+
+
+
+					
+
+
+		
+	
+
+
+
+		
+
+
+
+
+	
+
+
+	
+
+	
+
+
+
+
+
+	
+
+
+

+m˜§¬­ª¦©©¨¢«ª«¬¬­®­¬©«ª¬®¯©®­¬¬°²°¦¬­®®­«­ª­©°¯¯¬¬­®®®®¯­¬«¬®°°±­°®±¯°­¯±³¬³³³ª±¯µ´²²³³³³´µ¶¸fdeebdee`befdffededdeghgghfa[SJC88989:2(

+		
+
+	
+
+
+															
+
+			
+		
+																				(1:ADD>3,*()2DKMFDRgsuuuqonjdaehfaR>9DKOMJJNPTWX\ac]J=9?FNW`hoqrtvsw|ƒƒ„„ˆŒ‘“‰„‚€~ƒˆŒŽŒ‰ˆˆˆˆ‰Š‡ƒƒˆ‹ŒŽŒ‡‚~zrkhd][X[ZWPH<./122257EV^^]ZULB:63357?NlŽ¢©¬·º¸¶¶ºÎØÜÞÞÞÞÞßßÞÜÝÝÝÜÜÛÛΰ{`OZ‡¨µ¹¶³°«©©¦¤™‡qV;--,*)*-/1:^˜ÂÑÕרÙ×ÖÔÏį¡Ÿ¡Ÿ¢¢¡¥«ª¤“‹€vng]TQT`mw~wmdjnpnjgdgkqwxxurqqprssqmhd\SFNi}…ˆ‚yjddcWF;6QeaUPNG>:?EF<9EV[VKA=5!
	
+
+
+
+
+	
+
+
+			
+
+
+
+		
+
+
+
+				
+
+
+
+
+		
+
+
+
+
+
+
+
+
+
+		
+	
/r𬮭ª¨©¨¨ª«¬®®¬¬­¬¬ª­¬¬®¯°®®®­®¯°°¯¯®¬«­¬¨­°°°±²°­­­­®¯®¬®®­±²±°±³³³²²´¶³±²µ³²²³´´³²³°²´´´¶ºgeeeecddccfgfeedeffffbgghihdca\WRIC9;<951+%
+
+
+
+				
+
+
+												
+
+	
+
+
+																
+
+				$4CKNLID>820-5?DB?>Shrttsookfb]diifV?79AJMOSVY]`bded[K79:ENV\cigfpsux}€€ƒ…‚ƒ‚ƒ‡‹’’ކ„ƒ†‡‡‡‰ˆŽŽŒ‰ˆ‰‰Ž‹Ž‰ŠŒŽ‘Š‚~wsrogdedb_\UL>../0+26H]iiZNLKIHE@;587:=^ƒžª¬³¶µ³°¼ÎÙÜÝÞÞÞÞßßßÞÝÝÜÛÛÛÚÍ­}XNc‹¦±·µ±±¯¬©¦ “€nT:,-)+&++--4S}¢³ÀÈÏÑÓÐËÁ¯§ £¦¥¥¦¢¨§¥™‹yda\UKXdmv{~vioswxvnoqttvxysqosnoppokgie`XRQi{ƒˆ†}}~oUJ8O\WEB9400/01/'9HNMB4:3

+
+	
+		
+
+
+		
+
+
+
+	
+	
+
+			
+
+
+						
+					
+
+
9z­­©ª«ª¨§©­¦¯®¬¬­­¬«¯©¬°²±®¬¬¬­¬°±±°°«®¯®©°­°±²²³°®©­¯°¯¯±±®®°±±´³±­³°¶´±°³´³²³³³²³±´¯°±²±²µffededccdefhgeffgfefeeeghifghihfa[TK@<:;:950*%
+					
+
+		
+																						
+															
+
+			,ASYUOLJGC@><9>>;;GUcjmnnmkgb^]agihV;017@HPVZ\^adde`WLA>>EMT[_cbciotw~€~€‚†ƒ‚ƒƒ‚…‘ŽŒ‰‡†…†‡‰ŒŽŽŽŠˆ‰‘’“‘Ž“‘ˆvutnggpnfb_WM>,./002B\rvlVC@AEJJHB=9758Ks”¨­±³³®¯ÀÒÚÝÝÝÞÞßßÞÞÞÞÝÝÝÛÚÚеUKiަ¯µµ³²°­¨¡œŽ|iQ9/-,*,++,,0@Wo‚’¢°¸½½¸±ª¥¦©¬©¦¨©§¥›„}rc\TNQcty}}}slquy|zy{~~€~}yxuuvvuutrpnkga[UPcs}†††Œq]NOVO@92.+))))((.;AB955/

+		
+
+
+
+
+
+
+
+
+	
+
+
+	
+
+
+		
+
+
+
+	
+
+				
+		
+
+
+
A~Ÿ¬¬¨«¬¬§©¬­®­ªª««®®¯®­­°±±®­¬­®®­¯¯¯°°¯¯°±¯­®±±²³²¯®®®°°°²²­®¯±³´±¯¬±µµ³²±²²±°³³²³³²´´µ¸¶´±´geeeedddddeeefffgcdafefghhhfhkjggeb]XSM>;:;7652111)
+
+		
+
+			
+
+			
+
+
+
+
+
+
+
+
+	
+																		
+						
+
+	
+		$4GWYSNKKJJJIHDA>9CNY_bekihf`XXX`bhfU71+.2@LTVWW\\\[]VMFECIMSWXXYZensw}€~y~€€~ƒ‚‚„Ž‰ŠŠ‰‡…‚†ˆ‘ŽŽˆŽ‘””””“’Ž’’ŽŠxrlfaiqohd^WL<,/011=On~tbK444?FIJGC?975CZ‚Ÿ­²²°­¯ÅÖÛÝÞÝÝÞàÞÝÞßÞÝÞÞÜÚÚÓ¾‘YYo“©°°´±®ª¦£Ÿ˜ˆqaL5.,)()++**/15;DN_p~‹’– £¤¤ªª©§¨¨¥~}vlbXOV\mz|~{ttswszxy{}{{{}wxrxutrtwurrpnhd[VQXap~~snl{ƒwfUQRH92+*)&%%$%%*.262,1*
+
+

+
+	
+
+
+	
+			
+	
+		
+
+
+	
+
+			
+		
+
+
+
+				
+		
+
FŸ¬¬§ªª«§«««­¯¦«««¬¯­­¬­®®­°­­®¯­¬¬®®¯¬­­®¯­¨®¬°¯±±°®¯®¯¯®°²®®®±³²±°¬²µµ³³±¯¯¯­³±³°µ²¶´´´´µ¶µeffeeeegeeffcefeffdeghgghhhefllkjjiigd]UNI><=><=@@8,%

+
+
+
+	
+				
+
+
+	
+
+
+
+
+																								
+				)6FPPLKKKMNMOOI@?CJRZ_beiieaZQOU]deaR<5/*-7FOTTUXZXY\XIHHJMQRSRSTWajoty~}{wz|„„‡‹ŽŽŒ‹‹Šˆ†ˆŠ‹ŒŒ‹ŒŽ“–—–””•“ŽŽŽŒ‰tkb[`inmiebYM:100.3Dh|lT=2028=BFEC@=::=Nh¦¯­«¬²ÉÙÝÝÞÞÝÞßÞÝÞßÞÝÝÝÜÛÚÒÁœraw—ª°²°¬¨¤£¢œ‘~iWE0,)'%')))+-//0/26;B^lŒ•¡¤©«¨¨¨§¡–…zvqeYQN]kv}~}wrtx|€}z|~{xwxvvvy{wsw}zwvsrmic\VIN_oofNRamom_OJIB2*(('&%%##%'*-.-+-#
+
+

+
+	
+
+			
+
+
+
+	
+
+
+	
+
+
+
+						
+
+				
+
+
+
+
+
+	
+
+
+
+
+	


L† «­¬ª¨©§ªª¬°¯­¬ª§ª­®««®¯°±¯¯®®¯¬¬®®®¯®¬®°¯¬®®®­¬¯²±²²¯¯±±¯³¯¯®°²³²°°³¶µ´µ³°°°²³³´µµ¶·¶µ´´´µµddddeghgfcggeceeghgegggdhghchkllkkikkjie_ZUNH9=9<?<9752,%
		
+											
+
+
+																	
+
+				
+
+	
+"-3=A@?GLOPPNSQL9=ELNY]^afea\UIGFR[[VLB<3*)3<DIILRXZ[`\PLMORSRPOOQSZZdlqu{{|{}€„‡‰Š‰ˆ‡……‡‰‹Œ‹‰‰†„…†Ž’”•’ŽŽ‹‰ˆ‹Ž‹‰€qj\^alnkklkcT@01/19_|u^F?344757:;<<>>=?C[¡¨¥¢ªµÌÛÝÝÞÞÞÞßÞÝÞßÞÝÝÜÝÝÙÏÀ¡y€›ª«¬«¨£¢ž“…q\N=.*($#$(((*,..//.24F\•™š¡§ª¤£Ÿ¦¥œ‹uog[MORev{}zvrmst|||{{}}uvwwusqyzujuzzwwrtmkc`YL?OZ\ZJ<MORSH5>D<-)'&#&&%#$!%'(*,,+
+			
+
+		
+
+
+
+
+		
+
+
+							
+		
+
+		
+	
+		
+
+
+
+	
+
+
+		
+\£«¬¬ª¨¨©ª¤­©®ª«¨ª¬¯¦«©®®¯±¯ª®®®­­®®©¯°¯¯¯®­¬¬­«§¯²´²±®±³²°´®°¯¯­´²°­³µ·³¶µ²°±²´´´µµµ·¶·µ¶±²´eceecfgfeeghfcefgjgffefhhghiiikklkkklmnmjed`XOF@;>??@@@>90&

+	
+
+
+
+
+
+																						
+					
+
+			
+
+
+
+
+
+*0249<>FPRRTVXYOA;GPV[^_aab]VNE=<AJMHDC>6+)/5886>HRYac]UUVWUSPKEMUYYVYimqwz}€}yz|€„†ƒ€~„……†…~{{z|‚‡ˆ‡ƒ€{zz~ƒŠ’–“ƒzmggmswuttsj[E6215OpˆmSGA=;<;6/559;?AA@AR†¤­£¢¨²ÉÙÜÝÞÞßààßÞÞßÞÞÞÞÞÝÚϾ£†„Œžª­­©¦Ÿ¢Ÿ—ˆyiVF8,+(('())()+,-....:Nv’£¢ ¢¨§¢ŸŸ¡¡”„wldZQHLZo~}zqppuy{}}}|}{xxywtrpuwporuvvutsqldc`QA@ITVG8AFD@5/5?8)'%$$&&%$$$$$$&)-)
+
+			
+		
+	
+
+
+
+
+			
+
+
+
+
+
+
+
+
+
+			
+
+
+		
+
+
+
+
+
+		
+
+	
+
+"e–§¬«¬«¨©«««¬­«©ª¬¬¯¯±®¬¬­®°°ª¬¬­¯­®®«¯²±¯±°®¬®®©«°´²°°±³´³²´´±°­±³´²³´´´´³²±²³µ¶³¶·¶¶¶¶¶·¶³´¶gdfecegfecffeddfhhgfgfghgghihgggkkkillmmljjieb]VPGC??>@B@<5/'

+
+
+
+																							
+							
+							
+
+
+".2/248;DOSTX[]]TEGL^jnmlkklgSNA<7;?=;98<81*+---54?ER^a[WYZXXUPGHO_c_X_hjjsw{}xtqrtwywttuwxz}~}yrrqolqtsrpoppqrtmzŒ”—–‡|rswz}{susk`Q?>7L`u€ufUJFDCDB=;9;=>=BCC<a–µ½²¢§®Æ×ÛÜÞßáááààßÞÞßßàßÞÛÓ¿¥‰…ŒŸ­¯®¬§¤¢‘ƒshRC60-,+*'**)(**,-.*<Lp §¦ ¡£¢Ÿ™–”…yk`WMKAQbs€}yukotwwy{|wyv{wxyxqtqpoqrsprutlrnmgfbU=<:HMD8@@C=4,6?6&%$##$$$#%#$"#(,'
+			
+
+				
+
+
+
+			
+
+
+
+
+		
+
+			
+				
+			
+
+
+	
+
(i™§«­¬¬¨«¬¬ª­¬«©ª­¬¨­®®®­¨­­®ª«¨¬¬®©°¬±´²¯±°¯­¯®®®²³°ª°²³³²²³²²°¯±²²²³µ³²®²«²°¶·¶´¶³µ·¶²µ³µ±²³hgggegfefgffggffggfgffhhfghhhgghjjihjkllnnmllljfaZUND?<AA@?<6.#
+
+
+
+	
+			
+						
+
+	
+			
+
+
+
+	
+														
+
+)212225:BMSV[_]\UIM^nz€ƒ…†…ziVD99:<=:45761)(*-4:=:<EVZYY]\XZZQCJ\hkd^aghhouy|xrmjinqnkmopoorutvqkgfehmstuvwvssuvutwy‡–•†xz|~{srphf\TQUapush^VOKIIJHDAABCA?ADFMr©ÆÌ½®¤©ÄØÝÝÞßáààààßßÞÞßàßÝÜÖÈ©Š†‹ž­²°¬©¥Ÿ–„xgR<8320.*)*+*())*-.8PlŠ¢ª«©¦ŸžžšŽ‡‚{uk^TMJGEVjw}wpjp{{z|€|uxzyxxzwvtspoqtsqrtspppnlifWB:6;DA?@FFA4+6=4%##"#####$$$$$%(+%										
+
+	
+			
+			
+
+
+
+
+
+
+
+		
+		
+
+
+
+		
+
+	
+
$j›¦«­®«§©ªªª­­ª©«­«¦©«¬®­®¬«¬­ª©­®®°°¯°³±°°¯®¯­¬®¯°²±°°°¯´µ´³´²°¯¯±³²´´²²³²²´·¶µ´µµ²²¶µ´µ·¶¶µ¶fffgggfdggghhggdgghhgghhghihggfijjhghhklmmljlmmlifb_[TMA?>>><94.( 
+
+
+
+
+
+
+	
+
+									
+
+			
+
+
+		
+
+									%/3354/48AGQVY[YXTLXgwƒ‡Š‘““‰ydM@58:981.22.'),4;CGA4>FRV[]\ZYZQBQcmnh`bed_msvwrkg`gppe`agihhmlmlg_[Vadopuxyzyuuvwvuuws‚Œ‘‰||z}~ztrokic_ciqvob]UUQONMMKHGGHHC=AFLSŒ¼ÐÏÄ·­¦ÅÙßÞÞßààààßßßÞÝßàÞÝÜÚÍ®‹‡ˆš¨¯°­ª¥›•‹ˆzhUH@=;852+++,()&*)7Eh†š¨­®ª¥ ”‰vtjf\XMGDFDZoy}rnm~Œ„{|~vzyzuywxrollmrpurrrtmrnnhigZF?:@CGJOTPK9-58/%# !""!#$$##"##),"						
+
+
+	
+
+
+
+
+	
+		
+	
+
+	
+	
+
+			
+
+
+	
+
+
+	
+
+
+
+jœ¨««¨«¨¨§©§®­¬§ªª¬©ª©«­­ª­ª®¯¬ª°²°­±­­­¯°¯ª««©¨ª«®®³³±¬°µ¶«³³³±±®¯°²¯´²³°´²¶¶¶°°±µ³³µ´´¶·¸¸·´eecfeeefgffgffgggghigffefhijjigijjhhhhjliijjllkmljhhhd]UPJ@==@@>82-*'#
+	
+
+
+	
+
+
+					
+
+	
+
+		
+
+
+
+	
+
+			
+						
*12365039@FNTVUUTRU\k{‡Œ’“——„q]E:7:96--/.+)*.8>IPG;;@OZ\\[[][QJXhnmica`Z`muspiea_fnmaRX^adgjjgcYQPXcmprvy{{xuvwz{|{vrs‹Š‚}y{zvvsolkhhn|}uf[WSUVUTVVSPONMKF>BIOm ËÖÒɾ¶¶ÈÙÞÞÞßßßßßßßßÞÝÞÞÞÝÝÜÔ·…–¢ª­­©¥Ÿ—“‹|h]QRVXRJ@<82.,,+,2B`~˜£©¯°ª¡žž›”…uneZXQH>=BE^s{zwx“¯²¨•‚„€}{|{{xvwsojlqtwwwtqstqplhgeXHMMIEKU`gbU>232+%$&)**(#$$$##"#%+!
+						
+
+
+				
+
+
+		
+
+			
+
+
+				
+				
+
+
+
+	
+%m§©¨«««ª¨ª­¯°­©ª«­®«©«­®®¬¬°²¯­±µ²°°¯ª¬­¯®ª®¯®¯¯°®®±´²±²´´µ³´´´³²²±³µµµ´³µ·µµ´´³µµ´³³³³³´·¸¶µfefgfccdgfedffghhhijiffegijkkjihjjghijiijjiikiiikllkkkheb]WQJ=C@>;::85,!		
+
+
+						
+
+		
+				
+					
+
+								+0013428<BGMPRSROPT]m|…ŒŽ‘’”‘‹}kWB?>>:511/.,,-6>LUL?<>O[\W[[^ZPI\mnjhea^Zdpurlic`\ab`^ZX]_eglnmd[LW_hpqrvx|xzuxy||{xrmnp†ŽŠ‚€zzruvslkijlzƒ|n`VUTUTVXYYURRPPNH@FLUz°ÑÖÔÌÁ¹¶ËÙÜÝÞÞÞÞÞÞÞÞÞÞÝÝÝÝÞÝÜØÂ˜ƒƒ“ ©¬©£¤£–‹|qkgdigfe_ZSI?63/6?`|’£§ª®®§Ÿ˜•“Ž‚wnbZRJ=62>Hasyzyv›¶ÉÍ𞍇|}~v{xxtsntxwtvwtoqmkjkce`TEQUN@JWckcWA0/)'$'*-/-.*"##$"! '*
+		
+							
+							
+
+
+
+		
+
+
+	
+
+
+
+
+
+
+
+
+
+,s¢§§«­­¨¬¨«­­­¯§­¯¯¯¬©ª©¯¯¬¬¯°¯¬°´³«°¯¯®®­¯«°¬°®°±±¨¯­²±³¯³¯·¯µ²´²²®µ·¶¶´³´¯´³µ³¶¶µ²²²³®²±µµ´µeegggfdefefgiihhhijjkigedijjjjiijifhjjihjkijjighjnnllnonmiea[TLH?@@A@>91&


+
+
+
+				
+																													!)..-.12;BFIJLNOLGFP]q€‰Š‰ŠŒ‹‘ށm[GDCCC?9674.,+2;NZQB==NZ\\]_\WOH]noifd`][hqvtqkida`_YZ[^cfilpwtg_^_clrsvwy|~}|{{zzvrleciŽ‹‰„zwwwrlklnyƒvfXYYWUTUXYXURPONMGAGM[Ž»Õ×Ô̸ºÎÚÞÞÞÞÞÞÝÞßßßÞÝÝÝÝÝÜÜÚÌ«ŽŸª«¦£¤£“ˆ|v‡†tmswvsmd[PFAANv’ ª­ª©¥Ÿ™Œ‰…|uk`SI>500;Nbpuzz—¶ÍÖÖÒÇ»ª’ˆƒ‚€€}}ztvwy|wrssqomkiihfaZOINVN?DR]aXK=.+%%$&(+,-/-)&##"""()
+		
+	
+
+
+		
+
+		
+
+
+
+
+	
+
+
+
+
+	
+
+
+	
+
+	
+	
+
+
+
+
+

-{¤¨¨ª®¯°­¨ª««°®¬¯²°¯¯¯¬­¯±®®®¬®¯¯³±®¯¯®¯¯¯°±°¬¯°¯±±°¯¯¯±±²³µµ···µ´°¬´¸¶´±³²¯´¶µ´µ¶´²²±´µ³²´´´¶deeghhgfecfijiifgghikigggfgghiiikjiijhhhikjkkjhgknmkmnnnnjiigc_[UIC?@=<95/(
+
+
+
+
+
+
+
+
+
+
+														
+
+#),-,++-7@EGGFGHD=@GYr‰‰……†‡…„xfSIBA@CFC=7880.,48KWOA?>P\][`_[RNFUdifa\\V]fmqw|zwocfghikorvxty}xjdaa_hnrvvw{||{xtrnofhZ_c}Œ‰†€zywrlqu{‚„~nZZ\\TUSSTTURLKHFEC@EHo¡ÇØ×Ð̸¾ÒÜßÞÝÝÝÝÝÞßààÞÜÝÞÝÝÜÜÜÓ·‰sŠ›§«©¦¤ ˜Ž…x•¡¢vxz}{wrj_UV\… ¥ª©¥ž•‡€|ung]RF77112EVennmŒ¯ÊÖÙÙØÕÐÁ¬†€ƒ}|zzuyzzvtrqmohgfedcb[PPNQVYDGKJG>.+)'$%#$$%$'(-.*$#"##('
+	
+
+
+
+
+
+
+
+
+
+
+				
+
+
+
+
+
+
+
+
+		
+
+				
+
+
+
+
+
+
+



+
+0{¦§¦ª«­©ª©©©¬¯°¯®­¬«±±±±°¬¬¬®¬­­¯±±©¯ª­®°°¯°°¬®®®¯±±±­­­®®³³³¯µ·¶¯°¬´¶µ²³´³¯´µ¶´´´²­³³´³³±µ´¶¹eedfghigdddhfijihhijkihhhhegfgijjkiiiiihijjklkjklllnnonnmkkllmkjf`XOE@=??=:60(
+
+
+
+
+
+
+
+
+					
+													
+					"&),-,()/9@EFHHF=::DTn}„…„„†…lT<2/7<>BDB>8699426=IQJ>@IV__]bc]TMDGW_`ZZWT_efnz…‡‚}wrstwy|~€}zskeea\aiossuuvvurmikkjbWZat†ŒŒ‹Š…|vrqw~„‡vgZZ^][XWWWWUPKIGDBA?BK}³ÏØ×ÓÌĺÇÕÜÞÞÞÞÝÝÝÞßßßÞÝÝÝÝÝÝÝÝ×Á”z„•£©¬¬¥™‹‚x„ ¯³¦’zx€ˆ‹‹Šƒuh_oޤ¥¥ ˜‰„{tkcZRJA65668=N^iniyŸÃÕÙÚÚÛÚØÑŵ¢”…€|xzzz{yxwtqonmjfgdc`VSfrsurfROH9-&%%#"#$##$#$&+/-($#$$)&
+
+
+		
+
+
+
+
+
+
+	
+
+
+
+
+
+
+
+
+	
+
+	
+
+
+	
+
+
+
+
+
+	
+



+7|¦ª¬¬¬¬«¬®®©«­®®­«­°±±±²®««­®®­­®°°±°®­­°°¬®°¯¯±±¯²³°­°¯®­±³±±´¶µ³²³µµ³²´µ³´µµ´¶¶¶³²µ¸µ²³´·¸¹»geeffgihhhghijjiiijjjikkiiihhhiihjiggijghijgjkkklllmnnnlllkkmmmmmlgb^YQDD:=>=:61)
+
+
+
+
+
+
+				
+
+
+
+				
+
+
+								
+
+		
+	
+
  %',.-*.1?BLMLJFCCBPft|{y€„|lR2/'.2<?@A?=81;;427=GMG=FQ\ba`ee`XQHKNZZYRSUekhhy…Їƒ€~~~‚‚€|se\QTWZ\bglgmijjploillg_WOMK_s…‹‰‡…‚|uts{€†ƒvha\]^]ZYYYWYUSNJGB<<;BS¿ÒÔÖÓÌÇÆÎ×ÜÝßàÞÜÝÝÞÞÞÞÞÞÝÜÜÝÝÞÝÚÉŸnŽ›¤©«¤”Žˆ~o„Ÿ¬³¬ƒw…“ž¥£|z—™œ”‡vtqjbZSNCB;989:=ATdkmtˆµÑÚÛÛÜÜÛÚÙÕ;¬˜~}rwwzyzsxurjolkfec_YX\}Ž„tfS7-$%%#!"#$%$#"!(--*&"$%'&	
+					
+
+
+			
+
+
+
+
+
+
+	
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	


+

?~¦ª«¬ª­¬­¯±«ª«ª©«¬¬­­­¬¬«§­­®ª­­®±°¯°®®®¯¯¯®°°±µ´±³²°­±¯®«±²±±µ²´³³´´±±³µ¯´¶¸¹¸¶µ¶¶´¸¹¶­³¶¹µ¹·gfeefghhjkiihhfghihhijlkghhiijhgghhghjkkjljiiiklmmlmklmnmmmljllmnnnmljbZSJ??CCA?:3(
+
+
+
+
+
+
+	
+
+
+
+
+	
+
+
+
+
+			
+				
+							
+			
+
+
   !$),-.1:CQUTSPKHEAG^jqqqw{mT0+**/5>FHGC?::<:315;DGCDM]ejiiifb^WQQV[]VMKZnwuru€„‚}€ƒ„‚€€ƒ„~saNAFILRY`ffdhjlnmmoqmi`RDDAAHl}‡…„‚~wvz|€…ƒzg_]]]]\ZZ\\\[ZVQLF?:;=@^œÉÕ×ÖÓËÇÉÔÚÜÝÞÞÞÞÞÞÞÞÞÝÝÝÝÝÝÜÜÝÜÚϧsy‡’¤¨¥œ’ˆzs‚™¢§£™‰ ­µ¶´« —“‘‹†”|lfc_XPIHD??=;;<>@DXjnq{§Ç×ÛÛÛÛÛÛÚÚÚÖÐÄ´žstvxzyyxwsqnljgeaYUXw‘ Ÿœ›•‰{eK.'%$#"!$+-&"!$'**%"#%)$
+
+					
+
+
+
+
+
+
+		
+
+		
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	
+
+		


H‚¦ªª¬­«ª«¯°®­¬ªªª«­¬®­ªªª©­¯¯®¯¯°±°®°­¯±°±±²±±³µ³±²²²³³³±°°°²³µµ²²³³²¯³¶µ´¶¹ºº¸µ´¶·¸¸·¶¶µµ¸¹¹·ffecggfgjkjhgfeeffgcfhkjhhhijjhdffgiihjkjijfjijkllmlkkmnnknmllmlljlmmljhe`YQN@=<><81(

+
+
+	
+
+
+
+	
+
+		
+
+
+
+			
+				
+
+
+										
+
+  !!!$&*.5@LW\]YUNDBAHU`ffdkn^>,((*5;GMJFA><;:42168ABKQ`koqolkhc`]XZ]acZJOax†…€{suurpy~€€}‚veQ<?BFEGJNQTW[`eilpqrmc`POOTZeqƒ„}{yz€ƒ„|lb\]]\Y\\ZZ\^]ZSLGB<2:?Mm©ÏÖÕÖÑ̼ÊÔÚÜÝÝÝÞàßÞÞÝÝÝÝÝÞßÝÛÛÜÛÚÒ®yyƒ–¡¦¨¢˜‰wdw†‰Š…€~|¤¯·¹ºµ°ª£œ‹ŒŠq_KLNLEC>@?>;;:==AG]oqq–¼ÓÚÛÛÛÛÚÚÚÚÛÚ×Õλœxyvvvutvqupomkfc\VWtŸ¦¡™š”‰y`A(%#""#%.2-"!!"!'($ "$&$
+
+					
+
+
+								
+	
+	
+
+
+
+				
+
+
+
+		
+
+
+
+
+		
+
+
+
Q‡¨ªª¬««¤©¨¯¯®¬««¬«¬¬®§©¨©ª®®¯¯°¯±®­¬­®±¬°¯±ª°±²¯®¬°®³±´²²±±±±­´µ²²µ³³¯´°¶´·¸¹··´·¶·¸¸¶¶µ¶µµ´¸¶efeefgfgjjggfgehgegeijhhhhghjigghhhkjhikjiiijkkjfkmljklmmnnmnnmlkjjkknnopojd_YPI?CA@8/&
+	
+
+
+
+			
+
+					
+
+
+
+
+
+				
+ !!!!$&,5=GQY][UOE@>@LTZ[\_`R6**,3>JQSJ@;:8864227;?JWeouwvsolhdbbacegh^RRb}Œ‹€ung^iouz}‚€{jS?<?CDDCBAA=@EO]lv|zwph`bhnu|„‡‡ƒ|z{}ƒ…„se^\\\ZX[\YZ[^\VK@:986:>P‚¶ÔØØÖÒËÉËÖÛÜÜÝÞÞßßÞÞÝÛÙØÙÜÞÝÛÜÜÛÛÕ´rŽ–¤§¤˜‡vioyx{yz~†‘¤­µ·¸·µ·´¬¢š–†lXC?ADC?==?>::;;<?J`rs{§ÊÙÛÛÛÚÛÛÛÛÛÚÚÚÙ×̵ƒ{zxxvussttqomg_TMW€—£¦¡œ›š—’†pI*%""#$&+20+$"#$$$#! #& 
+	
+
+
+		
+		
+
+
+
+
+	
+		
+
+
+	
+
+
+
+
+
+
+
+
+
+		
+
+
+
+
+
+
+
+		
+
+W‹©­®­­­®¬¬¬®­¬­¬­­­­®­©¦¬°¯¯¯±°¯±²°¯°±²°®°¯­¯±±°¯¯¯¯°²²²´µ³³±°³³²³µ¶´µµ·¶´¶¸¶µ¶¸¶µ¶¸ºº¸¶·µ³µ·¶hhgfghhiihhgghhhhfihkkghhdgghijkkklkkgiikjiilllgjlmjkllkmonnnmmllilmnopoopnklic^XLE@@9421-&
+
+
+
+		
+					
+
+		
+
+
+
+				
+ ! !"!!$'()08BKMNH@;8<AEIJKVZN64.9BOYZUH:75321.23;GPXgqtwxxurmeeddehiifaTYd|ŒŽˆ{mcX\ceguz€|q\?<<ADEBEDB?<9?@Vm{ƒ}vmfbn{ƒ‡‰ˆˆŠ‡ƒ|zuxz}~{rfZYW[ZYXZ]]^]ZYMA54355:>[—Â×ÙØÖÒÌÃÌÖÜÜÛÝÞßßßÞÝÜØÓÐÑÖÛÙØÙÜÜÛØ¼‹w|Œ–›žŸ“ƒvgq|‡“˜œŸ Ÿ«ª³´´´¸º¶°¦˜ƒfZHFAAA?:99:9:::8AL^ms‡´ÒÚÛÜÛÚÛÛÜÝÛÙÚÚÚÙѶ‰{wxtuknlqlppjaTFNUlŽ•‘‹Œ‹€mN-&!  !%),,'!#$$"#!!$%
+				
+		
+
+	
+
+
+					
+
+
+
+
+
+
+
+
+
+		
+
+
+
+
+	
+	
+
+
[Ž«­¬®ª®¯¯£­©¨¨­­¬­­¬­®«¤­±¯«®®±¯²³°©®°®¬¬­¯«°­¯°¯¯¯«­®³±´µ´³³«³µµµµ´µ¶¶¶¶µµµ´µ··µ±¶¶º»º¸¸³¶¸¸³egggfhjjihehhhggijiijjhhiiiijllljkkkjjiiijjjkmlklmmklmkkmnonllmnnnnnnooononopqnnhaZREB<?>>6-%
+	
+
+	
+
+
+		
+				
+
+			
+
+
+
+				
+
+		
+ $"#"!!#"!"$#""(+39><70038>A@EKPLECDMXbf_QB61/-++,16>TcmquuvwxvsoligfgjlkkcV[g~ŒŠ€n^TTZa\`nzvbH99<AFGGFEA>;7:>Pgwyoeacqƒ‹‰‰ˆ…zrqttrk`UQPV[___aca``\UH9666558Ag¨ÌÙÙØÕÑÊÃË×ÜÜÝÝÞÞÞÞÞÚÕÐËÈÄËÍÊÇÍÓÖØ×Ùmu†’˜›”Œ‚uhq}’¤­´·¸¸·¶´³³±³µ¸º·¬›c_WRLHDA>;9:89:97BN\gt“ÃÕÛÛÛÚÙÚÚÛÜÛÚÚÚÚÛÒ·‰zvuuphjmmnmmbUG>JR\dmvxoeikmg\I1'!""!!#&(&!#$$$##"'$
+				
+
+			
+
+
+
+
+
+		
+
+		
+	
+
+	
+	
+
+
+	
+

 ]‘¬«ª«ª«¯®®­«««­­¬®­©ª«««­¯ª©­°°®±±¯¬«¬¬¬­¯°±²°¯°°®¯±²´´³³³´³±±²µµ´²²¶¶¶¶µ³³´µ··¸³³¶¸¸¹ºº·²·º¸³ffgghijihhiihhhfihhiijiijjkllmlhiijhhhkjigfgklllllljmmklklonnnnnpoomllnppponoqqpnkid]VPE?<<961*!
+
+
+
+
+		
+		
+
+
+				
+
+					
+
+
+
+	
+",+($$!###"#$#""$&&),++,,/49>><=?CEHR[dfbT@9/-*)&'(5@RamssqpqsuusojjhgcjlljdV\k€‡wgNKIW^[Uix}|kQ@69;AFGEE@>88876DQakhc_^gn…‘’‰ŠŠŠ‡„|moome^MROVYaec_dd``_]UF:788539F€·ÒÙÙØÔÍÃ¿ÍØÜÝÞÞÞÞÞÞß×ʺ¾¾»¼¹«±ºÃÈËÎÀkf}‘šš’Œ€vfp{—®µ¸¿¾ÃÄ¿»°«©¨¦¨ªŸx`ba`^VIE>=:966698IS`cl•¾×ÚÚÛÙØÙÙÛÜÛÛÚÙÛÜÔ¸ˆxrskjihhmjicYE?;JM[_iigTH89;:96/'!""#!  "#"!##$$##%("
+						
+
+		
+
+
+
+		
+
+		
+	
+	
+
+		
+	
+
+$a“¬«ª«¨¬­®®¬ª­««­­®­¨©¢©¨¬­§¤­°°­°¯¯«©©©ª®°±±³²±²±¬¯°³µ´¯¯¯³®­°³±´²°¯¶¶µ¶¶±¯°·´¸·¶·¹¶¹·º¹¸²·µµ´hgfghkjhdikkghjigegjgjjjjilnmlkihihgimlkjjiijklmlkmmmlklmnnmnolnlolmljnoonopmprqppoomhbYOI??@@:5.'
+
+
+						
+
+				
+
+			
+
+
+				
+
084.*(%$##$$$#" ###$()'&&'-2665236>GPZ_YN>71,)('&(.=Tajpsqnmlmnonlkjihhlmlke[\o„ކxdMHHQYWVeuxp]F879:@DEDB?;778649AJTWXXcnx†–—•’‘‘އ„~uomicWUX]bghgfdca_]]\TJ<87754;R’Å×ÚÙ×Ðò´ÈØÜÝßÞÞÞÞÞßØÈµ´±¬«¦ ¡­³³®·°–kaq‘Ÿ£ œ”‰ujn{•®¼ÂÃÅÅÅÅÃÀ»±¥‘‹ˆˆ…~kefikofZKA<86558;EZgibb‚®ÎÙÛÛÛÚÚÚÚÚÚÛÚÚÚÛÕºŒwrpomlkkkie_P@9=KU_gjibR6***$$&&$""###"""$####""!"&(!	
+		
+
+
+
+
+
+			
+
+
+
+
+
+			
+	
+
+
+
+
+
+
+
+
+
+*h–¬©ª«¬¬¬­¬«««¬¬¬­®®ª©¨§¦©­§ª®°°°±±°¯­­®«¯²²²²³²²°¬¯±³´³°®¯²®°³²²²±±³¶¹¹¹º¸´µ¶¸¸¶·¹º»ºº¹»¹¹¸·µ´ihhhhiihijlhgijhhdghihjiihlljjkkkfjgloniljkjjjkknmnmmlljoomilnonnoomljnonnopqqqorqpqqqmid`ZSLA=:9895,"			
+										
+
+
+
+;C<520&&#$$$%$##"" &**&%%%$&)+,.-.16;?B;53--((''&0;UfklppkiieefffgghhihlmkjeZ[t‰Š{jQK@KQQKbomaL56678:<ABA98752419<GIXagkxŸ˜—–”…ƒzvrlfedgjlmjgfed^]Y[VRNA44555?b£ÏÚÚ×ÓÄ©›–Á×ÜÝßÞÞÞÞßßÚͶ°š“‹‰˜œ™›ž˜v_u˜¬±®«¦ tqu…˜¯½ÃÄÃÂÄÄÃÀº± „†w}~}|{}~wl_JC5435:FVv„xc`a³ÌØÚÛÜÛÛÙØÙÚÛÛÚÙÖ¾vonnnjmnlhbVL@@BR]gmkgaR8&('#"#""##$%"$##$$$#!!!!(*"
+	
+		
+
+
+		
+
+			
+	
+						
+
+
+	
+
+
+			
+	
+
+

3r›¬ª©©ª««¬¬¬¨§§«©®®­«¬§§¦«¯±±±¯®°±°±±¯­°¬¯°°«°¯²¯®¬°¯³²±«­­®®°ª²±²®±±·¶º¸¹¸¶µµµ¹´´´¹»º´¸´ººº¸·¶hiigffghijkigihgikihigijigklijkllkjjmnmmmlkjiljlnponlllnonlkknnmjoomlnooooopppnoqropqssrqoke]TJC:DFE=4+ 
						
+					
+
+
+			
+
+
+
 4>??A>3)(&%$$$##"##'*)%%$##$%'*++,-///0/--,*('&&'8TiutsrodhhecdcbacehhiihhibY\z‘™“ˆwcPHFILS]d^O<434569;=@?=962/25;ELR[mnx‚“¢¦¢›—––“‰…~wqllmoppmifdeda]]\]ZSF63334Cv±ÔÚÙÕʯx¼ØÜÝÞßßÞÞÞßÜÖ̾­—‘{‚‰’™™u| ¹ÂÂÁ¿»«“uou…˜«¶¿ÂÃÄÄÃÁ¼º¬—‡ˆ”˜œžœ—‘Š‚ueTD;56<Qn”“‚pc^cŒ­ÆÏÖÛÛÛÚÚÚÚÛÛÛÛØÅuqonlklmie[RG?DKWblpkc`U:('&%$###$$$$"""#$&&$##$$$)+"				
+
+				
+				
+
+				
+
+		
+
+
+		
+
+	
+	
+		
+
+
+


;x««ªª«­¬««®®«««­¯±°¯­¬¬¬¬¯²³°®«­®®®¯®¯¯¯®°¯«°³²°­¯±³±±°«­®¯®²´³´²°°°µ¹···¶µ´´···µ¶¸¹´´¶·¸»¹¸¸¸ihigfehhhhihihgghhjjifiihgjljjjllijkmlkkmljfiklmmknnnllllmmllnnkiillmnnopnpooonppqqrrqsrrppolgaZRIFC@=95/( 
+
+
+		
+
+					
+
+
+
+		
+
+%.6?A:40,*(&%###$$%&&$$#"&&%%()$())))*)))(&$$$(*A_p{{|zsokkghgdX^^beedbaff`W`}™¤ ™‰wdSMDLQSSK<5///2588:8<=920.25@LTXk|€€~~¡¨¦™†’“Ž‡{vonloolie_cedddddea\P;412.M‰½×Ù×Ͷ–yt½ØÜÝÞßàßÞÞÞÞÜÙÓɽ±¢’†|zz‰‘’Žƒz{œ¸ÈÊÊÈÆ»¦†esx‡ŒŸ©±·»¿ÀÀ¹¹¯ ––ž¦§¨°²°­¦›}mZO=?BZv‡Œtpmf_³ÈÖÛÛÛÛÛÚÛÛÜÜÚÄŠqonkihhgbVOA><CKXdnso`icI+(%%%$##"$""!  $$*+)&*+'$*,!	
+			
+	
+		
+	
+
+
+
+			
+
+				
+			
+
+	
+
+
+
+
+
+
+
+	
+
+
+
+
+
+
+

<{œ¦¬­¬¬­ªª©®°¬©­®°²±°¯­¯«¬®®®¯ªªª««¯­®ª±±¯¯¯«±°³°°°±®­¬±ª¯­°­µ¶µ±±°±®µµ·­¶¶´´·¸µ²µ·¸³¶¶µ¶¹´··¹¶gijighijihggijeggijkgfhihhikjkkkkiijkmmljlkiikmnkillmmlkkmnponmkijloonlnmoppoooqpprrrrsrrqqstspke^WODCCD@<3* 
		
+		
+	
+
+
+
+
+
+
+
+
+
+*1110332-&%####"#%%%##&'$$&&$$%%%%%$%&%#$$$*3Haq{~€|tmmnkic`ab_dca^cba\Yd‚œ¨©¦˜ƒqbXRONID73..0/.3799:;<92/-16BMT]q‡‰‚xyˆ›¥§—“’“’Œƒ{sqpqrnid`aeeeegijgcYI7344Z›ÆÙÙÒ½ €qp¾ØÜÝÞßßßßÞÞÞÝÝÜØÔÐÊÁ¶«¡”ŠŠ‰ˆ‚{y‘®ÄËÌËÈõ‘how}„Œ”Ÿª³»½·²ª ™œ«µµµ·»¼½¹·¬œˆwh]XXbw}ssz{gTXv“²ÇÕÙÚÚÚÚÚÚÛÛÚÄŒmlmljhebXNB;::?GTbowtsvrV1)$%&%$#"##"""#(+./.,-,(%,-!
+
+
+
+
+
+
+
+
+
+	
+
+		
+
+
+
+
+
+
+			
+
+
+		
+		
+
+
+
+
+
+	
+
+
+
+
={œ¨­¯¬¬¯¯««®°­«­¯°±±°®®°¯­®®¯®«­®°°±²¯°²³±¯¯±³´³°°²°±±²±±¯­¯±³µ´´³±±±´¸¶´´µ´µ¶·µµ´¸¸¶¶¶·¹¸´··¸ºhijihhiiihhijkkjjjjigghfhhiilllmlgjlllmmllmlkjnonjmjjjklmmnqqllmkkmooopoooqrpnoqqprrqmqrrrrsttrpnmic]WQHED=:73,!
+
+
+
+
+
+
+
+
+
%,573.,(%$!!!%%%#"%% ##$#" $$%%$#%$#$%%-7GZhsy}vnqtsqlhhgedc`aa^VUTi‰œ§ªªœˆte\XTPKE=41.1/0258:;<<951*/5>DFIg‚zqp€ŽŸ£“zŒ“““ŽŒ†~vvtsspje[beecdbhhfe`VE79=p­ÎÙÕǪ†ynq‹¼ØÜÝßÞÞßßßÞÞÞÝÝÜÜÜÛØÓÎǽ´£™‚€oowž»ÆÊÉÅĹ–mot{}ž£º¶³®±  ¢µ¼¼»¸µ½´Àþ´£Œsmgksvwusxv`BN_z¥¸ÈÒÖÚÛÚÙÚÚÙÄ‘mikmlgaUNB;38766ETfvywc9-$$"&%$$$$##$&+.//-)'&$$+*
+	
+
+
+	
+
+
+
+
+
+		
+
+			
+
+		
+
+				
+
+
+
+	
+
+	
+		
+
C€ž©­¯®«°°®­®¯®¬­«®­±±¯«°°®©®«««®¯®®°­°±²±±¬°²´³³³´³²³³°±²°­°©±±³³´±±°³±µ³´®´¯µ´µµ´¸¸¶¶µ·²³³¸¸¹¹gikjehhhhiijkkkkkkhigiihehjkmlionmlmmlimmmnplloppponjjlnonnponoolknnnpppnnprpnnpqqrrnnorrqortsqqsusqmic\WPCCDD?6.%
+
+			
+	
+
+
+
+
+
(--//.+)&#!$#"#"###$$"" !#$$$$####%&'/7DQ]hqy{zvsuwwvurpkgccb_\XSTUoš¢¨©‡tg\WTOKHD?<82..16:::;;972.,2789ATkpldn~œŸŽu”’‡‚~zxvtrnhb_bgihfeeebee`P>;K‡½ÕØÏ·Ž|snr‡ºØÜÝÞÞßßßÞÝÝÝÝÝÝÜÝÝÜÜÛÚÖÐȸ¦Žxckˆ¯½Âÿ´—qlnv~‚ƒ‚Šž¶ÄËÌËÈÆÀ½»ÄÅÄÂÂÂÂÃÄþ¶¨’ƒ|vppqsrrpiTCESepx¦»ÇÑרÙÚÛِnhjmmh^QD<7479500@Vl{„ˆˆpF1##$')+,*&$#%(*--+)%"$$&*'			
+		
+
+
+
+
+	
+
+		
+			
+
+
+
+	
+
+			
+
+
+
+
+
+
+
+	
+
+
+
Lˆ¢¨¬¯®¯°°®®¬­®¯®¬­°²´±®°°¯ª¯±®ª­¯°°°¯±³¯°²±±²²²³³³²³µ´²²²±¯°±±±²²³±²²³´µ³´´´µµ·¶µ²¶¸¶µ¶¸¸¶¶·¹º»hhijjihhikjfklifklkjjjjjjkkkmlnpoooknnllmkmnlmoppooonlljnlmnmnonljooooppplnoomnoqqrpnoqrrqrrsrptwwurrrnmke^UPEE@<962)

+				
+	
+	

"'*,,+&""""""!"#$%%# "$#"#####$%&)03;DPZclqsrosrqqqqomg`ba]VSQU\}’™”¤¦™„rcWOMIEDDCB=7..0599:;8996/02789:FMRW_n€“›ˆp€Ž’‰~|~|ytqolba^dhjigfffffhfYCB]›ÈØ×Ŧ†vsnr‚¹ØÝÝÞÞßßßÝÜÜÛÜÝÝÝÝÜÜÜÜÛÜÜÙÑĪŒwe…¢±¸º»·ªogco{„Š™ªÄÒØÙØÖÖÔÎÌÌËÊÉÇÇÅÄÁ¾½¾¶ †ƒ}uknffc`ZL<EHW`dg}‹¡³ÅÐÕÚÜØÀmdgjje]OD986<>;002HSm}†ŒxT7$&'(+,-*&#$'(((((#$$%')&
+
+
+			
+
+
+
+	
+
+
+
+
+	
+	
+
+		
+		
+
+
+	
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Z§©­­¯¯°°°­­­«ª®®®¯°°²®±±°«±®¬«­¯±²²±³³±°±°²®¯±±®®¯°±´®²²±°°¯±²´´´²´³¶¶¶´µ´µ´¶¸·¶µ²¹···¸·¹·¶¶º½fgghjjiijlkjklhfjllkkkkjjnmkllmooonmnommmlllinmmnnlpqpmmmmmmknnmmopqpopqqponopoqrqpnloqrrrrrqqquxxuuutuuvsngaXLFBDEE<2( 

+
+		
+$'('%%%%# ""$''%"%%#"##$$$$%).103;DMT^ekmnoonnnmlke`__ZTQORn‹›œ¡Ÿ‘€l[RQKA8>CCA?:2.1379::89;8554678:;=@MZp‚“œ—~y‹‰ƒ~}~~{xsppkgcabgijihffeillaRK{¬ÏÚÔ¹”uusosˆºØÝÞßßÞÞßÞÜÜÜÝÝÝÝÝÜÜÜÜÜÜÜÚØÒ¼˜‡†™§°²±­¡†j`_et‹•ž²ÈÕÙÜÛÚÚÛÙ×ÕÓÐÊǾº¸¶·»´¢ŠˆƒztneZRLJECFGISY^chpŽ¥¸ÆÑÖÖÁŽledfc`XMC:;=CFD@?AEKTk{…z_=*('((**'$#$%&%$#((&'&&(*%
+
+
+
+
+
+
+	
+	
+
+
+
+
+		
+
+
+
+
+
+
+
+
+
+	
+
+
+
+
+
+
+	
+
+
+
+
+a–ª±¯¯¯°±°°­±°¬¬°±°¯¯¯°±°±°¯¯®¬­­¯¯³´´±±±³³³³²²³±­®¯±²³³´´´´³¯°²µ¶¶¶´µ¶·¶µ¶µµµ·º¹·¹»º¹·¶¶¶¸¹¹¶º¼ehijkkiijllkjjjhhgljjklllmmlljlonkmmllklllmlmnmkmnnoqponnnmlnnnmoppqooopqqqqpooprrqnoqqrsssrsrrrvvuuttuvuutsqle^UFFFB?:62+%



+	
+
+
+
+
+
"%')&#!#"'),-)&$#$$#$$#%&+24/04;?HOW^cffgkjkfda^[]ZXURO_|˜¥¢ ”nbVTOF89<EDBA@5102579989:9765533233;I`tˆ–˜“…y†Šˆ~x{}zxusnkifccejjjjihilooibp•»ÔØÍ¬}rssot¿ÚÜÞàßÝÞßÞÝÝÞÝÝÝÞÝÜÜÜÝÝÝÝÚÕÑ¿ŸŠ}‚„˜ ¡¡›xXTR]jx‡“¡®ÀÏÙÝÝÝÝÜÜÜÚØÕÏÇ»¢Ÿœš˜˜™˜‹ŽŠ„zpcIDAECJIHGORY`ht}‡®¼Æ¶Žj\_^]TOIB7<BGIIIIHJLPShsn]<)*&&"#$$!$%&%%%')(&'&&%)%
	
+	
+	
+
+
+
+
+			
+	
+
+
+
+
+						
+
+
+
+
+	
+
+		
+
+
+	
+	d™«­­§­­°±°«¯¯¯°²±°­®¬¯°®¬°¯¯©ª¬¯¯¯²´³°¨²°±²´³³²°®°°°¯µ¶µ¶·¸¶±°°µµµ²³®¶´¶¶·³¶µ¶¹¹·¸¸·µµµ¸¶·¸º¶¹¸dijjkkihijkkijlmjijkillmlkillklolijlkjhiknnmmnmkmnmnonmnnmmnnnnlppppnnnnooprpmmnosrqrsssrqrsssruuutsqtvvtutwxwsoh_WQFDDECA90&

+
+
+
+
+	
+
+
+#&%%%'(+.65.%"#$$##%%&).562-/26<AGNTZ^cefda[[ZZ[ZVTSPg†œ£ ™n^TUSK=::CJLLLG>4/.25899:::8665320/07Oj€Ž•“Ž‹ŒŒŠ„~{vx||ywvtpligefjmnnomlkmpqno‚§ÅÓӝsppoms“ÂÛÞßßÞÝÞÞÝÜÜÝÜÜÝÞÝÜÝÝÜÜÜÜØÏ̼ž†}€„ˆŒ…h]ONQ]n›§³ÂÏÔØÛÛÜÜÜÜÜÙÕÍ»§““–‘‹–˜—“‡€viWOKNPMFDDJPWakmmk{Ÿ£‚f]\[XVMF=:<EKNONJHKPOOV`_T;/,)&##$"!#$%%&'(('$%%%()#
+
+
+		
+
+
+	
+
+
+
+
+
+
+
+
+	
+
+				
+
+	
+
+
+
+
+
+			
+
+	
+
ešª¯­¬¬®°±®¯¯®¯²²²±¯±±¯®®¬¯²¯®¯®¯®¯±³³±²±°±²³³±²²²²²³³µ¶µ¶µ¶¶¶´³³µ²¯²µµ¶¶·¶¶¶¶¶···¸¹¸¸¹¹¸¸¹¹¸¶¸¸fgihihigfgkkjglljkklmmllljjkklmlkjkjklkgjjnmmmmmnnmnmmmnoonmnmmlpqnoommmnmpqpnoiprsstrrpqqrssqsuttsstuusttuvvwwvtpkfaZUHEDD@:5."

+
+
+
+	
+$(*-033,$#!$#"#&''*3:93-./136<AEIPVWUXYWWXXYVPMNOdŽ”„xdWKPUQC:8>GLOPOJC:1./3799:;:9764110/+C\x‰ŽŠ„ŽŒ‰xxtsuwwttqmjhhhknpooqpkmkmloo‚¥ÀÏȳŽkmmkes—ÅÝßßÞÞÝÝÞÝÛÜÜÜÛÜÝÝÝÝÝÜÛÛÜÖÍǺ‚{€€…†‡„‚€ynaSQPbrŠš¤±¸ÄÍÕÙÛÜÜÝÞÜÚÓÄ´­¯µ¶µ·»»¸²¨—‘Œ‹…~utulbXNKHIJW`^\]V\fd___^ZYUK>:6CKNQROH=HNQNTTTE=0/.+%%$# ""%$&&&%$$$#&')!
+
+
+
+
+
+
+
+	
+
+
+
+
+
+
+	
+
+
+
+
+
+	
+	
+	
+		
+
+
+
+		
+
+
+			
+
+
!hœ«­­­­­¯®¯¯°°¯¯±²²¯±¬¬¬­¬¯¯®®²®¬«°²³®³²°¯±±²­¬­²±±³³³²°²³´®µ³´³³±²¯²³µ³µ²´³¶³´¶·¹º¹¸µºº¸¸¹·¸¶¹¹ffgiihijijkkjijkklllmmlkllkiglmllmkikoommnonmmmnmlmonmmnpqommonnpqnpqpopqqoqpppqqrrsrrrrrqppqstsstrsttttsrsttwxxxxvurmg^UNJIHHA:1)

+
+
+
+
+
+
+
+
+
 &()**)&$###"#&(),5:81,,+-.0269<@EGHIMNOPQPNIFIL]oy{tk]NCIOUL?78BJMKLMJD<2./267789875420///8Pn€‰ˆˆ‡‹Œˆ„}wurpqstqnjggiiiloportrooooopq–®¾º¢}omlheržÇÝÞÝÜÝÝÝÝÜÜÜÛÜÜÝÝÝÝÝÝÜÛÛÛÕÈȼ¡z„††…„„…„~rf[VXdp}Š—¡©®»ÃÉÍÐÒÕר×ÑÅ´¸ÃÎÓÔÕÕÔÓÍõ§—š›œ›˜’‡zbZDEMTUUSMLLNQYba]YSG;8@JPQRROGDEMRUUTOIB=:71*'&$##$&&%$##$$&$'*(
+				
+		
+
+
+	
+
+
+
+
+
+
+
+
+
+	
+
+
+
+
+
+
+		
+
+	
+
+
+
+
+		
+
+
"l ¬®¬«­®¬­­¬¬¯®­®°±¯°°®¬¯±°¯±°±°®¯±²±²³°­®±²±¯¯°±°³³°±°®°³³µ´´µ³³±´´´¶´³µ·¶¶·¸¹¹·¹º¹¶·¸···¸¹¹º»ºgfhjjgjkjjkkjjjkllljihkllhjkjlmmlmljkpoooopklklkllmnnnnopqpnmoooppopqpqqrrrqpmrrrnrpppqrssrqsttsssrqssssrqsuvvwxwvwvwvspke`VOJKFB>:61,"

+	
+
+		
+



"%&&%#%!$$&'*,042/.-,,,-/.22348::;<>?@ABA?FFQZ[[WTK?KTUQE579FKMLKKG?;0..12444431221-,+7DaxˆŠ…ƒ{yutrqnrqphigijiglmnoqrqooonopq{€”¢žxomhc`n¢ÊÝÞÜÛÜÝÜÜÜÜÛÛÜÝÝÝÝÝÜÜÜÛÛÚÓÇÉÁ§‚y€‡Š‹‰„‡†‡„{qcXUVamy„›¡ ¢¦­²µ·¼Á¾¸¯¨¯ÂÒÛÞÝÝÝÝÚÔËÀ°ª¨¬¯®®®¯«¦œ‰nKMKKKJIIHGFWca[VHB6:FPTSSUQNHLNSVUURNKAA=6.,+)&%&&%$!""#$&&'*'
+		
+			
+
+
+	
+		
+
+	
+
+
+
+
+
+
+
+
+
+
+		
+	
+
+					
+
+
+
+
+
+
#p£­®¬ª¬§¬ª­ª««­««¬®®®®­¬¯²²­±¯°­®¯°¯­®²±°°±²°­®°±±±±±²²¬±³µµ·´·²±±¶´µ°µ°µ·¸¹¸¶¸º¹´¹¶·¯·³´µ¹¸¹·½¼ihjkkjijiihjjjkllkijegijjiikklmmjllklnoommppmlmlkmnmloppnpomnqponploooprrppppqrsrrssqqqqrtuusttsrsrqqutrqstvvutvwwxxyzyyxvqjc]SNLLJKIE:- 
+
+
+		
+
+
+
+

!$$%%%&'()*+-,..-,,,----,*+,-./146:<@ABCDFKMLHC<FWaZJ;37@GKLMKHC>:2.//00122210/.-,-AYq€„„ˆŒŒˆ€wutsstsstrolklliikmmmllnpomlnnpxƒ„{tpkcZ[k¢ËÝÞÝÜÝÞÝÜÜÝÝÝÝÝÝÝÝÜÜÜÛÛÛÚÓÆÊÄ«…y|‡‹ŒŠ‰ˆˆˆ‡}p`SNMM[iu€Œ–›”’’Ž‘’Ž–™³ÇÕÛÜÜÝÞÝÛØÓÊÃÁ¿»´´´¶·»¾±—xTIFFECCAADSb`YRE?8;FQVVUYXUSQPRUXYXWRMGB:963/-,+*)'$#""$&%$)%
+		
+
+
+
+
+
+
+
+
+
+
+
+	
+		
+
+
+
+
+
+
+
+
+	
+		
+	
+
+		
+
+

+u¦­®®®­¬­®®®­«¬ª«¬¯±°®¯®­²²°¯¯°°±²°²°®¯±²³³³±®¯°°³±¯±´³®²µµµ¹º¶²²¶··¶¶µ´µ¶·º¸µ·¹¸´¸¹·····¸º¹¹¼¼»ihikkiihhfiijijlljlkjijfjjjijjmmkklklklmljooonoppoooonpqomnmnqqqooqrrqppqlooqqrrstuurrrqrsvvtqsttssstuuttttsuuvtxyyxxxxvz{xvtpia]RNLNMHB;2(
+
+
+	
+			
+
+
+
 "$%%'')(*+,,-+-01100/-+)++*(/19<DEFDDEFEMKH:BL^fVA849@GMOMIEA><4.+././1320/,*',/>^w‡‹Š‰‰ŠŠ‡…wutvxxwwwutronmlhlnlehgmnoiklmowz{xtgpnh_UMd ÊÝÞÝÝÝÞÝÜÝÝÞßÞÝÝÜÜÜÜÛÛÛÛÙÒÉÈů‰v|„ˆƒ‰‡‰†Š‡vYOA@>DHWdp{˜™–‘‡‡{w‚–™¹ÎØÛÜÝÞÞÞÝÚÖÑÌÇÁ¹¯°£¬¯·¼±ŸVJ<:9:;<>S`^XQFA77<GMORUVTQMFHKQVWXVTOKFB>:3-241/+&$!"!&%')"
+
+
+	
+	
+
+						
+
+
+
+
+
+			
+	
+
+
+					
+
+
+	





6z¨®¬®°°±°°­ª®ª¨¨ª«°°²¯°®®°±®¯±²®²³´µ´©®­²³³³³±±°²´²®²´µ°³³³´¶¶µ®´¸·¶¶³¶±¶±¶µ·µ¶µ¹³¹»¹···¸¹»¸¹º¼ºhhfjiiiihijiiiikkkkklllkkkijkllkhjmnmkimopmmnoprrqpqponpolnonprroorusqppppoprrorrstusqpqssvvusqtuutusvuuuurttvvvvxzyxwvuxyzz{{vokh`YPOOLKF=3)


+		
+
+
+
+			
+
+
+
+ "&')*++++---133542/+**+)'/6?HJHIKKKKRYYRJJXbbP:69;?FMOKFB=><6-,,-+-010.,)&'+/;VpƒŒŽ‰„‚ƒ€|xtux{zyyywtusoononolihgmonnllnptvusonnkcYPM[ÉÜÝÝÞÞÞÝÜÜÝÞßÞÝÝÝÜÜÜÛÛÛÚÖÏÈÈŲŒx{…‰‰Š‹Œ‹…mN=;;;>AFR`qƒ’––’†‚}|ˆ”›œ¢°ÅÐÕØÚÛÜÝÜÛÙ×Îļ·±±­¨§ªµ¸µ¤S97778:DXb^ZSKB813:@ADIKJHC?>@EHLNOPPNKEC<515873.'%"#%'')+!

+
+	
+
+
+
+
+
+
+			
+		
+
+
+
+
+	
+
+
+
+
+
+
+
+	
+
+
+
+			
+



8ª­ª­¯°³³±¬­®®®°±±°°°±²±¯®¯®¯±³³³´´¶´´±­±²°²µ¶´±³³±±²³µµ³³³°°²³²µ¹¸··´¶¸¸··¸·µ¶¹ºººº¹·¶·¹»ºº»½»»ghikkihhjkjiiiijkkjflnmkkjjgkkjkllnonmmnpqonnjnqqqoppnoooloonprnmmqrqnomooolrrrrrprrrpopssuutstttruuwvuruvvuvwvqrtyzxuuuttxwyzwttuqkfa[MQLIC=71&
+
+
+
+
+								
+
+
#&*+)*,/--.025541.,-+)(/8BJJEHMOQXbgg]T[dcWJ66:;:DLMHB;97<82--)+,./-*+'*-./8?Xlz„„€}{zyxxvvy{{z{xvswusrrooonkjglgknmhkmoqnkmnnf]PJA^ŸÊÛÝÞßÞÞÝÜÜÜÝÞÝÝÝÝÝÜÜÛÛÚ×ÒËÇÅŵ•{|‡ŒŽŒ‹…nE<8::<=@BQas„‹‘’Œ‚|†’¢ª¬¬¶¼ÅÎÓÕÖר××ØÔÆ´¢¦©ªª¨¢¢£¯´¬”lC=999ANfvre\RI92,0222688730234479:;?A@@=92.4631,'&#$%(&++ 

+
+	
+	
+	
+
+
+
+			
+
+
+
+
+
+	
+
+
+
+
+		
+	
+
9‚ª­ª«¬®ª³³¯¬¯­®¨¯®®­®¯²³²¯¯®®®²³µ²´­´³µ¯²³²®´·´±³­±®´¶µ²²°°¯¯¬²®µ¸¸µ¹µ´¸¹·¹º·µ¹¼»¹º¹¹¶¹»¼º¸µ»¼¼¶hijkkihhlmhihijjlljhknmlkkklkjklllmnmooonoooooooponnmmnppoppopqrrrnnonoopoopqpqssrqpqpppsssuqsrtqtuvwxwvtvvuvvuttuvyyxsuwxxwwwvwy{{xsqke\XOMLJE@7/'
+
+
+	
+
+
+			
+
+	
+
+
+"%'),/110/126532//.+)-7@EECEILP[gmkecglfWH86878@IJD=97;=<95.+*+,,*)+0;DG>79?Q`qy|zzxvvvuut{z}|yuqwywutsqnmmlmjedlkhfgiigfiljdWLFBc§ÍÛÜÝÝÞÞÞÝÝÝÞßÞÝÝÝÝÝÜÛÛÛØÑÈÄÈǸ€‡Œ“’Œ‡sV>88789:<BOar|†‹ƒƒƒŽ¢®µµ·º»½ÈÏÑÒÎÊÇÃÁ¹«œ———˜œœœœž¢¨§˜{`TNJFGYu‡…€vhWD4./232..-+****+--,+,.//132/-..,*'''&'))(,+

+
+
+			
+
+
+
+
+	
+
+
+
+
+
+
+	
+
+
+
+
+
+
+
+
+
+
+
+
+



B„ª¬¬««­¯±²®¬¯­­­­«­«­°³³²±¯¯®®°±³µ²±±´³¯²´°®³µ³³³´´µµ·¶³³³´´³²²³´··¶·³±µ·¶»½µ·¼½¸¸¹¹¸¸º¼»¸·¹¼½¼½hhijjjihklkkkjjkkklhmmnnlikkliklllljmoomlnonooonmkkjmmqsrppqpnoprqnmnoooqrqorooossrpqqrqtuuvusrtuuvtvrwywvurutvvvvwxyxvuwxywxxyy{|{zzzxuolh]XKNLHC=5,!
+	
+
+
+
+
+
+	
+
+
+
+
 $)/4765455100.-+)-19;<;;<@DNX\\[]bf_UF86772:BD<96:>A@?;4+)(+'''/<]|t_G8=>KVhtusutspsrw{}~}zwruqrsssqmlejkhafjiedaaaa]ceb[OAGIv²ÒÛÜÜÜÝÞÞÞÞßßàÞÝÝÞÝÝÜÛÛÛØÒÆÅÇÇ»¢‚‚‚ƒŽ““Š}kX@<467657;MZiv}€†‡‘¦±²³µ»»½ÄÊÍÍÁ½¦š…{Š’•Ž‘‚‚‚ƒ…‚‚…ykdb_\_d’“’‰~hNF>=<>?:3/&'%&&)**++'+-,*+--)(((&')(&(((&-+
+
+
+	
+
+
+	
+
+
+
+
+	
+
+				
+
+	
+
+
+
+
+
+
+
+
+





I¬¬«©¨®¯¯©¬ª°¯­¬¯­­­­®²²°°¯¬««¯°²³³®¯¯¯­±­±®¯¯´±µ®µ²³¶¶´µµµ¶¶°´³µ³¶´´³³²¶¶»¼¹¸¹¹¸´¹²¹´º»º¶¸º½½¼¸gghiiiijhiklkklllmnpoompnjmnmjlmmmljknookmonoomonjjmnpsupqrqoponoponopopqrrrrppqrsrqqrstuuuuttsuvuwyvtvyxwvvvuuwvvwwwwwvuwywyz{zzzzz|}}}yxwtkbYTQOLHA:4-"

+
+
+
+
+
+
+
+
+	
+
+
+&.56655531/,-+)-03786678:>BGHHQUVRI@5565219=;9;@DEDDA82/-,*(*3FwœžyP;;:>GUiqtutrstux{}~~~{zvrppppmkiihgedfiigc^Y[]]^^XOD?H]‡½ÖÛÛÜÜÝÞÞÞÞÞÞßÞÝÝÞÝÝÜÜÜÛÙÓÌÇÆÅ½§Œƒ„…‡ŒŽ‹‰…}o^H>864437;KWglmkwƒ‹”¤¯·º¼½¾¾ÁÄÉÊÅ·¥„sv~““‡‚qvgimxtrmqrnns†—š›•ŠtUQMLLLLG>3'(((())+,**++*((,,++*))+,('(((',)
+
+		
+
+
+
+
+
+
+
+	
+
+
+
+
+
+
+
+
+
+
+	
+
+
+
+
+
+	


O“±®ª«­­¯¯®­­¯¯¯­¯°°°®­²²¬°°®°®®¯±³²¯±³±­²µ³²³´³´³³²²±µ¶¶¶´´¶¶±µ¶¶¶¶³¶¸·µ´¶¹¹¸¸·¶¶¸¹¹¶·ºº¹·¸¸ºº¸µkiiijfiiihjllkkklmnopooomjmonkllmnlijlppnnnonlmoolopqqrrrqrqnoqmopqoqqpppoopqqposstpqqrsuqtrrsuwwuvxvtuuvwvuvutuvuvvutwvtsxvvxyyxuyx{z{||z{|xrmidXRMJGECA=5* 

+
+
+
+
+
+	
+	
+
+#)-15896//.-).+/11-,-./0257;??>;951334442999?EHHGGE?865530,7M{£¢‡Z?>;;<J]iqrssuusy{||}~ztplkigeegfcfehijibWRS[^\VLA<:MfÀÖÚÚÛÜÝÞÞÞÞÝÞßÞÝÝÝÝÝÝÝÜÛÙÓÌÅÂÄÁ­ˆˆ‡…Š‹‡‡„†„€xnaXPMKIFJO\`\W\ew‚‰ª´¼¼¾½¶¿ÅÅŽ°‰…‚‹–˜™—‹†}sjv€ƒ†ˆŠ†wwx‹•˜˜“‰oSOLLKKKF>3)***(**+(,,++**+,,--++,02.)('*))(
+
+
+		
+
+
+
+
+
+
+
+
+
+			
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	
+
+
+	
+
+
+		
W‘¯®ª­¯®¨¯±°¬¬¬®¯¯®¯¯¯°²²²²°®²¯¯­±³³°³³²­³µ´³³´³¯´²³²²³µ¶¶°³´¶²·¹¸··´¶¹¹³²³»¹¹¹¸¶¶·º·¶µ¸·¶··¶µ¶¸¶kkkkkjhiijimmljlllkmmonnmlmnolllmnkkjloponnppnnopqqqrrmopqqpmnqrqqqqrrnoppqqqqqqqqstsqlqsqtttuvwwuuvuttsrvvustsuwxxwvwwvuuvvvvwzyxwwyzz|{|{}}{zxrkd^UQQQQQKD;1#

+
+
+
+	
+
+
+
+
+
+
+
+
+
+


%+27756631.-+)')))+--./12320/.,-/2359;:9:AHIKLKHB<<>?>:6<Kxœ ŒeKB=;7;O_joqsvtux{‚ƒ‚ƒ‚|tpnkhffgijifhikjh\LDISZWOB95:Ql”ÄØÛÛÜÝÝÝÞÞÝÝÞßÞÝÝÞÝÝÝÝÛÚØÑÈÂÇÉÅ´™‰Œ‰…ˆ‰‡…‡‡ˆˆˆˆ…€yrnkhfgihdWRQZgpuy€‘£±¶¹º¶¼ÀÃŹ¥ŽŽ— £¥¢ ›—“‹‚}€Š•››œš–’’–—“”€cLFECCCB?81,,,,,--,+,-,+,--,02/./14751./153(
+
+								
+
+		
+
+
+
+
+	
+
+
+	
+
+
+
+
+
+



#^‘­®­®®­¬­®°°«¨®±°®®®±³³²³³²²²²±¬°²³´³±²®²²³´¶¸µ°´²²±®±°¶µ´²²´²¶¹¸¶¶´¶¶¶¶¸º»º»ºº¹¸¹º¹¸¹¹¸·¸¹º¹¹»¼ijijkjjjjjkmlkllkjlmloonlkmonkklnlnnlloponnnoopppppprrpnpqrromqtsqrrstsrrrqrrqsrroqsusppqqtuvvvvuutssssttuutuutvxyzwxwwwvuvwxxyzzwwuxtz|}}~~}|{{zwtpkf`SQRPLKE<4+
+
+	
+
+			
+
+
+
+
+
+
&,0599751-%&''')+,,,,--0+,(,*.-37<?;3;EKLNNMJC;@AFFD>>Cm‘”rRE=;68>Q_hlswyzzz…ˆ‡…‚{srokhhhiglmmkjjg`P67:EMKF=64:OmœÉÛÛÛÜÝÝÜÝÞÝÜÞßÞÞÞÞÝÝÝÜÛÙ×ÑÃÄÉÌʺ¡‘Œ‹‡‰ˆ……ˆŠŠ‰‰‡‰ˆ†ƒ|zxxxtmaORTWX]bgn…• ¨­²¶»¼½À¹£’ž«­®¬ª¨ ¡¡—†Œ”¡ ¡£¤££¤¢š‘‡jS96223;<:20,++++./.*-.-+.//-352/12698436=A;)
+			
+
+		
+
+
+
+
+
+
+	
+
+
+
+	
+
+
+
+	
+	
+
+
+
+
+
+
+
+
$b”ª««««ªªª«¯¯¬©­©­¬­­®°³²³³²±²³±¬°°²±´³³°±®±±µµ´±µ±³²±²´µ´³±±µ³²³µ´³³¸·´´»»¹º»¹¸¹¹¹º¶º·¸¶¹¹º¹º»½½ijiijkllkklmjkklkjmmloonllmmlkkmnooonmnonnnnlppppnopppppqrrtrppttqqrrvvtstrqsusssqnrtvtsturttvutrtsrsttvutrstutwxxxwwwuwwvwxyyzzz{wuxzz}}}}~}{x|}}}|yungc_TRQQLIA9/$
+		
+
+
+"*157762,''&&&(()))*-//.,,-./27;=83:DLOPOMJDADFIKKFAAc„‡rYIA<638CS`kry~€€ƒ……‚}yvuvsomljgmprrojaTA0,29>?<8448Ig ÌÛÛÛÜÝÝÝÝÜÝÝÝÞÞÝÞÞÝÝÜÜÚÙ×ÒÊÄÈË˾¦“ŽŒ‰‡„ˆŠŠ‰‰Š‰‡ƒ…ƒ€~~{vlaWTSRXZ\dguŽ–Ÿ§­°³µ¯œˆ„£³µ³²²±²²±¨š›ž ž¡£££¥¦¥Ÿ˜…kI7/-,/5;961,+***-..-/232021.564012687546>B:&
+
+
+		
+
+
+		
+
+	
+
+
+	
+	
+
+
+
+
+		
+
+	
+
+
+
+
+
&g–®­¬¬«­­­®¬¬««¬««¬¬­¯±°±²²±¯²²±°°²³´µ·µ±±±°°¯¯²µ¶µ³³±²´³²´´µ¶µ³±¶··¸¸·µ¶ºº¹¹¸··¸¸¹»¼»¹¹»¹º¹º¼¾¾¾jkkjkjklllmmlijikkmmonnmllllllmmmnopnklmnnonnoompoonnnprrqsttrrssnoorsssttrnrttttsrssttpuwwutptssvuutqvvusrpuuuwxxwuvuvwyyyxwuxyzzxuyz{{{||z{{zy}}}z}{wttqlc_SOLMIE?8* 
+
+
+
+
+
+
+"(+/11.*)('&((('*-/11.-..-13753,6@GJNPNKGEHJKMMKHBVouo_QGB=7539AWit~ƒ‡‡„€}|{{zwqtswvtpmhppuurjY@7*--13201./0@_ŸÍÚÛÛÜÝÝÝÜÛÜÝÝÝÝÝÞÞÝÝÜÜÚÙØÔÍžÈËÀª•’‰‰‡…ƒ…†„„†ˆ‰†v}~|}|yvpiaWO\eghffrnu|ƒ‰‘“…s~‡ ±´³³³±¯´¶²­¨žž™šž–”“˜ž›Ž}b>2))(19;84.-'+)((++/467652/674023444533681
+			
+
+
+		
+	
+
+
+
+
+				
+
+
+	
+
+
+	
+
+
+
+
+
+
+
+
+
+
+
+
.q™«­¦¬«­®¯®°°®¬®«¬¬­®±¯®¯±°°°±­±®­®µµ³±²±±±²¬¬®³µ·¶´¯°°³²´µ¶µ·²µ²³µ¶²¸³¸ºº¹¹¸¶²¶¶·º¼½½·»½»µ¹·¾¾¾¸klmllkilmnnnliiikmlmnnnnnmnokmnmmmlnonnnmmnnnnlmpqqoppoqppsttttutrrsqqlpstrpprtustssrsssuwwutuvstvvutvwxttttwyywyzxwxywyzzyxwwxxwxyyyxy{z{zzz{{||{z||y}}zvphb[PRQRLE;3-&
+
+
+	
+
+
+			
+!(--,--+*))((*,-.//--..02531.19>CHMMJJJLMMMLMKFFWXQBBBA<6522:Oeu€…ˆ†ƒ|vuwyzwtsswzxtpptwxxrhS:2..------//18W›ÌÚÛÜÝÝÝÝÜÜÝÞÝÜÞßÞÞÝÝÜÜÛÙØÕÐÈÄÇÊı™—“Šˆ††„‚ƒƒ‚ƒ†…ƒ~|||{}}|z||ysiZQ`iu}|xvphkfomiekoqy‡˜©¯³´²­®±¶¸·±ª ––˜™š–“’—™˜’‹uT6))(,6:8521/+)())+/369753079403531231102*
+
+		
+
+
+
+
+
+
+
+
+
+
+	
+
+
+	
+
+		
+
+
+
+
+
+
+



6v›«¬¬¬®¯°²³´³±¯¯±±°¯±°®¯±³´³±¯°¯­±´´³¯±²³³²²±³µµ´µ¶´³²°²²µµ¶¸¹º¸¶´³´··³º½·¹º¹··¶´¶»½½½¼»½»ºº½¾¾½½jlnnllmmlmonljkilmmmmmmjnoppnlmmmmmlnookjklmnkmmpqrqqoqrppsssprrsstutpoorrttsstsrrutsstruuvrtvwtuutsuvxxvvvuvyyvyyxx{zzzzwxtyyytwxyxyz{wyxyvz{{||yyw~~|{~~~~|xtnh^\OSOJFC?7.%



+	
+
+
+
+			
+
 %)-/10.+)*))*+,-*,-/0321,0467@EGIJJMOONNNNJIFDBCCB@<77468G\o}‚€~|zsttz{yuurwxwtrsx|{wpdN81)..-+-,-+/19S™ËÙÛÞÝÝÝÜÜÜÝÞÝÜÞàßÞÞÝÝÜÛÚ×ÕÐÉÂÈËÆ¶¦›•ŒŠ†‡ƒ‚ƒ‚‚}z{z{w|y{|}zwn^R_gwƒ†‡ƒ~wsqqomjhuyƒ‰Œ¢¬°¯ª¨¯´¶¶³­¦˜”Š‘‘‘•‘~_:)(%.4453231-"())(./320///8;51352.10/+11'
+		
+
+
+	
+
+
+			
+
+
+
+
+
+
+			
+
+
+
+
+
+
+
+
+
+


@{«¬¬«¬°°±²´´²¬°°°­®¬±®°®³³³¯®®±°³´³­°´´¯µ±°°µ·¶³³³µ³µ±²²¶¶¶¶·¶·¶´±µ¶µ´¼½º¸¸¸¹ºº³·¹½¾¾ºº·»¶»·¼»½½hkmmllmmlnnmllmmmmkllmljmopomlmmlnnnoomjknponmnopqrrplorpprssrporstutqpqrrtutssrruvursuwvvvtvvwtvutsuvuvvwwttxxxwwy{{yxxwvxzzzyxwyyyz||zyxxyyzz{y{{~~|{}}}~{wske`\OORMJE;1* 	
+
+
+
+
+
+
%*/242.,++++,---,..010-.235:>ADGILOPPPPOMHBABCCA>99:<<<=Pbt{~|{{|zz{{zywwwwssptx||zp_F71.----,,+,-19S˜ËÚÛÜÝÞÝÜÛÛÝßÞÞßàßÝÝÝÝÝÛÙØÔÎÈÂÇÊÆ¹ªž—ŽŒ‰…‚‚‚‚‚€||}|{zz{||zyscZ\dq}…ŠŒ‰|}}|yzˆŠŠŠŠ“ ¦ª§§«¯±³²°© ’†‚†ˆ‘}_>+((-3643211-(())-/110../19<82131.0/-,12%

+			
+
+
+
+
+
+					
+
+
+
+
+
+
+
+
+	
+
+
+




K€¡¯¯®­¬­®®¯±²°°¯°¯­®²²°±³²²±±±±±³³´³²²µ¶¶µ´´²³¶µ´¶¶¶¶¶·¶µµµµµµµ¶¶´µ¶¶··¹»º¹µ¶¸º»º¸¸º»¼»»»¹ºº»»º¼¼ijiikmmmmonjmmmmmllkmmmkmllllnnlnonnnlmlmppnnnnnorsqonoqoorsssqprstutrpsrorrqrsqstuvutvwwvwsuuttwwusuvvvvvvuwxyyzzzzywwvwxzz{yzwy{{z{{}|zxyxz{{{|||~~{|~~{~€€€}wwvsnha\PROJFC@:3*

+
+	
+	
+
+
+
+	
+'-000..*-,/.,+,+.0/*/12159;=DGIMPRRPNMKEEDB@?<:7>ABCFFRbr{{{|~|x{z{zxyxwwtttvw{}r^D120-*+,,*-,-.7Q’ÈØÛÛÜÞÝÜÛÚÜßßßßßÞÜÝÝÞÞÜÙ×ÓÌÇÂÆÈĺ«Ÿ˜‘‘‡„‚‚ƒ€€~wz}|vwuz{zyyufZWYboz„‹Œ‰ƒ€}ƒƒ‚„‹Ž‹‹‰‰“˜™›ž¢¥¨¨¦ ˜Šxxnnoqu{}zxkQA/+)-2744-.-+()',/0210//04;>:33/.-/.+(10!
+		
+
+
+
+
+
+	
+	
+
+	
+
+
+
+
+		
+
+
+
+
+
+
+
+
+
+


N…£°°©ªª¬¬­ª¯®®¯®®¯®¯²²¬²±³ª°²²±±­²³²²²¯¶·´²¶±´¶¶³¶¶µ±µ³µ²²´µ®¶·¶·¸¸¶µ¸¶¶¸»¹¶°·¹»µ¹¹¸¹¼»»¹º³¼¶½¹¹ºjkiijlmmmoolmmlklooommmlnmmkioppooknnmnnopqpoppplrrqpprrqqrrqroqrsttqsqtsqrsttuusstuuuvvuwwvuutuxwvtvvwwwvswxxxwyzywsvwxyy{zz{zwz|{z{}}|{{{zz||{|{y}}||}}}~~€}~~{xsmf]XQTTQPLD8-#

+
+
+
+
+
+
+
+
+
+
+
+
%),/01011/,*))+...0221135=@BEHLPPPQPMJGEA@===>@BEFECAVhuvz|~{xwxxyyzzxz{yxyy{}r_D110-++++--,--5F¯ÉÕÚÜÞÜÛÛÚÜÝÝÞÞÞÞÝÝÝÝÝÛÚØÒÊÃÀ¿¾¼´¨™’“’Œˆ…ƒƒ}~|vx{yvuvvwwvsm`SLHJ\n}†ŠŠ†‚‚ƒƒ„‡Ž’‘Ž‹‹Š†~†ˆ‹‘““Šƒ{utqkea`_\YZZTI:,**.7;84.+())+,--/10../2;>:320/.,+*+0.

+			
+
+	
+
+	
+
+
+
+
+
+
+
+
+
+
+
+
+
+	





QФ®¯°°°°°®¯¯°°°­­±°¯±±±±²²³³³°²°¯¯°¯±±°³µ³°µ·¶··¶µ´³³³´³³´µµ¶µ¶³¸¹¹·µ··º½¼¹¶·¸º¹º»¼¼¾¾¼»º»¾¼½¼½¼»kkjjjkkjknolllklnnmlmnnmmmllmoppommnomnnnppoqqrppqpnoqqrssrrqrrrstsrrsuurorttrvwtousssvwwwwuvvuvvvvvvuwwwvswwvxvvxywvwwsvwwwyyywzzyy{}|y{}|||{}}|xz}~~~}|}~~}~~~€€€~zwqic][PSSROIB7'
+	
+		
+
+
+
+
+#(-033/+(((*,--0110003;@?DAEHNOSSQNLIFA??@ABBB@DDHM^jsv{{ztsmvwzy{z|}}}|yz{rdQ620.,,,++,,,*29^¢½ÏÙÛÛÙÚÛÛÛÛÜÜÜÝÞÝÜÜÜÛÛØÏµ¬¬¬«ª¢š˜’’’‹ˆ‚y{|{uxxvsslppni`UL@<7<B[n|…‡†…†…€…†ŒŽŒ‰‹ˆ{{fqsqpnmf^jkutnc`^^^[Y^_YL=+--;B@;3*(()'((*+-.--..7;8101/(+'))0,

+			
+
+
+
+
+
+
+
+	
+
+
+
+
+
+	

+
+



Zަ«¯±²²³®°±±±±®¬¬²²±³³±±®°±´²°¬±°¯¯±³³ª³µ³°¶¶·²··µ«±³µ±¶±¶µµ³²³··¶¯¶´µµ¼¾¼µ´´¹³º¸½º¹¸¾¼»µ»º»º½¾¾»ijklllllknnklmkkllijknnkmkjllmkoonmnonnonqpoqrqqqpnnopprsrrrrstsstrqqtuuqoorstwwutuvssuwwvuwwwuvvtvvwxxxvttwvxyyxyxxxxwusvwxyz{zyyxxz{{zz|||{~}{|~~~~}}}|{~~}~~~‚‚€~{vqi_XVXZXULD9.!
+
+
+
+
+
+
+
+	
+
+
+
"(-020-,++......0//29>CEDCGLOQRQNMLHECEEBA@AACDFJVdmuxzxtrsuxyzzzy{}}zywrl^L<6111/+,-../07=Wm•°ÆÐÕרÚÛÜÜÜÜÜÝÞÝÜÜÜÛÚÔů £¤¤žš—‘‘Œ‹‰|{xyzzzxvssqomjaUH?565225B[n}ƒ„„‡…„…‡‡‰‰ˆ‡‡‡†‚wj`_adbbbbepwzskfdgjifgigbRB66AIHC8/,*(&&(')+,,--/465321/.+&).1,
+
+
+
+
+
+		
+
+
+
+
+
+
+
+
+
+
+
+	
+


^“§®¯°°±°¯±³±±±¯­¬²²²´´³±¯°²³²°²³±®±²´´³²³³´·º·µ¶·³¯°´¶¹··µµµ¶µ¶¶¶¶¶µ³µ·¹»º¸¶·¹»¹¹»¼º»½¿»¹»¾¾¾»¼½¼ihjmlmnnonnkmnljmmklnnnkmkkkmnmnponmopppqrqopqpqqqopqqpqroqrstuutsrpsttusqppruwruuuvutuuwwxxwvvuursvxxwwvuuwxyyzxxxwwxxxwvvuxz|}yvyyzz{w{{zz}~||}~~~}}}}{|z|}}|~~}|‚}{wqkfZ\TURNG?90#
+
+
+
+
+
+
+	
+
+
+"'*-/121/.,(+,-/24;AEGHIIHLOOMMLKIGGFDB@BCCBB?R_knttwutsvwxxwsvuz~|wxqqojcWFA;:9878:<>ACGKZbƒ­¸ÀÈÐØÛÜÜÜÜÜÝÝÝÜÛÛÔÆª†‚‡–š›—”ŽŽŒ‰Š‡‚zzxxvwyxsrqqpkaS>;33330.,7B[o{€~}~€‚‚|{{€€€€}viVY^fnrtuy}zsoknnnnnonneWM@MSPI@40*)&*++(+(*(,,253-110.+%)/2)	
+		
+
+	
+

+
+
+
+
+
+
+
+	
+
+
+	
+	
+	
+



d𬰰¯±®®«±­®°±°®­¯°¯­²²±­²²³²±°±±±²±±´­²²³°·¹¸¶·´²°±²···¶µ²¶µ·µ³´··¶´¶···º²²³µ¶¹¹¹¸»¶¿»ºº½¼½¼½½½¼kjijlmmoppnnnonnmmloonmnnkmnmpnnnoonopqqqqnpqpnqqrprsqqqppqttuuuqsrprsttttsrrtuuuuutuvutuvvvtvwwwttwvuuvuuuwxyyyxyyxvxyzywxxyy||zxyz{{{{|}}}~~|{v|~~}}}}}}~~}~}|~€€€}|€}€‚„ƒztohcYYZVQMG>3(
+
+
+
+
+
+
+
+
+
+
#(-010.-*()+/014<BGIJHFHJKKKLKHEDBCACFFD?;>Qainrvvuuwwwwxvrtvy{yxvtqqsrme\SQPOPQUXY\]\ZXX]t~‰“£´ÅÍÒÖÙÚÜÝÜÛ×ÓΧƒg`r|ˆ•—•‘‹‹Œ‹Š‰†‚~|zywuwvurqqofWB842110/-,/8EaqxsoquvwuqmnqvvvvwzymYPUcqy|{|}|xvrnhnqrrqoib^^]YQI?72/011//.,***,041,/0/.+&)05(

+
+
+
+
+
+	
+
+
+
+
+
+



j ¯³±°²³²±°¯°°²²±¯¯¯®®°²²´´³³³±°´³²²²³²®±³²³·¸···µ³²³µ¸¸³µ¶¸¶´µµ´³¶¶µµ¶·¹¼¹³³´¶¶¸º¸»»¼¾¼»½¼¼º¼¾¾¿Ámlklmlklmnnmnonmnnoponnnmknppoolnpqpnmqpppnnpqrrqqrtvsrqrrrstqutttrqrssttuussruuutspuuuuvuuutsvxwwwxwuuvxxvsxxyyxzzxy{{yyvy{{yz{{xz||}{z}}}}~~}{||~||}}}}}}}}}}}€|~~~ƒƒ€€~}zvphdSUPPMIC;0'

+	
+	
+				
+
+
+
+
+%'+-,+))+++.0:AGHFBAACDGJJC?7<??BEFA:8<N]ejqvvswzzvxxxtttyywvusqmruvunheefhkmonpqmjfdecfkmnˆ–§²¼ÅÍÓÔÑËÁ³¦’scKZgrz„ŒŒˆˆ‰‰ˆ‰…‚~zywtstqqnmmcP@20-/,+,,-/4I[bgb]_aeifb_]_bdffgjjdXKATclopqwyxxwvsolkmprrpnmkgc\TPHC@@><:974.-+*'.11-//.*)',23&

+
+
+	
	
+	
+
+
+
+		
+
+
+
+
+



$m¢¯®¬«°±²°±©±°²²²­¬¬­¬°®²´µ°¯¯±±µ´²²´°°°´´³²·µµ¶¶¯°°´´¸¸µ³¸º¹´³³³³´µ¶¹¹¶¸º¹±µ·¸µ»»¼½¼»¼»¾½¼½¾¾¾¿ÀÀmmllmlllimkkmmlkkoqqponmlmprmmnoppoqnopoopnnooqqqqruvvutssqqsutssupqprsttuuvuutttsrsttsuvuuvuuwwvvwwvuuvwyyyyywyyyyxz}~|yvy{||{{{{||||{{|}|}{|{|}}{}{|||y}~~{|€~€}~‚ƒƒ€€ƒ„†…ƒ~yrjd]RVVTNG>5+!
+
+
+
+
+
+
+	
+
+
+
+
+
+
+
+!%())*)***-5=CEC?>?ACDGGB<98;=>AA;3/7GT^gnstvy||xwvwyyyxxwvurpnntwyxuttvz||zz{{xtomllmmjjmtz„Ÿ¬µ¶±¦—‚se[QNS_hox……‚‚ƒ…‡‡„‚‚}yvusrqqpommcQ?6/,-+(()+.<M[_]UVWYY[[YWVPTVUWWTUWQ@;@NW]`dhkmnnomjfddilmlmnmic^XUSRSQOJFB?9520-+-1/.--,+**.40 
+
+
+	
+
+	

+
+
+
+
+
+


+
+
+
&p£®²°®®¯±°°²²±°°²³²²±®­¯²¶µ´²°²´µµµ¶´³³µµ³´´µµ·º¶²³¶µµ···¹¹¹····µ²µ·¸ºº¶¶¹¸µ¶ºº»¼½¼½¼»º¹¼»·½¿¿À¿ÀÀmlllkillmmljmnonnopookopppqrnmnppoopqopppoooonpoonoruwusrrstvvuqstsrppstutwvuuutsrqrttttttuuvvxxvttuvuwvwvzzzzzyyywwy{{{{wxz{{||zz|}|{{y{|||}}|{|}}}z{zy~}~€}}~‚€}€€€‚„†…††‚|}{xsj`ZURPMID=6-$


+
+
+
+
+
+
+
+
+
+
+
+#%'))++4:?BA<<<AEECB@<::999983,/0;CP[cjklmllnqsuvvuurqqssroqqprxzzz{~~z{yyxwmrmquusolnnroyvz~}ocba^TRINWacmux{ywxz‚~x{xuppqplppolcTJ=3+,,+*)(/?P[]][ZZXYXY[\\WQWVWRPOPN?/58?EJOSVXZ]a`XRLSW\`__^^[YXTRQUUWVSPJC@7531/-,+*)))*+*04-
+
+	
+
+
+

+	
+
+
+


+
+
+
+


+


)r£­«±¯¯¯¯©°³³¯­¬²¯±´³«ªª²·µ­³±±±µµµ³´¯´´³²´´³¯¸º¶±³¶¶¶·¸¹¹º³µ¯·µ¶±µ¸º¶¶µ¶¸¸´·º»¹½¹»¹¼·º´½¸¹»¾¿À½½¿mlkljjkkkmlimppppolonmprrrqponmnpqpqrqqspnoopqqplnortttsrssuvuusssssorrsuvwwsstuutqqtutuuuuuvwwwvwwxzyxxwxyyyzz{{yvvwwsxxwx|{{|}{yz}}}|xwzy|||{{|~~}|{xxz{|}~€€~‚ƒ€€~€€„„„…†„ƒ‚ƒ…ƒ|unga]VVURKF=4(

+	
+
+	
+
+
+	
+
+"%(-169??=;;BFDA?=:9876520-+-.05@KSYYWTOMYhsttsssrrqqutsrqruyz}|~{{{ywwvtstzzvtsssstsqljjgXVZ\[XSMIQ\admpuvvvxyz{{yxwvsononmnpolcYPE7/,**+++1@OWYZ[\ZXWY^cdc^[\]\[YWUN>0./37;>??@INQOKD@AFKNMMMNPPLIHJNSVWWUPGGD?:73,+*)'''()*/5+

+
+	
+
+


+









/v¥­°¯®¯±¯®¯°±®­¬°®­³±«­®±µ´³³µ³²³´³²²°µ´´²µµ±²¶·³±´··µ¶·¹¹¸¸µ¯µ¶µ²³·¹º¸···¸·¶¹»¼º¹¹¼»¹»¿¾¼ºº»¾½¼½¿mmmmkmmlllljlnpponnonmoqrlqqpmmlprrrrstspmooqrrpoorsqqutsqsuvvuttsstssrrvvvvtstxxvtsuqtuuvwuuuwwwxwtyxxxxwxtyxyzzyxwwvutvvz}~||{zyz|~~}xx{}}}y||}|}y{yxy||}}~€y€€‚€|€€~€‚ƒƒ…„ƒƒƒ„ƒ}xtpjc^STRPOI@7-#
+
+	
+		
+
+
+
+
+	
+
+
+
+
#*/5;?>==CDDA>8513320-++*,,-*34:>;952<B[monooqprrsuursntw|{}|~~}~}{yzzzyyyzywvvutrutrolg]UY[[[WQLM[_ejmosuvsvvuusttppnmkklnpnjc\VNB3/)++++4>LRRRVXYYWY^`deb``^``^XQG7),)*+-01179<=<:7/02=BIHGGLCF<;;GLTTUURHMNI=;5.*)(('(%*)26)
+
+	
+	
+
+	
+
+
+
+
+	
+
+
+
+
+
+
+	









7|©°­­«««««­¨­««©°¯±³²­°­®±²²´²³¯°°²¯¯°µµ³²¶¶²°´µ´³µ°·µ´µ¶´³´·±µµ¶®²³³²¸¶····¸¶½ººµ¼¼¼¸½ÀÀº»º¼½¼¼¿Álnnmlnomknmmmmnonnoonnlopqqppnmlnpqqrtsrppqrqpnppqsssuusrqqtuustsrruttrrvwvuttvyxvvuttvvtvwwvuvvwwwwutwyywxxxyxxwwyzyvvvvxz||||||{z|}~}{{}}}~~}|{{|{{}~~|}~|~€‚‚€€€€~~~}€ƒ‚‚‚ƒƒ„ƒƒ‚zunf\YX_\WOG;.!
+
+
+
+
+		
+
+
+
+
+
+
+
+
%+28=>?ADC@;51.-.-+*))*,-,+++)+-,)+2:Pekmnoooprstuttsuzƒƒ~}€~}}{x|~~~€|zxvstuuwwrjaWXZ[\ZTKLYcfilnprsrssssssqonnmkkklnkgda]YM>1+++*+6BKQPOPSVXVX[^accba__`\UH<2++,+)+,.0245532.+),5EKMJKLMJFBBFPTTTVSQQTNE>60,**+++++.46)
+
+
+
+
+
+	
+
+


<«¯¯®¯¬§«­¯¯­««®±´³³³´²°²²¬°²±²³´µ´³²³µ¶´³µ¶³±²³µ¶µ··¸¶´·µµ¶·¸¶¶´³³µ´´µ¸¸··¶¸¼½¼»½½¼¼º½¿¿¿½¹½½¾¿¾Áoonmnoomnoolnoonnoonnmllpqqpnlnoonnoqqtsqqqrrpppqpqrsttrrsrostsrsrsttsttvwvtvvvwvuuutuwwwuuvvtuuvvvvutxyyvyyyuxvuuy{zxxvvwyzzx|{}|{}|{|z|}||}}z{y~}~|~~x~}{|}~€€€~~€€~€~~ƒ„ƒƒƒƒ‚‚~ztlf`aXZUPIB9.#
+
+	
+
+
+
+	
+
+ (/49=?A=80.+*''')(**,,+))%()*)**/5K^fjllnnonrprttssx}‚€}{||}}}|{z}ƒ‚|{zyvstwxtnaQSW[][VOMXbfhkmnlnpqrqpstrnppollgghhbeda]TF6(*)+,7BILMMOPQRUV[[_]_a`^][WJ<//(*,,)*+./11210,,(),>KPNMLQUUPMLRXXSVVUPPRPGB61(*)./.+-.56'
+
+
+
+
+
+
+
+
+
+	
+	
+
+
+




A…«®®¯®­¨®±±±°¬­®³´³®³²±±²³±±²±°±¶¶µ²³¯´´³²´´´®®¯°±³³¶¸¸´¸µ·¸¸¹¸°µ²·¶µ²²µ¸¸¸¸»¹¾µ»½»º»º¼¸½½¿¹¾¿¿¹¼¿oonnnolmoqpooponlooonnoppppomnppppppqqssoprssrpoppprotttuusrstsrqtuuutquvwwvvvvvutvvutuwwvruwxxywusuwxyxxxyyyyxxvxz{zyyxxxyyz|{z{||~}||}}}zy{}{x{€€||}~}{{~€€€‚€~}~~‚~€€‚ƒ„‚ƒ‚ƒ„…„†ˆˆ†ƒxrmha^YYUPJD?=:7-!
+
+
+		
+
+
+
+
+
+
+

#+17::5/+)'&&')***++))''''&'))+6FYbikjmppqqorrqqpsz~~|z{{{}~~~}|z}ƒ„ƒƒ„„ƒyssyzuo_MKSZ^[VPNT]cfhkkjloponoprtuutqnkgbefgedb`ZM;*,,,,8CFGHKNQRTWYZ[[ZX[\\[YPA1,+*(*++*,-.021/..+'/8FPSQNPUX\\YX[^][YWTPQSPMG?6/,-.0/..066%
		
+
+
+
+
+
+
+
+


	
+




QЬ­­®°¯¯°±°¯¯¯°²³µ²²²³¯°±±³²²±²¶¶´²³´µ´³µµ´´³³³²±³´µ¶¶·¹¸¸¸¹·¶µ¶¶¸¸¹¸·¶·¸¸»¼¼½¼ºº»¶¹»»»º»¼¾½¿À¿½¼½nmnnnloopooppmnlkmnooonponpomoqpppppsqqrqoqrsrqqrssrsrssuvstuttssuvtuuttuvvuvwwvuvwwvvvswvvvwyyyxvuvyzywxxyzyxzyyy{|{yyz{zxw{||yz}}~w{{}~}xz{{y{€€{|y~}}{}~€€€~€}|||}‚‚ƒ‚‚‚‚‚ƒ……„„†‡‡†††‚~{uidYWVWUUVURG9(
+
+	
+
+
+
+
+
+		
+#*.-+)&''((*'*(+*)''''&&'((2<JX`giiijpoqnonmjlmx}|z{{{|}|{}}}{y„ƒ…ˆ‰‰„~zu}{taEJOW^[UPCNW]_eehikklhhiiiruwtpjhfffggedcaZN<,,,--8ADAEHLPTXZ[ZXWUUTUVWSK:0())((**,'-./11./,,(6BNUVVURWY][XW^a`^\XUQSQQPLE=110.,.-.-64"
+
+
+	
+		
+
+
+
+
+
+
+
+
+
+
+

+	







 \¬¬«®±³®°ª­®¬¬±²³¯´±´´³±¯°±±²®³¶¶²¯¬´´´³¶¶´¯°²´³³¶¶µ¶³¶¶¸´µµ¹¯¯°¹··µ¹····¸ºº»¼º¹º·¸¼¾¹»¹¹»¾¸Á¾¾¿¾ºoponmloppoopomlkjkorponolnpplppplpoprqqprqpqssqrstsqrqqqsvtttttupvwvuuvvtvrtuwtwtvxxvwwwwwuwwxwwyywvyzxxxxyzxz||zyy{zyvz{|vy{{{yz}~~}|||}~~z{||}€€|}|}~~€€~~~{|}~}}}€‚‚ƒ‚ƒƒƒ€‚ƒ€‚‚ƒƒ„……‚ƒ…††…††…„‡‡ƒ~vlda^^`abaXL:&

+
+	
+	
+
+		
+
+
+ ##%'*+++**+++)&&('&&((/8DMV]bdfhlorpnmkiijlv{€ƒ‚{~}zvx|~|z…‚‚ƒ‰‹‹‡~…yfPIKRYXTMCHPW\affghhgedeilnrtsooljlnmjedc`YM<-,,-/8?BCEHKLRWZZYWUTSRQTUTJ;/*)'&'()+,,.//00.*,/<LVZZZZZYY\[YX]aba^[WWWWUTOFA;861-,,,.51
+		
+
+
+
+
+		
+
+
+
+








%c”­­¬­°±²°°±®®¯°²²³µµ´µ´±±±±±²³³´µ´¯«³¶´³µ¶³±³¶´²µ¸¶´¶¸µµ¶´µµ¹º·¸¸¸¶´¸··¶·ººº»½»¹¹º»¾Àºº¹º¼¿ÁÀÀ¿¿¿¿oponmknopppopnlkklprrmonkkpqqqppqpppooonpqqrrsrqqpplqrqrsutuuuuuuuvwvvwwxxvtuvwxxwwxyyyxxwxvwwwvyxwuwxyyxsxzz{||zxyzzxyy{||||}|wy||{~~}y{}~}z}~}~€€|€~}~~€z~~€€~}‚{ƒ‚€‚„…„‚‚ƒ„ƒ„ƒ‚ƒ„…†††„ƒ‚†ˆˆˆ„zupji\a_ZSI>4'

+
+
+
+
+
+
+
+
+
+
+	
+
+
 %)++*,*+*(%%&&'**18AIOS[\]_hlompnmhifgjsw€†‡‚€}xvu|}~}………‡‹‹‹‡€€ƒ†…~lSGDIMPPJCDJSZ]`dfjhgccbiijkprssokqonkgaeaYM<-+,.09>ABEGHILPTXWQROSQPQVWNB5,+&%%%%),,)//.,,*06FSYZ]_^\ZYZ[ZZ^`cdaYXW[[YTPIE==<6..+-/4/
+	
+
+
+
+
+
+
+		



+



#b”«¬ª«­¯®°¯²®°±±°±±µ´´³±¯²²±±´´³²´³°«´¶´°µµ´±´±µ³·¸¶µ¶µ¶²·µ·´»»»··¸·´º¸¸´¸µ¼¼¼¹¼¸»½½¾¾ººº»¼ÀÀÀ¿À»À¾npnmmkmmmppnooknnnnpqrpnkmopoqppqoonppppqrrsrrqrrsrqqqqrtuvvvuvwvuvwxwuwyyvutvxxvvuwxzyyxxxwxyyzzwwvwxyyxwxzz{zzyx{{yzzy{}}|}}|zx||}}}}{z|~|z€}}~}}€~|~€‚€‚}~€‚€ƒ‚€„ƒƒ„………„ƒƒ‚„ƒƒƒ„„††…„‚ƒ……ˆŠ‰‡†ƒ|vojeZWSPJC<4*
+		
+	
+
+
+
+
+
+ $'+,,**'&$%%)-06>FLPRYZ\^eilooomjifflqt{„†€}{w{|||}„…†‰ŽŠˆ……ƒƒ……‚pRA@EIKJF@>EOW[_ejjjifcchkkmoqstqqpmlkihebZN;/+-/08>@BDFFFGJNRTSRSSQPPSUOD91.+****)*,--.,*+-4EPWYX^b`\[YZ]_aaaadd`^\\\ZWTOJGEA:30/044,
+
+
+
+
+
+
+
+
+
+


+










!b“©¯±°­¯¯¯¯¯®±±²±±±µ´´³²²²³²³´´°±²±¯¯´µ²³µµ´³´´¶·¸¸¶µµ¶··¸¸¸ºº»¹¸µ¹»¼º¹·¸¹º»½º¹»¼½¿¾½»¼»»»½¾À¿ÀÀÁÁÀmlnkkmnmoppoooonnnonqqppqponoppooooopppqrqsutrqrrrssrrrsttvvtsuvwwvvxwvwxwvtttvvvuutxyyzxtxxyxy{{xwxxxxvxxyyzuwwwx}|z{|{||{y}||{{|}}|}~{|~~}}~}}|||}|||~€}‚€‚€|~~€‚‚‚‚‚ƒ„ƒ€€‚€„……„…‚€ƒ„ƒƒƒ‚††…„…†……‡‰ˆ‚†ˆˆ…‚|xpg_VTSPME;1!
	
+
+
+
+
+
+	
+
+	
+"%()+++)')+./7>FLOQUY[\bgghnnnlkjjmrrz€€~}w~€€}zxzv~‚„…‰ŽŠŠŠ‹‰‡……„oOC@EHGBB;;:FPX`eijjjhgfjkjjlmpponmkjhihfaZP@1/...7;A@ABFFFCHJOPSTTPOMKKLD?:64552-*),****'-2ERWVWV^`_[[WZ\`cddbcga`_\VZYVRPMJC:32/332)

+
+
+
+
+
+


+

+
+



+
+

$e•©°±°«¯­­®­¬°²²­°¯´´´³²°²´³®²³°°±¯®®´µ³³³²³²³¶¶·¸³´±µ¸¸µ·¶¸¹¹·¹ºº»¼¹º°¶¹º¶¸¹ºµ¼¹»¸¿¾½½½»¼¹¾¼¼¾¾½ÁÂnnnlmoopooppopppnpqrqpmprrqpopqrqpppoooqpptvtsprqqrrrprtuuvuqrttvurssvwwvuwxvuuwwvvvwxxxwwwwttu{zwwyyxxyzyzzxwwxy{}|yz{|zz{}}{{{{||||~~}~||}~~}}|~}|{y{}}€ƒ€~ƒƒ‚ƒ„„‚‚ƒƒ‚‚ƒƒƒ„„ƒ‚ƒƒ‚ƒ…………„ƒ…‡††‡‡‡†…‰‰ˆ‡†‡†zqg`]][UOH@7-!


+
+
+
+
+
+
+
+!%'+,,.///6=DJMNSWY[_dfgmonppppprrx{|{{{~ƒ„|yz{{}€„‡‰‹‹‹ŒŒŠˆ„€jJBCEFDBA><:;FR]bfijilnnlliijmlkkjghhghie_YRD92.,08@DFDBDEDCFINPSVTQPMJIJIFDB@@>8.+)+*()**0@Q]][XW]`^[YZ[[Zaddegghfc]UWXVUSPKC9422450$

+
+
+
+
+
+	
+







)j—«°±¯®¯¯¯°¯­¯²²±¯­²´´¶´±±´²­±²°±±°°±³¶¶´´³²²²¶¹»¹¶´µ·¸¶´·¸¸º¸¸»½¼»º¸¸¶¶¹¹¸¸¸¹º»½»»½¾½»¼½¾¾½¾¾½»¾ÀÂoonmoponmkopoprssrsrqpmoqorqppqqppppqrsrpnstsrssrnqppqqrtuuussutttssrwxwvtvwvvwxxyywvvyvwxxtuvxzzxzzzyyx{|{zxwyyz{||zy||~~}|{z{}}z}}|{}|~||}~|z}|~~}z{|~€}€€‚€~€€ƒ„ƒƒ„…„ƒ‚‚„…€„ƒ„‚‚ƒ†……ƒƒ„……††‡††‡‡‡†‡‡†‡ˆ‰†€|wpk[XVUSOH@9/ 

+
+
+
+
+
+
+
+
+
+
+
 $*-//056?FKOSRZW^_demqsutsuqrrxzxvyy~„„zyy{zv}|‚†‰Š‰‰‹Œ„y`B@BDCC?BA?=<:GRZ`eijlpqonmlllljhggff_cec[XULB8..18>ACB?@ACDHKQRPOOPRLKJKGJIIHEA8/-*,,**++;LW^_]ZY^][WXZ\[[]ccdfghhf^TUTYWVQOC:242680 
+
+
+
+
+
+
+
+
+	



	












/p›«¯°±®±±±³²ª°±°°°°²²²´´±²°²­°°´µ³¬®¨°³¸·µµ´µµ´º»º¸·¶¹·µ³·´¹°·³¼¼º···¹¶¸ººº¹¹º¹¼´»¹ºººµ¼º¾»½¾¿½¿¿¿ºlomoppnljknqpqrsssrqoomnpqqrqqonoqpqrsstrqrsqrrttussturpptuuuuvtrsrrsyxwuvvuvwxwyyywvwyxuwwvvxxzz{{z{{zz{|yyxyzyy||||}}}€|{zxx~}}|}zz{|~}{~€}z|}~~~~~€~~€‚ƒƒƒ€}}€‚„„‚‚„………„ƒ‚€…†……„„„ƒƒ…ˆ‡„†‡†††………†‡††‡ˆ……‡‰‰Š‰ˆ…zsmic`\[TNE<2)
+	
+
+
+
+
+		
+
+
+
+
+

 %),1249AHNSWZ]]addmsvx{zwutuxzuvvw{‚‚yxyyxz{}€„†‡ˆ‰‹ŒƒqQ@?ABBBCCAA>=<?GOW^diloqponmljmnliffc_`a`[YVRLB701468:;;;>CFILQQLIKOTTPONLKLKJGA6/-+--,+-1DSXZ\\\]\ZXVWZ\]]_beffefge_ZZ\^_\[UH<9768:0
+
+
+
+
+



+
+






4vŸ¬®¯±³²±²´³²²´³±±³²±±±²³´´²²²³µ¶´²¯­°´¹¹¶¶··¸·¶·º»¸·¹º¶³µ¶¶¸¸¹¹»¹¹ºº¹¶¹º»½¼»»º¼¾¼»»»»»¼½½¾¾¾¿¾¾¾½¾nnmnoonlllnoonpqroqqnmnopqrprsqnpqqqrrrssrsrqrstvvvtvvtssruuuuurrsttvvwwwvvuvvwwxxwwxxyxxxwwwwws{zyxyyyyz|{wz{zxy|}z{||||}}|{xz||||{{{{}~}}€€}{|}~€€€€~€~‚„ƒ€}~€„€‚„ƒƒ„„„„„…‡†…„…†…€„ˆ‰††„„‡…ƒ‡ˆ†„‡ˆ‡‡ˆŠˆ„ŠŠŠ…†„€}yun`]QPNIE=5*
+
+		
+
+
+			

 %(,3<BIPW[^adeclpuw{|ywuvy{zuutz||}zuwx{~€~€‚‚†…|hK:=@@?BCCA@=<<=;@FQ[bimqqjkiiiknnjh``aa^`[[WWVOC:12-4388<?CCHMMMH@HOTVRQPMKFFFD=3+++,,,(.7IUTRUXXXYXVSWW\Y\]aeea_^^^]\]^ceghaPF=;989.
+		
+
+
+
+
+













>~£­®¯°®±°±²³¯³¯µµ³°¯¯³³³µ¸¶µ´´²µ²¶³±¬­¯¸¹··¸²¸´µ¶¸¹¹µ··¶µ³²³´¹·¸´»½½¹º·º¹¹ººº»»»»½·¼½¼»¾¾½¼¾½½½»¹¾¿nnkmonmmmnnnnnopqqpponnqoqrrqtsrqrrqprqqrrtsqrpqpvvuvvsutstvuttrstusquuvvuwxvusxyxvxxxzyxxwvwxxyzzxwuzzz{{{zz{{{z}|zzz{{z|y|{z{|z{zz}}z~}}}}~~~~|}€€€}}€€€‚ƒ‚€€„ƒ‚‚ƒ‚ƒ‚‚~€€‚„……ƒ„††„……‡‡†„‡‡†††„…†‡††ˆˆ‡††††ˆŠŠˆ‡ŠŒ‹‡Š‹Šˆ‡„}wof\ZZXSMB5%

+
+
+
+
+

'07?IRY]beebinqvyywvwwx}}{zyyy{}{xx|‚ƒƒƒ}|}|‚‚wfG9<>??@AA@?<8::88<EOYbjqpmkjgfiklljfdedc`_\Z[\XRF:468;=>>?AAHKJHD?FLQSRQOLJHGE@80+++,,,*/;IQQNNOPRTVSVWYZ[[\^aa^\[[[\\_`eiosnaOGB<77-
+
+
+
+
+
+		
+
+

















G…¦±¯±°°°²²²±¯²³¶·´±±´´²²¶¸·µµ³²´µ´²¯­¬±·¹¸¸¶¶¶´µ¶·¹º»¹¶·ºº¹·´¸·¹º½¿½ºº»º¸º¹»¼ÀÀ¾¼½½»½»¹¹¾½»¾ÀÁÁ¿½ÀÃnmmmnnmjopnmmoooqqpppppqrssrqrssroqrstsqsttsrsvuuvustsvwuttuussstuwuutttwtxxvvwwyyyyzzzywvutwxyzzwyyyz{wyzzyz{{z|||{{xzz|}}{|{|}}}}{}}~~~~z}}}|y~€€~||~€}‚„ƒ}€ƒƒ~‚„…„ƒ|‚ƒƒƒ‚€ƒƒ„…„}…„…†‡‡ˆˆ†……„‡‡……………†‡ˆˆ…†…†ˆ‰ˆˆ†‰‰Š‡‰‹Œˆˆˆ†…‚|tkfYVTRLD<3'

+
+		


$*8DMU\ab`ffnputtsuv{€€}}}z|}~z|~ƒ„†„~~x}€€€yiR;=<>?><<<<<;::789??KS_imnmlhbigghhhfdeab^^ZZ[ZWOD@>@CCBA@@AHHGEA?EIJKLLIHHED?8/.(*)+,,+1=EIIGHHHIQRVWWSYYZXXW][[Z[[[X_bbeqxtj]OL?=:,
+
+			
+	
+
+













+








PŒ©±°±±¬°¯±«±¯´¯µµ´­³µµ¯´µ¶³²³´²µ±´®ª¦ª¯··¸²µ²¶´µ²¶µ¼½»´µ²º¶µµ¸·»¼¼½¼µ»¸¸¸º¹º»ÀÀ½·½¾½½¼¶¹º»»¾¾¿ÀÀ½ÁÄonoppnonoqommoppoqpopoooqsrpprsrrppuuttstustsqrwtursssvxtsssuustsvxvvuuwy{ywvwxxxyyyzzyxxxxxwwz{xxzzwyzyxxyzyzzz|||~|{{{|~~{z|~|}~}|}~~~€}{z|€~|}~€€€€ƒ~„……‚‚‚„‡…€ƒ„‚ƒ…„„…ƒ…†……†‡„ƒƒ†ˆˆ‡†……„„…ˆˆ‡‡‡…‡ˆ‡‡‡‡‡ˆ‰Š‹Œ‹Š‰Š‹Œ‹„}woe`[^YSLE<1!
+
+
+

"/8AKV\aeilprssuuv……€~~|~€~~~€‚…„‚}}ƒ€€zn\L?>>>=<<<<<=><9:<>?CFN_fkmmkjigcijlkifeba`^\\ZXTPKHGJJIIHGHHHEB@@CIIHHHEDCB?91-,+))*,,,3:>ACEDGIJPQUWURVYXWVVWZ[\\\\\_bbeqxunfaWK@=-
+
+
+
+
+















Z’«±¯±°¯°®¯®¯±³µ´³±®²´´´´´´³´´µµµ´µ¶±©¨¯µ·¶µµ¶·¶´´µ¹¼½¹²³´·¹¹¹¹º½½¸½¼ºººººº¸º¹½¿¼»½½¾¾½¼º¸º»¾¾¾¾¾½ÀÂoooppnoppppooprqqqqqqmonpnpmqsspqpqstrtttsstsprtststtsuwurrsvvtsvxxsuuvwxyywvvxxz{ywwwvwy{zyxwyzxzzwxzzyyxyyyy{{|x|}}y|||~~|||~}{|~{}~~|~€€|}{~€}}~~€‚‚ƒƒ€ƒ„‚€€‚ƒ„‚€ƒ„ƒ„‚„††„…€„€…‡‡†‡‡‡‡ˆ†………ƒ†ˆ‰‡‡‡†‡ˆ‡††ˆ†ˆŠ‹Œ‹‹ŒŠŠ‹Ž‹‰†‚}xrgcXVSOIA9- 

+
+
+
+

!0<HRZchlqrrsux„‰†ƒ€|}}€~xwwy|~€~{|€‚ƒ€}tlbWHA:=>?>????=;=>>@A@HO\fhijillkjklljhec`cc`[[WVURNNONMLKJJJKIDCAFJHCFBB=<<<61++*)&)+,'1579>??@ILPRTRRQSUVVVOPSYZ\[\\^`a_pwsije_RK?*
+	
+
+
+
+
+
+
+










+



c™«°±±±¯°­¬«°°µ³²­­­¯¯³²µ³´±´²µ·µ­¶²´¬ª­³²·¸¶·¸³²±·¸»¶¶±²²¸¶º¶¸º¼½¼¼¼»º·»º¹·ºº¾¾¾½¾¾½¾½º»¹º»½¾¿º½½ÀÀnpnoonoqppppmqprqqnrsrqpqnoqqsrqqpmqssrsssqtsrqqosstuutwwutuvuttwywtsuuuuuuxwvy{{{xvwxvwy{{zwwwwwyzzz{{yyz{zyxz{{z||}|{z{|y|}}~~~}x~~{|}}~~~~}|~€€}€€~~€€‚‚ƒƒƒ‚€€€ƒƒ‚€„„ƒ„„…†„ƒ……„„„†‡‡†‡…†††ƒ………†ˆˆˆ‡…„‡ˆˆ‡‡‰ˆˆŠŠŒ‹‹‰‡‹ŽŽ‹Š‰ƒ|tmc^[ZVRI@5+	


*6DQ[djmoor€‰‹‡…€~~~‚‚{vrqvyzxww{ƒ„„‚~{vj[I@=@@@?@@@??>?>>??BEO`gjiimpnkhijjhddeffc_][YWTVUTSSQONNNKMMJHHJIEDA@><;840-+*('(++,/2348:<>GKNPQPOONPRTUSRTV[[Z[^`b`]ltqmkiaTL?'
+
+
+
+
+	
+
+
+
+


+





















hž­°³µ´²¯«¬®²µ´´³²²²²²³³´²´³³´·º¶®´¸µ¯§¬±´¶¸´¶·¸··¸º¹µ¶¶¶¸¹»¹´µ¹¼»ºº»¼»»º»¹¸º¼½¾¿À¾¼½¾½¼¾¼½½¿ÁÁÀ¿½¾¿npponkqqpmonpqssrqqrsrrpsqqqroqrrqqrtusqrsrrroqpruusuvvvvutuusttwvwvwwuuvtwyxwyz{uuuwyzyyz{zxvvvvwxxy{{xzzzyxxzu{z|{}{|{|}}|~}~~~}}zzz}}~{}|}~~~€€€€€‚‚ƒƒ}‚‚€€‚ƒ‚‚€„„ƒ„…†…‚‚ƒƒ…„„ƒƒ„„„…ƒ……††‡†…………‡ƒ„‡Š‰ˆ…ŠŠ‰…ŠŒ‹Š‰†ˆ‹ŽŠ‹‰ŒŒ‹ˆ„€{voa]ZXRMG>0(


+

+
",<GQY`fn‚Š‡„‚€~‚ƒ„‚}wnqpqsrmqqx|‚ƒ„„‚~vndUKB@?=:>?@>>??>=>@@IVekiimlnkighedbddffc`_[YXYYXTUPTQPPOKNOMGHHJFFA@=<65/--,'((****-///47:=EIKMNJIHMHROXWTUY][XYZbc^ZellkljbUK=$
+
+
+				
+


















j ®­µ´³²¯­®¯³²²¯³²²³´´³³´µµ³²±·º¸®µµ·³¨ª±µ¶¶µ¶¶···¶µµµ·¸·³¹¹¹´µ·¹º¹º»¼½¼»º»¶¸¹¸·¾½¾¹ºº¾¾À½½½ÀÂÃÂÀ½¾¼mqppknppnoomprsurpprqpqrsttusqorrrrssvtqrsqqqqpqswwuuvvwvsrttuuvvvvwxxuuvwxyyyxyzzxvsyzzzz{{ywxyxxyxvz{{zzyyz{zzzz||}|||~~{|{}~}}€€~|||~~~~‚€€‚‚ƒ‚„„„€}€€‚„„„„‚}}ƒ††„‡‡…€†……ƒƒ‚„ƒ…„„„†‡ˆˆ††††††„†‰‰‰‰‰Š‡†ˆŠ‰Š‡ŠŠŠŠŒ‡‡ŠŒŒŒŒŽŒ‹‡ysm_]\[SJA8,







+
+

",<FP_s‚‰ŽŠ†ƒ‚„…‡„}xwupnnnnmmpy}ƒ…„~|wocWME=::=?@@AA><>??@M`kkjmolijjgcaacbccaa`]XZ[[YVUUTRRPOMNOMIHIJKHFB?=83.,,+**++++*+.--/47;AEHJLMLLNRTX\]UU[^[XYYbd][]befikdWJ:"
+
+
+
+
+














#n¡®±³¶µ³±¯¯±²±°­²°¯±²´´´µ·µµ´²µ·¶µµ·¹¶«©²¹·µ´¶¶µ´µ´µµ´¸¸¶´¸¹¸·¶·¹º¸¹»»»½»¹¼¼»»º¸º½¿Á¿¿ÀÀÀ½½¼¾ÂÃÁ½½ÀÂnpqqooppooomnnpssnpqpppprststrprsmrstvurqoqsssrruwwutstuurrtuvvwvruvvwvuvvvwxyxvz{yuvxyzyy{zzwzwyyyyyyz{{zzxz{|wzz|||{z{|}}|{y|}}‚€~}}{~€€€€}‚‚ƒƒ~€~€€€‚‚ƒ„„‚~}„††††‡„ƒ‚„†…„†‡†††…‚…††ƒ‡‡††…„†…„†‡ˆˆˆ‰ˆˆˆ‰ˆ‰‹Œ‹‡ˆŠˆ‡‹Œ‹Š‹ŒŽŽ‹‰…|un`^WRNE;1'

+


+

!&:HXgt…ˆ…‚ƒ…†…†}~{spnnmljqvxyƒ‚~~~{uoeQK?>=>?AA?9;=;6=H\hjjjjjejkgabbecb`a^a`^]\ZZWWTSSRQPPPIMIJGKLKFEB@:3+,,+*++,-,),-,*+-38;@EEKMOOSVY]`c_X^]YUYXab\PRVY]ekfXH5

+	
+
+
+

+











(u¦¯®²«´³²®­¨³±°­³³±®±±¶°µ³´±³±²³´²¹¹·µ®¤³¹¹²¸·´°µ¶¶¶¶µ´´µ´º¸¹µ¸º¹¶··¹·¹½½·ºº»º»··º¿ÀÀ¾¿¿Á¾¾¼½½ÀÁÀ½ÂÂppqqpppqpooonnkqrrpqqppqosuutqpqstssrstrnqrssrooqvvtssrrttrtuvvwvuuuuuvvuvvusyywyzywwvwxxyzz{|zyyzyxyzy|}}{{y{{{z||{z{zz~€€~{|||}~€~|}}}€|~€‚€€~€‚‚€~‚ƒ„ƒ€€‚ƒ…………ƒ…„…ƒ†‰‰†††††††††‡‡……‚………………††ˆ‰‰ˆ‰‹ŒŠ‹ŒŒŠ‰ˆŠŠ‰Š‹‰‰‰Šˆ€vke_\XQI@7,!


+
+
+
$4FZgqv|„ˆ‰‹‹…‚€wsqqokkqtsv{€~}}€wk]PD?<>>><858749IYcgjihiijjhceggfca_]`ca_^]ZXXYWVTRSTRPLKJGKNLHGGB:3/.,++*)+-,---+**).36;CHKOQSUX]djkhfc^XY]``_YQMSUX_ffXF/











2{«±³±¯±´²±¯¯±±°®´¶³°±²µµ´´³³³´µ³µ¸¹¹µ´±¯´¹¸»º¶´±µ·¸¸ºµ¶¸º»»º¸·º»¸¶¶·¹µ¸¼»º¹¹¹¸¹¸·»½¾½½½¿ÁÃÀ½¼º»ÁÂÃÃÂoqqpoooppoqqpmnqqqnnqqqprtuusqqprqttqqsssttsspsttvwvtssqtttuttwxxwuvwwxxuwwvuwxvwyxwvvyz{{{z|z{y{|zwxyx|~}{||{zz{}|{{{z{~}z~{}}x}€€}{}}}}|€€€€~}}‚|€€€€~}~‚ƒƒ‚‚‚}~‚ƒƒ€€ƒƒƒ„„„„„†…ƒƒ„…‡„……†‚…†††‡ˆˆ†ˆ‡‡†…ƒƒ‚ƒ†‡†‰†……ŠŒ‹Š‰ˆŠ‰‰‹Œ‹Š‰‹ŒŒ‹‹ŒŠŽ‘ŽŠ…€}vlgZVSLF?6+!
+
+	
+

&2?Q`p~‡‹†|ywtsonmqssu|€zyw|€|vmf_XOD?::76466CMZ]bdgjjhgeccgjihe]]]abcba_\WYVVUTNTVUSOGHHILKIGE@82..*++)%+*,-.-,++*-/47?FKNPRTVZgommlic_^bea]YUTSPLT\YTC,	
+
+
+
+
+
+
+
+
+



+








;€®³´²°³®µ±²³°®®®³³´°²´³³³²³´µ´·³·¸·¸¶´µ¯³´¸»»¶´²²²¶µ¹³¶¹¼»½»¹¸¼·µµ·¶¶µ¸¹º»¼º»µº¼º»¾¹¹¹¾¿ÀÁÁ¼¾¿¿¾ÃÂÅÃoplooonpoopqonoqrqnoprqprttsqsssrsuuqrtttuvutsuutvwwuutsttuvttuwxvtvvwyxtwyyxxxvtxxxvxz{|}|||{{{{{zyzyv{{|z{}}yz|~{{{{{z{~||}}~}zz€~|{x}~}~~‚€||‚€€€~‚„„ƒƒƒ€ƒ„ƒ‚‚ƒ„‚ƒ„„………ˆ†ƒƒ„‡‡………†…ƒ††…‡ˆˆ‡‡ˆˆ‡„„‡†‚†‰ŠŠˆ†‡ˆŠ‹Œ‹‰‰‰‰‹ŒŒ‹‹ŒŒŒ‹ŠŠŠ‰‹ŒŽŒŒ‹ˆ‚zsjf[YTNF?6.!


+
+
#9J_q€‰‰ˆ…|yzxtoooprruz|wuttyz{ywuurng]SK>;;>@ENW[^_`chhgb``aejiifcbabcccb`]\YWUUSSUYYVOKJHJKJIGC>9/++,+*))+,++-,-----/14;AEHJMQUWgqtnonk_^`b]WWXXVMKKSRL>)	
+
+
+














:ƒ¯´±²³´µ´³µ·´²±±³³´±´µµµµ¶·¸¶´·¸·¶¶¸·¸¸µ©®µ¹¹¹¸·¶²´·¶¯´¹º»ºº»½¼·¹»¹¶µµ¶¸¹¼ººº»¾À¾¼½½½¾¿¿¾¾¾½ÀÀÀÂÄÆÄÁooooqpnnnmmoonopqqrrrsrqqpsrrstsrsuutsttuvwwuttttvvuututstuvvtttvuuvwwyxwwyyzzywxyyzzz{||{||}y|xyy||{{zz{|{v|}|z~~|{yzy{}}|}}~}|z}}}|}~€}}}|~€€~y‚‚€€€‚~~€‚ƒ„„ƒƒ‚€‚ƒƒ„ƒ……„‚ƒ…††……†‡†…†‡†„†…†‡†…‡†…††„„„†‡††‰ˆ†…ˆ‰‰„†‡‡„Š‹‹†ˆ‡ˆ‰‹Š‹‹Œ‹Š‹‡Š‰ŒŠŒŒŒ‹ŽŽŒŽ‰‡ƒ|tf_YVNLH?3(









!+<Pcox~€}wtooopjstyx{xtirsqoonqrrsqmgb]WTSVW[^_`^]^`bdcb`_echhfec\b`bbbca]ZVUUVSXZYVRNMJMMKGFB?:3***,)))-,+)-,,*,,-,/19:;<BGKN\ktrnmppgXSPNMNOX]YPQQLC:$
+
	
+
+
+




















7‚®²¯°¯³²´²µ°³³´µµµ³¯³²µ±µ³º¹´³¶¶·µ³²··¹¶¯©²¶µ¸¸°²²·»¹®´´µ¶·´¹¼¼¸º¼¼··³´¶»µ´³¹»¿À¾¼»º»½¿¿½·º¼¼½»¼ÃÅ»opqqrqnnpqqqpoqqqooqssssrrssqssrqrruutrttwxxuurrsuttvwuurtuwvtstuuvuvvwxwwvyw{zyyz{{yz|}|{z|||{y{}}|{{||{}|zz|}}~~}|}|||}}|z~}|||}~~}}~~~~€€€~€€~}‚€~ƒƒ‚‚‚‚ƒ‚ƒƒ…††„„…†††ƒ‚……‡ˆˆ„ƒ†ˆ‡‡†‡‡‡„„††ƒƒ†‡††‡‰‰ˆ‡‡ˆˆ‰‹ŠŠŠ‹Œ‹‰‰‰ˆ‹Œ‹Œ‹Š‹‹Š‰ŒŒŒŒŒŽ’Œ†vod^\]UJ>5-#







!.FWeqy{yvrnqstx{{{{yspprjiijkmnpsurpokggjllkigdb]\]bcbabeffgedaaaa__cdc^ZVVUUWXYWURPOPOMKHEA?<61..,+*+---..-,*,,,+169999<CIL_ptrnkopkbSMHGGJU^]YVQGC7 


















9¬°°°°²²³´³²³´µ·¶µ²®±²³´´µ·¶°±´¶´²²²¶¶·¶°­°³³¶¶µ³²¹½º¶µ´¸·¶¶´º¼¸º¼½¼º¹¹¶º»¸¸º¾¿¾¾½»¼¿À¾¾¾¾ÀÃÿÀÁÀ¿Àonqqqnoopsspqopqqmoqrsttssrssstrsnrtuuuvvsvwvtsorstuvvuuutuvvqttuuutuvxxwwyzzzyyyyzzyx{||{yw{x{{||~|{x|{{||{{{||~~z~~~}~~|{|~~{~z}|}}~€{~~€€€~€~€€~{€€ƒ„ƒ€ƒƒ„„ƒ‚ƒ…†††…„†††ƒƒ……††…ƒƒ…‡ˆ‚ˆˆˆˆ‡…†‡…‚ˆ†ˆ‡ˆ‰‰ˆˆˆˆˆˆŠ‹‹‹‹‹ˆ‰ŠŠ‰‹‡‹‹ŒŠ‹ŠŠ‰‹ŽŽ‘Ž‹“‘Ž‹…€}xtidUPJD>7.$

+
+
+



(3DVajnrstwy|}|yyxursrlfgfhgkmrponrqlmoorqnhhdb`acfgedgggfd^a_a[_^ddb]YUVONNVWTNNHOPNKKFGACA;431/+++-)-,,,,*,-,,5<=;84;<ILcsvrpkjjiibXOAEFOUWXWPJC5


+
+
+









+







<ˆ®°¯²°´³±±´³³¯µ²´²²±¯¯³´´´¶µ²±±²±°³³¸¹¸²°¯°°²µ¶³µ³»º¹¸¸µº¹¹¹º¼¼·º½¼¼»º»µ¹¶»»¼¾¿¾¾»¼½ÀÁ¿¹À¾ÃÅÄÂÁÁ¾½¾oooooponoqsspoorqpprsssstspqstuvtstuuuuvvvuuvtsttttvwuruuuuvvvutsuuvvwxzvww{zxvxwxzyyz{||{ywyy{||~}{||{yz|}}{z{}~~~{}~~{z|~}}~€€€}€€€€‚‚€€‚~€~€‚‚ƒ„‚„„„ƒ‚€~‚„„ƒ…‡ˆ‡…„††„„††…ƒƒƒ„…‡‡‡‰‰ƒˆ‡…†ˆ‡ˆŠŠˆˆ‰Šˆ†‡‰ŠŠˆˆŠŒ‹‹Šˆ†ˆŠ‰ŠŒŒ‹Š‹‰‹‰ŠŠŒŽ‹Ž‘‘‘‘Š‹Š†€xpf^TUNF=2'

+
+





)7KWbjpv{}|xvvwvtutokjhggjpqolmoqonnpqqnhheecddhkjihfbeca`_`abdfd`[WUTRQQSUQNMNONNLLLJJIFC?;722111/.,+,,,,--29@@:89<AJVhvwuqjbbfkjf[OIHIKMPPNIB3


+














Kް°±³³³³²±³³²³²²±²³´²¯²³µ¶¶µ¶²´´²±´¶¸»¹¸·µ²®³µ¶µ¶¸¸·¶¹»¼»»¸º»¼º·¸¼¼¼½¾º¸¸¹º½½¾»¼½»»¼½Á¿¹¿½ÁÅÃÀÀÂÂÂÀÂpoonnppmoostsrrrpoppqrqptqppsuvutstuuuuswwuswxvtvutvwwvuursswwvvvvvvvwxzyxyzzwxyxx{|||zx||{y{{||}€{|{||{z}}}wxy|{~~~}|{}~{v|}}|€€~}}€‚€€€‚ƒƒƒ€{€€€‚ƒƒ‚‚‚‚ƒƒƒƒ‚„…†‡ˆ‡ˆ„†………†‡‡ƒ„„„‚‡‡‡‡ˆˆ†‡ˆ…†‡ŠŠ‹ˆˆ‡ˆ††…‡‰Š‹‹Š‹‰‹ŠŠ‰‰ˆŠŠŠ‹ŽŒŠ‰‹Š‹ˆ‹‹Ž‰ŽŽŒŒŽ‘‘Ž‰†€xobZRNJC;3,$

+





 ,9FS_ktxvsttxuyxurpkjelppplffgijjlmkhfgeddddinmmjeeed___abceec_YUSSTTPSOQLOQQNOLLLLKNNMJE>;89::871000/0146=A?987>CNZmxxvqd\T`hlni_YLK>=<DEEB1


+
+
+
+
+
+





+


+

+	






 Z‘±±¯²²²°°°³²³´³­±²´®³¯±²³´µµ·²´´´²¶´µ´¸º¹¶³¬±³´´·µ¸´¹º»¼¼¼»··¶¶µ¶·»½¾¶»·¹·¸¸¼¼»¹¾¹½½¾¿¿¹¿¼¾¿ÂÀÀ¿¾¼ÂÃnnnonopppqrttsrrpnnpqqpstsrrstsssrsttssuwvuuwzwsttsvwwvuutuwwwwxwvvwwvxxyywy{zzzzyz{||yzz{}}||}~~~|zy{}~~~~||~~}{{|~{{|{{|}|{~€€€~}€‚~€€‚ƒ„„€‚€‚ƒƒ„ƒ€‚„…ƒ€‚…†‰‰ˆ‡††…ƒ…†ˆ‡„„…‚†ˆˆ‡‡ˆ‡†ˆ‰‡‡‰‹Œ‹Š‰†ˆ‡…‰‰ˆ‰‹ŒŠ‰ŠŠŠŠ‹‹‹‹Š‰Š‰ŒŽŽŒŽŒŒŠ‹ŽŽŽ‘Ž‘‘‘†|tnf`\UME9- 








,;L[glsxyz{|zyutrnmopqpkca`aefffeddffbdgiloonkgfec`^`abccbb^XSSVUTSSTQNQTQPOMMLLMQSVTOJHGFEECA>:8789;=>?A?989>DO^pyxxpbVRZdkprsk`RD<:;=BA.








+










#`•±±°²²±³³´´³´´³±±²´µ´µ´²´µ¶µ¶±µ¸·¸µµ¶··º¹¹µ±¯¯²´·º¹ºº»»º»½¼»¸·¸¸¸¸»½½»º»»»¹·¼»½¿¿¾¿ÀÀ¿¾º¾¿ÀÁÂÃÀÁÁÁÁÃpoqpoooopoqrspqqploqrrstuutttsqorssrtsuvvtuvwywsttuvwwuuuuwvwwwwxwxxwxwwwvxzzwzzzyxxz{|{zz|}{y~~}}~~}xz}~}}}}}}}}{z{}}}z}}}{|{||€}}}‚ƒ€{€€~}€ƒ‚€‚‚ƒ‚‚ƒ…ƒ€€„ƒƒ‚ƒ€ƒ‚„…‡‡†„†††ˆ‡‡‡………†‡‡†„‰ˆ†ˆ‰ˆˆ‰Š‹ŠŠŠ‡ˆˆˆŠ‰‡†‡Š‰ˆ†‰Š‹‹ŠŠ‰…‰‰ŒŒŒ‘ŽŒŒˆŒŽ‹‹‹ŒŠŒŽŒŠ‘“”“‰„~zth`XOF=6/( 








"-9KZgpuz|yxvvsrqqqqqlca^bbbb`\acfgeefhkkjhihheca`__]]^][YWUTXVURUUSLQSRMPOMGLNQTUTPNNMMIJJHFC@>??@@?>?>889;<L`r|yvn_UP\didmrrmcQH><8BA,

+	


+
+
+














#d˜²²¯³®°±³³´°°¯³²²³µµ¶³¶²´¶µ³²°´··´µ®¶¶¸²¹¹¸²¯¬¬­µ¹º·¸º¼¸»·¾º¹¹»·¼º¼¼¾¼»»»»¼¸¿¼¾¾½¾¿¿¿¿¾º¹·ÁÄÃÂÁÂÁÀ¿¸rrqqppoopqpprrqqqrrrtttutttuutqqqrssstuuvvuvxxwwvvvvvvsuvwvuvxxwwyywwxuwxxx{yzzzxxxxyyzzz{y{{{}~||||}|}~~~}||}|{z}~~~~~}~~|{~€€€‚€‚ƒ€€€|~‚€‚„„‚ƒ‚‚€~‚„†„‚„„‚‚ƒ„†„‚„………„‡‡‡‰†…†……†‡ˆ†„†ˆˆˆ††ˆ‰‰‰…‰‡‡ˆŠŠˆ‰‹‹ˆ†‡ŠŠˆ…‰‹ŒŒ‰ˆˆŠŠ‹ŽŽŒ‘ŽŠ‹ŒŽŽŽ‹ŽŒ‹ŒŠŽŽ‘”–––”‘ˆ‚{si_VQIA91(






+








 4ET`kqvyz|}{urstrokihcddb\\_bbeddfiheddehhfd_^][ZYXXYWUVVZ[XXVTRNQSRQPPMJKNPQPMHJLMNOOLMKIFDBAA>=:=<6789:Ias|wri[PM\ef`^hoqnfYL@=DB*

+
+
+
+



+













$h›´³²²²°°°³³²°°²³´¶µ´³³´µ¶µµµ´´´¶¶¶µµ´·¶¶·¸¸¸·µ²°²µ··¶¸¼¾¾¿¾º¹º»½¾¾»º¼½º»»»¼¿À¾¾ÀÀÀ¿¾¿À¿ºº¸¿ÅÃÁÀÀ¿¿½»rrqpolonnqrrrrsrrstssttssrstuutqpputttusvvuuxyyywwwvvuuvwwuuwxxwxyywwwuwyyz{{{zywxwuxyxw{|zz}{|}{yz{||}~~~||{z{~€~|~~|{x€‚€‚€€‚ƒ‚~‚€ƒƒ‚ƒ‚ƒ‚ƒ„ƒ„ƒƒ„„‚ƒ„††„ˆ‡…„„„…„†ˆ‡„„ƒ††‰‰‡ˆ‡††‡ƒ†ˆŠ‰ˆ‡……‡‰ŠŠ‰‰ŒŠˆˆ‰‹‰†ŠŠŒŠ‡ˆŠ‹ŒŒ‰Œ‹ŒŒ‹ŒŽŠŠ‹Œ‹ŽŽ‘‘‘’”“””””“’‰xqg]TOHC>5$


+


+







$1?N\hs|ƒ€zwvwrskrqmigdb^__a`aafifaabceffd_]ZYYUQRSSRUVZZXUUQPNPRSMMNNLLLOQNEEDHGJLKKMMKGF>BCC><<:56569KaqvrhbTKHYcc\WUbknng]O?HB&
+
+
+
+
+
+









*m³´¯¯¯²²°±´²±¯°°²´³²µ®´²¸µ¶¶¶¶µ²¶²··¸¹¸³·µ¸´¹¹·­³³³µ¶´º¼¼½¼·¹ººº¾¿»³»¼º¹º¹¹»ÁÁ¾¿ÀÁ¿ºÀÀÀ»¼ºÀºÄÂÀ¼¾ÀÀ¾prnqnnonmortqpprqssrqsssststtvvtosvvxywvvuuvxxyyvwxyxuuvwvrxxwxxwyyxvvuxvzz{xxxxxzyvy{wy{||}}|x}|yy{zyz}|}~|||||}€~}~~~}||~‚‚€€‚‚‚‚~ƒ‚‚€ƒ‚‚‚‚„„‚‚ƒƒ„†„‚„†……‡ˆˆ…„††„†‡‡„ƒ†‡‰‰‰‡…ˆ‹Š‰†……‡‰Šˆ†„„‡‰ˆŠ‰‹‹‹‰‰ˆ‹ŠŠ‹Œ‹Šˆ‰ŒŒŠŠ‹ŒŠŒŒ‹ŠŠŽŽ‘‘Ž“‘’“””““”““•••”‘‹‡wnc^[WK?5-!










"7FWhuzyxxyyyyywrlmlihhfebaafhd`^]_`cdb_[YYWQPPPQRTWYYWUSQMNOPRQNNPNNLOPMFEFFDEGHKLNLJGDDEEB>=:8776:Lcquoe\NCIW`_[PNTahnnhZLJ?"

+
+
+
+











0sŸ³³²°¯³´²²²²³µ´³´·¶···´²¶¶µ¶¶¶µµµ¶¶¶¹º¹º¹¹º»¹¹¸¶³³³³³´·¸¶¹¸µº½»¹½¾»ººº¹¸¼¼¼¿Â½½¾À¿»ÀÀÀ½¾¿ÁÂÂÃÀ¾¾ÀÂÄoqqrrpooooqrqpqrrrqprrrrtuttttuvttvuvvwvvuuvvvwxxxxyywuqvvwxxvxwxyyxwwwxz|{yxxxx|}|x{z{zz|}|}|||{zzzyzz||z~||}~}~~€|}~|~}}|~‚~€}~€}‚‚€}€|‚ƒ~~€ƒƒ‚‚„‚ƒ……„„‚…ƒ…‡‰……†‡„††‡…†ˆ‰ˆˆˆ‡„†ˆ‰‰†……‡ŠŒŠ††„ˆ‰ŠŠˆ‰ŠŠŠ‰ˆ†‹ŒŒŒ‹Œ‹‰ˆŒŽŒŠ‹Š‹ŒŽ‹‰ŽŒŒŽŽ’‘Ž‘Ž””“’‘“””–”“’‹†€zsg[RNG?7. 








%<GU_irz€€€|wrlppmklkifcafcdYYUVX]`^YWTVWTSSSTUTTZYXVUPPQPPQQMKOOLKLLKHIIGBE=GCJLJHFBCDEB@:;:;:<>PdqupdYEDMWX^[QBRU^_ddZLJ<

+	
+
+

+
+
+
+
+
+





+



8|£²´³²­³´³®®¯µµµ´¶·¶±¸¶³²²±²³µ±´´µµµµ·´º»ºººº¹µ¹¸´µµ°³¬¶¸·¸º¶¼½½¸½½»ºº¹º¹¿¾¾¾Â¾¾¾¿ÀÁ½À¾½¼¾ÀÀ¿Áº¾»À¾ÂÃqqqssqmopqpqpolrsrrprsrrtvutpoqxvtssrtuuvvuvutvwtxxyywtquuswxyyxyxvwwxvx{}zwvxwy{{|}{{{{z|||||zzz{zzyzz||}}{|~}~{{}~€€€}~~~€|€~~€ƒ‚€‚‚‚ƒ‚€„…†„‚ƒ„ƒ„„ƒ„ƒ†‡††‡‡„…„……‡‡†‡‡ˆˆˆƒƒ†‡‡…††ŠŠ…†‰‰‰Š‰…‡ˆˆˆ‰‰‰‹ŒŒ‹‹‹ŒŠ‹Ž‹ŠŒ‹ŽŽŽŒ‹Ž‘‹ŠŠŽ‘‘ŽŽ‘’‘’““”““‘‘’•––•••”’‰€wne^TOD:0(












&;KYiu|}|wrkopnlmmljfghgc^XTSTX[YUTTUUTTUUY[[\\[[ZVPSVVUSPLLNOLHFIJIIJIHFGFEHIIGEA?ACBB@>>??@AUgpsndVBDOX^_]RLPXYXX[TJF7


+
+












>¥´´³²²³²±±²µ¶·´³¶·µ²´´°°´µ·¸¶µ´´µµµµ·´¸º¹¹¹¹¹¶¶¸´µ¶¸µµ¶·¸º»½¼½½½½¼»º¸¸º½¿ÁÀÀÂÂÀ¿¾¿ÁÃÁ¾¿¾ÁÅÄÃÀ¾¾½ÀÁÀÀrrqpssqqrrpqpoqrssqortrqsuutsstwvorrsuurvwwvutuvvxyxwvtqvtvwxyxyxwwxvwvvz{zwwyyyxxxxyy{{{||||{zz{|{z{}}}}}}{}|~€€~{|~}‚€€}€€€{€€~|}~ƒƒ„„„ƒƒƒƒ„ƒ}‚„…€ƒ…‚ƒ‚ƒ€„„„†‡ƒ‡ˆ†„…„„„‡‡††‡‡‡‡„„†‡ˆ……„‰ŠŠ…‡‰‰Š‹Š…ƒˆ‡ˆ‰‰‰ŠŠŒŒ‹ŠŠŒ‰‹ŽŽ‰‹ŽŽŠŽ‹ŽŽŒ‘‘Ž‘Ž‘‘Ž‘‘’’’“’“”””””–“•”“‹†~ul^TLHA;4-









!(7HXbjnnlppojmjnnmljhd_ZOQPRTUNQRQNQSTTY[^_^\\YUQTXXYTKNMMJKGHHIJKJJLKGHFIJJHGB@?CCDDB@A=ADYjonldVAGPX\`_RFR\[WSMJGB+
	

+
+

+

+
+






+
+





F…§²³²²²²±¯¯´¶·´²±´·µ¬³³±°µ´µµµ¶·¶·µµµ¹µ·¶¸´·¶¸´¸¹¸¸¹º¸·º·»¼½»ºº½½¼»¹µ¸¹¼¾¿¼¼¼ÁÂÁ¼À¿¿ÃÿÁºÀÃÅÁÿ¿¿¿À¿¿rqoprsrssrqrsrssrsqqsurstuttuvuttttsrwvuvvwwuvrvvwwwsuvvwxwwxwxxvwxytwyzyzyxxxzz{zxxyy{zy{|{{{{zz}{{|}}}}~}{~€}||}~~€~€€€€€€€€‚~€‚„†‚ƒ‚€‚‚ƒ…„ƒƒƒ‚‚„†‡‡ƒƒƒ„…„‰ˆ††‡„ƒ†…„„‡‡…††…†…„†ˆ‡ˆ‰‰‰‰‰ŠŠ‰‰ˆŠ‹Š‡†ˆˆŠŠ‰‰Š‰ŒŠ‹‹ŒŠ‹‹ŽŒŽŽŒŽŽŠŽŽŽŽŒŽ‘ŽŽ‘‘‘’”–”“’“•–“’”—•‘މ„|rh]XSMD:3.'






&7HT\ciopnnopqonljfaZVSOPRSROMJKNQTSVZ\]]\YWURQWZZUONNLKMNJGILLKLNNMJJIKKKIGEDEDIKJHD=@EZjmljdVBIPVYa`QKU`\XPJGD>(




+




+














NŒ©²³²±²³°¯±³¶µ³´²´¶¶µ´´´µ´³´µ·¸¹·¹¹·¸ºº¸¸···¸¸·¸»»»¼»¹·¼¿½½½½¼½¼»¼»ºº¼½¾¿¿½»¼¿À¾½¾½½ÁÂÃÁ¿¾¿ÃÅÿÀ¿ÂÀÁÁrrqprttsqqrrrstsrrrsuutuvvupuvurstutvvvsuuutwxwvwwwwxwxxwvwwvuuwxyyxwxz{{zzxytz||zyxxy{yy{{w{z{{}}}||w}€|~}}{{{|}}{}~~~~€}x€€€€€~€€€~{„„‚~}}€}ƒƒƒƒƒ‚‚‡‡‰ˆ„„‚„…‡‰ˆ……ƒƒ‚…ƒ„…‡…‡ˆ‡…††……ˆˆ‡†ˆˆ‡„‰‹‹Š‰‰‰‰‰ˆˆ‰Š‹Š‹‹ŠŒŒ‹ŠŽŽŒŒŒŒŽŽŒŽŠŒŽŒŽŒŽŽŒŽŽŽŒŽ’’‘“••“‘“”“’“•”‘’’“Šƒzmf]UOLIC9-











%1=LYcilmqrolonkc`\XQRSTTQMKHNPQSSSXXXXVTTQSX[[VRQPOLNNLHMOMKLLMJLHIDHJIGGIHDJLOMF=?EXfjghfWAJRUWa_RK[daYQFDB<&




+



+











Y•¬±´´´³±®±±³µµ¯´´´µµ²±±µ¶¶±µ¶¹¹¸¸¹¸¶¸º»º·¸·¸»º¶¹´¼¼¼·¶¶¼½¾µ»»»½¼¸ºº»¼½µ½¾¿¼»¶¾¼½¼¾¼¾¾ÂÁÁ¹¿¾Âÿ¿ÀÀÀ¿¾ssqpsutspqosqrpqqrstttsuwwvttvssuuvvwxwvvurtwxwwvxtxxxyzuvxyxwwxx{zwwxzzyyyzzzz||{zzy{{zy{{z{}||~~}|{{}}~}{|}|€~|}}}~~€€}|~~~€€}~€‚‚€€€}€€ƒ€€‚ƒƒ€‚ƒ‚„†‡ˆˆ†ƒ„„„ƒ„‡ˆ‡„„ƒƒ„…‚ƒ‡‡…‡‰‡†‡ˆ†ƒ„‡‡†ˆˆ‡†ŠŒŒ‹‰ˆ†‰†‡‰ŠŒ‹ŒŒŒŒŒ‹Š‹Œ‰ŽŽŒ‹Ž‹ŽŒ‹ŠŠŽŽŽŽŽ“‘’‘‘’‘‘’“““‘Ž“““’“”‘’•—˜˜—•Žˆyqg^]YPC8.%


+








%6GS[bhmnmpqmifa]YUSTTQNMLNQPOMORTTTSRRRTW[ZXVTTRPNMLLOQOKKKMOMJGFGHHGLNKGHKNMF>>EWdghkhVGLUW\_[TV`gd\TJ@C8 


+
+
+
+









+






c›®°³´´³±¯±±´¸¶´´´´²±°±²´¸··¸¸¹º·¸·¶¶¶¸º¹¸¹·¹»º·º»º¼¼»º¹º½»¶ºº¸¼»¹¹»¼½»¼¼»¼¼º¹»¿½½¿ÁÀÀÁÁ¿¿ÀÀ¿ÁÁ¿À¿ÂÄÃÁrrppsuuvtsstsqoostsqttsrvutssrtsuvvrxxxwwvuvyyxwwwvvvvz{zwyzzyxxz|{yyuyvvwzyz{zy{{z{|{{{||zx{|}||}}z|{}~}~~|{€}€€}~|€~}{~€€ƒ‚€}€€€€‚‚ƒƒ‚„„‚‚„‚…†…„††…„…†„†ˆ†ƒ„‚…†…„…ˆ‡ƒ††…‚ˆ‰‡†‰‰‡‡…††Š‹ŠŠ‡‰Šˆˆ‰ŠŒŒ‡‹‹ŒŠŠ‡‹ŒŒ‹‹ŒŽŽŽ‹‹ŽŒŽŽŽŽŒŽ’“’’‘’‘‘Ž”•”“““’—˜——˜•–”‘Žˆ‚zoj]VNF?8,$







 )3?MX`fjnmjhf`\XTTPSONLPOMJMNNOSPTSSNUVZYXVVRTQOKLMSTQJJKONNIGCGDFHOQLEEFHG@6<FZegjjgUFQY^`^MOS`fc^WOJC4
		
+


+



+
+
	





hŸ¯°¯­®¯¯¯³±´²¶¶´²µ°¯¯³¯±²·¶¸¶·¹·¸·µµ²¹º¹¸º²··¹¸¼»¹¸»º¸·º·¶·»·¼¼»µ¶·¼º¼½¾ºº½¼¶º¸¼¹ÀÀÁ¿À¾½½¾ÀÁ¾À¿¾ÀÄÆÅÄqqoqsuvxvstuqqpsuvrqsutttrqssuutuwvvvwvxwvvyzzxvtvvwwwx|{yxyzyz{||{{{vyxxz{yv{zyz{y{{yz{{zyzzz{{xz|~}}|}}}}~||€~~|€‚|~€€~€‚ƒƒ‚€‚‚ƒ„…„ƒƒ„‚„„ƒƒ„„ƒ„……„……„„„††ƒ„†‡†ƒ†ˆˆ†„……†‡‡ˆ‡†‡ŠŠˆ††††‰Œ‰ŠŠŠŠ‹‰ŠŠŒŽŒ‹ŒŒ‹‹‹ŒŒŒŒŽŽŒŒŽŽŽŽ‘‘’Ž‘’‘‘’’‘‘‘‘’”•“‘Ž‘“‘Œ‘“”“‘‘”—™••—˜——•——•އ€yoeZXQI?6-"









+




':EOX`ejjhb\YWWXVUTRQPKJKMOQSTVXXWWYZYXXVUTTRRUXYXUQNMOROLHGEDDHNPJC>??<86;N`jgjibSIMW^b\LGO]d`\VPID2
+
+
+
+
+
+









!k¡°²°°²²°²´³³°´¶´°´¶µµµµµ¶¶·´²´¶¶··¶´·»¼¸¹ºº¸·¹º¸¸·¸¸··¸º»¹º¹¶¾Á½¹¹»½½½¾¾¾¾½¼»¼½»¸¿ÂÁÁÀ¾¾½½¾ÁÃÂÀÀÃÅÆÇÇqrrqrrsuurstsqrtvuqssrtuurrstuusuvvvustuwvwyzwvvwxwvwvyzyyyzzt{|{vxzzvxyyy{yy{|y||{zzwz{zxyz{{{xz{|~~}}~~~}||y~€y}}~€z€€€~}€€€€€‚‚‚‚ƒ„„ƒ‚€€€~}ƒƒƒ…†…ƒ‚„„…†‚€‚‚……‚„ƒ„„„………†‡†…‡ˆ………‡‡‰‰‡………‡‡‰ˆ…‚ˆ†ŠŒŒ‰ˆˆŠŒŒ‰‰Š‹ˆŒŒŽŽŒ‹ŒŽŽŒŒ‰‹ŒŽ‹‹‹ŽŽ’’’ŽŽ‘’“’Ž‘’‘”•”’“•”’’“’’“”‘––””–˜––—˜˜™—•’އ€wjeURNG?8-#









%2?KW_c`ZZW[[YXWUTSPFKJPOSSWXZYXWXUUVVTTTUWY\\[XSRKOPNFECBADGHHE<:650.-@Vfomjf\J6AFT]XMILY`]WTJID/
+
+
+	









+
+
+
+
+









#o¤±²²³´°®¯¶µ´°±±´±³³·³µ¶·¸·²²¯±²³´····¼¼¹³º¸¹¶¹´··¸·¶·ºº¹¸¹¹º´¿Â¾¸»½¿À¿¹¾º¼¼¾ºÁ¼¹¹¿ÂÀ¼Á¿À¸¾¿ÃÄÄÀÁÃÄÃÃÃnrrrqposqrstsppssrqssqquvuttqvvusttwustwwwwxyxvxz{yvvxyxuxy{zy{|vvvzzwvzzz{zyz|~}}|{{z{}{zzz|}{z{|{}~|y€€}||}~~}}|}}~€€~}~€€€€‚ƒ‚‚………‚}€€€€‚ƒƒ‚„„ƒƒ„……†…‚‚‚‚……„ƒ„„………†‡‡†ˆˆ†‡‡†‡‡†‰‰‰ˆ†‡ˆ††ˆ‡…†ˆŠŠŠ‰‡††ŠŒŒ‹‰Š‹ŒŒŒ‹ŒŽŽ‹‰ŒŽŽŒ‹Œ‘’’‘Ž‘Ž‘‘“’’’“”••”’‘’”•“’’“”–“‘‘“•••”•˜——˜š™—™›™˜–•ކ}vlb\WPH>4+!














'9EOSVXZ\][YXWWUUSONNQSTTUVXVUVVUVUSTUVVWYZ\ZXUSPNKHD@@ADEEDA;61.,,,DZksojaTA68<FUSKHIT[ZWQKKE-
















%r¦±²³´³³±²´¶´´´´´±²³´³´µ·º¸±´¶·´´´µ¶·¸»¼º¹¸·¸º¹¹¹¹¹¸¸¹ºº¹·¸¼¼¼¾À¾¼¼¾¾¿¿¿¿¿¾¼¾ÀÁÃÀ¿¿À¾ºÀÃÂÂÂÃÃÄÄÃÂÃÃÃÃÅprqqqqrsrssrrrrsrnopqqsuutuvxwuutstutruwwwxxxxyzzxytxyzzyuyyyyzzwxyz{yxxzy|xyu}~}|||||}~}}}{~~}||z|~}|~€€{~~~€}€z}|~}~~~~}€€„†€€~€€€€€ƒ‚ƒ‚„ƒ„…††„‚‚‚ƒ††‚„‡‡…………‡ˆ…‡‡‡ˆ††‡ˆ‰‰‰‰‡‡ˆ‡‡‡††‡‰ˆˆˆŠ‹‰‡‰ŠŒŒ‹ŒŒŒ‹‹‹ŒŒ‹ŽŽŽŒŠŠ‹ŒŒŠŽŽŽŠŽŒ‘‘ސސ’’’’‘‘’“‘‘“”“’””“”’““•”–“““–““•–—™˜˜”™š˜–‘†~wib\TMGA:2(









'1;EMTWWTTUUUWVQLKJMOOMMNPTVVTTTPRQRQPOPQVWUTOHIGFA@ADBA??:4,+&+-E^mrma\L?47:HQL>CCHMPQK?KF+
+
+
+
+
















+





(u©²²µµ´³³®´³³±¶µ´°±¬³³³³´´·±µ¶¶µ¶·¶²²²»¹¹º¹···¹¹»¹¹µ¸¹¹¹ºµº¿¾»¾¼¾¼»·¸¸¿ÀÀ¿À½¾¾ÂÀÂÀ¿¼»»¿ÁÁÁÃÂÁÁÂÂÁ¼ÀÂÃÄrqprsstuqsssststsrpoorstssuwyxusqrouvsuvxxxwwxxyzzwvxyy{zxxxy{zzwz{zxzyzzz||zz||{{|}}}}~y€~|}}{|{{}€~~~}€‚€€~}€€€€€~~}}}~}}}~~~~€€‚„„ƒ€‚ƒƒƒ‚‚ƒ‚‚ƒ„„‡‡‡„‚„„„…………ˆˆ†‚…†‡…††……†…‚ƒ†‰Š‰ŠŠ‡‡‡‰‰†‡‡ŠŠ‰‰ˆ‹‹ˆ‰‰ŠŒ‹ŒŒŒŒŒŒŒŽŽŽŽŽŒ‹‹ŒŽŽŽŽŽ‘‘‘‘’‘‘‘‘‘“”“‘‘““”•‘‘’”•––––•”“”••–˜—˜˜˜—˜›››š™–“Žˆ€wme[YSJ?4(














'4>EIMPQPSUUQJHGFHJIHGKOQQPPQPNLLJFFHJNQQOLFGGGFDEEB@=:61,*)*-F`mpicXI?98=KQKC@?>>?IE<IE'
+


+















+x«³µµ´¶´´´´²²²¶·³±°±³´³³´µ´°´³´´·¸µ³´µ¹·´¸¹¸·¶¸¹º¸¹·¸¹ºº»»¼¿½»½¿½»º¼¾¿¿ÁÁÀÀÀ»¿ÀÁÁÁ¿½¿¾¾ÀÀÁÁ½ÁÁÂÁÄÅÃsrrstsvwvsssttrrtssqrrssssttxwutsstvxvtuwuwwxzyxyvwwyvxxyzyuz||zz{zzzyxyzz{{|z{z{zz||w~~~}y||}{{{}~}~~€}~~‚€€~{{{}z~~~|~€€€€}‚„„ƒƒƒ„…ƒ€ƒƒ„†‡ƒ„ƒ„†…ƒƒ…‡‰‡…„†††…†‡„ƒƒ„„„„‰ŠŠŠŠ‡‡ˆŠ‰ŠŠ‹‹Š‰ŠˆŠŠ‰‰ŠŠ‰‰‰‡Œ‹‹‹Œ‰ŒŒŒŒŽŽŽŽŒ‰Ž‹ŽŽŽ’’Œ‘ŽŽŽŽ’’‘“–•“’’’“”””””––••—””””””–˜˜——˜•–—œš™–™š™—’‡€wlfYSLD<4( 














"+7@EJQSRRJHADEE??>CEEEEGHGFEEDCBA@BCEEEEDEHIJIFB>64-,()(*/JcmpgbWF?<>CQVMF@=<9AGE;HA#	















.|«²´´³·¶¶¶¶´³¬¶´³°±°´´³³µ°°±µ³´´¶³²±µ··µµ¶¹·¸´·¸¹¸¹·¹º¹¹»ººº½º½¾¼»¼¾À¿¾¼ÂÁÁÂÁ¿½¼¿¼Á¿¿¿ÀÁÁ¶ÄÄÄÂÁÀÄÆÅÅÆÄsqqtutuwwuprttrstuttssuvutuvwwtuuvvvxxvvvtvyyzzxyxwwxxvwy{ywy}{yyzyyzzxyyzyy{}|zz{z{|}~€~|{{|{~|}~}z~~~}}~€‚‚€}~~~{}|~€€|€~€}€€‚€„ƒ……„„…„ƒ„„ƒ„……„„„†…„‚ƒ‡ˆ‡„‚†‡…‚…‡†……‡‰‡†‡‰‰‰ˆ‡‡ŠŠ‰‹‹Š‰ˆˆ‰ˆ‡‡ˆˆŠŠ‹ˆ‰‰‰‹Œ‹‹ŒŽ‹‹ŽŽ‘ŽŠ’‘’’ŽŽ‹““’’‘‘“•••”“””•••–••••—–“““’’”˜š˜˜™–—˜™˜–—™œ›™˜—”…}tkc\WNE;3(















'19DJPROIDCEB;;<;>@@@ABA@@AA?><;>@@?@AACFHHHF@:4/+*((''3OfoofaUB>=?GTTKD@><=BFEDF= 





+
















;€­²³³µ¶·´¸¸¸´²´²³²µµ´´´³´·¶·¸µµµµµ²´·¹¹··º¹¹¹¶¸¹º¸¸¹¹»»»ººº¼¾½¼½¼¼½¿¿½¼»ÁÃÃÄ¿¾¿¿¿ÁÃÁÀÁÁÁÃÅÆÁÀÂÃÅÇÆÄÆÃsqqrsmswwtqqrostttttsptuurvuvvvuutvvwvvuttvyyyxuyzwwwwxuxzzyxxzxyyxwywwwyxyw}|wwy|}}|~~|x{|}|}|}~}|~}y{|~|€€}~€}€~€}€‚‚€€}€ƒ„„„…„‚„ƒ„„ƒƒƒ„…‚………ƒ‚†ˆ‡„†ˆ…ƒ…‡‡†„ˆ†ˆ†‡‰ˆ„ˆŠŠ‹Œˆ‰‹Šˆˆˆˆˆˆ‰‹‹ŠŠ‰‡ŠŠŠ‡‹ŽŒ‹ŽŒ‹‹ŽŽŒŒŽ‘ŒŽŽ‘’’’’Š‘‘‘‘••”““••”••‘•”–—–”“““’•˜™™™——“”‘–•›œ™—›™˜–‘‡wi`VSMH?5'













$2<CFEDFGD>=<;;<<<9=><:=<<655:=<9:::<>?@C@<5.,+*))(,7Ukrog`T>909GJJA7<?AAEGFAE5

+



















Jˆ¯³±´¯¶·¶¶¶µ´³²²²²´­²±³®³µº»¹µ´´¶´µ¶¸»»¹¸º¹±»·¶´º¸¸±¸¶¼¼º·¼½¾¾»µ½¾¾½¾¾½»ÂÁÄÃÁ¼¿ÀÀ¾ÁÀÀÀÁÀ¿¿ÅÄÀ¿ÃÂÅÃÅÃÅÂsrqqrrtvusqqqsuvttutrrsuttvwuuvvvvvwttvutsuz{yxvzzwvtwxwvyzzwxzyzyvxzzyyyz|}}~}y{z{~}{}|zy{}}|z}}{{}||€|yw|~~}}€€€~€€‚‚‚ƒ‚€‚‚‚‚‚‚‚‚„…ƒ……„ƒ„„ƒƒ…†……„„„……………†‡‡…ƒ†‡†ƒƒ‡Š‰‡†ˆˆ‡‰‹Š‹‹Š‹Œ‹‰ˆˆ‰‰‹ŒŽŽŠ‰‰Š‹ŠŠ‰‰Ž‹ŠŠŒŒ‹Ž‘ŽŒ‘ŽŽŽŽŽ““’’‘”“’‘‘’“““”•“’‘“”•‘”––”“•—–”’“’”••–—˜——˜˜—˜››››šš›œžœ˜”Œ…{qgebZPE<3'









*26;@EDDA>;;<=<:;<;;:;96448:988889;;==:40.,+****/@\prnicS=403EJC948BIKIFCFB/




+























T±µ¶¶¶µ¶µ³³³µµ´³³´³²²²²³³µº½¹µ¹º¶³¶¸¹»»¹¸º¹ººº¸¹º»¸¶·»»¼»¼¼½¿À¼»¾À½½½½¾ÁÂÃÃÄÀ¼¿¿ÁÂÁÀ¿½ÂÁ¿ÁÂÃÀ¿ÂÄÄÄÃÂÅÆrqrprsuutttrrsuwvuurtuvuutvxwsuvxxyxttvuuuuz{wxuyyyvvxyxxy{{yyyy{zzy{|{{z{|x|||z{{z{|{}|{{~|{y{yyz{{~~~~€€~|~~€}~€€‚€‚‚ƒ„„„ƒƒƒ‚‚‚‚‚‚‚‚ƒ„…†…†…„ƒ„…‡‡†…ƒ†‡‡‡ˆ‡‡‡ˆ„„„„……ƒƒƒ‡†‰ˆ‡„‡ˆ‰ŠŠ‰Œ‹‹Š‰‰‰†Š‰‹ŒŒ‰‡ŠŒŒ‹‹Š‹ŽŒ‹Š‰ˆ‹Œ‰ŠŠŒŽŽŽŽ‹Ž‰ŽŽ“”“‘”‘’“’‘‘“‘‘‘’’”•”“‘’“’’”••“”“––•”–—–••’“•˜——˜š™š™š—–•™›œ›››š™–”‰†€wmcZUNG@9,!










 -38;;<>@@><::;;46697436795867566774---,+*+++4JbsqlgbQ<209FI>5-5CMOG?AE?+

















 Z‘³µ´¸´´²²±±±µ´µ¯µ¶¶´µ±²±²µ¹·¸¶¸¹¶°·¶¹¹¹¸ººº¸º»¹¹¹µ¹²¹º¼µºº¼¶¾¾¼¼À»¸·¼¸¿ÂÁ¾Á»¾¼¾¿Á¿¿¾À½ÂÂÁÁ¾½¼ÂÅļÂÃÅÅrttsqsuuttttsspwvsttuwwvvwvwwwuvwyyxuuvvvvvyyyyxvyywxyzyw{{{zxwy|{{y{~}|yz{{zzxy{zyy{}}|y|~€€}}|{{yw|~€€€€€~€€€€~|‚‚‚€‚ƒ‚‚‚‚‚„„„…„„ƒ‚‚€~‚‚ƒƒ‚‚ƒ„„……„„…†‡‡‡‡†‡‡ˆˆ‰ˆˆ‰‡………††…„…‡‰‰ˆ‰ˆ‡†ˆˆ‰‡‡ŠŒ†††ˆ‰Š‹ŒŠ‹‹Š‰‰ŒŒŒŒ‹ŒŽŽ‹Œ‰‰ŒŒŒŠŒŒ‹ŽŽŠ‹ŒŒŒŽ’‘’••‘‘“•”””“‘’‘‘‘‘’‘“•–‘“““’’•––••–•—–•–™—••”–˜™™˜—˜˜˜™™™˜˜™›š—”ššš™šš›š˜—–†}ukf_ZSJ?4'












")-39@A?::;<:64476434689998655431-,-,*)*+,9Odonjc\M711;GF92-3BLMD<<B;%












"^“²´³¶³µ¶¶··µ´´´µµµ·¹¶±²±³´¶¸·¶´¶·¹¹¶¸¸·¹¹»º¸ºº·¸¸·¹¼ºº»ºº»¼¾½»¼ÁÂÁ¾¼½ÀÀÀ¿À¿¾¾¿¿¿ÁÂÂÂÂÃÂÂÁÀ¿½¿½ÁÄÃÁÀÆÇÆttttttuutrrquuttuqstvvwwvuuuvwvtvvutuvwxxuwyz{{zxxxwxvyzz{{{zyyy{||y|~~}|||zyyyy{zzv{||zzz~~~€}~z{|~~~~}€€‚‚€€‚€€~ƒƒ‚€€‚‚„„ƒ‚‚‚~€€‚„ƒ‚‚ƒ‚ƒ„……………‚††‡†‡‡‡†‡„‡„‡…†‡†…„†‡ˆŠŠ‰‡Šˆ†‡ˆ„‡„ŠŠˆ‡†…†‡ŒŒŒ‰‰ŠŠŠŒŒŽŒŠ‰‹ŒŽŒŽŽ‘Š‹ŒŽ‘’’‘‘•–“““”““’Ž’‘““‘“’“’•—–””“”‘•–—••–•––Ž•––•–”—˜š™™–—”˜™™˜™˜™–™•–—–•˜˜™›œšž œ•”‘Ёwkc]XPF;1#








+


+(179:;<>=96555615699;::7521//..-+&)**,<Q[abaYPI32-=ID53.1=FHA8:@5

+



+


















$a–³´³²²·µµ¶·´µ±³´³³¸¸¶°°±µ´µ±³´´¶¶µº·¸µ´´¹¸¹¸»¹ºº¹¶»»º¶¼ºº·¼¾¿º¾ÀÀÀÀ¼¼¾À¸½»À¾½½¿»ÂÂÀ¾À¿ÂÀÀ¾½¾½½½¾ÅÄÅÈÇÃusptvvvvtsqtvwurtrutwvuvtsqssuuvwwwtuvxxxxwwx{zyvvvvxyyzzzzyy{yy{{{|~€z}~}zxxz{{{zzz{{zz{|}~~~‚€~}{{|}|~~~~~€‚}€€€€‚ƒ‚€‚ƒ~€€€€‚„ƒ‚‚€€„„‚‚‚ƒƒƒ…‡†„„†‡†††‡‡††……††ˆˆ‡„„ƒˆ‰ˆŠ‰‰‹Š‡†‡‰‰‰ŠŠ‰‡††„‰ŒŒŒ‹ˆ‰Š‹ŠŒŽŒ‹‹Œ‹Ž‘‹ŽŒŽ‘‘‘‘‘‘Ž‘“•“‘““““’“’•”““”•••”•—–”•–”“’––•”””––”•———–•—ššš™˜—”˜›šš™˜˜–˜˜š›˜˜˜—˜šžŸ¢¢¡¡¢œ“Œ†wni]TJB8.!









#*/47:<=??=:99:<<<;;:9620.///,+**+,-=OWYXUOLG?75@JC31/09AD>69>1






	

















&ešµµ¶µ²µ´´³µ¸¶··²µ¶··¶´³´µ·´°¯²´¶¶µ¹¹¸¶·¹º¼¼¼»¹»»ººººº¼¼¼¼½¼¼½¾½½¹¼½»¸¼¾¼½¿ÁÃÁ¾¾ÀÁÂÀ¾¾½ÀÂÂþÀÀÁÄÆÅÆÇÆÂtrqsvvvvuuuuuuutsrtuvvustuttvwwwwywuutuvwwwtyzxvvwxvxxz{zxzx{{{xwwy|~~}|{{zz{||y|||||xy{{{}|{{€~~{{{}}}~€€€€€|€€€€€€‚‚‚ƒƒƒ‚‚ƒ„„ƒ„‚‚€|ƒƒƒ‚„ƒƒ…†…„ƒ‡‡…ƒ‡†‡„…‚ƒ„†‡ˆ‡……‡ˆ‰ˆ‰ˆ‰ŠŠ„†‰ŠŠŠ‹Š‰‰…‰‡‹ŠŠˆŠŠ‹ˆŒŽ‹Š„‰‹Œ‹Œ‹‹Œ‘ŽŠŠŽŠŒŽŽŽ‘‘‘‘Ž’’‘“’”Ž’””“‘‘“•”‘”•””––•“•““‘‘’”––••—––˜——˜—––”˜šš—–”””—œ›šš—˜—˜”›žœš›œœšœžž£¤¤¡ ˜—”‰‚wf`[SIA8/#









%-39@DC@>=@A@<=7:7531---.++)+*-->NPRQIHFJKD8BH@1/.17>@?7??/






+




+









0pŸµµ¶¶³²²²±´³¶·¸²···¶·´µ´¶·¶±³µµ²¶·¹µ·¸··»¼ººº¸»»¹¸ºº»»¼¼¾¿½¸¼¼º·¸º¾¸»¾¾º¿ÁÃÄÁ»¿¿ÀÁ½½¼Á¾ÃžÄÄÄÄÄÂÃÁÅÃrpptuuvvvwwvttsvursttvusvxuwwxwvwywuvuuvxvvwyywusxyzzz|}zz{|{|{ywvxzz{{|}zz{w{{{{|}}}||{{{|z{{}}~zy|y{|}~~€€{€‚‚€€~ƒ„ƒ‚€‚ƒ„„„ƒƒ„ƒƒ‚„ƒ‚ƒ„……ƒƒ………„„……††††††…ƒ„„………†…†ˆ‰ƒˆ‡‰ˆ‹‹ˆ‡ŠŠŠŠŠ‹‹‰Š‹ŒŠ‰Š‹‰‰‰ŠŒŒ‹ŠŠ‰ŒŒ‹‹‹ŽŽŠ‹‘‘ŒŽŽ‘““‹ŒŽ‘‘‘““””•“Ž’•”’’’”•”””“’’•––••“””““”••–•˜˜—™˜—˜”“”•—™˜˜˜——–—š››œœœœ™™™›š™˜œœœžŸœ¢¤¤£¢¡žœš˜…|tha[SKC<4%









"+4;>@AADEC@><;9740.---,+**+,.@MONKE@BIPLDBB;/./16<@@AC@-





























:z£³´µµ¶´³´´´µµ··¸·¶µ·¶¶¶¶¶¸¸¸··¶²·»¹¸¸¹µ¸º¹·¸º¼¼»¹¶ººº»¼¼¾¿¼¹º½½»½ÀÀ¾¾¾¼¹¿ÃÂÂÀÀÀÀÁÃÂÁÀ¼ÀÂÄÅÄÆÇÆÅÅÃÁÂÃÅÆrpqturuvvvwvuttvvsssuuttwwxxwwvuxxxvwwvvzzxvxyyuwxyz{{||{{||{{{yxxzzzyy{{{}|yyyx{{|}|{{z|}}{|}~~}|~y|}yx||}~€€€€€~€‚‚‚‚~€€€‚€€€‚……€ƒƒ„ƒƒƒƒ„…††„~…„„‚ƒ„„‚………†ƒ‚‚†……„…‡…‡ˆˆ‰‰‰‰‰‹‹‰‰‰‰‰Š‰ŠŠŠŠŒŒŠ‰†Š‰‰‡‰‹ŒŒŒ‡ŠŒŽ‹ŠŒŠŒŒ‘‘Ž‘‘‘‘““Š’’‘’‘“•”“Ž“‘’““‘’’””“‘”–—–”•““••’““–˜™˜™˜˜—•–—””•˜˜™™š“––šœšš™š”š™™–––ŸœŸ¢£ ¡ Ÿœœœ ¡ž™”ކzqf_YWSKB9)







 +27;BHF??:<<83/*-,--,*+),.@LLIGB>:AHKIE=6.-+279:><E?)







	
+












?¦´µ±´´´°µ´µµ¶··´·¬µ³¶··¶¶·¹¸·´µµ¹·¹¸¸¹¹¹»¸º»¼½¼»ºµ»¼¼»¼»¼¾½µ¶¸¿¿¿¿¾»¾¹¸¸¾¼ÁÁÂÂÀ¿ÁÀÀ¿Á¼ÁÀÆÄÄÂÈÈÆÁÄÃÄÅÅÅrsqsuuuvwvwvvusvwvuttttvwvxxwvwvxxxwyxvw{}{yyz{zzyz||{{|||||{z{|{{zywyy{||}}{x{{||{}}{z|~~~~€€|}~z|~~}~z~}€~€€€€‚‚ƒƒ‚‚€‚‚ƒƒ‚€‚………‚‚ƒ„ƒƒ‚€‚ƒ„„ƒ……………„‚ƒ„…„„„…†‡†††ˆ‡†‡‡†‡‡†‡‰‰‰‰ŠŠ‰†‡†ˆˆˆ‡Š‹ŒŒŠ‰Š‹Šˆ‰Š‰Œ‹‹ŒŒŒŠŒŽŽŽ‘‘’’ŽŽ‘‘‘‘‘‘’’“’’”“’‘“’’””””•”“’’“““‘••”••”“–••””–˜šš™™™˜–˜˜—————™›šš——š›™›œ˜™™™›ž›š›žŸœ›ž¡¢£¡ Ÿž ¡¢¢¡ Ÿ™’‹wplid[QG;0("














$+6?A@?>><82.*,-.--+,,,1@HHGC?;89>DHD=3.-.2898::C=#

+



















D†¨µµ´³²²°µ·¶´·¹¸¸¶µ¶·µ¶¸µ³´·¹··º¼¹¹º»»º¹»½¾½½»»»»º¹»¾¼»»»·»¼½¼¾¿Á¿¼»º½½½¿¿ÀÁÂÄÃÂÁÂÃÂÃÂÁÂÄÄÄÃÂÇÈÈÇÆÅÂÅÅÅtsstuuuuvvwvvusuwvvuuruvvuwwvuuvxywwyywvyz{zzx{|{w{|}||z~}|{|||{{xzyyz{|}zz|{y}}}{{}~||}~~|€~€€|}~€€~~~€€{€‚‚„ƒ„„ƒ‚‚|€‚ƒƒƒƒ~ƒ‚ƒ„„„ƒ„…„„ƒ‚‚ƒ‡‡…††‡†…ˆ„‡‡ˆƒ‡†…„††‡ˆ‰ƒˆŠ‹Šˆ„‰‰‰‰‰‰‹‹ŒŒŽŒŠŒ‹ˆ‹Œ‹‹ŒŒŠŒŽŽŽŽŽŽŽŽŽ‘‘Ž‘‘‘’’’Ž‘’’’““’“Ž’•–•”““Ž““•••’””““•”••––•“––™˜˜–˜˜––—’˜˜–•˜™™˜™—š™™—˜™š››•œžž›žžŸš ¡ Ÿž™Ÿ ¢ŸŸ  Ÿ ž›—“މ~uc^[TLF@6)





$+159::820+,----+,,,3@HFA@<9443:<<;5.//599779A;!












	





+











JŠª¶¶¯µ³³¯µ¸·µ¸º¸¸·³¹¸·³¹´´¯·´¸·º»¹¹¼¿½¶º¼½»¼ºº²½¼»·»¼½¶½¼¼»¹¹¾º¼¼½¹»»¿À¿¼ÂÁÁÂÂÀÁÂÄÄÄÄÄÂû¾ÂÁÅÇÈÊÉÆÇÈÆÀutstuuquvvwxwvttvwvvwxxvvuvvvtsvyzwwzzyxxxvy{zy{{z{|{|}~}~|z|||{y{{z{||}|yz||z~~||}~~~}z}€€€}~€~€‚~}‚€€ƒ€‚‚€~~‚ƒ‚„€€€ƒ…„„ƒƒ„…ƒ„„ƒƒ……„ƒ„‚‚„‡ˆ…†††‡‡‡†…ˆŠ‰ˆ†‡„„…ˆ‰‡ˆ‹‹ŠŠ‹ŒŒŠ‰‰Š‹Œ‹‹ŒŒŠ‰‹‹‰‰‹Œ‹‹‹ŽŽŽŽ‘‘‘ŒŒŒŒ’Ž‘‘‘ŒŽ‘“’’’‘““’Ž“—–•‘’““’”•––““’‘‘”•””’•••–—————™™––———˜—–—–—˜š›š™™™š›œœ›œœœœœœœžœž¢¢¡¡¡Ÿ £¢ž£¢ œ–Œ„{rgc^YPG=4+"







 +.232221--..,,,,4@FC?=;710/4898630/7;:9:>A9 



























RŽ«µµ¶µµ´´¶¸·¶¹¸¶¶µ´·º¹º¸·¶¶¶³·¸¹º¹¹»½½»»¼»¸º»¹¹»½¼»¼¾¼»½¿À¿½¼½½¼¼½¾¾¾¾ÀÀÀÀÁÀÀ¾½¾ÂÃÃÃÃÃÃÁ¿ÁÄÃÃÃÃÆÊÊÊÊÈÈÇusrquutuuquuuuuquruvxzyxwvwwwvuuyzxxz{zvyxww{|yyzzz{||}zzy{z{{|}~~|{||{{zy|~}z~€z}|~~||~€€~}z}~~|€€€€}€}~}€}‚‚‚€€€‚ƒƒ‚€ƒ„„„„„„„‚„„ƒƒƒ††„„ƒƒƒ‚‡‡††…‡†ƒ‡„ƒ„Љˆ‡ˆ‡…ƒ†ŠŠ…‰‰‹‡Š‰ˆˆˆ‡ˆˆ‹ŽŒŠ‹ŒŒŒŠŠŠ‰‹…ˆ‡ŒŒŒ‹ŒŽŽŽŽ‹’‘‹‹‹ŽŒ‘ŒŒŽ‘’‘‘‘‘’’’““’•–”“’’”“‘‘””–”••“’“”““’•••–’–––—˜˜—–™—™–———––—˜š››š™šœœš››œœš˜™™žšž™  ž  ¡¤¢¢£¥¤¢ š•Ž…yoe^YVRMF>0$








&+032/./.--./5?BA<;:6/..369:863/8>=9:>B5




















Z’«²µ¶¶²¶µ¸¹·¶¸²·¸µ°·¶¶¶·±·µ³³¶³´´¹¸ºº¹¹ºµ¸·¹¶ºº»·¹¸¸¹½¼½·¿ÁÀ½¾¾¿¿¿»¿½¾¹ÁÀ¿¼À¸¿¿ÁÁÁ¿À¿ÄÀÄÃÄÅÅ¿ÃÈÈÃÈÆÇÈqssstuvvrrssttvwvuuvuyzzyyxxxxruvxxyz{|{zxwx{|zywyzz||{yyzzzzzz~}|||zz}}|}|}~€~z}~~~}}~~~~{||}}~~~€‚€€€€€€€€€‚€€€‚ƒƒ‚€‚ƒ‚ƒ‚‚ƒƒ†‡…„‚„…†‡†……………†‡††‡‡††‰‰ˆˆ‡†Œ‹‰ˆŠŠ‡‰Šˆˆˆ‰ˆ‡ŒŽŒ‹‹‹Šˆ‰‹ŒŒŠ‰ŒŽŽŽ‹‹ŽŽŽŽŽ‘’‘ŽŽŽ’‘‘‘ŽŒ‘‘‘’’“”•“’’””“”––”“““••”‘‘“”•––——””–—•”””––––•“———˜—˜šššš››™—–“˜šœš˜š›œœ›˜š›š››™›žžžŸžœœžžžŸŸ ¢££¢¢¥££¤¤£Ÿš“‹‚zqkie_WNC:1&












!'*+,.00/007>@?=<:61..036:973/9=<;:AA2


















^•¬²µ······¸·¶¶¶·¹µµ¶¶µµ¶µµ¶µ´´´¹¹¹¹¸¹¸··µ¹·¹º»½¼º¹¸º½½¾¼¸¼¾¿¾½¿ÁÁ¿½½½½À¿ÀÀÀÀÂÄÄÁÁÁ¿ÁÄÆÇÄÃÃÆÇÅÁÅÄÁÅÃÇÉsrtvutvutssorsvuvwvvvwy{zvwxyyyxxvvvz|{{zvvuy{zvww{z|yzz|}}}|z{}~}}|||{z|||}y}~~~€}{~~~}{}}|~}}€€€~€‚ƒƒ€€~~}|‚‚‚‚‚~‚€€‚„„€€‚‚ƒƒƒƒƒ…„†‚ƒ‚ƒ€„„……„„„„…†††ˆˆ†…‡‰ˆ††‡ˆ‹ŠŠ‹‹ˆˆ‰ˆ†ˆˆ‰ˆ‹ŒŒŒŒ‡‰Š‹ŒŒŒŒŒ‹ˆŒŽ‹‹ŒŽŽŒŽŒŽŽ‘‘‘ŽŽ‹’’’‘’’Ž“””””•“”•“’’’”••”’‘’–••——“”˜˜•“‘•—˜•—’–˜™˜—–•–š•™›œšš™˜˜™š™˜™™™™˜˜™™™—›š›œ›žžžžœžžžžŸŸ  ¡   ¡¡¡¤¥¢¢£¡žœ˜’Œ†|rgb`[TOIB9+










!%+04269=???>;62/(++14542/7897=D@.












+















dž®±µ¸¸¶····¸³³²·¹·¶¸±µ´´²µ²¶µµµº¼ººº¶·¶µ¶»¹»º»¼¼·¸¸»¼¼½¾¹»½¾¾ÀÀÁÁ¿¹¾º¿ÂÂÁÁÁ¿ÂÃÅÄÂÁÁ¾ÂÅÇÀÃ½ÅÆÉÇÅÄÃÀÂÃÉÊtsvwvwvttutpqttsuvvvvwxyxuvxz{{zzvuvz{vxxuvvxyyxx{{{zz{}{~~}|||}}}|{{{{}}||}€€{€}}}}~}|{~€€}~€€~€€‚„ƒƒ€‚€€‚ƒƒ„„ƒ€ƒ„€€€‚„ƒƒ‚‚‚ƒƒ„†…††††‡†ƒ…………„……„ƒ‚ƒ…ˆˆ†ˆ‰‰‡‡ˆ‡‡ˆˆ‡ŠŒ‹‹‰†‰‰‡ˆ‰‰‰‹ŒŒŽŠŠ‹Š‹ŒŒˆŒŒŒŽŽŽŒŒŒŽŽŽŽ‘‘ŽŽ’““‘‘’‘‘‘’“””‘’’’””“”–—“‘’••”˜—”•——•••–˜™š˜——˜š›™——˜™˜˜šššš™™˜˜™™™™š™˜š˜™›š›œšššœžŸ›œŸ ŸžžŸžžŸž ¡¤¤¡£¥£¢¤¤¡Ÿ˜†wjfda[SE9-$






&+/27<@BA>;72/,,-///1225887@G@+


























j¤´µ·¹¸º¸¶¸··¸·¶·¸·¹¸¹¹¹¸¹·¶¸¸·¶»¾¼¼»º¹··¸»»»»¸»»º¹ºº¹·¼¾¿À¿ÀÁÂÁ¿½¼½¿ÀÁÃÀÀÁÂÀÀÁÂÅÄÂÀÁ½ÀÄÆÆÅÄÆÊÈÈÈÇÄÁÅÇÉÉtrvvuuuqsvtprsttttwxxxvuwuwyzzzzzwvuyxwxxwxxxvy{|{zxyv|}}}|yxx~~}||wyx{|||}x{}€€€€€}{{{~}€~||€€€~€‚‚ƒ€‚}~‚ƒƒ„„‚ƒ…„ƒ„€€ƒƒ‚‚‚‚‚‚€„…†‡‡†††‡‡‡††………‡‡…„ƒ†‰‰†‡‰‰ˆ‡‡†‰ŠŠ‰‡ŒŒ†‡‡ˆ‰‹ŠŠŠ‰ˆŠŒŽˆŒ‹Š‰‰ˆŽ‹‹Ž‹Œ‹ŽŽŽŒŒ‰Ž‘’’‘’’‹“’”‘’’’’‘‘‘’’’‘“”’”’–—•’‘•–™š—””•–––”——˜˜™—˜—™›š˜—˜˜™™˜—–——––˜™œ–ššš››š™—˜˜šš™›œŸžžžžŸž˜ŸŸžšš›Ÿ ¡ ¤¢¥¦£Ÿ¤¥££¥¤¡—‘‰{pgb^YSPI?-"













#*2:?A=770//120../114588CJ?'










+







 n§³µ·¸¹¹¸¶¸¯··¸¶µµ¸¹º¹¹¸¸¹ºµ»»¹¸¼½¼¹»¸»µººº´»¼¹»»¸¸¸¹º»»¿ÁÁ¾¾À¿¼ºº»ÁÀÁ¿¿¸Â¿¾½ÀÁÂÁÁÀ¿¾¿ÁÆÅÇ¿ÇÄÆÆÇÆÆÂÇÇÈÂsttupttsrutsttvvutwzzxvuwxwywwwwxwwwyxvvwxyyxxy{{yz{z{||}||{x{}~{{||{z{||||yz}€€€€€€~~~}|~~‚€€ƒ‚‚‚ƒ€‚€€€‚„…„‚‚‚„ƒ‚ƒƒƒ‚††‚€ƒ‚ƒ…‡ˆ‡…„…†‡…†††„„†‡†………†ˆˆ‡‡ˆ‹Š‡…†ˆ‹‹Šˆ‰‰Š‹‰ˆ‡‰ŒŽŒ‹ŠŠŠŒŽŽ‹ŒŒ‹ŠˆŽŒŒŽŽŽŽ‘“Ž‘’’‘’’’“’“”–““””•”“’‘‘‘““’‘’–•““•”““’••™™—”””•––—˜˜—–˜™˜—š››š˜˜™™™››™˜˜—˜›œœœ›šœ›››œœœš›œœžŸž £ ™œŸ  žžŸ ¡£¢¢£¢¤¦¤¡¡£££¥§§¦¥£Ÿ˜Ž„xmggebYNB8/$









 )1655558<>:40//115899EK>#


+


























$q¨µµ´·¸¸···¸¶¶··µ¶¹»ºº¹·¹»»»»ºº»¼¼»»»»»¼½¾º¸º¼º¼º»»»¼¾¾½ÀÁÀ¼·½ÁÄÁÁÁÃÂÁ¿À¿ÀÁÂÂÃÂÂÀÀÀÀÀ¿ÃÅÅÃÄÄÅÅÆÇÅÃÆÊÉÈÇÇrrtvvttrrttssuvvvtwzyxwvyyyyxuwxwxxwwwuvvvvwwuz|yw{|{||||}~~||{|{z{||}}}}z}z|}€~}}{~€€€}~~~~~€€€‚ƒ‚~€ƒƒ‚‚‚‚€€ƒƒ‚‚‚‚ƒƒ„ƒ…ƒ‡†‚‚‚‚ƒ€‚ƒ…‡…„ƒƒƒ…††…†‡‡…‡†††††††…†‡‡Š‹‰‚……‰Š‰‡‡ˆŠ‹ŒŒˆŠ‹ˆ‹‡ˆˆ‰ŠŽŽŽŽŒ‹‰ŽŒŒŽŽ‹ŽŒ“‘‘’“’’’’‹’•”’”––•““’’’“““’“•–•”•–•”’–•–”“”–——˜™˜˜•—•˜˜˜–—™œœ™—˜–˜›šš››šœœœ›šš›—™•ž›™œœ›œž œœ˜ ¢ šŸ  ¡ ŸŸ¢¢£¢¢¢££¤£¢¢£££¦¦¢¥¦§¥ ›–ˆyufdc[UNG>2&









"(,3=FIE9111129;;:FJ:






























)u«·¸·¸¹³¶¸¹¹¶µ¶²³³ºº¸´º·¸»¼»º¶»¼»º»¼½º»º¾¾º¹º»»»»¼¼½¾¿¾¼¿½Á»¹·¾¿Ã¿ÄÁÂÀ¿¹À¾ÁÀÄÁĽ¿¼¼½¿¼ÄÃÂÃÆÃÄÆÆÅÅÄÆÊÊÅÇÇrttuutsrotutvvvwwvxyxwwwz{yyxxxxxxyxwvvxxwwxww{|yz{{|}}|{}}~}|{|{yw|}}|}€~~|€€~~}{}~}€€€~€€€€}ƒƒ‚‚ƒ„ƒƒ‚ƒƒ„ƒƒ‚‚‚‚ƒ‚€„…ƒ…††…ƒ„……„‚ƒ„‚……ƒ‚„„…†††…„ˆˆ‡‡‡††ˆ‡†……†ˆˆ‰ˆ†‡ˆ‡ˆˆ†‰‰Š‹ŽŽŠŠ‰…‰‹‹‰‹ŽŽŽŒŒ‹ŽŽŽŽŽŒ’‘‘““•‘‘‘“‘‘••–••••””••––•––––•“—•””–•••“”•—ššš™˜˜™™™—–—™™›œ™–———™š›œœœœœ›š™™˜˜™ž™™˜›žŸœžœŸŸœ›ž ŸšžŸ ¢¡›¡¢Ÿ¤¤£¢£££¤¤¢¡¢£¥¥£¨©¨§¦¦¤Ÿ—†~tlje`ZUH7%







(3>DC<88889<@@@HI6




































.{­·¹·¸¸·³¸¹¹¶´´µ·¹¹¸¸º¹¸µ¸»¼¹¹º»¹¸º½½¾¼º¼¼·ºººººº»»ºº¾¾¾½¾À¿¼¼¼¿ÀÂÁÂÁ¿¿ÁÁÂÂÁÁÁÁÂÀ¿¾À¿»ÂÆÇÉÈÈÇÈÈÅÇÆÆÈÈÈÅÃuquusrtsttvsvvvwxvxuwxxyzzxvxxxwyzyxxxzzzuxzzy{|{z{{|}~~}z{}||||yy{|{|€€~}~{€€~}|~~~€€€}~€}€‚‚€€‚‚ƒ‚€‚„€€‚ƒ…„‚€‚‚~ƒ„€‚„…„……„ƒ†††…„ƒ„„‚„ƒ„……‚†………‡ˆˆ†ˆˆ‡‡‰‡†…ƒ…‡‰‡†‡‡ˆ‰‰‰ˆ‡‰Š‹Œ‹ˆŠˆ…‹Œ‹ŽŠŽŒŒŒŽŽŽŠŽ‘‘””“’’‘‘‘““’”•”“”““’”••“•”•’˜–’•”‘•“••–•–—˜šš™˜–˜šš™—–™šš™››š–——™™™š›œœœœ›š™™™››œœš›ŸŸ›œžŸžžŸœŸžžœœž £¢œ¢¢¢¤¤¡ £££ ¢ ¡£¤¤£¨¨¡¦¥§©¨£¡œ—‰~wgffaVI;3* 







!(027=A@<ADC@LK4


























3‚°³³´±·¸¶³¶¶´³µ¶¶µ´¶¹¹¸·¶´»»¹¹¼¶ºº¼¹½¹¾»º»»¹¸¸»½¼ºº»¼¹¿¹½¼Ãº¿¼¼¼Á¿¿Á¾ÁÂÁ¿ÀÀ¿ÀÂÂÁÃÅĽþÆÈÉÆÈÇÈÅÉÈÆÅÇÂÂÂutttrrrvtuvvwvsxwyywwwz|xyyxxwxyzz{ywz{{yyz||{{}{z{{z|~}z}~~|yz{}z|€}|~~~€€~~€€€~|{{}~ƒƒ€‚‚‚€|€‚ƒ„„ƒ‚ƒ„„ƒ‚ƒ‚‚ƒ„„ƒ„††ƒƒ„†‡‰‡„ƒƒ‚…†„ƒ„†‡…„†‡ˆ‰ˆ‡††ˆ‰ˆ‰ŠŠˆ…ƒ†‡‰ˆ‡ˆˆ‰Š‹Š…‰‰‰‹Œˆ‡‡ˆˆŠŒŒŒŽŒŽŽŽŽŽ‹‘‘ŽŽŽ‘‘’‘’“‘’’’’““’““”’’““‘”“’’“”––•’•““””’”•––—˜™˜–––˜™˜–—™››™˜šœ›š—™š™™™šš–™›œ››—˜šœœœž    Ÿ›šžž¡¡¡Ÿžž›œž¡£¢  ¡¡¢££¢¡¡¡¢¡£¢¡¢¤¢¢¢¥¥£¢£§ª¬­ª¥¦¤Ÿ˜…{vrnbXSMB7*







*3:=?BEHMTN3






















;‰³µ±²±·º·¶·µ´¶¹º·´´¶¹º¸¶µ·º»¹º¼¾½½»¼¼½¾½¹º¼¼¼¹¾¾¼º¾¾¾¾¿¿¿¿ÃÂÀ½ÁÄÁ¾¼ÁÂÁÁÂÁÁÂÃÄÅ¿ÁÃÄÄÇÅÃÂ¿ÄÆÈÉÈÆÇÅÉËÉÅÆÇÇÅusurstuvuuvwxuvwxyxvvwz{zyxxwwwwz{{yyy{wxz{xyz||{w{{yz|~}z~~~}~~}y{|}|}}~}}}||~€~{||{zxyz€€€€€~~€‚‚‚ƒƒƒƒ‚‚ƒ‚‚‚‚„„„ƒ†„‚€†…†ˆ‡ƒƒ„…ˆˆ†……††„„†‡ˆˆˆ„…††ƒ†‡ˆ‰ˆ‰ˆ‡‡†‡‡ˆ‰‰Š‹‰‰ŠŠ‹‹‹Šˆ‡ˆ‰ŒŒŠŠŠŽŽŽ‹‹ŒŽŒŽŽ‹ŠŠ‘‘‘‘‘’‘‘‘‘“”““’”“’ŽŽ’””“”“”•“’““”’‘”–—–—–•”–”–‘–””““”•–˜™šš™™™—™˜›œ››››™šš˜—“™™™š™—›œœœž ¡ ŸŸžžŸž›˜ž¡¡žŸœ ŸžŸžŸ ¡¡¡¡£ ¡£¢Ÿ ¢¢¢¤£¢¢ ¤£¡¡¦¨«¬ª¥§¨§¥¡™“Œ}rhda]WNC9&







$,4=GR[S1


























DŒ´µ±±²¹¹¸¶¸´¶¹ºµ¸·¶µ¹¶º··ºº´¸¶»¼½¶´´ºº½½¼¼½½¼»À½¹¸½¾¿¸ÀÀÀ¿ÂÁÀ½ÂÂÀ¾¾¾ÁÁÁ¾Â¾ÃÂÄÆÄÃŹÂúÂÀÄÁÆÆÈÆÅÅÇÊÊÆÅÇÉÃtttsrwvuuttwwxxwwxuuvxwyxxtxvvuuy{zyyzzxy|{xwy{}{yz{yz{}}|}}||z~}y|}~}{{|€€€~|}€{{|}~~zz|~‚‚‚}€€‚€€‚ƒ€~‚ƒ„„………ƒ‚……„ƒ††ƒƒ„†‡‡…€„„ƒƒ…‡ˆ‡†‡†††……„…†ˆˆ‹Šˆƒ†ˆ‡ˆŠˆ‰†‰‰ŠŒŒ†‰‰‰‡‡‰ŒŒŒ‰ŽŽŒŽŒ‹Œ‹ŒŒŒŽ’’‘‘‘Ž’‘’’’“”“‘‘“••”’‘“–••–•”•”“”••–”“•———˜˜˜—˜š˜—•“””•——–”™™šš˜™š˜•˜››››™šš›™™˜˜™››š›œœ›œžŸžœŸ¡ œ›œŸ ŸžŸ¡¡¡ž  Ÿ   Ÿ¢¥¢Ÿ ££¢žœŸ¡¡ ¢¤¥¤¤¥¤¢ £¥§©ª§¥§¨¨¨ª«©¦¡šˆxqme\TK=0% 






*6CUH.





































J¶¶µ´·¸¸¹¹º¹¸¹¹ºº»·³¸¼»»»¼º·¸¸¹¾¼µµ·º»»¼¼½¾¿¿¾¿½¼»»¼½¾¾¾¾½ÀÁÀÀÂþ¾¿¿ÀÀÀÁÁ¿ÂÀÁÄÅÅÅÃÁÂÂÃÄÅÃÀÆÅÈÈÅÄÅÈÊÉÊËÊÉsrvuuuuqututvxxvxxwwwxyxwyzzxxwuwzywzz{x{|{yxy}~|zyvz{||}{{{|z}}}z~~~||}~€~~~}|~€~}|€€}|~~‚€~~~‚€€‚‚‚€€€€€~„„ƒƒ‚‚„„††…ƒ„…„‚„†…‚‚„„‚ƒƒƒƒƒ„…‡ˆ‡††‡‡‡†……†‡ˆˆ‰Š„‡Š‹‡‰ŠŠ‰‰ˆˆ‰Œ‹‰‰‰ˆˆˆŒŠŽŠ‘ŒŽŒŒ‰ŒŽ‹ŠŠŒ‘‘’‘‘‘‘‘’‘’“’’’‘‘‘”•”’‘‘‘’’”•”‘”•““•”•“••••–••”–––”˜˜™–—’–—˜™™˜—––•š™˜˜™˜—˜ššœ™—™›š™˜–šœ›š›–›š™œ››š ¡ ›ž  œž¡£¡žŸŸ ¡ ›¡¡ šŸ¡¤Ÿžž¡¤¢ £¦¦¥¤¥¥£ ¤¥£§©§¢¦§§§«¬­«ª¨£ž™“‰xnfc_XOH>4#








 %*































Q“¹¸´¶²¸¶¸ºº¹·²º¹»¶·´º¼½°¼º¹¶ºº»¾»´´¶º¶º¸½¼¿À¿¿¿¾¾µ¼º½½¾»»¼À¿À¼ÄÅÁ¾¿À¿»À¾Á¿Á¿¿ÀÂÃÃÂÂÁÆÇÇÆÄÁÉÇÊÄÅÀÇÇÌÊÌËÌÌstvvutstuvvvvvvvwzuxxxxyyzzzyzxwsxxwz|{|||{yx|~}z{yuz{yzz{z||{{|~€}{|{y|‚‚€~~}}{|~}}€€€€€€ƒ‚‚€€‚‚€‚„„…†…‚‚„…‡†…„…„ƒ……‚‚‚ƒƒƒƒƒƒ„„„…†‡†……„†††ˆ‰‰ˆˆˆˆˆ‰‰ŠŒ‰‰ˆˆŠˆ‡ˆŠŠŠˆ‹‰†Š‰‹ŒŒŒŽŒŽ‘‘‹ŒŒ‹ŒŽŽŒ‹ŽŽŽ’’’’‘’‘‘‘Ž‘’‘’’’““‘“”””“’‘”“•”““““””•—™™˜—•””—˜˜™˜—˜™™™™š˜”•”™›˜–™œ›™˜šž›™˜™˜——™›œœœœœ››œ››œ›š› ¢ žŸŸ››šž £¡œžŸ  Ÿ ¡¢ žŸ¡¡  ¡¥¤¡¤§¦¥¤££¢¡¥¥¢¤¦¥¡¤§©«¬«¬¬©«ª¨¨¦Ÿ–‹‚toliaYPH</





































\—¹¸¶¶¹¸¶´·¸¸¸¹¹¹»»·¶º¾¼¼»¼º·º¼¼¼º¸º¹º¹º¹¾½ÀÁ¾¿¿¾½¼½¾¾¾¿À¿¼¾¿ÁÁÂľÁÄÁ»¿ÂÁÂÁ¿½¾ÂÅÃÆÇÈÇÇÆÅÅÆÉËÉÉÉÊËËËÌËÌÌËtuvuuttuwvvwuutuxyyxxwxzyyxx{wwxxxyy{{{}~}zwy}~|{zyu{{yyz|~~|wzz}|{z{y{|~€€€{||}~€~}|~€€€€‚€€€~€€€{‚ƒ‚ƒƒƒ„†„ƒ„……„ƒƒƒ‚ƒ„„„„……ƒ„„…‚‚‚ƒƒ…†‡†ˆ‡„…††ˆˆ‹ŠŠˆˆ‡ŠŠ‹Œ‹‰‰†ˆ‰‰ƒˆŠŠ‡ŠŒŠ…‹ˆ‰‡‹ŽŽŒŽŒŒŒ‹ŠŽŒŽŽŠŠ‹’“‘‘Ž‘‘‘Ž‘‘‘‘‘”“’”•••‘‘‘”•—–”’’‘‘’““–˜šš˜•••˜™˜˜˜˜™š˜“—˜˜•–“š™˜’—š›š™—œ™œœ›š˜–™šš›žžž›œ›››žŸŸžžŸŸžžžž ¢¢¡ž¡¡žŸŸ ¢¢Ÿžž¢¡¡¢¢¢¡Ÿ¢¤¤¦¥¡  ¤¥¥¡¤¤¢¡¥§¨ª«§«¬«§§¦«ª§¥ ›”ކ{tba^VLB3)







































#bš¸·±µµ¶µµµµ¶¸¹·µºº¶¶ºº¼»º¹¼·¼·½º»»¾»¼»½»»¼ÀÁ¾½¿½½½¿½ÀÁ¿¼¾¹ÁÀ¿¾À¾ÂÄüÁÁÂÂÁ½¿¿ÃÆÈÈÇÅÄÀÅÄÇÇÉÂÈÊËÉÊÈÅÄÄÄÊÊtvwurutvwvtuuvuvxzwwwxxxxxz|{yyxv{z{{z{}}}zy|~z||{{{|{zzy€€}yy|}|{|{{|~}}z€~~~~~€€~}}€€‚‚~}~~~€‚ƒ‚‚ƒƒ„„„‚ƒƒ‚ƒƒ€„……„‚‚ƒ‚‚‚„……„†‡‡………†„‚‚„‡ˆ‡ˆ‡ƒ…†‡ˆŠŠ‹ŠŠ‰†‰Šˆ‹Š‰Š‰‰‹Š‰ˆ‰Š‹ŒŒ‹Š‡ˆ‰‹ŽŽŽŽŽŽŽŒ‹ŽŒŽŒŒŽŽ‘‘‘‘‘’‘’“‘‘‘‘Ž”•““””––••–•––•“‘’–—”•––——™—”–˜˜™™˜——˜™—•–˜——˜™™š˜“–˜šš™š›™››š™™™š›œœœžžžŸŸœ›šžŸŸ žžžŸŸž  Ÿ¡¢¡¡  ¡¡ ž ¡¡  ¢¢££¢ Ÿ¡¡££¥¤¢ ¢¥¦¥¥¥£¡¤¥¦¦¨©©ª­¬ª¨©«©¥©««©¥ž—Œ‚zqie[QH>1$




































)j¶·¶µ¶·µ¶µ´¸»¼¹¶¸¹¸·¸¹ºº·¸¼¾¾¿¾¾¾½¾¾½¾½¼»»½½½½¾¾½¼¾ÀÁ¿¾¾¿¿¿¼»½¾ÁÃÂÃÁÂÁÁÁÁÁÃÄÆÇÇÅÅÅÆÇÈÈÇÇÈÇÉÉÉÈÅÀÅÆÃÉÌuyxuuvtvwvttvwwxyyxvvuvwxvz||xwxzzzz|zzw|||z}}{y}{{{|x|}~~}zz}~~~}z||~~€}~}}}~€‚}~€€~}~€}€€‚‚‚‚„…„ƒƒ‚ƒ€‚€‚ƒ…„ƒ~‚ƒ‚…„„…‚„…‡‡†„…‚„ƒƒ€ƒ…‡ˆ‡††††…Š‹‰‚ˆ„†‡ˆˆ‰‹‹‰‹ŠŠ‹‹‹Š„‰ŒŒ‰ˆ‡ˆ‰ŒŽ‹ˆŽŽŽ‹ŒŽŒŽŒŽŽŽŽŒ‘‘‘“’’““‘’“’’“”“•’•••–—–——•’•““”™˜“•˜™˜––•“————˜•••—““•––˜’š™˜—˜–™™›š™™™˜˜——˜˜˜š˜œœ™Ÿ žœ™›ŸŸž˜›žžž   Ÿ¢¡¢¡¡  ŸŸ¡Ÿ ž¡   ¢žœ££¢¢£¡¤¢¡¡¤¥¥¥¥¤¤¥¥¥§¨¨©ªª««©¨¨¨¦¨¬¬®¬¨¥ š•‡xo]ZXOGB8-"




























/q¡¶¹·¸ººµ¹´¸º¹º¹³¸¹·¶¶·»º¸¸»»½½½¿¿»¼½½½¼»»º¹¹½¹¾»½»½¶ÀÀÀ¿¾¿¿¾À½»¹¾¿À½Á¿Á¿À¿ÂÂÂÂÄÁÄÄÃÂÅÈÈÄÄÃÆÁÈÉÅÃÇÅÆÈÈÄÉÉwzxtuwuwxwtuvwxywyxwutvywvy}zxyzzzy|}|yy{|||{}{{{{{}}|}~}|y||{{|{~€€~}{€}~~}}~€‚€ƒƒ‚€~€€€‚~€ƒ€‚‚‚‚„ƒ€‚‚ƒ‚‚ƒ……†ƒ‚ƒƒ…„ƒ„‚…ˆ‡†††……„„‚„†‡‡‡‡‡‡ˆŠŠˆ†…ˆˆ‰ŠŠ‹‹Š‰‰‹‹Š‰ŠŠ‹‹‹‰ˆ‰‰ŒŠŠŒŽ‰ŒŽŒŒ‰ŒŽ‹ŽŽŽŽŽ“”’‘’“”““’”••””•–’•––•–•””“””•—–•–˜™™•–––˜˜˜–——–——•’•˜——˜™™˜—™œ›™šš™˜˜˜™˜™šš™šœœ›œŸš››ššŸ¡œœœœžŸŸž›› £¡ž¢££¢ žŸ ŸŸ     ¢¢ ¢¢¡¢££¢¢¢¡£££¥¥£Ÿ¢¤¦¤£¤¤¦§§§§¦¤«ª©©¨§¨ª«¬®­¬©§¦¥ž”‰€xphe_XK?2(



























4y¦¹º»»½¼»»»»¼¸¸¹¸¸ººº¹¶»¾»º¹¹º»¼¾½¹º¼¼¾½¾¾¾¼º¼º¼½»¼»»¿ÂÀÀÀ¿½¿ÁÂÁÀ¿¾¾¾ÁÂÁÀ¿ÀÁÂÂÃÂÂÃÄÃÃÄÆÅÅÄÄÆÇÉÉÁÅÈÉÈÈÉÉÈÉvxwtvxxwwwvvvvwwyxwwwrvxyx{|yv{|{zz|}}z|{{|}}}|||x{|}}|||{{{{zz|}~~€€~|}€|€€~€‚€‚€€€‚‚€ƒƒ€‚€€‚‚€‚ƒƒ~„„„„ƒ„„€ƒ‚€„…†††ƒ‚ƒƒ€‚„ƒ……†„…†…„„ƒ‚‚ƒ„…†‡…†‡ˆŠŠ‡ˆ‡…‚ˆˆ‰‹‹‡‡‡‰ŠŒŒ‰ŠŠƒˆ‹Œ‰‰Š‹ˆ‹ŠŠ‰Ž‘Ž‹‰ŽŽŽŒŒŒŒ‹‹Ž‘ŽŒ‘‘’““’’’””“”””•••’––•“’“•””’••–˜˜———˜——˜—–•““”˜–••˜•—˜™™š–˜››˜™”™™™—ššš™šššœœ›œš™™›œ›šŸ¡ŸžžžŸœ¡¢¡Ÿ¡ž¢¢ ŸŸžž›Ÿœ ¢¤¡££¢žŸ ¢¢¢ £¡¦¥¦¢ £¢¦¥¥¤¥¤§¤¦¤¦©ª«ª¨¨©ª§«®®¬«§¨¨©¦ œ—‡~vg_WQJA1'















+












<€«¼¼º¼»½½½¾½¸·µ¼¹¹º¼½¼¸¹»»º¹¸¹¸¹º»·»º»¹½¼¿Á¿º¾º¼µ¹¹º¹¾¹¿½¼º¾¿ÁÀÀ¿¿¾¾¿ÂÃÃÃÁÀÁ¿Á»ÁÀÃÂÄÀÁÁÃÃÃÃÄÄÉÉÈÉËÊÉÆÇÈÇÃuwuuwxvvwxxvvuuxyxuvwwvwyzzzvx{}|zz{||{~|z~}|{z{y{|}}|{}~~|x|{}}~~}~~~€€‚‚€~~€€€‚‚€€‚ƒ„ƒ}~€‚ƒ‚ƒƒƒ„…††„„„‚‚ƒƒ…††…ƒƒƒ„„‚‚„„ƒ„…„ƒ‚ƒƒ……ƒ…„„‡‡…„‡†‰‰‰‰ˆ…†ˆˆ†ŒŽ‹‡ˆŠŠ‰ŠŠ‰Š‰‰ˆŒŒŠŠ‹ŒŠˆˆ‹Œ‰‹Ž‘Ž‹‰ŠŽŽŽŽŽŒŽ‘‘“‘Ž‘’‘’‘“”’’‘‘’–•”““••”•”””’’”•””“”””™”•–˜—–•——–”’•—˜˜—•—––™—™š——›š™™˜—™™˜šœ›š™š›œœžŸšœœœž ¡¡ŸŸžžŸŸŸ ¢¢ ¢¢  ¢¡¡ŸŸŸ  žŸ¢¤¤¢£¡ ¡¢¢¢£¤§§¦¦¦¤¡¤§§¨¤¤¥§§§¨§¥¥§ª©ªª««¨¬¬¨¨ªªª©¬­¬¬ª¦¡šƒtmifYM@4(























C‡®¼¼»»¼»½½¾½»º»¼º¹¹»½¾À¼¸»¼¹¹¹¸¹ºº¹»¼¼½¼»½ÁÀÀ¾¾¼»º¼½»¾ÀÀÁ¿¾ÀÂÁÂÁÀÀ¿ÁÂÃÄÄÄÃÂÂÄÃÁÀÂÃÅÅÅÄÄÆÅÂÃÅÄÆÈÈÊÊÊÉÇÅÇÆÃvvuvxwvuvxxwvtvyywurwyzyyuywyyzy{{|zz{z}|z~€}yzxzwz{}z||}~~|}}}}~~~~}~~€~}€|||‚ƒ€€{€~€€~‚‚~~|€ƒƒƒƒ„„„„ƒ‚…„„ƒ„‚†…„ƒ‚‚……„„ƒƒ……††…ƒ…‡…„…ƒ…ˆˆ…††††ˆˆˆ‡‡‡ˆˆŠŒŠ‹‡‰ŠŠ„ЋІЋ‰Œ‹‹Œ‹ˆ‡Œ‹ŒŒ‹‹ŽˆŠŒŽŽŽŒŽ‘‘‘’’’‘‘‘’’‘”“‘‘’”“‘‘’••“””•”’‘’”“”””••••‘–™˜——˜––——˜˜—•—–˜˜š–™™šš—™™–š›š™›™——™™œž—™œ›–›žž›˜œœ›šŸ  ¡¡ŸžŸ ŸŸ¡ž   ¡¡žŸœ¡£¢¢¡¡¢¢¡ŸŸ¢¤¤¡£Ÿ£¢¢¢¤§¤¥¤¥§§£¥§¦§¦¥¦¤¨¢©§¤¦£§¦ªªª§«©¦¤¦©«©©ªª«¬­¬ª¤œ–‡wi^WPG>6'




























+




HŒ®¹»¼¼µ¼»¼¹»º»¸¸ºº´º¶½¿¼¸»µ·¸¸¶µ¶¸¸¼º»¾¿¹½¼¾¾¾¼¾»½½¾»ÀÁûÂÁÁÀÃÃÂÀÁ¾ÂÃÃÅľÄÁÂÅÈÀÂÂÃÅÇÇÆÆÇÆÄÃÆÄÄÅÊÇÆÇËÊÈÈÆÃvvuwxwsvvwvxuuwyxvtuwzzyyxxyyzzxyz{ywyz{zz|~}|z{zvy{~~}|}}y}}~|}~}~}~~~~€}~€€€€‚€}}€~}€‚€€€‚‚‚‚€‚~ƒƒ„ƒƒƒ„……………†…„ƒ‚€‚ƒ…†„ƒ‚…ˆ‰ˆ†…„†‡‡‡†…‡‰‡††††…††„…‡ˆˆ‰‰‹‹‹Š†‰‰ˆ‰Š‹‹Š‹‹‰ŠŠŠŒ‹Œ‰ŠŽ‰ŠŒŒŽŒŒŽ‡‘‘‘‘‘‘“’‘‘‘’‘’“““”““‘‘““’‘‘“””••––••“’“”••”””•––”•—˜———”–—™˜˜™™˜———›œ››››˜˜—˜šš–™šœ™˜š›Ÿž›šœœœœžžœš››œ›œžžŸ  ¡ŸŸ Ÿ   ŸŸžŸžžŸ£££¡¢¢¢¢¡¢¡Ÿ¤¤¤¤¥¥£¡ £¦¦¥££¤¨¦¥¥¥¤¥¥¤¦¨©«©§¥¥¥¥¦§¨©ªª¨§¥¥¨««©©«ª©©¬®¯­ªª¨¢™si`[PE91-&



























M­¸·º»¼¼½»¹¹¹º¸¸¹ºº»»¼¼¹»»¶·»º¸¶¶¼¾¾½¸¼¾¿¾½¼½½½¿Á½»½¾¾ÀÀÁÂýÂÄÅÃÁÀÀÂÄÅÇÅÃÄÄÃÅÇÆÄÄÇÆÈÇÄÆÇÆÅÂÆÉÈÊÊÊÉÊËËÉÇÅÄutvwxxwvvvwwvvxxxvwwy{zyxxzyyyzyxvzyyxxxwy{||{||}x|{}~|{~}}~}}~~~~€€€€€€‚}€€€~}}~€}ƒ‚}€€|€ƒ€€€€‚ƒƒ‚‚‚ƒƒ„ƒ…‡ƒ†ˆ…ƒƒ€€‚ƒ„†„„‚‚„…ˆˆ†……‚††ˆ‰ˆ††‡†…††‡†…„……ˆˆˆ‡††‰‡Œ‡‰‡‡ˆ‰‰ŒŒ‰‡†ˆŠŒŠŒŒŒŠŽŽ‹‹‹Œ‹ŽŽŒŒŒŽ‘“’ŽŽ’’’‘Ž’‘’’‘‘“““““’’Ž’””––”•–”“”““”•”““”–•““”——–“•–—˜™–˜˜˜–—–˜™›šš™š™—–™›š™œž›—›šœŸž˜™››šœŸ›œœ›œŸ   Ÿ–œ››Ÿ¡¡œœ›ž Ÿ›Ÿ   ¡¢ œ ¡¤££¤¤££¤¤ ¢Ÿ¥§¥¥¥¤¦¥¥œ¥¤£¥¦¥¥¦©§§¦¦¦¥£¦¦¦§ª«¨§§§©¬«£ª­­¦«©¨©«¬¯±¯¬¥Ÿ—Ž‚qf[QIEA6+#




























\–­´µ·º¶»¾¼º¸µ¶µ·¹»¼¼¹»¼»»»¹¹º»¸¸¸½¾¿¿½¸½½¾¾¼»¾¹À¿¿¼¾¼½¼¼¼ÁÂÁÃÅÁÃÂÁ¿ÃÀÄÅÅÅÄÁÂÃÄÅÅÅÆÆÈÈÇÅÅÄÃÂÆÈÈÈÈÉÊÃÊËÈÅÆ¿vwwvwxuvvxwwvwwxvwxwz{zyyzzyx{|{yyz{|{vttx{}~{{|}|||{z|}~}~€€}y|}~~~€€€€‚‚~{~z€}€€‚ƒ‚‚‚|„‚€€ƒ„„ƒ‚~„„ƒ‚†‡††‡„ƒ„„‚„†‡‡……†‡ƒ…‡†ƒ„††…†‰Šˆ„ƒ††…„…‡‰ˆˆ‰‡ˆˆ‡†††Š‹‰ˆ†‡Š‹ŒŒŒŠ‰ˆŠŒŽ‰ŒŒŽŽ‹Œ‹‰ŒŽ‘”’‘‘’’‘’“‘‘‘’‘“’’’‘’“’““••“’””“––’’””‘”’–•””•––—˜˜˜˜—˜˜–––—˜˜™š™˜˜™›š•–—ššŸ›››˜›žœ™š›š™š››šœšš›ž Ÿ Ÿ››  žŸ¡¡ž™ ¡Ÿ ¡Ÿž¡¢žŸ¡£¤¤¤¦££¤¥¤££¤¦§¤¤¤¤¤¤¤¤£¤¥§¤¥¦¦¦¦¤¥¦§¦¤¦¦¦§ª¬¨§¨¨¨¬«¨©­®¯­¬«©ª¬¯±°°¯¯¬¨Ÿ–Š~ogc^TL@5-$

































fœ°µ···´µ¾»ºº¹·¶¶·»½º·¸¼»¹¹¼»¹¼½¼½¼»º¾¿À½¼½½»º¼¿¾¾¿¿À½¿Á¿»¾ÀÁÂÁÃÃÄÂÁÂÂÂÁÀÄÅÄÄÆÁÃÃÆÇÈÇÈÆÄÆÆÄÃÆÈÉÊÊÉÉÈÈÊÉÉÈÈwxwuxyxvwwvqvvwyywxwxzzzzzzvz||{zy{||{xvwx|}}{{y|}}|{u{||}}y~}~zyz{|}}~~€€€€ƒ‚€€€~€€€~ƒ„‚‚‚€‚€}‚‚€‚ƒ„„€€‚††„ƒ‚„…†‡‡…ƒƒ‚„†‡„ƒƒˆ‰‡†††ƒ†‡†…ˆˆ‡ƒ„†‡ƒƒ‚‡‰Š‰‰†‡‡‰‰ˆ†ŠŒŠ†‡†Š‹ŒŽŽ‹‰‹‹‰‰ŒŽ‹‹ŒŽŽŽŽŒŽŒŠŠŽ‘“Ž“‘“’ŽŽ’’’Ž’“’Œ‘‘’“””““’“”“““–—”•–––—˜———–”••–˜™˜˜˜™—–”•—˜˜˜——–˜˜™šš˜œ›—›œ›œ˜šœœšš—š˜š›š›œžž›žž ££žžž¡¡ ŸŸž ¡ œ¡  ¡¢¡¡¢££¤£¤¤££¤¥¦£££¦¥£¡¤£¥¡¤£¡ ¥§¥¤¦£§§§¥§¤¥¥¦¥££ª­«¦§¤©©©¨©«¬­¬¬«¨¨¨­¬®­¯®¯°®ª¢›”Œ€tj`ZRJA:3+"


































 k¡¯´µµ·¶¸»ºººº¹´¸¸»´¸·¹¼»´º½½·½¿½´¼¸¼½¼¼½¼»¸»¶½½½º¾½À¾¿ÁÀ¼¾¼½¾ÁÂÃÂÁ¿Á¾ÂÀÁÃÅÅÆÈÇÅÅÅÆÇÆÁÄÄÇÈÆÄÇÇÈÊÊÊËÉÈÅËÌÌÇsvvuwxxwuwsuwxyzzyyxwyyzyxxy{|{{{z{|}{yy{{}}zz{|z{{|{y{}z~~~~~}{y||{|~~~}ƒ€€€ƒƒ„„‚‚‚ƒƒ‚‚ƒ‚ƒƒƒ‚‚†‡ƒ‚ƒ†††…ƒ€‚‚‚††„ƒ…‡ˆ‡†††…„„†‡†‡‡‡†…††‡‡‡‡ˆˆ‰‡†‡ˆ‰ˆ‡‡Š‹ˆ‰‹ŒŠŠŽ‹Š‹‹‡ŠŒŒŒŽŽ‘Ž‘Ž‘‘‘‘’’’’“’““’’“”‘‘‘’’’““’’“”•“•”’—–——™™™˜——˜˜——–••–——˜———˜˜———˜˜˜˜™™›››œš˜š›ššœšššš™—™›œžž™™ŸŸŸ ž››˜œŸ¡£¢  ¡¢¢¡ ¡žŸ    ¡¢Ÿ¡¢£££¤¦¤¡¢£££¥¦¤¢¤¤¡¡¥§¦¥¥£¡¢¥§§¨§¨¨¨§§¦¦¦¤¥¦¦§ª­ª¦¦©©««©§«®¯­«ª§ª­­­®°¯®¯±²±®¬ª¦ ˜Žƒvoa\VPIC:.




















 o¤²´´µ¸º»º¸¹¹¹·´¹»¹¸¹ººººº»½¾½¼½º¹¼¼¼¾½ºº½»¹»¾¿Á¿¿¾¼¿¿À¿¿À¿ÁÂÃÂÀÂÁÀ¿ÂÃÂÀÁÄÄÄÅÇÇÇÅÄÂÄÄÀÃÅÄÈÇÇÈÇÈÉÇËÍÉÈÉËÍÌÌvuusvuwwvxzxz{zxzxxxxy{|{||||zyzzzz}~zyz||||yx{{||{|{z{}~}€|€~}{|}~€‚‚€€€‚€‚‚‚‚‚~€‚ƒ‚€}‚……ƒ„…„ƒ‚„„ƒ‚„…„ƒ‚€ƒ„„‡†ƒ€…‚ƒ…„‚…††„……†‡‡ƒƒ…‡†††‡‡ˆ‡…†ˆ‰‡†ˆ„ˆ‡‡ˆˆ‡‰ŠŠ‰‰ˆ‹‡‰‰ŽŽ‹‡‹‹ŒŒŒ‹ŽŠŒŽ‘‘ŽŽ‹ŽŽŽŒŒŽŽ‘’“’“‘“‘“‘“’““’Ž‘””“‘“““••“–•—˜˜”–˜˜–”’—™™˜—”•–•”–’–”—˜——™šš•š™™šœ›››š“𙙙𛛙𕙛œžš™›œ›ŸŸœ™›œžŸ  Ÿ ¢¢ž¡ŸŸžŸž¡ž¡ž¡   ¡ ¤¢£¥¥ £¡¡ ¤¦¤Ÿ¥¦£¢£¤¦¦§¥¥¥§ªª¨¨¦©¦§¡¥§¦¤£¤§¦©¨©¢§©©¤¬©§«¯¯®ª©¨ª­®©®°¯ª®¯­¬­¯¯­®¨¦ š’‡zq_YURE8&
























!r¨³µ´²º¼¼»¹µ¹µ´µº¸¹µ»¼»µ¹¹»¹¾º»¹º¹¼¶¼¾½¸·¹»µ½ÀÁºÁÀ¿¼¾¿Á¾¿¿À½ÃÃÂÁÃþÃÀÃÀÀÀÁÁÄÂÃÄÆÆÆÂÂÂÆÆÇÇÆÇÆÆÆÇÉËÌÇÇÈÉÇÌÍwvwwutwxxz{{||xyzxuyy{||{~}}|zx{{{y{}}yz{|yyy{|{|}{||{z|€€~}€~|}~€ƒƒ}ƒ‚}€‚‚‚‚€‚€‚ƒ€}~ƒ‚„…„†‡„„…„„„„†„‚~‚‚ƒƒ…‡…„……„…ƒ„††ƒƒ~‚†‰‡ƒƒ…„……†‡ˆ‡†……ˆ‹‰ˆˆˆ‰Šˆ‡ˆŠŠ‹Š‰‡ˆ‰‹Œ‹ŠŠŒŒŽŽŽ‹ŒŒ‘‘Œ‹ŽŽ‘ŽŽ‘‘‘’“‘“•”“”•––”‘’”””“•”““–––•––——”•–•“’–™š˜““•˜˜—–––––––—™››š››™šœœœ›š›š—™›šš››››š™™›œœœœ››œœŸ œžžŸŸ ¢¡  ŸŸ ¢¢¢¢£¢ ¡¡¤¥¥¤£¤¥¥¤¤£¡£¤¤¥§¨¦¥¥§§§§¦¦¦§ª«ª©¦¨ª¨¨§§¦¤¦§¨©©¨¨¨©ª©©ª¨§¬®®¬ª«ª¬¯®¬­°°¯®­¬««¯¯¯¯°°°®«¥’‡znd`UI<0"
























)w¬¶¸·¸¹¹¹º¸··¸¹º¹¹¹¹º¼¼¸¸º»½¼¹º»º¸¹ºº¾½»º»»¼¾À¿¿¿ÃÁ»½¾ÁÃÁÀÀÂÀ¿ÁÂÃÅÄÃÃÅÄ¿¿ÀÀÃÅÃÅÃÅÇÉÊÇÇÇÈÈÆÅÇÈÈÅÆÉËÊÈÇÈÉÆÊÎwvwwwtyxyzz{||zzyxwz|||xz{{xzzz{|||z|}}{{{{zy}}|||{{{y{}€€z€€‚€€€‚‚€‚‚ƒƒ‚‚…„}‚„††„„„…„ƒ‚……€€~‚‚€„…€ƒ…ƒ}…‡†„„…‡†…„€}…‡…„ƒ‚††‡ƒ‡‡‡‡‰‹Š„ˆ†ŠŠˆ„‡ˆˆ†Š‹‹‹Š‹‹‹Œ‹ŒŽŽŽŽŽŽŠŽŽŽŽŽŽŽŽ‘“’‘‘‘Žˆ’’’’‘””“’“”•–•“‘”’”“”””•˜–•––’—•––•’”•”•˜˜–”–—š™—”•–—’•–—˜š›››š™š•œš››œ—™™š›œ›–™šš˜žœšž  žžŸžžŸ  ¡ ž¡¡ŸŸ¡££ ž£¤£¢£¤¥£¤¥¥¤¤¥¤£¤¥¦¦¦§¦¥¨©©¦¨¦¥¥¥¥©©¨¦¦£§¨¨¨§¥¨¦ªªª¦¦§©©ª¨§§ª¬­ª¬ªª«¬®®¨­®¯°°«¬©¬­««®ª±¯®¯²±«¥”‹|saWNC:2#

















3~¯¸»»º¹µµ¶º¹º»»¹¹´º¸¸º¹··¸¹²º¹¹»»´¹¸»º½»¼¾½½¿»¾¿¾»À¼¾·¾ÁÁ¿À¾¾»¾¾ÁÁÂÂÃÅÇÂÁ»ÀÆÈÃÂÃÆ¿ÉÈÆÅÅÆÈÆÆÅÉÆÇÂÌÊÊÉÇÇÉÆÇÉxxwxxzzzwzzzzzzzywvy{||zyyzzxyz{z}}|{|||{{zxx}|||||{yxz}}€€~|}€‚‚€€€}€€‚‚€€‚~ƒ„„‚€……‚~€„†…ƒƒ„„„ƒ~ƒ…‚‚ƒƒ‚‚‚††‚€€„‡†…„†…………ƒ‚„…„…„„‚†‡††‡ˆ‡‡ˆŠˆ„‡‰‰‰ˆˆ‡ˆ‡†ŠŒŒ‹Œ‰‰Š‹ŽŽŽŽŽŽŽŽ‘“’‘‘’““’“‘’“‘‘‘”•““‘’“”“’‘’”“‘“”““”–˜–“–••–———•“—š™—–——˜—•šš™˜˜™˜–“’“—™š˜šš™™››œœ›™žžœ™˜šœ›žžŸ žŸŸŸŸ ¢žžžŸ¢¡¡Ÿœœœ ¡Ÿ¡£¢Ÿ› ££¢ ¢£¢¥¥¥¤¢¢¡¥¦§¨¦¦¤¤¤§¨©©¨§¦¦¤£¦¨¨¨¤¥¦¥£§§¥§¨©«ª§¦¨§¦¨¨§¦¨ª­®¬©««ª«¬®¬«­¯¯¯¬««­¬«­¯®®­®³¶¶´°­¦Ÿ“†wmbZOD8/&












;‡²¹»»º¹·º¼¼¼»º¸¸¸ºººº»¹·º»·¶¸¹·»º¹¹ºº¹º¹º½¾À¾»¾¿½½¾½¾¾½¾ÀÁ¿¾½½ÁÂÁÁÃÃÅÆÇü¿ÅÈÉÇÆÅÆÇÈÇÆÄÆÇÈÆÃÈÇÉÌËÈÌÍÊÆÉÉÈÊwwwwz{zyxyyxww{zxxwt{||uvx{{zyyz|||x{{|{{{{y{}{|}}}{{xz{|€}|~€‚€‚€€‚€€€‚‚€|‚…„„ƒ€‚ƒ„ƒ„…„„…ƒ‚‚„‚„„ƒƒ‚……ƒ‚‚‚ƒ„„………„„………†…††………†‡ˆ†„………„‡‡‡„ˆ‡‡†‰Šˆˆˆ†Š‹Œ‹Œ‹‡ŒŠŽŒŒŠŽ‹ŽŽ‹ŒŽŽŽ‘‘‘“‘‘‘‘‘’‘“–•”’‘’””““–•“”‘‘‘‘——–”•”•’–—˜”—š™˜™™˜š—•˜šš™™–™˜——˜–š•˜˜™™™—›šœ™›œœ™žžššš›œœœœ›ž Ÿžž ŸŸ ¢¤Ÿž›ž žžœœŸ Ÿ  ŸŸžŸŸ¢¤¢¡¢¢¤¥¥¤¢¡£¤§©¨¤¦£¤£¤¦¨§§§§§¦¢§¦¨©©¨§§§¦¦¦¦¦¨¨¨¨¨¨§£§¨¨¦¥¥ª«ªª«¬««¬«¬¨«§¬­¬¬­¬­«¯¬­«ªª¬®²³²®±¯©¢›•Šzp^VNG@8/&








@ˆ³¸µ¹·¹¶»¹¼¼º´¹ººº»¼»·¶·»¾º·¸¹¹µº·ºµº¹¸¶¹»¾º¾¼¾¾½½½½¾¿¿¾¿¼À¼À½ÂÀÂÃÅÃÇÆÇÂĽ½¼ÈÊÉÅÅÄÆÆÇÂÆÈÊÈÆÂÈÈÈÉËÈËÌËÈËÆÉÇwvw{{zyxwxzzyxxxyzyzz|zwvxy|{zzz{}{{{{||{|~~}||z|~~z{{y€~€‚‚€‚€€€‚‚€€€‚‚€€€ƒƒƒ„……„ƒƒ„…‡…„……„„„„ƒƒƒƒ€€ƒ„ƒƒƒ„…„ƒ‚†……†…‚…„„……ƒ‡†„‚ˆ‰‡„ƒ„„„„†…†Š‰‡‡ˆŠ‹‡‰ŠŠŠŒŒ‹‰ŠŽŒ‹‰‹ŒŒŽ‘ŽŽŒŽ‘‘’”’ސ‘‘‘‘‘’‘‘‘‘’–•”“’’’““””•——–“’”’–˜–“––•’”–˜—˜˜–—˜˜—𙕗™™˜˜™šššš™™šš˜–™›š—™˜šš—›œ›žžš›œœ›žž›œŸœžŸ¡¤¥¡ŸŸ žœœž Ÿ¡¢¡ ¡¡ ¢¢ ¡£¦¤¢¡¢£¤¤¤¤¥£££ª¨¦¥¤££¤¥¦¥¦¦£§¨¨¦¦¥¨¨¨ª¬ª§¥¥§¦¨©ªªª«©¦§¨©¨§§¨§§©«­®®¬ª©¨ª««¬­®®®­ª­°¯­ª¬¬¬­¯±²²³´³±°¨ž‘†ymf^UMC8(








MŒ´·¸¹¸»¼¼»»º¸¸º¼º¹»»º¹¹¶º¾¼¸»ººº»½»»º¼»º»½¾¿¿½¿½ÁÂÀ»¼Á¾À¾ÁÁÁÂÃÃÅÇÇÇÈÈÇÇÅÅÃÄÆÉÈÇÅÄÇÉÉÈÈÉÊÉÈÈÉÈÇÈËËÊÉÉÌÍÌÊÊxyzzzzyvyyz{zwvvyyyxyyzyxyzzz{{wzw|~}z{{|~€~~~{{|}{}~€€€€€|‚|€€€‚‚‚€€€|€‚ƒƒ„ƒ‚‚‚……ƒ„„„‚ƒ„…‚„‚…†…ƒƒƒ„ƒ‚ƒ††…€„…„‚„†‡‡ˆ…ƒƒ‚‚†„…††……‡‡ƒ‚‚ƒƒ„…ˆ‡ˆ‹Š‡‡‰‹Š‡Š‹Š‹ˆ‹‹‹Œ‹Š‰ŒŽ‰ŠŒŒ‹ŒŒŽŽŽŒŽ‘‘”“Ž‘‘“”“’““”•”“”““‘““••—–“•–”‘–”–“˜™•‘•˜˜˜—––—˜˜—˜—–—˜™˜™™š›š•—š›™™–šœ›™˜—™››œœœžŸš›žœœšœžŸŸž ŸŸ˜ž £¤£ Ÿ¡¢žœ Ÿ ££¢¡££ £¡¡¢¢¢¥£¢ £¢¤Ÿ¤¥££§¨§¤¥£¤¤¤¤¥¥¦¥¤¥¨§¦¦¥¤¤¡ª­«©§£¤¦©ª«ª©ªª¨©¬«¦¨©©¢¦¦ª¨¬«ªª«©¬«¬ªª¬®­«©­±²¯®­««®®°±±±²±´µ±¯ª¤›’Š{naZMB7.%
















+



 Z”·¸¸¼º½½½»¹¶¶¶·µ·´µ´º»»·»¶¼¹¹¹¹º¾µ¼ººº»»¼º¾¿¿¼¾½ÁÁÁº¾ÃþÀ½Á¿ÁÀÃÄÆÃÆÅÇÃÇÄÅÀÅÃÅÅÉÇÆÃÈÉÉÉÈÈÈÅÉÉËÇÉÊÌÇÊÇÊÍÏËËÈxzzxyzxyzzxzzyxwvxyxxxy{yxxyzzyzzz{~}|{z|}~~~{{|~{z{€€|€~ƒ‚€€}€€€€€€€€}~€‚ƒƒƒ‚€„„ƒ‚ƒ‚………ƒ‚……„ƒƒ…ƒ€„…‰‡………„ƒ„…„ƒ„†‚‡‡…‚„…†……„…‡‡‡†……††ˆˆ…ˆˆ‰‹Šˆˆ‰ŠŠ‰‹‹‹Š‰Š‹‹ŒŒŒŒŒŒ‹‹Š‹‹‰‹ŒŒ‹‹ŽŽ‘‘‘‘‘’Ž‘•”“’“•—•“’’“”’‘’’’”•—–•“•—–—–••–˜™•’–˜˜——–˜™™˜˜˜˜˜˜—”—˜™™š—“•š››™–šœ›š˜™ššœœœŸ™—žžœ››ž ¢ Ÿ   ŸŸ ¡¢¢  £¢¡ ¡ Ÿ ¢£¡Ÿ££££¤¤¢Ÿ¡¤¦¦¦£ £¤¤¤¤¤§§£¤¥¦¦¥¥¥¦¥¥¥¥¥¦¥¤¥¦¥£¢©­¬ª©¨©ªªª«ª¦¨©¨«¬«ª¨©ª¨§¨©§¨§ª«­®®®¯¯¯°¯®®­­°°®®­««¬­­®®®­¯±³´²¶·±¬§ “…uj^UKA70( 











#a™¹»¼½¿»»¼¾º··¶¶¸¸¸¸º»½¼ºº»»¼º¹»¼½½»ºº»¼¼»º½À¿»¾¿¿Á¿¾ÂÃÁ¿ÀÁÁÀ¿ÂÇÆÄÂÂÃÅÅÅÃÃÄÆÇÈÈÇÇÈÈÇÆÉÊÉÇÄÇÉÊËËÌËËËÌÌÌÎÎÌËxyxvyzxwwxxxyyyxxwxxyzzzywyzzyyy{|{z}||xz{|}}}||}}~}{|€~~~€}~}€{€|~~€€€}€€€€ƒƒ€„……„‚ƒ…†„ƒƒ…ƒ„„‡ˆ…‚†‡…‚………†‡…‚„„…„……„……ƒ„…‡‡†††„ˆ‰‰„„„ˆ‰‹Œ‹ˆ‰‰‰‰ŠŒ‹‰‹‹‹ŒŒ‰ŠŠŠ‰‰†ŠŒŒŒŒŒŒŒ‰ŽŽŽŽ‘Ž‘’’’•’••“’”“’’““•“——–’•—˜™˜“•”—˜—“”––•—”—˜—•˜™˜˜˜””•–————”—™›œš–šœœœ›•šœ›˜›žœœ Ÿž››™žŸ Ÿ  Ÿ  Ÿ› ¡¡Ÿ¡¢¡  ŸŸŸ¡¢¡ ¢¡£¥¤¢ £¤¦¦¥£ ¢¤¤¤¤¤¦¥£¡¦¦§¤¥¦¦¥¥¥¦¥¥¥¥¥¦¢¥¤¨©¬ªªª©ª©§¨¨ª©¨§¬ª©¨©««©©©©§¨§ªª¬®®¯°°°°®­°®¯®­¬¬¬­¨¦§¨©®¯®¬­°³³¶·µ¯²²¬¤œ”ˆ{lTMGA:2%



















+gš¶»¹»¸»·º·¹¸ººº¹º¹º½¿¾¼¹º¼¼¼»·½¼¿»¼¶¶·ºº»¼¾¿¿»¿ÀÁÁÄ¿¿Â¾À½Ã¾Á¿ÁÅĽ¿ÃÁÄľÅÇÆÅÆÅÇÇÈÃÈÌÌÈÇÆÄÄÊÍÎÆÈÈËËÌÆÎÌËÉxywwz{wvqwxwvyyyyyyyy{zzzyz{{{xzz}||}~~|x{zz|~~|y}|~~}{~€€}~}€€€~}zz€€€ƒ‚€‚€€€ƒ„‚€‚ƒ„…€‚„†…„ƒ„†ˆ†………ƒƒ††‚„…†ƒˆ†…€ƒ„††…………„………†‡ˆ…‡‡†ˆ‰‰„„„‡ˆŠŒŒ‹‰ˆ…‡‰ŒŒ‹‰ŠŠŒ‹‹‹‹ŒŒŠ‰‹ŒŒŠ‰Œ‘‘‹ŽŽ‘ŽŽŽ‘‘‘‘‘Œ‘‘‘’“•–“’–•”“””“•˜——–”•–˜˜——••–™˜—––˜™˜—––––˜™———––˜˜——™˜˜™›œœ›ššš›œ›šœœœœžžžžžžŸ  ›œœŸ¢¢Ÿ ¡Ÿž ŸŸ¡ ¡¢¡ŸŸŸŸ   ŸŸž ¢¡¡¡¡¢£¢¡¡¤¤¤¥¥¤¡¡¢£¢¦¦¥¤¢¤¤¦¥¤¤¦§¦§ªª©¦¦¦¥¦¦¥¥§¨ª©¨¨§¨©§§ª«ªªª¬­ª¨©«¬«ª««««ª««««¬®®®¯­¬¬±´²®«¬®«­®¬¬­¯±°¯¯®°°±³³³´µ·¶³²®§ž‘…uh]VMD8,













4nž·ºº¹ºº¹¹º¸º»½¼º¼»»¾¾½»»º½¼¼¼¸½¿¾½¼¼¹¹¼¾½½¾¿¿¿¾ÁÂÃÃÃÀÃÁ¼¾ÀÂÃÂÃÁÁÂÂÂÄÃÂÀþÄÅÅÅÅÄÄÆÇÈËÌÌÉÇÉÈÅÈÍÍÊÈÉÊËËÇÍÍËÉxyxuz{wvwwxyyyzzyxyyz|}}zzzwz|{yz}}|}{~}{x{}~}||~~{}~|}}~~~~}}~|~€€|}~‚€~„„€€‚‚€~‚ƒ‚‚‚„„ƒ‚‚‚‡ˆ‡‚…„……†‡‡†…†‡ˆ‡……„ƒ„†††„ƒƒ…„…†…ˆ‡†‡ˆ‡„„„……†‡Š„‰ˆ‡ƒ‡‰ŒŒŠ†ˆŠ‹ŒŒŒŒŽŒŒŒŠ‘ŽŠŽŒŽŒŽ‘‘’‘‘‘‘‘’‘•–’”––””–•‘“•—––••“–”–•–’––™˜–•™™˜˜—•—————––“˜˜˜——˜™šš˜›œœœš—›œœ›œš›œœ›œœ–ŸŸ›ž˜Ÿ¢¡ Ÿ›žŸŸžŸ   £¢ŸœŸŸžŸ  ž Ÿ¡ ¡ ¢££ ¡¡¢£££¤£¡œ¢ ¥¦¥£¥¥£ž¥£¤¥¦¥¨¨ª©§¦¨¥¦¤¦¦§§§§¦¥¦¤©¨¦ª«¦«¬­­©¦¨¨­ª¬©¬¬¬ª¬«ªª­­­­­¬¬©²³±®®®­¬¯°®­®¬²±°±±±°°¯®²³³¯´³³®²¯ª¤œ“‡tfZQG;3+#







3s£º»»º¹»¸¼¼¼»»¶»¹½¼¼¼¼¹»º¼½½¼½¸½¾¾¸¾¾»»½¿¾»¾¾ÀÀÀÁÄÂÄÀÀÁÁ½½½ÂÂÁ½¿ÀÂÀÁÁÁÂÂÃľÄÂÁÁÈÆÅÅÇÈÊÈÇÈÊÉÇÇÈÊËÌËÊÊÇÇÇÌÌËÉuwwvz{wyxxxyzzwyxz{zz{||z|{yz|{y{|}}}~€{zz}~~|~}~~~}~~||~€~~~€~€‚~€~~„„€‚€€€€‚€‚ƒ„„‚‚ƒ…†‡†…„…………†‡‡„…‡ˆ„……„‚„††…„„„…ƒ‚„……‰ˆ……†‡…‡†…‰‰ŠŠ‹Š‰ˆ……ŠŠŠ‰ˆ†Š‰‹ŒŒŒŽŽŽŽŽŽŽ‹Ž‘‘ŒŠŠŽ‘‘‘“‘’““’”““••‘’”–••’–•‘’•–•––””•––—––—˜™˜””˜™˜™˜———•””••”—˜˜–™š››™™›œœœ™›Ÿœœ›œœ›™œ›ššž šŸžž  Ÿžžž¡Ÿž¡¡ ¢¢ žŸ¢¢Ÿž¡¡ ¡¢£¢¡ ¢¥¥¤ Ÿ ¢¢¡£¥£¢¡£¤¥¤¥§¥¢£¤¤£¦§¨¨©©¨¨ª§¦§¦§¦¤¨ª¨¨¦§©©¨§¨©ª©©ª©¦§©¬­­¬¬««¬«ª«¬®®¯¯­«¬­°±²±°°±¯®®¯­­®°±°­±²°¯®®­°±°±³µ´µµµ´´²®¤™ƒqgURI@4)




2w¦»ºº¹·º¾½¾¾¼»»ºº»½½»»¼»¼¼½¼½¾¼»½½¾¿¾»¾ÁÀ¾¼¿¿¾ÀÁÂÄÃÃÄÃÂÁ¿¾¾ÃÃÁ¿ÁÁÁ¿½ÁÃÃÅÇÆÅÅÃÄÅÇÇÆÆÅÇÇÆÇÉÊËÊËÉÈÍÐÎÍÌÉÉÌÍÌËÊtvwwyyyxyxy{{{{yy||{zwzxx{|zz{zy|}}~}~~||||}~}~}}~~~~€€~€~€€~}}|~~€€€€}||€~‚„……ƒ‚‚‚{}€ƒƒ‚ƒ„‚‚…ƒƒƒƒƒ…„ƒƒ…††ƒ††…„…‚‚ƒ…†……†††…†„……‡ˆ‡„„†‡†ˆˆˆŠ‹‹‹‰‹ŠŠ†ŠŠˆˆŠˆ‰‹‹‹Œ†ŒŽŠŽ‘ސ‘‘’ŽŽŽ‘’’“ސ’”””””‘””“”””•—–“’’”•–•–’’’•–•‘••—™š˜––™—˜˜˜•˜˜—–––—”˜”™——–š™™š›™™™œžžžœœ›žŸœ™œšš› Ÿ›šœžž›Ÿžž žŸ¡£ ¡¡¡Ÿ¤¦£ ¡££ ¡££¢¡›£ ¤¥¤¢¡Ÿ¢¡£¥¥¤££¦¢¨©¨¥£¡¢£¥¥¥§¨©ª¦§§¨¨¦¤§§§ª­«ª¨¨ª©§§§ª«ª§ª£©©©©®®«¬«¨­­¬¬¬­¯¬®­¬§¯¯¯­¯«±±¯®®«®¯°¯±«¯²²¯°¬°®°¨±°µ¶µ³¶¶µ²¶²¯«§¢›ƒreYOE?82,'"



0w§¸¸µº¸¼¾½·½»¼¼º¹»½¾»½½¾½»»»¼¼»ºµ½¸¾¹¼½¾»¾¿Â¼½ÀÁÁÂÀÀ¿Åľ¿ÂÃÂÁÂÄÃÁÀ¿¼ÄÃÆÆÇÇÅÁÅÈÉÁÈÆÅÃÅÃÄÄÊËÌÌÊÇÉÊÍÌÍÌËÌÏÎÌÇuwyywyxxxxyyz|}|z|}|yzzxuzzzz|{{|}}}}}}}|{|||}~~|}|y}{{}€€€€}€}}}}~~~~~~‚€~€€~‚„„„…„ƒ‚‚ƒ|~~}‚„„‚‚‚ƒƒƒƒ„…„‚‚‚ƒ…………„ƒ…††……†††…ƒ„……ƒ„†‡‡ˆ‡†††€‡††ˆˆˆ‡‡†‡‰‰ˆ‡‰‹Œ‹‹Œ‹†ˆŠŒŒŒ‹ŒŽŒ‹‹ŒŒŽŽŽ’Œ‘ŒŽ’’’””“‘’””“’‘’““•”’”—•”•———•–•“‘“•••–”“•˜™™™š›™———™™™˜˜˜˜—–—™™˜––™ššœ›™™˜œžœš››œž œ˜œž›ŸšœœŸ¡¡žœŸŸ  ¡£¤£ ¡¢¥¦¦¤¡¢¤¥¥£¢Ÿ¡¢¤¢¢¢¢¡¡¡ž¢£¥¥¦¥££¦©ª©¨§£¢£¦¦¤¤§¨©«©¤¦©ª¥¢¦©©«­ª¨¨¨ª©¨¨¨«¬«©¬¬ªª¨«®®«­­­­®®­«­¬¬¬¬¬®¯®­­®°°°­¯®¯°±±²±¯¯°°±±³³²±°°´´³´³µ´µ··´³´µ´²­¤šƒsdYWQLE?7-#
.w¦º¸¹»½½¾ºµº»¼¾½»»½¿½¾¿¾¼»»¼»¼¼¼»»¼»¹»¼»¼¿Â¿º½¿À¿ÀÀÀÂÃÄÃÂÄÇÄÁÁÃÄÄÃÁÀÀÃÆÅÄÅÇÅÀÇÉÇÇÈÈÇÆÇÉÈÃÈÉÈÉÉÊËÊËËÍÎÌËÍÍÌÎxvy{{yzxxxyyyy||zz{||||zyzzy{}|zzxzz|x}~}y{z}~~~~~|}~}z~€€€~€~}|~~{€€€ƒ‚€}~‚ƒ‚€„„ƒ‚‚}‚‚„„ƒƒ‚€ƒƒ„„„„„ƒƒ……†‡‡†ƒƒ†‚ƒƒ…‡‡…„„……„„†ƒ†‡‡ƒ†‡‡‡ˆˆŠˆ‰†††††…„‡‰Š‡‹ŒŒ‹‰‡‹ŒŽ‹ŽŽŽ‹‹ŠŒŽŒŽŒŽŽ‰ŽŽ‘ŒŽŽ‘Œ‘‘’“”““’’“”‘””’‘‘“–•‘”“’”—˜™˜–––••“”•–••’‘‘–•—™š™˜’—˜™™˜˜™˜—•˜˜™———›œšš—šš›œ›››š›žš›™žœŸ žžžžšœžžžŸ ŸŸž¢Ÿ¤¤ Ÿ¢¢¥£¢Ÿ ž¦§¥£¡œ£¥¤££¢¡¡ œ¢ ¦¥¤¤£ §ª©¥§§§¦¦¨¦¢¤¥§¤¨¨§§¨¨§¤§¦©¨¨¨©««ª©¤©¨«ª«§®®«¨«®°­«®¯­­®¯­­¬«ª®ª¬¬¯­¬­®°±²®¯°²°®±°°®­¬¯±±¯´¯¯®®¯³¯°³±®´·¶³³´´´´´°®¨£š‘‡yo]WSTPKC:) 



;€©¶µµ»¸½¼¹µ»½¼º¾¼¼¸À¾¿»½¹¹º»º½¾½»»ºº¹½¿¾½Á»¹¸¼¾¿¾¿½ÂÄÄÃÅÂÆÇûÃÃļÄÃÁÀÂÃüÂÇÅÀÆÆÅÇÉÊÉÉÉÉÈÃÈÇÈÂÊÌÌÉÈÆÊÌÌÌÌÊÏÏyuy}{zyxwwxyzy|{wzz{{{zzzzzyz|yyyxz{zz|}}{{|}~€€}}€~~€€€‚‚€~€€~€€€‚‚‚‚ƒƒ‚€‚ƒƒ‚‚‚‚‚‚ƒƒ„„‚……„„ƒƒƒƒ„„„……†‡‡‡†„ƒ…††„…††…ƒƒ…………†††††‡‡ˆ‰‰…‰Š‹Šˆˆ‰†…‡‰‰‰‰‰‹Œ‹Œ‹ˆŠŒŒŽŽŽŽŽŒŒ‰ŠŒŽŽŽŽŽŽ’‘’‘’”’’‘’‘“”’“•–‘‘––•””“””–—–“––––•”••–•“””•–”˜™šš˜˜˜™™˜˜˜———˜˜˜™˜™œž˜˜™™›œœ›šœ›ššœ›œž  žŸžŸžœŸ £¢¡ŸœŸ¡¢¢ŸŸ¡£££   ¢¤¥¥££¡¡¥¥¤¤¥¢¡¡¢¤¦¥¦¤¥¥¦§¨§¦¦¨§¦§§¦¢¥¦¦¥¥¥¦§¥¥§ª««ª¨©©«««©¨ª­­¬©ª«­®¬¬¬®¯®«­¯®®®°°®¬­¯°±°°°®«®®®±²¯®±³¯¯²´±®¯«¯±¯®²²­°±±±¯¯±®°³¶µ²³´³³²²³´´³²°©Ÿ’†zqlkg`VK8'I‹®·´·¼¾½º¸¶»½½¾½½½¾¾¿¿¼¼»º¹½½»¼¼½½»º»½ÁÀ¿ÀÀ½¼½ÁÁÂÁÁÃÅÇÈÆÅÅÆÃÂÃÅÄÄÅÇÅÅÅÂÂÁÃÇÆÄÅÅÅÇÉËËÌËÉÈÈÉÊÉÌÍÎÌÌÌÌÊÉËÍÎÐÑÏzvyxyyxvxvyzzxzzyzz{{{{{zv{{|zz{zx{||z}|{{|}}}€|€~}~~€€‚‚ƒ€‚}€}ƒ‚€~€€ƒ„ƒ‚‚‚ƒƒƒ‚€€„………††…‚‚„……„„…††‡…„„…ƒ†ˆ‡ƒ„††…„†‡…„††…„„†‰…‰ŠŠ‰ŠŠŠˆˆŠˆ…‰Š‹‹‰‰‹Œ‹‹‹Š‰‰Œ‰ŒŽŽ‹ŒŒ‰ŒŽŽŽŽŽŽ‘‘‘‘Ž’’‘‘“”’‘“””•’•––‘‘”•“”“’’’“•”•”“””•••–•””“–—˜˜™š›š™——˜šš™–•–˜–˜˜™šœš–™™œœœ››™š™˜™ŸŸ›—Ÿ›Ÿœ›žœœ—Ÿ  ¡¢¡ žŸ ¡ŸŸ ž Ÿ   ¡£¢£¦£ ¡£ ¡£¢¡¤¦¦¦¥¥¥§§¥§¥¤¥¦¦¥¤¥¥¥£¦¦¦¦¥¦¦¦¥£§¬¬ª«««ªª¨©¨ª¬®®«©ª§ª¬®­­ª®°®©®­­«°°®­®­¯°°¯°®®­¬ª¯°®¬­­°¯±±°®­¬°±±®±±°±²±°°±²²±³µµ±´°´µ´±³µ´³··µ±¬§¢š‘…}hd_RD9+&
Y™µ¼º¹¾¿½¹¸·º¶½¾½»¾»½º¿¼¼¹¹º¾¸¸·»½¿¸ºµ½À¿»¾ÀÁÀ¿ºÂ¿ÄÃÂ½ÆÆÅÁÅÄùÃÂÂÁÅÇÇ¿ÈÅÃÁÃÆÆÅÄÃÆÃÈÆÊÈÊÈÈÉÌÊÊÏÏÈËÍÎÍËÉËÊÎÐÐÏz{yxz{zzzzzzyyxzzxw{}|{{zz{||}~|xy{|}~z{|||~}}€~~~~|{|‚‚‚~~~~}„‚€~€‚ƒ}~ƒ‚‚„„‚‚ƒ‚‚„„………††„„„…†ƒ…………†„ƒ†‡‡‰†‚‚‡†‡†„†‡„„ƒ„…„ƒ†‰‰ˆŠŒ‹…Šˆ††‹‰ˆ‰Š‹Œ‹‹Œ‹‰ˆ‰ŒŒŒŒŽŒ‹Œ‹ŽŒ‹Ž‘‘‘Œ‘’‘“”“’”•–••–•”‘“”“’”““’“•—•”““”••“’––•‘“—˜˜™˜™šš™–š›››š˜—–˜™™™™™šœœ››œ››œ››ž  šœœœ›››œ›œŸ ž¡¢¢¡   ŸŸŸžŸ   Ÿ ŸŸ¤¥¥¥¢Ÿ¡¡ ž¢¢£¤¦¦¤ ¤¦¦§¨¨¦¢¥§¥¤¤¤¥§¨¦§¨¨¨¨©ª©¦¨©¥¦ª­¬©ª¨©ª«­¬«©«ª©«­­®®®°³±¯­«¬¬¯®®°®­­¯°°®­­¬­®°±±¯®­®¯®®¯°¯®°±±°¯²²±³²°±³´±±²´µµµ´´·´±µµ¶´¶¶¶¶·¹¸¶¯¨›†{mbVK>5+#+h¡¹¾¼¼½¾½ºº·º½½½½¿½¼½À¿¾¼¸¼¿½¶»¾¾¿¿½¼½½¿¿¿ÀÃÄÂÀÀÂÅÄÄÂÁÄÇÄÃÄÅÃÂÁÅÅÅÃÃÅÇÉÈÅÃÄÅÇÇÈÄÇÈÉÊÉÇÈÈÇÉËÊÉÎÌÇÌÎÎËËÌÍÎÍÎÎÍyyyw{{{{|{zwyzy{{uwz||yxz}~||~{z{||~~}~~~~~~€‚€}}~~€€~€€€€€€€‚€€‚€€‚‚ƒ‚‚ƒ‚‚‚„…ƒƒ„ƒ‚ƒ„ƒ„„„„„…‚ƒ„ƒƒ…†‚…‚„„…‡ˆ‡……‡‡†‡‡„†ˆ†……†‡…ƒ‰Š‰‡ŠŠ‰‰Šˆ‰‹Š‰ŠŠ‹ŒŒŒ‹‹Š‡‹ŒŒŽ‹‹Œ‹Š‹ˆŒŽ‹Œ‘‘‘’‘‰’‘Ž“•”’’“”“––••”’”••––––””’”‘—™–““•––“•–˜˜•”—˜™™™—™š˜–ššš—œššš™™ššš—›œœœœšžžžžžžžš™˜›››œ›žž  Ÿ ¡¢ ž   Ÿ œŸ    žž£§¦¤£ž ¡¡¢¤¤£¥¦¤£¢¥¦¥¥¦¤¨§¢¢¨£¥¦¥¥¨©ªª¨¥§©ª««§¨¤¦¥¬¬«¨©©©ª©©«ª©­«¨«©ª§¬­¯±±®­¬­­¯ª¯¯­«¯²²®¯¬®¬¬¬²²±±±¯®­­­°²°«²³²°²´³±³²±³µµ³±±±¶´µ´´¶´±³´µµµµ·°·¸º´¸·²­¦ž•…x`XQIA8,%
$8r¤¹»º¹º¼¼¹º·»½½»½¿¾¹½¼¾¾¼¸¼»½¸¾½¿ÀÀ½¿¸¾¾ÂÂÃÃÂÁÁÁÁÂÁÀÃÃÃÁÀ¿ÀÂÅÅÄÆÇÆÃ»ÅÇÈÆÇÆÄÃÈÇÆÅÇÅÌÍÊÇÉÉÈÆËÉÊÉËÉËËÊÊÌÌÌÍÎÎÎÎyzz{zz||{zyxz|zzzzyz{{yxw}~|z}|||}|{{}~~z~€‚€}|~€€}}}~‚‚€€~}~}€ƒƒ„…‚€}‚ƒ‚‚‚ƒ„„„‚‚‚~‚ƒ‚„†‚‚ƒƒ‚„‚ƒƒƒ„…ƒ‚ƒƒ‚ƒ……†††„ƒ„††‚‡ˆ‡……††ˆˆ‡††‡‰‰ˆˆˆˆ‰†‡ˆˆ‰Š‹‰‰Š‰ˆŠŠŒ‹ˆ‹ŒŒŒŒŒ‹ŽŒŠ‹Œ‹Œ‹‹ŒŽŽŽ‹‘‘Ž‘““’’’“’’”–”’‘’““––“””“••–˜˜——••—•“–™—“”————”—™™˜–•—˜˜˜˜——š™˜•—šœœšœžœ˜™™šœœžžžž›œœœŸŸžŸžœœ›šœœŸ  ¢¡ŸŸ  žžŸ¢¥¢ŸŸ¡¡  ¢¢¡¥¨¥£¢   ¤¥§¦¤¦¦¤¢¤§§¤¥¦¨¨¦¢¦¨§§¨¨§§¨««§¤¤¨¨«ª©ª©¨««­¬¬¬«¬¬«¬¬ªª®¬©«©¨ª¬­®®­®­¬¯¬®¯®­ª­®°²²¯®®­®°²±­²²±°®°°°²²±²²²±±²²²³±²³µ´´²²³µ¶µ³²µ´´´³··¶¶¸¸¶¶¸¹·¸ºº·´°ªœŒ€ti`UKB;2.,%+<S{¦¹½º¹º»»ºº»¼½½ºº¿¾¼»¹»½¼¼½¾¿¿¾¾¿ÁÂÀÀÂÁÃÄÄÃÂÀÀÁÄÅÄÀÀÃÂÁÀÀÀÂÂÆÅÄÆÈÇÃÂÅÈÈÈÈÆÇÃÆÈÉÊÈÈËÌÈÇËËÊÇÊËÉÉÉÌÎÎÌÍÎÍËÌÎÏÏÐz||{zy{}|{zzz||y||zzzyzyz}}y||{{|}{uy|~~}}€y{|~€€~€}~‚‚€}~‚ƒ„„€‚ƒƒ‚‚‚‚……„ƒƒ‚‚‚…„ƒƒ‚ƒ‚‚‚„…ƒ‚‚€ƒ„………†…‚ƒ„…†ˆ†………†‡ˆ†††‡†ˆˆˆˆˆ‡ˆˆˆˆˆ†‰††…ˆ†‰‹‰„Š‹‰†ŠŠŒŒŒ‹ŒŒŒ‹ŽŽŒ‡ŠŽŽ‹‰ŒŽŽ‹‹‹’‘Œ’“‘’“Œ‘”“Ž‘“•”“’’“”‘‘‘““”’”•—–••——––˜—”–šš—–“˜˜™™—–––˜“˜——™š™™™šš›•œš–——˜š›œœ›œœœœ—œ›š››ž››žŸœŸž››šžž  Ÿœžž ¡Ÿ›¡£¢¡ ¡¡ ¢£Ÿ¥£¥¥¤¡¢ ¤¤¦¥¤¥¦¥¤¥¨££¤§§¨¨§¦¨¦§§¨©©¥ª«©£¥§©©©¨¬ª©¥«««ª­«®­«¬¬ª¬­¬¬­©¨¨¬¬®®¯­®«¯®­­®­­­­¨¯®­«¬­°±±®±±±±°­²³²®³²°°±­­®±²´±±±²²´«²³´®µ²³µ´°µ´·¶¶·¶µ¶³·¶´µ¸±·µ¸¸²ª£ž–Šzc\VPKIGD>4%6LZa­º¼»µ»ººººµ½½»º»¼¾³»¹»·¼¹¾½ÀÀ¾¼¾ÀÃÂÁ½ÀÁÃÃÃÃÁÀÁÂÅÅÄÀÀ¿¿¿ÂÂÁÂÆÁÅÈÉÃÅÅÆÇÇÇÈÄÄÃÃÃÉÇÉÆÇÉÈÆËÌËÇÇÈÇÅËËÍÌËÍÎÌËÉÎÉÎÍ|}|{yz{||{zyy{}~}z{zyzz|}||}|zzz~|zy{~~}||~~~|{{€€€€}|~~ƒ‚~€‚ƒƒ„„‚ƒ„…‡‡…„„„‚„†……‚~€ƒ…†…‚ƒƒƒƒ„‡ˆ‰‡„ƒ…†‡‡††‡‡†‡††‡ˆˆ‡‡†‡‡ˆ†‰‰ˆ†‡‡‡ˆŠ‰ˆ†‡‡‡ˆŠŠŠŠŒŠ‰ŠŠŒŽ‹ŠŠ‹ŒŽŽŠŠŽŽŽŒ‹ŒŽŽŒŽŽŽŽŽ‘‘‘‘Œ““‘”“’‘“””•”’’’”•”“’“’‘””––“”••••–—”•–™™—••˜šš™˜˜™™˜˜˜˜™™—›š›š™™›œ›™˜š™•ššœœ™››š™š›š˜š›žœ›žŸŸžžŸ ¡ šŸžœžœšž ¡¡¢ šžŸ›Ÿ ¢¢ ¡££ ££¤¥¥¦¦¦£¢££ ¥¥¥¥¦§¨§¨¦¥¦¨§¦§§¤¦¦ªª¨¨©¨§¦§¨¨¨«¬«ª«««©ª¬ª­­¬¬«ª««ª¬««©ª«¬®¯¯°®­®¯°°¯®­®­®¯°¯®­­±³±±±°¯±°¬±´²±²³±°¯­¯®°²´²´´µ´³±±²±²´´´µ²¯´´µµµ¶¶¶¶¸¶µ²¶µ±·¹¹»º¶¶¶´­Ÿ‘„xmf`_[XRF6)/Ois´º»¼½¼ºººº»¼½¼¼¾½½½»º¼¼¼½¾¿ÁÁ¼»½¿ÂÂÀ»½¾¾ÁÄÅÃÀÃÃÃÃÄÂÁ¾ÁÁÃÃÁ¿ÆÄÆÉÈÄÅÇÆÄÄÅÅÅÆÇÄÄÈÇÈÆÇÈÈÇÉÊËÊÉÉËÌËËËÉÇËÍÌÌÎÍÍÍÎzxyyz{|yyyz{||}~~~}|zyz{|{{{|z{{~~|{{~~}}}{}~}|}}~~~~€|‚‚~~~~€~€€‚ƒ‚‚ƒƒƒƒ„…†„„„„„ƒƒ„ƒƒƒ‚‚‚†ˆ…‚ƒ„‚‚„„ˆ‡‡†………„†††‡ˆ‰ˆ†…†‡‡†„…ƒ‡ˆˆˆˆ‡‡‡‡‡‰‰‹‹Š‰ˆ‰‰ˆ‹‰Š…ˆˆ‹ˆ‹Š‹ŠŠˆ‰ŠŒŽŽŒŽŽŽŽŽ‹ŽŽŒŽŽŒ‘‘‘ˆ‘‘’“”‘‘‘’“’‘“Ž“““‘‘’––•”“‘‘”–•”””’““••–——–˜””•™™››™•™š™”—˜™˜™™šœš••—›œ››œœ››˜œš›››–›šš›œœ™ž›Ÿžœœ¡££¡œš››œž¡›œžžž¢¤¡šŸžœ  £¢¢££Ÿ¡¡¤¡¤¦§¥£¡¢£¥¦¥¥¦£§©©§¦¦¦¨¨¦¦¨¨§¦©©§©¨©¦§¤©©ªª««¬­¬¬«¬­ª­¥¬¬ª§­ªªª©¥ª««ª­¬®«®¨«¬°°²°°«¬­±¯²®°¬²²°±°®®²±¬°±²±²°±¯­¬®®®®°²µ··µ´²²¯±±µ²³³±°´²´°´µµ³·¶¹¸¸·¶³¹º¸··µ·¸»»´­§ ˜‰~ga\`YNE>6*3Lew€…¨º¼¾¾½½¹ºº¾¿½¼¼½¾¾¾»½¹¾¼¼¸ÁÁÂÁ½¸¼½¾ÀÁ»»ºº»ÂÃÂÁÃÁÁÂÂÁÁ¿ÂÁÁ¼Á¾ÆÆÇÄÄÅÇ¿ÅÁ¿¾ÂÀÇÈÆÆÇÇÉÆÇÈÇÇÈÇÍÍÊÃËÎÍÇËÇÈÊËËÎÎÎÎÌÉxwxyw|{xxz{||||~~|{zz{y{|}||z{}~~~}}}}}{{|}~~~€}|}~€{}‚‚€€€€€€€‚ƒ‚€‚ƒƒ…„‚€‚ƒƒ„„€‚‚ƒ‚‚ƒ„ƒƒ…†ƒ‚„„‚€†ˆ‡‡‡†„„††…ƒ…‡††ˆˆ†„„ƒ…††ˆ‡†…‡ˆ‰ˆ‹Šˆ‰Š‡Š‹ŠŠ‹‹‹‰‡†Š‹Œ‹ŠŠ‰‹Š‰ŠŒŽŽŽŽŒŽŽ‹ŒŒ‘‘’‘‘‘‘‘‘“”“’Œ’““‘“““‘‘‘’’”–•”’’‘‘˜—“••““••”“—˜—––•–™™™›œ™–—š™”—™™˜˜˜š›š™–šœ›œœœ›š›œœ˜››œ›››žžžžžžŸŸŸ¢¢ ››œ›š¡¢¡   Ÿ¡¢ Ÿ Ÿ¡¡¡¡¢¢¢¢£¢ ¡¡¡¢£¢¤¡¢¤¤¦¦¦§¥£¨©¥¦§§§§§¦§©©§¦¦¨¨ª«ªª§¦§ªªª¨ª¬¬«ª«¬¬ª¬¬¬¬«¬­­«©©©ªª««¬¬¬®®¬ªª¯±²´±¯®°±²´´´´²¯°²°¬®²²±°±±²±²³´¯®¯±°®°²´¶µµ´³²²²³´¶µ´µ¶µ´´¶µ´´¶·¹º»¸¶·¹º¹µ·¸¸·¹¼½»º¹¹³¬ “‡|mf_]VN?02Lex‡‰œ±¾¿¿¾¼¼»»½¿À¾¼»½¾½½¼½¾¾¼¼½ÀÂÁ¿½¼¼½¿ÂÂÁ¾½¼¿ÁÃÄÄÂÀÂÃÃÁÁÃÄÃÁÀÁÅÇÊÇÅÅÄÅÇÆÅÁ¿ÀÃÆÆÇÈÈÈÉÉÉÇÆÇÊÌÍÍÉÈËÎÌÌËÈËÌÊÈÍÎÌÏÍÈyyyyz{{zy{{z}~}w|}~{{zzzz|}}|x}~~{|}~}|}z|{|}€€|~}€{|{}~~{~€‚€}€|ƒ„ƒƒƒ‚€€‚ƒƒ‚‚‚ƒƒƒ‚ƒ‚‚„ƒƒƒ„„…ƒ€†„„†ˆˆ†„ƒƒ…‡‡†ƒ‚…………‰ˆ‡ƒ„„‡…†‡ˆ‡†‡‰‹‹‹‹…‰‡ˆ‹Œ‡Œ‹Œ‰‰ˆŠŠŒŠ‰‰‰ŒŒ†ŒŽŽŽŽŽ‹‹ŒŽ‘’’’”“‘‘‘””“‘“““•”•“Ž’‘“•••““”’’’”˜—“•–””˜–•“—™˜•˜—™™š™™˜˜˜˜™˜•š›š–™š››šœ›–™˜››š™™››››šš›œž•›Ÿž›œŸ  Ÿ œž¡¡Ÿž›› ¡žŸ¡ œ›ž ¢Ÿ¢£¢ž¡¢¡ž¤¡ ™¢ž¡£¤¥¤Ÿ¥¡¢£¦¨§£¦¨¦£§§¦¤¤¤§©¨¤¨¨§§ªªªª©¢¦¦«¬«««©¨¨©ªªª¬«ª§©ª®ªª§©¬«¥©««¦¬®¯®«¨°°°¯°©®¯¯°²³²±±±±±®ª¯²²²²²±­±³´´³²±ª±°±³³¬±²±°¯¯³³´··¶¶¶¶±µ¶·²¶¸¸¸¹´¶³¸ºº·¶µ·¸·¶¹ºº³¹¶¹¹µ°¨¡™‚i`XNGB?IUco†™§²»Á¿¿¾¼»¹¹º½¼½½½½¼¹½½¿¾À¹ºº¿ÁÀ¾¿½¿ÀÀ½Â¿À»»¼ÁÁ½ÂÁÃÂÃÃÃÁÄÆÅÀÀÁÇÄÈÅÅÄÃÃÇÄþÄÄÆÅÆÆÇÈÊÇÈÈÉÉÊÊÌÌÈÈÊÌÍÃÍÉÎÍËÇÍÊÍÏÐËy{zz{|{{y||yz}|z{}~~}|{{y~~}|{|~~~}}{{~~~}||}€€€€|}|}{~€‚€€}~€‚ƒ„€ƒƒƒƒƒ‚‚‚„„……ƒ„………€‚„„‚‚ƒ„……„~…‡††††‡ƒ„„……ˆƒ„„„………†‡‡‡†‡‰ˆ††‡‰‰‰†‡ŠŠ‹‹Œ‹‹‰Š‹Œ‹‹Š‰ŠŠ‰ˆŒ‹ŠŽŽŒŒŒ‹‹ŒŽŽŽŒŽŽ’””“‘””“’‹‘‘‘“’””“””””’•”••’’“”––••••––••––——–˜ššš™˜–•–››™—•™›šš™˜™˜™š™–™˜š›™™›œšš˜˜š›ž›™™šœ›œžŸ ¡¡¡ŸœŸ¡ žœŸžœ ŸŸŸžŸ¡¤£¢¢¡¡Ÿ ¡£¤¤¢££¥¦§¦§¦¥¤¥§¨¨¨§¤¤¥¦§¦¦¤¥¤¤¦§§¦¨«©¨©«««ª¨¨ª«««««§ª««©«««¬ª¨ª¯­©©«®°­ª¨¬­­¬­¯¯¬®±°¯®­­®¯­¬¬¬®¬¯³³±­¬¯³³²µ´±­²µ²±³´±±±²³³³±±³±®­°²´´·¶µ¶·µ³´µ·¸¸¸¶¶µµµ¶·¹¸·¶¶···¸ºº¸¸¸¸¹¹º»º¹´®¤—‹nd]^dmqv’¬¹ÁÂÁ¿¿¾¼»º¹¹¼½½½¾½»½¾¾ÀÀÀ¿½¹¾Â¿¼¾ÀÁÁ¿½ÀÁÀÁÀÁÁ¾¿ÁÁÃÃÃÄÅÄÂ¿ÆÆÆÃÃÆÇÅÆÆÅÄÅÇÇÅÆÇÉÈÈÇÅÈÉÈÆÇÈËÌÉÉÊËÉÇÈÌÌÌÌÎÎÍÍÎÎÎÎÏÑÐvvzz{|{{zzzyyzzz|||{||z|~~~}|zz|||{}~~~~{{|}€€€~€~~€‚ƒ‚‚‚ƒ„‚‚~ƒƒ‚€ƒ„………„ƒ„…‡†‚‚ƒ…‚ƒƒ‚„…ƒƒ…†„††„ƒƒ…†††‡‡††……‚…ƒ†„†…ˆˆˆ†„„ˆŠŠ‰‡‡‰‰ŠŒŒ‹‹„ˆŠ‰‹Šˆ‰‰‡ˆŠŒ‹Š‰Œ‰Œ‹ŒŒŒŽŽŽ‰ŽŽŒŽ’”’Œ‘“’‘Ž‘‘‘‘“”‘’‘’’”–——–”’‘‘‘•••”•••“–—–•••—”™›š—”“–šœ—˜”™—šš˜”•–—™˜•›œ›šššœœš˜˜›œ››–˜—œ›š›š˜œžžž ŸœŸŸŸœœžžž› ¡ ž    ¤¦¥£¡¡¡£¤¤ ¥£¥£¥¦§¨§¢¦¦¨¨§¤¤¤¦¦§¨§¥¥¤¤£¤¥¥¥©ªª¨©©ª«¬§««¬¬ª©©§«­¬©¬¬­­¬ª­®¬ª¬®¯¯­¬¬­¯®­­­¨­­°°°«¬§©¬¬«¬ª®«¯²²°®©®²²±³´±­³¶³ª³®°°±±²´´²³³³±±±³±µµ´®µ¶¶´´´·¶µ±°°·µ¸¶¸³·´¶¶·¶·¹¹¸¹·ººº¸¸·¹º¹¹¶²¬¦ž•‰smgz}¡¸¿ÁÂÀÀ¿½º»»º¸¼½¼¸¾½¿Á¿½½½ÂÀÁ»½¹¿½ÁºÀ¿½¼¾½¿ÀÀÁÀ¾¿ÀÂÃÂÀÄÆÆÄÄÅÇÆÄ¿ÈÆÄÁÅÄÅÆÈÅÄÅÉÉÉÂÇÇÇÃÇÅÇÅËÌÊÅÊÄÌÊÈËÊÉÊÊËËÏÍÍÌÎÍÐÐyxyyx|{zyyyyvwxy{{{{||yz|~|}z|}~~}|}~}{~}|}~}€~‚€€€ƒƒƒƒ‚€€€~ƒ‚‚ƒƒƒƒ€~ƒ……„‚€ƒ„„ƒ‡ƒƒ……ƒƒƒƒ‚‚„€‚„„„……ƒƒ‚††‡††‡‡†„…†…†††ˆ‡†…‡‰ˆ†‡‰‰‹‰†…‰‰Š‹‹Šˆ†ŠŒ‹Š‡ˆ‰Š‹ŒŠ‰‰ŠŒ‹ŒŽŠŽŽŽŽŽŽŽ‘‘ŽŽŽ’“’‘‘‘‘‘ŠŽ‘””“”“‘‘‘’”––•–—”‘‘”•–•”“”•–˜—–”–——™ššš˜–—˜›œ™——˜™š—•”–—™™™œžžœœ›šš˜˜œžœž›™š››šš˜™šœœœœŸŸžŸ¡ žŸŸŸ  ŸŸ ¡¡ŸŸ¢¥¥£¡¡£¤£££¤¤¤¤¥£¤¦§¥¢¥¦¤£Ÿ¤¤¦§¨©¨¦¦¥¤¤¥¨ª¨¨©ªª«©§§ª­­¬««ª¨¨©ª«­­ª¬¯®­¬«¬¬©ª­®­­¬¬­­¬­­­­­®®¯±±°­¬¬­­­ª«®±°°¯¯¯­­¯°°±²°°³µ³³²®°²³²³¶µ´²´µµ´µ´´´³²®´¶·¸¶µµ´²´µ¶¶¹º¸··¶·¶¶¶¶¶¸¸¸º»ºººº¹··¶¶¹¼½¼¼º´« •‘–¢²ÀÁ¿¿À¿½»¹¹»»¸¼¼¼¾¾½À¿º½ÁÂÂÿ¿ÀÁÂÁÀÁ¿ÀÀ¿½»¼ÁÀ¼ÁÃÃÂÁÂÄÈÇÆÆÆÇÆÄÆÇÆÄÅÅÄÅÇÇÇÆÆÈÉÇÁÆÉÇÄÈÈÈÇÉÍËÆÊÌËÊÉËÌÎÍÉÍÐÏÏÌËËÌÏÑzy{xz{|{{z{zxwxy{|{z||{z}~|{|~~|~€}|~~~~}}~}|{ƒ„‚€€‚‚ƒ~‚‚€€€‚ƒ„‚€„…ƒ}ƒ„‚…††‡ˆ†‚ƒ„…„„…„ƒƒ€ƒ‚ƒ‚„…†‡…ƒ††‡………†‡ˆˆ††‰‰†ƒ‡Š‰…‡ˆŠŠŠ„…‰‰ˆ‹Š‰ˆŠ‹ŒŒ‹Šˆ‡‡ˆ‹‹‰Œ‰Œ‹ŽŠ‹ŽŽ‹ŽŽŽŽ‘‘Ž’‘‘‘’’‘‘••”“–—”‘‘””’’’”•••”’”––’‘”•–“——––—•—™™™˜˜™™››šš™”š›˜•–˜™™™™›œžž—˜˜™™˜›œœžŸ›œ™™˜›œ›œœ™žŸŸŸ ¢ œžžŸŸŸ š›œ¢Ÿ¡ŸŸ ¡œ££¤¡££¤££ ¥¥¤¤¥£¢¡£¤£¢¤¥§©§¦§§¥¤§£§©¬¬©¦©§§§©¨¦§ª«©¦¦§§§©©ª§¬««®®¨§¦¬ªª«¬­®¯­¨­¬­¬««¯±°°±°³ª­­­°¯ª«©°°°¬¬®¯«®­°«°¯°°³­´·´¯²´´³³³µ±³µµ²¶¶´²³´²¯³´¶··¯´²²µ¶´´·»¸¸····´µ¶¶¶·¸º»¸¶¶¶¸¸¸µµ´¼½¾½¼¹¹³²²¶º¾ÂÀ»»º»»»¹ºº»¹»·¾Á¿º¿¿½º»¼ÀÁÂÃÁ¾ÁÁÃÀÁºÀ½¾ÀÁºÀýÂÄÄÁ¿¿ÃÆÆÅÇÃÇÇÄÅÆÆÆÇÈÂÆÇÇÀÇÆÅÄÆÀÇÊÈÄÉÊÉÇÊËÍÈÊÌÊÆÌÎÍÌÌÈÏÏÐÐÍÇÍÇÐÏvz|}{{|}|{{{yz{{z{{}}|||}||~~}}~}|€~~{|~€€|}}}ƒ„‚€|‚€‚ƒ€}€‚‚‚ƒ‚~~}}~ƒ„ƒ€€ƒ……‚„„€…†††ˆ†ƒ„…ƒ…†…„„ƒ„…„„„†‡……†ˆ‰†ƒ†††‰‰‡†‰Š‡‡‰‹‰‡‡ˆŠ‰Š‰ŠŒ‹‰Š‰‰ŠŠ‹‹‹ŠŠˆ‡„‡ŒŽ‹‹‹‹‹ŽŽŒŒŒŒŒ‹ŒŒŒŽŽ‘’’’’““““’““““““–˜•’“–•’’’“’˜—”’•••””••–––—–––””—™™—˜˜š™˜™œš•šš•˜œ›™™š›œ›››˜——š›™šœ›šœž žŸ›œžžŸ ŸŸŸŸ Ÿ¡œœžžœž¡¡ŸžŸ¡£¤£¡ ŸŸ¡£¥£¡¡¢¡¡Ÿ£¥¥¥¥¥£¡¡£¥¥£¥¥©ª¨¥¤§¤¦©©ª«¨ª©©©§¨¨¨©¦¥¦§¦¨©ªª©©©ª«¬«©«¬¬«¬¬­¬¬­¯¯¯­«ª«¬­­¬±³²±±³²°­¬®°°¯®¯°±°¯«®¯®®¯¯¯¯±²±±°³·¶±³´´³²³²°³µ³³µ¶³±´´³°±±³¶´¯±²²³µµµ·¹º¸·¶¶·µ¶¸·µ´¸º¹·µ¶´·¹¹¹µ´º¼¼¼º¼»º½ÂÃÃÃÁ¿º¶º»¼¼¼¼½¼¸º¼¿À¾¼¾¼º»¼½¿¿¿ÂÁÀÁÃÄÄÁÁÀÀ¿ÀÂÅÄÄÄÄÀÂÃÁÄÿÃÄÆÅÄÆÇÃÃÆÈÅÆÈÅÅÆÅÅÆÆÅÅÆÆÈËÊÈÉÉÉÈÊËÌÊÈÉÊÈÌÎÌËÌÌÎÐÐÏÍÏÏÑÏÍxz~||{{||zz{zzz{zz|~~}zyz{|}~~}|}{~}}~~~~}{‚€~}}}~|‚€€€‚~‚‚‚‚~~€‚……ƒ€‚…†‚‚ƒ„ƒ…„„„„……ƒ‚ƒ††„„…„ƒ††…†††„†‡ˆ††…„ƒˆˆˆ‰Š‰‰‡‰‰‡ƒ…†‰‰‰ˆŒ‹‹ˆˆˆŠŠŠ‰ˆ‡‰Šˆ‡‡‡ˆˆ‹Š‹ŒŒ‡ŒŠŠ‹ŽŽŒŒŒ‘ŽŽ’ސ’’’””’’’’‘’Ž’””“••”“‘“”•—˜—••––——”—–—––——”–”–•˜š™—–—˜•šš•››–›œœ›š™œœš•—™™™œœš—š™˜—žŸ›œžžŸŸŸž  ›ŸŸŸ žŸ¡ž ¡¡Ÿ¢¢££¤¤£ ¢¤¥¤£Ÿžž ££¤¥¥¦¥¥¤¥¦¥¡¥¥¦¦§¨§¤¤¥§¨¨¨©«ª©©©©§ª«ª©§¥§¨ª««ª«¦©¦¨«¬¨¨©ªª¬«««¬­®°¯«­©ª¨­­®«°²¯­­­²±°­­¯°®°¯±±°°®¬°¬¬¬­®¯±²²³±²³³±´³µ°±­²°³²²²³´³²±°²¯²«²³°­°¯±±³¶·°¸¹·µµ±¹·µ··¶¶¸º¹·´´µ¶·¸¸¶µºµ¹ºº»»·½¿¾½Á¾¿¸º»»¸»¼½¿½·º»Àº½½¿»»»½¹ÀÀ¿¿ÀÀÀÁÅľÃÂÀ¾ÀÂÄÄÅÄÂÂÂÀÄÄÀÁÂÂŽÄÂÁÁÁÁÅÂÄÅÅÆÆÃÇÃÄÄÆÈÉÊËÌÊÅÇÈÊÈÌÌÊÅÌÊÉÊÍÍÍÍÎÎÐÎÐÏÎÍÎÌ{}}}||{{z{{{zzz{|}{}yxxz{|z~z{}~}|}~~~~}}~~€}~~}~~~~€€€~‚|€€€„…ƒ…†ƒ„†„‚ƒ……ƒƒƒ„„†‚††…‚„………†††……………†ƒ…†……„†‡ˆˆŠŒŠ‡‡ˆ†„…†ˆ‹‰ˆŒŒŠŠŠ‰‰‰ŠŠˆ‰‹Œ‹ŠŠŠ‹‹‹Š‰‹‹ŒŽŽŽŒ‹ŽŒ‹‘‘‘ŽŽŽ‘““‘‘‘’’‘’’’’”•‘““’‘“”•”•”‘“”•–––—––•–—˜˜˜–––—˜˜—•–”—š™—“–—˜š›š˜™›š››œœœ›œœœ›šš›œœœ›™™›››Ÿžš›œœ™žŸžœŸŸžŸŸŸ¡¡ ŸŸ ¡¡¢£Ÿ¡¡££¤¥§¥¢ ¢¡Ÿ¢¦¦¤¤¦§§¥¤§©§¥¥§¦¥¥¥¦§¦¦¦¦¥©«­«ªª©¨§ª«ªª©¥§§©­«ªª«©¦¦©ªª©§ª¬«¨¨«­®«¯®®«©«¯°°®ª¯±­«¬¬°±²³²®¯°±±°°¯±°¯°±¯­¯°°°²²²³±³´´´µ´²²²±³µ··´´µµµ²°°¯²±±³±°±³³²²¶·¸·¶²µ´¶¹¸µ´´µ·¸¸·¶µ·¶´··µµµ¹·¸º¹»º·»½¼¾¾¾¼¼»»¹¹¹¼¾¿½»»½¿¿½¿¿¾½¼¾¿ÀÁ¾½¿ÁÁÁÁÁÀ¿ÃÂÀ¿¿¿ÂÄÅÄÿÀÂÁÁÀÁÃÄÄÄÅÄÀÂÃÄÃÅÅÆÇÇÇÇÇÇÅÇÈÇÆÉÌÉÄÈËÉÊËÌÊÊÍÍÌÌÍÍÎÎÍÎÏÏÏÍÊÌÎÍ|~}wz{{wwx}zz{|}~}||{x|||}|{{|}|~}~€€|||~~~}~€€€}‚€‚‚‚‚‚‚‚‚€€€‚‚‚‚„‚‚‚‚ƒ…ƒ„……ƒƒ„……ƒƒƒ„†„ƒ„ƒ……‚†‡†ƒ‡ˆ‡…„…††„ƒ‡‡…„„…‡‡‡‰‹…‡‡‡††ˆ‰†‰‰‹‡‰‰‰ŠŠ…‹‹‰‰‹‹Š…‹ŒŒŒ‹‹ŠŠ‹ŽŒŽŒŒŠ‰Ž‘ŒŽŽ“Ž‘’’’’‘‘”“‘Ž‘’”‘‘’’””””““’’’“’–—–‘‘•––—˜˜——™™˜–—•••™™™˜—–™™›—˜™œš›˜šœœžœ™›œ›››™šœ››žš›™žžŸ œœœ™žŸŸ¡  žŸ¡¡¡¢££¢¡£œ¥¤¡Ÿ¢¤££¥§¦¤¤¥¦¦¤¡¦¦¨§¦¥¥¤££¤¦§§§£§ª«ª©¥§©©§«ª©¦¨¥¨£©¬«¦©¨©¦§©ªªª¦«®®©©ª­®«¯°­­©¬¯²®¬ª¯¯¬«ªª°¬±³²®¯¯°±±«°²²°°¯°®°²³²²«±±²²´µ´´´­´³²²¶¹¹²²´´³´±±®²°¯°±°³´µ°³µµ´¶³µ¶µ¶·µ¶¶µ­¸µ·¶·¶¸¶µ··µ´´¸¸º¼¼¼¹µ¹¼»½½¶¼»½¹¸¸¼¼¿¸¼¶¼¾À½½¾À»¼¼¿À¿½½¼¿½ÁÀÀ½¾¾Ã¿¾¼ÁÂÃÂÃÃÃÀ¾¿ÁÂÁ½ÁÄÃÂÅÆÅÀÃÃÃÂÀ¿ÆÇÇÇÇÅÅÆÈÄÄÃÄÆÉÅÊÈÉÇËÇÉÊÍÍËÌËËÎÍÌÌÎÏÏÇÌÍÎÍy}}{wz{zy{|yz|}~{€~~}}|||||}}||}~~}~€{|}€‚‚€}}}~~€|‚‚‚‚~€‚‚‚‚‚€ƒ‚€€€€ƒ‚ƒ„ƒƒ„‚……„„„…†„ƒƒ………†‚„†…†…„……„†ˆ‡‡†‡†„ƒ„…†††‡ˆ‡††„†‡‡‡Š‰ˆˆˆˆˆ‹ŠˆŠŒ‹†‡‡ˆ‹Šˆ‹‹‹‹‹‹ˆŠ‹ŒŠ‰‹‹‰‰ŒŽŽŽŽŽŒŒŒ‘‘Ž‘Ž‘““‘’’‘‘‘’’’Ž‹“––––•”””’’’’“’“•••–•““’“•——˜””–——˜˜—–—™››™˜——™œœœœ›šš›˜›œœ˜œžšš››š™››œš›œœœœŸžŸŸž  žžžŸŸžŸ¡¡ ŸŸ ¢ ¢££¤£¢¢¡££ ¢££¥¥¦¤£¤¥¦¦§¥¤¤¥¦¨¥£¥¤¥¤¤£¥¨§¨¨©¨§§¦¤¨©©©©¨§¨¨¨¨¨ªªª©ª©©¨««««ª«­®­«©¬®«¯±±¯«¬­°²¯«¯¯ª¯¯¯°­¯°°±¯®¯±±°±²²±±²°®°³³³³´²±°°²´³³³³²²²²¶¹¸²±³´´³³³³²¯±²±°³¶µ´´´´²´¶·¹¸¶´³µ·¶µ¶¸··¸º¹¶²·¸µ··¶·º½¾¾ºµ¸¹¹ºº¶¼ÀÀ¾»º½À¿½»¼¼¾¾¿¿¿¾º»¾¿¿¾»½¾¾¿¿ÀÀÀÂÄľ¾ÁÄÄÄÁÀÁÁ¿¿ÁÂÁÀÃÆÄÄÄÄÄÂÅÃÅÃÂÂÄÅÆÇÈÅÇÈÈÇÇÈÈÊÊËÊÊÊÌËÊÉËÌËËÎÍÌÍÍËÊÌÏÏÍÌÍÐÑzz|zxx{{z{{{||}}}{~~}z}}}z{~~||||~~~~}}||~~}~~€€€€‚‚‚‚‚€€‚‚€‚‚„ƒ‚‚ƒƒ„~ƒ„…††…„„„ƒ„‚ƒ„„†„„…„ƒƒ……„„ƒ„…†‡‡…€…ƒ‡…†ˆˆ‡ˆ……ƒ††‡ˆˆˆˆˆŠ‹Š‰‹ŒŠ†‡‡ˆ‰ŠˆŒŒ‹Œ‹‹ˆ‰Š‰ˆ‹Ž‹ŒŒŽŽ‘Ž‘’‘‘“””’Ž‘’‘Œ’“Ž’“““’‹‘•–––•‘“’“”•”–•Ž•–”“‘‘•——”•’“’–———–—˜˜™™™’˜–œšššš”˜šœ›šš››œšš›œš›œ›–š˜œŸœŸŸžŸ žžžžŸ¡¡žžŸ¡›¡Ÿ¡¢£ ¡¡ ¢¡ Ÿ¤£¢££££££ž£¤¦¢¦§¦¡£¢¥¦¦¥¦¦¨¤¦¦§¤©¦¦§¦¤§§¥¤¨¥¨§§§ª§©¨©ª©§§¤©©¬­­¬¬¬¬¬¯ª©¨¬«®±²¬¯ªªª¯°®«®¯¯¯¯±±­®¯°©­«¯±²­°²±¬±³±®±²³®´µµ­°¯°±²¯±°°²³±´µµ±²µµ±¯¯²±²°³´´³µ±±±´µ´²³´¸¸·²³±¶··²´¶µµ·¶¹¸·¶¶µ·¸·°»¾¾½»·¸¸¸·¸µ½À¿¼¼·½¸Á½½¸¼»¿»¿¼½¹»¸ÁÀ¾»¿½¿½¿ÂÁ¿ÃÄÅžÁ¿Ä¿À»ÀÀÁÂÂÁÄÅÅÁÁÁÂÂÅÄÃÂÅÆÆÀÇÄÅÆÉÄËÈÉÉËÇÌËÊÆËÂËÆÉÊËÊÍÏÏËÎÌÊÇÌÐÐÊÊÍÒÒ{|{yx{{z{||{}}|~}}}}|||}||y€|z{}~~}{{|}~~~}€~}~€~€‚ƒ„~~~~€‚‚„„„ƒ€ƒƒƒ„ƒƒ„…†…ƒƒ‚ƒ€ƒƒ…„…‡…„„„ƒ„„„„…ƒ€„„„‡‰‡†††ˆˆ‰ŠŠŠ‰‡„„…†‡‡…ˆ‡‡‰ŠŠŠŒŒ‡†‡ˆ†‰‹Œ‹ŒŒŒ‹Ž‰‰Š‹Š‡†ŒŽŽŽŽ‘‘ŽŽ‘‘‘““”””’‘’’‘’’‘‘“”””’Œ‘””“”•”““”””––••””••”“‘•–––”•——–•˜—–’—••˜›š˜˜—›œ›š™–™œžœ›šššššš›œœœœ˜™›ž—œœžŸŸ›œžŸ ¢ Ÿ Ÿ ¡¡ ¢££ ¡¡¡¢¢¢¡¤¦¥¤¤££¢¡¡£¥¨¦¦§¦¥¥¥¤¥¥¥¨©§©¨§§§§¨¨¦¦§§§¥¥¨¨¤§ª©¨ª­ª¨ª«ª¨¦¤©¬­®©«­®®­¯®«ª«­¯°°¯®­­®¬ª©«¬®¯°°°°±°¯¯°¯®°³±«°²°¯±´²¯²³²²´¶³±±°±²±°¯¯´¶³²²²³³³¶µ³±°°°²µ´´´µ´´³³³µ´³µ·¸··¶µ´¸¸·µµ¸µ³´´¸¹¸µµµµ¸¹º»¾¾½»··¸¹¹¹»½¿½ºº¼½¿¿À¾¼½»¾À¿¾½¹¼ÀÁÁ¾¿ÀÀ¾½ÀÄÁÀÀÃÆÈÆÄÿÃÅÄÃÁÁÂÃÃÂÄÃÄÃÅÆÅÁÃÁÄÅÃÂÆÈÈÈÆÇÊÌËÌÌÍÌÌÌÍËÊÈÊÌÍÊÉËÍÌÌÎÏÏÏÎÏÎÎÍÏÎÏÏÑÑÒz{{xzzyz}~{zz{|~||{||{||}~~xz{~}}}}}~~~}{€€~€€€€‚ƒƒ€~‚€……ƒ‚„ƒƒ……„ƒ‚‚‚„„„‚€ƒ‚„…†††…†…„ƒ††…††ƒ„…ƒ€ˆŠ‡‡‡†‰Š‹‹‰ˆˆ…„…‡ˆ‰‰ˆˆ‡‡ˆ‡ˆŠŒ‹‰††‡ˆŠŒŒŠŠ‹‡‹‹Œ‡‰ŽŠ‹ŒŒŽ‹‘‘‘Œ’”’‘‘’“‘‘‘Ž‘’“’‘’“““•“••““”“–””””——”•”•–—“”“•–™™™™˜–’—˜—™›š•••™ž™››šš››š››œ››››˜›™š›žŸ››œ™ššžŸŸœœœ›šŸŸ Ÿ¡ ŸŸ¡ž¡ ¢ž¡££Ÿ¢¢¡¤¦§¥££¢££¤¦¥¦¥¨¦¨©¨¥§¢¥§¨§¦¥§¦¦¢§¨¦¤§©§¡¦©ª¤¨©«£«­«©«ª«ª©¦¬¬­«©ª«¨¬­®§«ª«­­«®¬®®®­­¨«­­¬±²±¬­­±®±±®®°²°­°¯°¯±´³°³®²²´¯®¯¯®²³³­±¯´¶²­°®±±²³³±´²±¯³²²­µµ´°²±³­²´¶±¸¹¹¸¶´º»¹¶¶¸·²µµ··¶³´´¶¸¹¶¹¸»¼¹µ¸¹»»º¹½¿¾µº¼½½½¾½½¾º¹º¾¾¾º¾ÁÀÀ¿¿ÁÁ¿½ÁÃÁ¼ÁÃÆ¾ÄÆÄ¾ÄÄÄÃÃÃÃÃÃÃÂÃÄÃÄÆÇÂÆÂÆÆÈÆÈÃÉÄÈÈÊÌËÊÍËËÆÍÎÍÆÉÈÍÎÌÊÍÍÌËÍÌÌÌÎÇÌËÍÇÎÑÓÏÏÏxzzy{yyz~{zyz|}z{z{w{|~~}{{|~~}}|~~~~~~~~‚€~}~~‚ƒ|€‚‚‚ƒ„…„ƒƒ‚…ƒƒ‚€ƒƒƒ„„„ƒƒ„‚€‚†††€…‡‡†††‡†‡…ƒ…†……ˆˆ„‡†…ˆŠ‹Š…………ƒ‡ŠŠŠŠˆˆˆ‰‰‡‡‰ŠŠŠˆ…‡ˆŠŒ‹Š‰‹ŒŒŒ‹‹‹‹Œ‹Š‹ˆŒ’Ž‹ŒŽ‘‘’‘‘“‘‘‘““’’“’“’Ž“““““•––•““”•———––˜—––––—™˜“‘”–—™šš˜—“™œœšš—“”–˜žž›˜›œ›š›œš›››ž›šš›žžžž›šž   Ÿœ™›žŸŸ ¡¡  ¢¢¡¢¢¡¡££¢¢¡ £¦§¥£¢¢¢££¤¥£¥¦¦§©¬©¦¦§¦¥§©§¦§©¦ ¦¨ª©¨©§¦¨«ª¨§§ª¬«¬«ª«­¬««¬¬¬«©©ª©©ª¬«ªª«ªª««¬«ª¬­¯­­¯°®­±±±°®­¯°±²­±±±²³±®°²±±±°±²±²²±°±°®±³³³²²²³±¯¯¯°±±³³³´³±µ´±°±µ¸µ³µ·µ±²µ¶·¸º¸·µ²¹»¹¹¸¶¸º¸¶µ´²²µ·µ··¸¸¶·¹··»¾¼»¹¹»¼¼¼¼¼¹ººº¸¼½¼»»½¿¿º½À¿¾¿¾ÁÁ¾¿ÁÂÀÁÃÅÃÁÂÅÅÅÅÇÆÅÅÅÅÂÃÂÃÁÃÆÆÈÈÈÈÈÈÉÉÈÇÈÇÄÉÊÊËÌÍÌÍÊÈÊÍÌÌÊÈËËÌÎÍÌÌÊËÌÌÎÌÌÌÍÌËÍÑÒÒÒÒzxxy{xyz|~}||z|}||}{zz{|||}}||~~~€{{{~~‚‚}|}€€}}}~ƒƒ€}|‚‚ƒ„„…~‚‚ƒ‡‡ƒ€ƒ‚ƒ‚‚‚ƒƒ„‚ƒ‚„„††…„…ƒ†…†……‚ƒ„†………††ˆ‡†……‡ˆˆ‡‡‡‡ˆ‰ŠŠ‰ˆˆˆŠ†‰‰Š‰ˆ‡Š‹Š‰ˆ‡ŠŠŠ‰ŒŒŒŒ‹ˆ‹ŠŒ‹‹‹ŽŽ‘‘‘‘’’“‘Ž“““”““’’‘‘‘’““’“’•••“”•–••–––—•—”———˜™–“”••–™š˜˜™››—š”˜•˜šœšŸžœ™—ž›—›››™™šž›››šœŸŸœŸžšœžœœŸ  ž  ¡£¢¢¢¢¢££¢££ ¡£¤¥¤¤¤¡¡ ¢Ÿ¥¢¥¢¤¥©©¨§§§§¦§¨§¡¥¥§¡§¨­¬ª¨©©©§©ª¨¤«­¬¨«ª«­®¬ªª«¦ª¨«­­«ª©ª«««¬¬¬¬®©©©­«°±±±¯°°±¯­­­¬¬¯±²±±¯²³°«¯­¯¯­­°¯®­³´²±±°²³´´²°°°°¯°³³®³µµ´µ³³¶¶²³´·¶µ´µ¶¶µ¶¶µµ¸´¶±´±¶·¸²¸¸¹º¹²µµ¶²¸»¹²·ººµ¶µµµ¼¼»³¹ºº¹¸º¼¼º¸»¼»¹½¾¾¼¾¿¿¹¼½¿½¾¿ÀÀ¾ºÀ¼ÀÀÁÀ½ÂÄÆÆÇÆÆÇÆÅÄÀÃÀÄÃÃÅÇÇÆÇÆÅÈÄÉÇÆ¿ÆÄÊÊÇÅÊÅÌÇÊÇÉËÊÊËÇÊÊÍÏÎÌËÊÍÍÎÌËËÏÑÐÉÎÍÏÐÐÐzz{{{zyzz|~}|zw}||||{{z||||}|{z€~y€{|}}~}~€‚‚ƒ‚‚~~~€ƒ„ƒ‚€‚‚„„…„‚‚ƒ‡‰„ƒƒƒƒ„€~}„ƒ‚„†………‡…ƒƒ„„ƒ…„„…†‡†„…†…ˆˆ……†‡‡‡‡ˆˆˆ‰Šˆˆˆ†‡Š‹Š‰‰ŠŠ‰‰‹‹Š‹Š‰‰‰‰‹ŒŒŒŒ‰Š‹ŒŽŽŠŽŒŠŽŒ’’Ž’’‘‘‘‘‘Ž’‘“”’’“““’“‘‘“’““”“”•–˜—•”“’”—˜——˜˜–––”““””••–˜—™››š–˜™™šššœž›™œœš˜œž›œœœ›™™šœœš›œœ›  žžœœœ™ŸœžŸž¢ ŸŸž ¡¢ Ÿ¡¡¢¢¢££¢¡ ¢£¢ ¢£¢¡¢¢¤£¡£¤¤¦§§§§¦§¨¥¤¥¥¦¦¦¥¡¨¬­­©§¨ª¨¨©«ªª¬¯­ªªªª«¬«©ª©ªª¨«¯®«««­­¬­­¬¬­¯°­¬®±³´®¯°±¯°°®¯¯®®­®°¯­¯±±±°°²²­®°±²³´µ¶²²³²°´µ´³±³³±¯±¶¶µµ¸··¶´´¶¶¶¶¸¶µ³²´¶··¶·¶µµ´´¶´±µ¶·±¸º¸····¸¹º»½º³¸»»º¸º¹¹º»¹·¸»¼¼º¸¹»¼»¼¿¼·¼¾¿À¾½½½¼¼¾¾¾¿¾¾½½¾ÀÁÄÃÂÁÂÂÃÅÅÃÄÆÇÆÅÃÂÂÄÅÄÄÇÇÆÅÄÄÄÆÇÈÈÅÄÇÆÊÉÆÅÈËÊÊÉÈÈËÌËÌËÈÊÌÎÎÏÎÍÍÎÏÌÌÌÏÑÑÏÎÎÍÍÏÐyz{z{|z{{z}}|z|~|{{|z}~~}}{|}}}}|}}€€~yƒƒ‚‚ƒƒƒ‚‚‚ƒ……ƒ~‚‚‚€‚ƒ„ƒ‚‚‚…‡†…„ƒ…ƒ€ƒ„……„‚ƒ‚„ƒ…„„€ƒ„„ƒ†‡‡‡‡‡†…†…‡†…ƒ‡†‡††…„ƒ‡‰‰†ˆ†Š‹Š‰ŠˆŠ‹Š‰‹ŠŠ‡Œˆˆ‰ˆ‹Œ‰ŠŠŠ‹Š‹ŽŽŽŽŽŽŽ”–’ŽŽŽ‘‘’’‘‘’‘’’‘’”’‘’’“”‘””••””•”“•˜™™™˜––””“”–––——––˜š›˜———˜›››š›™™™—›œ›š›œŸŸœž›˜›ššœ™œž  ž›››Ÿ¡ ŸŸ ¢£¢žŸ Ÿ Ÿ ¢£££¤£ ¡žžŸ££¡ž¢¢¢¡¤¢¡¢£¡¥¦§§¦¥¦¡©¥¥¡¥§¨§¤Ÿ§ª«¨¨¥©©©ª«¬¬ª«®­«ªªª¥«©ªª©ª¬©«­­©«¬­®®­®­­¯¯¯¯¯¯¯²±¯¬°²±­°¯°±¯­®­¯¬­¬°±±±²³´­±²±²´³´´´´´´´´³³µ³µ®²²³µ¶±·µ¸¹¶²³²¶¶¶±µ³²­³··µ¶±²±´¯µµ·³¶´¸±¸¶·³·¸»ºº¶¼½ºµº¹»µ¹¹¹·¸¸¸··¸¼¼»µ¶·º¼¼½¼·½¼¿¼»ºº¼¾¼½¸¾¾¼¹½ºÀÀÃÃþÂÀÃÁÄÄÃÀÆÆÆÄûÃÅÅÄÇÉÈÄÅÄÅÃÄÅÇÉÇÄÆÈÌÈÈÆÉÉÉÉÊÉÊËÎÌÍÌÉÇÌÌÎÎÏÍËÊÎÌËÊÏÎÏÏÎÊËÌÌËxz|z|}{|yzz{|~~~}~~}|{|}~~}|~~~|{}~€~~~€‚‚€~‚ƒƒ„„ƒƒ„…ƒ‚~‚ƒƒ‚„…‚‚}ƒ……„„…„ƒƒ„…ƒ…„ƒ„„ƒ„„…„†…‚„…„…†ˆ‡……††‡‡‡…„…‡‡‡‡ˆ†„ƒƒ†‰‰‡‡‡ŠŠˆˆ‰‰Š‹‰Š‹ŠŠ‹‹ˆ‰‰‹ŒŠ‡ŠŠ‹‹ŠŒŽŽŒŒŠŒŽŒŒŒŒŒ‰Ž’••‘ŽŽŽ‘‘’‘’‘“‘’“’’’’•–•’““””•”“””•––”“–—˜˜˜—–––•”—–—————˜™ššš™˜™™››š›š˜™œ—š›š›ž¡¡¡ Ÿœ›œ›ššœžœœžŸŸšœžŸžŸ  ¡¡ž¡¢£¢ ¡¢¢  ¢¢£¤¥¦¦£ ¡¢žžŸ¤£ ¢££¤¤¥¥¥¡£¤¥§§¥¤¥§¨©§¦¦¨¨¥£¤§¨©ªªªªª«ª«¬«ª©­®®®­¬«ª©¬ª©¬¬©ª««ª¬­­­¬«­®¯°°¯¯°¯®®®°±±³³±¯­±±®®¯°°®®¯¯°²±²´´µ´´¶¶´±´²³µ´µ¶µ±³µ´µ´´´±´´µ´´µ·¶²µ¶¶·¶´³´´³³·¶µµ¶·¹¶´µ¸¸¸·¸¸¸·¶¶µµ¶º¼»»»º¸¸»¼»¹¸¸¸·º¼¹¼»º¹ºº·¸¹¹»»»¼¾¾¿¾¾¾¾½¾¾¾¾¾¾¾½º½ÀÁÁÁ¿ÁÁÃÄÂÃÂÂÄÆÄÄÄÄÅÅÅÄÆÉÈÅÅÅÅÅÅÇÅÉÉÈÈËÌËÊÊÈÇÇÊËÉÊÍÏÎÍÌÊÉÊÍÎÎÎÍÌÊÍËÎÏÎÎÎÏÏÐÏÑÑÐzz{zzyz}|yyy{}}z~~||{|{~}~€{~€|x€€€~~€‚‚}€‚‚‚ƒƒ„„‚‚‚‚ƒƒ‚‚€€„„‚€€€„ƒ‚‚‚„…†……„ƒƒƒ‚…††……†‡‡…ƒ†‡†……‡††…‚…†‡‡…‚†‡‡‡‡‡‡„…ƒ†ˆ‰‡ˆ†‰‰ˆˆ‰‰Š‹‰ˆ‹Œ‹Œ‹‹‹‹Œ‹‹ŠˆŒ‹ŒŒŠŒŒ‹‡ŽŠŒ‹ŽŒ’‘“‘‘‘’“’’’““’’““’’“•–•““”•‘•”“•—”””–•••–•—”•–—•——™–—˜˜˜˜™™——š™–š˜™™™•™™›œ—šš™™ž Ÿžžšœ™œ•ššœœœžŸ ¡¡Ÿ›Ÿ ¡ ¡Ÿ  ¡¤£¡¢£¢ž¢¥¦¤¤ž£¤¤£¤¦¥¡ ¡¥¤¤¥¤¤¤¤¤¤¨§¤¤¤¥§¡©¥¨©©¥¤£¨§ª¬ªª«ªª¬­««ª«¬­®®­­ª«¨¬¬­¬«ªª¨©©¬­¬©©ª¬­­®®ª®°°¯®°±¯±±²°¯­²±®¬­­±°¯¯°°²¯²´µ±´µ¶µ²±±°³®´´µ´°±²²´´´±²³´²±±±´´±µ¶¶´¶®µ²¶¶¶·¶³¶¶¶·¸²¶³··¸¶·²³µµ³µµ¹¼º¹¹···ººº¹¶µ·¸¹¼½½»¸¸¸º·¸¸¸·¾¼½½¿¼¾»ÀÀ¿¸¾»¾¿¾¿¾¼¿ÁÁ½Á¾¿¿¿¾ÂÁÁ¾ÃÁÁÂÄ¿ÄÃÄÄÅÄÅÆÈÅÇÅÆÁÅÇÊÊÉÉÈÉËÇÉÆÇÆÈÊÉÉËÎÏÍÌÉÈÈÈÈÉÇÌÍÍÊÊÉÏÏÍÈÍÐÑÐÐÈÒÎ{zyyxwy~~}|{{z{~}~~}|||}€€~~€€~|{}}}~€€~€‚‚‚ƒƒƒ‚‚‚ƒ„ƒ‚€ƒ‚‚ƒƒ‚ƒ„‚‚‚‚ƒ…†…„ƒƒ‚‚‚‚†‡…ƒ†ˆˆ„†ˆŠ‡……†„†…‚ƒ†‡††‡ˆ‡†††‡‡…††ˆˆ†ˆˆˆŠ‰…‡ˆŠ‹‹‡‡‹ŒŒ‹ŠŒ‹ŒŒ‹ˆ‹ŒŒŒŒŒŒŽŽ’‘““’‘Ž’’‘‘“““”“““’’““’’“””””•••••–”’“–—–•••——––––—“•—™šš™–—˜™™˜˜”•–š˜—˜˜˜™˜—™›ž›››™™œžššœœœž›™šœžœžŸŸŸŸ ¡žŸ Ÿ  Ÿ Ÿ ££¢¢£¡žŸ¤¥¥¥¦¥¥¥¥¦§¥£¢££¤¤¤¡£¥¦£¤¦§¥¥¦¨¨ª¨§§©ª§¦¦¨ª««ª«ª©ª­­¬«««ª«¬¬¬¬­«§¬®¬©©«©©©©¬­¬¨ª¬ª«¬¬¬­®°°¯¬±°®±²±¯¯°±³±®­«±²¯¯²³²¯¯±²³²³³²±±±¯±´´´³²°¯±±²´³±²´µ³³´µ´¶¶¶·µ³´µ¶·¶¶µ¶¸¸·µµ¶·¶¶¶·¹¸·µ°µ¶¶¶¶¶¸»º¸¹¶·¸¸··¹·´··¶º½»¹···¹ººº»¾¾¾¿½½½¿ÁÁÀ¾½¾¿¾¾¿À¾½¾À¿¾Â¾¼À½ÀÂÀÀÂÅÅÅþÂÄÅÇÇÇÆÅÈÈÇÆÇÈÇÉÊÊÉÉÇÇÉÉÉÉÉÊËÉÌÎÎÏÍËËÉÊÈÊÊÉÊËÍÍÍËÌÎÏÍÌÍÐÐÐÏÏÑÓ|{y{zz|~z}|}~~||{~~}}|{|~€€~}}}~~~€€€€€~€|€€‚‚‚ƒ„ƒƒƒƒ……‚ƒ‚‚„„ƒƒƒ€‚‚‚ƒ‚„‚ƒ‚‚‚„ƒ†‡………†‡…†‡ˆ……‡‡†……‚„††ƒ†ˆˆ…„„‡ˆ‰‡†„‰ˆˆ‰‰ˆˆ‡‰‰‰Š‹‰ˆˆ‹ŒŒ‹ŽŽŠ‹‹ŒŠŒ‰‹Š‹‹ŽŒŠŽŽŒ‘’‘““’Ž’‘‘’’““’’“‘’“’’’’“““““”“––”‘‘‘–—–””•–––”–—”–——™™—”—™š›š˜–•˜š˜—˜˜™™™˜˜š›œ›ššžš™™›š™œžžœ›šœžž˜š››Ÿ  žžŸ ¢¢¢¡  £¡Ÿ›¢¡¢Ÿ   £¤¥¦£¥¥¥ ¦¥¤¡££¤£¢Ÿ¤¦¨¨¦££¢¦¢¦§¨§©¢¦¦§§¨¥¨©«©««ª©ªªª¨¦¦«¬«©¬­«¤­¨®­ª¥§¨«¬¬«¬¬­©­®®­­¬®¯®¨°¯®°±°³³±°¯­°±³°®ª±³±¯²³³««¬¬¬²³²¯°²±¯°²³¯°°¯¯²³´¯³²³´·µ¶¹¸µ´µ·µ³±²³·¸µ¯µµ¸¸¸µµµ¶²¶´µ¶¸·µ²µ··¸¹²·¸¹¶º¶¶¶¶¶·¸¹¶¸´´·¼¼¼º¸¶¹¼¼¹¼º¾¾¿¼»º¿À¿À¿¿½¾º¿ÂÁ¼½¸¾½ÁÁ¾¹Á¾¿À½ÄÅÄÄÅ¿¾¿ÆÇÇÈÈÄÅÆÆÂÇÅÇÄÅÅÇÈÇÈÈÉÉÈËÎÍÉÍÐÏÌÊÉÊÈÉÉÌÆÊÉÎÌÍËÊÊÏÎÏËÍËÏÍÐÌÑÑ~|z|}|}~~}~~|}|{z|}}~~}v€€~~|{~€€‚ƒ‚€‚„ƒ‚‚ƒ„„……„„ƒ„„……ƒ‚ƒ‚‚ƒƒƒ‚€ƒƒƒƒƒƒƒƒ……„„ƒ†‡†„…„„…††ƒ„†‡‡†„„…‡†ƒ„‡…†‡‡‰‹Š‰‡‡ˆˆˆŠ‰ˆ†‡‰Š‡Š‰ˆ‰Š‰‹‹‹‹ŽŽŽŽŒŽŒ‰Š‹ŒŒŒŽ‹‘”‘Ž‘’’’‘‹‘’’‘‘’“’’’‘’’’““’““‘’‘’““’“•––“’‘’–˜–•””””•””–”—––—˜–“–™››š™—”˜™–˜˜™™˜—˜˜˜™™˜›™—œš™˜›œ››œ›œžžžžžžžžœž¡¢¢Ÿšž¡¢¢    ¡¡Ÿ ¡¡¡ž¡¡£¤¥¥¥¤¥¥¥¥¥¤Ÿ£¤££ ž¤§©¨§§¦¥¥¦¤¥¥¦¨§§¨¨©©¨§¨ª««ªªª©§¦¦¦¤ª­«ª«¬ªª­®®¬©¨©¬¬­­­¬¬¬«¯±¯®®°®¯­©°°°°°²±¯°²¯¬°±²±°°±³±¯²µ²¬±³®®±³±¯³¶´¯ª¯±±±±¬®³´¶µµ¶´³¶·¹¹¸´µµ´´²²³´µ·µ³´µ´µ·¸·¶µ³´´¶·¸¹·¶·¸¹º¸·¹º¹ºº··¹¸ººº»»¹¸¹»»»¼¼»¹¼½¼º¼¾¾½¼¼»½¾½»¾ÂÂÁ¿¿¿¿ÁÂÀ¿¾¼¼ÀÁ½ÀÃÁ¿¿ÂÂÃÄÅÆÅÄÁÂÃÅÃÇÇÃÃÃÅÅÅÄÄÃÆÄÄÅÇÊÉÉÈÆËÎÌÉÌÍÍÌËÊÈÉÊÌÍÍÍÏÐÏÍÌÎÐÐÏÎÌËÍÏÏÏÏÐÐ|zx}~{||~||~€€}|{z|}}€~~~}€~}|€€€€ƒ‚‚‚„„‚ƒ„„„………ƒƒƒ„‚ƒ‚€‚ƒƒƒ‚‚„„ƒ„…„„ƒƒ„……‡…„ƒƒ………†‡„„…„ƒƒƒ†ˆ‡……††………‡ˆ‰‰‡‰†Š‰ˆˆˆ„‰‹‰…ˆ‰ˆƒŠ‹‹ŠŠŠ‰ˆŒŒŽŽŒ‹ŒŽŽŒŒŒŒ…ŒŽŽŽ‘’“‘’’Œ‘’’‘‘‘Ž’’’‘’’‘””“““‘““•••–——”“’’––•––””“”“–——–—–˜™–“–˜››˜˜™•˜˜˜˜™•™™˜“™˜˜˜—›š“šœœ›š›š˜˜˜œžžžžžŸ›žž¢¡Ÿšš›Ÿ¡žœž›Ÿ ŸŸŸŸ¡¡¢¥£¥¥¦£¦¦¥¥¤ ¥¥¥¢  ¡¡©ª¨¦¦¥¥¤¤¤¤¤§§¨¨¨©«©¨§ªªª©ª«©¢¨§¨¥ª§§¦ªªª©«¬¯«¬¬¬««ª«ª©©ª«®ª®«®ª®¬­©±±²²°©ª©°²°­®¯®®²²±­°¬¯²±­´´²°°°±°´·µ±®®°±±°®©³´¶·µ³´°¶¶µ²¶³³²±²µ¶¶±³¶·¶´²³´´°··¶±±³·¸º¹·µ··¹¸¸µº¹¸¹¸¶º»»¼¼»»»ººº¹¼¹»¸ºº¼½½·½º½¹º·¾¿À½¼¸ÁÁÁ½¿½¾½Á¿À¿¿»ÂÀÁÃÅ»À¾ÃÄÄÃÄÅÄÃÁ½Â¿ÃÄÄÄÄÄÄÄÅÃÅÃÄÄÄÄÈËËÊÆÅËÌÊÊÍËÊÉÍÈÈÈÈÈÏËÏÐÐÍËÊÐÎÓËÎÍÍÎÎÏÏÍÐÐwwx}~}}||zy~€~}{||~~{€}~~€€€€€€€€€€€€€‚‚ƒ€€‚„„ƒ‚‚„ƒƒ„„‚ƒ„ƒ„„ƒ„…„„†…ƒ‚„ƒƒ…‡††…„ƒ…††‡‡†…„‚€…‡‰ˆ‡‡†„††ˆŠ‹‰ˆ‡‡ˆ‰ˆ‰ˆ‡‰‹Š†‰‹ˆ‰Š‹‹‰ˆŠ‹‹‹‹ŒŽŒŠŒŒŒŽŽŽŽŽŒŒ‰ŽŒ‘‘’”“’‘‘‘“’““”“““”’“’““’–––•”–”’‘‘“””•–•””••–˜™–——™š—”–—™™’—™ššš™š™™š›™š™šš™˜œœšš›œ››ž™˜š›œœžŸœœœžŸ  ŸŸŸŸž¡Ÿ›  ž  žŸžŸ¡¡¢£¤¥¥¥¥¥¦£¥¤¤¥¤¤¤£¤¦§©«¨¥¤¤¢¢¦¨¨¨¨§©©¨©ªª§ª¬¬©¨©ªªª©ªªªªª©ªªªªª¬­¯¯¯¯ªª«©©ª«¬­®®¯­ª«©¬«®°°°°°¯°°°±³²²°¬°²³´±¯®­¬°°²³µ³±®°²²³µµ²¯®­°²³°¯´´´µ³²²³µ¸¶´²²²³µµ¶·¶´³³·¶´³³µ³¯µ·µ´µ¸¸¹¹¸····¸··¹·µ¶»¹¶¸º¹»½½ºº¹¸¸¸»»¹¹º¼¾¾¾¿½½¼¼ºº½ÁÁÁ¾ºÁÁÀÀ½»½ÀÀÀÀÀÁÂÁÁÂÄÄÄÂÂÃÅÅÅÅÅÄÃÀ¿Á¾ÃÆÇÆÆÅÃÇÇÆÆÈÈÈÈÈÉËÌËÇÈËÍÌÌÎÎÊÌÍÌÊÊÊËÍÎÎÏÍÍÌÍÏÒÑÑÎÍÎÏÏÎÍÌÐÐy{}}~~}z{{|}~||{{||||}{~}||}|~~~€€€‚‚€‚‚‚ƒ‚‚ƒ‚‚‚€…ƒ€‚ƒ„„‚‚€…………„ƒ‚…………„†ˆ‡†…„ˆˆ‡‡†ƒ…„ƒ„„†ˆ‰ˆ‡ˆ‡‡ˆˆˆ‰‰ˆ„‡ƒ†ˆ‰ˆˆ…‰‰Š…ˆ‹‹Š‹‰ŠˆˆŠŒŒŠˆ‹ŠŒŒŒˆ‹ŽŽˆŒŽŽŽŒŽˆ‰‹ŽŽ‘‘‘””’’““‘’‘’““”•‘“’’’’’“’”••‘’”•‘‘’’‘‘’’”“––˜™˜–—–™——•–––———™™š—››š˜š™››ššœ—™œœœ›šœ›œœœš™›››˜žœœ›œ››œŸ   ¡¡¡¡¡  ŸŸ  Ÿ¡¡¡¡ ž¡ ¡£¤¤¤¤£ ££¥¤£ž¤¤¤¢¡¢¨¨¨¤¦£¦¥¤£§©©¨ª©ª¦§§¨§¨«¬§©©«««¨ª««¨«¥ª««¨¨©­®®­®­ª««ªª¥ª«®¯®««©ª¨­¬®®®¬­ª®°³²°±³²³®±°´³°­®¬±´²³³­³¯¯°²²³²µ²±¯®¬µµ²«´³±¯²±³³´µµ±³®µ³¶¶·µ¸·µ±¶µµµ¶·µ±¶´¶µ¶··³´´¶···¸¸º³°¯¸»¸²³µ¹º¼¾¼¶¶µ¸·ºº¹º¼»»»½½¾½½¾¼¸¼¾¿Á¿¼ÂÂÀÁÀ¸¿¿½»¿¿À¾¾¾ÃÃÄÁÅÂÄÀÆÅÅÂÄÄÄÁÿÆÈÈÆÅÄÇÉÈÆÆÆÈÊËÆÊÈËËÈÈÊËÌÍÏÏÍÌÌÌÊÊËÊÌÉÎÌÍÎÎÍÍÆÎÎÍËÐÐÏÍËÌÑÑz{|}|~}z{~~}|}{{{{~~|{|~|~€|~€€}~~€€€€‚‚ƒƒ‚„‚‚ƒƒ„€‚ƒƒ‚„……„„„ƒ‚†††…„…ˆˆ††‡ˆ‰…††………†‡…‡ˆ‡†‡ˆŠˆˆˆ††‡ˆ‡††„†ˆˆ‡‡ˆˆŠˆ‡‰‹‰‹Œ‹Š‰‰‹‹†‰ŠŠ‡‰ˆŠŒŽŽ‹ŠŽŒ‹ŒŒ‹‹‰Œ‘‘’“””’”•’Ž’““”“““”–”‘’’‘’’’‘‘“–—””––’“•–•“”••”˜š™—–––•—–••–––•——”™™—š›——šœœ›š›œœšš››š››œœš˜™›šš›œœžžŸŸŸœ›Ÿ¢¡¢   Ÿ žŸ£¢ Ÿž ¢¡¡ŸŸ¢¥¤£¤£¡¢¢¢£¥¦¤¢£¤¦¥£¥§§¦¥§§§¦¦§¨§ª¤¦¨©©¨¨¨§¦§«¬©¨¨ª««¬¬¬«««ª©«­®®­®¯­­¬«ª«¬¬¬«©©­¯­©«««­®®¬¯¯¯¯®¬­±²®°²±³´²°³³°®­«²¶´²±°²´±±±²³µ²²³´´µµ¶²°³´²±²´³²±³´´µ¸··¶·¸¹¸·µµ¶¶µµ·¹·¶¶´µµµ·µ¯³µµ¶¶¶·º¹¸´µ¹º¶¶·¸¹º»½»¸¹¹¸¸º»»½¼»¼¼»»¾¾¼¿¾·¹¼¾À¾¼ÂÁÀÁÀ¿¿¿»º¾À¿À¿¿ÃÅÅÂÃÃÃÆÆÆÄÃÂÃÅÆÅÆÇÇÇÆÅÈÉÇÄÆÅÅÈÊÊËÊÉÉÊÈÈÊÊÊÌÎÏÍÌÊÊËÌÍÌÌÍÎÎÎÎÍÌÌÍÍÎÍÎÏÐÏÍÎÏÏÑzy{{}~~{|~}~~~||}}}}|}~}~~€€|~€€€~€‚‚}‚‚‚ƒ„ƒ‚‚€‚‚ƒ~„…„‚ƒƒ‚ƒ„„„ƒ‚‚ƒ…†…………††††…†ˆ‡†…ƒ†…†‡‰‰‡†‡‡‡ŠŠˆˆ……††…‡ˆ†ƒ†‡‡†‡‡‰‰ˆˆ‰‰Š‹‹ŠŠˆ‰‰‡‰‹ŒŒŒŒ‹Œ‹‹ŽŽŒ‰ŠŠ‹‹ŽŒˆŽ‘ˆŽŽ’‘’“’’“““–—–””—”“”’’‘’‘“––•”•——””–––”““”“˜š™’“–•“–“““––˜—š–—™™˜™š˜“˜œœš™–š›š–˜š™˜›œœ›œš—šœ›”œœž   Ÿœ›ŸŸ ŸžžŸ ž¡¤¤ ž¡ ¡žžŸ¤¦¤ £¡¡¡¡¡¡¥¦¢¡¢¥¥¥¤¨§¨£¦¦§¨§¦©ªª¨¦¥§©§¤¦¨¨¨ªª«ª©¥¥¥ªª­ª«ª¬­ª¨­¯°®®¯¯®­¬¬¨¬¬®­¬©­®­©©©­­®¯¯¯®¯°¯­ª¯°°±²±²²²®±²²°­¬°±±°¯°°±°¬±°²²°«³±´±µ³³¯´³³³´µ´¯¯±²²µ³¸¸·µµµ¶¶µ³·°¸¶¸·¶³¸·¶°µ¶·¯µ·¶³´µ¶···µµ¹¹¸¹»¹¸¶¹¸º·º¸¸¸ºººº¼º¼¹»º»¼»º¼µµ¶¾¿¾¼ÂÁÀ¿¿¹À¾½¼½»¿ÀÀ¿ÄÅÅÁ»ÅÅÇÇÅÆÇÆÆÆÇÈÇÅÅÃÈÉÉÅÆÇÇÇÈÃÉÉËÉÊÆÇÉÌÊÊÉÎÌÍÇÇÇËÍÎÌËËÏÉÌËÌÉÏÐÏËÏÎÎÏÏÍÏËÏÉ}{|}{~}{|}}~~|}|y}~}{{{~€€€€}€€€€~~€ƒ‚}‚ƒ‚‚‚‚‚‚ƒ‚‚ƒƒ‚„ƒ‚ƒ†…„ƒ„‚€€„ƒƒƒ††…†††††„…†‡†„‡‡†††ˆ‰„…‡‡ˆˆ‰‰‰‡‡‡ˆ†‡‰‡†††ƒ†‡‡‡‡‡‡‰Š‰ŠŠŠ‹‰ˆ‰‡ŠŒ‹ŒŒ‹ŠŽŒŠ‹ŽŒ‹‹‹Œ‹‹‰ˆ‘ŽŽŽŒŠ’’’ŽŽŽ‘’‘’”–•””–”‘“”’’”•“‘’““•••–—––•”–”“’“‘•———˜—–”–—•–˜™™™›š———˜—˜˜——™š™˜˜š›š™›žœœœ™››˜žž›šœœœžŸ¡ ŸœœŸžžŸžŸ ¡ ¡¤¤£¡¢¢¢¡žŸ¡¦¦£¡¤¤£¤¡  £¤¤¡£¦¥¥¤§§§¦¥£¥¨¨¨¨©§¥¤¥¦¨¥¤¥§©ª©¨§©ª«©¥¨««¬«©«­ª©«­®®­®®®­­­®­®®®­®®­«««¬®¯¯°¯®¯²±®­®¯®°°°°°±°¯¯±´³®°±®®°°±°°°±²²°²¯«°²²´´³²³²°±´µµ³±²²³²´¶·¹¸µ²´µ·µµµ¶····¶µ¸¹·¶·¹¸¶·º¶·¹¸µ¶··¸¸·¹º¼»¹¹¸¹·¹»»¸»º»ºº¼¼½½¾¼»¼¾¼»»¼»¾¾¾¾¿ÀÀ¿¼¾ÁÀÀÁ¾½¹½¾¿ÃÃÄÄÄÂÂÄÅÅÆÅÇÉÈÆÆÅÈÈÅÄÅÈÊÈÆÇÈÇÈÉÉÈÉÊËÊÉËÎÌËËÌÎÌÌÍËÇÊËÌÌÏÏÍÌÌÍÍÏÏÐÐÐÏÍÍÎÎÌÐÒÏÏ}{}~~~}w||}}~{{{}{{|{}€~€€€€€€€€€‚€€‚}€€€|‚„~€ƒƒ€ƒƒ‚ƒ……~€€€ƒ„„ƒ‚‚„‡‡††††„……„ƒ„……†‡‡‡†……‡‡ƒƒ‡ˆˆ‡†‡‰ˆ‡‡ˆ†‡ˆ‡‡‡‡†‡ˆˆ‡„…‡‰ˆ‰‡Š‹‹ˆˆ‰‰ŠŒŒ‹Œ‹ŠŒ‹‡Š‹‹‹ŒŽˆŒŽŽŒ‰Œ‘’’ŽŽ‘‘‘Š‘ŽŽŽ”“”“”‘“Ž’‘•–“‘‘’““”•––—•”••“‘“‘—šš——–—˜——™š™šš˜˜”—”––˜———™™šœœœ›”œžžžžœ››œœœ™Ÿžœœžž› žœžžž ¡¡Ÿ ŸŸ¡£¢£¤¤¢ ž ¢¥¤£ ¤¤¤£¢¢¢£¥¥£¤¥£££¤¥¦¦¤¢£¥©¢§¦§¦¤¢¥§¦£¢¢©©¨§¨©©¬ª¦©¤«¬«¨¨©©©ª«¬¬¬«­­­¨¬¬«ª¯¯®­®©©ª­®¯¯¯°®ª°²±­¬¬¯®¯®®ª¯¯±°®¯µ´²±²¯±²²¯±°±²³´²±±­±«´¯µ²±°±°²­³´´³³³²³³³¶µ¸¶µµµ±µ³²²··¶µ¶µ·¸¶´º»¹¸»½º¹¸·¶µ¸¸¸ºº¶¹¹º¸º»¹¶¹º½¸¹º½¾¼¹¿¾¿½½º¾ÀÀ¿¾¼¾»¿½½¸½¿¿½¿¾ÀÁÁ¾½º¾ºÁÂÀ¾ÄÅÄÂÆÁÄ¿ÄÁÆÆÅÅÅÆÇÁÅÅÇÊÉÅÉÁÆÇÉÉÉÈÉÈÌÉÌËËÅÌÍÌÄÍÏÍÇÈÈÉËÑÎÌÌÌÌÍÍÏÌÎÎÏÌËÉÎÌÒÎÍÎ|}}~~~}}~~€€|}~€}~~x|€€~}}~€€€ƒƒ€~€‚€‚ƒ~€‚‚€}ƒƒ€„„‚~€ƒƒƒ„„„„ƒ‚„ˆˆ‡†††…ƒƒ„‚}ƒ‚‡‡‡ƒ‡……„……„†‰ˆ†‡ˆ‰‰„‡Š‹ˆ†‡ˆ„‡‰Š‹‰†…†‡‰‰‰Š‹‹‹Š‰ŒŒŠŠŠŠŒŒŒŽ‹Š‹ŒŠ‰ˆŽŽŽ‘‹ŒŽ‘’”“Ž‘‹‘’‘‘’‘’“’‘‘’•–”””•“Ž‘“”•“““‘“––””””••–——””•”’’˜™™–”——–••˜™š™—–˜š˜–—™˜–˜››šœœ››œœœž››œœ›œŸœžž›žŸŸŸžžŸ   ¡Ÿžœ¢¢¢¢¤¥¤žŸ¢¤¤£¢¢£¤£¢££¤¤¦¨¥¤£¢¤¤¤¥¦§¦¥¥¥¨©¨©©¨¨£¦¦¦¦¥¦¨ªª©©©ª«¬«ªªª¬ª¨¨©¨«­¬ªªªª¬­¬¨¬¬¬«¯¯¯¯®¬¬­¯¯¯®­®®«¯°¯­°®¯®°®®®¯±³²®°³³³³±±²³²²²³²°³µ³°±³³´´´´³±¯¶º·´°³µ¶´²²²²²´µ¶·µµ¶µµµ²°´¸¸·¶µ···¸º»·¸¼½»¹·¶¶··¸·ºº¹ººº»¼»º¸º½¼º¹º½¿½¾½¾¾¾»»½ÁÁÀ¾¾¾¾¾¿½»¼¾¾½¾ÀÀÀÀ¿¿¿ÀÀÂÿ½ÃÆÉÊÇÆÄÄÃÄÄÄÄÅÄÄÆÇÇÅÈÉÉÉÈÉÇÈÅÇÉÉÈÉËÌÌËÊÈËÎÊÈËÏÍËÊÈÉÌÐÎÍÎÍÍÏÒÑÎÌËÌÐÏÏÎÐÑÏÏÎ}}}z~~~~~€~|}y~|}~~}}~€€€~|~€€€€|€~~€‚‚ƒƒƒ‚‚€‚ƒ~€‚€€‚€ƒƒ„ƒ‚ƒ‚ƒ……„„„‡ˆ‡†…„†€ƒƒƒ…†‡‡‡‡ˆ‡‡††‡‡‡‰Šˆ…†‡‰ŠŠ‰‹Šˆ†‡ˆ‡‡Š‹‹‰‰‰‰†ˆ‰Š‹Š‡Š‹‹ŒŒ‹‹‡‹ƒŒŽŒŒ’‘Ž‰Ž‰‘‘’“’“‘Œ‹’’’’’’““’’’“•”“’”–”“““’”””’•˜—’”•’‘’˜—–——••“™›š™˜–—””“—šš˜—–—™š–˜™—•™šœœœš™—›œ››šœœœ—œžžšš™žŸŸŸž  Ÿž¡¡ œž ¡ž¡£¢¡¢¢¤¤¢¡¤¤¡Ÿ¢¡¢£¤¢¤¤£¢¥§¥¡¢¢¥¦¥¤¦Ÿ§¤§¦ª¨ª©ª©¨¤¥¦§§¨§¨¥§¨©¥ª«¬¬«¨©©¨¨«­­¬­¬¬««¬¬¨¬ªªª«ª®¯­®¯®®­¯¯®«­®­«­­¬¬¯°¯®®®­®°²´³°¬±±³³²«²±´µµ°²±³°³±±²µµµ±¶µ´°·ºº·³°¶·µ²´´´´¶¶··¶´¸³·´³°°±¹¶¶µ··¸¸¸···º·¸··´¸µ···¶¹¹»¼¼º½»»¸»¸¼·¶µº¹¼»¹¹½¹¹º¾¼À·¿¾¾½¿Á¿»½¹¾½ÁÁÁÁÁ¿ÁÂÁ¿ÂÄÁ½ÄÂÅÇÈÈÇÂŽÆÄÄÀÃÄÅÇÈÇÇÇÉÃÉÃÆÇÉÆÇÇÆÈÊÉÌËËÈËËËÈÌÊÍÊËÈÊÍÎÊÎÎÏÇÏÐÒÏÌÊÎÑÑÑÑÏÑÐÎÊ}}|}~~~€€||||y~}|}~~~€€~~~~~~€€€€€}}z~}€‚„ƒƒ‚‚€€ƒƒ‚‚ƒ„€€€…„‚‚‚‚„…„„„††„…„†††‡ˆ†ˆˆ‡‡†‡‡†€„†‡ˆŠŠŠˆ„‚†‰‹‹‹ˆˆ‡†‡Š‹ŠŠŠˆ‰ŠŠ‰†‡ˆŠŒŠˆŠŒŒŒŠ‹‹‹‹ŒŒŒ‹ŒŽŽ‘’‘ŒŒŽŽŽ‘‘ŽŽ‘””‘ŒŽ‘‘ŽŽ“““‘‘‘’“‘”””•••••”“’–—–””––•––—“———–—™››œ›™˜••—˜ššš–™šš˜˜˜˜–—™šœž›™™šœœ›š››œžžžž¡ŸžžžŸžŸ ¡¢££ œž ¡¢£¢   ¡¡¢£¤££ ¢¤£¡¤¥¥¤¤¡£¥¦£¢£¤¥¦¦¦¦¨§©¨¨¨«ª©©ª¨£¦§§§¨¨§§¦¦¨©ªª««ªªªª¨§¬®¬¬¬¬®°¯­«ª¬®«©­¯®¬§®°¯¯°¯®­«­®­°°¬®­¯¯±±¯¬¬®¯²²²°°±±¯³±°²´´µµ´²´µ¶´²³µµµµ´¶¸·µ¶···´°µ·¶¶µ´²¶¸¸¶¸·µ¸º·¶µ´³µ·¶··¸¶·¸··¸¹·¶¶¶¶¶¸¹¸¸··¹»»»»½¾½¼¼»½º¸µº¼½½ºº»¼½½À¾¿¿¾¾¾¿¾ÀÂÁÁ¿¾¿ÂÃÃÂÂÁÀÁÂÂÁÁÂÄÄÃÂÄÆÆÈÈÉÆÆÇÇÆÄÄÅÄÃÇÉÈÇÈÊÊÊÇÆÊÌÈÅÆÈÉÊËÌËÌËÊÌÌÌÍËÊËÈÊÌÌÍÏÐÎÈÐÓÑÏÏÌÏÐÑÒÒÐÒÑÎÌ~~|}~~€~€}~{}~~~}|}}~x~€‚€~€€€€|}~€‚‚€‚‚‚‚ƒ}‚ƒ„……„‚ƒƒƒ€‚‚„…„„ƒ‚‚„„„ƒ‚‚…†††††††‡††ˆˆ††…„…„ƒ†ˆ‰ˆˆ„†„…ˆ‰ŠŠŠˆ†‡ˆ‰‹‹‹ŠŠ‰‰†ˆ†ˆ‰ŠŠ‰ˆŠ‹ŒŒŒŒ‹Š‹ˆˆ‰ŠŠŽŽŽ‹Ž’‘ŽŠŽ•“‘‘Š‹“”“’’““‘””–—–•–”“’•–•••”–•”•–——”–——”—™››š“™“•—ššššš››”˜™š™˜™™–šœœ›š™œœ—šœœšžŸžœŸ¢¡   ŸŸŸ˜œšŸ¡¢£¡¡ŸœŸž ¢¢œ¡ ££¢£¤¥¥¥¥¥¥¥¤££¤¥¤¡ £¥¦§¨¥¨§§¦©¢§¨§¥¦£¨¥§¨¨ª©¦¦¨©£¨¨©©©¦ªªªª©¥¬©©«¬¨®°¯«ªª«««©®®®©ª­¯¬¯²±®­«¯¯±²³¬±¯°­²±°ª­¯°°¯®®¯°®°´³¯³±±²²²²¯·µ´±³µµ±²³³µ·´³±µ´´²´¬´¶·²´´·´¶µµ¶·¸··¹·µ´¶¶·´´³³³²±»º¹´¸¸¸·¹·¸¸¹µ»ºº³¹¶½½º´»º¹º¼¿À¿¾¹»¸º»À½¿¾À¼½½¾¾À¿ÂÁÁ½¿ÂÃÂÁ¿ÃºÂÃÿÀÂÃÄÆ½ÆÅÄÀÅÆÇÃÉÆÇÆÆÆÇÇÆÇÇÉÊÊËÍÊÁËÍÊÆÉËËÆÊÇÊÌËËÌÆÎËÊÊÌÈËÌÌÌÐÐÎÉÑÒÑÎÑÌÎÍÍÎÏÎÒÒÐÎ}|~~}€€€~~|~~~€‚‚‚€€‚‚~~€€~ƒ„ƒƒ‚‚‚‚ƒƒƒ…†ƒ‚‚„„„„‚ƒ„…†…„„ƒƒ„„ƒ‚‚†‡‡ˆ‡‡„………†‡‡ˆ‡†……††ˆˆˆ‹‰„……†ˆˆ‰‰‰ˆˆ‰ˆ‰‰ŠŠ‰‹ŠŠ‰Šˆ…‡‰‰ˆŠŠ‰ŠŠŒŽŒ‹‹‹Š‰Š‹ŒŒ‹Ž’‘ŽŽ‘‘Ž‹’“’‘‘‘ŽŽŒ‹‘’’‘“““““’‘””•–––•”““““”•–”””’“—˜—–˜–•–˜˜˜—˜—•”–•™™ššš™˜˜›››šœš—˜œ›œžš™žžŸ£¡¡¡¡Ÿ žžŸŸŸ¡¡ žœžŸŸŸ ¡¡  ŸŸ ¢¡ŸŸ¡£¤¢¥¥££¤¦¦¤¤¥£ž¡£§§§§¨©¨§§§¨¦¥¤¥¤¢¨ª¨§©«ª¨¨ªª©§©©¨©¨¨ª¨ªª©ªª¨¬¬¨¬®¬®®­«ª©«­¬««¬­­«­±²¯¯¯°°±±²³²±²²³±±¯®¯°°±±°¯¯¬¯³´´³±±±°°²µ¶¶´±´µµ´°²´µ¶¶³±³µµ¶´°°¶¸¹¶´¶·µ²¶¶¶¸¹¹¸¸¶´¶¸·¶¶···µ±¸º¸¸¹ºººº¹¸¹ººº»¹¹¹ºº¼¹¸ººº½¿¿Á¿¼»»¼¼¾¿¿¾¿¿¾¾À¿¾ÀÁÂÀ½¾ÁÃÄÂÂÃÅÂÂÀ½ÀÄÄÅÄÅÅÅÁ¾ÂÄÄÆÇÇÆÆÅÆÇÉÆÅÇÊÈÆÉÌÌÉÊËÊÌÍÌËÊÉÈÊËÉÉËÎÏÎÊÌÎÎÍÎÏÐÏÏÍÎÐÐÎÑÐÍÎÏÐÐÐÑÒÓÓÓ}~|€z~~~~~€€~~ƒƒ~~€‚ƒ€€€€{€}‚ƒƒ‚‚‚‚‚ƒ„€‚‚€ƒ…„ƒ‚€ƒ„…†…ƒ†…ƒ‚…‚ƒ‡ˆ†„†„……„…‡…†‡‡†…ƒ†‡ˆ…‡‰Š…†††‰‰‰‰ˆ‰ˆ‰‡ˆˆˆˆ‰‹‰†ŠŠŠ‡‡…‰ˆ‹ŠŠ‹ŒŒ‘ˆŒŠŽŽŒŒŽŽŽŒŠŽ‘ŽŽ‹‘’‘‘‘ŒŽŽŽŽ’””’“‘‘’’’”•••””””““”“‘‘’“”••—˜˜˜–””•–••••”•–—˜˜™™•š••–š›œ™œœ››žœ›šš››œ››œžž £¡œ  žžžž¡¡žž¢œžœ ¡¡ ¢£¡¡Ÿ¡ ¡ž Ÿ Ÿ  ¢¥¥ žž¦¦¥¥¥¢¡¡¤¦¦¢¥§©©ªª©©¨¥¥¦¥¢©©§¤¥¦©¤ªªª©ª««©«ª¨©©¬«¥©ª¬­¬¨«­®¯¯­««ªª­¨«¬®«¬©­«³°±±±­¬«°±±°³´³°±±¯®¯°±«°¯°­®¯µ¶´³²±°¯±²´µ´²µ³¶´²°¶´¶±±±±°³·¶±°µ·¸µ¯¶¶¶³³³·¹¹³¶¸¸´¸¸¸¶¶·¸¶¶³³²¶´·¸¹¸ºº¸¶»º»¶¹ºººº·¹»»»½ÀÀ½½¼¿¼»»»¸½¾¿½¾¾¿½½¿¿¸Ã¾À½¿Àý¼»Äý½¾ÁÁÂÂÀÀÇľÄÅÃÃÆÆÇÅÈÈÆÃÇÇÇÉÉÄÊÊÌÉÊÆÆÇÍËÌÆËËËÊÊÅËÍÏÏÎÍÏÏÍÇÎÐÏÇÌÍÏÐÏÐÑÈÐÑÐÐÑÒÓÐÕÖ}|{~}€~}~ƒ}||€€€€}}‚ƒƒ{~‚ƒ€€€€€€‚‚‚ƒ„ƒ„„ƒ‚‚‚ƒƒ‚ƒ…†††‡‡„†…‚„†ˆˆ†…†‡…„†ˆ‡…„‡‚………†‡ˆ‡‡‡ˆ…ˆ‰‡‰ŠŠŠŠ‰‡ˆˆ‰‰‰‰‰Š‰‰‰ŠŒŒŠ‰‰‰ŒŒŒ‘ŽŒŒŽŽŽŒŽŽŽ‘’‘’’’””‘‹Ž‘‘’“’‘’“’‘’””“”””•••”“’‘””—––˜™˜–”•“•••––––˜˜šš˜™›š™™™—š›œœžžœ››œ›œœœ›œœœŸŸ ¢¢¡Ÿž™Ÿ¡¢ Ÿ¡£¢Ÿž ¢¢¢¢¡ŸŸ¢¢¢¡£¢  £¤¤¤£¥¦££¤¤£§¦¤¤¤¥¦¦¦¤¥¨©ª¬¬ª¨¤¨¦¦§§¨§©ªª©«ªª©ª«¬««­­¨©ª¬«¨¨ª«¬«««­­¬ª«¬­­©¬¬­¯¯­®¯°²´´²±°®­®®°°°±²±²²´³²±¯°¬¯°¯°²´´³²²±³²²²±³³´µµ¶¶¶´µ´µµµ²±®±³¶¶³°´µ´³´¶·¹·¶µ¶·¶¶¶¸¸·¹º¶·¶··µµ··¶¶¶¸¹¸µ¸¹µ¸»½»¹ººººº¹¹½¾¼¿ÁÀ¿¼º¼¼¿¿¼»¾ÀÁÁ¿¾½¼¾ÂÀ¿ÂÄÀ¿ÁÅÃÀÀÃÄÃÂÂÂÁÂÀÀÁÁÁÅÆÃ¿ÅÆÁÂÅÈÈÉÉÉÆÂÇÇÄÈÉÊÊËÌÍÌËÊËËÊËÍËÌËÊÊÉÊËÍÎÎÍÎÑÍÉÌÏÏÏÍÌÏÎÎÏÑÐÑÑÏÎÎÑÑÑÓÔ~z}}{~~€€€z~€€€€}€€~‚~~{ƒ‚ƒƒƒ€}€€‚‚€‚‚ƒƒ……„‚ƒƒƒƒ‚‚‚‚‚‚„„ƒ‚ƒ…‡‡ˆ‡††„…ˆ‰‰ˆˆ‡…†……†††‡‡†…„…††‡ˆˆ††…ˆŠˆ‡Š‹Šˆ‰ˆˆˆ‰‰ŠŠŠ‹Šˆˆ‰ŒŒ‹‹‹ŠŒŽŒŠ‹ŽŽŽ‰‡‹ŒŒŠŒŽŒ‘’‘‘ŒŽ‘’’””“ŒŒ““’’’‘’”””““’‘””““”–••–––•––“–“—˜˜–™š—““”•••’–“”–š››—™š›˜šœš——–œ›žš˜š›šš›œœœŸ Ÿžžžžœ¡¢ œž ¢¢££££¢Ÿ¡¡¡ ¡ž ¢££¢¥¤¢¢¢¤¤£¤¤¤§¦£¢§©©¨§£¦¦¦¥¥¥§¨§¤¬«§¢¨¨©¤¤¤©«¬¨««¬«©ªªª««­­¬ªª¨ª©««««¬©­®­««©­°°ª¬«­¯¯¯±­°¯²³²ª¯°°¯¯±²¬®¯°±²´´³²®®­±°¯°²²³­°±³³³®´±³³³°µµ¶±µ³³®¶³´´´´´´µµ´³³´·¸·µ¹¸¶µ¶µ´µ··¹¸¹¹¸µ¶µ·°¶¶¸µ¹¹¹º¹·º¶¸¹»¸»¹¼½»¶ºº¼¿À¼¾»º¹¹¸½½ÀÀ¼»¾ÁÂÀ¾º½½¿Â¿½ÀÃýÄÃÿÂÂÃÁÀÂÂÂÅÃÃÃÃÃÆÂÂÁÄÇÆÂÅÈÉÈÊÊÇÃÅÅÆÈÇÆÊËËËÌËÊÉËÄÌËÊÉÊÊÉÄÉÉÍËÍÇÎÑÎÉÌÌÐÑÐÍÎÌÎÐÓÌÐÐÏÌÍÏÒËÒÏ~}~}|~~~~‚~~}ƒƒ€~~€|€€~‚ƒƒ€ƒ‚‚‚€‚‚ƒƒ„„„„€€‚…‡†…‚„ƒƒ…†‡‡…„ƒ‡ˆˆ†…„ƒ„‰‰‰‰‰‰ˆ†††…ƒ‡ˆˆˆ†„…††ƒ‡‡†‡ˆ‰Šˆ‡Š‹‰ˆ‰ˆ‰ˆ‰ŠŠ‹‹ŒŠ‡†‰Š‰‡‹‹ˆˆ‹Ž‹Š‹ŽŒŒŒŽ‹ŠŠ‹ŠŠŽŒ‹ŒŽŽŽ’’’‘‘‘‘‘““”’‘’“”’’”””––••”““‘‘““’‘•—–––””•—™š—”–™™™™›˜••——™˜——–—››™šœš˜™›™šœœœ›››šššœ›œžŸ¡¢ ŸŸœžžŸ¡ŸœžŸ¢¢¢¢ š ŸžŸ Ÿ ¢¡ ¤¦¤£¤¤£¤£££¥¥¥¤¦¦££¨ªª©¨§¦¥¥¦¦§¦§§¨ªª¨¦©©ªª¨¨¨ª«¬¬«­­ªªª©©ª«««««««ª¬­¬¬®¯®®­­­¬­±°®­­®­­°°¯®®®±¯®®±²²¯³´²­¯°¯¯±³³²±±²³³±°¯±³°²³´³µµµ´´´´µ³´¶µ´³²°´³´µ´´µ³²·¶´¶¹¹¹·¶¶¶µ·¹º¸¶·¸¹º¹¹¸µ·¸¸¹·¹¸º»º¹¹º¸»¾¼¹º¼¼¼¾¾»ºº»½¿¾½¼¼¹¶¼¿¾¿¿¿½»¿ÂÀ¿½½¾À¾À¼¼¾ÁÄÆÄÁÂÂÁÂÁÂÂÂÃÂÅÄÅÃÄÆÇÇÅÆÆÆÆÂÅÆÆÇÉÊÇÆÇÆÉÈÉÊÊÊÈÈÊÌÌÌÊËÌÌÊÊÊÉÉÉÊÉÌËÌÍÍÏÎËËÏÐÏÏÎÐÐÑÒÒÑÐÐÐÏÏÐÐÑÒÔ~}€~~€€ƒ€‚‚ƒ‚‚€€€~~}}ƒƒ‚~‚‚‚‚ƒ|ƒƒ„ƒƒ€‚„†‡†„„……†‰‹Š‰ˆ‡†„…‡‰ˆ‡…„„†ˆˆƒˆ‡‡‡……‡…†‡‡‰‰‰ˆ‡‡‡††…„‡‰Šˆ‡‡ŠŠŠ…‡‡‰ˆ‰‹Œ‹ŒŒŒŠ‰‰ˆ„ˆŠ‰‡ˆ‡ŒŒ‹Š‰’Œ‹ŽˆŠ‹ŒŒŽŒ‹‹Œ‰Ž‘‘‘‘Ž’’‘ŽŽŽ“–•’“””“‘•––’’’’“”“““’‘’——˜˜——–•™›˜‘—™š™™•–•——™š›š˜˜šœžœ–™šœš›œ››œ››ššššœžœœ¡¢¡žŸŸž˜žŸ Ÿ›œœž¡ ŸŸ¡¡¡ ŸžŸ¡£££¥¦¦¥¥¥¤£¦¥¢Ÿ¥¦§¥¥¥¤£¦§§¨§¥¦£¦¦¨¥§©ª¨©©©ª««¬ª«¨§©«§««¬¬­­ª¨©¥ª§¨ª«¬­«««¬¬®¯®¨­­­¬­®®®¯°°¬­­°¯®®¯¬®«®±²³±µ¶³°°®«¯®³²³±²³´µ³¬®°±³¶·µ¶¶µ¶¶µ±´¶µµµµ´³²­³²²³´µµ³µ¶·¶¹º¹¸·¶·¯´±¹¸¸´¶·¹»º¹¹¸»º¹¶º°¹»¼»º¹¸·»½½¹¼¼¼¼½¶»º¼¼½¸½»»»¼¹¼¾¿½¿¼½¼¼½¿¼ÀÀÂÂÀÀÀ»¾¾ÆÀÃÀÁÁÀÀÃÄÄÁÃÿÅÅÅÆÇÂÃÂÅÅÃÃÆÆÇÆÆÄÈÇÊÌÌËÈÆÊÍÏÈÊÊÌÉÊÇÉÉËÌËÈÈÊÌÌÍÍÏÊÎÐÏÎÎÍÏÐÐÌÑÑÑÑÒÎÐÍÍÍÒÔ
\ No newline at end of file
diff --git a/tutorial/tracking/template-tracker/tutorial-template-tracker.cpp b/tutorial/tracking/template-tracker/tutorial-template-tracker.cpp
new file mode 100644
index 00000000..4f00ddfe
--- /dev/null
+++ b/tutorial/tracking/template-tracker/tutorial-template-tracker.cpp
@@ -0,0 +1,51 @@
+/*! \example tutorial-template-tracker.cpp */
+#include <visp/vpDisplayGDI.h>
+#include <visp/vpDisplayX.h>
+#include <visp/vpImageIo.h>
+#include <visp/vpTemplateTrackerSSDInverseCompositional.h>
+#include <visp/vpTemplateTrackerWarpHomography.h>
+
+int main()
+{
+#if defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI)
+  vpImage<unsigned char> I;
+
+  vpImageIo::readPGM(I, "pattern-template-tracker.pgm");
+
+#ifdef VISP_HAVE_X11
+  vpDisplayX display;
+#else
+  vpDisplayGDI display;
+#endif
+
+  display.init(I, 100, 100, "Template tracker");
+  vpDisplay::display(I);
+  vpDisplay::flush(I);
+
+  vpTemplateTrackerWarpHomography warp;
+
+  vpTemplateTrackerSSDInverseCompositional tracker(&warp);
+
+  tracker.setSampling(2,2);
+  tracker.setLambda(0.001);
+  tracker.setIterationMax(200);
+  tracker.setPyramidal(2, 1);
+
+  tracker.initClick(I);
+
+  while(1){
+    vpDisplay::display(I);
+    tracker.track(I);
+
+    vpColVector p = tracker.getp();
+
+    tracker.display(I, vpColor::red);
+
+    if (vpDisplay::getClick(I, false))
+      break;
+
+    vpDisplay::flush(I);
+    vpTime::wait(40);
+  }
+#endif
+}
diff --git a/tutorial/visual-servo/ibvs/CMakeLists.txt b/tutorial/visual-servo/ibvs/CMakeLists.txt
index a7134b80..42a4bd98 100644
--- a/tutorial/visual-servo/ibvs/CMakeLists.txt
+++ b/tutorial/visual-servo/ibvs/CMakeLists.txt
@@ -3,31 +3,31 @@ project(tutorial-visual-servo-ibvs)
 cmake_minimum_required(VERSION 2.6)
 
 find_package(VISP REQUIRED)
-if(VISP_FOUND)
-  include(${VISP_USE_FILE})
-endif(VISP_FOUND)
 
-# build the examples
-add_executable(tutorial-ibvs-4pts tutorial-ibvs-4pts.cpp)
-add_executable(tutorial-ibvs-4pts-display tutorial-ibvs-4pts-display.cpp)
-add_executable(tutorial-ibvs-4pts-image-tracking tutorial-ibvs-4pts-image-tracking.cpp)
-add_executable(tutorial-ibvs-4pts-ogre tutorial-ibvs-4pts-ogre.cpp)
-add_executable(tutorial-ibvs-4pts-ogre-tracking tutorial-ibvs-4pts-ogre-tracking.cpp)
-add_executable(tutorial-ibvs-4pts-plotter tutorial-ibvs-4pts-plotter.cpp)
-add_executable(tutorial-ibvs-4pts-wireframe-camera tutorial-ibvs-4pts-wireframe-camera.cpp)
-add_executable(tutorial-ibvs-4pts-wireframe-robot-afma6 tutorial-ibvs-4pts-wireframe-robot-afma6.cpp)
-add_executable(tutorial-ibvs-4pts-wireframe-robot-viper tutorial-ibvs-4pts-wireframe-robot-viper.cpp)
+# set the list of source files
+set(tutorial_cpp
+  tutorial-ibvs-4pts.cpp
+  tutorial-ibvs-4pts-display.cpp
+  tutorial-ibvs-4pts-image-tracking.cpp
+  tutorial-ibvs-4pts-ogre.cpp
+  tutorial-ibvs-4pts-ogre-tracking.cpp
+  tutorial-ibvs-4pts-plotter.cpp
+  tutorial-ibvs-4pts-plotter-gain-adaptive.cpp
+  tutorial-ibvs-4pts-plotter-continuous-gain-adaptive.cpp
+  tutorial-ibvs-4pts-wireframe-camera.cpp
+  tutorial-ibvs-4pts-wireframe-robot-afma6.cpp
+  tutorial-ibvs-4pts-wireframe-robot-viper.cpp
+)
 
-# copy the Ogre3D data
-get_target_property(target_location tutorial-ibvs-4pts-ogre LOCATION)
-get_filename_component(target_location "${target_location}" PATH)
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/sphere/Sphere.mesh" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/sphere/Sphere.material" )
-list(APPEND data2copy "${CMAKE_CURRENT_SOURCE_DIR}/target_square.pgm" )
-foreach(data ${data2copy})
-  add_custom_command(
-    TARGET tutorial-ibvs-4pts-ogre
-    POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy "${data}" "${target_location}"
-  )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/sphere/Sphere.mesh" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/sphere/Sphere.material" )
+list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/target_square.pgm" )
+
+foreach(cpp ${tutorial_cpp})
+  visp_add_target(${cpp})
+endforeach()
+
+# Copy the data files to the same location than the target
+foreach(data ${tutorial_data})
+  visp_copy_data(tutorial-ibvs-4pts-ogre.cpp ${data})
 endforeach()
diff --git a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-display.cpp b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-display.cpp
index e46daed8..29aae8c5 100644
--- a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-display.cpp
+++ b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-display.cpp
@@ -7,6 +7,9 @@
 #include <visp/vpProjectionDisplay.h>
 #include <visp/vpServoDisplay.h>
 
+void display_trajectory(const vpImage<unsigned char> &I, std::vector<vpPoint> &point,
+                        const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam);
+
 void display_trajectory(const vpImage<unsigned char> &I, std::vector<vpPoint> &point,
                         const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam)
 {
@@ -27,83 +30,88 @@ void display_trajectory(const vpImage<unsigned char> &I, std::vector<vpPoint> &p
 
 int main()
 {
-  vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
-  vpHomogeneousMatrix cMo(0.15, -0.1, 1.,
-                          vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
+  try {
+    vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
+    vpHomogeneousMatrix cMo(0.15, -0.1, 1.,
+                            vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
 
-  std::vector<vpPoint> point(4) ;
-  point[0].setWorldCoordinates(-0.1,-0.1, 0);
-  point[1].setWorldCoordinates( 0.1,-0.1, 0);
-  point[2].setWorldCoordinates( 0.1, 0.1, 0);
-  point[3].setWorldCoordinates(-0.1, 0.1, 0);
+    std::vector<vpPoint> point(4) ;
+    point[0].setWorldCoordinates(-0.1,-0.1, 0);
+    point[1].setWorldCoordinates( 0.1,-0.1, 0);
+    point[2].setWorldCoordinates( 0.1, 0.1, 0);
+    point[3].setWorldCoordinates(-0.1, 0.1, 0);
 
-  vpServo task ;
-  task.setServo(vpServo::EYEINHAND_CAMERA);
-  task.setInteractionMatrixType(vpServo::CURRENT);
-  task.setLambda(0.5);
+    vpServo task ;
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::CURRENT);
+    task.setLambda(0.5);
 
-  vpFeaturePoint p[4], pd[4] ;
-  for (int i = 0 ; i < 4 ; i++) {
-    point[i].track(cdMo);
-    vpFeatureBuilder::create(pd[i], point[i]);
-    point[i].track(cMo);
-    vpFeatureBuilder::create(p[i], point[i]);
-    task.addFeature(p[i], pd[i]);
-  }
+    vpFeaturePoint p[4], pd[4] ;
+    for (unsigned int i = 0 ; i < 4 ; i++) {
+      point[i].track(cdMo);
+      vpFeatureBuilder::create(pd[i], point[i]);
+      point[i].track(cMo);
+      vpFeatureBuilder::create(p[i], point[i]);
+      task.addFeature(p[i], pd[i]);
+    }
 
-  vpHomogeneousMatrix wMc, wMo;
-  vpSimulatorCamera robot;
-  robot.setSamplingTime(0.040);
-  robot.getPosition(wMc);
-  wMo = wMc * cMo;
+    vpHomogeneousMatrix wMc, wMo;
+    vpSimulatorCamera robot;
+    robot.setSamplingTime(0.040);
+    robot.getPosition(wMc);
+    wMo = wMc * cMo;
 
-  vpImage<unsigned char> Iint(480, 640, 255) ;
-  vpImage<unsigned char> Iext(480, 640, 255) ;
+    vpImage<unsigned char> Iint(480, 640, 255) ;
+    vpImage<unsigned char> Iext(480, 640, 255) ;
 #if defined(VISP_HAVE_X11)
-  vpDisplayX displayInt(Iint, 0, 0, "Internal view");
-  vpDisplayX displayExt(Iext, 670, 0, "External view");
+    vpDisplayX displayInt(Iint, 0, 0, "Internal view");
+    vpDisplayX displayExt(Iext, 670, 0, "External view");
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI displayInt(Iint, 0, 0, "Internal view");
-  vpDisplayGDI displayExt(Iext, 670, 0, "External view");
+    vpDisplayGDI displayInt(Iint, 0, 0, "Internal view");
+    vpDisplayGDI displayExt(Iext, 670, 0, "External view");
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
 
 #if defined(VISP_HAVE_DISPLAY)
-  vpProjectionDisplay externalview;
-  for (int i = 0 ; i < 4 ; i++)
-    externalview.insert(point[i]) ;
+    vpProjectionDisplay externalview;
+    for (unsigned int i = 0 ; i < 4 ; i++)
+      externalview.insert(point[i]) ;
 #endif
-  vpCameraParameters cam(840, 840, Iint.getWidth()/2, Iint.getHeight()/2);
-  vpHomogeneousMatrix cextMo(0,0,3, 0,0,0);
+    vpCameraParameters cam(840, 840, Iint.getWidth()/2, Iint.getHeight()/2);
+    vpHomogeneousMatrix cextMo(0,0,3, 0,0,0);
 
-  while(1) {
-    robot.getPosition(wMc);
-    cMo = wMc.inverse() * wMo;
-    for (int i = 0 ; i < 4 ; i++) {
-      point[i].track(cMo);
-      vpFeatureBuilder::create(p[i], point[i]);
-    }
-    vpColVector v = task.computeControlLaw();
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+    while(1) {
+      robot.getPosition(wMc);
+      cMo = wMc.inverse() * wMo;
+      for (unsigned int i = 0 ; i < 4 ; i++) {
+        point[i].track(cMo);
+        vpFeatureBuilder::create(p[i], point[i]);
+      }
+      vpColVector v = task.computeControlLaw();
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
 
-    vpDisplay::display(Iint) ;
-    vpDisplay::display(Iext) ;
-    display_trajectory(Iint, point, cMo, cam);
+      vpDisplay::display(Iint) ;
+      vpDisplay::display(Iext) ;
+      display_trajectory(Iint, point, cMo, cam);
 
-    vpServoDisplay::display(task, cam, Iint, vpColor::green, vpColor::red);
+      vpServoDisplay::display(task, cam, Iint, vpColor::green, vpColor::red);
 #if defined(VISP_HAVE_DISPLAY)
-    externalview.display(Iext, cextMo, cMo, cam, vpColor::red, true);
+      externalview.display(Iext, cextMo, cMo, cam, vpColor::red, true);
 #endif
-    vpDisplay::flush(Iint);
-    vpDisplay::flush(Iext);
+      vpDisplay::flush(Iint);
+      vpDisplay::flush(Iext);
 
-    // A click to exit
-    if (vpDisplay::getClick(Iint, false) || vpDisplay::getClick(Iext, false))
-      break;
+      // A click to exit
+      if (vpDisplay::getClick(Iint, false) || vpDisplay::getClick(Iext, false))
+        break;
 
-    vpTime::wait( robot.getSamplingTime() * 1000);
+      vpTime::wait( robot.getSamplingTime() * 1000);
+    }
+    task.kill();
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
-  task.kill();
 }
diff --git a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-image-tracking.cpp b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-image-tracking.cpp
index a0c9d8a8..6d225b9c 100644
--- a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-image-tracking.cpp
+++ b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-image-tracking.cpp
@@ -8,6 +8,8 @@
 #include <visp/vpServoDisplay.h>
 #include <visp/vpSimulatorCamera.h>
 
+void display_trajectory(const vpImage<unsigned char> &I, const std::vector<vpDot2> &dot);
+
 /*!
   Given an image of a target, this class provided virtual
   framegrabbing capabilities in order to retrieve an image of a
@@ -79,91 +81,96 @@ void display_trajectory(const vpImage<unsigned char> &I, const std::vector<vpDot
 int main()
 {
 #if defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI)
-  vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
-  vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
+  try {
+    vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
+    vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
 
-  vpImage<unsigned char> I(480, 640, 255);
-  vpCameraParameters cam(840, 840, I.getWidth()/2, I.getHeight()/2);
+    vpImage<unsigned char> I(480, 640, 255);
+    vpCameraParameters cam(840, 840, I.getWidth()/2, I.getHeight()/2);
 
-  std::vector<vpPoint> point(4) ;
-  point[0].setWorldCoordinates(-0.1,-0.1, 0);
-  point[1].setWorldCoordinates( 0.1,-0.1, 0);
-  point[2].setWorldCoordinates( 0.1, 0.1, 0);
-  point[3].setWorldCoordinates(-0.1, 0.1, 0);
+    std::vector<vpPoint> point(4) ;
+    point[0].setWorldCoordinates(-0.1,-0.1, 0);
+    point[1].setWorldCoordinates( 0.1,-0.1, 0);
+    point[2].setWorldCoordinates( 0.1, 0.1, 0);
+    point[3].setWorldCoordinates(-0.1, 0.1, 0);
 
-  vpServo task ;
-  task.setServo(vpServo::EYEINHAND_CAMERA);
-  task.setInteractionMatrixType(vpServo::CURRENT);
-  task.setLambda(0.5);
+    vpServo task ;
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::CURRENT);
+    task.setLambda(0.5);
 
-  vpVirtualGrabber g("./target_square.pgm", cam);
-  g.acquire(I, cMo);
+    vpVirtualGrabber g("./target_square.pgm", cam);
+    g.acquire(I, cMo);
 
 #if defined(VISP_HAVE_X11)
-  vpDisplayX d(I, 0, 0, "Current camera view");
+    vpDisplayX d(I, 0, 0, "Current camera view");
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI d(I, 0, 0, "Current camera view");
+    vpDisplayGDI d(I, 0, 0, "Current camera view");
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  vpDisplay::display(I);
-  vpDisplay::displayCharString(I, 10, 10,
-                               "Click in the 4 dots to initialise the tracking and start the servo",
-                               vpColor::red);
-  vpDisplay::flush(I);
+    vpDisplay::display(I);
+    vpDisplay::displayCharString(I, 10, 10,
+                                 "Click in the 4 dots to initialise the tracking and start the servo",
+                                 vpColor::red);
+    vpDisplay::flush(I);
 
-  vpFeaturePoint p[4], pd[4];
-  std::vector<vpDot2> dot(4);
+    vpFeaturePoint p[4], pd[4];
+    std::vector<vpDot2> dot(4);
 
-  for (int i = 0 ; i < 4 ; i++) {
-    point[i].track(cdMo);
-    vpFeatureBuilder::create(pd[i], point[i]);
+    for (unsigned int i = 0 ; i < 4 ; i++) {
+      point[i].track(cdMo);
+      vpFeatureBuilder::create(pd[i], point[i]);
 
-    dot[i].setGraphics(true);
-    dot[i].initTracking(I);
-    vpDisplay::flush(I);
-    vpFeatureBuilder::create(p[i], cam, dot[i].getCog());
-
-    task.addFeature(p[i], pd[i]);
-  }
+      dot[i].setGraphics(true);
+      dot[i].initTracking(I);
+      vpDisplay::flush(I);
+      vpFeatureBuilder::create(p[i], cam, dot[i].getCog());
 
-  vpHomogeneousMatrix wMc, wMo;
-  vpSimulatorCamera robot;
-  robot.setSamplingTime(0.040);
-  robot.getPosition(wMc);
-  wMo = wMc * cMo;
+      task.addFeature(p[i], pd[i]);
+    }
 
-  for (; ; ) {
+    vpHomogeneousMatrix wMc, wMo;
+    vpSimulatorCamera robot;
+    robot.setSamplingTime(0.040);
     robot.getPosition(wMc);
-    cMo = wMc.inverse() * wMo;
+    wMo = wMc * cMo;
 
-    g.acquire(I, cMo);
+    for (; ; ) {
+      robot.getPosition(wMc);
+      cMo = wMc.inverse() * wMo;
 
-    vpDisplay::display(I);
+      g.acquire(I, cMo);
 
-    for (int i = 0 ; i < 4 ; i++) {
-      dot[i].track(I);
-      vpFeatureBuilder::create(p[i], cam, dot[i].getCog());
+      vpDisplay::display(I);
 
-      vpColVector cP;
-      point[i].changeFrame(cMo, cP) ;
-      p[i].set_Z(cP[2]);
-    }
+      for (unsigned int i = 0 ; i < 4 ; i++) {
+        dot[i].track(I);
+        vpFeatureBuilder::create(p[i], cam, dot[i].getCog());
 
-    vpColVector v = task.computeControlLaw();
+        vpColVector cP;
+        point[i].changeFrame(cMo, cP) ;
+        p[i].set_Z(cP[2]);
+      }
 
-    display_trajectory(I, dot);
-    vpServoDisplay::display(task, cam, I, vpColor::green, vpColor::red) ;
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+      vpColVector v = task.computeControlLaw();
 
-    vpDisplay::flush(I);
-    if (vpDisplay::getClick(I, false))
-      break;
+      display_trajectory(I, dot);
+      vpServoDisplay::display(task, cam, I, vpColor::green, vpColor::red) ;
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+
+      vpDisplay::flush(I);
+      if (vpDisplay::getClick(I, false))
+        break;
 
-    vpTime::wait( robot.getSamplingTime() * 1000);
+      vpTime::wait( robot.getSamplingTime() * 1000);
+    }
+    task.kill();
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
-  task.kill();
 #endif
 }
 
diff --git a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-ogre-tracking.cpp b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-ogre-tracking.cpp
index 183aa069..912adffb 100644
--- a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-ogre-tracking.cpp
+++ b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-ogre-tracking.cpp
@@ -8,6 +8,12 @@
 #include <visp/vpServoDisplay.h>
 #include <visp/vpSimulatorCamera.h>
 
+void display_trajectory(const vpImage<unsigned char> &I, const std::vector<vpDot2> &dot, unsigned int thickness);
+#if defined(VISP_HAVE_OGRE)
+void ogre_get_render_image(vpAROgre &ogre, const vpImage<unsigned char> &background,
+                           const vpHomogeneousMatrix &cMo, vpImage<unsigned char> &I);
+#endif
+
 void display_trajectory(const vpImage<unsigned char> &I, const std::vector<vpDot2> &dot, unsigned int thickness)
 {
   static std::vector<vpImagePoint> traj[4];
@@ -23,10 +29,7 @@ void display_trajectory(const vpImage<unsigned char> &I, const std::vector<vpDot
 
 #if defined(VISP_HAVE_OGRE)
 void ogre_get_render_image(vpAROgre &ogre, const vpImage<unsigned char> &background,
-                         #if VISP_VERSION_INT > VP_VERSION_INT(2,7,0)
-                           const
-                         #endif
-                           vpHomogeneousMatrix &cMo, vpImage<unsigned char> &I)
+                           const vpHomogeneousMatrix &cMo, vpImage<unsigned char> &I)
 {
   static vpImage<vpRGBa> Irender; // Image from ogre scene rendering
   ogre.display(background, cMo);
@@ -41,139 +44,110 @@ void ogre_get_render_image(vpAROgre &ogre, const vpImage<unsigned char> &backgro
 int main()
 {
 #if defined(VISP_HAVE_OGRE) && (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI))
-  unsigned int thickness = 3;
-
-  vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
-  vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
-
-  // Color image used as background texture.
-  vpImage<unsigned char> background(480, 640, 255);
-
-  // Parameters of our camera
-  vpCameraParameters cam(840, 840, background.getWidth()/2, background.getHeight()/2);
-
-  // Define the target as 4 points
-  std::vector<vpPoint> point(4) ;
-  point[0].setWorldCoordinates(-0.1,-0.1, 0);
-  point[1].setWorldCoordinates( 0.1,-0.1, 0);
-  point[2].setWorldCoordinates( 0.1, 0.1, 0);
-  point[3].setWorldCoordinates(-0.1, 0.1, 0);
-
-  // Our object
-  // A simulator with the camera parameters defined above,
-  // and the background image size
-  vpAROgre ogre;
-  ogre.setCameraParameters(cam);
-  ogre.setShowConfigDialog(false);
-  ogre.addResource("./"); // Add the path to the Sphere.mesh resource
-  ogre.init(background, false, true);
-  //ogre.setWindowPosition(680, 400);
-
-  // Create the scene that contains 4 spheres
-  // Sphere.mesh contains a sphere with 1 meter radius
-  std::vector<std::string> name(4);
-  for (int i=0; i<4; i++) {
-    std::ostringstream s; s << "Sphere" <<  i; name[i] = s.str();
-    ogre.load(name[i], "Sphere.mesh");
-    ogre.setScale(name[i], 0.02f, 0.02f, 0.02f); // Rescale the sphere to 2 cm radius
-    // Set the position of each sphere in the object frame
-    ogre.setPosition(name[i], vpTranslationVector(point[i].get_oX(), point[i].get_oY(), point[i].get_oZ()));
-    ogre.setRotation(name[i], vpRotationMatrix(M_PI/2, 0, 0));
-  }
+  try {
+    unsigned int thickness = 3;
+
+    vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
+    vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
+
+    // Color image used as background texture.
+    vpImage<unsigned char> background(480, 640, 255);
+
+    // Parameters of our camera
+    vpCameraParameters cam(840, 840, background.getWidth()/2, background.getHeight()/2);
+
+    // Define the target as 4 points
+    std::vector<vpPoint> point(4) ;
+    point[0].setWorldCoordinates(-0.1,-0.1, 0);
+    point[1].setWorldCoordinates( 0.1,-0.1, 0);
+    point[2].setWorldCoordinates( 0.1, 0.1, 0);
+    point[3].setWorldCoordinates(-0.1, 0.1, 0);
+
+    // Our object
+    // A simulator with the camera parameters defined above,
+    // and the background image size
+    vpAROgre ogre;
+    ogre.setCameraParameters(cam);
+    ogre.setShowConfigDialog(false);
+    ogre.addResource("./"); // Add the path to the Sphere.mesh resource
+    ogre.init(background, false, true);
+    //ogre.setWindowPosition(680, 400);
+
+    // Create the scene that contains 4 spheres
+    // Sphere.mesh contains a sphere with 1 meter radius
+    std::vector<std::string> name(4);
+    for (int i=0; i<4; i++) {
+      std::ostringstream s; s << "Sphere" <<  i; name[i] = s.str();
+      ogre.load(name[i], "Sphere.mesh");
+      ogre.setScale(name[i], 0.02f, 0.02f, 0.02f); // Rescale the sphere to 2 cm radius
+      // Set the position of each sphere in the object frame
+      ogre.setPosition(name[i], vpTranslationVector(point[i].get_oX(), point[i].get_oY(), point[i].get_oZ()));
+      ogre.setRotation(name[i], vpRotationMatrix(M_PI/2, 0, 0));
+    }
 
-  // Add an optional point light source
-  Ogre::Light * light = ogre.getSceneManager()->createLight();
-  light->setDiffuseColour(1, 1, 1); // scaled RGB values
-  light->setSpecularColour(1, 1, 1); // scaled RGB values
-  light->setPosition((Ogre::Real)cdMo[0][3], (Ogre::Real)cdMo[1][3], (Ogre::Real)(-cdMo[2][3]));
-  light->setType(Ogre::Light::LT_POINT);
+    // Add an optional point light source
+    Ogre::Light * light = ogre.getSceneManager()->createLight();
+    light->setDiffuseColour(1, 1, 1); // scaled RGB values
+    light->setSpecularColour(1, 1, 1); // scaled RGB values
+    light->setPosition((Ogre::Real)cdMo[0][3], (Ogre::Real)cdMo[1][3], (Ogre::Real)(-cdMo[2][3]));
+    light->setType(Ogre::Light::LT_POINT);
 
-  vpServo task ;
-  task.setServo(vpServo::EYEINHAND_CAMERA);
-  task.setInteractionMatrixType(vpServo::CURRENT);
-  task.setLambda(0.5);
+    vpServo task ;
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::CURRENT);
+    task.setLambda(0.5);
 
-  // Image used for the image processing
-  vpImage<unsigned char> I;
+    // Image used for the image processing
+    vpImage<unsigned char> I;
 
-  // Render the scene at the desired position
-  ogre_get_render_image(ogre, background, cdMo, I);
+    // Render the scene at the desired position
+    ogre_get_render_image(ogre, background, cdMo, I);
 
-  // Display the image in which we will do the tracking
+    // Display the image in which we will do the tracking
 #if defined(VISP_HAVE_X11)
-  vpDisplayX d(I, 0, 0, "Camera view at desired position");
+    vpDisplayX d(I, 0, 0, "Camera view at desired position");
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI d(I, 0, 0, "Camera view at desired position");
+    vpDisplayGDI d(I, 0, 0, "Camera view at desired position");
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  vpDisplay::display(I);
-  vpDisplay::displayCharString(I, 10, 10, "Click in the 4 dots to learn their positions", vpColor::red);
-  vpDisplay::flush(I);
-
-  std::vector<vpDot2> dot(4);
-  vpFeaturePoint p[4], pd[4];
-
-  for (int i = 0 ; i < 4 ; i++) {
-    // Compute the desired feature at the desired position
-    dot[i].setGraphics(true);
-    dot[i].setGraphicsThickness(thickness);
-    dot[i].initTracking(I);
-    vpDisplay::flush(I);
-    vpFeatureBuilder::create(pd[i], cam, dot[i].getCog());
-  }
-
-  // Render the scene at the initial position
-  ogre_get_render_image(ogre, background, cMo, I);
-
-  vpDisplay::display(I);
-  vpDisplay::setTitle(I, "Current camera view");
-  vpDisplay::displayCharString(I, 10, 10, "Click in the 4 dots to initialise the tracking and start the servo", vpColor::red);
-  vpDisplay::flush(I);
-
-  for (int i = 0 ; i < 4 ; i++) {
-    // We notice that if we project the scene at a given pose, the pose estimated from
-    // the rendered image differs a little. That's why we cannot simply compute the desired
-    // feature from the desired pose using the next two lines. We will rather compute the
-    // desired position of the features from a learning stage.
-    // point[i].project(cdMo);
-    // vpFeatureBuilder::create(pd[i], point[i]);
-
-    // Compute the current feature at the initial position
-    dot[i].setGraphics(true);
-    dot[i].initTracking(I);
+    vpDisplay::display(I);
+    vpDisplay::displayCharString(I, 10, 10, "Click in the 4 dots to learn their positions", vpColor::red);
     vpDisplay::flush(I);
-    vpFeatureBuilder::create(p[i], cam, dot[i].getCog());
-  }
-
-  for (int i = 0 ; i < 4 ; i++) {
-    // Set the feature Z coordinate from the pose
-    vpColVector cP;
-    point[i].changeFrame(cMo, cP) ;
-    p[i].set_Z(cP[2]);
-
-    task.addFeature(p[i], pd[i]);
-  }
 
-  vpHomogeneousMatrix wMc, wMo;
-  vpSimulatorCamera robot;
-  robot.setSamplingTime(0.040);
-  robot.getPosition(wMc);
-  wMo = wMc * cMo;
+    std::vector<vpDot2> dot(4);
+    vpFeaturePoint p[4], pd[4];
 
-  for (; ; ) {
-    // From the camera position in the world frame we retrieve the object position
-    robot.getPosition(wMc);
-    cMo = wMc.inverse() * wMo;
+    for (int i = 0 ; i < 4 ; i++) {
+      // Compute the desired feature at the desired position
+      dot[i].setGraphics(true);
+      dot[i].setGraphicsThickness(thickness);
+      dot[i].initTracking(I);
+      vpDisplay::flush(I);
+      vpFeatureBuilder::create(pd[i], cam, dot[i].getCog());
+    }
 
-    // Update the scene from the new camera position
+    // Render the scene at the initial position
     ogre_get_render_image(ogre, background, cMo, I);
 
     vpDisplay::display(I);
+    vpDisplay::setTitle(I, "Current camera view");
+    vpDisplay::displayCharString(I, 10, 10, "Click in the 4 dots to initialise the tracking and start the servo", vpColor::red);
+    vpDisplay::flush(I);
 
     for (int i = 0 ; i < 4 ; i++) {
-      dot[i].track(I);
+      // We notice that if we project the scene at a given pose, the pose estimated from
+      // the rendered image differs a little. That's why we cannot simply compute the desired
+      // feature from the desired pose using the next two lines. We will rather compute the
+      // desired position of the features from a learning stage.
+      // point[i].project(cdMo);
+      // vpFeatureBuilder::create(pd[i], point[i]);
+
+      // Compute the current feature at the initial position
+      dot[i].setGraphics(true);
+      dot[i].initTracking(I);
+      vpDisplay::flush(I);
       vpFeatureBuilder::create(p[i], cam, dot[i].getCog());
     }
 
@@ -182,21 +156,59 @@ int main()
       vpColVector cP;
       point[i].changeFrame(cMo, cP) ;
       p[i].set_Z(cP[2]);
+
+      task.addFeature(p[i], pd[i]);
     }
 
-    vpColVector v = task.computeControlLaw();
+    vpHomogeneousMatrix wMc, wMo;
+    vpSimulatorCamera robot;
+    robot.setSamplingTime(0.040);
+    robot.getPosition(wMc);
+    wMo = wMc * cMo;
+
+    for (; ; ) {
+      // From the camera position in the world frame we retrieve the object position
+      robot.getPosition(wMc);
+      cMo = wMc.inverse() * wMo;
 
-    display_trajectory(I, dot, thickness);
-    vpServoDisplay::display(task, cam, I, vpColor::green, vpColor::red, thickness+2) ;
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+      // Update the scene from the new camera position
+      ogre_get_render_image(ogre, background, cMo, I);
 
-    vpDisplay::flush(I);
-    if (vpDisplay::getClick(I, false))
-      break;
+      vpDisplay::display(I);
 
-    vpTime::wait( robot.getSamplingTime() * 1000);
+      for (int i = 0 ; i < 4 ; i++) {
+        dot[i].track(I);
+        vpFeatureBuilder::create(p[i], cam, dot[i].getCog());
+      }
+
+      for (int i = 0 ; i < 4 ; i++) {
+        // Set the feature Z coordinate from the pose
+        vpColVector cP;
+        point[i].changeFrame(cMo, cP) ;
+        p[i].set_Z(cP[2]);
+      }
+
+      vpColVector v = task.computeControlLaw();
+
+      display_trajectory(I, dot, thickness);
+      vpServoDisplay::display(task, cam, I, vpColor::green, vpColor::red, thickness+2) ;
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+
+      vpDisplay::flush(I);
+      if (vpDisplay::getClick(I, false))
+        break;
+
+      vpTime::wait( robot.getSamplingTime() * 1000);
+    }
+    task.kill();
+  }
+  catch(vpException e) {
+    std::cout << "Catch a ViSP exception: " << e << std::endl;
+  }
+  catch(...) {
+    std::cout << "Catch an exception " << std::endl;
+    return 1;
   }
-  task.kill();
 #endif
 }
 
diff --git a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-ogre.cpp b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-ogre.cpp
index 742eb1ce..0328d7ae 100644
--- a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-ogre.cpp
+++ b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-ogre.cpp
@@ -1,4 +1,5 @@
 /*! \example tutorial-ibvs-4pts-ogre.cpp */
+
 #include <visp/vpAROgre.h>
 #include <visp/vpFeatureBuilder.h>
 #include <visp/vpServo.h>
@@ -6,86 +7,94 @@
 
 int main()
 {
-  vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
-  vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
+  try {
+    vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
+    vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
 
-  // Define the target as 4 points
-  vpPoint point[4] ;
-  point[0].setWorldCoordinates(-0.1,-0.1, 0);
-  point[1].setWorldCoordinates( 0.1,-0.1, 0);
-  point[2].setWorldCoordinates( 0.1, 0.1, 0);
-  point[3].setWorldCoordinates(-0.1, 0.1, 0);
+    // Define the target as 4 points
+    vpPoint point[4] ;
+    point[0].setWorldCoordinates(-0.1,-0.1, 0);
+    point[1].setWorldCoordinates( 0.1,-0.1, 0);
+    point[2].setWorldCoordinates( 0.1, 0.1, 0);
+    point[3].setWorldCoordinates(-0.1, 0.1, 0);
 
 #if defined(VISP_HAVE_OGRE)
-  // Color image used as background texture.
-  vpImage<unsigned char> background(480, 640, 255);
+    // Color image used as background texture.
+    vpImage<unsigned char> background(480, 640, 255);
 
-  // Parameters of our camera
-  vpCameraParameters cam(840, 840, background.getWidth()/2, background.getHeight()/2);
+    // Parameters of our camera
+    vpCameraParameters cam(840, 840, background.getWidth()/2, background.getHeight()/2);
 
-  // Our object
-  // A simulator with the camera parameters defined above,
-  // and the background image size
-  vpAROgre ogre;
-  ogre.setShowConfigDialog(false);
-  ogre.setCameraParameters(cam);
-  ogre.addResource("./"); // Add the path to the Sphere.mesh resource
-  ogre.init(background, false, true);
+    // Our object
+    // A simulator with the camera parameters defined above,
+    // and the background image size
+    vpAROgre ogre;
+    ogre.setShowConfigDialog(false);
+    ogre.setCameraParameters(cam);
+    ogre.addResource("./"); // Add the path to the Sphere.mesh resource
+    ogre.init(background, false, true);
 
-  // Create the scene that contains 4 spheres
-  // Sphere.mesh contains a sphere with 1 meter radius
-  std::vector<std::string> name(4);
-  for (int i=0; i<4; i++) {
-    std::ostringstream s; s << "Sphere" <<  i; name[i] = s.str();
-    ogre.load(name[i], "Sphere.mesh");
-    ogre.setScale(name[i], 0.02f, 0.02f, 0.02f); // Rescale the sphere to 2 cm radius
-    // Set the position of each sphere in the object frame
-    ogre.setPosition(name[i], vpTranslationVector(point[i].get_oX(), point[i].get_oY(), point[i].get_oZ()));
-  }
+    // Create the scene that contains 4 spheres
+    // Sphere.mesh contains a sphere with 1 meter radius
+    std::vector<std::string> name(4);
+    for (int i=0; i<4; i++) {
+      std::ostringstream s; s << "Sphere" <<  i; name[i] = s.str();
+      ogre.load(name[i], "Sphere.mesh");
+      ogre.setScale(name[i], 0.02f, 0.02f, 0.02f); // Rescale the sphere to 2 cm radius
+      // Set the position of each sphere in the object frame
+      ogre.setPosition(name[i], vpTranslationVector(point[i].get_oX(), point[i].get_oY(), point[i].get_oZ()));
+    }
 
-  // Add an optional point light source
-  Ogre::Light * light = ogre.getSceneManager()->createLight();
-  light->setDiffuseColour(1, 1, 1); // scaled RGB values
-  light->setSpecularColour(1, 1, 1); // scaled RGB values
-  light->setPosition((Ogre::Real)cdMo[0][3], (Ogre::Real)cdMo[1][3], (Ogre::Real)(-cdMo[2][3]));
-  light->setType(Ogre::Light::LT_POINT);
+    // Add an optional point light source
+    Ogre::Light * light = ogre.getSceneManager()->createLight();
+    light->setDiffuseColour(1, 1, 1); // scaled RGB values
+    light->setSpecularColour(1, 1, 1); // scaled RGB values
+    light->setPosition((Ogre::Real)cdMo[0][3], (Ogre::Real)cdMo[1][3], (Ogre::Real)(-cdMo[2][3]));
+    light->setType(Ogre::Light::LT_POINT);
 #endif
 
-  vpServo task ;
-  task.setServo(vpServo::EYEINHAND_CAMERA);
-  task.setInteractionMatrixType(vpServo::CURRENT);
-  task.setLambda(0.5);
+    vpServo task ;
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::CURRENT);
+    task.setLambda(0.5);
 
-  vpFeaturePoint p[4], pd[4] ;
-  for (int i = 0 ; i < 4 ; i++) {
-    point[i].track(cdMo);
-    vpFeatureBuilder::create(pd[i], point[i]);
-    point[i].track(cMo);
-    vpFeatureBuilder::create(p[i], point[i]);
-    task.addFeature(p[i], pd[i]);
-  }
-
-  vpHomogeneousMatrix wMc, wMo;
-  vpSimulatorCamera robot;
-  robot.setSamplingTime(0.040);
-  robot.getPosition(wMc);
-  wMo = wMc * cMo;
-
-  for (unsigned int iter=0; iter < 150; iter ++) {
-    robot.getPosition(wMc);
-    cMo = wMc.inverse() * wMo;
+    vpFeaturePoint p[4], pd[4] ;
     for (int i = 0 ; i < 4 ; i++) {
+      point[i].track(cdMo);
+      vpFeatureBuilder::create(pd[i], point[i]);
       point[i].track(cMo);
       vpFeatureBuilder::create(p[i], point[i]);
+      task.addFeature(p[i], pd[i]);
     }
+
+    vpHomogeneousMatrix wMc, wMo;
+    vpSimulatorCamera robot;
+    robot.setSamplingTime(0.040);
+    robot.getPosition(wMc);
+    wMo = wMc * cMo;
+
+    for (unsigned int iter=0; iter < 150; iter ++) {
+      robot.getPosition(wMc);
+      cMo = wMc.inverse() * wMo;
+      for (int i = 0 ; i < 4 ; i++) {
+        point[i].track(cMo);
+        vpFeatureBuilder::create(p[i], point[i]);
+      }
 #if defined(VISP_HAVE_OGRE)
-    // Update the scene from the new camera position
-    ogre.display(background, cMo);
+      // Update the scene from the new camera position
+      ogre.display(background, cMo);
 #endif
-    vpColVector v = task.computeControlLaw();
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v);
-    vpTime::wait( robot.getSamplingTime() * 1000);
+      vpColVector v = task.computeControlLaw();
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+      vpTime::wait( robot.getSamplingTime() * 1000);
+    }
+    task.kill();
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
+  catch(...) {
+    std::cout << "Catch an exception " << std::endl;
   }
-  task.kill();
 }
 
diff --git a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-plotter-continuous-gain-adaptive.cpp b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-plotter-continuous-gain-adaptive.cpp
new file mode 100644
index 00000000..beef4d08
--- /dev/null
+++ b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-plotter-continuous-gain-adaptive.cpp
@@ -0,0 +1,102 @@
+/*! \example tutorial-ibvs-4pts-plotter-continuous-gain-adaptive.cpp */
+#include <visp/vpFeatureBuilder.h>
+#include <visp/vpServo.h>
+#include <visp/vpSimulatorCamera.h>
+#include <visp/vpPlot.h>
+
+int main()
+{
+  try {
+    vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
+    vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
+
+    vpPoint point[4] ;
+    point[0].setWorldCoordinates(-0.1,-0.1, 0);
+    point[1].setWorldCoordinates( 0.1,-0.1, 0);
+    point[2].setWorldCoordinates( 0.1, 0.1, 0);
+    point[3].setWorldCoordinates(-0.1, 0.1, 0);
+
+    vpServo task ;
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::CURRENT);
+
+    vpAdaptiveGain lambda(4, 0.4, 30);
+    task.setLambda(lambda);
+
+    vpFeaturePoint p[4], pd[4] ;
+    for (unsigned int i = 0 ; i < 4 ; i++) {
+      point[i].track(cdMo);
+      vpFeatureBuilder::create(pd[i], point[i]);
+      point[i].track(cMo);
+      vpFeatureBuilder::create(p[i], point[i]);
+      task.addFeature(p[i], pd[i]);
+    }
+
+    vpHomogeneousMatrix wMc, wMo;
+    vpSimulatorCamera robot;
+    robot.setSamplingTime(0.040);
+    robot.getPosition(wMc);
+    wMo = wMc * cMo;
+
+#ifdef VISP_HAVE_DISPLAY
+    vpPlot plotter(2, 250*2, 500, 100, 200, "Real time curves plotter");
+    plotter.setTitle(0, "Visual features error");
+    plotter.setTitle(1, "Camera velocities");
+
+    plotter.initGraph(0, 8);
+    plotter.initGraph(1, 6);
+
+    plotter.setLegend(0, 0, "x1");
+    plotter.setLegend(0, 1, "y1");
+    plotter.setLegend(0, 2, "x2");
+    plotter.setLegend(0, 3, "y2");
+    plotter.setLegend(0, 4, "x3");
+    plotter.setLegend(0, 5, "y3");
+    plotter.setLegend(0, 6, "x4");
+    plotter.setLegend(0, 7, "y4");
+
+    plotter.setLegend(1, 0, "v_x");
+    plotter.setLegend(1, 1, "v_y");
+    plotter.setLegend(1, 2, "v_z");
+    plotter.setLegend(1, 3, "w_x");
+    plotter.setLegend(1, 4, "w_y");
+    plotter.setLegend(1, 5, "w_z");
+#endif
+
+    unsigned int iter = 0;
+    while(1) {
+      robot.getPosition(wMc);
+      cMo = wMc.inverse() * wMo;
+      for (unsigned int i = 0 ; i < 4 ; i++) {
+        point[i].track(cMo);
+        vpFeatureBuilder::create(p[i], point[i]);
+      }
+      vpColVector v = task.computeControlLaw(iter*robot.getSamplingTime());
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+
+#ifdef VISP_HAVE_DISPLAY
+      plotter.plot(0, iter, task.getError());
+      plotter.plot(1, iter, v);
+#endif
+      if (( task.getError() ).sumSquare() < 0.0001)
+        break;
+
+      iter++;
+    }
+    std::cout << "Convergence in " << iter << " iterations" << std::endl;
+
+    task.kill();
+
+#ifdef VISP_HAVE_DISPLAY
+    plotter.saveData(0, "error.dat");
+    plotter.saveData(1, "vc.dat");
+
+    vpDisplay::getClick(plotter.I);
+#endif
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
+}
+
+
diff --git a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-plotter-gain-adaptive.cpp b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-plotter-gain-adaptive.cpp
new file mode 100644
index 00000000..d3d0a7b8
--- /dev/null
+++ b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-plotter-gain-adaptive.cpp
@@ -0,0 +1,102 @@
+/*! \example tutorial-ibvs-4pts-plotter-gain-adaptive.cpp */
+#include <visp/vpFeatureBuilder.h>
+#include <visp/vpServo.h>
+#include <visp/vpSimulatorCamera.h>
+#include <visp/vpPlot.h>
+
+int main()
+{
+  try {
+    vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
+    vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
+
+    vpPoint point[4] ;
+    point[0].setWorldCoordinates(-0.1,-0.1, 0);
+    point[1].setWorldCoordinates( 0.1,-0.1, 0);
+    point[2].setWorldCoordinates( 0.1, 0.1, 0);
+    point[3].setWorldCoordinates(-0.1, 0.1, 0);
+
+    vpServo task ;
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::CURRENT);
+
+    vpAdaptiveGain lambda(4, 0.4, 30);
+    task.setLambda(lambda);
+
+    vpFeaturePoint p[4], pd[4] ;
+    for (unsigned int i = 0 ; i < 4 ; i++) {
+      point[i].track(cdMo);
+      vpFeatureBuilder::create(pd[i], point[i]);
+      point[i].track(cMo);
+      vpFeatureBuilder::create(p[i], point[i]);
+      task.addFeature(p[i], pd[i]);
+    }
+
+    vpHomogeneousMatrix wMc, wMo;
+    vpSimulatorCamera robot;
+    robot.setSamplingTime(0.040);
+    robot.getPosition(wMc);
+    wMo = wMc * cMo;
+
+#ifdef VISP_HAVE_DISPLAY
+    vpPlot plotter(2, 250*2, 500, 100, 200, "Real time curves plotter");
+    plotter.setTitle(0, "Visual features error");
+    plotter.setTitle(1, "Camera velocities");
+
+    plotter.initGraph(0, 8);
+    plotter.initGraph(1, 6);
+
+    plotter.setLegend(0, 0, "x1");
+    plotter.setLegend(0, 1, "y1");
+    plotter.setLegend(0, 2, "x2");
+    plotter.setLegend(0, 3, "y2");
+    plotter.setLegend(0, 4, "x3");
+    plotter.setLegend(0, 5, "y3");
+    plotter.setLegend(0, 6, "x4");
+    plotter.setLegend(0, 7, "y4");
+
+    plotter.setLegend(1, 0, "v_x");
+    plotter.setLegend(1, 1, "v_y");
+    plotter.setLegend(1, 2, "v_z");
+    plotter.setLegend(1, 3, "w_x");
+    plotter.setLegend(1, 4, "w_y");
+    plotter.setLegend(1, 5, "w_z");
+#endif
+
+    unsigned int iter = 0;
+    while(1) {
+      robot.getPosition(wMc);
+      cMo = wMc.inverse() * wMo;
+      for (unsigned int i = 0 ; i < 4 ; i++) {
+        point[i].track(cMo);
+        vpFeatureBuilder::create(p[i], point[i]);
+      }
+      vpColVector v = task.computeControlLaw();
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+
+#ifdef VISP_HAVE_DISPLAY
+      plotter.plot(0, iter, task.getError());
+      plotter.plot(1, iter, v);
+#endif
+      if (( task.getError() ).sumSquare() < 0.0001)
+        break;
+
+      iter++;
+    }
+    std::cout << "Convergence in " << iter << " iterations" << std::endl;
+
+    task.kill();
+
+#ifdef VISP_HAVE_DISPLAY
+    plotter.saveData(0, "error.dat");
+    plotter.saveData(1, "vc.dat");
+
+    vpDisplay::getClick(plotter.I);
+#endif
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
+}
+
+
diff --git a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-plotter.cpp b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-plotter.cpp
index 54afccf7..df01839d 100644
--- a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-plotter.cpp
+++ b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-plotter.cpp
@@ -6,84 +6,95 @@
 
 int main()
 {
-  vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
-  vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
-
-  vpPoint point[4] ;
-  point[0].setWorldCoordinates(-0.1,-0.1, 0);
-  point[1].setWorldCoordinates( 0.1,-0.1, 0);
-  point[2].setWorldCoordinates( 0.1, 0.1, 0);
-  point[3].setWorldCoordinates(-0.1, 0.1, 0);
-
-  vpServo task ;
-  task.setServo(vpServo::EYEINHAND_CAMERA);
-  task.setInteractionMatrixType(vpServo::CURRENT);
-  task.setLambda(0.5);
-
-  vpFeaturePoint p[4], pd[4] ;
-  for (int i = 0 ; i < 4 ; i++) {
-    point[i].track(cdMo);
-    vpFeatureBuilder::create(pd[i], point[i]);
-    point[i].track(cMo);
-    vpFeatureBuilder::create(p[i], point[i]);
-    task.addFeature(p[i], pd[i]);
-  }
+  try {
+    vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
+    vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
+
+    vpPoint point[4] ;
+    point[0].setWorldCoordinates(-0.1,-0.1, 0);
+    point[1].setWorldCoordinates( 0.1,-0.1, 0);
+    point[2].setWorldCoordinates( 0.1, 0.1, 0);
+    point[3].setWorldCoordinates(-0.1, 0.1, 0);
+
+    vpServo task ;
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::CURRENT);
+    task.setLambda(0.5);
+
+    vpFeaturePoint p[4], pd[4] ;
+    for (unsigned int i = 0 ; i < 4 ; i++) {
+      point[i].track(cdMo);
+      vpFeatureBuilder::create(pd[i], point[i]);
+      point[i].track(cMo);
+      vpFeatureBuilder::create(p[i], point[i]);
+      task.addFeature(p[i], pd[i]);
+    }
 
-  vpHomogeneousMatrix wMc, wMo;
-  vpSimulatorCamera robot;
-  robot.setSamplingTime(0.040);
-  robot.getPosition(wMc);
-  wMo = wMc * cMo;
+    vpHomogeneousMatrix wMc, wMo;
+    vpSimulatorCamera robot;
+    robot.setSamplingTime(0.040);
+    robot.getPosition(wMc);
+    wMo = wMc * cMo;
 
 #ifdef VISP_HAVE_DISPLAY
-  vpPlot plotter(2, 250*2, 500, 100, 200, "Real time curves plotter");
-  plotter.setTitle(0, "Visual features error");
-  plotter.setTitle(1, "Camera velocities");
-
-  plotter.initGraph(0, 8);
-  plotter.initGraph(1, 6);
-
-  plotter.setLegend(0, 0, "x1");
-  plotter.setLegend(0, 1, "y1");
-  plotter.setLegend(0, 2, "x2");
-  plotter.setLegend(0, 3, "y2");
-  plotter.setLegend(0, 4, "x3");
-  plotter.setLegend(0, 5, "y3");
-  plotter.setLegend(0, 6, "x4");
-  plotter.setLegend(0, 7, "y4");
-
-  plotter.setLegend(1, 0, "v_x");
-  plotter.setLegend(1, 1, "v_y");
-  plotter.setLegend(1, 2, "v_z");
-  plotter.setLegend(1, 3, "w_x");
-  plotter.setLegend(1, 4, "w_y");
-  plotter.setLegend(1, 5, "w_z");
+    vpPlot plotter(2, 250*2, 500, 100, 200, "Real time curves plotter");
+    plotter.setTitle(0, "Visual features error");
+    plotter.setTitle(1, "Camera velocities");
+
+    plotter.initGraph(0, 8);
+    plotter.initGraph(1, 6);
+
+    plotter.setLegend(0, 0, "x1");
+    plotter.setLegend(0, 1, "y1");
+    plotter.setLegend(0, 2, "x2");
+    plotter.setLegend(0, 3, "y2");
+    plotter.setLegend(0, 4, "x3");
+    plotter.setLegend(0, 5, "y3");
+    plotter.setLegend(0, 6, "x4");
+    plotter.setLegend(0, 7, "y4");
+
+    plotter.setLegend(1, 0, "v_x");
+    plotter.setLegend(1, 1, "v_y");
+    plotter.setLegend(1, 2, "v_z");
+    plotter.setLegend(1, 3, "w_x");
+    plotter.setLegend(1, 4, "w_y");
+    plotter.setLegend(1, 5, "w_z");
 #endif
 
-  for (unsigned int iter=0; iter < 150; iter ++) {
-    robot.getPosition(wMc);
-    cMo = wMc.inverse() * wMo;
-    for (int i = 0 ; i < 4 ; i++) {
-      point[i].track(cMo);
-      vpFeatureBuilder::create(p[i], point[i]);
-    }
-    vpColVector v = task.computeControlLaw();
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+    unsigned int iter = 0;
+    while(1) {
+      robot.getPosition(wMc);
+      cMo = wMc.inverse() * wMo;
+      for (unsigned int i = 0 ; i < 4 ; i++) {
+        point[i].track(cMo);
+        vpFeatureBuilder::create(p[i], point[i]);
+      }
+      vpColVector v = task.computeControlLaw();
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
 
 #ifdef VISP_HAVE_DISPLAY
-    plotter.plot(0, iter, task.getError());
-    plotter.plot(1, iter, v);
+      plotter.plot(0, iter, task.getError());
+      plotter.plot(1, iter, v);
 #endif
-  }
+      if (( task.getError() ).sumSquare() < 0.0001)
+        break;
 
-  task.kill();
+      iter++;
+    }
+    std::cout << "Convergence in " << iter << " iterations" << std::endl;
+
+    task.kill();
 
 #ifdef VISP_HAVE_DISPLAY
-  plotter.saveData(0, "error.dat");
-  plotter.saveData(1, "vc.dat");
+    plotter.saveData(0, "error.dat");
+    plotter.saveData(1, "vc.dat");
 
-  vpDisplay::getClick(plotter.I);
+    vpDisplay::getClick(plotter.I);
 #endif
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
 }
 
 
diff --git a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-wireframe-camera.cpp b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-wireframe-camera.cpp
index e9e96e42..af310734 100644
--- a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-wireframe-camera.cpp
+++ b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-wireframe-camera.cpp
@@ -8,6 +8,9 @@
 #include <visp/vpServoDisplay.h>
 #include <visp/vpWireFrameSimulator.h>
 
+void display_trajectory(const vpImage<unsigned char> &I, std::vector<vpPoint> &point,
+                        const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam);
+
 void display_trajectory(const vpImage<unsigned char> &I, std::vector<vpPoint> &point,
                         const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam)
 {
@@ -28,85 +31,90 @@ void display_trajectory(const vpImage<unsigned char> &I, std::vector<vpPoint> &p
 
 int main()
 {
-  vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
-  vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
-
-  std::vector<vpPoint> point(4) ;
-  point[0].setWorldCoordinates(-0.1,-0.1, 0);
-  point[1].setWorldCoordinates( 0.1,-0.1, 0);
-  point[2].setWorldCoordinates( 0.1, 0.1, 0);
-  point[3].setWorldCoordinates(-0.1, 0.1, 0);
-
-  vpServo task ;
-  task.setServo(vpServo::EYEINHAND_CAMERA);
-  task.setInteractionMatrixType(vpServo::CURRENT);
-  task.setLambda(0.5);
-
-  vpFeaturePoint p[4], pd[4] ;
-  for (int i = 0 ; i < 4 ; i++) {
-    point[i].track(cdMo);
-    vpFeatureBuilder::create(pd[i], point[i]);
-    point[i].track(cMo);
-    vpFeatureBuilder::create(p[i], point[i]);
-    task.addFeature(p[i], pd[i]);
-  }
+  try {
+    vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
+    vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
+
+    std::vector<vpPoint> point(4) ;
+    point[0].setWorldCoordinates(-0.1,-0.1, 0);
+    point[1].setWorldCoordinates( 0.1,-0.1, 0);
+    point[2].setWorldCoordinates( 0.1, 0.1, 0);
+    point[3].setWorldCoordinates(-0.1, 0.1, 0);
+
+    vpServo task ;
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::CURRENT);
+    task.setLambda(0.5);
+
+    vpFeaturePoint p[4], pd[4] ;
+    for (unsigned int i = 0 ; i < 4 ; i++) {
+      point[i].track(cdMo);
+      vpFeatureBuilder::create(pd[i], point[i]);
+      point[i].track(cMo);
+      vpFeatureBuilder::create(p[i], point[i]);
+      task.addFeature(p[i], pd[i]);
+    }
 
-  vpHomogeneousMatrix wMc, wMo;
-  vpSimulatorCamera robot;
-  robot.setSamplingTime(0.040);
-  robot.getPosition(wMc);
-  wMo = wMc * cMo;
+    vpHomogeneousMatrix wMc, wMo;
+    vpSimulatorCamera robot;
+    robot.setSamplingTime(0.040);
+    robot.getPosition(wMc);
+    wMo = wMc * cMo;
 
-  vpImage<unsigned char> Iint(480, 640, 0) ;
-  vpImage<unsigned char> Iext(480, 640, 0) ;
+    vpImage<unsigned char> Iint(480, 640, 0) ;
+    vpImage<unsigned char> Iext(480, 640, 0) ;
 #if defined VISP_HAVE_X11
-  vpDisplayX displayInt(Iint, 0, 0, "Internal view");
-  vpDisplayX displayExt(Iext, 670, 0, "External view");
+    vpDisplayX displayInt(Iint, 0, 0, "Internal view");
+    vpDisplayX displayExt(Iext, 670, 0, "External view");
 #elif  defined VISP_HAVE_GDI
-  vpDisplayGDI displayInt(Iint, 0, 0, "Internal view");
-  vpDisplayGDI displayExt(Iext, 670, 0, "External view");
+    vpDisplayGDI displayInt(Iint, 0, 0, "Internal view");
+    vpDisplayGDI displayExt(Iext, 670, 0, "External view");
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  vpCameraParameters cam(840, 840, Iint.getWidth()/2, Iint.getHeight()/2);
-  vpHomogeneousMatrix cextMo(0,0,3, 0,0,0);
-
-  vpWireFrameSimulator sim;
-  sim.initScene(vpWireFrameSimulator::PLATE, vpWireFrameSimulator::D_STANDARD);
-  sim.setCameraPositionRelObj(cMo);
-  sim.setDesiredCameraPosition(cdMo);
-  sim.setExternalCameraPosition(cextMo);
-  sim.setInternalCameraParameters(cam);
-  sim.setExternalCameraParameters(cam);
-
-  while(1) {
-    robot.getPosition(wMc);
-    cMo = wMc.inverse() * wMo;
-    for (int i = 0 ; i < 4 ; i++) {
-      point[i].track(cMo);
-      vpFeatureBuilder::create(p[i], point[i]);
-    }
-    vpColVector v = task.computeControlLaw();
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+    vpCameraParameters cam(840, 840, Iint.getWidth()/2, Iint.getHeight()/2);
+    vpHomogeneousMatrix cextMo(0,0,3, 0,0,0);
 
+    vpWireFrameSimulator sim;
+    sim.initScene(vpWireFrameSimulator::PLATE, vpWireFrameSimulator::D_STANDARD);
     sim.setCameraPositionRelObj(cMo);
-
-    vpDisplay::display(Iint) ;
-    vpDisplay::display(Iext) ;
-
-    sim.getInternalImage(Iint);
-    sim.getExternalImage(Iext);
-
-    display_trajectory(Iint, point, cMo, cam);
-    vpDisplay::flush(Iint);
-    vpDisplay::flush(Iext);
-
-    // A click in the internal view to exit
-    if (vpDisplay::getClick(Iint, false))
-      break;
-    vpTime::wait(1000*robot.getSamplingTime());
+    sim.setDesiredCameraPosition(cdMo);
+    sim.setExternalCameraPosition(cextMo);
+    sim.setInternalCameraParameters(cam);
+    sim.setExternalCameraParameters(cam);
+
+    while(1) {
+      robot.getPosition(wMc);
+      cMo = wMc.inverse() * wMo;
+      for (unsigned int i = 0 ; i < 4 ; i++) {
+        point[i].track(cMo);
+        vpFeatureBuilder::create(p[i], point[i]);
+      }
+      vpColVector v = task.computeControlLaw();
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+
+      sim.setCameraPositionRelObj(cMo);
+
+      vpDisplay::display(Iint) ;
+      vpDisplay::display(Iext) ;
+
+      sim.getInternalImage(Iint);
+      sim.getExternalImage(Iext);
+
+      display_trajectory(Iint, point, cMo, cam);
+      vpDisplay::flush(Iint);
+      vpDisplay::flush(Iext);
+
+      // A click in the internal view to exit
+      if (vpDisplay::getClick(Iint, false))
+        break;
+      vpTime::wait(1000*robot.getSamplingTime());
+    }
+    task.kill();
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
-  task.kill();
 }
 
diff --git a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-wireframe-robot-afma6.cpp b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-wireframe-robot-afma6.cpp
index 590aa309..ab10745d 100644
--- a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-wireframe-robot-afma6.cpp
+++ b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-wireframe-robot-afma6.cpp
@@ -5,10 +5,13 @@
 #include <visp/vpServo.h>
 #include <visp/vpSimulatorAfma6.h>
 
+void display_trajectory(const vpImage<unsigned char> &I, std::vector<vpPoint> &point,
+                        const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam);
+
 void display_trajectory(const vpImage<unsigned char> &I, std::vector<vpPoint> &point,
                         const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam)
 {
-  int thickness = 3;
+  unsigned int thickness = 3;
   static std::vector<vpImagePoint> traj[4];
   vpImagePoint cog;
   for (unsigned int i=0; i<4; i++) {
@@ -27,10 +30,11 @@ void display_trajectory(const vpImage<unsigned char> &I, std::vector<vpPoint> &p
 int main()
 {
 #if defined(VISP_HAVE_PTHREAD)
-  vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
-  vpHomogeneousMatrix cMo(-0.15, 0.1, 1., vpMath::rad(-10), vpMath::rad(10), vpMath::rad(50));
+  try {
+    vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
+    vpHomogeneousMatrix cMo(-0.15, 0.1, 1., vpMath::rad(-10), vpMath::rad(10), vpMath::rad(50));
 
-  /*
+    /*
     Top view of the world frame, the camera frame and the object frame
 
     world, also robot base frame :
@@ -53,102 +57,106 @@ int main()
              c_x <--
 
     */
-  vpHomogeneousMatrix wMo(0, 0, 1., 0, 0, 0);
-
-  std::vector<vpPoint> point(4) ;
-  point[0].setWorldCoordinates(-0.1,-0.1, 0);
-  point[1].setWorldCoordinates( 0.1,-0.1, 0);
-  point[2].setWorldCoordinates( 0.1, 0.1, 0);
-  point[3].setWorldCoordinates(-0.1, 0.1, 0);
-
-  vpServo task ;
-  task.setServo(vpServo::EYEINHAND_CAMERA);
-  task.setInteractionMatrixType(vpServo::CURRENT);
-  task.setLambda(0.5);
-
-  vpFeaturePoint p[4], pd[4] ;
-  for (int i = 0 ; i < 4 ; i++) {
-    point[i].track(cdMo);
-    vpFeatureBuilder::create(pd[i], point[i]);
-    point[i].track(cMo);
-    vpFeatureBuilder::create(p[i], point[i]);
-    task.addFeature(p[i], pd[i]);
-  }
+    vpHomogeneousMatrix wMo(0, 0, 1., 0, 0, 0);
+
+    std::vector<vpPoint> point(4) ;
+    point[0].setWorldCoordinates(-0.1,-0.1, 0);
+    point[1].setWorldCoordinates( 0.1,-0.1, 0);
+    point[2].setWorldCoordinates( 0.1, 0.1, 0);
+    point[3].setWorldCoordinates(-0.1, 0.1, 0);
+
+    vpServo task ;
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::CURRENT);
+    task.setLambda(0.5);
+
+    vpFeaturePoint p[4], pd[4] ;
+    for (unsigned int i = 0 ; i < 4 ; i++) {
+      point[i].track(cdMo);
+      vpFeatureBuilder::create(pd[i], point[i]);
+      point[i].track(cMo);
+      vpFeatureBuilder::create(p[i], point[i]);
+      task.addFeature(p[i], pd[i]);
+    }
 
-  vpSimulatorAfma6 robot(true);
-  robot.setVerbose(true);
+    vpSimulatorAfma6 robot(true);
+    robot.setVerbose(true);
 
-  // Get the default joint limits
-  vpColVector qmin = robot.getJointMin();
-  vpColVector qmax = robot.getJointMax();
+    // Get the default joint limits
+    vpColVector qmin = robot.getJointMin();
+    vpColVector qmax = robot.getJointMax();
 
-  std::cout << "Robot joint limits: " << std::endl;
-  for (unsigned int i=0; i< 3; i ++)
-    std::cout << "Joint " << i << ": min " << qmin[i] << " max " << qmax[i] << " (m)" << std::endl;
-  for (unsigned int i=3; i< qmin.size(); i ++)
-    std::cout << "Joint " << i << ": min " << vpMath::deg(qmin[i]) << " max " << vpMath::deg(qmax[i]) << " (deg)" << std::endl;
+    std::cout << "Robot joint limits: " << std::endl;
+    for (unsigned int i=0; i< 3; i ++)
+      std::cout << "Joint " << i << ": min " << qmin[i] << " max " << qmax[i] << " (m)" << std::endl;
+    for (unsigned int i=3; i< qmin.size(); i ++)
+      std::cout << "Joint " << i << ": min " << vpMath::deg(qmin[i]) << " max " << vpMath::deg(qmax[i]) << " (deg)" << std::endl;
 
-  robot.init(vpAfma6::TOOL_CCMOP, vpCameraParameters::perspectiveProjWithoutDistortion);
-  robot.setRobotState(vpRobot::STATE_VELOCITY_CONTROL);
-  robot.initScene(vpWireFrameSimulator::PLATE, vpWireFrameSimulator::D_STANDARD);
-  robot.set_fMo(wMo);
-  bool ret = true;
+    robot.init(vpAfma6::TOOL_CCMOP, vpCameraParameters::perspectiveProjWithoutDistortion);
+    robot.setRobotState(vpRobot::STATE_VELOCITY_CONTROL);
+    robot.initScene(vpWireFrameSimulator::PLATE, vpWireFrameSimulator::D_STANDARD);
+    robot.set_fMo(wMo);
+    bool ret = true;
 #if VISP_VERSION_INT > VP_VERSION_INT(2,7,0)
-  ret =
-#endif
-  robot.initialiseCameraRelativeToObject(cMo);
-  if (ret == false)
-    return 0; // Not able to set the position
-  robot.setDesiredCameraPosition(cdMo);
-
-  vpImage<unsigned char> Iint(480, 640, 255);
+    ret =
+    #endif
+        robot.initialiseCameraRelativeToObject(cMo);
+    if (ret == false)
+      return 0; // Not able to set the position
+    robot.setDesiredCameraPosition(cdMo);
+
+    vpImage<unsigned char> Iint(480, 640, 255);
 #if defined(VISP_HAVE_X11)
-  vpDisplayX displayInt(Iint, 700, 0, "Internal view");
+    vpDisplayX displayInt(Iint, 700, 0, "Internal view");
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI displayInt(Iint, 700, 0, "Internal view");
+    vpDisplayGDI displayInt(Iint, 700, 0, "Internal view");
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  vpCameraParameters cam(840, 840, Iint.getWidth()/2, Iint.getHeight()/2);
-  robot.setCameraParameters(cam);
-
-  bool start = true;
-  for ( ; ; )
-  {
-    cMo = robot.get_cMo();
-
-    for (int i = 0 ; i < 4 ; i++) {
-      point[i].track(cMo);
-      vpFeatureBuilder::create(p[i], point[i]);
-    }
+    vpCameraParameters cam(840, 840, Iint.getWidth()/2, Iint.getHeight()/2);
+    robot.setCameraParameters(cam);
+
+    bool start = true;
+    for ( ; ; )
+    {
+      cMo = robot.get_cMo();
+
+      for (unsigned int i = 0 ; i < 4 ; i++) {
+        point[i].track(cMo);
+        vpFeatureBuilder::create(p[i], point[i]);
+      }
+
+      vpDisplay::display(Iint);
+      robot.getInternalView(Iint);
+      if (!start) {
+        display_trajectory(Iint, point, cMo, cam);
+        vpDisplay::displayCharString(Iint, 40, 120, "Click to stop the servo...", vpColor::red);
+      }
+      vpDisplay::flush(Iint);
 
-    vpDisplay::display(Iint);
-    robot.getInternalView(Iint);
-    if (!start) {
-      display_trajectory(Iint, point, cMo, cam);
-      vpDisplay::displayCharString(Iint, 40, 120, "Click to stop the servo...", vpColor::red);
-    }
-    vpDisplay::flush(Iint);
+      vpColVector v = task.computeControlLaw();
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
 
-    vpColVector v = task.computeControlLaw();
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+      // A click to exit
+      if (vpDisplay::getClick(Iint, false))
+        break;
 
-    // A click to exit
-    if (vpDisplay::getClick(Iint, false))
-      break;
+      if (start) {
+        start = false;
+        v = 0;
+        robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+        vpDisplay::displayCharString(Iint, 40, 120, "Click to start the servo...", vpColor::blue);
+        vpDisplay::flush(Iint);
+        vpDisplay::getClick(Iint);
+      }
 
-    if (start) {
-      start = false;
-      v = 0;
-      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
-      vpDisplay::displayCharString(Iint, 40, 120, "Click to start the servo...", vpColor::blue);
-      vpDisplay::flush(Iint);
-      vpDisplay::getClick(Iint);
+      vpTime::wait(1000*robot.getSamplingTime());
     }
-
-    vpTime::wait(1000*robot.getSamplingTime());
+    task.kill();
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
-  task.kill();
 #endif
 }
diff --git a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-wireframe-robot-viper.cpp b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-wireframe-robot-viper.cpp
index f0a3b377..3ad11475 100644
--- a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-wireframe-robot-viper.cpp
+++ b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts-wireframe-robot-viper.cpp
@@ -5,10 +5,13 @@
 #include <visp/vpServo.h>
 #include <visp/vpSimulatorViper850.h>
 
+void display_trajectory(const vpImage<unsigned char> &I, std::vector<vpPoint> &point,
+                        const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam);
+
 void display_trajectory(const vpImage<unsigned char> &I, std::vector<vpPoint> &point,
                         const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam)
 {
-  int thickness = 3;
+  unsigned int thickness = 3;
   static std::vector<vpImagePoint> traj[4];
   vpImagePoint cog;
   for (unsigned int i=0; i<4; i++) {
@@ -27,11 +30,11 @@ void display_trajectory(const vpImage<unsigned char> &I, std::vector<vpPoint> &p
 int main()
 {
 #if defined(VISP_HAVE_PTHREAD)
+  try {
+    vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
+    vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
 
-  vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
-  vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
-
-  /*
+    /*
     Top view of the world frame, the camera frame and the object frame
 
     world, also robot base frame :  --> w_y
@@ -53,114 +56,118 @@ int main()
              c_x <--
 
     */
-  vpHomogeneousMatrix wMo(vpTranslationVector(0.40, 0, -0.15),
-                          vpRotationMatrix(vpRxyzVector(-M_PI, 0, M_PI/2.)));
-
-  std::vector<vpPoint> point(4) ;
-  point[0].setWorldCoordinates(-0.1,-0.1, 0);
-  point[1].setWorldCoordinates( 0.1,-0.1, 0);
-  point[2].setWorldCoordinates( 0.1, 0.1, 0);
-  point[3].setWorldCoordinates(-0.1, 0.1, 0);
-
-  vpServo task ;
-  task.setServo(vpServo::EYEINHAND_CAMERA);
-  task.setInteractionMatrixType(vpServo::CURRENT);
-  task.setLambda(0.5);
-
-  vpFeaturePoint p[4], pd[4] ;
-  for (int i = 0 ; i < 4 ; i++) {
-    point[i].track(cdMo);
-    vpFeatureBuilder::create(pd[i], point[i]);
-    point[i].track(cMo);
-    vpFeatureBuilder::create(p[i], point[i]);
-    task.addFeature(p[i], pd[i]);
-  }
+    vpHomogeneousMatrix wMo(vpTranslationVector(0.40, 0, -0.15),
+                            vpRotationMatrix(vpRxyzVector(-M_PI, 0, M_PI/2.)));
+
+    std::vector<vpPoint> point(4) ;
+    point[0].setWorldCoordinates(-0.1,-0.1, 0);
+    point[1].setWorldCoordinates( 0.1,-0.1, 0);
+    point[2].setWorldCoordinates( 0.1, 0.1, 0);
+    point[3].setWorldCoordinates(-0.1, 0.1, 0);
+
+    vpServo task ;
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::CURRENT);
+    task.setLambda(0.5);
+
+    vpFeaturePoint p[4], pd[4] ;
+    for (unsigned int i = 0 ; i < 4 ; i++) {
+      point[i].track(cdMo);
+      vpFeatureBuilder::create(pd[i], point[i]);
+      point[i].track(cMo);
+      vpFeatureBuilder::create(p[i], point[i]);
+      task.addFeature(p[i], pd[i]);
+    }
 
-  vpSimulatorViper850 robot(true);
-  robot.setVerbose(true);
-
-  // Enlarge the default joint limits
-  vpColVector qmin = robot.getJointMin();
-  vpColVector qmax = robot.getJointMax();
-  qmin[0] = -vpMath::rad(180);
-  qmax[0] =  vpMath::rad(180);
-  qmax[1] =  vpMath::rad(0);
-  qmax[2] =  vpMath::rad(270);
-  qmin[4] = -vpMath::rad(180);
-  qmax[4] =  vpMath::rad(180);
-
-  robot.setJointLimit(qmin, qmax);
-
-  std::cout << "Robot joint limits: " << std::endl;
-  for (unsigned int i=0; i< qmin.size(); i ++)
-    std::cout << "Joint " << i << ": min " << vpMath::deg(qmin[i]) << " max " << vpMath::deg(qmax[i]) << " (deg)" << std::endl;
-
-  robot.init(vpViper850::TOOL_PTGREY_FLEA2_CAMERA, vpCameraParameters::perspectiveProjWithoutDistortion);
-  robot.setRobotState(vpRobot::STATE_VELOCITY_CONTROL);
-  robot.initScene(vpWireFrameSimulator::PLATE, vpWireFrameSimulator::D_STANDARD);
-  robot.set_fMo(wMo);
-  bool ret = true;
+    vpSimulatorViper850 robot(true);
+    robot.setVerbose(true);
+
+    // Enlarge the default joint limits
+    vpColVector qmin = robot.getJointMin();
+    vpColVector qmax = robot.getJointMax();
+    qmin[0] = -vpMath::rad(180);
+    qmax[0] =  vpMath::rad(180);
+    qmax[1] =  vpMath::rad(0);
+    qmax[2] =  vpMath::rad(270);
+    qmin[4] = -vpMath::rad(180);
+    qmax[4] =  vpMath::rad(180);
+
+    robot.setJointLimit(qmin, qmax);
+
+    std::cout << "Robot joint limits: " << std::endl;
+    for (unsigned int i=0; i< qmin.size(); i ++)
+      std::cout << "Joint " << i << ": min " << vpMath::deg(qmin[i]) << " max " << vpMath::deg(qmax[i]) << " (deg)" << std::endl;
+
+    robot.init(vpViper850::TOOL_PTGREY_FLEA2_CAMERA, vpCameraParameters::perspectiveProjWithoutDistortion);
+    robot.setRobotState(vpRobot::STATE_VELOCITY_CONTROL);
+    robot.initScene(vpWireFrameSimulator::PLATE, vpWireFrameSimulator::D_STANDARD);
+    robot.set_fMo(wMo);
+    bool ret = true;
 #if VISP_VERSION_INT > VP_VERSION_INT(2,7,0)
-  ret =
-#endif
-  robot.initialiseCameraRelativeToObject(cMo);
-  if (ret == false)
-    return 0; // Not able to set the position
-  robot.setDesiredCameraPosition(cdMo);
-  // We modify the default external camera position
-  robot.setExternalCameraPosition(vpHomogeneousMatrix(vpTranslationVector(-0.4, 0.4, 2),
-                                                      vpRotationMatrix(vpRxyzVector(M_PI/2,0,0))));
-
-  vpImage<unsigned char> Iint(480, 640, 255);
+    ret =
+    #endif
+        robot.initialiseCameraRelativeToObject(cMo);
+    if (ret == false)
+      return 0; // Not able to set the position
+    robot.setDesiredCameraPosition(cdMo);
+    // We modify the default external camera position
+    robot.setExternalCameraPosition(vpHomogeneousMatrix(vpTranslationVector(-0.4, 0.4, 2),
+                                                        vpRotationMatrix(vpRxyzVector(M_PI/2,0,0))));
+
+    vpImage<unsigned char> Iint(480, 640, 255);
 #if defined(VISP_HAVE_X11)
-  vpDisplayX displayInt(Iint, 700, 0, "Internal view");
+    vpDisplayX displayInt(Iint, 700, 0, "Internal view");
 #elif defined(VISP_HAVE_GDI)
-  vpDisplayGDI displayInt(Iint, 700, 0, "Internal view");
+    vpDisplayGDI displayInt(Iint, 700, 0, "Internal view");
 #else
-  std::cout << "No image viewer is available..." << std::endl;
+    std::cout << "No image viewer is available..." << std::endl;
 #endif
 
-  vpCameraParameters cam(840, 840, Iint.getWidth()/2, Iint.getHeight()/2);
-  // Modify the camera parameters to match those used in the other simulations
-  robot.setCameraParameters(cam);
-
-  bool start = true;
-  //for ( ; ; )
-  for (int iter =0; iter < 275; iter ++)
-  {
-    cMo = robot.get_cMo();
-
-    for (int i = 0 ; i < 4 ; i++) {
-      point[i].track(cMo);
-      vpFeatureBuilder::create(p[i], point[i]);
-    }
+    vpCameraParameters cam(840, 840, Iint.getWidth()/2, Iint.getHeight()/2);
+    // Modify the camera parameters to match those used in the other simulations
+    robot.setCameraParameters(cam);
+
+    bool start = true;
+    //for ( ; ; )
+    for (int iter =0; iter < 275; iter ++)
+    {
+      cMo = robot.get_cMo();
+
+      for (unsigned int i = 0 ; i < 4 ; i++) {
+        point[i].track(cMo);
+        vpFeatureBuilder::create(p[i], point[i]);
+      }
+
+      vpDisplay::display(Iint);
+      robot.getInternalView(Iint);
+      if (!start) {
+        display_trajectory(Iint, point, cMo, cam);
+        vpDisplay::displayCharString(Iint, 40, 120, "Click to stop the servo...", vpColor::red);
+      }
+      vpDisplay::flush(Iint);
 
-    vpDisplay::display(Iint);
-    robot.getInternalView(Iint);
-    if (!start) {
-      display_trajectory(Iint, point, cMo, cam);
-      vpDisplay::displayCharString(Iint, 40, 120, "Click to stop the servo...", vpColor::red);
-    }
-    vpDisplay::flush(Iint);
+      vpColVector v = task.computeControlLaw();
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
 
-    vpColVector v = task.computeControlLaw();
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+      // A click to exit
+      if (vpDisplay::getClick(Iint, false))
+        break;
 
-    // A click to exit
-    if (vpDisplay::getClick(Iint, false))
-      break;
+      if (start) {
+        start = false;
+        v = 0;
+        robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+        vpDisplay::displayCharString(Iint, 40, 120, "Click to start the servo...", vpColor::blue);
+        vpDisplay::flush(Iint);
+        //vpDisplay::getClick(Iint);
+      }
 
-    if (start) {
-      start = false;
-      v = 0;
-      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
-      vpDisplay::displayCharString(Iint, 40, 120, "Click to start the servo...", vpColor::blue);
-      vpDisplay::flush(Iint);
-      //vpDisplay::getClick(Iint);
+      vpTime::wait(1000*robot.getSamplingTime());
     }
-
-    vpTime::wait(1000*robot.getSamplingTime());
+    task.kill();
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
   }
-  task.kill();
 #endif
 }
diff --git a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts.cpp b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts.cpp
index 0ecad7c9..1d676a72 100644
--- a/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts.cpp
+++ b/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts.cpp
@@ -5,47 +5,52 @@
 
 int main()
 {
-  vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
-  vpHomogeneousMatrix cMo(0.15, -0.1, 1.,
-                          vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
-
-  vpPoint point[4] ;
-  point[0].setWorldCoordinates(-0.1,-0.1, 0);
-  point[1].setWorldCoordinates( 0.1,-0.1, 0);
-  point[2].setWorldCoordinates( 0.1, 0.1, 0);
-  point[3].setWorldCoordinates(-0.1, 0.1, 0);
-
-  vpServo task ;
-  task.setServo(vpServo::EYEINHAND_CAMERA);
-  task.setInteractionMatrixType(vpServo::CURRENT);
-  task.setLambda(0.5);
-
-  vpFeaturePoint p[4], pd[4] ;
-  for (int i = 0 ; i < 4 ; i++) {
-    point[i].track(cdMo);
-    vpFeatureBuilder::create(pd[i], point[i]);
-    point[i].track(cMo);
-    vpFeatureBuilder::create(p[i], point[i]);
-    task.addFeature(p[i], pd[i]);
-  }
-
-  vpHomogeneousMatrix wMc, wMo;
-  vpSimulatorCamera robot;
-  robot.setSamplingTime(0.040);
-  robot.getPosition(wMc);
-  wMo = wMc * cMo;
-
-  for (unsigned int iter=0; iter < 150; iter ++) {
-    robot.getPosition(wMc);
-    cMo = wMc.inverse() * wMo;
-    for (int i = 0 ; i < 4 ; i++) {
+  try {
+    vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
+    vpHomogeneousMatrix cMo(0.15, -0.1, 1.,
+                            vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));
+
+    vpPoint point[4] ;
+    point[0].setWorldCoordinates(-0.1,-0.1, 0);
+    point[1].setWorldCoordinates( 0.1,-0.1, 0);
+    point[2].setWorldCoordinates( 0.1, 0.1, 0);
+    point[3].setWorldCoordinates(-0.1, 0.1, 0);
+
+    vpServo task ;
+    task.setServo(vpServo::EYEINHAND_CAMERA);
+    task.setInteractionMatrixType(vpServo::CURRENT);
+    task.setLambda(0.5);
+
+    vpFeaturePoint p[4], pd[4] ;
+    for (unsigned int i = 0 ; i < 4 ; i++) {
+      point[i].track(cdMo);
+      vpFeatureBuilder::create(pd[i], point[i]);
       point[i].track(cMo);
       vpFeatureBuilder::create(p[i], point[i]);
+      task.addFeature(p[i], pd[i]);
     }
-    vpColVector v = task.computeControlLaw();
-    robot.setVelocity(vpRobot::CAMERA_FRAME, v);
-  }
 
-  task.kill();
+    vpHomogeneousMatrix wMc, wMo;
+    vpSimulatorCamera robot;
+    robot.setSamplingTime(0.040);
+    robot.getPosition(wMc);
+    wMo = wMc * cMo;
+
+    for (unsigned int iter=0; iter < 150; iter ++) {
+      robot.getPosition(wMc);
+      cMo = wMc.inverse() * wMo;
+      for (unsigned int i = 0 ; i < 4 ; i++) {
+        point[i].track(cMo);
+        vpFeatureBuilder::create(p[i], point[i]);
+      }
+      vpColVector v = task.computeControlLaw();
+      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
+    }
+
+    task.kill();
+  }
+  catch(vpException e) {
+    std::cout << "Catch an exception: " << e << std::endl;
+  }
 }
 
-- 
GitLab