gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r33741 - in gnunet-qt/SecureShare: . 3rdParty 3rdParty/qzxi


From: gnunet
Subject: [GNUnet-SVN] r33741 - in gnunet-qt/SecureShare: . 3rdParty 3rdParty/qzxing 3rdParty/qzxing/debian 3rdParty/qzxing/debian/source 3rdParty/qzxing/zxing 3rdParty/qzxing/zxing/aztec 3rdParty/qzxing/zxing/aztec/decoder 3rdParty/qzxing/zxing/aztec/detector 3rdParty/qzxing/zxing/common 3rdParty/qzxing/zxing/common/detector 3rdParty/qzxing/zxing/common/reedsolomon 3rdParty/qzxing/zxing/datamatrix 3rdParty/qzxing/zxing/datamatrix/decoder 3rdParty/qzxing/zxing/datamatrix/detector 3rdParty/qzxing/zxing/multi 3rdParty/qzxing/zxing/multi/qrcode 3rdParty/qzxing/zxing/multi/qrcode/detector 3rdParty/qzxing/zxing/oned 3rdParty/qzxing/zxing/qrcode 3rdParty/qzxing/zxing/qrcode/decoder 3rdParty/qzxing/zxing/qrcode/detector qml
Date: Sat, 21 Jun 2014 01:46:12 +0200

Author: bratao
Date: 2014-06-21 01:46:12 +0200 (Sat, 21 Jun 2014)
New Revision: 33741

Added:
   gnunet-qt/SecureShare/3rdParty/
   gnunet-qt/SecureShare/3rdParty/qzxing/
   gnunet-qt/SecureShare/3rdParty/qzxing/.gitignore
   gnunet-qt/SecureShare/3rdParty/qzxing/CameraImageWrapper.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/CameraImageWrapper.h
   gnunet-qt/SecureShare/3rdParty/qzxing/QZXing.pro
   gnunet-qt/SecureShare/3rdParty/qzxing/QZXing.pro.user
   gnunet-qt/SecureShare/3rdParty/qzxing/README.md
   gnunet-qt/SecureShare/3rdParty/qzxing/debian/
   gnunet-qt/SecureShare/3rdParty/qzxing/debian/changelog
   gnunet-qt/SecureShare/3rdParty/qzxing/debian/compat
   gnunet-qt/SecureShare/3rdParty/qzxing/debian/control
   gnunet-qt/SecureShare/3rdParty/qzxing/debian/copyright
   gnunet-qt/SecureShare/3rdParty/qzxing/debian/rules
   gnunet-qt/SecureShare/3rdParty/qzxing/debian/source/
   gnunet-qt/SecureShare/3rdParty/qzxing/debian/source/format
   gnunet-qt/SecureShare/3rdParty/qzxing/plugins.qmltypes
   gnunet-qt/SecureShare/3rdParty/qzxing/qmldir
   gnunet-qt/SecureShare/3rdParty/qzxing/qzxing.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/qzxing.h
   gnunet-qt/SecureShare/3rdParty/qzxing/qzxing_global.h
   gnunet-qt/SecureShare/3rdParty/qzxing/qzxing_plugin.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/qzxing_plugin.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BarcodeFormat.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BarcodeFormat.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Binarizer.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Binarizer.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BinaryBitmap.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BinaryBitmap.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/DecodeHints.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/DecodeHints.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Exception.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Exception.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/FormatException.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/FormatException.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/LuminanceSource.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/LuminanceSource.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/MultiFormatReader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/MultiFormatReader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/NotFoundException.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/NotFoundException.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Reader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Reader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ReaderException.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ReaderException.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Result.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Result.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPoint.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPoint.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPointCallback.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPointCallback.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecDetectorResult.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecDetectorResult.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecReader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecReader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/decoder/
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/decoder/AztecDecoder.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/decoder/Decoder.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/detector/
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/detector/AztecDetector.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/detector/Detector.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Array.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Array.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitArray.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitArray.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitMatrix.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitMatrix.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitSource.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitSource.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/CharacterSetECI.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/CharacterSetECI.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Counted.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Counted.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DecoderResult.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DecoderResult.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DetectorResult.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DetectorResult.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/EdgeDetector.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/EdgeDetector.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GlobalHistogramBinarizer.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GlobalHistogramBinarizer.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleLuminanceSource.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleLuminanceSource.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleRotatedLuminanceSource.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleRotatedLuminanceSource.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GridSampler.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GridSampler.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/HybridBinarizer.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/HybridBinarizer.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/IllegalArgumentException.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/IllegalArgumentException.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/PerspectiveTransform.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/PerspectiveTransform.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Point.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Str.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Str.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/StringUtils.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/StringUtils.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/MonochromeRectangleDetector.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/MonochromeRectangleDetector.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/WhiteRectangleDetector.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/WhiteRectangleDetector.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGF.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGF.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGFPoly.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGFPoly.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonDecoder.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonDecoder.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonException.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonException.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/DataMatrixReader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/DataMatrixReader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/DataMatrixVersion.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/Version.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/BitMatrixParser.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataBlock.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixBitMatrixParser.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixDataBlock.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixDecodedBitStreamParser.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixDecoder.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DecodedBitStreamParser.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/Decoder.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/CornerPoint.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixCornerPoint.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixDetector.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixDetectorException.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixMonochromeRectangleDetector.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/Detector.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DetectorException.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/MonochromeRectangleDetector.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/ByQuadrantReader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/ByQuadrantReader.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/GenericMultipleBarcodeReader.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/GenericMultipleBarcodeReader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/MultipleBarcodeReader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/MultipleBarcodeReader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/QRCodeMultiReader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/QRCodeMultiReader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiDetector.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiDetector.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiFinderPatternFinder.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiFinderPatternFinder.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code128Reader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code128Reader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code39Reader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code39Reader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN13Reader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN13Reader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN8Reader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN8Reader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/ITFReader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/ITFReader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatOneDReader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatOneDReader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatUPCEANReader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatUPCEANReader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDReader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDReader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDResultPoint.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDResultPoint.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCAReader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCAReader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEANReader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEANReader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEReader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEReader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/ErrorCorrectionLevel.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/FormatInformation.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRCodeReader.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRCodeReader.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRErrorCorrectionLevel.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRFormatInformation.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRVersion.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/Version.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/BitMatrixParser.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/DataBlock.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/DataMask.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/DecodedBitStreamParser.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/Decoder.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/Mode.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRBitMatrixParser.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDataBlock.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDataMask.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDecodedBitStreamParser.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDecoder.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRMode.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/AlignmentPattern.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/AlignmentPatternFinder.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/Detector.h
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/FinderPattern.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/FinderPatternFinder.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/FinderPatternInfo.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRAlignmentPattern.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRAlignmentPatternFinder.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRDetector.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QREdgeDetector.cpp
   gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QREdgeDetector.h
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRFinderPattern.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRFinderPatternFinder.cpp
   
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRFinderPatternInfo.cpp
   gnunet-qt/SecureShare/qml/QrReader.qml
Modified:
   gnunet-qt/SecureShare/SecureShare.pro
   gnunet-qt/SecureShare/qml.qrc
   gnunet-qt/SecureShare/qml/main.qml
Log:
Start implementing QR reader

Added: gnunet-qt/SecureShare/3rdParty/qzxing/.gitignore
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/.gitignore                            
(rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/.gitignore    2014-06-20 23:46:12 UTC 
(rev 33741)
@@ -0,0 +1,8 @@
+.moc
+.obj
+Makefile
+debian/files
+debian/qtdeclarative5-qzxing-plugin*
+*.pro.user
+*.so
+*~

Added: gnunet-qt/SecureShare/3rdParty/qzxing/CameraImageWrapper.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/CameraImageWrapper.cpp                
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/CameraImageWrapper.cpp        
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,146 @@
+#include "CameraImageWrapper.h"
+#include <QColor>
+#include <QApplication>
+#include <QDesktopWidget>
+
+CameraImageWrapper::CameraImageWrapper() : LuminanceSource(), 
isSmoothTransformationEnabled(false)
+{
+}
+
+CameraImageWrapper::CameraImageWrapper(QImage& image) : LuminanceSource() , 
isSmoothTransformationEnabled(false)
+{
+    setImage(image);
+}
+
+CameraImageWrapper::CameraImageWrapper(CameraImageWrapper& otherInstance) : 
LuminanceSource() , isSmoothTransformationEnabled(false)
+{
+    image = otherInstance.getOriginalImage().copy();
+}
+
+CameraImageWrapper::~CameraImageWrapper()
+{
+}
+
+int CameraImageWrapper::getWidth() const
+{
+    return image.width();
+}
+
+int CameraImageWrapper::getHeight() const
+{
+    return image.height();
+}
+
+unsigned char CameraImageWrapper::getPixel(int x, int y) const
+{
+    QRgb pixel = image.pixel(x,y);
+
+    return qGray(pixel);//((qRed(pixel) + qGreen(pixel) + qBlue(pixel)) / 3);
+}
+
+unsigned char* CameraImageWrapper::copyMatrix() const
+{
+    unsigned char* newMatrix = (unsigned 
char*)malloc(image.width()*image.height()*sizeof(unsigned char));
+
+    int cnt = 0;
+    for(int i=0; i<image.width(); i++)
+    {
+        for(int j=0; j<image.height(); j++)
+        {
+            newMatrix[cnt++] = getPixel(i,j);
+        }
+    }
+
+    return newMatrix;
+}
+
+bool CameraImageWrapper::setImage(QString fileName)
+{
+    bool isLoaded = image.load(fileName);
+
+    if(!isLoaded)
+        return false;
+
+    if(image.width() > QApplication::desktop()->width())
+        image = image.scaled(QApplication::desktop()->width(), image.height(), 
Qt::IgnoreAspectRatio);
+
+    if(image.height() > QApplication::desktop()->height())
+        image = image.scaled(image.width(), QApplication::desktop()->height(), 
Qt::IgnoreAspectRatio);
+    return true;
+}
+
+bool CameraImageWrapper::setImage(QImage newImage)
+{
+    if(newImage.isNull())
+        return false;
+
+    image = newImage.copy();
+
+    if(image.width() > 640)
+        image = image.scaled(640, image.height(), Qt::KeepAspectRatio, 
isSmoothTransformationEnabled ? Qt::SmoothTransformation : 
Qt::FastTransformation);
+    return true;
+}
+
+QImage CameraImageWrapper::grayScaleImage(QImage::Format f)
+{
+    QImage tmp(image.width(), image.height(), f);
+    for(int i=0; i<image.width(); i++)
+    {
+        for(int j=0; j<image.height(); j++)
+        {
+            int pix = (int)getPixel(i,j);
+            tmp.setPixel(i,j, qRgb(pix ,pix,pix));
+        }
+    }
+
+    return tmp;
+
+    //return image.convertToFormat(f);
+}
+
+QImage CameraImageWrapper::getOriginalImage()
+{
+    return image;
+}
+
+
+unsigned char* CameraImageWrapper::getRow(int y, unsigned char* row)
+{
+    int width = getWidth();
+
+    if (row == NULL)
+    {
+        row = new unsigned char[width];
+        pRow = row;
+    }
+
+    for (int x = 0; x < width; x++)
+        row[x] = getPixel(x,y);
+
+    return row;
+}
+
+unsigned char* CameraImageWrapper::getMatrix()
+{
+    int width = getWidth();
+    int height =  getHeight();
+    unsigned char* matrix = new unsigned char[width*height];
+    unsigned char* m = matrix;
+
+    for(int y=0; y<height; y++)
+    {
+        unsigned char* tmpRow;
+        memcpy(m, tmpRow = getRow(y, NULL), width);
+        m += width * sizeof(unsigned char);
+
+        delete tmpRow;
+    }
+
+    pMatrix = matrix;
+    return matrix;
+}
+
+void CameraImageWrapper::setSmoothTransformation(bool enable)
+{
+    isSmoothTransformationEnabled = enable;
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/CameraImageWrapper.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/CameraImageWrapper.h                  
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/CameraImageWrapper.h  2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,47 @@
+#ifndef CAMERAIMAGE_H
+#define CAMERAIMAGE_H
+
+#include <QImage>
+#include <QString>
+#include <zxing/LuminanceSource.h>
+
+using namespace zxing;
+
+class CameraImageWrapper : public LuminanceSource
+{
+public:
+    CameraImageWrapper();
+    CameraImageWrapper(QImage& image);
+    CameraImageWrapper(CameraImageWrapper& otherInstance);
+    ~CameraImageWrapper();
+    
+    int getWidth() const;
+    int getHeight() const;
+    
+    unsigned char getPixel(int x, int y) const;
+    unsigned char* copyMatrix() const;
+    
+    /**
+      * Set the source of the image. If it fails,  returns false.
+      */
+    bool setImage(QString fileName);
+    bool setImage(QImage newImage);
+
+    QImage grayScaleImage(QImage::Format f);
+    QImage getOriginalImage();
+
+
+    // Callers take ownership of the returned memory and must call delete [] 
on it themselves.
+    unsigned char* getRow(int y, unsigned char* row);
+    unsigned char* getMatrix();
+
+    void setSmoothTransformation(bool enable);
+  
+private:
+    QImage image;
+    unsigned char* pRow;
+    unsigned char* pMatrix;
+    bool isSmoothTransformationEnabled;
+};
+
+#endif //CAMERAIMAGE_H

Added: gnunet-qt/SecureShare/3rdParty/qzxing/QZXing.pro
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/QZXing.pro                            
(rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/QZXing.pro    2014-06-20 23:46:12 UTC 
(rev 33741)
@@ -0,0 +1,235 @@
+TEMPLATE = lib
+TARGET = QZXing
+QT += qml quick widgets
+CONFIG += qt plugin
+
+TARGET = $$qtLibraryTarget($$TARGET)
+# This defines where the plugin will be installed relative to the
+# QML installation directory and can be of the form com.mycompany.qmlcomponents
+uri = QZXing
+
+QZXING_PLUGIN_VERSION_MAJOR = 1
+QZXING_PLUGIN_VERSION_MINOR = 3
+
+LIBS += -liconv
+
+DEFINES += \
+    QZXING_LIBRARY \
+    ZXING_ICONV_CONST \
+    NOFMAXL \
+    "QZXING_PLUGIN_VERSION_MAJOR=$$QZXING_PLUGIN_VERSION_MAJOR" \
+    "QZXING_PLUGIN_VERSION_MINOR=$$QZXING_PLUGIN_VERSION_MINOR"
+
+HEADERS += \
+    CameraImageWrapper.h \
+    qzxing.h \
+    qzxing_plugin.h \
+    qzxing_global.h \
+    zxing/ResultPointCallback.h \
+    zxing/ResultPoint.h \
+    zxing/Result.h \
+    zxing/ReaderException.h \
+    zxing/Reader.h \
+    zxing/NotFoundException.h \
+    zxing/MultiFormatReader.h \
+    zxing/LuminanceSource.h \
+    zxing/FormatException.h \
+    zxing/Exception.h \
+    zxing/DecodeHints.h \
+    zxing/BinaryBitmap.h \
+    zxing/Binarizer.h \
+    zxing/BarcodeFormat.h \
+    zxing/aztec/AztecReader.h \
+    zxing/aztec/AztecDetectorResult.h \
+    zxing/aztec/decoder/Decoder.h \
+    zxing/aztec/detector/Detector.h \
+    zxing/common/StringUtils.h \
+    zxing/common/Str.h \
+    zxing/common/Point.h \
+    zxing/common/PerspectiveTransform.h \
+    zxing/common/IllegalArgumentException.h \
+    zxing/common/HybridBinarizer.h \
+    zxing/common/GridSampler.h \
+    zxing/common/GreyscaleRotatedLuminanceSource.h \
+    zxing/common/GreyscaleLuminanceSource.h \
+    zxing/common/GlobalHistogramBinarizer.h \
+    zxing/common/EdgeDetector.h \
+    zxing/common/DetectorResult.h \
+    zxing/common/DecoderResult.h \
+    zxing/common/Counted.h \
+    zxing/common/CharacterSetECI.h \
+    zxing/common/BitSource.h \
+    zxing/common/BitMatrix.h \
+    zxing/common/BitArray.h \
+    zxing/common/Array.h \
+    zxing/common/detector/WhiteRectangleDetector.h \
+    zxing/common/detector/MonochromeRectangleDetector.h \
+    zxing/common/reedsolomon/ReedSolomonException.h \
+    zxing/common/reedsolomon/ReedSolomonDecoder.h \
+    zxing/common/reedsolomon/GenericGFPoly.h \
+    zxing/common/reedsolomon/GenericGF.h \
+    zxing/datamatrix/Version.h \
+    zxing/datamatrix/DataMatrixReader.h \
+    zxing/datamatrix/decoder/Decoder.h \
+    zxing/datamatrix/decoder/DecodedBitStreamParser.h \
+    zxing/datamatrix/decoder/DataBlock.h \
+    zxing/datamatrix/decoder/BitMatrixParser.h \
+    zxing/datamatrix/detector/MonochromeRectangleDetector.h \
+    zxing/datamatrix/detector/DetectorException.h \
+    zxing/datamatrix/detector/Detector.h \
+    zxing/datamatrix/detector/CornerPoint.h \
+    zxing/oned/UPCEReader.h \
+    zxing/oned/UPCEANReader.h \
+    zxing/oned/UPCAReader.h \
+    zxing/oned/OneDResultPoint.h \
+    zxing/oned/OneDReader.h \
+    zxing/oned/MultiFormatUPCEANReader.h \
+    zxing/oned/MultiFormatOneDReader.h \
+    zxing/oned/ITFReader.h \
+    zxing/oned/EAN13Reader.h \
+    zxing/oned/EAN8Reader.h \
+    zxing/oned/Code128Reader.h \
+    zxing/oned/Code39Reader.h \
+    zxing/qrcode/Version.h \
+    zxing/qrcode/QRCodeReader.h \
+    zxing/qrcode/FormatInformation.h \
+    zxing/qrcode/ErrorCorrectionLevel.h \
+    zxing/qrcode/decoder/Mode.h \
+    zxing/qrcode/decoder/Decoder.h \
+    zxing/qrcode/decoder/DecodedBitStreamParser.h \
+    zxing/qrcode/decoder/DataMask.h \
+    zxing/qrcode/decoder/DataBlock.h \
+    zxing/qrcode/decoder/BitMatrixParser.h \
+    zxing/qrcode/detector/QREdgeDetector.h \
+    zxing/qrcode/detector/FinderPatternInfo.h \
+    zxing/qrcode/detector/FinderPatternFinder.h \
+    zxing/qrcode/detector/FinderPattern.h \
+    zxing/qrcode/detector/Detector.h \
+    zxing/qrcode/detector/AlignmentPatternFinder.h \
+    zxing/qrcode/detector/AlignmentPattern.h \
+    zxing/multi/MultipleBarcodeReader.h \
+    zxing/multi/GenericMultipleBarcodeReader.h \
+    zxing/multi/ByQuadrantReader.h \
+    zxing/multi/qrcode/QRCodeMultiReader.h \
+    zxing/multi/qrcode/detector/MultiFinderPatternFinder.h \
+    zxing/multi/qrcode/detector/MultiDetector.h
+
+SOURCES += \
+    CameraImageWrapper.cpp \
+    qzxing.cpp \
+    qzxing_plugin.cpp \
+    zxing/ResultPointCallback.cpp \
+    zxing/ResultPoint.cpp \
+    zxing/Result.cpp \
+    zxing/ReaderException.cpp \
+    zxing/Reader.cpp \
+    zxing/NotFoundException.cpp \
+    zxing/MultiFormatReader.cpp \
+    zxing/LuminanceSource.cpp \
+    zxing/FormatException.cpp \
+    zxing/Exception.cpp \
+    zxing/DecodeHints.cpp \
+    zxing/BinaryBitmap.cpp \
+    zxing/Binarizer.cpp \
+    zxing/BarcodeFormat.cpp \
+    zxing/aztec/AztecReader.cpp \
+    zxing/aztec/AztecDetectorResult.cpp \
+    zxing/common/StringUtils.cpp \
+    zxing/common/Str.cpp \
+    zxing/common/PerspectiveTransform.cpp \
+    zxing/common/IllegalArgumentException.cpp \
+    zxing/common/HybridBinarizer.cpp \
+    zxing/common/GridSampler.cpp \
+    zxing/common/GreyscaleRotatedLuminanceSource.cpp \
+    zxing/common/GreyscaleLuminanceSource.cpp \
+    zxing/common/GlobalHistogramBinarizer.cpp \
+    zxing/common/EdgeDetector.cpp \
+    zxing/common/DetectorResult.cpp \
+    zxing/common/DecoderResult.cpp \
+    zxing/common/Counted.cpp \
+    zxing/common/CharacterSetECI.cpp \
+    zxing/common/BitSource.cpp \
+    zxing/common/BitMatrix.cpp \
+    zxing/common/BitArray.cpp \
+    zxing/common/Array.cpp \
+    zxing/common/detector/WhiteRectangleDetector.cpp \
+    zxing/common/detector/MonochromeRectangleDetector.cpp \
+    zxing/common/reedsolomon/ReedSolomonException.cpp \
+    zxing/common/reedsolomon/ReedSolomonDecoder.cpp \
+    zxing/common/reedsolomon/GenericGFPoly.cpp \
+    zxing/common/reedsolomon/GenericGF.cpp \
+    zxing/datamatrix/DataMatrixReader.cpp \
+    zxing/oned/UPCEReader.cpp \
+    zxing/oned/UPCEANReader.cpp \
+    zxing/oned/UPCAReader.cpp \
+    zxing/oned/OneDResultPoint.cpp \
+    zxing/oned/OneDReader.cpp \
+    zxing/oned/MultiFormatUPCEANReader.cpp \
+    zxing/oned/MultiFormatOneDReader.cpp \
+    zxing/oned/ITFReader.cpp \
+    zxing/oned/EAN13Reader.cpp \
+    zxing/oned/EAN8Reader.cpp \
+    zxing/oned/Code128Reader.cpp \
+    zxing/oned/Code39Reader.cpp \
+    zxing/qrcode/QRCodeReader.cpp \
+    zxing/qrcode/detector/QREdgeDetector.cpp \
+    zxing/multi/MultipleBarcodeReader.cpp \
+    zxing/multi/GenericMultipleBarcodeReader.cpp \
+    zxing/multi/ByQuadrantReader.cpp \
+    zxing/multi/qrcode/QRCodeMultiReader.cpp \
+    zxing/multi/qrcode/detector/MultiFinderPatternFinder.cpp \
+    zxing/multi/qrcode/detector/MultiDetector.cpp \
+    zxing/aztec/decoder/AztecDecoder.cpp \
+    zxing/aztec/detector/AztecDetector.cpp \
+    zxing/datamatrix/DataMatrixVersion.cpp \
+    zxing/datamatrix/decoder/DataMatrixDecoder.cpp \
+    zxing/datamatrix/decoder/DataMatrixBitMatrixParser.cpp \
+    zxing/datamatrix/decoder/DataMatrixDataBlock.cpp \
+    zxing/datamatrix/decoder/DataMatrixDecodedBitStreamParser.cpp \
+    zxing/datamatrix/detector/DataMatrixCornerPoint.cpp \
+    zxing/datamatrix/detector/DataMatrixDetector.cpp \
+    zxing/datamatrix/detector/DataMatrixDetectorException.cpp \
+    zxing/datamatrix/detector/DataMatrixMonochromeRectangleDetector.cpp \
+    zxing/qrcode/decoder/QRBitMatrixParser.cpp \
+    zxing/qrcode/decoder/QRDataBlock.cpp \
+    zxing/qrcode/decoder/QRDataMask.cpp \
+    zxing/qrcode/decoder/QRDecodedBitStreamParser.cpp \
+    zxing/qrcode/decoder/QRDecoder.cpp \
+    zxing/qrcode/decoder/QRMode.cpp \
+    zxing/qrcode/detector/QRAlignmentPattern.cpp \
+    zxing/qrcode/detector/QRAlignmentPatternFinder.cpp \
+    zxing/qrcode/detector/QRDetector.cpp \
+    zxing/qrcode/detector/QRFinderPattern.cpp \
+    zxing/qrcode/detector/QRFinderPatternFinder.cpp \
+    zxing/qrcode/detector/QRFinderPatternInfo.cpp \
+    zxing/qrcode/QRVersion.cpp \
+    zxing/qrcode/QRFormatInformation.cpp \
+    zxing/qrcode/QRErrorCorrectionLevel.cpp
+
+OTHER_FILES += \
+    qmldir \
+    plugins.qmltypes
+
+!equals(_PRO_FILE_PWD_, $$OUT_PWD) {
+    copy_qmldir.target = $$OUT_PWD/qmldir
+    copy_qmldir.depends = $$_PRO_FILE_PWD_/qmldir
+    copy_qmldir.commands = $(COPY_FILE) \"$$replace(copy_qmldir.depends, /, 
$$QMAKE_DIR_SEP)\" \"$$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)\"
+    QMAKE_EXTRA_TARGETS += copy_qmldir
+    PRE_TARGETDEPS += $$copy_qmldir.target
+}
+
+MOC_DIR = .moc
+OBJECTS_DIR = .obj
+
+unix {
+    installPath = $$[QT_INSTALL_QML]/$$replace(uri, \\., /)
+    qmldir.files = qmldir
+    qmldir.path = $$installPath
+    #plugins_qmltypes.CONFIG += no_check_exist
+    plugins_qmltypes.path = $$installPath
+    #plugins_qmltypes.extra = $$[QT_INSTALL_BINS]/qmlplugindump 
-notrelocatable $$replace(uri, \\., /) 
$${QZXING_PLUGIN_VERSION_MAJOR}.$${QZXING_PLUGIN_VERSION_MINOR} 
$(INSTALL_ROOT)/$$[QT_INSTALL_QML] > $$PWD/plugins.qmltypes
+    plugins_qmltypes.files = plugins.qmltypes
+    target.path = $$installPath
+    #QMAKE_CLEAN       += plugins.qmltypes
+    INSTALLS += target qmldir plugins_qmltypes
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/QZXing.pro.user
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/QZXing.pro.user                       
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/QZXing.pro.user       2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QtCreatorProject>
+<!-- Written by QtCreator 3.1.1, 2014-06-20T20:20:03. -->
+<qtcreator>
+ <data>
+  <variable>ProjectExplorer.Project.ActiveTarget</variable>
+  <value type="int">0</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.EditorSettings</variable>
+  <valuemap type="QVariantMap">
+   <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
+   <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
+   <value type="bool" 
key="EditorConfiguration.CamelCaseNavigation">true</value>
+   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
+    <value type="QString" key="language">Cpp</value>
+    <valuemap type="QVariantMap" key="value">
+     <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
+    </valuemap>
+   </valuemap>
+   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
+    <value type="QString" key="language">QmlJS</value>
+    <valuemap type="QVariantMap" key="value">
+     <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
+    </valuemap>
+   </valuemap>
+   <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
+   <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
+   <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
+   <value type="int" key="EditorConfiguration.IndentSize">4</value>
+   <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
+   <value type="int" key="EditorConfiguration.MarginColumn">80</value>
+   <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
+   <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
+   <value type="int" key="EditorConfiguration.PaddingMode">1</value>
+   <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
+   <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
+   <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
+   <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
+   <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
+   <value type="int" key="EditorConfiguration.TabSize">8</value>
+   <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
+   <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
+   <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
+   <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
+   <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
+   <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.PluginSettings</variable>
+  <valuemap type="QVariantMap">
+   <valuemap type="QVariantMap" key="ClangProjectSettings">
+    <value type="QString" key="CustomPchFile"></value>
+    <value type="int" key="PchUsage">1</value>
+   </valuemap>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Target.0</variable>
+  <valuemap type="QVariantMap">
+   <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.3.0 
(Qt32-5.3)</value>
+   <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt 5.3.0 
(Qt32-5.3)</value>
+   <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">{2df16ca3-6436-403d-92d4-5b6f5462a870}</value>
+   <value type="int" 
key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+   <value type="int" 
key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
+   <value type="int" 
key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
+   <valuemap type="QVariantMap" 
key="ProjectExplorer.Target.BuildConfiguration.0">
+    <value type="QString" 
key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:/GSOC/SecureShare/3rdParty/build-QZXing-Qt_5_3_0_Qt32_5_3-Debug</value>
+    <valuemap type="QVariantMap" 
key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+      <value type="bool" 
key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+      <value type="bool" 
key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
+      <value type="QString" 
key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+      <value type="bool" 
key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+     </valuemap>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" 
key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+      <value type="QString" 
key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+      <value type="QString" 
key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" 
key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" 
key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+      <value type="QString" 
key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+      <value type="QString" 
key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" 
key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" 
key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" 
key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
+    <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+    <value type="int" 
key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
+    <value type="bool" 
key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+   </valuemap>
+   <valuemap type="QVariantMap" 
key="ProjectExplorer.Target.BuildConfiguration.1">
+    <value type="QString" 
key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:/GSOC/SecureShare/3rdParty/build-QZXing-Qt_5_3_0_Qt32_5_3-Release</value>
+    <valuemap type="QVariantMap" 
key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+      <value type="bool" 
key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+      <value type="bool" 
key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
+      <value type="QString" 
key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+      <value type="bool" 
key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+     </valuemap>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" 
key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+      <value type="QString" 
key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+      <value type="QString" 
key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" 
key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" 
key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+      <value type="QString" 
key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+      <value type="QString" 
key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" 
key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" 
key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" 
key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
+    <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+    <value type="int" 
key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+    <value type="bool" 
key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+   </valuemap>
+   <value type="int" 
key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
+   <valuemap type="QVariantMap" 
key="ProjectExplorer.Target.DeployConfiguration.0">
+    <valuemap type="QVariantMap" 
key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
+    </valuemap>
+    <value type="int" 
key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+    <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy 
locally</value>
+    <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+   </valuemap>
+   <value type="int" 
key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
+   <valuemap type="QVariantMap" 
key="ProjectExplorer.Target.RunConfiguration.0">
+    <valuelist type="QVariantList" 
key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+    <value type="bool" 
key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+    <value type="bool" 
key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+    <value type="bool" 
key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+    <value type="bool" 
key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+    <value type="bool" 
key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+    <value type="double" 
key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+    <value type="double" 
key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+    <value type="bool" 
key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+    <valuelist type="QVariantList" 
key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+    <value type="int" 
key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+    <value type="bool" 
key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+    <value type="QString" 
key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+     <value type="int">0</value>
+     <value type="int">1</value>
+     <value type="int">2</value>
+     <value type="int">3</value>
+     <value type="int">4</value>
+     <value type="int">5</value>
+     <value type="int">6</value>
+     <value type="int">7</value>
+     <value type="int">8</value>
+     <value type="int">9</value>
+     <value type="int">10</value>
+     <value type="int">11</value>
+     <value type="int">12</value>
+     <value type="int">13</value>
+     <value type="int">14</value>
+    </valuelist>
+    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+    <value type="QString" 
key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
+    <value type="QString" 
key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
+    <value type="bool" 
key="ProjectExplorer.CustomExecutableRunConfiguration.UseTerminal">false</value>
+    <value type="QString" 
key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
+    <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom 
Executable</value>
+    <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" 
key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
+    <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+    <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+   </valuemap>
+   <value type="int" 
key="ProjectExplorer.Target.RunConfigurationCount">1</value>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.TargetCount</variable>
+  <value type="int">1</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
+  <value type="QByteArray">{6781a312-6fd1-420e-a8b5-87c86d1f5aac}</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+  <value type="int">15</value>
+ </data>
+</qtcreator>

Added: gnunet-qt/SecureShare/3rdParty/qzxing/README.md
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/README.md                             
(rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/README.md     2014-06-20 23:46:12 UTC 
(rev 33741)
@@ -0,0 +1,17 @@
+qzxing
+======
+
+QtQuick 2.0 port of the ZXing multi-format 1D/2D barcode image processing 
library
+
+Based on the great work done in the [original QtQuick 1.0 port][] by [Nikolaos 
Ftylitakis][].
+
+This repo essentially makes it possible to use the [ZXing][] 1D/2D barcode 
decoding library in projects
+based on the Qt 5.x framework. Although not limited to those, this C++ plugin 
has been ported to
+enable the use of barcode decoding functionality to QML projects based on the 
Ubuntu SDK.
+
+[Daily packages][] of this plugin are also available for Ubuntu.
+
+[original QtQuick 1.0 port]: https://projects.developer.nokia.com/QZXing
+[Nikolaos Ftylitakis]: http://www.developer.nokia.com/Profile/?u=favoritas37
+[ZXing]: http://code.google.com/p/zxing/
+[Daily packages]: 
https://launchpad.net/~qreator-hackers/+archive/qreator-experimental

Added: gnunet-qt/SecureShare/3rdParty/qzxing/debian/changelog
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/debian/changelog                      
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/debian/changelog      2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,42 @@
+qzxing-plugin (1.3ubuntu6~13.04) raring; urgency=low
+
+  * Fixed dependencies in the control file
+  * Fixed plugins.qmltypes file build
+
+ -- David Planella <address@hidden>  Sat, 07 Sep 2013 12:51:38 +0200
+
+qzxing-plugin (1.3ubuntu5~13.04) raring; urgency=low
+
+  * Added build dependency on qtdeclarative5-dev-tools
+
+ -- David Planella <address@hidden>  Fri, 06 Sep 2013 09:35:10 +0200
+
+qzxing-plugin (1.3ubuntu4~13.04) raring; urgency=low
+
+  * Tidied up build system
+
+ -- David Planella <address@hidden>  Sun, 23 Jun 2013 17:35:22 +0200
+
+qzxing-plugin (1.3ubuntu3~13.04) raring; urgency=low
+
+  * Implemented decodeSubImageQML 
+
+ -- David Planella <address@hidden>  Sun, 16 Jun 2013 13:24:34 +0200
+
+qzxing-plugin (1.3ubuntu2~13.04) raring; urgency=low
+
+  * Cleaned up code
+
+ -- David Planella <address@hidden>  Sun, 16 Jun 2013 02:09:33 +0200
+
+qzxing-plugin (1.3ubuntu1~13.04) raring; urgency=low
+
+  * Bumped version to upload PPA
+
+ -- David Planella <address@hidden>  Fri, 31 May 2013 11:55:18 +0200
+
+qzxing-plugin (1.3) raring; urgency=low
+
+  * Initial release
+
+ -- David Planella <address@hidden>  Wed, 29 May 2013 04:57:33 +0200

Added: gnunet-qt/SecureShare/3rdParty/qzxing/debian/compat
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/debian/compat                         
(rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/debian/compat 2014-06-20 23:46:12 UTC 
(rev 33741)
@@ -0,0 +1 @@
+9

Added: gnunet-qt/SecureShare/3rdParty/qzxing/debian/control
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/debian/control                        
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/debian/control        2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,22 @@
+Source: qzxing-plugin
+Section: libs
+Priority: optional
+Maintainer: Ubuntu Developers <address@hidden>
+Build-Depends: debhelper (>= 9.0.0),
+               qtbase5-dev,
+               qtdeclarative5-dev,
+               qtdeclarative5-dev-tools,
+               qt5-default,
+               qtdeclarative5-qtquick2-plugin
+Standards-Version: 3.9.4
+Homepage: https://projects.developer.nokia.com/QZXing
+
+Package: qtdeclarative5-qzxing-plugin
+Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Description: QZXing QtQuick 2 plugin
+ Port to QtQuick 2 of the ZXing 1D/2D barcode image decoder
+
+

Added: gnunet-qt/SecureShare/3rdParty/qzxing/debian/copyright
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/debian/copyright                      
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/debian/copyright      2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,23 @@
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/3.0/
+Upstream-Name: qzxing-plugin
+Source:
+
+Files: *
+Copyright: 2012 Nikolaos Ftylitakis <address@hidden>
+License: Apache
+
+License: Apache
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ .
+     http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ .
+ On a Debian system, the license can be found at
+ /usr/share/common-licenses/Apache-2.0

Added: gnunet-qt/SecureShare/3rdParty/qzxing/debian/rules
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/debian/rules                          
(rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/debian/rules  2014-06-20 23:46:12 UTC 
(rev 33741)
@@ -0,0 +1,11 @@
+#!/usr/bin/make -f
+
+# Uncomment this to turn on verbose mode.
+export DH_VERBOSE=1
+
+#export CFLAGS := $(shell dpkg-buildflags --get CFLAGS) $(shell 
dpkg-buildflags --get CPPFLAGS)
+#export CXXFLAGS := $(shell dpkg-buildflags --get CXXFLAGS) $(shell 
dpkg-buildflags --get CPPFLAGS)
+#export LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS) -Wl,--as-needed
+
+%:
+       dh $@ --list-missing --parallel 

Added: gnunet-qt/SecureShare/3rdParty/qzxing/debian/source/format
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/debian/source/format                  
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/debian/source/format  2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1 @@
+3.0 (native)

Added: gnunet-qt/SecureShare/3rdParty/qzxing/plugins.qmltypes
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/plugins.qmltypes                      
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/plugins.qmltypes      2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,84 @@
+import QtQuick.tooling 1.1
+
+// This file describes the plugin-supplied types contained in the library.
+// It is used for QML tooling purposes only.
+//
+// This file was auto-generated with the command 
'/usr/lib/x86_64-linux-gnu/qt5/bin/qmlplugindump QZXing 1.3'.
+
+Module {
+    Component {
+        name: "QZXing"
+        prototype: "QObject"
+        exports: ["QZXing 1.3"]
+        Enum {
+            name: "DecoderFormat"
+            values: {
+                "DecoderFormat_None": 0,
+                "DecoderFormat_QR_CODE": 1,
+                "DecoderFormat_DATA_MATRIX": 2,
+                "DecoderFormat_UPC_E": 4,
+                "DecoderFormat_UPC_A": 8,
+                "DecoderFormat_EAN_8": 16,
+                "DecoderFormat_EAN_13": 32,
+                "DecoderFormat_CODE_128": 64,
+                "DecoderFormat_CODE_39": 128,
+                "DecoderFormat_ITF": 256,
+                "DecoderFormat_Aztec": 512
+            }
+        }
+        Signal { name: "decodingStarted" }
+        Signal {
+            name: "decodingFinished"
+            Parameter { name: "succeeded"; type: "bool" }
+        }
+        Signal {
+            name: "tagFound"
+            Parameter { name: "tag"; type: "string" }
+        }
+        Method {
+            name: "decodeImage"
+            type: "string"
+            Parameter { name: "image"; type: "QImage" }
+        }
+        Method {
+            name: "decodeImageQML"
+            type: "string"
+            Parameter { name: "imageUrl"; type: "QUrl" }
+        }
+        Method {
+            name: "decodeSubImageQML"
+            type: "string"
+            Parameter { name: "imageUrl"; type: "QUrl" }
+            Parameter { name: "offsetX"; type: "double" }
+            Parameter { name: "offsetY"; type: "double" }
+            Parameter { name: "width"; type: "double" }
+            Parameter { name: "height"; type: "double" }
+        }
+        Method {
+            name: "decodeSubImageQML"
+            type: "string"
+            Parameter { name: "imageUrl"; type: "QUrl" }
+            Parameter { name: "offsetX"; type: "double" }
+            Parameter { name: "offsetY"; type: "double" }
+            Parameter { name: "width"; type: "double" }
+        }
+        Method {
+            name: "decodeSubImageQML"
+            type: "string"
+            Parameter { name: "imageUrl"; type: "QUrl" }
+            Parameter { name: "offsetX"; type: "double" }
+            Parameter { name: "offsetY"; type: "double" }
+        }
+        Method {
+            name: "decodeSubImageQML"
+            type: "string"
+            Parameter { name: "imageUrl"; type: "QUrl" }
+            Parameter { name: "offsetX"; type: "double" }
+        }
+        Method {
+            name: "decodeSubImageQML"
+            type: "string"
+            Parameter { name: "imageUrl"; type: "QUrl" }
+        }
+    }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/qmldir
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/qmldir                                
(rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/qmldir        2014-06-20 23:46:12 UTC 
(rev 33741)
@@ -0,0 +1,3 @@
+module QZXing
+typeinfo plugins.qmltypes
+plugin QZXing

Added: gnunet-qt/SecureShare/3rdParty/qzxing/qzxing.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/qzxing.cpp                            
(rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/qzxing.cpp    2014-06-20 23:46:12 UTC 
(rev 33741)
@@ -0,0 +1,124 @@
+#include "qzxing.h"
+
+#include <QtCore>
+#include <zxing/common/GlobalHistogramBinarizer.h>
+#include <zxing/Binarizer.h>
+#include <zxing/BinaryBitmap.h>
+#include <zxing/MultiFormatReader.h>
+#include <zxing/DecodeHints.h>
+#include "CameraImageWrapper.h"
+
+using namespace zxing;
+
+QZXing::QZXing(QObject *parent) : QObject(parent)
+{
+    decoder = new MultiFormatReader();
+    setDecoder(DecoderFormat_QR_CODE |
+               DecoderFormat_DATA_MATRIX |
+               DecoderFormat_UPC_E |
+               DecoderFormat_UPC_A |
+               DecoderFormat_EAN_8 |
+               DecoderFormat_EAN_13 |
+               DecoderFormat_CODE_128 |
+               DecoderFormat_CODE_39 |
+               DecoderFormat_ITF |
+               DecoderFormat_Aztec);
+}
+
+void QZXing::setDecoder(DecoderFormatType hint)
+{
+    DecodeHints newHints;
+
+    if(hint & DecoderFormat_QR_CODE)
+        newHints.addFormat((BarcodeFormat)BarcodeFormat_QR_CODE);
+
+    if(hint & DecoderFormat_DATA_MATRIX)
+        newHints.addFormat((BarcodeFormat)BarcodeFormat_DATA_MATRIX);
+
+    if(hint & DecoderFormat_UPC_E)
+        newHints.addFormat((BarcodeFormat)BarcodeFormat_UPC_E);
+
+    if(hint & DecoderFormat_UPC_A)
+        newHints.addFormat((BarcodeFormat)BarcodeFormat_UPC_A);
+
+    if(hint & DecoderFormat_EAN_8)
+        newHints.addFormat((BarcodeFormat)BarcodeFormat_EAN_8);
+
+    if(hint & DecoderFormat_EAN_13)
+        newHints.addFormat((BarcodeFormat)BarcodeFormat_EAN_13);
+
+    if(hint & DecoderFormat_CODE_128)
+        newHints.addFormat((BarcodeFormat)BarcodeFormat_CODE_128);
+
+    if(hint & DecoderFormat_CODE_39)
+        newHints.addFormat((BarcodeFormat)BarcodeFormat_CODE_39);
+
+    if(hint & DecoderFormat_ITF)
+        newHints.addFormat((BarcodeFormat)BarcodeFormat_ITF);
+
+    if(hint & DecoderFormat_Aztec)
+        newHints.addFormat((BarcodeFormat)BarcodeFormat_AZTEC);
+
+    supportedFormats = newHints.getCurrentHint();
+}
+
+QString QZXing::decodeImage(QImage image)
+{
+    Ref<Result> result;
+    emit decodingStarted();
+
+    try {
+        Ref<LuminanceSource> source(new CameraImageWrapper(image));
+
+        Ref<Binarizer> binarizer;
+        binarizer = new GlobalHistogramBinarizer(source);
+
+        Ref<BinaryBitmap> binary(new BinaryBitmap(binarizer));
+
+        DecodeHints hints((int)supportedFormats);
+
+        result = ((MultiFormatReader*)decoder)->decode(binary, hints);
+
+        QString string = QString(result->getText()->getText().c_str());
+        emit tagFound(string);
+        emit decodingFinished(true);
+        return string;
+    }
+    catch(zxing::Exception& e)
+    {
+       qDebug() << "[decodeImage()] Exception:" << e.what();
+       emit decodingFinished(false);
+       return "";
+    }
+}
+
+QString QZXing::decodeImageQML(const QUrl &imageUrl)
+{
+    return decodeSubImageQML(imageUrl);
+}
+
+QString QZXing::decodeSubImageQML(const QUrl &imageUrl,
+                                  const double offsetX, const double offsetY,
+                                  const double width, const double height)
+{
+
+    QString imagePath = imageUrl.path();
+    imagePath = imagePath.trimmed();
+    QFile file(imagePath);
+
+    if (!file.exists()) {
+        qDebug() << "[decodeSubImageQML()] The file" << file.fileName() << 
"does not exist.";
+        emit decodingFinished(false);
+        return "";
+    }
+
+    QImage img(imageUrl.path());
+
+    if(!(offsetX == 0 && offsetY == 0 && width == 0 && height == 0)) {
+        img = img.copy(offsetX, offsetY, width, height);
+    }
+
+    return decodeImage(img);
+
+}
+

Added: gnunet-qt/SecureShare/3rdParty/qzxing/qzxing.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/qzxing.h                              
(rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/qzxing.h      2014-06-20 23:46:12 UTC 
(rev 33741)
@@ -0,0 +1,79 @@
+#ifndef QZXING_H
+#define QZXING_H
+
+#include "qzxing_global.h"
+#include <QObject>
+#include <QImage>
+
+/**
+  * A class containing a very very small subset of the ZXing library.
+  * Created for ease of use.
+  *
+  * Anyone interested in using more technical stuff
+  * from the ZXing library is welcomed to add/edit on free will.
+  *
+  * Regarding DecoderFormat, by default all of those are enabled (except 
DataMatrix will is still not supported)
+  */
+class QZXing : public QObject
+{
+    Q_OBJECT
+    Q_ENUMS(DecoderFormat)
+
+public:
+    enum DecoderFormat {
+                    DecoderFormat_None = 0,
+                    DecoderFormat_QR_CODE = 1,
+                    DecoderFormat_DATA_MATRIX = 2,
+                    DecoderFormat_UPC_E = 4,
+                    DecoderFormat_UPC_A = 8,
+                    DecoderFormat_EAN_8 = 16,
+                    DecoderFormat_EAN_13 = 32,
+                    DecoderFormat_CODE_128 = 64,
+                    DecoderFormat_CODE_39 = 128,
+                    DecoderFormat_ITF = 256,
+                    DecoderFormat_Aztec = 512
+            } ;
+    typedef unsigned int DecoderFormatType;
+
+public:
+    QZXing(QObject *parent = NULL);
+
+    /**
+      * Set the enabled decoders.
+      * As argument it is possible to pass conjuction of decoders by using 
logic OR.
+      * e.x. setDecoder ( DecoderFormat_QR_CODE | DecoderFormat_EAN_13 | 
DecoderFormat_CODE_39 )
+      */
+    void setDecoder(DecoderFormatType hint);
+
+public slots:
+    /**
+      * The decoding function. Will try to decode the given image based on the 
enabled decoders.
+      *
+      */
+    QString decodeImage(QImage image);
+
+    /**
+      * The decoding function accessible from QML
+      */
+    QString decodeImageQML(const QUrl &imageUrl);
+
+    /**
+      * The decoding function accessible from QML. Able to set the decoding
+      * of a portion of the image.
+      */
+    QString decodeSubImageQML(const QUrl &imageUrl,
+                              const double offsetX = 0 , const double offsetY 
= 0,
+                              const double width = 0, const double height = 0);
+
+signals:
+    void decodingStarted();
+    void decodingFinished(bool succeeded);
+    void tagFound(QString tag);
+
+private:
+    void* decoder;
+    DecoderFormatType supportedFormats;
+};
+
+#endif // QZXING_H
+

Added: gnunet-qt/SecureShare/3rdParty/qzxing/qzxing_global.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/qzxing_global.h                       
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/qzxing_global.h       2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,12 @@
+#ifndef QZXING_GLOBAL_H
+#define QZXING_GLOBAL_H
+
+#include <QtCore/QtGlobal>
+
+#if defined(QZXING_LIBRARY)
+#  define QZXINGSHARED_EXPORT Q_DECL_EXPORT
+#else
+#  define QZXINGSHARED_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif  //QZXING_GLOBAL_H

Added: gnunet-qt/SecureShare/3rdParty/qzxing/qzxing_plugin.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/qzxing_plugin.cpp                     
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/qzxing_plugin.cpp     2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,17 @@
+#include <QtQml>
+#include "qzxing_plugin.h"
+#include "qzxing.h"
+
+void QZXingPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
+{
+    QQmlExtensionPlugin::initializeEngine(engine, uri);
+}
+
+void QZXingPlugin::registerTypes(const char *uri)
+{
+    // @uri QZXing
+    qmlRegisterType<QZXing>(uri,
+                            QZXING_PLUGIN_VERSION_MAJOR,
+                            QZXING_PLUGIN_VERSION_MINOR,
+                            QZXING_PLUGIN_QML_NAME);
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/qzxing_plugin.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/qzxing_plugin.h                       
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/qzxing_plugin.h       2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,19 @@
+#ifndef QZXING_PLUGIN_H
+#define QZXING_PLUGIN_H
+
+#define QZXING_PLUGIN_QML_NAME "QZXing"
+
+#include <QQmlEngine>
+#include <QQmlExtensionPlugin>
+
+class QZXingPlugin : public QQmlExtensionPlugin
+{
+    Q_OBJECT
+    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
+
+public:
+    void registerTypes(const char *uri);
+    void initializeEngine(QQmlEngine *engine, const char *uri);
+};
+
+#endif // QZXING_PLUGIN_H

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BarcodeFormat.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BarcodeFormat.cpp               
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BarcodeFormat.cpp       
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,37 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Created by Christian Brunschen on 13/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/BarcodeFormat.h>
+
+namespace zxing {
+
+const char *barcodeFormatNames[] = {
+    "None",
+    "QR_CODE",
+    "DATA_MATRIX",
+    "UPC_E",
+    "UPC_A",
+    "EAN_8",
+    "EAN_13",
+    "CODE_128",
+    "CODE_39",
+    "ITF",
+    "AZTEC"
+};
+
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BarcodeFormat.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BarcodeFormat.h                 
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BarcodeFormat.h 2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,44 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __BARCODE_FORMAT_H__
+#define __BARCODE_FORMAT_H__
+
+/*
+ *  BarcodeFormat.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace zxing {
+       
+    typedef enum BarcodeFormat {
+        BarcodeFormat_None = 0, 
+        BarcodeFormat_QR_CODE,
+        BarcodeFormat_DATA_MATRIX,
+        BarcodeFormat_UPC_E,
+        BarcodeFormat_UPC_A,
+        BarcodeFormat_EAN_8,
+        BarcodeFormat_EAN_13,
+        BarcodeFormat_CODE_128,
+        BarcodeFormat_CODE_39,
+        BarcodeFormat_ITF,
+        BarcodeFormat_AZTEC
+    } BarcodeFormat;
+
+    /* if you update the enum, please update the name in BarcodeFormat.cpp */
+    extern const char *barcodeFormatNames[];
+}
+
+#endif // __BARCODE_FORMAT_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Binarizer.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Binarizer.cpp                   
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Binarizer.cpp   2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,37 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Binarizer.cpp
+ *  zxing
+ *
+ *  Created by Ralf Kistner on 16/10/2009.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *  Modified by Lukasz Warchol on 02/02/2010.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/Binarizer.h>
+
+namespace zxing {
+       
+       Binarizer::Binarizer(Ref<LuminanceSource> source) : source_(source) {
+  }
+       
+       Binarizer::~Binarizer() {
+       }
+       
+       Ref<LuminanceSource> Binarizer::getLuminanceSource() const {
+               return source_;
+       }
+       
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Binarizer.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Binarizer.h                     
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Binarizer.h     2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,46 @@
+#ifndef BINARIZER_H_
+#define BINARIZER_H_
+
+/*
+ *  Binarizer.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/LuminanceSource.h>
+#include <zxing/common/BitArray.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/common/Counted.h>
+
+namespace zxing {
+
+class Binarizer : public Counted {
+ private:
+  Ref<LuminanceSource> source_;
+
+ public:
+  Binarizer(Ref<LuminanceSource> source);
+  virtual ~Binarizer();
+
+  virtual Ref<BitArray> getBlackRow(int y, Ref<BitArray> row) = 0;
+  virtual Ref<BitMatrix> getBlackMatrix() = 0;
+
+  Ref<LuminanceSource> getLuminanceSource() const ;
+  virtual Ref<Binarizer> createBinarizer(Ref<LuminanceSource> source) = 0;
+};
+
+}
+#endif /* BINARIZER_H_ */

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BinaryBitmap.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BinaryBitmap.cpp                
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BinaryBitmap.cpp        
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,67 @@
+/*
+ *  BinaryBitmap.cpp
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/BinaryBitmap.h>
+
+namespace zxing {
+       
+       BinaryBitmap::BinaryBitmap(Ref<Binarizer> binarizer) : 
binarizer_(binarizer) {
+               
+       }
+       
+       BinaryBitmap::~BinaryBitmap() {
+       }
+       
+       Ref<BitArray> BinaryBitmap::getBlackRow(int y, Ref<BitArray> row) {
+               return binarizer_->getBlackRow(y, row);
+       }
+       
+       Ref<BitMatrix> BinaryBitmap::getBlackMatrix() {
+               return binarizer_->getBlackMatrix();
+       }
+       
+       int BinaryBitmap::getWidth() const {
+               return getLuminanceSource()->getWidth();
+       }
+       
+       int BinaryBitmap::getHeight() const {
+               return getLuminanceSource()->getHeight();
+       }
+       
+       Ref<LuminanceSource> BinaryBitmap::getLuminanceSource() const {
+               return binarizer_->getLuminanceSource();
+       }
+       
+
+       bool BinaryBitmap::isCropSupported() const {
+         return getLuminanceSource()->isCropSupported();
+       }
+
+       Ref<BinaryBitmap> BinaryBitmap::crop(int left, int top, int width, int 
height) {
+         return Ref<BinaryBitmap> (new 
BinaryBitmap(binarizer_->createBinarizer(getLuminanceSource()->crop(left, top, 
width, height))));
+       }
+
+       bool BinaryBitmap::isRotateSupported() const {
+         return getLuminanceSource()->isRotateSupported();
+       }
+
+       Ref<BinaryBitmap> BinaryBitmap::rotateCounterClockwise() {
+         return Ref<BinaryBitmap> (new 
BinaryBitmap(binarizer_->createBinarizer(getLuminanceSource()->rotateCounterClockwise())));
+       }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BinaryBitmap.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BinaryBitmap.h                  
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/BinaryBitmap.h  2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,57 @@
+#ifndef __BINARYBITMAP_H__
+#define __BINARYBITMAP_H__
+
+/*
+ *  BinaryBitmap.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/common/BitArray.h>
+#include <zxing/Binarizer.h>
+
+namespace zxing {
+       
+       class BinaryBitmap : public Counted {
+       private:
+               Ref<Binarizer> binarizer_;
+               int cached_y_;
+               
+       public:
+               BinaryBitmap(Ref<Binarizer> binarizer);
+               virtual ~BinaryBitmap();
+               
+               Ref<BitArray> getBlackRow(int y, Ref<BitArray> row);
+               Ref<BitMatrix> getBlackMatrix();
+               
+               Ref<LuminanceSource> getLuminanceSource() const;
+
+               int getWidth() const;
+               int getHeight() const;
+
+               bool isRotateSupported() const;
+               Ref<BinaryBitmap> rotateCounterClockwise();
+
+               bool isCropSupported() const;
+               Ref<BinaryBitmap> crop(int left, int top, int width, int 
height);
+
+       };
+       
+}
+
+#endif /* BINARYBITMAP_H_ */

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/DecodeHints.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/DecodeHints.cpp                 
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/DecodeHints.cpp 2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,120 @@
+/*
+ *  DecodeHintType.cpp
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/DecodeHints.h>
+#include <zxing/common/IllegalArgumentException.h>
+namespace zxing {
+
+const DecodeHintType DecodeHints::CHARACTER_SET;
+
+const DecodeHints DecodeHints::PRODUCT_HINT(
+    BARCODEFORMAT_UPC_E_HINT |
+    BARCODEFORMAT_UPC_A_HINT |
+    BARCODEFORMAT_EAN_8_HINT |
+    BARCODEFORMAT_EAN_13_HINT);
+
+const DecodeHints DecodeHints::ONED_HINT(
+    BARCODEFORMAT_UPC_E_HINT |
+    BARCODEFORMAT_UPC_A_HINT |
+    BARCODEFORMAT_EAN_8_HINT |
+    BARCODEFORMAT_EAN_13_HINT |
+    BARCODEFORMAT_CODE_128_HINT |
+    BARCODEFORMAT_CODE_39_HINT |
+    BARCODEFORMAT_ITF_HINT);
+
+const DecodeHints DecodeHints::DEFAULT_HINT(
+    BARCODEFORMAT_UPC_E_HINT |
+    BARCODEFORMAT_UPC_A_HINT |
+    BARCODEFORMAT_EAN_8_HINT |
+    BARCODEFORMAT_EAN_13_HINT |
+    BARCODEFORMAT_CODE_128_HINT |
+    BARCODEFORMAT_CODE_39_HINT |
+    BARCODEFORMAT_ITF_HINT |
+    BARCODEFORMAT_DATA_MATRIX_HINT |
+    BARCODEFORMAT_AZTEC_HINT |
+    BARCODEFORMAT_QR_CODE_HINT);
+
+DecodeHints::DecodeHints() {
+  hints = 0;
+}
+
+DecodeHints::DecodeHints(DecodeHintType init) {
+  hints = init;
+}
+
+void DecodeHints::addFormat(BarcodeFormat toadd) {
+  switch (toadd) {
+    case BarcodeFormat_AZTEC: hints |= BARCODEFORMAT_AZTEC_HINT; break;
+    case BarcodeFormat_QR_CODE: hints |= BARCODEFORMAT_QR_CODE_HINT; break;
+    case BarcodeFormat_DATA_MATRIX: hints |= BARCODEFORMAT_DATA_MATRIX_HINT; 
break;
+    case BarcodeFormat_UPC_E: hints |= BARCODEFORMAT_UPC_E_HINT; break;
+    case BarcodeFormat_UPC_A: hints |= BARCODEFORMAT_UPC_A_HINT; break;
+    case BarcodeFormat_EAN_8: hints |= BARCODEFORMAT_EAN_8_HINT; break;
+    case BarcodeFormat_EAN_13: hints |= BARCODEFORMAT_EAN_13_HINT; break;
+    case BarcodeFormat_CODE_128: hints |= BARCODEFORMAT_CODE_128_HINT; break;
+    case BarcodeFormat_CODE_39: hints |= BARCODEFORMAT_CODE_39_HINT; break;
+    case BarcodeFormat_ITF: hints |= BARCODEFORMAT_ITF_HINT; break;
+    default: throw IllegalArgumentException("Unrecognizd barcode format");
+  }
+}
+
+bool DecodeHints::containsFormat(BarcodeFormat tocheck) const {
+  DecodeHintType checkAgainst;
+  switch (tocheck) {
+    case BarcodeFormat_AZTEC: checkAgainst = BARCODEFORMAT_AZTEC_HINT; break;
+    case BarcodeFormat_QR_CODE: checkAgainst = BARCODEFORMAT_QR_CODE_HINT; 
break;
+    case BarcodeFormat_DATA_MATRIX: checkAgainst = 
BARCODEFORMAT_DATA_MATRIX_HINT; break;
+    case BarcodeFormat_UPC_E: checkAgainst = BARCODEFORMAT_UPC_E_HINT; break;
+    case BarcodeFormat_UPC_A: checkAgainst = BARCODEFORMAT_UPC_A_HINT; break;
+    case BarcodeFormat_EAN_8: checkAgainst = BARCODEFORMAT_EAN_8_HINT; break;
+    case BarcodeFormat_EAN_13: checkAgainst = BARCODEFORMAT_EAN_13_HINT; break;
+    case BarcodeFormat_CODE_128: checkAgainst = BARCODEFORMAT_CODE_128_HINT; 
break;
+    case BarcodeFormat_CODE_39: checkAgainst = BARCODEFORMAT_CODE_39_HINT; 
break;
+    case BarcodeFormat_ITF: checkAgainst = BARCODEFORMAT_ITF_HINT; break;
+    default: throw IllegalArgumentException("Unrecognizd barcode format");
+  }
+  return (hints & checkAgainst);
+}
+
+void DecodeHints::setTryHarder(bool toset) {
+  if (toset) {
+    hints |= TRYHARDER_HINT;
+  } else {
+    hints &= ~TRYHARDER_HINT;
+  }
+}
+
+bool DecodeHints::getTryHarder() const {
+  return (hints & TRYHARDER_HINT);
+}
+
+void DecodeHints::setResultPointCallback(Ref<ResultPointCallback> const& 
_callback) {
+    callback = _callback;
+}
+
+Ref<ResultPointCallback> DecodeHints::getResultPointCallback() const {
+    return callback;
+}
+
+DecodeHintType DecodeHints::getCurrentHint()
+{
+    return hints;
+}
+
+} /* namespace */

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/DecodeHints.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/DecodeHints.h                   
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/DecodeHints.h   2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,72 @@
+#ifndef __DECODEHINTS_H_
+#define __DECODEHINTS_H_
+/*
+ *  DecodeHintType.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/BarcodeFormat.h>
+#include <zxing/ResultPointCallback.h>
+
+namespace zxing {
+
+typedef unsigned int DecodeHintType;
+
+class DecodeHints {
+
+ private:
+
+  DecodeHintType hints;
+
+  Ref<ResultPointCallback> callback;
+
+ public:
+
+  static const DecodeHintType BARCODEFORMAT_QR_CODE_HINT = 1 << 
BarcodeFormat_QR_CODE;
+  static const DecodeHintType BARCODEFORMAT_DATA_MATRIX_HINT = 1 << 
BarcodeFormat_DATA_MATRIX;
+  static const DecodeHintType BARCODEFORMAT_UPC_E_HINT = 1 << 
BarcodeFormat_UPC_E;
+  static const DecodeHintType BARCODEFORMAT_UPC_A_HINT = 1 << 
BarcodeFormat_UPC_A;
+  static const DecodeHintType BARCODEFORMAT_EAN_8_HINT = 1 << 
BarcodeFormat_EAN_8;
+  static const DecodeHintType BARCODEFORMAT_EAN_13_HINT = 1 << 
BarcodeFormat_EAN_13;
+  static const DecodeHintType BARCODEFORMAT_CODE_128_HINT = 1 << 
BarcodeFormat_CODE_128;
+  static const DecodeHintType BARCODEFORMAT_CODE_39_HINT = 1 << 
BarcodeFormat_CODE_39;
+  static const DecodeHintType BARCODEFORMAT_ITF_HINT = 1 << BarcodeFormat_ITF;
+  static const DecodeHintType BARCODEFORMAT_AZTEC_HINT = 1 << 
BarcodeFormat_AZTEC;
+  static const DecodeHintType CHARACTER_SET = 1 << 30;
+  static const DecodeHintType TRYHARDER_HINT = 1 << 31;
+
+  static const DecodeHints PRODUCT_HINT;
+  static const DecodeHints ONED_HINT;
+  static const DecodeHints DEFAULT_HINT;
+
+  DecodeHints();
+  DecodeHints(DecodeHintType init);
+
+  void addFormat(BarcodeFormat toadd);
+  bool containsFormat(BarcodeFormat tocheck) const;
+  void setTryHarder(bool toset);
+  bool getTryHarder() const;
+
+  void setResultPointCallback(Ref<ResultPointCallback> const&);
+  Ref<ResultPointCallback> getResultPointCallback() const;
+
+  DecodeHintType getCurrentHint();
+};
+
+}
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Exception.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Exception.cpp                   
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Exception.cpp   2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,40 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Exception.cpp
+ *  ZXing
+ *
+ *  Created by Christian Brunschen on 03/06/2008.
+ *  Copyright 2008-2011 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+
+ */
+
+#include <zxing/Exception.h>
+
+namespace zxing {
+
+Exception::Exception() {}
+
+Exception::Exception(const char *msg) :
+    message(msg) {
+}
+
+const char* Exception::what() const throw() {
+  return message.c_str();
+}
+
+Exception::~Exception() throw() {
+}
+
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Exception.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Exception.h                     
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Exception.h     2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,40 @@
+#ifndef __EXCEPTION_H__
+#define __EXCEPTION_H__
+
+/*
+ *  Exception.h
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string>
+#include <exception>
+
+namespace zxing {
+
+class Exception : public std::exception {
+private:
+  std::string message;
+
+public:
+  Exception();
+  Exception(const char *msg);
+  virtual const char* what() const throw();
+  virtual ~Exception() throw();
+};
+
+}
+#endif // __EXCEPTION_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/FormatException.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/FormatException.cpp             
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/FormatException.cpp     
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,35 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  FormatException.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 13/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/FormatException.h>
+
+namespace zxing {
+
+FormatException::FormatException() {}
+
+FormatException::FormatException(const char *msg) :
+    ReaderException(msg) {
+}
+
+FormatException::~FormatException() throw() {
+}
+
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/FormatException.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/FormatException.h               
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/FormatException.h       
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,35 @@
+#ifndef __FORMAT_EXCEPTION_H__
+#define __FORMAT_EXCEPTION_H__
+
+/*
+ *  FormatException.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/ReaderException.h>
+
+namespace zxing {
+
+class FormatException : public ReaderException {
+public:
+  FormatException();
+  FormatException(const char *msg);
+  ~FormatException() throw();
+};
+
+}
+#endif // __FORMAT_EXCEPTION_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/LuminanceSource.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/LuminanceSource.cpp             
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/LuminanceSource.cpp     
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,80 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  LuminanceSource.cpp
+ *  zxing
+ *
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <zxing/LuminanceSource.h>
+#include <zxing/common/IllegalArgumentException.h>
+
+namespace zxing {
+
+LuminanceSource::LuminanceSource() {
+}
+
+LuminanceSource::~LuminanceSource() {
+}
+
+bool LuminanceSource::isCropSupported() const {
+  return false;
+}
+
+Ref<LuminanceSource> LuminanceSource::crop(int left, int top, int width, int 
height) {
+  (void)left;
+  (void)top;
+  (void)width;
+  (void)height;
+  throw IllegalArgumentException("This luminance source does not support 
cropping.");
+}
+
+bool LuminanceSource::isRotateSupported() const {
+  return false;
+}
+
+Ref<LuminanceSource> LuminanceSource::rotateCounterClockwise() {
+  throw IllegalArgumentException("This luminance source does not support 
rotation.");
+}
+
+LuminanceSource::operator std::string() {
+  unsigned char* row = 0;
+  std::ostringstream oss;
+  for (int y = 0; y < getHeight(); y++) {
+    row = getRow(y, row);
+    for (int x = 0; x < getWidth(); x++) {
+      int luminance = row[x] & 0xFF;
+      char c;
+      if (luminance < 0x40) {
+        c = '#';
+      } else if (luminance < 0x80) {
+        c = '+';
+      } else if (luminance < 0xC0) {
+        c = '.';
+      } else {
+        c = ' ';
+      }
+      oss << c;
+    }
+    oss << '\n';
+  }
+  delete [] row;
+  return oss.str();
+}
+
+
+
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/LuminanceSource.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/LuminanceSource.h               
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/LuminanceSource.h       
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,52 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __LUMINANCESOURCE_H__
+#define __LUMINANCESOURCE_H__
+/*
+ *  LuminanceSource.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+#include <string.h>
+
+namespace zxing {
+
+class LuminanceSource : public Counted {
+public:
+  LuminanceSource();
+  virtual ~LuminanceSource();
+
+  virtual int getWidth() const = 0;
+  virtual int getHeight() const = 0;
+
+  // Callers take ownership of the returned memory and must call delete [] on 
it themselves.
+  virtual unsigned char* getRow(int y, unsigned char* row) = 0;
+  virtual unsigned char* getMatrix() = 0;
+
+  virtual bool isCropSupported() const;
+  virtual Ref<LuminanceSource> crop(int left, int top, int width, int height);
+
+  virtual bool isRotateSupported() const;
+  virtual Ref<LuminanceSource> rotateCounterClockwise();
+
+  operator std::string (); // should be const but don't want to make sure a
+                           // large breaking change right now
+};
+
+}
+
+#endif /* LUMINANCESOURCE_H_ */

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/MultiFormatReader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/MultiFormatReader.cpp           
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/MultiFormatReader.cpp   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,106 @@
+/*
+ *  MultiFormatBarcodeReader.cpp
+ *  ZXing
+ *
+ *  Created by Lukasz Warchol on 10-01-26.
+ *  Modified by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/MultiFormatReader.h>
+#include <zxing/qrcode/QRCodeReader.h>
+#include <zxing/datamatrix/DataMatrixReader.h>
+#include <zxing/aztec/AztecReader.h>
+#include <zxing/oned/MultiFormatUPCEANReader.h>
+#include <zxing/oned/MultiFormatOneDReader.h>
+#include <zxing/ReaderException.h>
+
+namespace zxing {
+  MultiFormatReader::MultiFormatReader() {
+
+  }
+  
+  Ref<Result> MultiFormatReader::decode(Ref<BinaryBitmap> image) {
+    setHints(DecodeHints::DEFAULT_HINT);
+    return decodeInternal(image);
+  }
+
+  Ref<Result> MultiFormatReader::decode(Ref<BinaryBitmap> image, DecodeHints 
hints) {
+    setHints(hints);
+    return decodeInternal(image);
+  }
+
+  Ref<Result> MultiFormatReader::decodeWithState(Ref<BinaryBitmap> image) {
+    // Make sure to set up the default state so we don't crash
+    if (readers_.size() == 0) {
+      setHints(DecodeHints::DEFAULT_HINT);
+    }
+    return decodeInternal(image);
+  }
+
+  void MultiFormatReader::setHints(DecodeHints hints) {
+    hints_ = hints;
+    readers_.clear();
+    bool tryHarder = hints.getTryHarder();
+
+    bool addOneDReader = hints.containsFormat(BarcodeFormat_UPC_E) ||
+                         hints.containsFormat(BarcodeFormat_UPC_A) ||
+                         hints.containsFormat(BarcodeFormat_EAN_8) ||
+                         hints.containsFormat(BarcodeFormat_EAN_13) ||
+                         hints.containsFormat(BarcodeFormat_CODE_128) ||
+                         hints.containsFormat(BarcodeFormat_CODE_39) ||
+                         hints.containsFormat(BarcodeFormat_ITF);
+    if (addOneDReader && !tryHarder) {
+      readers_.push_back(Ref<Reader>(new 
zxing::oned::MultiFormatOneDReader(hints)));
+    }
+    if (hints.containsFormat(BarcodeFormat_QR_CODE)) {
+      readers_.push_back(Ref<Reader>(new zxing::qrcode::QRCodeReader()));
+    }
+    if (hints.containsFormat(BarcodeFormat_DATA_MATRIX)) {
+      readers_.push_back(Ref<Reader>(new 
zxing::datamatrix::DataMatrixReader()));
+    }
+    if (hints.containsFormat(BarcodeFormat_AZTEC)) {
+      readers_.push_back(Ref<Reader>(new zxing::aztec::AztecReader()));
+    }
+    //TODO: add PDF417 here once PDF417 reader is implemented
+    if (addOneDReader && tryHarder) {
+      readers_.push_back(Ref<Reader>(new 
zxing::oned::MultiFormatOneDReader(hints)));
+    }
+    if (readers_.size() == 0) {
+      if (!tryHarder) {
+        readers_.push_back(Ref<Reader>(new 
zxing::oned::MultiFormatOneDReader(hints)));
+      }
+      readers_.push_back(Ref<Reader>(new zxing::qrcode::QRCodeReader()));
+      if (tryHarder) {
+        readers_.push_back(Ref<Reader>(new 
zxing::oned::MultiFormatOneDReader(hints)));
+      }
+    }
+  }
+
+  Ref<Result> MultiFormatReader::decodeInternal(Ref<BinaryBitmap> image) {
+    for (unsigned int i = 0; i < readers_.size(); i++) {
+      try {
+        return readers_[i]->decode(image, hints_);
+      } catch (ReaderException const& re) {
+        // continue
+      }
+    }
+    throw ReaderException("No code detected");
+  }
+  
+  MultiFormatReader::~MultiFormatReader() {
+
+  }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/MultiFormatReader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/MultiFormatReader.h             
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/MultiFormatReader.h     
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,49 @@
+#ifndef __MULTI_FORMAT_READER_H__
+#define __MULTI_FORMAT_READER_H__
+
+/*
+ *  MultiFormatBarcodeReader.h
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ 
+#include <zxing/Reader.h>
+#include <zxing/common/BitArray.h>
+#include <zxing/Result.h>
+#include <zxing/DecodeHints.h>
+
+namespace zxing {
+  class MultiFormatReader : public Reader {
+    
+  private:
+    Ref<Result> decodeInternal(Ref<BinaryBitmap> image);
+  
+    std::vector<Ref<Reader> > readers_;
+    DecodeHints hints_;
+
+  public:
+    MultiFormatReader();
+    
+    Ref<Result> decode(Ref<BinaryBitmap> image);
+    Ref<Result> decode(Ref<BinaryBitmap> image, DecodeHints hints);
+    Ref<Result> decodeWithState(Ref<BinaryBitmap> image);
+    void setHints(DecodeHints hints);
+    ~MultiFormatReader();
+  };
+}
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/NotFoundException.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/NotFoundException.cpp           
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/NotFoundException.cpp   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,28 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ * Copyright 20011 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/NotFoundException.h>
+
+namespace zxing {
+
+  NotFoundException::NotFoundException(const char *msg)
+    : ReaderException(msg) {}
+
+  NotFoundException::~NotFoundException() throw() {
+  }
+
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/NotFoundException.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/NotFoundException.h             
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/NotFoundException.h     
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,33 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+
+#ifndef __NOT_FOUND_EXCEPTION_H__
+#define __NOT_FOUND_EXCEPTION_H__
+
+/*
+ * Copyright 20011 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/ReaderException.h>
+
+namespace zxing {
+
+  class NotFoundException : public ReaderException {
+  public:
+    NotFoundException(const char *msg);
+    ~NotFoundException() throw();
+  };
+
+}
+#endif // __NOT_FOUND_EXCEPTION_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Reader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Reader.cpp                      
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Reader.cpp      2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,31 @@
+/*
+ *  Reader.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 13/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/Reader.h>
+
+namespace zxing {
+
+Reader::~Reader() { }
+
+Ref<Result> Reader::decode(Ref<BinaryBitmap> image) {
+  return decode(image, DecodeHints::DEFAULT_HINT);
+}
+
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Reader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Reader.h                        
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Reader.h        2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,40 @@
+#ifndef __READER_H__
+#define __READER_H__
+
+/*
+ *  Reader.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/BinaryBitmap.h>
+#include <zxing/Result.h>
+#include <zxing/DecodeHints.h>
+
+namespace zxing {
+
+ class Reader : public Counted {
+  protected:
+   Reader() {}
+  public:
+   virtual Ref<Result> decode(Ref<BinaryBitmap> image);
+   virtual Ref<Result> decode(Ref<BinaryBitmap> image, DecodeHints hints) = 0;
+   virtual ~Reader();
+};
+
+}
+
+#endif // __READER_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ReaderException.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ReaderException.cpp             
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ReaderException.cpp     
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,35 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  ReaderException.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 13/05/2008.
+ *  Copyright 2008-2011 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/ReaderException.h>
+
+namespace zxing {
+
+ReaderException::ReaderException() {}
+
+ReaderException::ReaderException(const char *msg) :
+    Exception(msg) {
+}
+
+ReaderException::~ReaderException() throw() {
+}
+
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ReaderException.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ReaderException.h               
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ReaderException.h       
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,35 @@
+#ifndef __READER_EXCEPTION_H__
+#define __READER_EXCEPTION_H__
+
+/*
+ *  ReaderException.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/Exception.h>
+
+namespace zxing {
+
+class ReaderException : public Exception {
+public:
+  ReaderException();
+  ReaderException(const char *msg);
+  ~ReaderException() throw();
+};
+
+}
+#endif // __READER_EXCEPTION_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Result.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Result.cpp                      
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Result.cpp      2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,64 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Result.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 13/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/Result.h>
+
+namespace zxing {
+using namespace std;
+
+Result::Result(Ref<String> text, ArrayRef<unsigned char> rawBytes, 
std::vector<Ref<ResultPoint> > resultPoints,
+               BarcodeFormat format) :
+  text_(text), rawBytes_(rawBytes), resultPoints_(resultPoints), 
format_(format) {
+}
+
+Result::~Result() {
+}
+
+Ref<String> Result::getText() {
+  return text_;
+}
+
+ArrayRef<unsigned char> Result::getRawBytes() {
+  return rawBytes_;
+}
+
+const std::vector<Ref<ResultPoint> >& Result::getResultPoints() const {
+  return resultPoints_;
+}
+
+std::vector<Ref<ResultPoint> >& Result::getResultPoints() {
+  return resultPoints_;
+}
+
+BarcodeFormat Result::getBarcodeFormat() const {
+  return format_;
+}
+
+ostream& operator<<(ostream &out, Result& result) {
+  if (result.text_ != 0) {
+    out << result.text_->getText();
+  } else {
+    out << "[" << result.rawBytes_->size() << " bytes]";
+  }
+  return out;
+}
+
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Result.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Result.h                        
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/Result.h        2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,54 @@
+#ifndef __RESULT_H__
+#define __RESULT_H__
+
+/*
+ *  Result.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string>
+#include <vector>
+#include <zxing/common/Array.h>
+#include <zxing/common/Counted.h>
+#include <zxing/common/Str.h>
+#include <zxing/ResultPoint.h>
+#include <zxing/BarcodeFormat.h>
+
+namespace zxing {
+
+class Result : public Counted {
+private:
+  Ref<String> text_;
+  ArrayRef<unsigned char> rawBytes_;
+  std::vector<Ref<ResultPoint> > resultPoints_;
+  BarcodeFormat format_;
+
+public:
+  Result(Ref<String> text, ArrayRef<unsigned char> rawBytes, 
std::vector<Ref<ResultPoint> > resultPoints,
+         BarcodeFormat format);
+  ~Result();
+  Ref<String> getText();
+  ArrayRef<unsigned char> getRawBytes();
+  const std::vector<Ref<ResultPoint> >& getResultPoints() const;
+  std::vector<Ref<ResultPoint> >& getResultPoints();
+  BarcodeFormat getBarcodeFormat() const;
+
+  friend std::ostream& operator<<(std::ostream &out, Result& result);
+};
+
+}
+#endif // __RESULT_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPoint.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPoint.cpp                 
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPoint.cpp 2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,100 @@
+/*
+ *  ResultPoint.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 13/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/ResultPoint.h>
+#include <math.h>
+
+namespace zxing {
+
+ResultPoint::ResultPoint() : posX_(0), posY_(0) {}
+
+ResultPoint::ResultPoint(float x, float y) : posX_(x), posY_(y) {}
+  
+ResultPoint::~ResultPoint() {}
+
+float ResultPoint::getX() const {
+  return posX_;
+}
+    
+float ResultPoint::getY() const {
+  return posY_;
+}
+
+bool ResultPoint::equals(Ref<ResultPoint> other) {
+  return posX_ == other->getX() && posY_ == other->getY();
+}
+
+/**
+ * <p>Orders an array of three ResultPoints in an order [A,B,C] such that AB < 
AC and
+ * BC < AC and the angle between BC and BA is less than 180 degrees.
+ */
+void ResultPoint::orderBestPatterns(std::vector<Ref<ResultPoint> > &patterns) {
+    // Find distances between pattern centers
+    float zeroOneDistance = distance(patterns[0]->getX(), 
patterns[1]->getX(),patterns[0]->getY(), patterns[1]->getY());
+    float oneTwoDistance = distance(patterns[1]->getX(), 
patterns[2]->getX(),patterns[1]->getY(), patterns[2]->getY());
+    float zeroTwoDistance = distance(patterns[0]->getX(), 
patterns[2]->getX(),patterns[0]->getY(), patterns[2]->getY());
+
+    Ref<ResultPoint> pointA, pointB, pointC;
+    // Assume one closest to other two is B; A and C will just be guesses at 
first
+    if (oneTwoDistance >= zeroOneDistance && oneTwoDistance >= 
zeroTwoDistance) {
+      pointB = patterns[0];
+      pointA = patterns[1];
+      pointC = patterns[2];
+    } else if (zeroTwoDistance >= oneTwoDistance && zeroTwoDistance >= 
zeroOneDistance) {
+      pointB = patterns[1];
+      pointA = patterns[0];
+      pointC = patterns[2];
+    } else {
+      pointB = patterns[2];
+      pointA = patterns[0];
+      pointC = patterns[1];
+    }
+
+    // Use cross product to figure out whether A and C are correct or flipped.
+    // This asks whether BC x BA has a positive z component, which is the 
arrangement
+    // we want for A, B, C. If it's negative, then we've got it flipped around 
and
+    // should swap A and C.
+    if (crossProductZ(pointA, pointB, pointC) < 0.0f) {
+      Ref<ResultPoint> temp = pointA;
+      pointA = pointC;
+      pointC = temp;
+    }
+
+    patterns[0] = pointA;
+    patterns[1] = pointB;
+    patterns[2] = pointC;
+}
+
+float ResultPoint::distance(Ref<ResultPoint> point1, Ref<ResultPoint> point2) {
+  return distance(point1->getX(), point1->getY(), point2->getX(), 
point2->getY());
+}
+
+float ResultPoint::distance(float x1, float x2, float y1, float y2) {
+  float xDiff = x1 - x2;
+  float yDiff = y1 - y2;
+  return (float) sqrt((double) (xDiff * xDiff + yDiff * yDiff));
+}
+
+float ResultPoint::crossProductZ(Ref<ResultPoint> pointA, Ref<ResultPoint> 
pointB, Ref<ResultPoint> pointC) {
+  float bX = pointB->getX();
+  float bY = pointB->getY();
+  return ((pointC->getX() - bX) * (pointA->getY() - bY)) - ((pointC->getY() - 
bY) * (pointA->getX() - bX));
+}
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPoint.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPoint.h                   
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPoint.h   2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,54 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __RESULT_POINT_H__
+#define __RESULT_POINT_H__
+
+/*
+ *  ResultPoint.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+#include <vector>
+
+namespace zxing {
+
+class ResultPoint : public Counted {
+protected:
+  float posX_;
+  float posY_;
+  
+public:
+  ResultPoint();
+  ResultPoint(float x, float y);
+  virtual ~ResultPoint();
+
+  virtual float getX() const;
+  virtual float getY() const;
+
+  bool equals(Ref<ResultPoint> other);
+
+  static void orderBestPatterns(std::vector<Ref<ResultPoint> > &patterns);
+  static float distance(Ref<ResultPoint> point1, Ref<ResultPoint> point2);
+  static float distance(float x1, float x2, float y1, float y2);
+
+private:
+  static float crossProductZ(Ref<ResultPoint> pointA, Ref<ResultPoint> pointB, 
Ref<ResultPoint> pointC);
+};
+
+}
+
+#endif // __RESULT_POINT_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPointCallback.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPointCallback.cpp         
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPointCallback.cpp 
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,26 @@
+/*
+ *  ResultPointCallback.cpp
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/ResultPointCallback.h>
+
+namespace zxing {
+
+ResultPointCallback::~ResultPointCallback() {}
+
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPointCallback.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPointCallback.h           
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/ResultPointCallback.h   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,39 @@
+#ifndef __RESULT_POINT_CALLBACK_H__
+#define __RESULT_POINT_CALLBACK_H__
+
+/*
+ *  ResultPointCallback.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+
+namespace zxing {
+
+class ResultPoint;
+
+class ResultPointCallback : public Counted {
+protected:
+  ResultPointCallback() {}
+public:
+  virtual void foundPossibleResultPoint(ResultPoint const& point) = 0;
+  virtual ~ResultPointCallback();
+};
+
+}
+
+#endif // __RESULT_POINT_CALLBACK_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecDetectorResult.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecDetectorResult.cpp   
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecDetectorResult.cpp   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,45 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  AtztecDetecorResult.cpp
+ *  zxing
+ *
+ *  Created by Lukas Stabe on 08/02/2012.
+ *  Copyright 2012 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/aztec/AztecDetectorResult.h>
+
+namespace zxing {
+    namespace aztec {
+        AztecDetectorResult::AztecDetectorResult(Ref<BitMatrix> bits, 
std::vector<Ref<ResultPoint> > points, bool compact, int nbDatablocks, int 
nbLayers)
+        : DetectorResult(bits, points),
+        compact_(compact),
+        nbDatablocks_(nbDatablocks),
+        nbLayers_(nbLayers) {
+        }
+        
+        bool AztecDetectorResult::isCompact() {
+            return compact_;
+        }
+        
+        int AztecDetectorResult::getNBDatablocks() {
+            return nbDatablocks_;
+        }
+        
+        int AztecDetectorResult::getNBLayers() {
+            return nbLayers_;
+        }
+    }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecDetectorResult.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecDetectorResult.h     
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecDetectorResult.h     
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,42 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  AtztecDetecorResult.h
+ *  zxing
+ *
+ *  Created by Lukas Stabe on 08/02/2012.
+ *  Copyright 2012 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/DetectorResult.h>
+
+#ifndef ZXingWidget_AtztecDetecorResult_h
+#define ZXingWidget_AtztecDetecorResult_h
+
+namespace zxing {
+    namespace aztec {
+        class AztecDetectorResult : public DetectorResult {
+        private:
+            bool compact_;
+            int nbDatablocks_, nbLayers_;
+        public:
+            AztecDetectorResult(Ref<BitMatrix> bits, 
std::vector<Ref<ResultPoint> > points, bool compact, int nbDatablocks, int 
nbLayers);
+            bool isCompact();
+            int getNBDatablocks();
+            int getNBLayers();
+        };
+    }
+}
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecReader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecReader.cpp           
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecReader.cpp   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,64 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  AztecReader.cpp
+ *  zxing
+ *
+ *  Created by Lukas Stabe on 08/02/2012.
+ *  Copyright 2012 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/aztec/AztecReader.h>
+#include <zxing/aztec/detector/Detector.h>
+#include <iostream>
+
+namespace zxing {
+  namespace aztec {
+        
+    AztecReader::AztecReader() : decoder_() {
+      // nothing
+    }
+        
+    Ref<Result> AztecReader::decode(Ref<zxing::BinaryBitmap> image) {
+      Detector detector(image->getBlackMatrix());
+            
+      Ref<AztecDetectorResult> detectorResult(detector.detect());
+            
+      std::vector<Ref<ResultPoint> > points(detectorResult->getPoints());
+            
+      Ref<DecoderResult> decoderResult(decoder_.decode(detectorResult));
+            
+      Ref<Result> result(new Result(decoderResult->getText(),
+                                    decoderResult->getRawBytes(),
+                                    points,
+                                    BarcodeFormat_AZTEC));
+            
+      return result;
+    }
+        
+    Ref<Result> AztecReader::decode(Ref<BinaryBitmap> image, DecodeHints) {
+      //cout << "decoding with hints not supported for aztec" << "\n" << flush;
+      return this->decode(image);
+    }
+        
+    AztecReader::~AztecReader() {
+      // nothing
+    }
+        
+    Decoder& AztecReader::getDecoder() {
+      return decoder_;
+    }
+        
+  }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecReader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecReader.h             
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/AztecReader.h     
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,49 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  AztecReader.h
+ *  zxing
+ *
+ *  Created by Lukas Stabe on 08/02/2012.
+ *  Copyright 2012 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/Reader.h>
+#include <zxing/aztec/decoder/Decoder.h>
+#include <zxing/DecodeHints.h>
+
+#ifndef ZXingWidget_AztecReader_h
+#define ZXingWidget_AztecReader_h
+
+namespace zxing {
+    namespace aztec {
+        
+        class AztecReader : public Reader {
+        private:
+            Decoder decoder_;
+            
+        protected:
+            Decoder &getDecoder();
+            
+        public:
+            AztecReader();
+            virtual Ref<Result> decode(Ref<BinaryBitmap> image);
+            virtual Ref<Result> decode(Ref<BinaryBitmap> image, DecodeHints 
hints);
+            virtual ~AztecReader();
+        };
+        
+    }
+}
+
+#endif

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/decoder/AztecDecoder.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/decoder/AztecDecoder.cpp  
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/decoder/AztecDecoder.cpp  
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,496 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Decoder.cpp
+ *  zxing
+ *
+ *  Created by Lukas Stabe on 08/02/2012.
+ *  Copyright 2012 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/aztec/decoder/Decoder.h>
+#ifndef NO_ICONV
+#include <iconv.h>
+#endif
+#include <iostream>
+#include <zxing/FormatException.h>
+#include <zxing/common/reedsolomon/ReedSolomonDecoder.h>
+#include <zxing/common/reedsolomon/ReedSolomonException.h>
+#include <zxing/common/reedsolomon/GenericGF.h>
+#include <zxing/common/IllegalArgumentException.h>
+
+#include <qglobal.h>
+
+using zxing::aztec::Decoder;
+using zxing::DecoderResult;
+using zxing::String;
+using zxing::BitArray;
+using zxing::BitMatrix;
+using zxing::Ref;
+
+using std::string;
+
+namespace {
+  void add(string& result, unsigned char character) {
+#ifndef NO_ICONV
+    char s[] = { character & 0xff };
+    char* ss = s;
+    size_t sl = sizeof(s);
+    char d[4];
+    char* ds = d;
+    size_t dl = sizeof(d);
+    iconv_t ic = iconv_open("UTF-8", "ISO-8859-1");
+
+
+#if defined(Q_OS_SYMBIAN)
+    iconv(ic, (const char**)&ss, &sl, &ds, &dl); // for Symbian and Mingw
+#else
+    iconv(ic, (char**)&ss, &sl, &ds, &dl); // for Harmattan
+#endif
+    iconv_close(ic);
+    d[sizeof(d)-dl] = 0;
+    result.append(d);
+#else
+    result.push_back(character);
+#endif
+  }
+
+  const int NB_BITS_COMPACT[] = {
+    0, 104, 240, 408, 608
+  };
+        
+  const int NB_BITS[] = {
+    0, 128, 288, 480, 704, 960, 1248, 1568, 1920, 2304, 2720, 3168, 3648, 
4160, 4704, 5280, 5888, 6528,
+    7200, 7904, 8640, 9408, 10208, 11040, 11904, 12800, 13728, 14688, 15680, 
16704, 17760, 18848, 19968
+  };
+        
+  const int NB_DATABLOCK_COMPACT[] = {
+    0, 17, 40, 51, 76
+  };
+        
+  const int NB_DATABLOCK[] = {
+    0, 21, 48, 60, 88, 120, 156, 196, 240, 230, 272, 316, 364, 416, 470, 528, 
588, 652, 720, 790, 864,
+    940, 1020, 920, 992, 1066, 1144, 1224, 1306, 1392, 1480, 1570, 1664
+  };
+        
+  const char* UPPER_TABLE[] = {
+    "CTRL_PS", " ", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", 
"L", "M", "N", "O", "P",
+    "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "CTRL_LL", "CTRL_ML", 
"CTRL_DL", "CTRL_BS"
+  };
+        
+  const char* LOWER_TABLE[] = {
+    "CTRL_PS", " ", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", 
"l", "m", "n", "o", "p",
+    "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "CTRL_US", "CTRL_ML", 
"CTRL_DL", "CTRL_BS"
+  };
+        
+  const char* MIXED_TABLE[] = {
+    "CTRL_PS", " ", "\1", "\2", "\3", "\4", "\5", "\6", "\7", "\b", "\t", "\n",
+    "\13", "\f", "\r", "\33", "\34", "\35", "\36", "\37", "@", "\\", "^", "_",
+    "`", "|", "~", "\177", "CTRL_LL", "CTRL_UL", "CTRL_PL", "CTRL_BS"
+  };
+        
+  const char* PUNCT_TABLE[] = {
+    "", "\r", "\r\n", ". ", ", ", ": ", "!", "\"", "#", "$", "%", "&", "'", 
"(", ")",
+    "*", "+", ",", "-", ".", "/", ":", ";", "<", "=", ">", "?", "[", "]", "{", 
"}", "CTRL_UL"
+  };
+        
+  const char* DIGIT_TABLE[] = {
+    "CTRL_PS", " ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ",", 
".", "CTRL_UL", "CTRL_US"
+  };
+}
+        
+Decoder::Table Decoder::getTable(char t) {
+  switch (t) {
+  case 'L':
+    return LOWER;
+  case 'P':
+    return PUNCT;
+  case 'M':
+    return MIXED;
+  case 'D':
+    return DIGIT;
+  case 'B':
+    return BINARY;
+  case 'U':
+  default:
+    return UPPER;
+  }
+}
+        
+const char* Decoder::getCharacter(zxing::aztec::Decoder::Table table, int 
code) {
+  switch (table) {
+  case UPPER:
+    return UPPER_TABLE[code];
+  case LOWER:
+    return LOWER_TABLE[code];
+  case MIXED:
+    return MIXED_TABLE[code];
+  case PUNCT:
+    return PUNCT_TABLE[code];
+  case DIGIT:
+    return DIGIT_TABLE[code];
+  default:
+    return "";
+  }
+}
+        
+Decoder::Decoder() {
+  // nothing
+}
+        
+Ref<DecoderResult> Decoder::decode(Ref<zxing::aztec::AztecDetectorResult> 
detectorResult) {
+  ddata_ = detectorResult;
+            
+  // std::printf("getting bits\n");
+            
+  Ref<BitMatrix> matrix = detectorResult->getBits();
+            
+  if (!ddata_->isCompact()) {
+    // std::printf("removing lines\n");
+    matrix = removeDashedLines(ddata_->getBits());
+  }
+            
+  // std::printf("extracting bits\n");
+  Ref<BitArray> rawbits = extractBits(matrix);
+            
+  // std::printf("correcting bits\n");
+  Ref<BitArray> aCorrectedBits = correctBits(rawbits);
+            
+  // std::printf("decoding bits\n");
+  Ref<String> result = getEncodedData(aCorrectedBits);
+            
+  // std::printf("constructing array\n");
+  ArrayRef<unsigned char> arrayOut(aCorrectedBits->getSize());
+  for (int i = 0; i < aCorrectedBits->count(); i++) {
+    arrayOut[i] = (unsigned char)aCorrectedBits->get(i);
+  }
+            
+  // std::printf("returning\n");
+            
+  return Ref<DecoderResult>(new DecoderResult(arrayOut, result));
+}
+        
+Ref<String> Decoder::getEncodedData(Ref<zxing::BitArray> correctedBits) {
+  int endIndex = codewordSize_ * ddata_->getNBDatablocks() - invertedBitCount_;
+  if (endIndex > (int)correctedBits->getSize()) {
+    // std::printf("invalid input\n");
+    throw FormatException("invalid input data");
+  }
+            
+  Table lastTable = UPPER;
+  Table table = UPPER;
+  int startIndex = 0;
+  std::string result;
+  bool end = false;
+  bool shift = false;
+  bool switchShift = false;
+  bool binaryShift = false;
+            
+  while (!end) {
+    // std::printf("decoooooding\n");
+                
+    if (shift) {
+      switchShift = true;
+    } else {
+      lastTable = table;
+    }
+                
+    int code;
+    if (binaryShift) {
+      if (endIndex - startIndex < 5) {
+        break;
+      }
+                    
+      int length = readCode(correctedBits, startIndex, 5);
+      startIndex += 5;
+      if (length == 0) {
+        if (endIndex - startIndex < 11) {
+          break;
+        }
+                        
+        length = readCode(correctedBits, startIndex, 11) + 31;
+        startIndex += 11;
+      }
+      for (int charCount = 0; charCount < length; charCount++) {
+        if (endIndex - startIndex < 8) {
+          end = true;
+          break;
+        }
+                        
+        code = readCode(correctedBits, startIndex, 8);
+        add(result, code);
+        startIndex += 8;
+      }
+      binaryShift = false;
+    } else {
+      if (table == BINARY) {
+        if (endIndex - startIndex < 8) {
+          end = true;
+          break;
+        }
+        code = readCode(correctedBits, startIndex, 8);
+        startIndex += 8;
+                        
+        add(result, code);
+      } else {
+        int size = 5;
+                        
+        if (table == DIGIT) {
+          size = 4;
+        }
+                        
+        if (endIndex - startIndex < size) {
+          end = true;
+          break;
+        }
+                        
+        code = readCode(correctedBits, startIndex, size);
+        startIndex += size;
+                        
+        const char *str = getCharacter(table, code);
+        std::string string(str);
+        if ((int)string.find("CTRL_") != -1) {
+          table = getTable(str[5]);
+                            
+          if (str[6] == 'S') {
+            shift = true;
+            if (str[5] == 'B') {
+              binaryShift = true;
+            }
+          }
+        } else {
+          result.append(string);
+        }
+                        
+      }
+    }
+                
+    if (switchShift) {
+      table = lastTable;
+      shift = false;
+      switchShift = false;
+    }
+                
+                
+  }
+            
+  return Ref<String>(new String(result));
+            
+}
+        
+Ref<zxing::BitArray> Decoder::correctBits(Ref<zxing::BitArray> rawbits) {
+  //return rawbits;
+  // std::printf("decoding stuff:%d datablocks in %d layers\n", 
ddata_->getNBDatablocks(), ddata_->getNBLayers());
+            
+  Ref<GenericGF> gf = GenericGF::AZTEC_DATA_6;
+            
+  if (ddata_->getNBLayers() <= 2) {
+    codewordSize_ = 6;
+    gf = GenericGF::AZTEC_DATA_6;
+  } else if (ddata_->getNBLayers() <= 8) {
+    codewordSize_ = 8;
+    gf = GenericGF::AZTEC_DATA_8;
+  } else if (ddata_->getNBLayers() <= 22) {
+    codewordSize_ = 10;
+    gf = GenericGF::AZTEC_DATA_10;
+  } else {
+    codewordSize_ = 12;
+    gf = GenericGF::AZTEC_DATA_12;
+  }
+            
+  int numDataCodewords = ddata_->getNBDatablocks();
+  int numECCodewords;
+  int offset;
+            
+  if (ddata_->isCompact()) {
+    offset = NB_BITS_COMPACT[ddata_->getNBLayers()] - numCodewords_ * 
codewordSize_;
+    numECCodewords = NB_DATABLOCK_COMPACT[ddata_->getNBLayers()] - 
numDataCodewords;
+  } else {
+    offset = NB_BITS[ddata_->getNBLayers()] - numCodewords_ * codewordSize_;
+    numECCodewords = NB_DATABLOCK[ddata_->getNBLayers()] - numDataCodewords;
+  }
+            
+  ArrayRef<int> dataWords(numCodewords_);
+            
+  for (int i = 0; i < numCodewords_; i++) {
+    int flag = 1;
+    for (int j = 1; j <= codewordSize_; j++) {
+      if (rawbits->get(codewordSize_ * i + codewordSize_ - j + offset)) {
+        dataWords[i] += flag;
+      }
+      flag <<= 1;
+    }
+                
+    //
+    //
+    //
+  }
+            
+  try {
+    // std::printf("trying reed solomon, numECCodewords:%d\n", numECCodewords);
+    ReedSolomonDecoder rsDecoder(gf);
+    rsDecoder.decode(dataWords, numECCodewords);
+  } catch (ReedSolomonException& rse) {
+    // std::printf("got reed solomon exception:%s, throwing 
formatexception\n", rse.what());
+    throw FormatException("rs decoding failed");
+  } catch (IllegalArgumentException& iae) {
+    // std::printf("illegal argument exception: %s", iae.what());
+  }
+            
+  offset = 0;
+  invertedBitCount_ = 0;
+            
+  Ref<BitArray> correctedBits(new BitArray(numDataCodewords * codewordSize_));
+  for (int i = 0; i < numDataCodewords; i++) {
+                
+    bool seriesColor = false;
+    int seriesCount = 0;
+    int flag = 1 << (codewordSize_ - 1);
+                
+    for (int j = 0; j < codewordSize_; j++) {
+                    
+      bool color = (dataWords[i] & flag) == flag;
+                    
+      if (seriesCount == codewordSize_ - 1) {
+                        
+        if (color == seriesColor) {
+          throw FormatException("bit was not inverted");
+        }
+                        
+        seriesColor = false;
+        seriesCount = 0;
+        offset++;
+        invertedBitCount_++;
+                        
+      } else {
+                        
+        if (seriesColor == color) {
+          seriesCount++;
+        } else {
+          seriesCount = 1;
+          seriesColor = color;
+        }
+                        
+        if (color) correctedBits->set(i * codewordSize_ + j - offset);
+                        
+      }
+                    
+      flag = (unsigned int)flag >> 1;
+                    
+    }
+  }
+            
+  return correctedBits;
+}
+        
+Ref<BitArray> Decoder::extractBits(Ref<zxing::BitMatrix> matrix) {
+  std::vector<bool> rawbits;
+            
+  if (ddata_->isCompact()) {
+    if (ddata_->getNBLayers() > 5) { //NB_BITS_COMPACT length
+      throw FormatException("data is too long");
+    }
+    rawbits = std::vector<bool>(NB_BITS_COMPACT[ddata_->getNBLayers()]);
+    numCodewords_ = NB_DATABLOCK_COMPACT[ddata_->getNBLayers()];
+  } else {
+    if (ddata_->getNBLayers() > 33) { //NB_BITS length
+      throw FormatException("data is too long");
+    }
+    rawbits = std::vector<bool>(NB_BITS[ddata_->getNBLayers()]);
+    numCodewords_ = NB_DATABLOCK[ddata_->getNBLayers()];
+  }
+            
+  int layer = ddata_->getNBLayers();
+  int size = matrix->getHeight();
+  int rawbitsOffset = 0;
+  int matrixOffset = 0;
+            
+
+  while (layer != 0) {
+                
+    int flip = 0;
+    for (int i = 0; i < 2 * size - 4; i++) {
+      rawbits[rawbitsOffset + i] = matrix->get(matrixOffset + flip, 
matrixOffset + i / 2);
+      rawbits[rawbitsOffset + 2 * size - 4 + i] = matrix->get(matrixOffset + i 
/ 2, matrixOffset + size - 1 - flip);
+      flip = (flip + 1) % 2;
+    }
+                
+    flip = 0;
+    for (int i = 2 * size + 1; i > 5; i--) {
+      rawbits[rawbitsOffset + 4 * size - 8 + (2 * size - i) + 1] =
+        matrix->get(matrixOffset + size - 1 - flip, matrixOffset + i / 2 - 1);
+      rawbits[rawbitsOffset + 6 * size - 12 + (2 * size - i) + 1] =
+        matrix->get(matrixOffset + i / 2 - 1, matrixOffset + flip);
+      flip = (flip + 1) % 2;
+    }
+                
+    matrixOffset += 2;
+    rawbitsOffset += 8 * size - 16;
+    layer--;
+    size -= 4;
+                
+  }
+            
+  Ref<BitArray> returnValue(new BitArray(rawbits.size()));
+  for (int i = 0; i < (int)rawbits.size(); i++) {
+    if (rawbits[i]) returnValue->set(i);
+  }
+            
+  return returnValue;
+            
+}
+        
+Ref<BitMatrix> Decoder::removeDashedLines(Ref<zxing::BitMatrix> matrix) {
+  int nbDashed = 1 + 2 * ((matrix->getWidth() - 1) / 2 / 16);
+  Ref<BitMatrix> newMatrix(new BitMatrix(matrix->getWidth() - nbDashed, 
matrix->getHeight() - nbDashed));
+            
+  int nx = 0;
+            
+  for (int x = 0; x < (int)matrix->getWidth(); x++) {
+                
+    if ((matrix->getWidth() / 2 - x) % 16 == 0) {
+      continue;
+    }
+                
+    int ny = 0;
+    for (int y = 0; y < (int)matrix->getHeight(); y++) {
+                    
+      if ((matrix->getWidth() / 2 - y) % 16 == 0) {
+        continue;
+      }
+                    
+      if (matrix->get(x, y)) {
+        newMatrix->set(nx, ny);
+      }
+      ny++;
+                    
+    }
+    nx++;
+                
+  }
+  return newMatrix;
+}
+        
+int Decoder::readCode(Ref<zxing::BitArray> rawbits, int startIndex, int 
length) {
+  int res = 0;
+            
+  for (int i = startIndex; i < startIndex + length; i++) {
+    res <<= 1;
+    if (rawbits->get(i)) {
+      res ++;
+    }
+  }
+            
+  return res;
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/decoder/Decoder.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/decoder/Decoder.h         
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/decoder/Decoder.h 
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,63 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Decoder.h
+ *  zxing
+ *
+ *  Created by Lukas Stabe on 08/02/2012.
+ *  Copyright 2012 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/DecoderResult.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/common/Str.h>
+#include <zxing/aztec/AztecDetectorResult.h>
+
+namespace zxing {
+    namespace aztec {
+        
+        class Decoder : public Counted {
+        private:
+            enum Table {
+                UPPER,
+                LOWER,
+                MIXED,
+                DIGIT,
+                PUNCT,
+                BINARY
+            };
+            
+            static Table getTable(char t);
+            static const char* getCharacter(Table table, int code);
+            
+            int numCodewords_;
+            int codewordSize_;
+            Ref<AztecDetectorResult> ddata_;
+            int invertedBitCount_;
+            
+            Ref<String> getEncodedData(Ref<BitArray> correctedBits);
+            Ref<BitArray> correctBits(Ref<BitArray> rawbits);
+            Ref<BitArray> extractBits(Ref<BitMatrix> matrix);
+            static Ref<BitMatrix> removeDashedLines(Ref<BitMatrix> matrix);
+            static int readCode(Ref<BitArray> rawbits, int startIndex, int 
length);
+            
+            
+        public:
+            Decoder();
+            Ref<DecoderResult> decode(Ref<AztecDetectorResult> detectorResult);
+        };
+        
+    }
+}
+

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/detector/AztecDetector.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/detector/AztecDetector.cpp    
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/detector/AztecDetector.cpp    
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,541 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Detector.cpp
+ *  zxing
+ *
+ *  Created by Lukas Stabe on 08/02/2012.
+ *  Copyright 2012 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/aztec/detector/Detector.h>
+#include <zxing/common/GridSampler.h>
+#include <zxing/common/detector/WhiteRectangleDetector.h>
+#include <zxing/common/reedsolomon/ReedSolomonDecoder.h>
+#include <zxing/common/reedsolomon/ReedSolomonException.h>
+#include <zxing/common/reedsolomon/GenericGF.h>
+#include <iostream>
+#include <cmath>
+#include <zxing/NotFoundException.h>
+
+using zxing::aztec::Detector;
+using zxing::aztec::Point;
+using zxing::aztec::AztecDetectorResult;
+using zxing::Ref;
+using zxing::ResultPoint;
+using zxing::BitArray;
+using zxing::BitMatrix;
+                
+Detector::Detector(Ref<BitMatrix> image):
+  image_(image),
+  nbLayers_(0),
+  nbDataBlocks_(0),
+  nbCenterLayers_(0) {
+        
+}
+        
+// using namespace std;
+
+Ref<AztecDetectorResult> Detector::detect() {
+  Ref<Point> pCenter = getMatrixCenter();
+            
+  std::vector<Ref<Point> > bullEyeCornerPoints = 
getBullEyeCornerPoints(pCenter);
+            
+  extractParameters(bullEyeCornerPoints);
+            
+  std::vector<Ref<ResultPoint> > corners = 
getMatrixCornerPoints(bullEyeCornerPoints);
+            
+  Ref<BitMatrix> bits = sampleGrid(image_, corners[shift_%4], 
corners[(shift_+3)%4], corners[(shift_+2)%4], corners[(shift_+1)%4]);
+            
+  // std::printf("------------\ndetected: compact:%s, nbDataBlocks:%d, 
nbLayers:%d\n------------\n",compact_?"YES":"NO", nbDataBlocks_, nbLayers_);
+            
+  return Ref<AztecDetectorResult>(new AztecDetectorResult(bits, corners, 
compact_, nbDataBlocks_, nbLayers_));
+}
+        
+void Detector::extractParameters(std::vector<Ref<Point> > bullEyeCornerPoints) 
{
+  // get the bits around the bull's eye
+  Ref<BitArray> resab = sampleLine(bullEyeCornerPoints[0], 
bullEyeCornerPoints[1], 2*nbCenterLayers_+1);
+  Ref<BitArray> resbc = sampleLine(bullEyeCornerPoints[1], 
bullEyeCornerPoints[2], 2*nbCenterLayers_+1);
+  Ref<BitArray> rescd = sampleLine(bullEyeCornerPoints[2], 
bullEyeCornerPoints[3], 2*nbCenterLayers_+1);
+  Ref<BitArray> resda = sampleLine(bullEyeCornerPoints[3], 
bullEyeCornerPoints[0], 2*nbCenterLayers_+1);
+        
+  // determin the orientation of the matrix
+  if (resab->get(0) && resab->get(2 * nbCenterLayers_)) {
+    shift_ = 0;
+  } else if (resbc->get(0) && resbc->get(2 * nbCenterLayers_)) {
+    shift_ = 1;
+  } else if (rescd->get(0) && rescd->get(2 * nbCenterLayers_)) {
+    shift_ = 2;
+  } else if (resda->get(0) && resda->get(2 * nbCenterLayers_)) {
+    shift_ = 3;
+  } else {
+    // std::printf("could not detemine orientation\n");
+    throw ReaderException("could not determine orientation");
+  }
+            
+  //d      a
+  //
+  //c      b
+            
+  //flatten the bits in a single array
+  Ref<BitArray> parameterData(new BitArray(compact_?28:40));
+  Ref<BitArray> shiftedParameterData(new BitArray(compact_?28:40));
+            
+  if (compact_) {
+    for (int i = 0; i < 7; i++) {
+      if (resab->get(2+i)) shiftedParameterData->set(i);
+      if (resbc->get(2+i)) shiftedParameterData->set(i+7);
+      if (rescd->get(2+i)) shiftedParameterData->set(i+14);
+      if (resda->get(2+i)) shiftedParameterData->set(i+21);
+    }
+    for (int i = 0; i < 28; i++) {
+      if (shiftedParameterData->get((i+shift_*7)%28)) parameterData->set(i);
+    }
+                
+  } else {
+    for (int i = 0; i < 11; i++) {
+      if (i < 5) {
+        if (resab->get(2+i)) shiftedParameterData->set(i);
+        if (resbc->get(2+i)) shiftedParameterData->set(i+10);
+        if (rescd->get(2+i)) shiftedParameterData->set(i+20);
+        if (resda->get(2+i)) shiftedParameterData->set(i+30);
+      }
+      if (i > 5) {
+        if (resab->get(2+i)) shiftedParameterData->set(i-1);
+        if (resbc->get(2+i)) shiftedParameterData->set(i+10-1);
+        if (rescd->get(2+i)) shiftedParameterData->set(i+20-1);
+        if (resda->get(2+i)) shiftedParameterData->set(i+30-1);
+      }
+    }
+    for (int i = 0; i < 40; i++) {
+      if (shiftedParameterData->get((i+shift_*10)%40)) parameterData->set(i);
+    }
+  }
+            
+  correctParameterData(parameterData, compact_);
+            
+  getParameters(parameterData);
+}
+        
+std::vector<Ref<ResultPoint> > 
Detector::getMatrixCornerPoints(std::vector<Ref<Point> > bullEyeCornerPoints) {
+  float ratio = (2 * nbLayers_ + (nbLayers_ > 4 ? 1 : 0) + (nbLayers_ - 4) / 
8) / (2.0f * nbCenterLayers_);
+            
+  int dx = bullEyeCornerPoints[0]->x - bullEyeCornerPoints[2]->x;
+  dx += dx > 0 ? 1 : -1;
+  int dy = bullEyeCornerPoints[0]->y - bullEyeCornerPoints[2]->y;
+  dy += dy > 0 ? 1 : -1;
+            
+  int targetcx = ROUND(bullEyeCornerPoints[2]->x - ratio * dx);
+  int targetcy = ROUND(bullEyeCornerPoints[2]->y - ratio * dy);
+            
+  int targetax = ROUND(bullEyeCornerPoints[0]->x + ratio * dx);
+  int targetay = ROUND(bullEyeCornerPoints[0]->y + ratio * dy);
+            
+  dx = bullEyeCornerPoints[1]->x - bullEyeCornerPoints[3]->x;
+  dx += dx > 0 ? 1 : -1;
+  dy = bullEyeCornerPoints[1]->y - bullEyeCornerPoints[3]->y;
+  dy += dy > 0 ? 1 : -1;
+            
+  int targetdx = ROUND(bullEyeCornerPoints[3]->x - ratio * dx);
+  int targetdy = ROUND(bullEyeCornerPoints[3]->y - ratio * dy);
+  int targetbx = ROUND(bullEyeCornerPoints[1]->x + ratio * dx);
+  int targetby = ROUND(bullEyeCornerPoints[1]->y + ratio * dy);
+            
+  if (!isValid(targetax, targetay) ||
+      !isValid(targetbx, targetby) ||
+      !isValid(targetcx, targetcy) ||
+      !isValid(targetdx, targetdy)) {
+    throw ReaderException("matrix extends over image bounds");
+  }
+  std::vector<Ref<ResultPoint> > returnValue;
+  returnValue.push_back(Ref<ResultPoint>(new ResultPoint(targetax, targetay)));
+  returnValue.push_back(Ref<ResultPoint>(new ResultPoint(targetbx, targetby)));
+  returnValue.push_back(Ref<ResultPoint>(new ResultPoint(targetcx, targetcy)));
+  returnValue.push_back(Ref<ResultPoint>(new ResultPoint(targetdx, targetdy)));
+                
+  return returnValue;
+            
+}
+        
+void Detector::correctParameterData(Ref<zxing::BitArray> parameterData, bool 
compact) {
+  int numCodewords;
+  int numDataCodewords;
+            
+  if (compact)  {
+    numCodewords = 7;
+    numDataCodewords = 2;
+  } else {
+    numCodewords = 10;
+    numDataCodewords = 4;
+  }
+            
+  int numECCodewords = numCodewords - numDataCodewords;
+            
+  ArrayRef<int> parameterWords(new Array<int>(numCodewords));
+            
+  int codewordSize = 4;
+  for (int i = 0; i < numCodewords; i++) {
+    int flag = 1;
+    for (int j = 1; j <= codewordSize; j++) {
+      if (parameterData->get(codewordSize*i + codewordSize - j)) {
+        parameterWords[i] += flag;
+      }
+      flag <<= 1;
+    }
+  }
+                        
+  try {
+    // std::printf("parameter data reed solomon\n");
+    ReedSolomonDecoder rsDecoder(GenericGF::AZTEC_PARAM);
+    rsDecoder.decode(parameterWords, numECCodewords);
+  } catch (ReedSolomonException& e) {
+    // std::printf("reed solomon decoding failed\n");
+    throw ReaderException("failed to decode parameter data");
+  }
+            
+  parameterData->clear();
+  for (int i = 0; i < numDataCodewords; i++) {
+    int flag = 1;
+    for (int j = 1; j <= codewordSize; j++) {
+      if ((parameterWords[i] & flag) == flag) {
+        parameterData->set(i*codewordSize+codewordSize-j);
+      }
+      flag <<= 1;
+    }
+  }
+}
+        
+std::vector<Ref<Point> > 
Detector::getBullEyeCornerPoints(Ref<zxing::aztec::Point> pCenter) {
+  Ref<Point> pina = pCenter;
+  Ref<Point> pinb = pCenter;
+  Ref<Point> pinc = pCenter;
+  Ref<Point> pind = pCenter;
+            
+  bool color = true;
+            
+  for (nbCenterLayers_ = 1; nbCenterLayers_ < 9; nbCenterLayers_++) {
+    Ref<Point> pouta = getFirstDifferent(pina, color, 1, -1);
+    Ref<Point> poutb = getFirstDifferent(pinb, color, 1, 1);
+    Ref<Point> poutc = getFirstDifferent(pinc, color, -1, 1);
+    Ref<Point> poutd = getFirstDifferent(pind, color, -1, -1);
+            
+    //d    a
+    //
+    //c    b
+                
+    if (nbCenterLayers_ > 2) {
+      float q = distance(poutd, pouta) * nbCenterLayers_ / (distance(pind, 
pina) * (nbCenterLayers_ + 2));
+      if (q < 0.75 || q > 1.25 || !isWhiteOrBlackRectangle(pouta, poutb, 
poutc, poutd)) {
+        break;
+      }
+    }
+                
+    pina = pouta;
+    pinb = poutb;
+    pinc = poutc;
+    pind = poutd;
+                
+    color = !color;
+  }
+            
+  if (nbCenterLayers_ != 5 && nbCenterLayers_ != 7) {
+    throw ReaderException("encountered wrong bullseye ring count");
+  }
+            
+  compact_ = nbCenterLayers_ == 5;
+            
+            
+            
+  float ratio = 0.75f*2 / (2*nbCenterLayers_-3);
+            
+  int dx = pina->x - pind->x;
+  int dy = pina->y - pinc->y;
+            
+  int targetcx = ROUND(pinc->x - ratio * dx);
+  int targetcy = ROUND(pinc->y - ratio * dy);
+  int targetax = ROUND(pina->x + ratio * dx);
+  int targetay = ROUND(pina->y + ratio * dy);
+            
+  dx = pinb->x - pind->x;
+  dy = pinb->y - pind->y;
+            
+  int targetdx = ROUND(pind->x - ratio * dx);
+  int targetdy = ROUND(pind->y - ratio * dy);
+  int targetbx = ROUND(pinb->x + ratio * dx);
+  int targetby = ROUND(pinb->y + ratio * dy);
+            
+  if (!isValid(targetax, targetay) ||
+      !isValid(targetbx, targetby) ||
+      !isValid(targetcx, targetcy) ||
+      !isValid(targetdx, targetdy)) {
+    throw ReaderException("bullseye extends over image bounds");
+  }
+            
+  std::vector<Ref<Point> > returnValue;
+  returnValue.push_back(Ref<Point>(new Point(targetax, targetay)));
+  returnValue.push_back(Ref<Point>(new Point(targetbx, targetby)));
+  returnValue.push_back(Ref<Point>(new Point(targetcx, targetcy)));
+  returnValue.push_back(Ref<Point>(new Point(targetdx, targetdy)));
+            
+  return returnValue;
+            
+}
+        
+Ref<Point> Detector::getMatrixCenter() {
+  Ref<ResultPoint> pointA, pointB, pointC, pointD;
+  try {
+                
+    std::vector<Ref<ResultPoint> > cornerPoints = 
WhiteRectangleDetector(image_).detect();
+    pointA = cornerPoints[0];
+    pointB = cornerPoints[1];
+    pointC = cornerPoints[2];
+    pointD = cornerPoints[3];
+                
+  } catch (NotFoundException& e) {
+                
+    int cx = image_->getWidth() / 2;
+    int cy = image_->getHeight() / 2;
+                
+    pointA = getFirstDifferent(Ref<Point>(new Point(cx+15/2, cy-15/2)), false, 
 1, -1)->toResultPoint();
+    pointB = getFirstDifferent(Ref<Point>(new Point(cx+15/2, cy+15/2)), false, 
 1,  1)->toResultPoint();
+    pointC = getFirstDifferent(Ref<Point>(new Point(cx-15/2, cy+15/2)), false, 
-1, -1)->toResultPoint();
+    pointD = getFirstDifferent(Ref<Point>(new Point(cx-15/2, cy-15/2)), false, 
-1, -1)->toResultPoint();
+                                      
+  }
+            
+  int cx = ROUND((pointA->getX() + pointD->getX() + pointB->getX() + 
pointC->getX()) / 4);
+  int cy = ROUND((pointA->getY() + pointD->getY() + pointB->getY() + 
pointC->getY()) / 4);
+            
+  try {
+                
+    std::vector<Ref<ResultPoint> > cornerPoints = 
WhiteRectangleDetector(image_, 15, cx, cy).detect();
+    pointA = cornerPoints[0];
+    pointB = cornerPoints[1];
+    pointC = cornerPoints[2];
+    pointD = cornerPoints[3];
+                
+  } catch (NotFoundException& e) {
+                
+    pointA = getFirstDifferent(Ref<Point>(new Point(cx+15/2, cy-15/2)), false, 
 1, -1)->toResultPoint();
+    pointB = getFirstDifferent(Ref<Point>(new Point(cx+15/2, cy+15/2)), false, 
 1,  1)->toResultPoint();
+    pointC = getFirstDifferent(Ref<Point>(new Point(cx-15/2, cy+15/2)), false, 
-1, -1)->toResultPoint();
+    pointD = getFirstDifferent(Ref<Point>(new Point(cx-15/2, cy-15/2)), false, 
-1, -1)->toResultPoint();
+                
+  }
+            
+  cx = ROUND((pointA->getX() + pointD->getX() + pointB->getX() + 
pointC->getX()) / 4);
+  cy = ROUND((pointA->getY() + pointD->getY() + pointB->getY() + 
pointC->getY()) / 4);
+            
+  return Ref<Point>(new Point(cx, cy));
+            
+}
+        
+Ref<BitMatrix> Detector::sampleGrid(Ref<zxing::BitMatrix> image,
+                                    Ref<zxing::ResultPoint> topLeft,
+                                    Ref<zxing::ResultPoint> bottomLeft,
+                                    Ref<zxing::ResultPoint> bottomRight,
+                                    Ref<zxing::ResultPoint> topRight) {
+  int dimension;
+  if (compact_) {
+    dimension = 4 * nbLayers_+11;
+  } else {
+    if (nbLayers_ <= 4) {
+      dimension = 4 * nbLayers_ + 15;
+    } else {
+      dimension = 4 * nbLayers_ + 2 * ((nbLayers_-4)/8 + 1) + 15;
+    }
+  }
+            
+  GridSampler sampler = GridSampler::getInstance();
+            
+  return sampler.sampleGrid(image,
+                            dimension,
+                            0.5f,
+                            0.5f,
+                            dimension - 0.5f,
+                            0.5f,
+                            dimension - 0.5f,
+                            dimension - 0.5f,
+                            0.5f,
+                            dimension - 0.5f,
+                            topLeft->getX(),
+                            topLeft->getY(),
+                            topRight->getX(),
+                            topRight->getY(),
+                            bottomRight->getX(),
+                            bottomRight->getY(),
+                            bottomLeft->getX(),
+                            bottomLeft->getY());
+}
+        
+void Detector::getParameters(Ref<zxing::BitArray> parameterData) {
+  nbLayers_ = 0;
+  nbDataBlocks_ = 0;
+            
+  int nbBitsForNbLayers;
+  int nbBitsForNbDatablocks;
+            
+  if (compact_) {
+    nbBitsForNbLayers = 2;
+    nbBitsForNbDatablocks = 6;
+  } else {
+    nbBitsForNbLayers = 5;
+    nbBitsForNbDatablocks = 11;
+  }
+            
+  for (int i = 0; i < nbBitsForNbLayers; i++) {
+    nbLayers_ <<= 1;
+    if (parameterData->get(i)) {
+      nbLayers_ += 1;
+    }
+  }
+            
+  for (int i = nbBitsForNbLayers; i < nbBitsForNbLayers + 
nbBitsForNbDatablocks; i++) {
+    nbDataBlocks_ <<= 1;
+    if (parameterData->get(i)) {
+      nbDataBlocks_ += 1;
+    }
+  }
+            
+  nbLayers_ ++;
+  nbDataBlocks_ ++;
+}
+        
+Ref<BitArray> Detector::sampleLine(Ref<zxing::aztec::Point> p1, 
Ref<zxing::aztec::Point> p2, int size) {
+  Ref<BitArray> res(new BitArray(size));
+            
+  float d = distance(p1, p2);
+  float moduleSize = d / (size-1);
+  float dx = moduleSize * (p2->x - p1->x)/d;
+  float dy = moduleSize * (p2->y - p1->y)/d;
+            
+  float px = p1->x;
+  float py = p1->y;
+            
+  for (int i = 0; i < size; i++) {
+    if (image_->get(ROUND(px), ROUND(py))) res->set(i);
+    px += dx;
+    py += dy;
+  }
+            
+  return res;
+}
+        
+bool Detector::isWhiteOrBlackRectangle(Ref<zxing::aztec::Point> p1,
+                                       Ref<zxing::aztec::Point> p2,
+                                       Ref<zxing::aztec::Point> p3,
+                                       Ref<zxing::aztec::Point> p4) {
+  int corr = 3;
+            
+  p1 = new Point(p1->x - corr, p1->y + corr);
+  p2 = new Point(p2->x - corr, p2->y - corr);
+  p3 = new Point(p3->x + corr, p3->y - corr);
+  p4 = new Point(p4->x + corr, p4->y + corr);
+            
+  int cInit = getColor(p4, p1);
+            
+  if (cInit == 0) {
+    return false;
+  }
+            
+  int c = getColor(p1, p2);
+            
+  if (c != cInit) {
+    return false;
+  }
+            
+  c = getColor(p2, p3);
+            
+  if (c != cInit) {
+    return false;
+  }
+            
+  c = getColor(p3, p4);
+            
+  if (c != cInit) {
+    return false;
+  }
+            
+  return true;
+}
+        
+int Detector::getColor(Ref<zxing::aztec::Point> p1, Ref<zxing::aztec::Point> 
p2) {
+  float d = distance(p1, p2);
+            
+  float dx = (p2->x - p1->x) / d;
+  float dy = (p2->y - p1->y) / d;
+            
+  int error = 0;
+            
+  float px = p1->x;
+  float py = p1->y;
+            
+  bool colorModel = image_->get(p1->x, p1->y);
+            
+  for (int i = 0; i < d; i++) {
+    px += dx;
+    py += dy;
+    if (image_->get(ROUND(px), ROUND(py)) != colorModel) {
+      error ++;
+    }
+  }
+            
+  float errRatio = (float)error/d;
+            
+            
+  if (errRatio > 0.1 && errRatio < 0.9) {
+    return 0;
+  }
+            
+  if (errRatio <= 0.1) {
+    return colorModel?1:-1;
+  } else {
+    return colorModel?-1:1;
+  }
+}
+        
+Ref<Point> Detector::getFirstDifferent(Ref<zxing::aztec::Point> init, bool 
color, int dx, int dy) {
+  int x = init->x + dx;
+  int y = init->y + dy;
+            
+  while (isValid(x, y) && image_->get(x, y) == color) {
+    x += dx;
+    y += dy;
+  }
+            
+  x -= dx;
+  y -= dy;
+            
+  while (isValid(x, y) && image_->get(x, y) == color) {
+    x += dx;
+  }
+            
+  x -= dx;
+            
+  while (isValid(x, y) && image_->get(x, y) == color) {
+    y += dy;
+  }
+            
+  y -= dy;
+            
+  return Ref<Point>(new Point(x, y));
+}
+        
+bool Detector::isValid(int x, int y) {
+  return x >= 0 && x < (int)image_->getWidth() && y > 0 && y < 
(int)image_->getHeight();
+}
+        
+float Detector::distance(Ref<zxing::aztec::Point> a, Ref<zxing::aztec::Point> 
b) {
+  return sqrtf((float)((a->x - b->x) * (a->x - b->x) + (a->y - b->y) * (a->y - 
b->y)));
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/detector/Detector.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/detector/Detector.h       
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/aztec/detector/Detector.h       
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,87 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Detector.h
+ *  zxing
+ *
+ *  Created by Lukas Stabe on 08/02/2012.
+ *  Copyright 2012 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <vector>
+
+#include <zxing/common/BitArray.h>
+#include <zxing/ResultPoint.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/DecodeHints.h>
+#include <zxing/aztec/AztecDetectorResult.h>
+
+#define ROUND(a) ((int)(a + 0.5f))
+
+namespace zxing {
+    namespace aztec {
+        
+        class Point : public Counted {
+        public:
+            int x;
+            int y;
+            
+            Ref<ResultPoint> toResultPoint() { 
+                return Ref<ResultPoint>(new ResultPoint(x, y));
+            }
+            
+            Point(int ax, int ay):x(ax),y(ay) {};
+            
+        };
+        
+        class Detector : public Counted {
+            
+        private:
+            Ref<BitMatrix> image_;
+            
+            bool compact_;
+            int nbLayers_;
+            int nbDataBlocks_;
+            int nbCenterLayers_;
+            int shift_;
+            
+            void extractParameters(std::vector<Ref<Point> > 
bullEyeCornerPoints);
+            std::vector<Ref<ResultPoint> > 
getMatrixCornerPoints(std::vector<Ref<Point> > bullEyeCornerPoints);
+            static void correctParameterData(Ref<BitArray> parameterData, bool 
compact);
+            std::vector<Ref<Point> > getBullEyeCornerPoints(Ref<Point> 
pCenter);
+            Ref<Point> getMatrixCenter();
+            Ref<BitMatrix> sampleGrid(Ref<BitMatrix> image,
+                                      Ref<ResultPoint> topLeft,
+                                      Ref<ResultPoint> bottomLeft,
+                                      Ref<ResultPoint> bottomRight,
+                                      Ref<ResultPoint> topRight);
+            void getParameters(Ref<BitArray> parameterData);
+            Ref<BitArray> sampleLine(Ref<Point> p1, Ref<Point> p2, int size);
+            bool isWhiteOrBlackRectangle(Ref<Point> p1,
+                                         Ref<Point> p2,
+                                         Ref<Point> p3,
+                                         Ref<Point> p4);
+            int getColor(Ref<Point> p1, Ref<Point> p2);
+            Ref<Point> getFirstDifferent(Ref<Point> init, bool color, int dx, 
int dy);
+            bool isValid(int x, int y);
+            static float distance(Ref<Point> a, Ref<Point> b);
+            
+        public:
+            Detector(Ref<BitMatrix> image);
+            Ref<AztecDetectorResult> detect();
+        };
+        
+    }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Array.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Array.cpp                
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Array.cpp        
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,22 @@
+/*
+ *  Array.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 07/05/2008.
+ *  Copyright 2008 Google UK. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Array.h>
+

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Array.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Array.h                  
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Array.h  2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,208 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __ARRAY_H__
+#define __ARRAY_H__
+
+/*
+ *  Array.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <vector>
+
+#ifdef DEBUG_COUNTING
+#include <iostream>
+#include <typeinfo>
+#endif
+
+#include <zxing/common/Counted.h>
+
+
+namespace zxing {
+
+template<typename T> class Array : public Counted {
+protected:
+public:
+  std::vector<T> values_;
+  Array(size_t n) :
+      Counted(), values_(n, T()) {
+  }
+  Array(T *ts, size_t n) :
+      Counted(), values_(ts, ts+n) {
+  }
+  Array(T v, size_t n) :
+      Counted(), values_(n, v) {
+  }
+  Array(std::vector<T> &v) :
+      Counted(), values_(v) {
+  }
+  Array(Array<T> &other) :
+      Counted(), values_(other.values_) {
+  }
+  Array(Array<T> *other) :
+      Counted(), values_(other->values_) {
+  }
+  virtual ~Array() {
+  }
+  Array<T>& operator=(const Array<T> &other) {
+#ifdef DEBUG_COUNTING
+    cout << "assigning values from Array " << &other << " to this Array " << 
this << ", ";
+#endif
+    values_ = other.values_;
+#ifdef DEBUG_COUNTING
+    cout << "new size = " << values_.size() << "\n";
+#endif
+    return *this;
+  }
+  Array<T>& operator=(const std::vector<T> &array) {
+#ifdef DEBUG_COUNTING
+    cout << "assigning values from Array " << &array << " to this Array " << 
this << ", ";
+#endif
+    values_ = array;
+#ifdef DEBUG_COUNTING
+    cout << "new size = " << values_.size() << "\n";
+#endif
+    return *this;
+  }
+  T operator[](size_t i) const {
+    return values_[i];
+  }
+  T& operator[](size_t i) {
+    return values_[i];
+  }
+  size_t size() const {
+    return values_.size();
+  }
+  std::vector<T> values() const {
+    return values_;
+  }
+  std::vector<T>& values() {
+    return values_;
+  }
+};
+
+template<typename T> class ArrayRef : public Counted {
+private:
+public:
+  Array<T> *array_;
+  ArrayRef() :
+      array_(0) {
+#ifdef DEBUG_COUNTING
+    cout << "instantiating empty ArrayRef " << this << "\n";
+#endif
+  }
+  ArrayRef(size_t n) :
+      array_(0) {
+#ifdef DEBUG_COUNTING
+    cout << "instantiating ArrayRef " << this << "with size " << n << "\n";
+#endif
+    reset(new Array<T> (n));
+  }
+  ArrayRef(T *ts, size_t n) :
+      array_(0) {
+#ifdef DEBUG_COUNTING
+    cout << "instantiating ArrayRef " << this << "with " << n << " elements at 
" << (void *)ts << "\n";
+#endif
+    reset(new Array<T> (ts, n));
+  }
+  ArrayRef(Array<T> *a) :
+      array_(0) {
+#ifdef DEBUG_COUNTING
+    cout << "instantiating ArrayRef " << this << " from pointer:\n";
+#endif
+    reset(a);
+  }
+  ArrayRef(const Array<T> &a) :
+      array_(0) {
+#ifdef DEBUG_COUNTING
+    cout << "instantiating ArrayRef " << this << " from reference to Array " 
<< (void *)&a << ":\n";
+#endif
+    reset(const_cast<Array<T> *>(&a));
+  }
+  ArrayRef(const ArrayRef &other) :
+      Counted(), array_(0) {
+#ifdef DEBUG_COUNTING
+    cout << "instantiating ArrayRef " << this << " from ArrayRef " << &other 
<< ":\n";
+#endif
+    reset(other.array_);
+  }
+
+  template<class Y>
+  ArrayRef(const ArrayRef<Y> &other) :
+      array_(0) {
+#ifdef DEBUG_COUNTING
+    cout << "instantiating ArrayRef " << this << " from ArrayRef " << &other 
<< ":\n";
+#endif
+    reset(static_cast<const Array<T> *>(other.array_));
+  }
+
+  ~ArrayRef() {
+#ifdef DEBUG_COUNTING
+    cout << "destroying ArrayRef " << this << " with " << (array_ ? 
typeid(*array_).name() : "NULL") << " "
+         << array_ << "\n";
+#endif
+    if (array_) {
+      array_->release();
+    }
+    array_ = 0;
+  }
+
+  T operator[](size_t i) const {
+    return (*array_)[i];
+  }
+  T& operator[](size_t i) {
+    return (*array_)[i];
+  }
+  size_t size() const {
+    return array_->size();
+  }
+
+  void reset(Array<T> *a) {
+#ifdef DEBUG_COUNTING
+    cout << "resetting ArrayRef " << this << " from " << (array_ ? 
typeid(*array_).name() : "NULL") << " "
+         << array_ << " to " << (a ? typeid(*a).name() : "NULL") << " " << a 
<< "\n";
+#endif
+    if (a) {
+      a->retain();
+    }
+    if (array_) {
+      array_->release();
+    }
+    array_ = a;
+  }
+  void reset(const ArrayRef<T> &other) {
+    reset(other.array_);
+  }
+  ArrayRef<T>& operator=(const ArrayRef<T> &other) {
+    reset(other);
+    return *this;
+  }
+  ArrayRef<T>& operator=(Array<T> *a) {
+    reset(a);
+    return *this;
+  }
+
+  Array<T>& operator*() {
+    return *array_;
+  }
+  Array<T>* operator->() {
+    return array_;
+  }
+};
+
+} // namespace zxing
+
+#endif // __ARRAY_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitArray.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitArray.cpp             
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitArray.cpp     
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,127 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Copyright 2010 ZXing authors. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/BitArray.h>
+
+using namespace std;
+
+namespace zxing {
+
+
+size_t BitArray::wordsForBits(size_t bits) {
+  int arraySize = (bits + bitsPerWord_ - 1) >> logBits_;
+  return arraySize;
+}
+
+BitArray::BitArray(size_t size) :
+    size_(size), bits_(wordsForBits(size), (const unsigned int)0) {
+}
+
+BitArray::~BitArray() {
+}
+
+size_t BitArray::getSize() {
+  return size_;
+}
+
+void BitArray::setBulk(size_t i, unsigned int newBits) {
+  bits_[i >> logBits_] = newBits;
+}
+
+void BitArray::setRange(int start, int end) {
+  if (end < start) {
+    throw IllegalArgumentException("invalid call to BitArray::setRange");
+  }
+  if (end == start) {
+    return;
+  }
+  end--; // will be easier to treat this as the last actually set bit -- 
inclusive
+  int firstInt = start >> 5;
+  int lastInt = end >> 5;
+  for (int i = firstInt; i <= lastInt; i++) {
+    int firstBit = i > firstInt ? 0 : start & 0x1F;
+    int lastBit = i < lastInt ? 31 : end & 0x1F;
+    int mask;
+    if (firstBit == 0 && lastBit == 31) {
+      mask = -1;
+    } else {
+      mask = 0;
+      for (int j = firstBit; j <= lastBit; j++) {
+        mask |= 1 << j;
+      }
+    }
+    bits_[i] |= mask;
+  }
+}
+
+void BitArray::clear() {
+  size_t max = bits_.size();
+  for (size_t i = 0; i < max; i++) {
+    bits_[i] = 0;
+  }
+}
+
+bool BitArray::isRange(size_t start, size_t end, bool value) {
+  if (end < start) {
+    throw IllegalArgumentException("end must be after start");
+  }
+  if (end == start) {
+    return true;
+  }
+  // treat the 'end' as inclusive, rather than exclusive
+  end--;
+  size_t firstWord = start >> logBits_;
+  size_t lastWord = end >> logBits_;
+  for (size_t i = firstWord; i <= lastWord; i++) {
+    size_t firstBit = i > firstWord ? 0 : start & bitsMask_;
+    size_t lastBit = i < lastWord ? bitsPerWord_ - 1: end & bitsMask_;
+    unsigned int mask;
+    if (firstBit == 0 && lastBit == bitsPerWord_ - 1) {
+      mask = numeric_limits<unsigned int>::max();
+    } else {
+      mask = 0;
+      for (size_t j = firstBit; j <= lastBit; j++) {
+        mask |= 1 << j;
+      }
+    }
+    if (value) {
+      if ((bits_[i] & mask) != mask) {
+        return false;
+      }
+    } else {
+      if ((bits_[i] & mask) != 0) {
+        return false;
+      }
+    }
+  }
+  return true;
+}
+
+vector<unsigned int>& BitArray::getBitArray() {
+  return bits_;
+}
+
+void BitArray::reverse() {
+  std::vector<unsigned int> newBits(bits_.size(),(const unsigned int) 0);
+  for (size_t i = 0; i < size_; i++) {
+    if (get(size_ - i - 1)) {
+      newBits[i >> logBits_] |= 1<< (i & bitsMask_);
+    }
+  }
+  bits_ = newBits;
+}
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitArray.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitArray.h               
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitArray.h       
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,70 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __BIT_ARRAY_H__
+#define __BIT_ARRAY_H__
+
+/*
+ *  Copyright 2010 ZXing authors. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+#include <zxing/common/IllegalArgumentException.h>
+#include <vector>
+#include <limits>
+
+namespace zxing {
+
+#define ZX_LOG_DIGITS(digits) \
+    ((digits == 8) ? 3 : \
+     ((digits == 16) ? 4 : \
+      ((digits == 32) ? 5 : \
+       ((digits == 64) ? 6 : \
+        ((digits == 128) ? 7 : \
+         (-1))))))
+
+class BitArray : public Counted {
+private:
+  size_t size_;
+  std::vector<unsigned int> bits_;
+  static const unsigned int bitsPerWord_ =
+    std::numeric_limits<unsigned int>::digits;
+  static const unsigned int logBits_ = ZX_LOG_DIGITS(bitsPerWord_);
+  static const unsigned int bitsMask_ = (1 << logBits_) - 1;
+  static size_t wordsForBits(size_t bits);
+  explicit BitArray();
+
+public:
+  BitArray(size_t size);
+  ~BitArray();
+  size_t getSize();
+
+  bool get(size_t i) {
+    return (bits_[i >> logBits_] & (1 << (i & bitsMask_))) != 0;
+  }
+
+  void set(size_t i) {
+    bits_[i >> logBits_] |= 1 << (i & bitsMask_);
+  }
+
+  void setBulk(size_t i, unsigned int newBits);
+  void setRange(int start, int end);
+  void clear();
+  bool isRange(size_t start, size_t end, bool value);
+  std::vector<unsigned int>& getBitArray();
+  void reverse();
+};
+
+}
+
+#endif // __BIT_ARRAY_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitMatrix.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitMatrix.cpp            
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitMatrix.cpp    
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,157 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Copyright 2010 ZXing authors. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/BitMatrix.h>
+#include <zxing/common/IllegalArgumentException.h>
+
+#include <iostream>
+#include <sstream>
+#include <string>
+
+using std::ostream;
+using std::ostringstream;
+
+using zxing::BitMatrix;
+using zxing::BitArray;
+using zxing::Ref;
+
+namespace {
+  size_t wordsForSize(size_t width,
+                      size_t height,
+                      unsigned int bitsPerWord,
+                      unsigned int logBits) {
+    size_t bits = width * height;
+    int arraySize = (bits + bitsPerWord - 1) >> logBits;
+    return arraySize;
+  }
+}
+
+BitMatrix::BitMatrix(size_t dimension) :
+  width_(dimension), height_(dimension), words_(0), bits_(NULL) {
+  words_ = wordsForSize(width_, height_, bitsPerWord, logBits);
+  bits_ = new unsigned int[words_];
+  clear();
+}
+
+BitMatrix::BitMatrix(size_t width, size_t height) :
+  width_(width), height_(height), words_(0), bits_(NULL) {
+  words_ = wordsForSize(width_, height_, bitsPerWord, logBits);
+  bits_ = new unsigned int[words_];
+  clear();
+}
+
+BitMatrix::~BitMatrix() {
+  delete[] bits_;
+}
+
+
+void BitMatrix::flip(size_t x, size_t y) {
+  size_t offset = x + width_ * y;
+  bits_[offset >> logBits] ^= 1 << (offset & bitsMask);
+}
+
+void BitMatrix::clear() {
+  std::fill(bits_, bits_+words_, 0);
+}
+
+void BitMatrix::setRegion(size_t left, size_t top, size_t width, size_t 
height) {
+  if ((long)top < 0 || (long)left < 0) {
+    throw IllegalArgumentException("topI and leftJ must be nonnegative");
+  }
+  if (height < 1 || width < 1) {
+    throw IllegalArgumentException("height and width must be at least 1");
+  }
+  size_t right = left + width;
+  size_t bottom = top + height;
+  if (right > width_ || bottom > height_) {
+    throw IllegalArgumentException("top + height and left + width must be <= 
matrix dimension");
+  }
+  for (size_t y = top; y < bottom; y++) {
+    int yOffset = width_ * y;
+    for (size_t x = left; x < right; x++) {
+      size_t offset = x + yOffset;
+      bits_[offset >> logBits] |= 1 << (offset & bitsMask);
+    }
+  }
+}
+
+Ref<BitArray> BitMatrix::getRow(int y, Ref<BitArray> row) {
+  if (row.empty() || row->getSize() < width_) {
+    row = new BitArray(width_);
+  } else {
+    row->clear();
+  }
+  size_t start = y * width_;
+  size_t end = start + width_ - 1; // end is inclusive
+  size_t firstWord = start >> logBits;
+  size_t lastWord = end >> logBits;
+  size_t bitOffset = start & bitsMask;
+  for (size_t i = firstWord; i <= lastWord; i++) {
+    size_t firstBit = i > firstWord ? 0 : start & bitsMask;
+    size_t lastBit = i < lastWord ? bitsPerWord - 1 : end & bitsMask;
+    unsigned int mask;
+    if (firstBit == 0 && lastBit == logBits) {
+      mask = std::numeric_limits<unsigned int>::max();
+    } else {
+      mask = 0;
+      for (size_t j = firstBit; j <= lastBit; j++) {
+        mask |= 1 << j;
+      }
+    }
+    row->setBulk((i - firstWord) << logBits, (bits_[i] & mask) >> bitOffset);
+    if (firstBit == 0 && bitOffset != 0) {
+      unsigned int prevBulk = row->getBitArray()[i - firstWord - 1];
+      prevBulk |= (bits_[i] & mask) << (bitsPerWord - bitOffset);
+      row->setBulk((i - firstWord - 1) << logBits, prevBulk);
+    }
+  }
+  return row;
+}
+
+size_t BitMatrix::getWidth() const {
+  return width_;
+}
+
+size_t BitMatrix::getHeight() const {
+  return height_;
+}
+
+size_t BitMatrix::getDimension() const {
+  return width_;
+}
+
+unsigned int* BitMatrix::getBits() const {
+  return bits_;
+}
+
+namespace zxing {
+  ostream& operator<<(ostream &out, const BitMatrix &bm) {
+    for (size_t y = 0; y < bm.height_; y++) {
+      for (size_t x = 0; x < bm.width_; x++) {
+        out << (bm.get(x, y) ? "X " : "  ");
+      }
+      out << "\n";
+    }
+    return out;
+  }
+}
+
+const char* BitMatrix::description() {
+  ostringstream out;
+  out << *this;
+  return out.str().c_str();
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitMatrix.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitMatrix.h              
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitMatrix.h      
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,87 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __BIT_MATRIX_H__
+#define __BIT_MATRIX_H__
+
+/*
+ *  BitMatrix.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+#include <zxing/common/BitArray.h>
+#include <limits>
+
+namespace zxing {
+
+class BitMatrix : public Counted {
+private:
+  size_t width_;
+  size_t height_;
+  size_t words_;
+  unsigned int* bits_;
+
+#define ZX_LOG_DIGITS(digits) \
+    ((digits == 8) ? 3 : \
+     ((digits == 16) ? 4 : \
+      ((digits == 32) ? 5 : \
+       ((digits == 64) ? 6 : \
+        ((digits == 128) ? 7 : \
+         (-1))))))
+
+  static const unsigned int bitsPerWord =
+    std::numeric_limits<unsigned int>::digits;
+  static const unsigned int logBits = ZX_LOG_DIGITS(bitsPerWord);
+  static const unsigned int bitsMask = (1 << logBits) - 1;
+
+public:
+  BitMatrix(size_t dimension);
+  BitMatrix(size_t width, size_t height);
+
+  ~BitMatrix();
+
+  bool get(size_t x, size_t y) const {
+    size_t offset = x + width_ * y;
+    return ((bits_[offset >> logBits] >> (offset & bitsMask)) & 0x01) != 0;
+  }
+
+  void set(size_t x, size_t y) {
+    size_t offset = x + width_ * y;
+    bits_[offset >> logBits] |= 1 << (offset & bitsMask);
+  }
+
+  void flip(size_t x, size_t y);
+  void clear();
+  void setRegion(size_t left, size_t top, size_t width, size_t height);
+  Ref<BitArray> getRow(int y, Ref<BitArray> row);
+
+  size_t getDimension() const;
+  size_t getWidth() const;
+  size_t getHeight() const;
+
+  unsigned int* getBits() const;
+
+  friend std::ostream& operator<<(std::ostream &out, const BitMatrix &bm);
+  const char *description();
+
+private:
+  BitMatrix(const BitMatrix&);
+  BitMatrix& operator =(const BitMatrix&);
+};
+
+}
+
+#endif // __BIT_MATRIX_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitSource.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitSource.cpp            
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitSource.cpp    
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,74 @@
+/*
+ *  BitSource.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 09/05/2008.
+ *  Copyright 2008 Google UK. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/BitSource.h>
+#include <zxing/common/IllegalArgumentException.h>
+
+namespace zxing {
+
+int BitSource::readBits(int numBits) {
+  if (numBits < 0 || numBits > 32) {
+    throw IllegalArgumentException("cannot read <1 or >32 bits");
+  } else if (numBits > available()) {
+    throw IllegalArgumentException("reading more bits than are available");
+  }
+
+  int result = 0;
+
+  // First, read remainder from current byte
+  if (bitOffset_ > 0) {
+    int bitsLeft = 8 - bitOffset_;
+    int toRead = numBits < bitsLeft ? numBits : bitsLeft;
+    int bitsToNotRead = bitsLeft - toRead;
+    int mask = (0xFF >> (8 - toRead)) << bitsToNotRead;
+    result = (bytes_[byteOffset_] & mask) >> bitsToNotRead;
+    numBits -= toRead;
+    bitOffset_ += toRead;
+    if (bitOffset_ == 8) {
+      bitOffset_ = 0;
+      byteOffset_++;
+    }
+  }
+
+  // Next read whole bytes
+  if (numBits > 0) {
+    while (numBits >= 8) {
+      result = (result << 8) | (bytes_[byteOffset_] & 0xFF);
+      byteOffset_++;
+      numBits -= 8;
+    }
+
+
+    // Finally read a partial byte
+    if (numBits > 0) {
+      int bitsToNotRead = 8 - numBits;
+      int mask = (0xFF >> bitsToNotRead) << bitsToNotRead;
+      result = (result << numBits) | ((bytes_[byteOffset_] & mask) >> 
bitsToNotRead);
+      bitOffset_ += numBits;
+    }
+  }
+
+  return result;
+}
+
+int BitSource::available() {
+  return 8 * (bytes_.size() - byteOffset_) - bitOffset_;
+}
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitSource.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitSource.h              
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/BitSource.h      
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,70 @@
+#ifndef __BIT_SOURCE_H__
+#define __BIT_SOURCE_H__
+
+/*
+ *  BitSource.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Array.h>
+
+namespace zxing {
+/**
+ * <p>This provides an easy abstraction to read bits at a time from a sequence 
of bytes, where the
+ * number of bits read is not often a multiple of 8.</p>
+ *
+ * <p>This class is not thread-safe.</p>
+ *
+ * @author address@hidden (Sean Owen)
+ * @author address@hidden (Christian Brunschen)
+ */
+class BitSource : public Counted {
+  typedef unsigned char byte;
+private:
+  ArrayRef<byte> bytes_;
+  int byteOffset_;
+  int bitOffset_;
+public:
+  /**
+   * @param bytes bytes from which this will read bits. Bits will be read from 
the first byte first.
+   * Bits are read within a byte from most-significant to least-significant 
bit.
+   */
+  BitSource(ArrayRef<byte> &bytes) :
+      bytes_(bytes), byteOffset_(0), bitOffset_(0) {
+  }
+
+  int getByteOffset() {
+    return byteOffset_;
+  }
+
+  /**
+   * @param numBits number of bits to read
+   * @return int representing the bits read. The bits will appear as the 
least-significant
+   *         bits of the int
+   * @throws IllegalArgumentException if numBits isn't in [1,32]
+   */
+  int readBits(int numBits);
+
+  /**
+   * @return number of bits that can be read successfully
+   */
+  int available();
+};
+
+}
+
+#endif // __BIT_SOURCE_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/CharacterSetECI.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/CharacterSetECI.cpp      
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/CharacterSetECI.cpp      
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,104 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ * Copyright 2008-2011 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/CharacterSetECI.h>
+#include <zxing/common/IllegalArgumentException.h>
+#include <zxing/FormatException.h>
+
+using std::string;
+
+using zxing::common::CharacterSetECI;
+using zxing::IllegalArgumentException;
+
+std::map<int, CharacterSetECI*> CharacterSetECI::VALUE_TO_ECI;
+std::map<std::string, CharacterSetECI*> CharacterSetECI::NAME_TO_ECI;
+
+const bool CharacterSetECI::inited = CharacterSetECI::init_tables();
+
+#define ADD_CHARACTER_SET(VALUES, STRINGS) \
+  { static int values[] = {VALUES, -1}; \
+    static char const* strings[] = {STRINGS, 0}; \
+    addCharacterSet(values, strings); }
+
+#define XC ,
+
+bool CharacterSetECI::init_tables() {
+  ADD_CHARACTER_SET(0 XC 2, "Cp437");
+  ADD_CHARACTER_SET(1 XC 3, "ISO8859_1" XC "ISO-8859-1");
+  ADD_CHARACTER_SET(4, "ISO8859_2" XC "ISO-8859-2");
+  ADD_CHARACTER_SET(5, "ISO8859_3" XC "ISO-8859-3");
+  ADD_CHARACTER_SET(6, "ISO8859_4" XC "ISO-8859-4");
+  ADD_CHARACTER_SET(7, "ISO8859_5" XC "ISO-8859-5");
+  ADD_CHARACTER_SET(8, "ISO8859_6" XC "ISO-8859-6");
+  ADD_CHARACTER_SET(9, "ISO8859_7" XC "ISO-8859-7");
+  ADD_CHARACTER_SET(10, "ISO8859_8" XC "ISO-8859-8");
+  ADD_CHARACTER_SET(11, "ISO8859_9" XC "ISO-8859-9");
+  ADD_CHARACTER_SET(12, "ISO8859_10" XC "ISO-8859-10");
+  ADD_CHARACTER_SET(13, "ISO8859_11" XC "ISO-8859-11");
+  ADD_CHARACTER_SET(15, "ISO8859_13" XC "ISO-8859-13");
+  ADD_CHARACTER_SET(16, "ISO8859_14" XC "ISO-8859-14");
+  ADD_CHARACTER_SET(17, "ISO8859_15" XC "ISO-8859-15");
+  ADD_CHARACTER_SET(18, "ISO8859_16" XC "ISO-8859-16");
+  ADD_CHARACTER_SET(20, "SJIS" XC "Shift_JIS");
+  ADD_CHARACTER_SET(21, "Cp1250" XC "windows-1250");
+  ADD_CHARACTER_SET(22, "Cp1251" XC "windows-1251");
+  ADD_CHARACTER_SET(23, "Cp1252" XC "windows-1252");
+  ADD_CHARACTER_SET(24, "Cp1256" XC "windows-1256");
+  ADD_CHARACTER_SET(25, "UnicodeBigUnmarked" XC "UTF-16BE" XC "UnicodeBig");
+  ADD_CHARACTER_SET(26, "UTF8" XC "UTF-8");
+  ADD_CHARACTER_SET(27 XC 170, "ASCII" XC "US-ASCII");
+  ADD_CHARACTER_SET(28, "Big5");
+  ADD_CHARACTER_SET(29, "GB18030" XC "GB2312" XC "EUC_CN" XC "GBK");
+  ADD_CHARACTER_SET(30, "EUC_KR" XC "EUC-KR");
+  return true;
+}
+
+#undef XC
+
+CharacterSetECI::CharacterSetECI(int const* values,
+                                 char const* const* names) 
+  : values_(values), names_(names) {
+  for(int const* values = values_; *values != -1; values++) {
+    VALUE_TO_ECI[*values] = this;
+  }
+  for(char const* const* names = names_; *names; names++) {
+    NAME_TO_ECI[string(*names)] = this;
+  }
+}
+
+char const* CharacterSetECI::name() const {
+  return names_[0];
+}
+
+int CharacterSetECI::getValue() const {
+  return values_[0];
+}
+
+void CharacterSetECI::addCharacterSet(int const* values, char const* const* 
names) {
+  new CharacterSetECI(values, names);
+}
+
+CharacterSetECI* CharacterSetECI::getCharacterSetECIByValue(int value) {
+  if (value < 0 || value >= 900) {
+    throw FormatException();
+  }
+  return VALUE_TO_ECI[value];
+}
+
+CharacterSetECI* CharacterSetECI::getCharacterSetECIByName(string const& name) 
{
+  return NAME_TO_ECI[name];
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/CharacterSetECI.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/CharacterSetECI.h        
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/CharacterSetECI.h        
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,53 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+
+#ifndef __CHARACTERSET_ECI__
+#define __CHARACTERSET_ECI__
+
+/*
+ * Copyright 2008-2011 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <map>
+#include <zxing/DecodeHints.h>
+
+namespace zxing {
+  namespace common {
+    class CharacterSetECI;
+  }
+}
+
+class zxing::common::CharacterSetECI {
+private:
+  static std::map<int, CharacterSetECI*> VALUE_TO_ECI;
+  static std::map<std::string, CharacterSetECI*> NAME_TO_ECI;
+  static const bool inited;
+  static bool init_tables();
+
+  int const* const values_;
+  char const* const* const names_;
+
+  CharacterSetECI(int const* values, char const* const* names);
+
+  static void addCharacterSet(int const* value, char const* const* 
encodingNames);
+
+public:
+  char const* name() const;
+  int getValue() const;
+
+  static CharacterSetECI* getCharacterSetECIByValue(int value);
+  static CharacterSetECI* getCharacterSetECIByName(std::string const& name);
+};
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Counted.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Counted.cpp              
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Counted.cpp      
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,32 @@
+/*
+ *  Counted.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 07/05/2008.
+ *  Copyright 2008 Google UK. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+
+namespace zxing {
+
+using namespace std;
+
+template<class T>
+ostream& operator<<(ostream &out, Ref<T>& ref) {
+  out << "Ref(" << (ref.object_ ? (*ref.object_) : "NULL") << ")";
+  return out;
+}
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Counted.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Counted.h                
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Counted.h        
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,202 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __COUNTED_H__
+#define __COUNTED_H__
+
+/*
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//#define DEBUG_COUNTING
+
+#include <iostream>
+
+#ifdef DEBUG_COUNTING
+#include <typeinfo>
+#endif
+
+namespace zxing {
+
+/* base class for reference-counted objects */
+class Counted {
+private:
+  unsigned int count_;
+public:
+  Counted() :
+      count_(0) {
+#ifdef DEBUG_COUNTING
+    cout << "instantiating " << typeid(*this).name() << " " << this <<
+         " @ " << count_ << "\n";
+#endif
+  }
+  virtual ~Counted() {
+  }
+  Counted *retain() {
+#ifdef DEBUG_COUNTING
+    cout << "retaining " << typeid(*this).name() << " " << this <<
+         " @ " << count_;
+#endif
+    count_++;
+#ifdef DEBUG_COUNTING
+    cout << "->" << count_ << "\n";
+#endif
+    return this;
+  }
+  void release() {
+#ifdef DEBUG_COUNTING
+    cout << "releasing " << typeid(*this).name() << " " << this <<
+         " @ " << count_;
+#endif
+    if (count_ == 0 || count_ == 54321) {
+#ifdef DEBUG_COUNTING
+      cout << "\nOverreleasing already-deleted object " << this << "!!!\n";
+#endif
+      throw 4711;
+    }
+    count_--;
+#ifdef DEBUG_COUNTING
+    cout << "->" << count_ << "\n";
+#endif
+    if (count_ == 0) {
+#ifdef DEBUG_COUNTING
+      cout << "deleting " << typeid(*this).name() << " " << this << "\n";
+#endif
+      count_ = 0xDEADF001;
+      delete this;
+    }
+  }
+
+
+  /* return the current count for denugging purposes or similar */
+  int count() const {
+    return count_;
+  }
+};
+
+/* counting reference to reference-counted objects */
+template<typename T> class Ref {
+private:
+public:
+  T *object_;
+  explicit Ref(T *o = 0) :
+      object_(0) {
+#ifdef DEBUG_COUNTING
+    cout << "instantiating Ref " << this << " from pointer" << o << "\n";
+#endif
+    reset(o);
+  }
+
+  explicit Ref(const T &o) :
+      object_(0) {
+#ifdef DEBUG_COUNTING
+    cout << "instantiating Ref " << this << " from reference\n";
+#endif
+    reset(const_cast<T *>(&o));
+  }
+
+  Ref(const Ref &other) :
+      object_(0) {
+#ifdef DEBUG_COUNTING
+    cout << "instantiating Ref " << this << " from Ref " << &other << "\n";
+#endif
+    reset(other.object_);
+  }
+
+  template<class Y>
+  Ref(const Ref<Y> &other) :
+      object_(0) {
+#ifdef DEBUG_COUNTING
+    cout << "instantiating Ref " << this << " from reference\n";
+#endif
+    reset(other.object_);
+  }
+
+  ~Ref() {
+#ifdef DEBUG_COUNTING
+    cout << "destroying Ref " << this << " with " <<
+         (object_ ? typeid(*object_).name() : "NULL") << " " << object_ << 
"\n";
+#endif
+    if (object_) {
+      object_->release();
+    }
+  }
+
+  void reset(T *o) {
+#ifdef DEBUG_COUNTING
+    cout << "resetting Ref " << this << " from " <<
+         (object_ ? typeid(*object_).name() : "NULL") << " " << object_ <<
+         " to " << (o ? typeid(*o).name() : "NULL") << " " << o << "\n";
+#endif
+    if (o) {
+      o->retain();
+    }
+    if (object_ != 0) {
+      object_->release();
+    }
+    object_ = o;
+  }
+  Ref& operator=(const Ref &other) {
+    reset(other.object_);
+    return *this;
+  }
+  template<class Y>
+  Ref& operator=(const Ref<Y> &other) {
+    reset(other.object_);
+    return *this;
+  }
+  Ref& operator=(T* o) {
+    reset(o);
+    return *this;
+  }
+  template<class Y>
+  Ref& operator=(Y* o) {
+    reset(o);
+    return *this;
+  }
+
+  T& operator*() {
+    return *object_;
+  }
+  T* operator->() const {
+    return object_;
+  }
+  operator T*() const {
+    return object_;
+  }
+
+  bool operator==(const T* that) {
+    return object_ == that;
+  }
+  bool operator==(const Ref &other) const {
+    return object_ == other.object_ || *object_ == *(other.object_);
+  }
+  template<class Y>
+  bool operator==(const Ref<Y> &other) const {
+    return object_ == other.object_ || *object_ == *(other.object_);
+  }
+
+  bool operator!=(const T* that) {
+    return !(*this == that);
+  }
+
+  bool empty() const {
+    return object_ == 0;
+  }
+
+  template<class Y>
+  friend std::ostream& operator<<(std::ostream &out, Ref<Y>& ref);
+};
+}
+
+#endif // __COUNTED_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DecoderResult.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DecoderResult.cpp        
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DecoderResult.cpp        
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,46 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  DecoderResult.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 20/05/2008.
+ *  Copyright 2008-2011 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/DecoderResult.h>
+
+using namespace std;
+using namespace zxing;
+
+DecoderResult::DecoderResult(ArrayRef<unsigned char> rawBytes,
+                             Ref<String> text,
+                             ArrayRef< ArrayRef<unsigned char> >& byteSegments,
+                             string const& ecLevel) :
+  rawBytes_(rawBytes),
+  text_(text),
+  byteSegments_(byteSegments),
+  ecLevel_(ecLevel) {}
+
+DecoderResult::DecoderResult(ArrayRef<unsigned char> rawBytes,
+                             Ref<String> text)
+  : rawBytes_(rawBytes), text_(text) {}
+
+ArrayRef<unsigned char> DecoderResult::getRawBytes() {
+  return rawBytes_;
+}
+
+Ref<String> DecoderResult::getText() {
+  return text_;
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DecoderResult.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DecoderResult.h          
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DecoderResult.h  
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,51 @@
+#ifndef __DECODER_RESULT_H__
+#define __DECODER_RESULT_H__
+
+/*
+ *  DecoderResult.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+#include <zxing/common/Array.h>
+#include <string>
+#include <zxing/common/Str.h>
+
+namespace zxing {
+
+class DecoderResult : public Counted {
+private:
+  ArrayRef<unsigned char> rawBytes_;
+  Ref<String> text_;
+  ArrayRef< ArrayRef<unsigned char> > byteSegments_;
+  std::string ecLevel_;
+
+public:
+  DecoderResult(ArrayRef<unsigned char> rawBytes,
+                Ref<String> text,
+                ArrayRef< ArrayRef<unsigned char> >& byteSegments,
+                std::string const& ecLevel);
+
+  DecoderResult(ArrayRef<unsigned char> rawBytes, Ref<String> text);
+
+  ArrayRef<unsigned char> getRawBytes();
+  Ref<String> getText();
+};
+
+}
+
+#endif // __DECODER_RESULT_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DetectorResult.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DetectorResult.cpp       
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DetectorResult.cpp       
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,38 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  DetectorResult.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 14/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/DetectorResult.h>
+
+namespace zxing {
+
+DetectorResult::DetectorResult(Ref<BitMatrix> bits, 
std::vector<Ref<ResultPoint> > points) :
+  bits_(bits), points_(points) {
+}
+
+Ref<BitMatrix> DetectorResult::getBits() {
+  return bits_;
+}
+
+std::vector<Ref<ResultPoint> > DetectorResult::getPoints() {
+  return points_;
+}
+
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DetectorResult.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DetectorResult.h         
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/DetectorResult.h 
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,43 @@
+#ifndef __DETECTOR_RESULT_H__
+#define __DETECTOR_RESULT_H__
+
+/*
+ *  DetectorResult.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <vector>
+#include <zxing/common/Counted.h>
+#include <zxing/common/Array.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/ResultPoint.h>
+
+namespace zxing {
+
+class DetectorResult : public Counted {
+private:
+  Ref<BitMatrix> bits_;
+  std::vector<Ref<ResultPoint> > points_;
+
+public:
+        DetectorResult(Ref<BitMatrix> bits, std::vector<Ref<ResultPoint> > 
points);
+  Ref<BitMatrix> getBits();
+  std::vector<Ref<ResultPoint> > getPoints();
+};
+}
+
+#endif // __DETECTOR_RESULT_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/EdgeDetector.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/EdgeDetector.cpp         
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/EdgeDetector.cpp 
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,191 @@
+/*
+ *  EdgeDetector.cpp
+ *  zxing
+ *
+ *  Created by Ralf Kistner on 7/12/2009.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/EdgeDetector.h>
+#include <algorithm>
+#include <cmath>
+
+using namespace std;
+
+namespace zxing {
+namespace EdgeDetector {
+
+void findEdgePoints(std::vector<Point>& points, const BitMatrix& image, Point 
start, Point end, bool invert, int skip, float deviation) {
+  float xdist = end.x - start.x;
+  float ydist = end.y - start.y;
+  float length = sqrt(xdist * xdist + ydist * ydist);
+
+
+  int var;
+
+  if (abs(xdist) > abs(ydist)) {
+    // Horizontal
+    if (xdist < 0)
+      skip = -skip;
+
+    var = int(abs(deviation * length / xdist));
+
+    float dy = ydist / xdist * skip;
+    bool left = (skip < 0) ^ invert;
+    int x = int(start.x);
+
+    int steps = int(xdist / skip);
+    for (int i = 0; i < steps; i++) {
+      x += skip;
+      if (x < 0 || x >= (int)image.getWidth())
+        continue; // In case we start off the edge
+      int my = int(start.y + dy * i);
+      int ey = min(my + var + 1, (int)image.getHeight() - 1);
+      int sy = max(my - var, 0);
+      for (int y = sy + 1; y < ey; y++) {
+        if (left) {
+          if (image.get(x, y) && !image.get(x, y + 1)) {
+            points.push_back(Point(x, y + 0.5f));
+          }
+        } else {
+          if (!image.get(x, y) && image.get(x, y + 1)) {
+            points.push_back(Point(x, y + 0.5f));
+          }
+        }
+      }
+    }
+  } else {
+    // Vertical
+    if (ydist < 0)
+      skip = -skip;
+
+    var = int(abs(deviation * length / ydist));
+
+    float dx = xdist / ydist * skip;
+    bool down = (skip > 0) ^ invert;
+    int y = int(start.y);
+
+    int steps = int(ydist / skip);
+    for (int i = 0; i < steps; i++) {
+      y += skip;
+      if (y < 0 || y >= (int)image.getHeight())
+        continue; // In case we start off the edge
+      int mx = int(start.x + dx * i);
+      int ex = min(mx + var + 1, (int)image.getWidth() - 1);
+      int sx = max(mx - var, 0);
+      for (int x = sx + 1; x < ex; x++) {
+        if (down) {
+          if (image.get(x, y) && !image.get(x + 1, y)) {
+            points.push_back(Point(x + 0.5f, y));
+          }
+
+        } else {
+          if (!image.get(x, y) && image.get(x + 1, y)) {
+            points.push_back(Point(x + 0.5f, y));
+          }
+        }
+
+      }
+    }
+
+  }
+}
+
+Line findLine(const BitMatrix& image, Line estimate, bool invert, int 
deviation, float threshold, int skip) {
+  float t = threshold * threshold;
+
+  Point start = estimate.start;
+  Point end = estimate.end;
+
+  vector<Point> edges;
+  edges.clear();
+  findEdgePoints(edges, image, start, end, invert, skip, deviation);
+
+  int n = edges.size();
+
+  float xdist = end.x - start.x;
+  float ydist = end.y - start.y;
+
+  bool horizontal = abs(xdist) > abs(ydist);
+
+  float max = 0;
+  Line bestLine(start, end);  // prepopulate with the given line, in case we 
can't find any line for some reason
+
+  for (int i = -deviation; i < deviation; i++) {
+    float x1, y1;
+    if (horizontal) {
+      y1 = start.y + i;
+      x1 = start.x - i * ydist / xdist;
+    } else {
+      y1 = start.y - i * xdist / ydist;
+      x1 = start.x + i;
+    }
+
+    for (int j = -deviation; j < deviation; j++) {
+      float x2, y2;
+      if (horizontal) {
+        y2 = end.y + j;
+        x2 = end.x - j * ydist / xdist;
+      } else {
+        y2 = end.y - j * xdist / ydist;
+        x2 = end.x + j;
+      }
+
+      float dx = x1 - x2;
+      float dy = y1 - y2;
+      float length = sqrt(dx * dx + dy * dy);
+
+      float score = 0;
+
+      for(int k = 0; k < n; k++) {
+        const Point& edge = edges[k];
+        float dist = ((x1 - edge.x) * dy - (y1 - edge.y) * dx) / length;
+        // Similar to least squares method
+        float s = t - dist * dist;
+        if (s > 0)
+          score += s;
+      }
+
+      if (score > max) {
+        max = score;
+        bestLine.start = Point(x1, y1);
+        bestLine.end = Point(x2, y2);
+      }
+    }
+  }
+
+  return bestLine;
+}
+
+Point intersection(Line a, Line b) {
+  float dxa = a.start.x - a.end.x;
+  float dxb = b.start.x - b.end.x;
+  float dya = a.start.y - a.end.y;
+  float dyb = b.start.y - b.end.y;
+
+  float p = a.start.x * a.end.y - a.start.y * a.end.x;
+  float q = b.start.x * b.end.y - b.start.y * b.end.x;
+  float denom = dxa * dyb - dya * dxb;
+  if(denom == 0)  // Lines don't intersect
+    return Point(INFINITY, INFINITY);
+
+  float x = (p * dxb - dxa * q) / denom;
+  float y = (p * dyb - dya * q) / denom;
+
+  return Point(x, y);
+}
+
+} // namespace EdgeDetector
+} // namespace zxing

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/EdgeDetector.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/EdgeDetector.h           
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/EdgeDetector.h   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,38 @@
+#ifndef __EDGEDETECTOR_H__
+#define __EDGEDETECTOR_H__
+/*
+ *  EdgeDetector.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <vector>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/common/Point.h>
+
+namespace zxing {
+namespace EdgeDetector {
+
+void findEdgePoints(std::vector<Point>& points, const BitMatrix& image, Point 
start, Point end, bool invert, int skip, float deviation);
+Line findLine(const BitMatrix& image, Line estimate, bool invert, int 
deviation, float threshold, int skip);
+
+Point intersection(Line a, Line b);
+
+}
+}
+#endif /* EDGEDETECTOR_H_ */

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GlobalHistogramBinarizer.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GlobalHistogramBinarizer.cpp 
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GlobalHistogramBinarizer.cpp 
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,209 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  GlobalHistogramBinarizer.cpp
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/GlobalHistogramBinarizer.h>
+#include <zxing/common/IllegalArgumentException.h>
+#include <zxing/common/Array.h>
+
+namespace zxing {
+using namespace std;
+
+const int LUMINANCE_BITS = 5;
+const int LUMINANCE_SHIFT = 8 - LUMINANCE_BITS;
+const int LUMINANCE_BUCKETS = 1 << LUMINANCE_BITS;
+
+GlobalHistogramBinarizer::GlobalHistogramBinarizer(Ref<LuminanceSource> 
source) :
+  Binarizer(source), cached_matrix_(NULL), cached_row_(NULL), 
cached_row_num_(-1) {
+
+}
+
+GlobalHistogramBinarizer::~GlobalHistogramBinarizer() {
+}
+
+
+Ref<BitArray> GlobalHistogramBinarizer::getBlackRow(int y, Ref<BitArray> row) {
+  if (y == cached_row_num_) {
+    if (cached_row_ != NULL) {
+      return cached_row_;
+    } else {
+      throw IllegalArgumentException("Too little dynamic range in luminance");
+    }
+  }
+
+  vector<int> histogram(LUMINANCE_BUCKETS, 0);
+  LuminanceSource& source = *getLuminanceSource();
+  int width = source.getWidth();
+  if (row == NULL || static_cast<int>(row->getSize()) < width) {
+    row = new BitArray(width);
+  } else {
+    row->clear();
+  }
+
+  //TODO(flyashi): cache this instead of allocating and deleting per row
+  unsigned char* row_pixels = NULL;
+  try {
+    row_pixels = new unsigned char[width];
+    row_pixels = source.getRow(y, row_pixels);
+    for (int x = 0; x < width; x++) {
+      histogram[row_pixels[x] >> LUMINANCE_SHIFT]++;
+    }
+    int blackPoint = estimate(histogram);
+
+    BitArray& array = *row;
+    int left = row_pixels[0];
+    int center = row_pixels[1];
+    for (int x = 1; x < width - 1; x++) {
+      int right = row_pixels[x + 1];
+      // A simple -1 4 -1 box filter with a weight of 2.
+      int luminance = ((center << 2) - left - right) >> 1;
+      if (luminance < blackPoint) {
+        array.set(x);
+      }
+      left = center;
+      center = right;
+    }
+
+    cached_row_ = row;
+    cached_row_num_ = y;
+    delete [] row_pixels;
+    return row;
+  } catch (IllegalArgumentException const& iae) {
+    // Cache the fact that this row failed.
+    cached_row_ = NULL;
+    cached_row_num_ = y;
+    delete [] row_pixels;
+    throw iae;
+  }
+}
+
+Ref<BitMatrix> GlobalHistogramBinarizer::getBlackMatrix() {
+  if (cached_matrix_ != NULL) {
+    return cached_matrix_;
+  }
+
+  // Faster than working with the reference
+  LuminanceSource& source = *getLuminanceSource();
+  int width = source.getWidth();
+  int height = source.getHeight();
+  vector<int> histogram(LUMINANCE_BUCKETS, 0);
+
+  // Quickly calculates the histogram by sampling four rows from the image.
+  // This proved to be more robust on the blackbox tests than sampling a
+  // diagonal as we used to do.
+  ArrayRef<unsigned char> ref (width);
+  unsigned char* row = &ref[0];
+  for (int y = 1; y < 5; y++) {
+    int rownum = height * y / 5;
+    int right = (width << 2) / 5;
+    row = source.getRow(rownum, row);
+    for (int x = width / 5; x < right; x++) {
+      histogram[row[x] >> LUMINANCE_SHIFT]++;
+    }
+  }
+
+  int blackPoint = estimate(histogram);
+
+  Ref<BitMatrix> matrix_ref(new BitMatrix(width, height));
+  BitMatrix& matrix = *matrix_ref;
+  for (int y = 0; y < height; y++) {
+    row = source.getRow(y, row);
+    for (int x = 0; x < width; x++) {
+      if (row[x] < blackPoint)
+        matrix.set(x, y);
+    }
+  }
+
+  cached_matrix_ = matrix_ref;
+  // delete [] row;
+  return matrix_ref;
+}
+
+int GlobalHistogramBinarizer::estimate(vector<int> &histogram) {
+  int numBuckets = histogram.size();
+  int maxBucketCount = 0;
+
+  // Find tallest peak in histogram
+  int firstPeak = 0;
+  int firstPeakSize = 0;
+  for (int i = 0; i < numBuckets; i++) {
+    if (histogram[i] > firstPeakSize) {
+      firstPeak = i;
+      firstPeakSize = histogram[i];
+    }
+    if (histogram[i] > maxBucketCount) {
+      maxBucketCount = histogram[i];
+    }
+  }
+
+  // Find second-tallest peak -- well, another peak that is tall and not
+  // so close to the first one
+  int secondPeak = 0;
+  int secondPeakScore = 0;
+  for (int i = 0; i < numBuckets; i++) {
+    int distanceToBiggest = i - firstPeak;
+    // Encourage more distant second peaks by multiplying by square of distance
+    int score = histogram[i] * distanceToBiggest * distanceToBiggest;
+    if (score > secondPeakScore) {
+      secondPeak = i;
+      secondPeakScore = score;
+    }
+  }
+
+  // Put firstPeak first
+  if (firstPeak > secondPeak) {
+    int temp = firstPeak;
+    firstPeak = secondPeak;
+    secondPeak = temp;
+  }
+
+  // Kind of arbitrary; if the two peaks are very close, then we figure there 
is
+  // so little dynamic range in the image, that discriminating black and white
+  // is too error-prone.
+  // Decoding the image/line is either pointless, or may in some cases lead to
+  // a false positive for 1D formats, which are relatively lenient.
+  // We arbitrarily say "close" is
+  // "<= 1/16 of the total histogram buckets apart"
+  if (secondPeak - firstPeak <= numBuckets >> 4) {
+    throw IllegalArgumentException("Too little dynamic range in luminance");
+  }
+
+  // Find a valley between them that is low and closer to the white peak
+  int bestValley = secondPeak - 1;
+  int bestValleyScore = -1;
+  for (int i = secondPeak - 1; i > firstPeak; i--) {
+    int fromFirst = i - firstPeak;
+    // Favor a "valley" that is not too close to either peak -- especially not
+    // the black peak -- and that has a low value of course
+    int score = fromFirst * fromFirst * (secondPeak - i) *
+      (maxBucketCount - histogram[i]);
+    if (score > bestValleyScore) {
+      bestValley = i;
+      bestValleyScore = score;
+    }
+  }
+
+  return bestValley << LUMINANCE_SHIFT;
+}
+
+Ref<Binarizer> GlobalHistogramBinarizer::createBinarizer(Ref<LuminanceSource> 
source) {
+  return Ref<Binarizer> (new GlobalHistogramBinarizer(source));
+}
+
+} // namespace zxing

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GlobalHistogramBinarizer.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GlobalHistogramBinarizer.h   
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GlobalHistogramBinarizer.h   
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,47 @@
+#ifndef __GLOBALHISTOGRAMBINARIZER_H__
+#define __GLOBALHISTOGRAMBINARIZER_H__
+/*
+ *  GlobalHistogramBinarizer.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <vector>
+#include <zxing/Binarizer.h>
+#include <zxing/common/BitArray.h>
+#include <zxing/common/BitMatrix.h>
+
+namespace zxing {
+       
+       class GlobalHistogramBinarizer : public Binarizer {
+        private:
+    Ref<BitMatrix> cached_matrix_;
+         Ref<BitArray> cached_row_;
+         int cached_row_num_;
+
+       public:
+               GlobalHistogramBinarizer(Ref<LuminanceSource> source);
+               virtual ~GlobalHistogramBinarizer();
+               
+               virtual Ref<BitArray> getBlackRow(int y, Ref<BitArray> row);
+               virtual Ref<BitMatrix> getBlackMatrix();
+               static int estimate(std::vector<int> &histogram);
+               Ref<Binarizer> createBinarizer(Ref<LuminanceSource> source);
+       };
+       
+}
+
+#endif /* GLOBALHISTOGRAMBINARIZER_H_ */

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleLuminanceSource.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleLuminanceSource.cpp 
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleLuminanceSource.cpp 
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,70 @@
+/*
+ *  GreyscaleLuminanceSource.cpp
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/GreyscaleLuminanceSource.h>
+#include <zxing/common/GreyscaleRotatedLuminanceSource.h>
+#include <zxing/common/IllegalArgumentException.h>
+
+namespace zxing {
+
+GreyscaleLuminanceSource::GreyscaleLuminanceSource(unsigned char* greyData, 
int dataWidth,
+    int dataHeight, int left, int top, int width, int height) : 
greyData_(greyData),
+    dataWidth_(dataWidth), dataHeight_(dataHeight), left_(left), top_(top), 
width_(width),
+    height_(height) {
+
+  if (left + width > dataWidth || top + height > dataHeight || top < 0 || left 
< 0) {
+    throw IllegalArgumentException("Crop rectangle does not fit within image 
data.");
+  }
+}
+
+unsigned char* GreyscaleLuminanceSource::getRow(int y, unsigned char* row) {
+  if (y < 0 || y >= this->getHeight()) {
+    throw IllegalArgumentException("Requested row is outside the image.");
+  }
+  int width = getWidth();
+  // TODO(flyashi): determine if row has enough size.
+  if (row == NULL) {
+    row = new unsigned char[width_];
+  }
+  int offset = (y + top_) * dataWidth_ + left_;
+  memcpy(row, &greyData_[offset], width);
+  return row;
+}
+
+unsigned char* GreyscaleLuminanceSource::getMatrix() {
+  int size = width_ * height_;
+  unsigned char* result = new unsigned char[size];
+  if (left_ == 0 && top_ == 0 && dataWidth_ == width_ && dataHeight_ == 
height_) {
+    memcpy(result, greyData_, size);
+  } else {
+    for (int row = 0; row < height_; row++) {
+      memcpy(result + row * width_, greyData_ + (top_ + row) * dataWidth_ + 
left_, width_);
+    }
+  }
+  return result;
+}
+
+Ref<LuminanceSource> GreyscaleLuminanceSource::rotateCounterClockwise() {
+  // Intentionally flip the left, top, width, and height arguments as needed. 
dataWidth and
+  // dataHeight are always kept unrotated.
+  return Ref<LuminanceSource> (new GreyscaleRotatedLuminanceSource(greyData_, 
dataWidth_,
+      dataHeight_, top_, left_, height_, width_));
+}
+
+} /* namespace */

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleLuminanceSource.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleLuminanceSource.h   
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleLuminanceSource.h   
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,62 @@
+#ifndef __GREYSCALE_LUMINANCE_SOURCE__
+#define __GREYSCALE_LUMINANCE_SOURCE__
+/*
+ *  GreyscaleLuminanceSource.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/LuminanceSource.h>
+
+namespace zxing {
+
+class GreyscaleLuminanceSource : public LuminanceSource {
+
+ private:
+  unsigned char* greyData_;
+  int dataWidth_;
+  int dataHeight_;
+  int left_;
+  int top_;
+  int width_;
+  int height_;
+
+ public:
+  GreyscaleLuminanceSource(unsigned char* greyData, int dataWidth, int 
dataHeight, int left,
+      int top, int width, int height);
+
+  unsigned char* getRow(int y, unsigned char* row);
+  unsigned char* getMatrix();
+
+  bool isRotateSupported() const {
+    return true;
+  }
+
+  int getWidth() const {
+    return width_;
+  }
+
+  int getHeight() const {
+    return height_;
+  }
+
+  Ref<LuminanceSource> rotateCounterClockwise();
+
+};
+
+} /* namespace */
+
+#endif

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleRotatedLuminanceSource.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleRotatedLuminanceSource.cpp
                              (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleRotatedLuminanceSource.cpp
      2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,65 @@
+/*
+ *  GreyscaleRotatedLuminanceSource.cpp
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <zxing/common/GreyscaleRotatedLuminanceSource.h>
+#include <zxing/common/IllegalArgumentException.h>
+
+namespace zxing {
+
+// Note that dataWidth and dataHeight are not reversed, as we need to be able 
to traverse the
+// greyData correctly, which does not get rotated.
+GreyscaleRotatedLuminanceSource::GreyscaleRotatedLuminanceSource(unsigned 
char* greyData,
+    int dataWidth, int dataHeight, int left, int top, int width, int height) : 
greyData_(greyData),
+    dataWidth_(dataWidth), dataHeight_(dataHeight), left_(left), top_(top), 
width_(width),
+    height_(height) {
+
+  // Intentionally comparing to the opposite dimension since we're rotated.
+  if (left + width > dataHeight || top + height > dataWidth) {
+    throw IllegalArgumentException("Crop rectangle does not fit within image 
data.");
+  }
+}
+
+// The API asks for rows, but we're rotated, so we return columns.
+unsigned char* GreyscaleRotatedLuminanceSource::getRow(int y, unsigned char* 
row) {
+  if (y < 0 || y >= getHeight()) {
+    throw IllegalArgumentException("Requested row is outside the image.");
+  }
+  int width = getWidth();
+  if (row == NULL) {
+    row = new unsigned char[width];
+  }
+  int offset = (left_ * dataWidth_) + (dataWidth_ - (y + top_));
+  for (int x = 0; x < width; x++) {
+    row[x] = greyData_[offset];
+    offset += dataWidth_;
+  }
+  return row;
+}
+
+unsigned char* GreyscaleRotatedLuminanceSource::getMatrix() {
+  unsigned char* result = new unsigned char[width_ * height_];
+  // This depends on getRow() honoring its second parameter.
+  for (int y = 0; y < height_; y++) {
+    getRow(y, &result[y * width_]);
+  }
+  return result;
+}
+
+} // namespace

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleRotatedLuminanceSource.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleRotatedLuminanceSource.h
                                (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GreyscaleRotatedLuminanceSource.h
        2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,60 @@
+#ifndef __GREYSCALE_ROTATED_LUMINANCE_SOURCE__
+#define __GREYSCALE_ROTATED_LUMINANCE_SOURCE__
+/*
+ *  GreyscaleRotatedLuminanceSource.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <zxing/LuminanceSource.h>
+
+namespace zxing {
+
+class GreyscaleRotatedLuminanceSource : public LuminanceSource {
+ private:
+  unsigned char* greyData_;
+  int dataWidth_;
+  int dataHeight_;
+  int left_;
+  int top_;
+  int width_;
+  int height_;
+
+public:
+  GreyscaleRotatedLuminanceSource(unsigned char* greyData, int dataWidth, int 
dataHeight,
+      int left, int top, int width, int height);
+
+  unsigned char* getRow(int y, unsigned char* row);
+  unsigned char* getMatrix();
+
+  bool isRotateSupported() const {
+    return false;
+  }
+
+  int getWidth() const {
+    return width_;
+  }
+
+  int getHeight() const {
+    return height_;
+  }
+
+};
+
+} /* namespace */
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GridSampler.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GridSampler.cpp          
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GridSampler.cpp  
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,122 @@
+/*
+ *  GridSampler.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 18/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/GridSampler.h>
+#include <zxing/common/PerspectiveTransform.h>
+#include <zxing/ReaderException.h>
+#include <iostream>
+#include <sstream>
+
+namespace zxing {
+using namespace std;
+
+GridSampler GridSampler::gridSampler;
+
+GridSampler::GridSampler() {
+}
+
+Ref<BitMatrix> GridSampler::sampleGrid(Ref<BitMatrix> image, int dimension, 
Ref<PerspectiveTransform> transform) {
+  Ref<BitMatrix> bits(new BitMatrix(dimension));
+  vector<float> points(dimension << 1, (const float)0.0f);
+  for (int y = 0; y < dimension; y++) {
+    int max = points.size();
+    float yValue = (float)y + 0.5f;
+    for (int x = 0; x < max; x += 2) {
+      points[x] = (float)(x >> 1) + 0.5f;
+      points[x + 1] = yValue;
+    }
+    transform->transformPoints(points);
+    checkAndNudgePoints(image, points);
+    for (int x = 0; x < max; x += 2) {
+      if (image->get((int)points[x], (int)points[x + 1])) {
+        bits->set(x >> 1, y);
+      }
+    }
+  }
+  return bits;
+}
+
+Ref<BitMatrix> GridSampler::sampleGrid(Ref<BitMatrix> image, int dimensionX, 
int dimensionY, Ref<PerspectiveTransform> transform) {
+  Ref<BitMatrix> bits(new BitMatrix(dimensionX, dimensionY));
+  vector<float> points(dimensionX << 1, (const float)0.0f);
+  for (int y = 0; y < dimensionY; y++) {
+    int max = points.size();
+    float yValue = (float)y + 0.5f;
+    for (int x = 0; x < max; x += 2) {
+      points[x] = (float)(x >> 1) + 0.5f;
+      points[x + 1] = yValue;
+    }
+    transform->transformPoints(points);
+    checkAndNudgePoints(image, points);
+    for (int x = 0; x < max; x += 2) {
+      if (image->get((int)points[x], (int)points[x + 1])) {
+        bits->set(x >> 1, y);
+      }
+    }
+  }
+  return bits;
+}
+
+Ref<BitMatrix> GridSampler::sampleGrid(Ref<BitMatrix> image, int dimension, 
float p1ToX, float p1ToY, float p2ToX,
+                                       float p2ToY, float p3ToX, float p3ToY, 
float p4ToX, float p4ToY, float p1FromX, float p1FromY, float p2FromX,
+                                       float p2FromY, float p3FromX, float 
p3FromY, float p4FromX, float p4FromY) {
+  Ref<PerspectiveTransform> 
transform(PerspectiveTransform::quadrilateralToQuadrilateral(p1ToX, p1ToY, 
p2ToX, p2ToY,
+                                      p3ToX, p3ToY, p4ToX, p4ToY, p1FromX, 
p1FromY, p2FromX, p2FromY, p3FromX, p3FromY, p4FromX, p4FromY));
+
+  return sampleGrid(image, dimension, transform);
+
+}
+
+void GridSampler::checkAndNudgePoints(Ref<BitMatrix> image, vector<float> 
&points) {
+  int width = image->getWidth();
+  int height = image->getHeight();
+
+
+  // The Java code assumes that if the start and end points are in bounds, the 
rest will also be.
+  // However, in some unusual cases points in the middle may also be out of 
bounds.
+  // Since we can't rely on an ArrayIndexOutOfBoundsException like Java, we 
check every point.
+
+  for (size_t offset = 0; offset < points.size(); offset += 2) {
+    int x = (int)points[offset];
+    int y = (int)points[offset + 1];
+    if (x < -1 || x > width || y < -1 || y > height) {
+      ostringstream s;
+      s << "Transformed point out of bounds at " << x << "," << y;
+      throw ReaderException(s.str().c_str());
+    }
+
+    if (x == -1) {
+      points[offset] = 0.0f;
+    } else if (x == width) {
+      points[offset] = width - 1;
+    }
+    if (y == -1) {
+      points[offset + 1] = 0.0f;
+    } else if (y == height) {
+      points[offset + 1] = height - 1;
+    }
+  }
+
+}
+
+GridSampler &GridSampler::getInstance() {
+  return gridSampler;
+}
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GridSampler.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GridSampler.h            
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/GridSampler.h    
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,45 @@
+#ifndef __GRID_SAMPLER_H__
+#define __GRID_SAMPLER_H__
+
+/*
+ *  GridSampler.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/common/PerspectiveTransform.h>
+
+namespace zxing {
+class GridSampler {
+private:
+  static GridSampler gridSampler;
+  GridSampler();
+
+public:
+  Ref<BitMatrix> sampleGrid(Ref<BitMatrix> image, int dimension, 
Ref<PerspectiveTransform> transform);
+  Ref<BitMatrix> sampleGrid(Ref<BitMatrix> image, int dimensionX, int 
dimensionY, Ref<PerspectiveTransform> transform);
+
+  Ref<BitMatrix> sampleGrid(Ref<BitMatrix> image, int dimension, float p1ToX, 
float p1ToY, float p2ToX, float p2ToY,
+                            float p3ToX, float p3ToY, float p4ToX, float 
p4ToY, float p1FromX, float p1FromY, float p2FromX,
+                            float p2FromY, float p3FromX, float p3FromY, float 
p4FromX, float p4FromY);
+  static void checkAndNudgePoints(Ref<BitMatrix> image, std::vector<float> 
&points);
+  static GridSampler &getInstance();
+};
+}
+
+#endif // __GRID_SAMPLER_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/HybridBinarizer.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/HybridBinarizer.cpp      
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/HybridBinarizer.cpp      
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,221 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  HybridBinarizer.cpp
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/HybridBinarizer.h>
+
+#include <zxing/common/IllegalArgumentException.h>
+
+using namespace std;
+using namespace zxing;
+
+namespace {
+  const int BLOCK_SIZE_POWER = 3;
+  const int BLOCK_SIZE = 1 << BLOCK_SIZE_POWER;
+  const int BLOCK_SIZE_MASK = BLOCK_SIZE - 1;
+  const int MINIMUM_DIMENSION = BLOCK_SIZE * 5;
+}
+
+HybridBinarizer::HybridBinarizer(Ref<LuminanceSource> source) :
+  GlobalHistogramBinarizer(source), matrix_(NULL), cached_row_(NULL), 
cached_row_num_(-1) {
+}
+
+HybridBinarizer::~HybridBinarizer() {
+}
+
+
+Ref<Binarizer>
+HybridBinarizer::createBinarizer(Ref<LuminanceSource> source) {
+  return Ref<Binarizer> (new HybridBinarizer(source));
+}
+
+Ref<BitMatrix> HybridBinarizer::getBlackMatrix() {
+  // Calculates the final BitMatrix once for all requests. This could
+  // be called once from the constructor instead, but there are some
+  // advantages to doing it lazily, such as making profiling easier,
+  // and not doing heavy lifting when callers don't expect it.
+  if (matrix_) {
+    return matrix_;
+  }
+  LuminanceSource& source = *getLuminanceSource();
+  if (source.getWidth() >= MINIMUM_DIMENSION &&
+      source.getHeight() >= MINIMUM_DIMENSION) {
+    unsigned char* luminances = source.getMatrix();
+    int width = source.getWidth();
+    int height = source.getHeight();
+    int subWidth = width >> BLOCK_SIZE_POWER;
+    if ((width & BLOCK_SIZE_MASK) != 0) {
+      subWidth++;
+    }
+    int subHeight = height >> BLOCK_SIZE_POWER;
+    if ((height & BLOCK_SIZE_MASK) != 0) {
+      subHeight++;
+    }
+    int* blackPoints =
+      calculateBlackPoints(luminances, subWidth, subHeight, width, height);
+
+    Ref<BitMatrix> newMatrix (new BitMatrix(width, height));
+    calculateThresholdForBlock(luminances,
+                               subWidth,
+                               subHeight,
+                               width,
+                               height,
+                               blackPoints,
+                               newMatrix);
+    matrix_ = newMatrix;
+
+    // N.B.: these deletes are inadequate if anything between the new
+    // and this point can throw.  As of this writing, it doesn't look
+    // like they do.
+
+    delete [] blackPoints;
+    delete [] luminances;
+  } else {
+    // If the image is too small, fall back to the global histogram approach.
+    matrix_ = GlobalHistogramBinarizer::getBlackMatrix();
+  }
+  return matrix_;
+}
+
+void
+HybridBinarizer::calculateThresholdForBlock(unsigned char* luminances,
+                                            int subWidth,
+                                            int subHeight,
+                                            int width,
+                                            int height,
+                                            int blackPoints[],
+                                            Ref<BitMatrix> const& matrix) {
+  for (int y = 0; y < subHeight; y++) {
+    int yoffset = y << BLOCK_SIZE_POWER;
+    if (yoffset + BLOCK_SIZE >= height) {
+      yoffset = height - BLOCK_SIZE;
+    }
+    for (int x = 0; x < subWidth; x++) {
+      int xoffset = x << BLOCK_SIZE_POWER;
+      if (xoffset + BLOCK_SIZE >= width) {
+        xoffset = width - BLOCK_SIZE;
+      }
+      int left = (x > 1) ? x : 2;
+      left = (left < subWidth - 2) ? left : subWidth - 3;
+      int top = (y > 1) ? y : 2;
+      top = (top < subHeight - 2) ? top : subHeight - 3;
+      int sum = 0;
+      for (int z = -2; z <= 2; z++) {
+        int *blackRow = &blackPoints[(top + z) * subWidth];
+        sum += blackRow[left - 2];
+        sum += blackRow[left - 1];
+        sum += blackRow[left];
+        sum += blackRow[left + 1];
+        sum += blackRow[left + 2];
+      }
+      int average = sum / 25;
+      threshold8x8Block(luminances, xoffset, yoffset, average, width, matrix);
+    }
+  }
+}
+
+void HybridBinarizer::threshold8x8Block(unsigned char* luminances,
+                                        int xoffset,
+                                        int yoffset,
+                                        int threshold,
+                                        int stride,
+                                        Ref<BitMatrix> const& matrix) {
+  for (int y = 0, offset = yoffset * stride + xoffset;
+       y < BLOCK_SIZE;
+       y++,  offset += stride) {
+    for (int x = 0; x < BLOCK_SIZE; x++) {
+      int pixel = luminances[offset + x] & 0xff;
+      if (pixel <= threshold) {
+        matrix->set(xoffset + x, yoffset + y);
+      }
+    }
+  }
+}
+
+namespace {
+  inline int getBlackPointFromNeighbors(int* blackPoints, int subWidth, int x, 
int y) {
+    return (blackPoints[(y-1)*subWidth+x] +
+            2*blackPoints[y*subWidth+x-1] +
+            blackPoints[(y-1)*subWidth+x-1]) >> 2;
+  }
+}
+
+
+int* HybridBinarizer::calculateBlackPoints(unsigned char* luminances, int 
subWidth, int subHeight,
+    int width, int height) {
+  const int minDynamicRange = 24;
+
+  int *blackPoints = new int[subHeight * subWidth];
+  for (int y = 0; y < subHeight; y++) {
+    int yoffset = y << BLOCK_SIZE_POWER;
+    if (yoffset + BLOCK_SIZE >= height) {
+      yoffset = height - BLOCK_SIZE;
+    }
+    for (int x = 0; x < subWidth; x++) {
+      int xoffset = x << BLOCK_SIZE_POWER;
+      if (xoffset + BLOCK_SIZE >= width) {
+        xoffset = width - BLOCK_SIZE;
+      }
+      int sum = 0;
+      int min = 0xFF;
+      int max = 0;
+      for (int yy = 0, offset = yoffset * width + xoffset;
+           yy < BLOCK_SIZE;
+           yy++, offset += width) {
+        for (int xx = 0; xx < BLOCK_SIZE; xx++) {
+          int pixel = luminances[offset + xx] & 0xFF;
+          sum += pixel;
+          // still looking for good contrast
+          if (pixel < min) {
+            min = pixel;
+          }
+          if (pixel > max) {
+            max = pixel;
+          }
+        }
+
+        // short-circuit min/max tests once dynamic range is met
+        if (max - min > minDynamicRange) {
+          // finish the rest of the rows quickly
+          for (yy++, offset += width; yy < BLOCK_SIZE; yy++, offset += width) {
+            for (int xx = 0; xx < BLOCK_SIZE; xx += 2) {
+              sum += luminances[offset + xx] & 0xFF;
+              sum += luminances[offset + xx + 1] & 0xFF;
+            }
+          }
+        }
+      }
+      // See
+      // 
http://groups.google.com/group/zxing/browse_thread/thread/d06efa2c35a7ddc0
+      int average = sum >> (BLOCK_SIZE_POWER * 2);
+      if (max - min <= minDynamicRange) {
+        average = min >> 1;
+        if (y > 0 && x > 0) {
+          int bp = getBlackPointFromNeighbors(blackPoints, subWidth, x, y);
+          if (min < bp) {
+            average = bp;
+          }
+        }
+      }
+      blackPoints[y * subWidth + x] = average;
+    }
+  }
+  return blackPoints;
+}
+

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/HybridBinarizer.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/HybridBinarizer.h        
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/HybridBinarizer.h        
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,68 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __HYBRIDBINARIZER_H__
+#define __HYBRIDBINARIZER_H__
+/*
+ *  HybridBinarizer.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <vector>
+#include <zxing/Binarizer.h>
+#include <zxing/common/GlobalHistogramBinarizer.h>
+#include <zxing/common/BitArray.h>
+#include <zxing/common/BitMatrix.h>
+
+namespace zxing {
+       
+       class HybridBinarizer : public GlobalHistogramBinarizer {
+        private:
+    Ref<BitMatrix> matrix_;
+         Ref<BitArray> cached_row_;
+         int cached_row_num_;
+
+       public:
+               HybridBinarizer(Ref<LuminanceSource> source);
+               virtual ~HybridBinarizer();
+               
+               virtual Ref<BitMatrix> getBlackMatrix();
+               Ref<Binarizer> createBinarizer(Ref<LuminanceSource> source);
+  private:
+    // We'll be using one-D arrays because C++ can't dynamically allocate 2D
+    // arrays
+    int* calculateBlackPoints(unsigned char* luminances,
+                              int subWidth,
+                              int subHeight,
+                              int width,
+                              int height);
+    void calculateThresholdForBlock(unsigned char* luminances,
+                                    int subWidth,
+                                    int subHeight,
+                                    int width,
+                                    int height,
+                                    int blackPoints[],
+                                    Ref<BitMatrix> const& matrix);
+    void threshold8x8Block(unsigned char* luminances,
+                           int xoffset,
+                           int yoffset,
+                           int threshold,
+                           int stride,
+                           Ref<BitMatrix> const& matrix);
+       };
+
+}
+
+#endif

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/IllegalArgumentException.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/IllegalArgumentException.cpp 
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/IllegalArgumentException.cpp 
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,31 @@
+/*
+ *  IllegalArgumentException.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 06/05/2008.
+ *  Copyright 2008 Google UK. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/IllegalArgumentException.h>
+
+namespace zxing {
+
+IllegalArgumentException::IllegalArgumentException(const char *msg) :
+    Exception(msg) {
+}
+IllegalArgumentException::~IllegalArgumentException() throw() {
+
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/IllegalArgumentException.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/IllegalArgumentException.h   
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/IllegalArgumentException.h   
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,33 @@
+#ifndef __ILLEGAL_ARGUMENT_EXCEPTION_H__
+#define __ILLEGAL_ARGUMENT_EXCEPTION_H__
+
+/*
+ *  IllegalArgumentException.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/Exception.h>
+
+namespace zxing {
+class IllegalArgumentException : public zxing::Exception {
+public:
+  IllegalArgumentException(const char *msg);
+  ~IllegalArgumentException() throw();
+};
+}
+
+#endif // __ILLEGAL_ARGUMENT_EXCEPTION_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/PerspectiveTransform.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/PerspectiveTransform.cpp 
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/PerspectiveTransform.cpp 
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,107 @@
+/*
+ *  PerspectiveTransform.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 12/05/2008.
+ *  Copyright 2008 Google UK. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/PerspectiveTransform.h>
+
+namespace zxing {
+using namespace std;
+
+PerspectiveTransform::PerspectiveTransform(float inA11, float inA21, 
+                                           float inA31, float inA12, 
+                                           float inA22, float inA32, 
+                                           float inA13, float inA23, 
+                                           float inA33) : 
+  a11(inA11), a12(inA12), a13(inA13), a21(inA21), a22(inA22), a23(inA23),
+  a31(inA31), a32(inA32), a33(inA33) {}
+
+Ref<PerspectiveTransform> 
PerspectiveTransform::quadrilateralToQuadrilateral(float x0, float y0, float 
x1, float y1,
+    float x2, float y2, float x3, float y3, float x0p, float y0p, float x1p, 
float y1p, float x2p, float y2p,
+    float x3p, float y3p) {
+  Ref<PerspectiveTransform> qToS = 
PerspectiveTransform::quadrilateralToSquare(x0, y0, x1, y1, x2, y2, x3, y3);
+  Ref<PerspectiveTransform> sToQ =
+    PerspectiveTransform::squareToQuadrilateral(x0p, y0p, x1p, y1p, x2p, y2p, 
x3p, y3p);
+  return sToQ->times(qToS);
+}
+
+Ref<PerspectiveTransform> PerspectiveTransform::squareToQuadrilateral(float 
x0, float y0, float x1, float y1, float x2,
+    float y2, float x3, float y3) {
+  float dx3 = x0 - x1 + x2 - x3;
+  float dy3 = y0 - y1 + y2 - y3;
+  if (dx3 == 0.0f && dy3 == 0.0f) {
+    Ref<PerspectiveTransform> result(new PerspectiveTransform(x1 - x0, x2 - 
x1, x0, y1 - y0, y2 - y1, y0, 0.0f,
+                                     0.0f, 1.0f));
+    return result;
+  } else {
+    float dx1 = x1 - x2;
+    float dx2 = x3 - x2;
+    float dy1 = y1 - y2;
+    float dy2 = y3 - y2;
+    float denominator = dx1 * dy2 - dx2 * dy1;
+    float a13 = (dx3 * dy2 - dx2 * dy3) / denominator;
+    float a23 = (dx1 * dy3 - dx3 * dy1) / denominator;
+    Ref<PerspectiveTransform> result(new PerspectiveTransform(x1 - x0 + a13 * 
x1, x3 - x0 + a23 * x3, x0, y1 - y0
+                                     + a13 * y1, y3 - y0 + a23 * y3, y0, a13, 
a23, 1.0f));
+    return result;
+  }
+}
+
+Ref<PerspectiveTransform> PerspectiveTransform::quadrilateralToSquare(float 
x0, float y0, float x1, float y1, float x2,
+    float y2, float x3, float y3) {
+  // Here, the adjoint serves as the inverse:
+  return squareToQuadrilateral(x0, y0, x1, y1, x2, y2, x3, y3)->buildAdjoint();
+}
+
+Ref<PerspectiveTransform> PerspectiveTransform::buildAdjoint() {
+  // Adjoint is the transpose of the cofactor matrix:
+  Ref<PerspectiveTransform> result(new PerspectiveTransform(a22 * a33 - a23 * 
a32, a23 * a31 - a21 * a33, a21 * a32
+                                   - a22 * a31, a13 * a32 - a12 * a33, a11 * 
a33 - a13 * a31, a12 * a31 - a11 * a32, a12 * a23 - a13 * a22,
+                                   a13 * a21 - a11 * a23, a11 * a22 - a12 * 
a21));
+  return result;
+}
+
+Ref<PerspectiveTransform> 
PerspectiveTransform::times(Ref<PerspectiveTransform> other) {
+  Ref<PerspectiveTransform> result(new PerspectiveTransform(a11 * other->a11 + 
a21 * other->a12 + a31 * other->a13,
+                                   a11 * other->a21 + a21 * other->a22 + a31 * 
other->a23, a11 * other->a31 + a21 * other->a32 + a31
+                                   * other->a33, a12 * other->a11 + a22 * 
other->a12 + a32 * other->a13, a12 * other->a21 + a22
+                                   * other->a22 + a32 * other->a23, a12 * 
other->a31 + a22 * other->a32 + a32 * other->a33, a13
+                                   * other->a11 + a23 * other->a12 + a33 * 
other->a13, a13 * other->a21 + a23 * other->a22 + a33
+                                   * other->a23, a13 * other->a31 + a23 * 
other->a32 + a33 * other->a33));
+  return result;
+}
+
+void PerspectiveTransform::transformPoints(vector<float> &points) {
+  int max = points.size();
+  for (int i = 0; i < max; i += 2) {
+    float x = points[i];
+    float y = points[i + 1];
+    float denominator = a13 * x + a23 * y + a33;
+    points[i] = (a11 * x + a21 * y + a31) / denominator;
+    points[i + 1] = (a12 * x + a22 * y + a32) / denominator;
+  }
+}
+
+ostream& operator<<(ostream& out, const PerspectiveTransform &pt) {
+  out << pt.a11 << ", " << pt.a12 << ", " << pt.a13 << ", \n";
+  out << pt.a21 << ", " << pt.a22 << ", " << pt.a23 << ", \n";
+  out << pt.a31 << ", " << pt.a32 << ", " << pt.a33 << "\n";
+  return out;
+}
+
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/PerspectiveTransform.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/PerspectiveTransform.h   
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/PerspectiveTransform.h   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,49 @@
+#ifndef __PERSPECTIVE_TANSFORM_H__
+#define __PERSPECTIVE_TANSFORM_H__
+
+/*
+ *  PerspectiveTransform.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+#include <vector>
+
+namespace zxing {
+class PerspectiveTransform : public Counted {
+private:
+  float a11, a12, a13, a21, a22, a23, a31, a32, a33;
+  PerspectiveTransform(float a11, float a21, float a31, float a12, float a22, 
float a32, float a13, float a23,
+                       float a33);
+
+public:
+  static Ref<PerspectiveTransform>
+  quadrilateralToQuadrilateral(float x0, float y0, float x1, float y1, float 
x2, float y2, float x3, float y3,
+                               float x0p, float y0p, float x1p, float y1p, 
float x2p, float y2p, float x3p, float y3p);
+  static Ref<PerspectiveTransform> squareToQuadrilateral(float x0, float y0, 
float x1, float y1, float x2, float y2,
+      float x3, float y3);
+  static Ref<PerspectiveTransform> quadrilateralToSquare(float x0, float y0, 
float x1, float y1, float x2, float y2,
+      float x3, float y3);
+  Ref<PerspectiveTransform> buildAdjoint();
+  Ref<PerspectiveTransform> times(Ref<PerspectiveTransform> other);
+  void transformPoints(std::vector<float> &points);
+
+  friend std::ostream& operator<<(std::ostream& out, const 
PerspectiveTransform &pt);
+};
+}
+
+#endif // __PERSPECTIVE_TANSFORM_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Point.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Point.h                  
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Point.h  2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,47 @@
+#ifndef __POINT_H__
+#define __POINT_H__
+
+/*
+ *  Point.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace zxing {
+class PointI {
+public:
+  int x;
+  int y;
+};
+
+class Point {
+public:
+  Point() : x(0.0f), y(0.0f) {};
+  Point(float x_, float y_) : x(x_), y(y_) {};
+
+  float x;
+  float y;
+};
+
+class Line {
+public:
+  Line(Point start_, Point end_) : start(start_), end(end_) {};
+
+  Point start;
+  Point end;
+};
+}
+#endif // POINT_H_

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Str.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Str.cpp                  
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Str.cpp  2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,38 @@
+/*
+ *  String.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 20/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Str.h>
+
+namespace zxing {
+using namespace std;
+
+String::String(const std::string &text) :
+    text_(text) {
+}
+const std::string& String::getText() const {
+  return text_;
+}
+
+ostream &operator<<(ostream &out, const String &s) {
+  out << s.text_;
+  return out;
+}
+
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Str.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Str.h                    
        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/Str.h    2014-06-20 
23:46:12 UTC (rev 33741)
@@ -0,0 +1,40 @@
+#ifndef __STR_H__
+#define __STR_H__
+
+/*
+ *  Str.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string>
+#include <iostream>
+#include <zxing/common/Counted.h>
+
+namespace zxing {
+
+class String : public Counted {
+private:
+  std::string text_;
+public:
+  String(const std::string &text);
+  const std::string &getText() const;
+  friend std::ostream &operator<<(std::ostream &out, const String &s);
+};
+
+}
+
+#endif // __COMMON__STRING_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/StringUtils.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/StringUtils.cpp          
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/StringUtils.cpp  
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,198 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+
+/*
+ * Copyright (C) 2010-2011 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/StringUtils.h>
+#include <zxing/DecodeHints.h>
+
+using namespace std;
+using namespace zxing;
+using namespace zxing::common;
+
+// N.B.: these are the iconv strings for at least some versions of iconv
+
+char const* const StringUtils::PLATFORM_DEFAULT_ENCODING = "UTF-8";
+char const* const StringUtils::ASCII = "ASCII";
+char const* const StringUtils::SHIFT_JIS = "SHIFT_JIS";
+char const* const StringUtils::GB2312 = "GBK";
+char const* const StringUtils::EUC_JP = "EUC-JP";
+char const* const StringUtils::UTF8 = "UTF-8";
+char const* const StringUtils::ISO88591 = "ISO8859-1";
+const bool StringUtils::ASSUME_SHIFT_JIS = false;
+
+string
+StringUtils::guessEncoding(unsigned char* bytes, int length,
+                           Hashtable const& hints) {
+  Hashtable::const_iterator i = hints.find(DecodeHints::CHARACTER_SET);
+  if (i != hints.end()) {
+    return i->second;
+  }
+  typedef bool boolean;
+  // For now, merely tries to distinguish ISO-8859-1, UTF-8 and Shift_JIS,
+  // which should be by far the most common encodings.
+  boolean canBeISO88591 = true;
+  boolean canBeShiftJIS = true;
+  boolean canBeUTF8 = true;
+  int utf8BytesLeft = 0;
+  //int utf8LowChars = 0;
+  int utf2BytesChars = 0;
+  int utf3BytesChars = 0;
+  int utf4BytesChars = 0;
+  int sjisBytesLeft = 0;
+  //int sjisLowChars = 0;
+  int sjisKatakanaChars = 0;
+  //int sjisDoubleBytesChars = 0;
+  int sjisCurKatakanaWordLength = 0;
+  int sjisCurDoubleBytesWordLength = 0;
+  int sjisMaxKatakanaWordLength = 0;
+  int sjisMaxDoubleBytesWordLength = 0;
+  //int isoLowChars = 0;
+  //int isoHighChars = 0;
+  int isoHighOther = 0;
+
+  typedef unsigned char byte;
+  boolean utf8bom = length > 3 &&
+    bytes[0] == (byte) 0xEF &&
+    bytes[1] == (byte) 0xBB &&
+    bytes[2] == (byte) 0xBF;
+
+  for (int i = 0;
+       i < length && (canBeISO88591 || canBeShiftJIS || canBeUTF8);
+       i++) {
+
+    int value = bytes[i] & 0xFF;
+
+    // UTF-8 stuff
+    if (canBeUTF8) {
+      if (utf8BytesLeft > 0) {
+        if ((value & 0x80) == 0) {
+          canBeUTF8 = false;
+        } else {
+          utf8BytesLeft--;
+        }
+      } else if ((value & 0x80) != 0) {
+        if ((value & 0x40) == 0) {
+          canBeUTF8 = false;
+        } else {
+          utf8BytesLeft++;
+          if ((value & 0x20) == 0) {
+            utf2BytesChars++;
+          } else {
+            utf8BytesLeft++;
+            if ((value & 0x10) == 0) {
+              utf3BytesChars++;
+            } else {
+              utf8BytesLeft++;
+              if ((value & 0x08) == 0) {
+                utf4BytesChars++;
+              } else {
+                canBeUTF8 = false;
+              }
+            }
+          }
+        }
+      } //else {
+      //utf8LowChars++;
+      //}
+    }
+
+    // ISO-8859-1 stuff
+    if (canBeISO88591) {
+      if (value > 0x7F && value < 0xA0) {
+        canBeISO88591 = false;
+      } else if (value > 0x9F) {
+        if (value < 0xC0 || value == 0xD7 || value == 0xF7) {
+          isoHighOther++;
+        } //else {
+        //isoHighChars++;
+        //}
+      } //else {
+      //isoLowChars++;
+      //}
+    }
+
+    // Shift_JIS stuff
+    if (canBeShiftJIS) {
+      if (sjisBytesLeft > 0) {
+        if (value < 0x40 || value == 0x7F || value > 0xFC) {
+          canBeShiftJIS = false;
+        } else {
+          sjisBytesLeft--;
+        }
+      } else if (value == 0x80 || value == 0xA0 || value > 0xEF) {
+        canBeShiftJIS = false;
+      } else if (value > 0xA0 && value < 0xE0) {
+        sjisKatakanaChars++;
+        sjisCurDoubleBytesWordLength = 0;
+        sjisCurKatakanaWordLength++;
+        if (sjisCurKatakanaWordLength > sjisMaxKatakanaWordLength) {
+          sjisMaxKatakanaWordLength = sjisCurKatakanaWordLength;
+        }
+      } else if (value > 0x7F) {
+        sjisBytesLeft++;
+        //sjisDoubleBytesChars++;
+        sjisCurKatakanaWordLength = 0;
+        sjisCurDoubleBytesWordLength++;
+        if (sjisCurDoubleBytesWordLength > sjisMaxDoubleBytesWordLength) {
+          sjisMaxDoubleBytesWordLength = sjisCurDoubleBytesWordLength;
+        }
+      } else {
+        //sjisLowChars++;
+        sjisCurKatakanaWordLength = 0;
+        sjisCurDoubleBytesWordLength = 0;
+      }
+    }
+  }
+
+  if (canBeUTF8 && utf8BytesLeft > 0) {
+    canBeUTF8 = false;
+  }
+  if (canBeShiftJIS && sjisBytesLeft > 0) {
+    canBeShiftJIS = false;
+  }
+
+  // Easy -- if there is BOM or at least 1 valid not-single byte character 
(and no evidence it can't be UTF-8), done
+  if (canBeUTF8 && (utf8bom || utf2BytesChars + utf3BytesChars + 
utf4BytesChars > 0)) {
+    return UTF8;
+  }
+  // Easy -- if assuming Shift_JIS or at least 3 valid consecutive not-ascii 
characters (and no evidence it can't be), done
+  if (canBeShiftJIS && (ASSUME_SHIFT_JIS || sjisMaxKatakanaWordLength >= 3 || 
sjisMaxDoubleBytesWordLength >= 3)) {
+    return SHIFT_JIS;
+  }
+  // Distinguishing Shift_JIS and ISO-8859-1 can be a little tough for short 
words. The crude heuristic is:
+  // - If we saw
+  //   - only two consecutive katakana chars in the whole text, or
+  //   - at least 10% of bytes that could be "upper" not-alphanumeric Latin1,
+  // - then we conclude Shift_JIS, else ISO-8859-1
+  if (canBeISO88591 && canBeShiftJIS) {
+    return (sjisMaxKatakanaWordLength == 2 && sjisKatakanaChars == 2) || 
isoHighOther * 10 >= length
+      ? SHIFT_JIS : ISO88591;
+  }
+
+  // Otherwise, try in order ISO-8859-1, Shift JIS, UTF-8 and fall back to 
default platform encoding
+  if (canBeISO88591) {
+    return ISO88591;
+  }
+  if (canBeShiftJIS) {
+    return SHIFT_JIS;
+  }
+  if (canBeUTF8) {
+    return UTF8;
+  }
+  // Otherwise, we take a wild guess with platform encoding
+  return PLATFORM_DEFAULT_ENCODING;
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/StringUtils.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/StringUtils.h            
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/StringUtils.h    
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,52 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+
+#ifndef __STRING_UTILS__
+#define __STRING_UTILS__
+
+/*
+ * Copyright (C) 2010-2011 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string>
+#include <map>
+#include <zxing/DecodeHints.h>
+
+namespace zxing {
+  namespace common {
+    class StringUtils;
+  }
+}
+
+class zxing::common::StringUtils {
+private:
+  static char const* const PLATFORM_DEFAULT_ENCODING;
+
+  StringUtils() {}
+
+public:
+  static char const* const ASCII;
+  static char const* const SHIFT_JIS;
+  static char const* const GB2312;
+  static char const* const EUC_JP;
+  static char const* const UTF8;
+  static char const* const ISO88591;
+  static const bool ASSUME_SHIFT_JIS;
+
+  typedef std::map<DecodeHintType, std::string> Hashtable;
+
+  static std::string guessEncoding(unsigned char* bytes, int length, Hashtable 
const& hints);
+};
+
+#endif

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/MonochromeRectangleDetector.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/MonochromeRectangleDetector.cpp
                         (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/MonochromeRectangleDetector.cpp
 2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,171 @@
+/*
+ *  MonochromeRectangleDetector.cpp
+ *  y_wmk
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 y_wmk authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/NotFoundException.h>
+#include <zxing/common/detector/MonochromeRectangleDetector.h>
+#include <sstream>
+
+namespace zxing {
+using namespace std;
+
+std::vector<Ref<ResultPoint> > MonochromeRectangleDetector::detect() {
+    int height = image_->getHeight();
+    int width = image_->getWidth();
+    int halfHeight = height >> 1;
+    int halfWidth = width >> 1;
+    int deltaY = max(1, height / (MAX_MODULES << 3));
+    int deltaX = max(1, width / (MAX_MODULES << 3));
+
+    int top = 0;
+    int bottom = height;
+    int left = 0;
+    int right = width;
+    Ref<ResultPoint> pointA(findCornerFromCenter(halfWidth, 0, left, right,
+        halfHeight, -deltaY, top, bottom, halfWidth >> 1));
+    top = (int) pointA->getY() - 1;;
+    Ref<ResultPoint> pointB(findCornerFromCenter(halfWidth, -deltaX, left, 
right,
+        halfHeight, 0, top, bottom, halfHeight >> 1));
+    left = (int) pointB->getX() - 1;
+    Ref<ResultPoint> pointC(findCornerFromCenter(halfWidth, deltaX, left, 
right,
+        halfHeight, 0, top, bottom, halfHeight >> 1));
+    right = (int) pointC->getX() + 1;
+    Ref<ResultPoint> pointD(findCornerFromCenter(halfWidth, 0, left, right,
+        halfHeight, deltaY, top, bottom, halfWidth >> 1));
+    bottom = (int) pointD->getY() + 1;
+
+    // Go try to find point A again with better information -- might have been 
off at first.
+    pointA.reset(findCornerFromCenter(halfWidth, 0, left, right,
+        halfHeight, -deltaY, top, bottom, halfWidth >> 2));
+
+         std::vector<Ref<ResultPoint> > corners(4);
+       corners[0].reset(pointA);
+       corners[1].reset(pointB);
+       corners[2].reset(pointC);
+       corners[3].reset(pointD);
+    return corners;
+  }
+
+Ref<ResultPoint> MonochromeRectangleDetector::findCornerFromCenter(int 
centerX, int deltaX, int left, int right,
+      int centerY, int deltaY, int top, int bottom, int maxWhiteRun) {
+         Ref<TwoInts> lastRange(NULL);
+    for (int y = centerY, x = centerX;
+         y < bottom && y >= top && x < right && x >= left;
+         y += deltaY, x += deltaX) {
+      Ref<TwoInts> range(NULL);
+      if (deltaX == 0) {
+        // horizontal slices, up and down
+        range = blackWhiteRange(y, maxWhiteRun, left, right, true);
+      } else {
+        // vertical slices, left and right
+        range = blackWhiteRange(x, maxWhiteRun, top, bottom, false);
+      }
+      if (range == NULL) {
+        if (lastRange == NULL) {
+                           throw NotFoundException("Couldn't find corners 
(lastRange = NULL) ");
+        } else {
+        // lastRange was found
+        if (deltaX == 0) {
+          int lastY = y - deltaY;
+          if (lastRange->start < centerX) {
+            if (lastRange->end > centerX) {
+              // straddle, choose one or the other based on direction
+                               Ref<ResultPoint> result(new ResultPoint(deltaY 
> 0 ? lastRange->start : lastRange->end, lastY));
+                               return result;
+            }
+                             Ref<ResultPoint> result(new 
ResultPoint(lastRange->start, lastY));
+                             return result;
+          } else {
+                             Ref<ResultPoint> result(new 
ResultPoint(lastRange->end, lastY));
+                             return result;
+            }
+        } else {
+          int lastX = x - deltaX;
+          if (lastRange->start < centerY) {
+            if (lastRange->end > centerY) {
+                               Ref<ResultPoint> result(new ResultPoint(lastX, 
deltaX < 0 ? lastRange->start : lastRange->end));
+                               return result;
+            }
+                             Ref<ResultPoint> result(new ResultPoint(lastX, 
lastRange->start));
+                             return result;
+          } else {
+                             Ref<ResultPoint> result(new ResultPoint(lastX, 
lastRange->end));
+                             return result;
+            }
+          }
+        }
+      }
+      lastRange = range;
+    }   
+    throw NotFoundException("Couldn't find corners");
+  }
+
+Ref<TwoInts> MonochromeRectangleDetector::blackWhiteRange(int fixedDimension, 
int maxWhiteRun, int minDim, int maxDim,
+      bool horizontal) {
+    
+         int center = (minDim + maxDim) >> 1;
+
+    // Scan left/up first
+    int start = center;
+    while (start >= minDim) {
+      if (horizontal ? image_->get(start, fixedDimension) : 
image_->get(fixedDimension, start)) {
+        start--;
+      } else {
+        int whiteRunStart = start;
+        do {
+          start--;
+        } while (start >= minDim && !(horizontal ? image_->get(start, 
fixedDimension) :
+            image_->get(fixedDimension, start)));
+        int whiteRunSize = whiteRunStart - start;
+        if (start < minDim || whiteRunSize > maxWhiteRun) {
+          start = whiteRunStart;
+          break;
+        }
+      }
+    }
+    start++;
+
+    // Then try right/down
+    int end = center;
+    while (end < maxDim) {
+      if (horizontal ? image_->get(end, fixedDimension) : 
image_->get(fixedDimension, end)) {
+        end++;
+      } else {
+        int whiteRunStart = end;
+        do {
+          end++;
+        } while (end < maxDim && !(horizontal ? image_->get(end, 
fixedDimension) :
+            image_->get(fixedDimension, end)));
+        int whiteRunSize = end - whiteRunStart;
+        if (end >= maxDim || whiteRunSize > maxWhiteRun) {
+          end = whiteRunStart;
+          break;
+        }
+      }
+    }
+    end--;
+    Ref<TwoInts> result(NULL);
+    if (end > start) {
+                 result = new TwoInts;
+      result->start = start;
+      result->end = end;
+    }
+    return result;
+  }
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/MonochromeRectangleDetector.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/MonochromeRectangleDetector.h
                           (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/MonochromeRectangleDetector.h
   2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,60 @@
+#ifndef __MONOCHROMERECTANGLEDETECTOR_H__
+#define __MONOCHROMERECTANGLEDETECTOR_H__
+
+/*
+ *  MonochromeRectangleDetector.h
+ *  y_wmk
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 y_wmk authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <vector>
+#include <zxing/NotFoundException.h>
+#include <zxing/ResultPoint.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/common/Counted.h>
+#include <zxing/ResultPoint.h>
+
+
+namespace zxing {
+
+struct TwoInts: public Counted {
+       int start;
+       int end;
+};
+
+class MonochromeRectangleDetector : public Counted {
+private:
+  static const int MAX_MODULES = 32;
+  Ref<BitMatrix> image_;
+
+public:
+  MonochromeRectangleDetector(Ref<BitMatrix> image) : image_(image) {  };
+
+  std::vector<Ref<ResultPoint> > detect();
+
+private:
+  Ref<ResultPoint> findCornerFromCenter(int centerX, int deltaX, int left, int 
right,
+      int centerY, int deltaY, int top, int bottom, int maxWhiteRun);
+
+  Ref<TwoInts> blackWhiteRange(int fixedDimension, int maxWhiteRun, int 
minDim, int maxDim,
+      bool horizontal);
+
+  int max(int a, float b) { return (float) a > b ? a : (int) b;};
+};
+}
+
+#endif // __MONOCHROMERECTANGLEDETECTOR_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/WhiteRectangleDetector.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/WhiteRectangleDetector.cpp
                              (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/WhiteRectangleDetector.cpp
      2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,336 @@
+/*
+ *  WhiteRectangleDetector.cpp
+ *  y_wmk
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 y_wmk authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/NotFoundException.h>
+#include <zxing/common/detector/WhiteRectangleDetector.h>
+#include <math.h>
+#include <sstream>
+
+namespace zxing {
+using namespace std;
+
+int WhiteRectangleDetector::INIT_SIZE = 30;
+int WhiteRectangleDetector::CORR = 1;
+
+
+WhiteRectangleDetector::WhiteRectangleDetector(Ref<BitMatrix> image) : 
image_(image) {
+  width_ = image->getWidth();
+  height_ = image->getHeight();
+  
+  leftInit_ = (width_ - INIT_SIZE) >> 1;
+  rightInit_ = (width_ + INIT_SIZE) >> 1;
+  upInit_ = (height_ - INIT_SIZE) >> 1;
+  downInit_ = (height_ + INIT_SIZE) >> 1;
+  
+  if (upInit_ < 0 || leftInit_ < 0 || downInit_ >= height_ || rightInit_ >= 
width_) {
+    throw NotFoundException("Invalid dimensions WhiteRectangleDetector");
+}
+}
+
+WhiteRectangleDetector::WhiteRectangleDetector(Ref<BitMatrix> image, int 
initSize, int x, int y) : image_(image) {
+  width_ = image->getWidth();
+  height_ = image->getHeight();
+  
+  int halfsize = initSize >> 1;
+  leftInit_ = x - halfsize;
+  rightInit_ = x + halfsize;
+  upInit_ = y - halfsize;
+  downInit_ = y + halfsize;
+  
+  if (upInit_ < 0 || leftInit_ < 0 || downInit_ >= height_ || rightInit_ >= 
width_) {
+    throw NotFoundException("Invalid dimensions WhiteRectangleDetector");
+  }
+}
+
+/**
+ * <p>
+ * Detects a candidate barcode-like rectangular region within an image. It
+ * starts around the center of the image, increases the size of the candidate
+ * region until it finds a white rectangular region.
+ * </p>
+ *
+ * @return address@hidden vector<Ref<ResultPoint> >} describing the corners of 
the rectangular
+ *         region. The first and last points are opposed on the diagonal, as
+ *         are the second and third. The first point will be the topmost
+ *         point and the last, the bottommost. The second point will be
+ *         leftmost and the third, the rightmost
+ * @throws NotFoundException if no Data Matrix Code can be found
+*/
+std::vector<Ref<ResultPoint> > WhiteRectangleDetector::detect() {
+  int left = leftInit_;
+  int right = rightInit_;
+  int up = upInit_;
+  int down = downInit_;
+
+  bool sizeExceeded = false;
+  bool aBlackPointFoundOnBorder = true;
+  bool atLeastOneBlackPointFoundOnBorder = false;
+
+  while (aBlackPointFoundOnBorder) {
+    aBlackPointFoundOnBorder = false;
+
+    // .....
+    // .   |
+    // .....
+    bool rightBorderNotWhite = true;
+    while (rightBorderNotWhite && right < width_) {
+      rightBorderNotWhite = containsBlackPoint(up, down, right, false);
+      if (rightBorderNotWhite) {
+        right++;
+        aBlackPointFoundOnBorder = true;
+      }
+    }
+
+    if (right >= width_) {
+      sizeExceeded = true;
+      break;
+    }
+
+    // .....
+    // .   .
+    // .___.
+    bool bottomBorderNotWhite = true;
+    while (bottomBorderNotWhite && down < height_) {
+      bottomBorderNotWhite = containsBlackPoint(left, right, down, true);
+      if (bottomBorderNotWhite) {
+        down++;
+        aBlackPointFoundOnBorder = true;
+      }
+    }
+
+    if (down >= height_) {
+      sizeExceeded = true;
+      break;
+    }
+
+    // .....
+    // |   .
+    // .....
+    bool leftBorderNotWhite = true;
+    while (leftBorderNotWhite && left >= 0) {
+      leftBorderNotWhite = containsBlackPoint(up, down, left, false);
+      if (leftBorderNotWhite) {
+        left--;
+        aBlackPointFoundOnBorder = true;
+      }
+    }
+
+    if (left < 0) {
+      sizeExceeded = true;
+      break;
+    }
+
+    // .___.
+    // .   .
+    // .....
+    bool topBorderNotWhite = true;
+    while (topBorderNotWhite && up >= 0) {
+      topBorderNotWhite = containsBlackPoint(left, right, up, true);
+      if (topBorderNotWhite) {
+        up--;
+        aBlackPointFoundOnBorder = true;
+      }
+    }
+
+    if (up < 0) {
+      sizeExceeded = true;
+      break;
+    }
+
+    if (aBlackPointFoundOnBorder) {
+      atLeastOneBlackPointFoundOnBorder = true;
+    }
+
+  }
+  if (!sizeExceeded && atLeastOneBlackPointFoundOnBorder) {
+
+    int maxSize = right - left;
+
+    Ref<ResultPoint> z(NULL);
+    //go up right
+    for (int i = 1; i < maxSize; i++) {
+      z = getBlackPointOnSegment(left, down - i, left + i, down);
+      if (z != NULL) {
+        break;
+      }
+    }
+
+    if (z == NULL) {
+      throw NotFoundException("z == NULL");
+    }
+
+    Ref<ResultPoint> t(NULL);
+    //go down right
+    for (int i = 1; i < maxSize; i++) {
+      t = getBlackPointOnSegment(left, up + i, left + i, up);
+      if (t != NULL) {
+        break;
+      }
+    }
+
+    if (t == NULL) {
+      throw NotFoundException("t == NULL");
+    }
+
+    Ref<ResultPoint> x(NULL);
+    //go down left
+    for (int i = 1; i < maxSize; i++) {
+      x = getBlackPointOnSegment(right, up + i, right - i, up);
+      if (x != NULL) {
+        break;
+      }
+    }
+
+    if (x == NULL) {
+      throw NotFoundException("x == NULL");
+    }
+
+    Ref<ResultPoint> y(NULL);
+    //go up left
+    for (int i = 1; i < maxSize; i++) {
+      y = getBlackPointOnSegment(right, down - i, right - i, down);
+      if (y != NULL) {
+        break;
+      }
+    }
+
+    if (y == NULL) {
+      throw NotFoundException("y == NULL");
+    }
+
+    return centerEdges(y, z, x, t);
+
+  } else {
+    throw NotFoundException("No black point found on border");
+  }
+}
+
+/**
+ * Ends up being a bit faster than Math.round(). This merely rounds its
+ * argument to the nearest int, where x.5 rounds up.
+ */
+int WhiteRectangleDetector::round(float d) {
+  return (int) (d + 0.5f);
+}
+
+Ref<ResultPoint> WhiteRectangleDetector::getBlackPointOnSegment(float aX, 
float aY, float bX, float bY) {
+  int dist = distanceL2(aX, aY, bX, bY);
+  float xStep = (bX - aX) / dist;
+  float yStep = (bY - aY) / dist;
+  for (int i = 0; i < dist; i++) {
+    int x = round(aX + i * xStep);
+    int y = round(aY + i * yStep);
+    if (image_->get(x, y)) {
+      Ref<ResultPoint> point(new ResultPoint(x, y));
+      return point;
+    }
+  }
+  Ref<ResultPoint> point(NULL);
+  return point;
+}
+
+int WhiteRectangleDetector::distanceL2(float aX, float aY, float bX, float bY) 
{
+  float xDiff = aX - bX;
+  float yDiff = aY - bY;
+  return round((float)sqrt(xDiff * xDiff + yDiff * yDiff));
+}
+
+/**
+ * recenters the points of a constant distance towards the center
+ *
+ * @param y bottom most point
+ * @param z left most point
+ * @param x right most point
+ * @param t top most point
+ * @return address@hidden vector<Ref<ResultPoint> >} describing the corners of 
the rectangular
+ *         region. The first and last points are opposed on the diagonal, as
+ *         are the second and third. The first point will be the topmost
+ *         point and the last, the bottommost. The second point will be
+ *         leftmost and the third, the rightmost
+ */
+vector<Ref<ResultPoint> > WhiteRectangleDetector::centerEdges(Ref<ResultPoint> 
y, Ref<ResultPoint> z,
+                                  Ref<ResultPoint> x, Ref<ResultPoint> t) {
+
+  //
+  //       t            t
+  //  z                      x
+  //        x    OR    z
+  //   y                    y
+  //
+
+  float yi = y->getX();
+  float yj = y->getY();
+  float zi = z->getX();
+  float zj = z->getY();
+  float xi = x->getX();
+  float xj = x->getY();
+  float ti = t->getX();
+  float tj = t->getY();
+
+  std::vector<Ref<ResultPoint> > corners(4);
+  if (yi < (float)width_/2) {
+    Ref<ResultPoint> pointA(new ResultPoint(ti - CORR, tj + CORR));
+    Ref<ResultPoint> pointB(new ResultPoint(zi + CORR, zj + CORR));
+    Ref<ResultPoint> pointC(new ResultPoint(xi - CORR, xj - CORR));
+    Ref<ResultPoint> pointD(new ResultPoint(yi + CORR, yj - CORR));
+         corners[0].reset(pointA);
+         corners[1].reset(pointB);
+         corners[2].reset(pointC);
+         corners[3].reset(pointD);
+  } else {
+    Ref<ResultPoint> pointA(new ResultPoint(ti + CORR, tj + CORR));
+    Ref<ResultPoint> pointB(new ResultPoint(zi + CORR, zj - CORR));
+    Ref<ResultPoint> pointC(new ResultPoint(xi - CORR, xj + CORR));
+    Ref<ResultPoint> pointD(new ResultPoint(yi - CORR, yj - CORR));
+         corners[0].reset(pointA);
+         corners[1].reset(pointB);
+         corners[2].reset(pointC);
+         corners[3].reset(pointD);
+  }
+  return corners;
+}
+
+/**
+ * Determines whether a segment contains a black point
+ *
+ * @param a          min value of the scanned coordinate
+ * @param b          max value of the scanned coordinate
+ * @param fixed      value of fixed coordinate
+ * @param horizontal set to true if scan must be horizontal, false if vertical
+ * @return true if a black point has been found, else false.
+ */
+bool WhiteRectangleDetector::containsBlackPoint(int a, int b, int fixed, bool 
horizontal) {
+  if (horizontal) {
+    for (int x = a; x <= b; x++) {
+      if (image_->get(x, fixed)) {
+        return true;
+      }
+    }
+  } else {
+    for (int y = a; y <= b; y++) {
+      if (image_->get(fixed, y)) {
+        return true;
+      }
+    }
+  }
+
+  return false;
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/WhiteRectangleDetector.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/WhiteRectangleDetector.h
                                (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/detector/WhiteRectangleDetector.h
        2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,61 @@
+#ifndef __WHITERECTANGLEDETECTOR_H__
+#define __WHITERECTANGLEDETECTOR_H__
+
+/*
+ *  WhiteRectangleDetector.h
+ *
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010  authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <vector>
+#include <zxing/ReaderException.h>
+#include <zxing/ResultPoint.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/common/Counted.h>
+#include <zxing/ResultPoint.h>
+
+
+namespace zxing {
+
+class WhiteRectangleDetector : public Counted {
+  private:
+    static int INIT_SIZE;
+    static int CORR;
+    Ref<BitMatrix> image_;
+    int width_;
+    int height_;
+    int leftInit_;
+    int rightInit_;
+    int downInit_;
+    int upInit_;
+
+  public:
+    WhiteRectangleDetector(Ref<BitMatrix> image);
+    WhiteRectangleDetector(Ref<BitMatrix> image, int initSize, int x, int y);
+    std::vector<Ref<ResultPoint> > detect();
+
+  private: 
+    int round(float a);
+    Ref<ResultPoint> getBlackPointOnSegment(float aX, float aY, float bX, 
float bY);
+    int distanceL2(float aX, float aY, float bX, float bY);
+    std::vector<Ref<ResultPoint> > centerEdges(Ref<ResultPoint> y, 
Ref<ResultPoint> z,
+                                    Ref<ResultPoint> x, Ref<ResultPoint> t);
+    bool containsBlackPoint(int a, int b, int fixed, bool horizontal);
+};
+}
+
+#endif

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGF.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGF.cpp    
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGF.cpp    
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,147 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  GenericGF.cpp
+ *  zxing
+ *
+ *  Created by Lukas Stabe on 13/02/2012.
+ *  Copyright 2012 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <iostream>
+#include <zxing/common/reedsolomon/GenericGF.h>
+#include <zxing/common/reedsolomon/GenericGFPoly.h>
+#include <zxing/common/IllegalArgumentException.h>
+
+using zxing::GenericGF;
+using zxing::GenericGFPoly;
+using zxing::Ref;
+
+Ref<GenericGF> GenericGF::QR_CODE_FIELD_256(new GenericGF(0x011D, 256));
+Ref<GenericGF> GenericGF::DATA_MATRIX_FIELD_256(new GenericGF(0x012D, 256));
+Ref<GenericGF> GenericGF::AZTEC_PARAM(new GenericGF(0x13, 16));
+Ref<GenericGF> GenericGF::AZTEC_DATA_6(new GenericGF(0x43, 64));
+Ref<GenericGF> GenericGF::AZTEC_DATA_8(GenericGF::DATA_MATRIX_FIELD_256);
+Ref<GenericGF> GenericGF::AZTEC_DATA_10(new GenericGF(0x409, 1024));
+Ref<GenericGF> GenericGF::AZTEC_DATA_12(new GenericGF(0x1069, 4096));
+  
+  
+static int INITIALIZATION_THRESHOLD = 0;
+  
+GenericGF::GenericGF(int primitive, int size)
+  : size_(size), primitive_(primitive), initialized_(false) {
+  if (size <= INITIALIZATION_THRESHOLD) {
+    initialize();
+  }
+}
+  
+void GenericGF::initialize() {
+  //expTable_ = std::vector<int>(size_, (const int) 0);
+  //logTable_ = std::vector<int>(size_, (const int) 0);
+  expTable_.resize(size_);
+  logTable_.resize(size_);
+    
+  int x = 1;
+    
+  for (int i = 0; i < size_; i++) {
+    expTable_[i] = x;
+    x <<= 1; // x = x * 2; we're assuming the generator alpha is 2
+    if (x >= size_) {
+      x ^= primitive_;
+      x &= size_-1;
+    }
+  }
+  for (int i = 0; i < size_-1; i++) {
+    logTable_[expTable_[i]] = i;
+  }
+  //logTable_[0] == 0 but this should never be used
+    
+  zero_ = Ref<GenericGFPoly>(new GenericGFPoly(Ref<GenericGF>(this), 
ArrayRef<int>(new Array<int>(1))));
+  zero_->getCoefficients()[0] = 0;
+  one_ = Ref<GenericGFPoly>(new GenericGFPoly(Ref<GenericGF>(this), 
ArrayRef<int>(new Array<int>(1))));
+  one_->getCoefficients()[0] = 1;
+    
+  initialized_ = true;
+}
+  
+void GenericGF::checkInit() {
+  if (!initialized_) {
+    initialize();
+  }
+}
+  
+Ref<GenericGFPoly> GenericGF::getZero() {
+  checkInit();
+  return zero_;
+}
+  
+Ref<GenericGFPoly> GenericGF::getOne() {
+  checkInit();
+  return one_;
+}
+  
+Ref<GenericGFPoly> GenericGF::buildMonomial(int degree, int coefficient) {
+  checkInit();
+    
+  if (degree < 0) {
+    throw IllegalArgumentException("Degree must be non-negative");
+  }
+  if (coefficient == 0) {
+    return zero_;
+  }
+  ArrayRef<int> coefficients(new Array<int>(degree + 1));
+  coefficients[0] = coefficient;
+    
+  //return new GenericGFPoly(this, coefficients);
+  return Ref<GenericGFPoly>(new GenericGFPoly(Ref<GenericGF>(this), 
coefficients));
+}
+  
+int GenericGF::addOrSubtract(int a, int b) {
+  return a ^ b;
+}
+  
+int GenericGF::exp(int a) {
+  checkInit();
+  return expTable_[a];
+}
+  
+int GenericGF::log(int a) {
+  checkInit();
+  if (a == 0) {
+    throw IllegalArgumentException("cannot give log(0)");
+  }
+  return logTable_[a];
+}
+  
+int GenericGF::inverse(int a) {
+  checkInit();
+  if (a == 0) {
+    throw IllegalArgumentException("Cannot calculate the inverse of 0");
+  }
+  return expTable_[size_ - logTable_[a] - 1];
+}
+  
+int GenericGF::multiply(int a, int b) {
+  checkInit();
+    
+  if (a == 0 || b == 0) {
+    return 0;
+  }
+    
+  return expTable_[(logTable_[a] + logTable_[b]) % (size_ - 1)];
+  }
+    
+int GenericGF::getSize() {
+  return size_;
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGF.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGF.h  
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGF.h  
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,78 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  GenericGF.h
+ *  zxing
+ *
+ *  Created by Lukas Stabe on 13/02/2012.
+ *  Copyright 2012 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef GENERICGF_H
+#define GENERICGF_H
+
+#include <vector>
+#include <zxing/common/Counted.h>
+
+namespace zxing {
+  class GenericGFPoly;
+  
+  class GenericGF : public Counted {
+    
+  private:
+    std::vector<int> expTable_;
+    std::vector<int> logTable_;
+    Ref<GenericGFPoly> zero_;
+    Ref<GenericGFPoly> one_;
+    int size_;
+    int primitive_;
+    bool initialized_;
+    
+    void initialize();
+    void checkInit();
+    
+  public:
+    static Ref<GenericGF> AZTEC_DATA_12;
+    static Ref<GenericGF> AZTEC_DATA_10;
+    static Ref<GenericGF> AZTEC_DATA_8;
+    static Ref<GenericGF> AZTEC_DATA_6;
+    static Ref<GenericGF> AZTEC_PARAM;
+    static Ref<GenericGF> QR_CODE_FIELD_256;
+    static Ref<GenericGF> DATA_MATRIX_FIELD_256;
+    
+    GenericGF(int primitive, int size);
+    
+    Ref<GenericGFPoly> getZero();
+    Ref<GenericGFPoly> getOne();
+    int getSize();
+    Ref<GenericGFPoly> buildMonomial(int degree, int coefficient);
+    
+    static int addOrSubtract(int a, int b);
+    int exp(int a);
+    int log(int a);
+    int inverse(int a);
+    int multiply(int a, int b);
+      
+    bool operator==(GenericGF other) {
+      return (other.getSize() == this->size_ &&
+              other.primitive_ == this->primitive_);
+    }
+    
+    //#warning todo: add print method
+    
+  };
+}
+
+#endif //GENERICGF_H
+

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGFPoly.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGFPoly.cpp
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGFPoly.cpp
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,215 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  GenericGFPoly.cpp
+ *  zxing
+ *
+ *  Created by Lukas Stabe on 13/02/2012.
+ *  Copyright 2012 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <iostream>
+#include <zxing/common/reedsolomon/GenericGFPoly.h>
+#include <zxing/common/reedsolomon/GenericGF.h>
+#include <zxing/common/IllegalArgumentException.h>
+
+using zxing::GenericGFPoly;
+using zxing::ArrayRef;
+using zxing::Ref;
+
+GenericGFPoly::GenericGFPoly(Ref<GenericGF> field,
+                             ArrayRef<int> coefficients)
+  :  field_(field) {
+  if (coefficients.size() == 0) {
+    throw IllegalArgumentException("need coefficients");
+  }
+  int coefficientsLength = coefficients.size();
+  if (coefficientsLength > 1 && coefficients[0] == 0) {
+    // Leading term must be non-zero for anything except the constant 
polynomial "0"
+    int firstNonZero = 1;
+    while (firstNonZero < coefficientsLength && coefficients[firstNonZero] == 
0) {
+      firstNonZero++;
+    }
+    if (firstNonZero == coefficientsLength) {
+      coefficients_ = field->getZero()->getCoefficients();
+    } else {
+      coefficients_ = ArrayRef<int>(new 
Array<int>(coefficientsLength-firstNonZero));
+      for (int i = 0; i < (int)coefficients_.size(); i++) {
+        coefficients_[i] = coefficients[i + firstNonZero];
+      }
+    }
+  } else {
+    coefficients_ = coefficients;
+  }
+}
+  
+ArrayRef<int> GenericGFPoly::getCoefficients() {
+  return coefficients_;
+}
+  
+int GenericGFPoly::getDegree() {
+  return coefficients_.size() - 1;
+}
+  
+bool GenericGFPoly::isZero() {
+  return coefficients_[0] == 0;
+}
+  
+int GenericGFPoly::getCoefficient(int degree) {
+  return coefficients_[coefficients_.size() - 1 - degree];
+}
+  
+int GenericGFPoly::evaluateAt(int a) {
+  if (a == 0) {
+    // Just return the x^0 coefficient
+    return getCoefficient(0);
+  }
+    
+  int size = coefficients_.size();
+  if (a == 1) {
+    // Just the sum of the coefficients
+    int result = 0;
+    for (int i = 0; i < size; i++) {
+      result = GenericGF::addOrSubtract(result, coefficients_[i]);
+    }
+    return result;
+  }
+  int result = coefficients_[0];
+  for (int i = 1; i < size; i++) {
+    result = GenericGF::addOrSubtract(field_->multiply(a, result), 
coefficients_[i]);
+  }
+  return result;
+}
+  
+Ref<GenericGFPoly> GenericGFPoly::addOrSubtract(Ref<zxing::GenericGFPoly> 
other) {
+  if (!(field_.object_ == other->field_.object_)) {
+    throw IllegalArgumentException("GenericGFPolys do not have same GenericGF 
field");
+  }
+  if (isZero()) {
+    return other;
+  }
+  if (other->isZero()) {
+    return Ref<GenericGFPoly>(this);
+  }
+    
+  ArrayRef<int> smallerCoefficients = coefficients_;
+  ArrayRef<int> largerCoefficients = other->getCoefficients();
+  if (smallerCoefficients.size() > largerCoefficients.size()) {
+    ArrayRef<int> temp = smallerCoefficients;
+    smallerCoefficients = largerCoefficients;
+    largerCoefficients = temp;
+  }
+    
+  ArrayRef<int> sumDiff(new Array<int>(largerCoefficients.size()));
+  int lengthDiff = largerCoefficients.size() - smallerCoefficients.size();
+  // Copy high-order terms only found in higher-degree polynomial's 
coefficients
+  for (int i = 0; i < lengthDiff; i++) {
+    sumDiff[i] = largerCoefficients[i];
+  }
+    
+  for (int i = lengthDiff; i < (int)largerCoefficients.size(); i++) {
+    sumDiff[i] = GenericGF::addOrSubtract(smallerCoefficients[i-lengthDiff],
+                                          largerCoefficients[i]);
+  }
+    
+  return Ref<GenericGFPoly>(new GenericGFPoly(field_, sumDiff));
+}
+  
+Ref<GenericGFPoly> GenericGFPoly::multiply(Ref<zxing::GenericGFPoly> other) {
+  if (!(field_.object_ == other->field_.object_)) {
+    throw IllegalArgumentException("GenericGFPolys do not have same GenericGF 
field");
+  }
+    
+  if (isZero() || other->isZero()) {
+    return field_->getZero();
+  }
+    
+  ArrayRef<int> aCoefficients = coefficients_;
+  int aLength = aCoefficients.size();
+    
+  ArrayRef<int> bCoefficients = other->getCoefficients();
+  int bLength = bCoefficients.size();
+    
+  ArrayRef<int> product(new Array<int>(aLength + bLength - 1));
+  for (int i = 0; i < aLength; i++) {
+    int aCoeff = aCoefficients[i];
+    for (int j = 0; j < bLength; j++) {
+      product[i+j] = GenericGF::addOrSubtract(product[i+j], 
+                                              field_->multiply(aCoeff, 
bCoefficients[j]));
+    }
+  }
+    
+  return Ref<GenericGFPoly>(new GenericGFPoly(field_, product));
+}
+  
+Ref<GenericGFPoly> GenericGFPoly::multiply(int scalar) {
+  if (scalar == 0) {
+    return field_->getZero();
+  }
+  if (scalar == 1) {
+    return Ref<GenericGFPoly>(this);
+  }
+  int size = coefficients_.size();
+  ArrayRef<int> product(new Array<int>(size));
+  for (int i = 0; i < size; i++) {
+    product[i] = field_->multiply(coefficients_[i], scalar);
+  }
+  return Ref<GenericGFPoly>(new GenericGFPoly(field_, product));
+}
+  
+Ref<GenericGFPoly> GenericGFPoly::multiplyByMonomial(int degree, int 
coefficient) {
+  if (degree < 0) {
+    throw IllegalArgumentException("degree must not be less then 0");
+  }
+  if (coefficient == 0) {
+    return field_->getZero();
+  }
+  int size = coefficients_.size();
+  ArrayRef<int> product(new Array<int>(size+degree));
+  for (int i = 0; i < size; i++) {
+    product[i] = field_->multiply(coefficients_[i], coefficient);
+  }
+  return Ref<GenericGFPoly>(new GenericGFPoly(field_, product));
+}
+  
+std::vector<Ref<GenericGFPoly> > GenericGFPoly::divide(Ref<GenericGFPoly> 
other) {
+  if (!(field_.object_ == other->field_.object_)) {
+    throw IllegalArgumentException("GenericGFPolys do not have same GenericGF 
field");
+  }
+  if (other->isZero()) {
+    throw IllegalArgumentException("divide by 0");
+  }
+    
+  Ref<GenericGFPoly> quotient = field_->getZero();
+  Ref<GenericGFPoly> remainder = Ref<GenericGFPoly>(this);
+    
+  int denominatorLeadingTerm = other->getCoefficient(other->getDegree());
+  int inverseDenominatorLeadingTerm = field_->inverse(denominatorLeadingTerm);
+    
+  while (remainder->getDegree() >= other->getDegree() && !remainder->isZero()) 
{
+    int degreeDifference = remainder->getDegree() - other->getDegree();
+    int scale = 
field_->multiply(remainder->getCoefficient(remainder->getDegree()),
+                                 inverseDenominatorLeadingTerm);
+    Ref<GenericGFPoly> term = other->multiplyByMonomial(degreeDifference, 
scale);
+    Ref<GenericGFPoly> iterationQuotiont = 
field_->buildMonomial(degreeDifference,
+                                                                 scale);
+    quotient = quotient->addOrSubtract(iterationQuotiont);
+    remainder = remainder->addOrSubtract(term);
+  }
+    
+  std::vector<Ref<GenericGFPoly> > returnValue;
+  returnValue[0] = quotient;
+  returnValue[1] = remainder;
+  return returnValue;
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGFPoly.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGFPoly.h  
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/GenericGFPoly.h  
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,54 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  GenericGFPoly.h
+ *  zxing
+ *
+ *  Created by Lukas Stabe on 13/02/2012.
+ *  Copyright 2012 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef GENERICGFPOLY_H
+#define GENERICGFPOLY_H
+
+#include <vector>
+#include <zxing/common/Array.h>
+#include <zxing/common/Counted.h>
+
+namespace zxing {
+  class GenericGF;
+  
+  class GenericGFPoly : public Counted {
+  private:
+    Ref<GenericGF> field_;
+    ArrayRef<int> coefficients_;
+    
+  public:
+    GenericGFPoly(Ref<GenericGF> field, ArrayRef<int> coefficients);
+    ArrayRef<int> getCoefficients();
+    int getDegree();
+    bool isZero();
+    int getCoefficient(int degree);
+    int evaluateAt(int a);
+    Ref<GenericGFPoly> addOrSubtract(Ref<GenericGFPoly> other);
+    Ref<GenericGFPoly> multiply(Ref<GenericGFPoly> other);
+    Ref<GenericGFPoly> multiply(int scalar);
+    Ref<GenericGFPoly> multiplyByMonomial(int degree, int coefficient);
+    std::vector<Ref<GenericGFPoly> > divide(Ref<GenericGFPoly> other);
+    
+      //#warning todo: add print method
+  };
+}
+
+#endif //GENERICGFPOLY_H
\ No newline at end of file

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonDecoder.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonDecoder.cpp
                               (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonDecoder.cpp
       2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,199 @@
+/*
+ *  ReedSolomonDecoder.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 05/05/2008.
+ *  Copyright 2008 Google UK. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <iostream>
+
+#include <memory>
+#include <zxing/common/reedsolomon/ReedSolomonDecoder.h>
+#include <zxing/common/reedsolomon/ReedSolomonException.h>
+#include <zxing/common/IllegalArgumentException.h>
+
+using namespace std;
+
+namespace zxing {
+
+ReedSolomonDecoder::ReedSolomonDecoder(Ref<GenericGF> fld) :
+    field(fld) {
+}
+
+ReedSolomonDecoder::~ReedSolomonDecoder() {
+}
+
+void ReedSolomonDecoder::decode(ArrayRef<int> received, int twoS) {
+
+  Ref<GenericGFPoly> poly(new GenericGFPoly(field, received));
+
+
+#ifdef DEBUG
+  cout << "decoding with poly " << *poly << "\n";
+#endif
+
+  ArrayRef<int> syndromeCoefficients(new Array<int> (twoS));
+
+
+#ifdef DEBUG
+  cout << "syndromeCoefficients array = " <<
+       syndromeCoefficients.array_ << "\n";
+#endif
+
+  bool dataMatrix = (field.object_ == 
GenericGF::DATA_MATRIX_FIELD_256.object_);
+  bool noError = true;
+  for (int i = 0; i < twoS; i++) {
+    int eval = poly->evaluateAt(field->exp(dataMatrix ? i + 1 : i));
+    syndromeCoefficients[syndromeCoefficients->size() - 1 - i] = eval;
+    if (eval != 0) {
+      noError = false;
+    }
+  }
+  if (noError) {
+    return;
+  }
+
+  Ref<GenericGFPoly> syndrome(new GenericGFPoly(field, syndromeCoefficients));
+  Ref<GenericGFPoly> monomial = field->buildMonomial(twoS, 1);
+  vector<Ref<GenericGFPoly> > sigmaOmega = runEuclideanAlgorithm(monomial, 
syndrome, twoS);
+  ArrayRef<int> errorLocations = findErrorLocations(sigmaOmega[0]);
+  ArrayRef<int> errorMagitudes = findErrorMagnitudes(sigmaOmega[1], 
errorLocations, dataMatrix);
+  for (unsigned i = 0; i < errorLocations->size(); i++) {
+    int position = received->size() - 1 - field->log(errorLocations[i]);
+    //TODO: check why the position would be invalid
+    if (position < 0 || (size_t)position >= received.size())
+      throw IllegalArgumentException("Invalid position (ReedSolomonDecoder)");
+    received[position] = GenericGF::addOrSubtract(received[position], 
errorMagitudes[i]);
+  }
+}
+
+vector<Ref<GenericGFPoly> > 
ReedSolomonDecoder::runEuclideanAlgorithm(Ref<GenericGFPoly> a,
+                                                                      
Ref<GenericGFPoly> b,
+                                                                      int R) {
+  // Assume a's degree is >= b's
+  if (a->getDegree() < b->getDegree()) {
+    Ref<GenericGFPoly> tmp = a;
+    a = b;
+    b = tmp;
+  }
+
+  Ref<GenericGFPoly> rLast(a);
+  Ref<GenericGFPoly> r(b);
+  Ref<GenericGFPoly> sLast(field->getOne());
+  Ref<GenericGFPoly> s(field->getZero());
+  Ref<GenericGFPoly> tLast(field->getZero());
+  Ref<GenericGFPoly> t(field->getOne());
+
+
+  // Run Euclidean algorithm until r's degree is less than R/2
+  while (r->getDegree() >= R / 2) {
+    Ref<GenericGFPoly> rLastLast(rLast);
+    Ref<GenericGFPoly> sLastLast(sLast);
+    Ref<GenericGFPoly> tLastLast(tLast);
+    rLast = r;
+    sLast = s;
+    tLast = t;
+
+
+    // Divide rLastLast by rLast, with quotient q and remainder r
+    if (rLast->isZero()) {
+      // Oops, Euclidean algorithm already terminated?
+      throw ReedSolomonException("r_{i-1} was zero");
+    }
+    r = rLastLast;
+    Ref<GenericGFPoly> q(field->getZero());
+    int denominatorLeadingTerm = rLast->getCoefficient(rLast->getDegree());
+    int dltInverse = field->inverse(denominatorLeadingTerm);
+    while (r->getDegree() >= rLast->getDegree() && !r->isZero()) {
+      int degreeDiff = r->getDegree() - rLast->getDegree();
+      int scale = field->multiply(r->getCoefficient(r->getDegree()), 
dltInverse);
+      q = q->addOrSubtract(field->buildMonomial(degreeDiff, scale));
+      r = r->addOrSubtract(rLast->multiplyByMonomial(degreeDiff, scale));
+    }
+
+    s = q->multiply(sLast)->addOrSubtract(sLastLast);
+    t = q->multiply(tLast)->addOrSubtract(tLastLast);
+
+  }
+
+  int sigmaTildeAtZero = t->getCoefficient(0);
+  if (sigmaTildeAtZero == 0) {
+    throw ReedSolomonException("sigmaTilde(0) was zero");
+  }
+
+  int inverse = field->inverse(sigmaTildeAtZero);
+  Ref<GenericGFPoly> sigma(t->multiply(inverse));
+  Ref<GenericGFPoly> omega(r->multiply(inverse));
+
+
+#ifdef DEBUG
+  cout << "t = " << *t << "\n";
+  cout << "r = " << *r << "\n";
+  cout << "sigma = " << *sigma << "\n";
+  cout << "omega = " << *omega << "\n";
+#endif
+
+  vector<Ref<GenericGFPoly> > result(2);
+  result[0] = sigma;
+  result[1] = omega;
+  return result;
+}
+
+ArrayRef<int> ReedSolomonDecoder::findErrorLocations(Ref<GenericGFPoly> 
errorLocator) {
+  // This is a direct application of Chien's search
+  int numErrors = errorLocator->getDegree();
+  if (numErrors == 1) { // shortcut
+    ArrayRef<int> result(new Array<int>(1));
+    result[0] = errorLocator->getCoefficient(1);
+    return result;
+  }
+  ArrayRef<int> result(new Array<int>(numErrors));
+  int e = 0;
+  for (int i = 1; i < field->getSize() && e < numErrors; i++) {
+    // cout << "errorLocator(" << i << ") == " << errorLocator->evaluateAt(i) 
<< "\n";
+    if (errorLocator->evaluateAt(i) == 0) {
+      result[e] = field->inverse(i);
+      e++;
+    }
+  }
+  if (e != numErrors) {
+    throw ReedSolomonException("Error locator degree does not match number of 
roots");
+  }
+  return result;
+}
+
+ArrayRef<int> ReedSolomonDecoder::findErrorMagnitudes(Ref<GenericGFPoly> 
errorEvaluator, ArrayRef<int> errorLocations, bool dataMatrix) {
+  // This is directly applying Forney's Formula
+  int s = errorLocations.size();
+  ArrayRef<int> result(new Array<int>(s));
+  for (int i = 0; i < s; i++) {
+    int xiInverse = field->inverse(errorLocations[i]);
+    int denominator = 1;
+    for (int j = 0; j < s; j++) {
+      if (i != j) {
+        denominator = field->multiply(denominator, GenericGF::addOrSubtract(1, 
field->multiply(errorLocations[j],
+                                     xiInverse)));
+      }
+    }
+    result[i] = field->multiply(errorEvaluator->evaluateAt(xiInverse), 
field->inverse(denominator));
+
+    if (dataMatrix) {
+      result[i] = field->multiply(result[i], xiInverse);
+       }
+  }
+  return result;
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonDecoder.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonDecoder.h
                         (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonDecoder.h
 2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,48 @@
+#ifndef __REED_SOLOMON_DECODER_H__
+#define __REED_SOLOMON_DECODER_H__
+
+/*
+ *  ReedSolomonDecoder.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <memory>
+#include <vector>
+#include <zxing/common/Counted.h>
+#include <zxing/common/Array.h>
+#include <zxing/common/reedsolomon/GenericGFPoly.h>
+#include <zxing/common/reedsolomon/GenericGF.h>
+
+namespace zxing {
+class GenericGFPoly;
+class GenericGF;
+
+class ReedSolomonDecoder {
+private:
+  Ref<GenericGF> field;
+public:
+  ReedSolomonDecoder(Ref<GenericGF> fld);
+  ~ReedSolomonDecoder();
+  void decode(ArrayRef<int> received, int twoS);
+private:
+  std::vector<Ref<GenericGFPoly> > runEuclideanAlgorithm(Ref<GenericGFPoly> a, 
Ref<GenericGFPoly> b, int R);
+  ArrayRef<int> findErrorLocations(Ref<GenericGFPoly> errorLocator);
+  ArrayRef<int> findErrorMagnitudes(Ref<GenericGFPoly> errorEvaluator, 
ArrayRef<int> errorLocations, bool dataMatrix);
+};
+}
+
+#endif // __REED_SOLOMON_DECODER_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonException.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonException.cpp
                             (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonException.cpp
     2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,30 @@
+/*
+ *  ReedSolomonException.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 06/05/2008.
+ *  Copyright 2008 Google UK. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/reedsolomon/ReedSolomonException.h>
+
+namespace zxing {
+ReedSolomonException::ReedSolomonException(const char *msg) throw() :
+    Exception(msg) {
+}
+ReedSolomonException::~ReedSolomonException() throw() {
+}
+
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonException.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonException.h
                               (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/common/reedsolomon/ReedSolomonException.h
       2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,33 @@
+#ifndef __REED_SOLOMON_EXCEPTION_H__
+#define __REED_SOLOMON_EXCEPTION_H__
+
+/*
+ *  ReedSolomonException.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/Exception.h>
+
+namespace zxing {
+class ReedSolomonException : public Exception {
+public:
+  ReedSolomonException(const char *msg) throw();
+  ~ReedSolomonException() throw();
+};
+}
+
+#endif // __REED_SOLOMON_EXCEPTION_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/DataMatrixReader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/DataMatrixReader.cpp 
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/DataMatrixReader.cpp 
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,84 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  DataMatrixReader.cpp
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/datamatrix/DataMatrixReader.h>
+#include <zxing/datamatrix/detector/Detector.h>
+#include <iostream>
+
+namespace zxing {
+namespace datamatrix {
+
+using namespace std;
+
+DataMatrixReader::DataMatrixReader() :
+    decoder_() {
+}
+
+Ref<Result> DataMatrixReader::decode(Ref<BinaryBitmap> image, DecodeHints 
hints) {
+  (void)hints;
+#ifdef DEBUG
+  cout << "decoding image " << image.object_ << ":\n" << flush;
+#endif
+
+  Detector detector(image->getBlackMatrix());
+
+
+#ifdef DEBUG
+  cout << "(1) created detector " << &detector << "\n" << flush;
+#endif
+
+  Ref<DetectorResult> detectorResult(detector.detect());
+#ifdef DEBUG
+  cout << "(2) detected, have detectorResult " << detectorResult.object_ << 
"\n" << flush;
+#endif
+
+  std::vector<Ref<ResultPoint> > points(detectorResult->getPoints());
+
+
+#ifdef DEBUG
+  cout << "(3) extracted points " << &points << "\n" << flush;
+  cout << "found " << points.size() << " points:\n";
+  for (size_t i = 0; i < points.size(); i++) {
+    cout << "   " << points[i]->getX() << "," << points[i]->getY() << "\n";
+  }
+  cout << "bits:\n";
+  cout << *(detectorResult->getBits()) << "\n";
+#endif
+
+  Ref<DecoderResult> decoderResult(decoder_.decode(detectorResult->getBits()));
+#ifdef DEBUG
+  cout << "(4) decoded, have decoderResult " << decoderResult.object_ << "\n" 
<< flush;
+#endif
+
+  Ref<Result> result(
+    new Result(decoderResult->getText(), decoderResult->getRawBytes(), points, 
BarcodeFormat_DATA_MATRIX));
+#ifdef DEBUG
+  cout << "(5) created result " << result.object_ << ", returning\n" << flush;
+#endif
+
+  return result;
+}
+
+DataMatrixReader::~DataMatrixReader() {
+}
+
+}
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/DataMatrixReader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/DataMatrixReader.h   
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/DataMatrixReader.h   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,45 @@
+#ifndef __DATA_MATRIX_READER_H__
+#define __DATA_MATRIX_READER_H__
+
+/*
+ *  DataMatrixReader.h
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/Reader.h>
+#include <zxing/DecodeHints.h>
+#include <zxing/datamatrix/decoder/Decoder.h>
+
+namespace zxing {
+namespace datamatrix {
+
+class DataMatrixReader : public Reader {
+private:
+  Decoder decoder_;
+
+public:
+  DataMatrixReader();
+  virtual Ref<Result> decode(Ref<BinaryBitmap> image, DecodeHints hints);
+  virtual ~DataMatrixReader();
+
+};
+
+}
+}
+
+#endif // __DATA_MATRIX_READER_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/DataMatrixVersion.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/DataMatrixVersion.cpp    
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/DataMatrixVersion.cpp    
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,199 @@
+/*
+ *  Version.cpp
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/datamatrix/Version.h>
+#include <limits>
+#include <iostream>
+
+namespace zxing {
+namespace datamatrix {
+using namespace std;
+
+ECB::ECB(int count, int dataCodewords) :
+    count_(count), dataCodewords_(dataCodewords) {
+}
+
+int ECB::getCount() {
+  return count_;
+}
+
+int ECB::getDataCodewords() {
+  return dataCodewords_;
+}
+
+ECBlocks::ECBlocks(int ecCodewords, ECB *ecBlocks) :
+    ecCodewords_(ecCodewords), ecBlocks_(1, ecBlocks) {
+}
+
+ECBlocks::ECBlocks(int ecCodewords, ECB *ecBlocks1, ECB *ecBlocks2) :
+    ecCodewords_(ecCodewords), ecBlocks_(1, ecBlocks1) {
+  ecBlocks_.push_back(ecBlocks2);
+}
+
+int ECBlocks::getECCodewords() {
+  return ecCodewords_;
+}
+
+std::vector<ECB*>& ECBlocks::getECBlocks() {
+  return ecBlocks_;
+}
+
+ECBlocks::~ECBlocks() {
+  for (size_t i = 0; i < ecBlocks_.size(); i++) {
+    delete ecBlocks_[i];
+  }
+}
+
+vector<Ref<Version> > Version::VERSIONS;
+static int N_VERSIONS = Version::buildVersions();
+
+Version::Version(int versionNumber, int symbolSizeRows, int symbolSizeColumns, 
int dataRegionSizeRows,
+               int dataRegionSizeColumns, ECBlocks* ecBlocks) : 
versionNumber_(versionNumber), 
+               symbolSizeRows_(symbolSizeRows), 
symbolSizeColumns_(symbolSizeColumns), 
+               dataRegionSizeRows_(dataRegionSizeRows), 
dataRegionSizeColumns_(dataRegionSizeColumns), 
+               ecBlocks_(ecBlocks), totalCodewords_(0) {
+    // Calculate the total number of codewords
+    int total = 0;
+    int ecCodewords = ecBlocks_->getECCodewords();
+    vector<ECB*> &ecbArray = ecBlocks_->getECBlocks();
+    for (unsigned int i = 0; i < ecbArray.size(); i++) {
+      ECB *ecBlock = ecbArray[i];
+      total += ecBlock->getCount() * (ecBlock->getDataCodewords() + 
ecCodewords);
+    }
+    totalCodewords_ = total;
+}
+
+Version::~Version() {
+    delete ecBlocks_;
+}
+
+int Version::getVersionNumber() {
+  return versionNumber_;
+}
+
+int Version::getSymbolSizeRows() {
+  return symbolSizeRows_;
+}
+  
+int Version::getSymbolSizeColumns() {
+  return symbolSizeColumns_;
+}
+
+int Version::getDataRegionSizeRows() {
+  return dataRegionSizeRows_;
+}
+  
+int Version::getDataRegionSizeColumns() {
+  return dataRegionSizeColumns_;
+}
+  
+int Version::getTotalCodewords() {
+  return totalCodewords_;
+}
+
+ECBlocks* Version::getECBlocks() {
+  return ecBlocks_;
+}
+  
+Ref<Version> Version::getVersionForDimensions(int numRows, int numColumns) {
+    if ((numRows & 0x01) != 0 || (numColumns & 0x01) != 0) {
+      throw ReaderException("Number of rows and columns must be even");
+    }
+    
+    // TODO(bbrown): This is doing a linear search through the array of 
versions.
+    // If we interleave the rectangular versions with the square versions we 
could
+    // do a binary search.
+    for (int i = 0; i < N_VERSIONS; ++i){
+      Ref<Version> version(VERSIONS[i]);
+      if (version->getSymbolSizeRows() == numRows && 
version->getSymbolSizeColumns() == numColumns) {
+        return version;
+      }
+    }
+    throw ReaderException("Error version not found");
+  }
+
+/**
+ * See ISO 16022:2006 5.5.1 Table 7
+ */
+int Version::buildVersions() {
+  VERSIONS.push_back(Ref<Version>(new Version(1, 10, 10, 8, 8,
+                                                 new ECBlocks(5, new ECB(1, 
3)))));
+  VERSIONS.push_back(Ref<Version>(new Version(2, 12, 12, 10, 10,
+                                                 new ECBlocks(7, new ECB(1, 
5)))));
+  VERSIONS.push_back(Ref<Version>(new Version(3, 14, 14, 12, 12,
+                                                 new ECBlocks(10, new ECB(1, 
8)))));
+  VERSIONS.push_back(Ref<Version>(new Version(4, 16, 16, 14, 14,
+                                                 new ECBlocks(12, new ECB(1, 
12)))));
+  VERSIONS.push_back(Ref<Version>(new Version(5, 18, 18, 16, 16,
+                                                 new ECBlocks(14, new ECB(1, 
18)))));
+  VERSIONS.push_back(Ref<Version>(new Version(6, 20, 20, 18, 18,
+                                                 new ECBlocks(18, new ECB(1, 
22)))));
+  VERSIONS.push_back(Ref<Version>(new Version(7, 22, 22, 20, 20,
+                                                 new ECBlocks(20, new ECB(1, 
30)))));
+  VERSIONS.push_back(Ref<Version>(new Version(8, 24, 24, 22, 22,
+                                                 new ECBlocks(24, new ECB(1, 
36)))));
+  VERSIONS.push_back(Ref<Version>(new Version(9, 26, 26, 24, 24,
+                                                 new ECBlocks(28, new ECB(1, 
44)))));
+  VERSIONS.push_back(Ref<Version>(new Version(10, 32, 32, 14, 14,
+                                                 new ECBlocks(36, new ECB(1, 
62)))));
+  VERSIONS.push_back(Ref<Version>(new Version(11, 36, 36, 16, 16,
+                                                 new ECBlocks(42, new ECB(1, 
86)))));
+  VERSIONS.push_back(Ref<Version>(new Version(12, 40, 40, 18, 18,
+                                                 new ECBlocks(48, new ECB(1, 
114)))));
+  VERSIONS.push_back(Ref<Version>(new Version(13, 44, 44, 20, 20,
+                                                 new ECBlocks(56, new ECB(1, 
144)))));
+  VERSIONS.push_back(Ref<Version>(new Version(14, 48, 48, 22, 22,
+                                                 new ECBlocks(68, new ECB(1, 
174)))));
+  VERSIONS.push_back(Ref<Version>(new Version(15, 52, 52, 24, 24,
+                                                 new ECBlocks(42, new ECB(2, 
102)))));
+  VERSIONS.push_back(Ref<Version>(new Version(16, 64, 64, 14, 14,
+                                                 new ECBlocks(56, new ECB(2, 
140)))));
+  VERSIONS.push_back(Ref<Version>(new Version(17, 72, 72, 16, 16,
+                                                 new ECBlocks(36, new ECB(4, 
92)))));
+  VERSIONS.push_back(Ref<Version>(new  Version(18, 80, 80, 18, 18,
+                                                 new ECBlocks(48, new ECB(4, 
114)))));
+  VERSIONS.push_back(Ref<Version>(new Version(19, 88, 88, 20, 20,
+                                                 new ECBlocks(56, new ECB(4, 
144)))));
+  VERSIONS.push_back(Ref<Version>(new Version(20, 96, 96, 22, 22,
+                                                 new ECBlocks(68, new ECB(4, 
174)))));
+  VERSIONS.push_back(Ref<Version>(new Version(21, 104, 104, 24, 24,
+                                                 new ECBlocks(56, new ECB(6, 
136)))));
+  VERSIONS.push_back(Ref<Version>(new Version(22, 120, 120, 18, 18,
+                                                 new ECBlocks(68, new ECB(6, 
175)))));
+  VERSIONS.push_back(Ref<Version>(new Version(23, 132, 132, 20, 20,
+                                                 new ECBlocks(62, new ECB(8, 
163)))));
+  VERSIONS.push_back(Ref<Version>(new Version(24, 144, 144, 22, 22,
+                                                 new ECBlocks(62, new ECB(8, 
156), new ECB(2, 155)))));
+  VERSIONS.push_back(Ref<Version>(new Version(25, 8, 18, 6, 16,
+                                                 new ECBlocks(7, new ECB(1, 
5)))));
+  VERSIONS.push_back(Ref<Version>(new Version(26, 8, 32, 6, 14,
+                                                 new ECBlocks(11, new ECB(1, 
10)))));
+  VERSIONS.push_back(Ref<Version>(new Version(27, 12, 26, 10, 24,
+                                                     new ECBlocks(14, new 
ECB(1, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(28, 12, 36, 10, 16,
+                                                     new ECBlocks(18, new 
ECB(1, 22)))));
+  VERSIONS.push_back(Ref<Version>(new Version(29, 16, 36, 14, 16,
+                                                     new ECBlocks(24, new 
ECB(1, 32)))));
+  VERSIONS.push_back(Ref<Version>(new Version(30, 16, 48, 14, 22,
+                                                     new ECBlocks(28, new 
ECB(1, 49)))));
+  return VERSIONS.size();
+}
+}
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/Version.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/Version.h            
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/Version.h    
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,87 @@
+#ifndef __VERSION_H__
+#define __VERSION_H__
+
+/*
+ *  Version.h
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/ReaderException.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/common/Counted.h>
+#include <vector>
+
+namespace zxing {
+namespace datamatrix {
+
+class ECB {
+private:
+  int count_;
+  int dataCodewords_;
+public:
+  ECB(int count, int dataCodewords);
+  int getCount();
+  int getDataCodewords();
+};
+
+class ECBlocks {
+private:
+  int ecCodewords_;
+  std::vector<ECB*> ecBlocks_;
+public:
+  ECBlocks(int ecCodewords, ECB *ecBlocks);
+  ECBlocks(int ecCodewords, ECB *ecBlocks1, ECB *ecBlocks2);
+  int getECCodewords();
+  std::vector<ECB*>& getECBlocks();
+  ~ECBlocks();
+};
+
+class Version : public Counted {
+private:
+  int versionNumber_;
+  int symbolSizeRows_;
+  int symbolSizeColumns_;
+  int dataRegionSizeRows_;
+  int dataRegionSizeColumns_;
+  ECBlocks* ecBlocks_;
+  int totalCodewords_;
+  Version(int versionNumber, int symbolSizeRows, int symbolSizeColumns, int 
dataRegionSizeRows,
+                 int dataRegionSizeColumns, ECBlocks *ecBlocks);
+
+public:
+  static std::vector<Ref<Version> > VERSIONS;
+  
+  ~Version();
+  int getVersionNumber();
+  int getSymbolSizeRows();
+  int getSymbolSizeColumns();  
+  int getDataRegionSizeRows();  
+  int getDataRegionSizeColumns();
+  int getTotalCodewords();
+  ECBlocks* getECBlocks();
+  static int  buildVersions();  
+  Ref<Version> getVersionForDimensions(int numRows, int numColumns);
+  
+private:
+  Version(const Version&);
+  Version & operator=(const Version&);
+};
+}
+}
+
+#endif // __VERSION_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/BitMatrixParser.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/BitMatrixParser.h
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/BitMatrixParser.h
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,59 @@
+#ifndef __BIT_MATRIX_PARSER_DM_H__
+#define __BIT_MATRIX_PARSER_DM_H__
+
+/*
+ *  BitMatrixParser.h
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/ReaderException.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/common/Counted.h>
+#include <zxing/common/Array.h>
+#include <zxing/datamatrix/Version.h>
+
+namespace zxing {
+namespace datamatrix {
+
+class BitMatrixParser : public Counted {
+private:
+  Ref<BitMatrix> bitMatrix_;
+  Ref<Version> parsedVersion_;
+  Ref<BitMatrix> readBitMatrix_;
+
+  int copyBit(size_t x, size_t y, int versionBits);
+
+public:
+  BitMatrixParser(Ref<BitMatrix> bitMatrix);
+  Ref<Version> readVersion(Ref<BitMatrix> bitMatrix);
+  ArrayRef<unsigned char> readCodewords();
+  bool readModule(int row, int column, int numRows, int numColumns);
+
+private:
+  int readUtah(int row, int column, int numRows, int numColumns);
+  int readCorner1(int numRows, int numColumns);
+  int readCorner2(int numRows, int numColumns);
+  int readCorner3(int numRows, int numColumns);
+  int readCorner4(int numRows, int numColumns);
+  Ref<BitMatrix> extractDataRegion(Ref<BitMatrix> bitMatrix);
+};
+
+}
+}
+
+#endif // __BIT_MATRIX_PARSER_DM_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataBlock.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataBlock.h  
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataBlock.h  
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,49 @@
+#ifndef __DATA_BLOCK_DM_H__
+#define __DATA_BLOCK_DM_H__
+
+/*
+ *  DataBlock.h
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <vector>
+#include <zxing/common/Counted.h>
+#include <zxing/common/Array.h>
+#include <zxing/datamatrix/Version.h>
+
+namespace zxing {
+namespace datamatrix {
+
+class DataBlock : public Counted {
+private:
+  int numDataCodewords_;
+  ArrayRef<unsigned char> codewords_;
+
+  DataBlock(int numDataCodewords, ArrayRef<unsigned char> codewords);
+
+public:  
+  static std::vector<Ref<DataBlock> > getDataBlocks(ArrayRef<unsigned char> 
rawCodewords, Version *version);
+
+  int getNumDataCodewords();
+  ArrayRef<unsigned char> getCodewords();
+};
+
+}
+}
+
+#endif // __DATA_BLOCK_DM_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixBitMatrixParser.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixBitMatrixParser.cpp
                                (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixBitMatrixParser.cpp
        2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,361 @@
+/*
+ *  BitMatrixParser.cpp
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/datamatrix/decoder/BitMatrixParser.h>
+#include <zxing/common/IllegalArgumentException.h>
+
+#include <iostream>
+
+namespace zxing {
+namespace datamatrix {
+
+int BitMatrixParser::copyBit(size_t x, size_t y, int versionBits) {
+  return bitMatrix_->get(x, y) ? (versionBits << 1) | 0x1 : versionBits << 1;
+}
+
+BitMatrixParser::BitMatrixParser(Ref<BitMatrix> bitMatrix) : bitMatrix_(NULL),
+                                                             
parsedVersion_(NULL),
+                                                             
readBitMatrix_(NULL) {
+  size_t dimension = bitMatrix->getDimension();
+  if (dimension < 8 || dimension > 144 || (dimension & 0x01) != 0)
+    throw ReaderException("Dimension must be even, > 8 < 144");
+
+  parsedVersion_ = readVersion(bitMatrix);
+  bitMatrix_ = extractDataRegion(bitMatrix);
+  readBitMatrix_ = new BitMatrix(bitMatrix_->getWidth(), 
bitMatrix_->getHeight());
+}
+
+Ref<Version> BitMatrixParser::readVersion(Ref<BitMatrix> bitMatrix) {
+  if (parsedVersion_ != 0) {
+    return parsedVersion_;
+  }
+
+  int numRows = bitMatrix->getHeight();//getDimension();
+  int numColumns = bitMatrix->getWidth();//numRows;
+
+  Ref<Version> version = parsedVersion_->getVersionForDimensions(numRows, 
numColumns);
+  if (version != 0) {
+    return version;
+  }
+  throw ReaderException("Couldn't decode version");
+}
+
+ArrayRef<unsigned char> BitMatrixParser::readCodewords() {
+       ArrayRef<unsigned char> result(parsedVersion_->getTotalCodewords());
+       int resultOffset = 0;
+    int row = 4;
+    int column = 0;
+
+    int numRows = bitMatrix_->getHeight();
+    int numColumns = bitMatrix_->getWidth();
+
+    bool corner1Read = false;
+    bool corner2Read = false;
+    bool corner3Read = false;
+    bool corner4Read = false;
+
+    // Read all of the codewords
+    do {
+      // Check the four corner cases
+      if ((row == numRows) && (column == 0) && !corner1Read) {
+        result[resultOffset++] = (unsigned char) readCorner1(numRows, 
numColumns);
+        row -= 2;
+        column +=2;
+        corner1Read = true;
+      } else if ((row == numRows-2) && (column == 0) && ((numColumns & 0x03) 
!= 0) && !corner2Read) {
+        result[resultOffset++] = (unsigned char) readCorner2(numRows, 
numColumns);
+        row -= 2;
+        column +=2;
+        corner2Read = true;
+      } else if ((row == numRows+4) && (column == 2) && ((numColumns & 0x07) 
== 0) && !corner3Read) {
+        result[resultOffset++] = (unsigned char) readCorner3(numRows, 
numColumns);
+        row -= 2;
+        column +=2;
+        corner3Read = true;
+      } else if ((row == numRows-2) && (column == 0) && ((numColumns & 0x07) 
== 4) && !corner4Read) {
+        result[resultOffset++] = (unsigned char) readCorner4(numRows, 
numColumns);
+        row -= 2;
+        column +=2;
+        corner4Read = true;
+      } else {
+        // Sweep upward diagonally to the right
+        do {
+          if ((row < numRows) && (column >= 0) && !readBitMatrix_->get(column, 
row)) {
+            result[resultOffset++] = (unsigned char) readUtah(row, column, 
numRows, numColumns);
+          }
+          row -= 2;
+          column +=2;
+        } while ((row >= 0) && (column < numColumns));
+        row += 1;
+        column +=3;
+
+        // Sweep downward diagonally to the left
+        do {
+          if ((row >= 0) && (column < numColumns) && 
!readBitMatrix_->get(column, row)) {
+             result[resultOffset++] = (unsigned char) readUtah(row, column, 
numRows, numColumns);
+          }
+          row += 2;
+          column -=2;
+        } while ((row < numRows) && (column >= 0));
+        row += 3;
+        column +=1;
+      }
+    } while ((row < numRows) || (column < numColumns));
+
+    if (resultOffset != parsedVersion_->getTotalCodewords()) {
+      throw ReaderException("Did not read all codewords");
+    }
+    return result;
+}
+
+bool BitMatrixParser::readModule(int row, int column, int numRows, int 
numColumns) {
+    // Adjust the row and column indices based on boundary wrapping
+    if (row < 0) {
+      row += numRows;
+      column += 4 - ((numRows + 4) & 0x07);
+    }
+    if (column < 0) {
+      column += numColumns;
+      row += 4 - ((numColumns + 4) & 0x07);
+    }
+    readBitMatrix_->set(column, row);
+    return bitMatrix_->get(column, row);
+  }
+
+int BitMatrixParser::readUtah(int row, int column, int numRows, int 
numColumns) {
+    int currentByte = 0;
+    if (readModule(row - 2, column - 2, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(row - 2, column - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(row - 1, column - 2, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(row - 1, column - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(row - 1, column, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(row, column - 2, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(row, column - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(row, column, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    return currentByte;
+  }
+
+int BitMatrixParser::readCorner1(int numRows, int numColumns) {
+    int currentByte = 0;
+    if (readModule(numRows - 1, 0, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(numRows - 1, 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(numRows - 1, 2, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(0, numColumns - 2, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(0, numColumns - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(1, numColumns - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(2, numColumns - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(3, numColumns - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    return currentByte;
+  }
+
+int BitMatrixParser::readCorner2(int numRows, int numColumns) {
+    int currentByte = 0;
+    if (readModule(numRows - 3, 0, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(numRows - 2, 0, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(numRows - 1, 0, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(0, numColumns - 4, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(0, numColumns - 3, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(0, numColumns - 2, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(0, numColumns - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(1, numColumns - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    return currentByte;
+  }
+
+int BitMatrixParser::readCorner3(int numRows, int numColumns) {
+    int currentByte = 0;
+    if (readModule(numRows - 1, 0, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(numRows - 1, numColumns - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(0, numColumns - 3, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(0, numColumns - 2, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(0, numColumns - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(1, numColumns - 3, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(1, numColumns - 2, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(1, numColumns - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    return currentByte;
+  }
+
+int BitMatrixParser::readCorner4(int numRows, int numColumns) {
+    int currentByte = 0;
+    if (readModule(numRows - 3, 0, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(numRows - 2, 0, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(numRows - 1, 0, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(0, numColumns - 2, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(0, numColumns - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(1, numColumns - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(2, numColumns - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    currentByte <<= 1;
+    if (readModule(3, numColumns - 1, numRows, numColumns)) {
+      currentByte |= 1;
+    }
+    return currentByte;
+  }
+
+Ref<BitMatrix> BitMatrixParser::extractDataRegion(Ref<BitMatrix> bitMatrix) {
+    int symbolSizeRows = parsedVersion_->getSymbolSizeRows();
+    int symbolSizeColumns = parsedVersion_->getSymbolSizeColumns();
+
+    if ((int)bitMatrix->getHeight() != symbolSizeRows) {
+      throw IllegalArgumentException("Dimension of bitMatrix must match the 
version size");
+    }
+
+    int dataRegionSizeRows = parsedVersion_->getDataRegionSizeRows();
+    int dataRegionSizeColumns = parsedVersion_->getDataRegionSizeColumns();
+
+    int numDataRegionsRow = symbolSizeRows / dataRegionSizeRows;
+    int numDataRegionsColumn = symbolSizeColumns / dataRegionSizeColumns;
+
+    int sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows;
+    int sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns;
+
+    Ref<BitMatrix> bitMatrixWithoutAlignment(new 
BitMatrix(sizeDataRegionColumn, sizeDataRegionRow));
+    for (int dataRegionRow = 0; dataRegionRow < numDataRegionsRow; 
++dataRegionRow) {
+      int dataRegionRowOffset = dataRegionRow * dataRegionSizeRows;
+      for (int dataRegionColumn = 0; dataRegionColumn < numDataRegionsColumn; 
++dataRegionColumn) {
+        int dataRegionColumnOffset = dataRegionColumn * dataRegionSizeColumns;
+        for (int i = 0; i < dataRegionSizeRows; ++i) {
+          int readRowOffset = dataRegionRow * (dataRegionSizeRows + 2) + 1 + i;
+          int writeRowOffset = dataRegionRowOffset + i;
+          for (int j = 0; j < dataRegionSizeColumns; ++j) {
+            int readColumnOffset = dataRegionColumn * (dataRegionSizeColumns + 
2) + 1 + j;
+            if (bitMatrix->get(readColumnOffset, readRowOffset)) {
+              int writeColumnOffset = dataRegionColumnOffset + j;
+              bitMatrixWithoutAlignment->set(writeColumnOffset, 
writeRowOffset);
+            }
+          }
+        }
+      }
+    }
+    return bitMatrixWithoutAlignment;
+}
+
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixDataBlock.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixDataBlock.cpp
                              (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixDataBlock.cpp
      2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,113 @@
+/*
+ *  DataBlock.cpp
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/datamatrix/decoder/DataBlock.h>
+#include <zxing/common/IllegalArgumentException.h>
+
+namespace zxing {
+namespace datamatrix {
+
+using namespace std;
+
+DataBlock::DataBlock(int numDataCodewords, ArrayRef<unsigned char> codewords) :
+    numDataCodewords_(numDataCodewords), codewords_(codewords) {
+}
+
+int DataBlock::getNumDataCodewords() {
+  return numDataCodewords_;
+}
+
+ArrayRef<unsigned char> DataBlock::getCodewords() {
+  return codewords_;
+}
+
+std::vector<Ref<DataBlock> > DataBlock::getDataBlocks(ArrayRef<unsigned char> 
rawCodewords, Version *version) {
+  // Figure out the number and size of data blocks used by this version and
+  // error correction level
+  ECBlocks* ecBlocks = version->getECBlocks();
+
+  // First count the total number of data blocks
+  int totalBlocks = 0;
+  vector<ECB*> ecBlockArray = ecBlocks->getECBlocks();
+  for (size_t i = 0; i < ecBlockArray.size(); i++) {
+    totalBlocks += ecBlockArray[i]->getCount();
+  }
+
+  // Now establish DataBlocks of the appropriate size and number of data 
codewords
+  std::vector<Ref<DataBlock> > result(totalBlocks);
+  int numResultBlocks = 0;
+  for (size_t j = 0; j < ecBlockArray.size(); j++) {
+    ECB *ecBlock = ecBlockArray[j];
+    for (int i = 0; i < ecBlock->getCount(); i++) {
+      int numDataCodewords = ecBlock->getDataCodewords();
+      int numBlockCodewords = ecBlocks->getECCodewords() + numDataCodewords;
+      ArrayRef<unsigned char> buffer(numBlockCodewords);
+      Ref<DataBlock> blockRef(new DataBlock(numDataCodewords, buffer));
+      result[numResultBlocks++] = blockRef;
+    }
+  }
+
+  // All blocks have the same amount of data, except that the last n
+  // (where n may be 0) have 1 more byte. Figure out where these start.
+  int shorterBlocksTotalCodewords = result[0]->codewords_.size();
+  int longerBlocksStartAt = result.size() - 1;
+  while (longerBlocksStartAt >= 0) {
+    int numCodewords = result[longerBlocksStartAt]->codewords_.size();
+    if (numCodewords == shorterBlocksTotalCodewords) {
+      break;
+    }
+    if (numCodewords != shorterBlocksTotalCodewords + 1) {
+      throw IllegalArgumentException("Data block sizes differ by more than 1");
+    }
+    longerBlocksStartAt--;
+  }
+  longerBlocksStartAt++;
+
+  int shorterBlocksNumDataCodewords = shorterBlocksTotalCodewords - 
ecBlocks->getECCodewords();
+  // The last elements of result may be 1 element longer;
+  // first fill out as many elements as all of them have
+  int rawCodewordsOffset = 0;
+  for (int i = 0; i < shorterBlocksNumDataCodewords; i++) {
+    for (int j = 0; j < numResultBlocks; j++) {
+      result[j]->codewords_[i] = rawCodewords[rawCodewordsOffset++];
+    }
+  }
+  // Fill out the last data block in the longer ones
+  for (int j = longerBlocksStartAt; j < numResultBlocks; j++) {
+    result[j]->codewords_[shorterBlocksNumDataCodewords] = 
rawCodewords[rawCodewordsOffset++];
+  }
+  // Now add in error correction blocks
+  int max = result[0]->codewords_.size();
+  for (int i = shorterBlocksNumDataCodewords; i < max; i++) {
+    for (int j = 0; j < numResultBlocks; j++) {
+      int iOffset = j < longerBlocksStartAt ? i : i + 1;
+      result[j]->codewords_[iOffset] = rawCodewords[rawCodewordsOffset++];
+    }
+  }
+
+  if ((size_t)rawCodewordsOffset != rawCodewords.size()) {
+    throw IllegalArgumentException("rawCodewordsOffset != 
rawCodewords.length");
+  }
+
+  return result;
+}
+
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixDecodedBitStreamParser.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixDecodedBitStreamParser.cpp
                         (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixDecodedBitStreamParser.cpp
 2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,417 @@
+/*
+ *  DecodedBitStreamParser.cpp
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/FormatException.h>
+#include <zxing/datamatrix/decoder/DecodedBitStreamParser.h>
+#include <iostream>
+#include <zxing/common/DecoderResult.h>
+
+namespace zxing {
+namespace datamatrix {
+
+using namespace std;
+
+const char DecodedBitStreamParser::C40_BASIC_SET_CHARS[] = {
+    '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
+    'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
+};
+  
+const char DecodedBitStreamParser::C40_SHIFT2_SET_CHARS[] = {
+    '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.',
+    '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_'
+};
+  
+const char DecodedBitStreamParser::TEXT_BASIC_SET_CHARS[] = {
+    '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
+    'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
+};
+  
+const char DecodedBitStreamParser::TEXT_SHIFT3_SET_CHARS[] = {
+    '\'', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
+    'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', 
'~', (char) 127
+};
+
+Ref<DecoderResult> DecodedBitStreamParser::decode(ArrayRef<unsigned char> 
bytes) {
+  Ref<BitSource> bits(new BitSource(bytes));
+  ostringstream result;
+  ostringstream resultTrailer;
+  vector<unsigned char> byteSegments;
+  int mode = ASCII_ENCODE;
+  do {
+    if (mode == ASCII_ENCODE) {
+      mode = decodeAsciiSegment(bits, result, resultTrailer);
+    } else {
+      switch (mode) {
+        case C40_ENCODE:
+          decodeC40Segment(bits, result);
+          break;
+        case TEXT_ENCODE:
+          decodeTextSegment(bits, result);
+          break;
+        case ANSIX12_ENCODE:
+          decodeAnsiX12Segment(bits, result);
+          break;
+        case EDIFACT_ENCODE:
+          decodeEdifactSegment(bits, result);
+          break;
+        case BASE256_ENCODE:
+          decodeBase256Segment(bits, result, byteSegments);
+          break;
+        default:
+          throw FormatException("Unsupported mode indicator");
+      }
+      mode = ASCII_ENCODE;
+    }
+  } while (mode != PAD_ENCODE && bits->available() > 0);
+
+  if (resultTrailer.str().size() > 0) {
+    result << resultTrailer.str();
+  }
+  ArrayRef<unsigned char> rawBytes(bytes);
+  Ref<String> text(new String(result.str()));
+  return Ref<DecoderResult>(new DecoderResult(rawBytes, text));
+}
+
+int DecodedBitStreamParser::decodeAsciiSegment(Ref<BitSource> bits, 
ostringstream & result,
+  ostringstream & resultTrailer) {
+  bool upperShift = false;
+  do {
+    int oneByte = bits->readBits(8);
+    if (oneByte == 0) {
+      throw FormatException("Not enough bits to decode");
+    } else if (oneByte <= 128) {  // ASCII data (ASCII value + 1)
+      oneByte = upperShift ? (oneByte + 128) : oneByte;
+      // upperShift = false;
+      result << (char) (oneByte - 1);
+      return ASCII_ENCODE;
+    } else if (oneByte == 129) {  // Pad
+      return PAD_ENCODE;
+    } else if (oneByte <= 229) {  // 2-digit data 00-99 (Numeric Value + 130)
+      int value = oneByte - 130;
+      if (value < 10) { // padd with '0' for single digit values
+        result << '0';
+      }
+      result << value;
+    } else if (oneByte == 230) {  // Latch to C40 encodation
+      return C40_ENCODE;
+    } else if (oneByte == 231) {  // Latch to Base 256 encodation
+      return BASE256_ENCODE;
+    } else if (oneByte == 232) {  // FNC1
+      result << ((char) 29); // translate as ASCII 29
+    } else if (oneByte == 233 || oneByte == 234) {
+      // Structured Append, Reader Programming
+      // Ignore these symbols for now
+      // throw FormatException.getInstance();
+    } else if (oneByte == 235) {  // Upper Shift (shift to Extended ASCII)
+      upperShift = true;
+    } else if (oneByte == 236) {  // 05 Macro
+        result << ("[)>RS05GS");
+        resultTrailer << ("RSEOT");
+    } else if (oneByte == 237) {  // 06 Macro
+      result << ("[)>RS06GS");
+      resultTrailer <<  ("RSEOT");
+    } else if (oneByte == 238) {  // Latch to ANSI X12 encodation
+      return ANSIX12_ENCODE;
+    } else if (oneByte == 239) {  // Latch to Text encodation
+      return TEXT_ENCODE;
+    } else if (oneByte == 240) {  // Latch to EDIFACT encodation
+      return EDIFACT_ENCODE;
+    } else if (oneByte == 241) {  // ECI Character
+      // TODO(bbrown): I think we need to support ECI
+      // throw FormatException.getInstance();
+      // Ignore this symbol for now
+    } else if (oneByte >= 242) { // Not to be used in ASCII encodation
+      // ... but work around encoders that end with 254, latch back to ASCII
+      if (oneByte == 254 && bits->available() == 0) {
+        // Ignore
+      } else {
+        throw FormatException("Not to be used in ASCII encodation");
+      }
+    }
+  } while (bits->available() > 0);
+  return ASCII_ENCODE;
+}
+
+void DecodedBitStreamParser::decodeC40Segment(Ref<BitSource> bits, 
ostringstream & result) {
+  // Three C40 values are encoded in a 16-bit value as
+  // (1600 * C1) + (40 * C2) + C3 + 1
+  // TODO(bbrown): The Upper Shift with C40 doesn't work in the 4 value 
scenario all the time
+  bool upperShift = false;
+
+  int* cValues = new int[3];
+  int shift = 0;
+  do {
+    // If there is only one byte left then it will be encoded as ASCII
+    if (bits->available() == 8) {
+      return;
+    }
+    int firstByte = bits->readBits(8);
+    if (firstByte == 254) {  // Unlatch codeword
+      return;
+    }
+
+    parseTwoBytes(firstByte, bits->readBits(8), cValues);
+
+    for (int i = 0; i < 3; i++) {
+      int cValue = cValues[i];
+      switch (shift) {
+        case 0:
+          if (cValue < 3) {
+            shift = cValue + 1;
+          } else {
+            if (upperShift) {
+              result << (char) (C40_BASIC_SET_CHARS[cValue] + 128);
+              upperShift = false;
+            } else {
+              result << C40_BASIC_SET_CHARS[cValue];
+            }
+          }
+          break;
+        case 1:
+          if (upperShift) {
+            result << (char) (cValue + 128);
+            upperShift = false;
+          } else {
+            result << (char) cValue;
+          }
+          shift = 0;
+          break;
+        case 2:
+          if (cValue < 27) {
+            if (upperShift) {
+              result << (char) (C40_SHIFT2_SET_CHARS[cValue] + 128);
+              upperShift = false;
+            } else {
+              result << C40_SHIFT2_SET_CHARS[cValue];
+            }
+          } else if (cValue == 27) {  // FNC1
+            result << ((char) 29); // translate as ASCII 29
+          } else if (cValue == 30) {  // Upper Shift
+            upperShift = true;
+          } else {
+            throw FormatException("decodeC40Segment: Upper Shift");
+          }
+          shift = 0;
+          break;
+        case 3:
+          if (upperShift) {
+            result << (char) (cValue + 224);
+            upperShift = false;
+          } else {
+            result << (char) (cValue + 96);
+          }
+          shift = 0;
+          break;
+        default:
+          throw FormatException("decodeC40Segment: no case");
+      }
+    }
+  } while (bits->available() > 0);
+}
+
+void DecodedBitStreamParser::decodeTextSegment(Ref<BitSource> bits, 
ostringstream & result) {
+  // Three Text values are encoded in a 16-bit value as
+  // (1600 * C1) + (40 * C2) + C3 + 1
+  // TODO(bbrown): The Upper Shift with Text doesn't work in the 4 value 
scenario all the time
+  bool upperShift = false;
+
+  int* cValues = new int[3];
+  int shift = 0;
+  do {
+    // If there is only one byte left then it will be encoded as ASCII
+    if (bits->available() == 8) {
+      return;
+    }
+    int firstByte = bits->readBits(8);
+    if (firstByte == 254) {  // Unlatch codeword
+      return;
+    }
+
+    parseTwoBytes(firstByte, bits->readBits(8), cValues);
+
+    for (int i = 0; i < 3; i++) {
+      int cValue = cValues[i];
+      switch (shift) {
+        case 0:
+          if (cValue < 3) {
+            shift = cValue + 1;
+          } else {
+            if (upperShift) {
+              result << (char) (TEXT_BASIC_SET_CHARS[cValue] + 128);
+              upperShift = false;
+            } else {
+              result << (TEXT_BASIC_SET_CHARS[cValue]);
+            }
+          }
+          break;
+        case 1:
+          if (upperShift) {
+            result << (char) (cValue + 128);
+            upperShift = false;
+          } else {
+            result << (char) (cValue);
+          }
+          shift = 0;
+          break;
+        case 2:
+          // Shift 2 for Text is the same encoding as C40
+          if (cValue < 27) {
+            if (upperShift) {
+              result << (char) (C40_SHIFT2_SET_CHARS[cValue] + 128);
+              upperShift = false;
+            } else {
+              result << (C40_SHIFT2_SET_CHARS[cValue]);
+            }
+          } else if (cValue == 27) {  // FNC1
+            result << ((char) 29); // translate as ASCII 29
+          } else if (cValue == 30) {  // Upper Shift
+            upperShift = true;
+          } else {
+            throw FormatException("decodeTextSegment: Upper Shift");
+          }
+          shift = 0;
+          break;
+        case 3:
+          if (upperShift) {
+            result << (char) (TEXT_SHIFT3_SET_CHARS[cValue] + 128);
+            upperShift = false;
+          } else {
+            result << (TEXT_SHIFT3_SET_CHARS[cValue]);
+          }
+          shift = 0;
+          break;
+        default:
+          throw FormatException("decodeTextSegment: no case");
+      }
+    }
+  } while (bits->available() > 0);
+}
+
+void DecodedBitStreamParser::decodeAnsiX12Segment(Ref<BitSource> bits, 
ostringstream & result) {
+  // Three ANSI X12 values are encoded in a 16-bit value as
+  // (1600 * C1) + (40 * C2) + C3 + 1
+
+  int* cValues = new int[3];
+  do {
+    // If there is only one byte left then it will be encoded as ASCII
+    if (bits->available() == 8) {
+      return;
+    }
+    int firstByte = bits->readBits(8);
+    if (firstByte == 254) {  // Unlatch codeword
+      return;
+    }
+
+    parseTwoBytes(firstByte, bits->readBits(8), cValues);
+
+    for (int i = 0; i < 3; i++) {
+      int cValue = cValues[i];
+      if (cValue == 0) {  // X12 segment terminator <CR>
+        result << '\r';
+      } else if (cValue == 1) {  // X12 segment separator *
+        result << '*';
+      } else if (cValue == 2) {  // X12 sub-element separator >
+        result << '>';
+      } else if (cValue == 3) {  // space
+        result << ' ';
+      } else if (cValue < 14) {  // 0 - 9
+        result << (char) (cValue + 44);
+      } else if (cValue < 40) {  // A - Z
+        result << (char) (cValue + 51);
+      } else {
+        throw FormatException("decodeAnsiX12Segment: no case");
+      }
+    }
+  } while (bits->available() > 0);
+}
+
+void DecodedBitStreamParser::parseTwoBytes(int firstByte, int secondByte, 
int*& result) {
+  int fullBitValue = (firstByte << 8) + secondByte - 1;
+  int temp = fullBitValue / 1600;
+  result[0] = temp;
+  fullBitValue -= temp * 1600;
+  temp = fullBitValue / 40;
+  result[1] = temp;
+  result[2] = fullBitValue - temp * 40;
+}
+  
+void DecodedBitStreamParser::decodeEdifactSegment(Ref<BitSource> bits, 
ostringstream & result) {
+  bool unlatch = false;
+  do {
+    // If there is only two or less bytes left then it will be encoded as ASCII
+    if (bits->available() <= 16) {
+      return;
+    }
+
+    for (int i = 0; i < 4; i++) {
+      int edifactValue = bits->readBits(6);
+
+      // Check for the unlatch character
+      if (edifactValue == 0x2B67) {  // 011111
+        unlatch = true;
+        // If we encounter the unlatch code then continue reading because the 
Codeword triple
+        // is padded with 0's
+      }
+
+      if (!unlatch) {
+        if ((edifactValue & 0x20) == 0) {  // no 1 in the leading (6th) bit
+          edifactValue |= 0x40;  // Add a leading 01 to the 6 bit binary value
+        }
+        result << (char)(edifactValue);
+      }
+    }
+  } while (!unlatch && bits->available() > 0);
+}
+  
+void DecodedBitStreamParser::decodeBase256Segment(Ref<BitSource> bits, 
ostringstream& result, vector<unsigned char> byteSegments) {
+  // Figure out how long the Base 256 Segment is.
+  int codewordPosition = 1 + bits->getByteOffset(); // position is 1-indexed
+  int d1 = unrandomize255State(bits->readBits(8), codewordPosition++);
+  int count;
+  if (d1 == 0) {  // Read the remainder of the symbol
+    count = bits->available() / 8;
+  } else if (d1 < 250) {
+    count = d1;
+  } else {
+    count = 250 * (d1 - 249) + unrandomize255State(bits->readBits(8), 
codewordPosition++);
+  }
+
+  // We're seeing NegativeArraySizeException errors from users.
+  if (count < 0) {
+    throw FormatException("NegativeArraySizeException");
+  }
+
+  unsigned char* bytes = new unsigned char[count];
+  for (int i = 0; i < count; i++) {
+    // Have seen this particular error in the wild, such as at
+    // 
http://www.bcgen.com/demo/IDAutomationStreamingDataMatrix.aspx?MODE=3&D=Fred&PFMT=3&PT=F&X=0.3&O=0&LM=0.2
+    if (bits->available() < 8) {
+      throw FormatException("byteSegments");
+    }
+    bytes[i] = unrandomize255State(bits->readBits(8), codewordPosition++);
+    byteSegments.push_back(bytes[i]);
+    result << (char)bytes[i];
+  }
+}
+}
+}
+

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixDecoder.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixDecoder.cpp
                                (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DataMatrixDecoder.cpp
        2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,94 @@
+/*
+ *  Decoder.cpp
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/datamatrix/decoder/Decoder.h>
+#include <zxing/datamatrix/decoder/BitMatrixParser.h>
+#include <zxing/datamatrix/decoder/DataBlock.h>
+#include <zxing/datamatrix/decoder/DecodedBitStreamParser.h>
+#include <zxing/datamatrix/Version.h>
+#include <zxing/ReaderException.h>
+#include <zxing/common/reedsolomon/ReedSolomonException.h>
+
+namespace zxing {
+namespace datamatrix {
+
+using namespace std;
+
+Decoder::Decoder() :
+    rsDecoder_(GenericGF::DATA_MATRIX_FIELD_256) {
+}
+
+
+void Decoder::correctErrors(ArrayRef<unsigned char> codewordBytes, int 
numDataCodewords) {
+  int numCodewords = codewordBytes->size();
+  ArrayRef<int> codewordInts(numCodewords);
+  for (int i = 0; i < numCodewords; i++) {
+    codewordInts[i] = codewordBytes[i] & 0xff;
+  }
+  int numECCodewords = numCodewords - numDataCodewords;
+  try {
+    rsDecoder_.decode(codewordInts, numECCodewords);
+  } catch (ReedSolomonException const& ex) {
+    ReaderException rex(ex.what());
+    throw rex;
+  }
+  // Copy back into array of bytes -- only need to worry about the bytes that 
were data
+  // We don't care about errors in the error-correction codewords
+  for (int i = 0; i < numDataCodewords; i++) {
+    codewordBytes[i] = (unsigned char)codewordInts[i];
+  }
+}
+
+Ref<DecoderResult> Decoder::decode(Ref<BitMatrix> bits) {
+  // Construct a parser and read version, error-correction level
+  BitMatrixParser parser(bits);
+  Version *version = parser.readVersion(bits);
+
+  // Read codewords
+  ArrayRef<unsigned char> codewords(parser.readCodewords());
+  // Separate into data blocks
+  std::vector<Ref<DataBlock> > dataBlocks = 
DataBlock::getDataBlocks(codewords, version);
+
+  int dataBlocksCount = dataBlocks.size();
+
+  // Count total number of data bytes
+  int totalBytes = 0;
+  for (int i = 0; i < dataBlocksCount; i++) {
+    totalBytes += dataBlocks[i]->getNumDataCodewords();
+  }
+  ArrayRef<unsigned char> resultBytes(totalBytes);
+
+  // Error-correct and copy data blocks together into a stream of bytes
+  for (int j = 0; j < dataBlocksCount; j++) {
+    Ref<DataBlock> dataBlock(dataBlocks[j]);
+    ArrayRef<unsigned char> codewordBytes = dataBlock->getCodewords();
+    int numDataCodewords = dataBlock->getNumDataCodewords();
+    correctErrors(codewordBytes, numDataCodewords);
+    for (int i = 0; i < numDataCodewords; i++) {
+      // De-interlace data blocks.
+      resultBytes[i * dataBlocksCount + j] = codewordBytes[i];
+    }
+  }
+  // Decode the contents of that stream of bytes
+  DecodedBitStreamParser decodedBSParser;
+  return Ref<DecoderResult> (decodedBSParser.decode(resultBytes));
+}
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DecodedBitStreamParser.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DecodedBitStreamParser.h
                             (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/DecodedBitStreamParser.h
     2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,104 @@
+#ifndef __DECODED_BIT_STREAM_PARSER_DM_H__
+#define __DECODED_BIT_STREAM_PARSER_DM_H__
+
+/*
+ *  DecodedBitStreamParser.h
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string>
+#include <sstream>
+#include <zxing/common/Array.h>
+#include <zxing/common/BitSource.h>
+#include <zxing/common/Counted.h>
+#include <zxing/common/DecoderResult.h>
+
+
+namespace zxing {
+namespace datamatrix {
+
+class DecodedBitStreamParser {
+private:
+  static const int PAD_ENCODE = 0;  // Not really an encoding
+  static const int ASCII_ENCODE = 1;
+  static const int C40_ENCODE = 2;
+  static const int TEXT_ENCODE = 3;
+  static const int ANSIX12_ENCODE = 4;
+  static const int EDIFACT_ENCODE = 5;
+  static const int BASE256_ENCODE = 6;
+    
+  /**
+   * See ISO 16022:2006, Annex C Table C.1
+   * The C40 Basic Character Set (*'s used for placeholders for the shift 
values)
+   */
+  static const char C40_BASIC_SET_CHARS[];
+  
+  static const char C40_SHIFT2_SET_CHARS[];  
+  /**
+   * See ISO 16022:2006, Annex C Table C.2
+   * The Text Basic Character Set (*'s used for placeholders for the shift 
values)
+   */
+  static const char TEXT_BASIC_SET_CHARS[];
+  
+  static const char TEXT_SHIFT3_SET_CHARS[];  
+  /**
+   * See ISO 16022:2006, 5.2.3 and Annex C, Table C.2
+   */
+  int decodeAsciiSegment(Ref<BitSource> bits, std::ostringstream &result, 
std::ostringstream &resultTrailer);
+  /**
+   * See ISO 16022:2006, 5.2.5 and Annex C, Table C.1
+   */
+  void decodeC40Segment(Ref<BitSource> bits, std::ostringstream &result);
+  /**
+   * See ISO 16022:2006, 5.2.6 and Annex C, Table C.2
+   */
+  void decodeTextSegment(Ref<BitSource> bits, std::ostringstream &result);
+  /**
+   * See ISO 16022:2006, 5.2.7
+   */
+  void decodeAnsiX12Segment(Ref<BitSource> bits, std::ostringstream &result);
+  /**
+   * See ISO 16022:2006, 5.2.8 and Annex C Table C.3
+   */
+  void decodeEdifactSegment(Ref<BitSource> bits, std::ostringstream &result);
+  /**
+   * See ISO 16022:2006, 5.2.9 and Annex B, B.2
+   */
+  void decodeBase256Segment(Ref<BitSource> bits, std::ostringstream &result, 
std::vector<unsigned char> byteSegments);
+
+  void parseTwoBytes(int firstByte, int secondByte, int*& result);
+  /**
+   * See ISO 16022:2006, Annex B, B.2
+   */
+  unsigned char unrandomize255State(int randomizedBase256Codeword,
+                                          int base256CodewordPosition) {
+    int pseudoRandomNumber = ((149 * base256CodewordPosition) % 255) + 1;
+    int tempVariable = randomizedBase256Codeword - pseudoRandomNumber;
+    return (unsigned char) (tempVariable >= 0 ? tempVariable : (tempVariable + 
256));
+  };
+  void append(std::ostream &ost, const unsigned char *bufIn, size_t nIn, const 
char *src);
+
+public:
+  DecodedBitStreamParser() { };
+  Ref<DecoderResult> decode(ArrayRef<unsigned char> bytes);
+};
+
+}
+}
+
+#endif // __DECODED_BIT_STREAM_PARSER_DM_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/Decoder.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/Decoder.h    
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/decoder/Decoder.h    
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,49 @@
+#ifndef __DECODER_DM_H__
+#define __DECODER_DM_H__
+
+/*
+ *  Decoder.h
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/reedsolomon/ReedSolomonDecoder.h>
+#include <zxing/common/Counted.h>
+#include <zxing/common/Array.h>
+#include <zxing/common/DecoderResult.h>
+#include <zxing/common/BitMatrix.h>
+
+
+namespace zxing {
+namespace datamatrix {
+
+class Decoder {
+private:
+  ReedSolomonDecoder rsDecoder_;
+
+  void correctErrors(ArrayRef<unsigned char> bytes, int numDataCodewords);
+
+public:
+  Decoder();
+
+  Ref<DecoderResult> decode(Ref<BitMatrix> bits);
+};
+
+}
+}
+
+#endif // __DECODER_DM_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/CornerPoint.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/CornerPoint.h   
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/CornerPoint.h   
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,43 @@
+#ifndef __CORNER_FINDER_H__
+#define __CORNER_FINDER_H__
+
+/*
+ *  CornerPoint.h
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/ResultPoint.h>
+#include <cmath>
+
+namespace zxing {
+       namespace datamatrix {
+                       
+               class CornerPoint : public ResultPoint {
+               private:
+                       int counter_;
+                       
+               public:
+                       CornerPoint(float posX, float posY);
+                       int getCount() const;
+                       void incrementCount();
+                       bool equals(Ref<CornerPoint> other) const;
+               };
+       }
+}
+
+#endif // __CORNER_FINDER_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixCornerPoint.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixCornerPoint.cpp
                           (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixCornerPoint.cpp
   2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,46 @@
+/*
+ *  CornerPoint.cpp
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/datamatrix/detector/CornerPoint.h>
+
+
+namespace zxing {
+       namespace datamatrix {
+               
+               using namespace std;
+               
+               CornerPoint::CornerPoint(float posX, float posY) :
+                 ResultPoint(posX,posY), counter_(0) {
+               }
+               
+               int CornerPoint::getCount() const {
+                       return counter_;
+               }
+                               
+               void CornerPoint::incrementCount() {
+                       counter_++;
+               }
+               
+               bool CornerPoint::equals(Ref<CornerPoint> other) const {
+                       return posX_ == other->getX() && posY_ == other->getY();
+               }
+               
+       }
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixDetector.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixDetector.cpp
                              (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixDetector.cpp
      2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,434 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Detector.cpp
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/ResultPoint.h>
+#include <zxing/common/GridSampler.h>
+#include <zxing/datamatrix/detector/Detector.h>
+#include <cmath>
+#include <sstream>
+#include <cstdlib>
+
+namespace zxing {
+namespace datamatrix {
+
+using namespace std;
+
+ResultPointsAndTransitions::ResultPointsAndTransitions() {
+  Ref<ResultPoint> ref(new ResultPoint(0, 0));
+  from_ = ref;
+  to_ = ref;
+  transitions_ = 0;
+}
+
+ResultPointsAndTransitions::ResultPointsAndTransitions(Ref<ResultPoint> from, 
Ref<ResultPoint> to,
+    int transitions)
+    : to_(to), from_(from), transitions_(transitions) {
+}
+
+Ref<ResultPoint> ResultPointsAndTransitions::getFrom() {
+  return from_;
+}
+
+Ref<ResultPoint> ResultPointsAndTransitions::getTo() {
+  return to_;
+}
+
+int ResultPointsAndTransitions::getTransitions() {
+  return transitions_;
+}
+
+Detector::Detector(Ref<BitMatrix> image)
+    : image_(image) {
+}
+
+Ref<BitMatrix> Detector::getImage() {
+  return image_;
+}
+
+Ref<DetectorResult> Detector::detect() {
+  Ref<WhiteRectangleDetector> rectangleDetector_(new 
WhiteRectangleDetector(image_));
+  std::vector<Ref<ResultPoint> > ResultPoints = rectangleDetector_->detect();
+  Ref<ResultPoint> pointA = ResultPoints[0];
+  Ref<ResultPoint> pointB = ResultPoints[1];
+  Ref<ResultPoint> pointC = ResultPoints[2];
+  Ref<ResultPoint> pointD = ResultPoints[3];
+
+  // Point A and D are across the diagonal from one another,
+  // as are B and C. Figure out which are the solid black lines
+  // by counting transitions
+  std::vector<Ref<ResultPointsAndTransitions> > transitions(4);
+  transitions[0].reset(transitionsBetween(pointA, pointB));
+  transitions[1].reset(transitionsBetween(pointA, pointC));
+  transitions[2].reset(transitionsBetween(pointB, pointD));
+  transitions[3].reset(transitionsBetween(pointC, pointD));
+  insertionSort(transitions);
+
+  // Sort by number of transitions. First two will be the two solid sides; 
last two
+  // will be the two alternating black/white sides
+  Ref<ResultPointsAndTransitions> lSideOne(transitions[0]);
+  Ref<ResultPointsAndTransitions> lSideTwo(transitions[1]);
+
+  // Figure out which point is their intersection by tallying up the number of 
times we see the
+  // endpoints in the four endpoints. One will show up twice.
+  Ref<ResultPoint> maybeTopLeft;
+  Ref<ResultPoint> bottomLeft;
+  Ref<ResultPoint> maybeBottomRight;
+  if (lSideOne->getFrom()->equals(lSideOne->getTo())) {
+    bottomLeft = lSideOne->getFrom();
+    maybeTopLeft = lSideTwo->getFrom();
+    maybeBottomRight = lSideTwo->getTo();
+  } else if (lSideOne->getFrom()->equals(lSideTwo->getFrom())) {
+    bottomLeft = lSideOne->getFrom();
+    maybeTopLeft = lSideOne->getTo();
+    maybeBottomRight = lSideTwo->getTo();
+  } else if (lSideOne->getFrom()->equals(lSideTwo->getTo())) {
+    bottomLeft = lSideOne->getFrom();
+    maybeTopLeft = lSideOne->getTo();
+    maybeBottomRight = lSideTwo->getFrom();
+  } else if (lSideOne->getTo()->equals(lSideTwo->getFrom())) {
+    bottomLeft = lSideOne->getTo();
+    maybeTopLeft = lSideOne->getFrom();
+    maybeBottomRight = lSideTwo->getTo();
+  } else if (lSideOne->getTo()->equals(lSideTwo->getTo())) {
+    bottomLeft = lSideOne->getTo();
+    maybeTopLeft = lSideOne->getFrom();
+    maybeBottomRight = lSideTwo->getFrom();
+  } else {
+    bottomLeft = lSideTwo->getFrom();
+    maybeTopLeft = lSideOne->getTo();
+    maybeBottomRight = lSideOne->getFrom();
+  }
+
+  // Bottom left is correct but top left and bottom right might be switched
+  std::vector<Ref<ResultPoint> > corners(3);
+  corners[0].reset(maybeTopLeft);
+  corners[1].reset(bottomLeft);
+  corners[2].reset(maybeBottomRight);
+
+  // Use the dot product trick to sort them out
+  ResultPoint::orderBestPatterns(corners);
+
+  // Now we know which is which:
+  Ref<ResultPoint> bottomRight(corners[0]);
+  bottomLeft = corners[1];
+  Ref<ResultPoint> topLeft(corners[2]);
+
+  // Which point didn't we find in relation to the "L" sides? that's the top 
right corner
+  Ref<ResultPoint> topRight;
+  if (!(pointA->equals(bottomRight) || pointA->equals(bottomLeft) || 
pointA->equals(topLeft))) {
+    topRight = pointA;
+  } else if (!(pointB->equals(bottomRight) || pointB->equals(bottomLeft)
+      || pointB->equals(topLeft))) {
+    topRight = pointB;
+  } else if (!(pointC->equals(bottomRight) || pointC->equals(bottomLeft)
+      || pointC->equals(topLeft))) {
+    topRight = pointC;
+  } else {
+    topRight = pointD;
+  }
+
+  // Next determine the dimension by tracing along the top or right side and 
counting black/white
+  // transitions. Since we start inside a black module, we should see a number 
of transitions
+  // equal to 1 less than the code dimension. Well, actually 2 less, because 
we are going to
+  // end on a black module:
+
+  // The top right point is actually the corner of a module, which is one of 
the two black modules
+  // adjacent to the white module at the top right. Tracing to that corner 
from either the top left
+  // or bottom right should work here.
+
+  int dimensionTop = transitionsBetween(topLeft, topRight)->getTransitions();
+  int dimensionRight = transitionsBetween(bottomRight, 
topRight)->getTransitions();
+
+  //dimensionTop++;
+  if ((dimensionTop & 0x01) == 1) {
+    // it can't be odd, so, round... up?
+    dimensionTop++;
+  }
+  dimensionTop += 2;
+
+  //dimensionRight++;
+  if ((dimensionRight & 0x01) == 1) {
+    // it can't be odd, so, round... up?
+    dimensionRight++;
+  }
+  dimensionRight += 2;
+
+  Ref<BitMatrix> bits;
+  Ref<PerspectiveTransform> transform;
+  Ref<ResultPoint> correctedTopRight;
+
+
+  // Rectanguar symbols are 6x16, 6x28, 10x24, 10x32, 14x32, or 14x44. If one 
dimension is more
+  // than twice the other, it's certainly rectangular, but to cut a bit more 
slack we accept it as
+  // rectangular if the bigger side is at least 7/4 times the other:
+  if (4 * dimensionTop >= 7 * dimensionRight || 4 * dimensionRight >= 7 * 
dimensionTop) {
+    // The matrix is rectangular
+    correctedTopRight = correctTopRightRectangular(bottomLeft, bottomRight, 
topLeft, topRight,
+        dimensionTop, dimensionRight);
+    if (correctedTopRight == NULL) {
+      correctedTopRight = topRight;
+    }
+
+    dimensionTop = transitionsBetween(topLeft, 
correctedTopRight)->getTransitions();
+    dimensionRight = transitionsBetween(bottomRight, 
correctedTopRight)->getTransitions();
+
+    if ((dimensionTop & 0x01) == 1) {
+      // it can't be odd, so, round... up?
+      dimensionTop++;
+    }
+
+    if ((dimensionRight & 0x01) == 1) {
+      // it can't be odd, so, round... up?
+      dimensionRight++;
+    }
+
+    transform = createTransform(topLeft, correctedTopRight, bottomLeft, 
bottomRight, dimensionTop,
+        dimensionRight);
+    bits = sampleGrid(image_, dimensionTop, dimensionRight, transform);
+
+  } else {
+    // The matrix is square
+    int dimension = min(dimensionRight, dimensionTop);
+
+    // correct top right point to match the white module
+    correctedTopRight = correctTopRight(bottomLeft, bottomRight, topLeft, 
topRight, dimension);
+    if (correctedTopRight == NULL) {
+      correctedTopRight = topRight;
+    }
+
+    // Redetermine the dimension using the corrected top right point
+    int dimensionCorrected = max(transitionsBetween(topLeft, 
correctedTopRight)->getTransitions(),
+        transitionsBetween(bottomRight, correctedTopRight)->getTransitions());
+    dimensionCorrected++;
+    if ((dimensionCorrected & 0x01) == 1) {
+      dimensionCorrected++;
+    }
+
+    transform = createTransform(topLeft, correctedTopRight, bottomLeft, 
bottomRight,
+        dimensionCorrected, dimensionCorrected);
+    bits = sampleGrid(image_, dimensionCorrected, dimensionCorrected, 
transform);
+  }
+
+  std::vector<Ref<ResultPoint> > points(4);
+  points[0].reset(topLeft);
+  points[1].reset(bottomLeft);
+  points[2].reset(correctedTopRight);
+  points[3].reset(bottomRight);
+  Ref<DetectorResult> detectorResult(new DetectorResult(bits, points));
+  return detectorResult;
+}
+
+/**
+ * Calculates the position of the white top right module using the output of 
the rectangle detector
+ * for a rectangular matrix
+ */
+Ref<ResultPoint> Detector::correctTopRightRectangular(Ref<ResultPoint> 
bottomLeft,
+    Ref<ResultPoint> bottomRight, Ref<ResultPoint> topLeft, Ref<ResultPoint> 
topRight,
+    int dimensionTop, int dimensionRight) {
+
+  float corr = distance(bottomLeft, bottomRight) / (float) dimensionTop;
+  int norm = distance(topLeft, topRight);
+  float cos = (topRight->getX() - topLeft->getX()) / norm;
+  float sin = (topRight->getY() - topLeft->getY()) / norm;
+
+  Ref<ResultPoint> c1(
+      new ResultPoint(topRight->getX() + corr * cos, topRight->getY() + corr * 
sin));
+
+  corr = distance(bottomLeft, topLeft) / (float) dimensionRight;
+  norm = distance(bottomRight, topRight);
+  cos = (topRight->getX() - bottomRight->getX()) / norm;
+  sin = (topRight->getY() - bottomRight->getY()) / norm;
+
+  Ref<ResultPoint> c2(
+      new ResultPoint(topRight->getX() + corr * cos, topRight->getY() + corr * 
sin));
+
+  if (!isValid(c1)) {
+    if (isValid(c2)) {
+      return c2;
+    }
+    return Ref<ResultPoint>(NULL);
+  }
+  if (!isValid(c2)) {
+    return c1;
+  }
+
+  int l1 = abs(dimensionTop - transitionsBetween(topLeft, 
c1)->getTransitions())
+      + abs(dimensionRight - transitionsBetween(bottomRight, 
c1)->getTransitions());
+  int l2 = abs(dimensionTop - transitionsBetween(topLeft, 
c2)->getTransitions())
+      + abs(dimensionRight - transitionsBetween(bottomRight, 
c2)->getTransitions());
+
+  return l1 <= l2 ? c1 : c2;
+}
+
+/**
+ * Calculates the position of the white top right module using the output of 
the rectangle detector
+ * for a square matrix
+ */
+Ref<ResultPoint> Detector::correctTopRight(Ref<ResultPoint> bottomLeft,
+    Ref<ResultPoint> bottomRight, Ref<ResultPoint> topLeft, Ref<ResultPoint> 
topRight,
+    int dimension) {
+
+  float corr = distance(bottomLeft, bottomRight) / (float) dimension;
+  int norm = distance(topLeft, topRight);
+  float cos = (topRight->getX() - topLeft->getX()) / norm;
+  float sin = (topRight->getY() - topLeft->getY()) / norm;
+
+  Ref<ResultPoint> c1(
+      new ResultPoint(topRight->getX() + corr * cos, topRight->getY() + corr * 
sin));
+
+  corr = distance(bottomLeft, bottomRight) / (float) dimension;
+  norm = distance(bottomRight, topRight);
+  cos = (topRight->getX() - bottomRight->getX()) / norm;
+  sin = (topRight->getY() - bottomRight->getY()) / norm;
+
+  Ref<ResultPoint> c2(
+      new ResultPoint(topRight->getX() + corr * cos, topRight->getY() + corr * 
sin));
+
+  if (!isValid(c1)) {
+    if (isValid(c2)) {
+      return c2;
+    }
+    return Ref<ResultPoint>(NULL);
+  }
+  if (!isValid(c2)) {
+    return c1;
+  }
+
+  int l1 = abs(
+      transitionsBetween(topLeft, c1)->getTransitions()
+          - transitionsBetween(bottomRight, c1)->getTransitions());
+  int l2 = abs(
+      transitionsBetween(topLeft, c2)->getTransitions()
+          - transitionsBetween(bottomRight, c2)->getTransitions());
+
+  return l1 <= l2 ? c1 : c2;
+}
+
+bool Detector::isValid(Ref<ResultPoint> p) {
+  return p->getX() >= 0 && p->getX() < image_->getWidth() && p->getY() > 0
+      && p->getY() < image_->getHeight();
+}
+
+// L2 distance
+int Detector::distance(Ref<ResultPoint> a, Ref<ResultPoint> b) {
+  return round(
+      (float) sqrt(
+          (double) (a->getX() - b->getX()) * (a->getX() - b->getX())
+              + (a->getY() - b->getY()) * (a->getY() - b->getY())));
+}
+
+Ref<ResultPointsAndTransitions> Detector::transitionsBetween(Ref<ResultPoint> 
from,
+    Ref<ResultPoint> to) {
+  // See QR Code Detector, sizeOfBlackWhiteBlackRun()
+  int fromX = (int) from->getX();
+  int fromY = (int) from->getY();
+  int toX = (int) to->getX();
+  int toY = (int) to->getY();
+  bool steep = abs(toY - fromY) > abs(toX - fromX);
+  if (steep) {
+    int temp = fromX;
+    fromX = fromY;
+    fromY = temp;
+    temp = toX;
+    toX = toY;
+    toY = temp;
+  }
+
+  int dx = abs(toX - fromX);
+  int dy = abs(toY - fromY);
+  int error = -dx >> 1;
+  int ystep = fromY < toY ? 1 : -1;
+  int xstep = fromX < toX ? 1 : -1;
+  int transitions = 0;
+  bool inBlack = image_->get(steep ? fromY : fromX, steep ? fromX : fromY);
+  for (int x = fromX, y = fromY; x != toX; x += xstep) {
+    bool isBlack = image_->get(steep ? y : x, steep ? x : y);
+    if (isBlack != inBlack) {
+      transitions++;
+      inBlack = isBlack;
+    }
+    error += dy;
+    if (error > 0) {
+      if (y == toY) {
+        break;
+      }
+      y += ystep;
+      error -= dx;
+    }
+  }
+  Ref<ResultPointsAndTransitions> result(new ResultPointsAndTransitions(from, 
to, transitions));
+  return result;
+}
+
+Ref<PerspectiveTransform> Detector::createTransform(Ref<ResultPoint> topLeft,
+    Ref<ResultPoint> topRight, Ref<ResultPoint> bottomLeft, Ref<ResultPoint> 
bottomRight,
+    int dimensionX, int dimensionY) {
+
+  Ref<PerspectiveTransform> transform(
+      PerspectiveTransform::quadrilateralToQuadrilateral(
+          0.5f,
+          0.5f,
+          dimensionX - 0.5f,
+          0.5f,
+          dimensionX - 0.5f,
+          dimensionY - 0.5f,
+          0.5f,
+          dimensionY - 0.5f,
+          topLeft->getX(),
+          topLeft->getY(),
+          topRight->getX(),
+          topRight->getY(),
+          bottomRight->getX(),
+          bottomRight->getY(),
+          bottomLeft->getX(),
+          bottomLeft->getY()));
+  return transform;
+}
+
+Ref<BitMatrix> Detector::sampleGrid(Ref<BitMatrix> image, int dimensionX, int 
dimensionY,
+    Ref<PerspectiveTransform> transform) {
+  GridSampler &sampler = GridSampler::getInstance();
+  return sampler.sampleGrid(image, dimensionX, dimensionY, transform);
+}
+
+void Detector::insertionSort(std::vector<Ref<ResultPointsAndTransitions> > 
&vector) {
+  int max = vector.size();
+  bool swapped = true;
+  Ref<ResultPointsAndTransitions> value;
+  Ref<ResultPointsAndTransitions> valueB;
+  do {
+    swapped = false;
+    for (int i = 1; i < max; i++) {
+      value = vector[i - 1];
+      if (compare(value, (valueB = vector[i])) > 0){
+        swapped = true;
+        vector[i - 1].reset(valueB);
+        vector[i].reset(value);
+      }
+    }
+  } while (swapped);
+}
+
+int Detector::compare(Ref<ResultPointsAndTransitions> a, 
Ref<ResultPointsAndTransitions> b) {
+  return a->getTransitions() - b->getTransitions();
+}
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixDetectorException.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixDetectorException.cpp
                             (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixDetectorException.cpp
     2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,23 @@
+/*
+ * DetectorException.cpp
+ *
+ *  Created on: Aug 26, 2011
+ *      Author: luiz
+ */
+
+#include "DetectorException.h"
+
+namespace zxing {
+namespace datamatrix {
+
+DetectorException::DetectorException(const char *msg) :
+    Exception(msg) {
+
+}
+
+DetectorException::~DetectorException() throw () {
+  // TODO Auto-generated destructor stub
+}
+
+}
+} /* namespace zxing */

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixMonochromeRectangleDetector.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixMonochromeRectangleDetector.cpp
                           (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DataMatrixMonochromeRectangleDetector.cpp
   2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,172 @@
+/*
+ *  MonochromeRectangleDetector.cpp
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/ReaderException.h>
+#include <zxing/datamatrix/detector/MonochromeRectangleDetector.h>
+#include <sstream>
+
+namespace zxing {
+namespace datamatrix {
+
+std::vector<Ref<CornerPoint> > MonochromeRectangleDetector::detect() {
+    int height = image_->getHeight();
+    int width = image_->getWidth();
+    int halfHeight = height >> 1;
+    int halfWidth = width >> 1;
+    int deltaY = max(1, height / (MAX_MODULES << 3));
+    int deltaX = max(1, width / (MAX_MODULES << 3));
+
+    int top = 0;
+    int bottom = height;
+    int left = 0;
+    int right = width;
+    Ref<CornerPoint> pointA(findCornerFromCenter(halfWidth, 0, left, right,
+        halfHeight, -deltaY, top, bottom, halfWidth >> 1));
+    top = (int) pointA->getY() - 1;
+    Ref<CornerPoint> pointB(findCornerFromCenter(halfWidth, -deltaX, left, 
right,
+        halfHeight, 0, top, bottom, halfHeight >> 1));
+    left = (int) pointB->getX() - 1;
+    Ref<CornerPoint> pointC(findCornerFromCenter(halfWidth, deltaX, left, 
right,
+        halfHeight, 0, top, bottom, halfHeight >> 1));
+    right = (int) pointC->getX() + 1;
+    Ref<CornerPoint> pointD(findCornerFromCenter(halfWidth, 0, left, right,
+        halfHeight, deltaY, top, bottom, halfWidth >> 1));
+    bottom = (int) pointD->getY() + 1;
+
+    // Go try to find point A again with better information -- might have been 
off at first.
+    pointA.reset(findCornerFromCenter(halfWidth, 0, left, right,
+        halfHeight, -deltaY, top, bottom, halfWidth >> 2));
+         std::vector<Ref<CornerPoint> > corners(4);
+
+       corners[0].reset(pointA);
+       corners[1].reset(pointB);
+       corners[2].reset(pointC);
+       corners[3].reset(pointD);
+    return corners;
+  }
+
+Ref<CornerPoint> MonochromeRectangleDetector::findCornerFromCenter(int 
centerX, int deltaX, int left, int right,
+      int centerY, int deltaY, int top, int bottom, int maxWhiteRun) {    
+       Ref<TwoInts> lastRange(NULL);
+    for (int y = centerY, x = centerX;
+         y < bottom && y >= top && x < right && x >= left;
+         y += deltaY, x += deltaX) {
+    Ref<TwoInts> range(NULL);
+      if (deltaX == 0) {
+        // horizontal slices, up and down
+        range = blackWhiteRange(y, maxWhiteRun, left, right, true);
+      } else {
+        // vertical slices, left and right
+        range = blackWhiteRange(x, maxWhiteRun, top, bottom, false);
+      }
+      if (range == NULL) {
+        if (lastRange == NULL) {
+                           throw ReaderException("Couldn't find corners 
(lastRange = NULL) ");
+        } else {
+        // lastRange was found
+        if (deltaX == 0) {
+          int lastY = y - deltaY;
+          if (lastRange->start < centerX) {
+            if (lastRange->end > centerX) {
+              // straddle, choose one or the other based on direction
+                               Ref<CornerPoint> result(new CornerPoint(deltaY 
> 0 ? lastRange->start : lastRange->end, lastY));
+                               return result;
+            }
+                             Ref<CornerPoint> result(new 
CornerPoint(lastRange->start, lastY));
+                             return result;
+          } else {
+                             Ref<CornerPoint> result(new 
CornerPoint(lastRange->end, lastY));
+                             return result;
+            }
+        } else {
+          int lastX = x - deltaX;
+          if (lastRange->start < centerY) {
+            if (lastRange->end > centerY) {
+                               Ref<CornerPoint> result(new CornerPoint(lastX, 
deltaX < 0 ? lastRange->start : lastRange->end));
+                               return result;
+            }
+                             Ref<CornerPoint> result(new CornerPoint(lastX, 
lastRange->start));
+                             return result;
+          } else {
+                             Ref<CornerPoint> result(new CornerPoint(lastX, 
lastRange->end));
+                             return result;
+            }
+          }
+        }
+      }
+      lastRange = range;
+    }
+    throw ReaderException("Couldn't find corners");
+  }
+
+Ref<TwoInts> MonochromeRectangleDetector::blackWhiteRange(int fixedDimension, 
int maxWhiteRun, int minDim, int maxDim,
+      bool horizontal) {
+    
+         int center = (minDim + maxDim) >> 1;
+
+    // Scan left/up first
+    int start = center;
+    while (start >= minDim) {
+      if (horizontal ? image_->get(start, fixedDimension) : 
image_->get(fixedDimension, start)) {
+        start--;
+      } else {
+        int whiteRunStart = start;
+        do {
+          start--;
+        } while (start >= minDim && !(horizontal ? image_->get(start, 
fixedDimension) :
+            image_->get(fixedDimension, start)));
+        int whiteRunSize = whiteRunStart - start;
+        if (start < minDim || whiteRunSize > maxWhiteRun) {
+          start = whiteRunStart;
+          break;
+        }
+      }
+    }
+    start++;
+
+    // Then try right/down
+    int end = center;
+    while (end < maxDim) {
+      if (horizontal ? image_->get(end, fixedDimension) : 
image_->get(fixedDimension, end)) {
+        end++;
+      } else {
+        int whiteRunStart = end;
+        do {
+          end++;
+        } while (end < maxDim && !(horizontal ? image_->get(end, 
fixedDimension) :
+            image_->get(fixedDimension, end)));
+        int whiteRunSize = end - whiteRunStart;
+        if (end >= maxDim || whiteRunSize > maxWhiteRun) {
+          end = whiteRunStart;
+          break;
+        }
+      }
+    }
+    end--;
+    Ref<TwoInts> result(NULL);
+    if (end > start) {
+               result = new TwoInts;
+      result->start = start;
+      result->end = end;
+    }
+    return result;
+  }
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/Detector.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/Detector.h  
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/Detector.h  
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,94 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __DETECTOR_H__
+#define __DETECTOR_H__
+
+/*
+ *  Detector.h
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+#include <zxing/common/DetectorResult.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/common/PerspectiveTransform.h>
+#include <zxing/common/detector/WhiteRectangleDetector.h>
+
+namespace zxing {
+namespace datamatrix {
+
+class ResultPointsAndTransitions: public Counted {
+  private:
+    Ref<ResultPoint> to_;
+    Ref<ResultPoint> from_;
+    int transitions_;
+
+  public:
+    ResultPointsAndTransitions();
+    ResultPointsAndTransitions(Ref<ResultPoint> from, Ref<ResultPoint> to, int 
transitions);
+    Ref<ResultPoint> getFrom();
+    Ref<ResultPoint> getTo();
+    int getTransitions();
+};
+
+class Detector: public Counted {
+  private:
+    Ref<BitMatrix> image_;
+
+  protected:
+    Ref<BitMatrix> sampleGrid(Ref<BitMatrix> image, int dimensionX, int 
dimensionY,
+        Ref<PerspectiveTransform> transform);
+
+    void insertionSort(std::vector<Ref<ResultPointsAndTransitions> >& vector);
+
+    Ref<ResultPoint> correctTopRightRectangular(Ref<ResultPoint> bottomLeft,
+        Ref<ResultPoint> bottomRight, Ref<ResultPoint> topLeft, 
Ref<ResultPoint> topRight,
+        int dimensionTop, int dimensionRight);
+    Ref<ResultPoint> correctTopRight(Ref<ResultPoint> bottomLeft, 
Ref<ResultPoint> bottomRight,
+        Ref<ResultPoint> topLeft, Ref<ResultPoint> topRight, int dimension);
+    bool isValid(Ref<ResultPoint> p);
+    int distance(Ref<ResultPoint> a, Ref<ResultPoint> b);
+    Ref<ResultPointsAndTransitions> transitionsBetween(Ref<ResultPoint> from, 
Ref<ResultPoint> to);
+    int min(int a, int b) {
+      return a > b ? b : a;
+    }
+    /**
+     * Ends up being a bit faster than round(). This merely rounds its
+     * argument to the nearest int, where x.5 rounds up.
+     */
+    int round(float d) {
+      return (int) (d + 0.5f);
+    }
+
+  public:
+    Ref<BitMatrix> getImage();
+    Detector(Ref<BitMatrix> image);
+
+    virtual Ref<PerspectiveTransform> createTransform(Ref<ResultPoint> topLeft,
+        Ref<ResultPoint> topRight, Ref<ResultPoint> bottomLeft, 
Ref<ResultPoint> bottomRight,
+        int dimensionX, int dimensionY);
+
+    Ref<DetectorResult> detect();
+
+  private:
+    int compare(Ref<ResultPointsAndTransitions> a, 
Ref<ResultPointsAndTransitions> b);
+};
+
+}
+}
+
+#endif // __DETECTOR_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DetectorException.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DetectorException.h
                         (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/DetectorException.h
 2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,23 @@
+/*
+ * DetectorException.h
+ *
+ *  Created on: Aug 26, 2011
+ *      Author: luiz
+ */
+
+#ifndef DETECTOREXCEPTION_H_
+#define DETECTOREXCEPTION_H_
+
+#include <zxing/Exception.h>
+
+namespace zxing {
+namespace datamatrix {
+
+class DetectorException : public Exception {
+  public:
+    DetectorException(const char *msg);
+    virtual ~DetectorException() throw();
+};
+} /* namespace nexxera */
+} /* namespace zxing */
+#endif /* DETECTOREXCEPTION_H_ */

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/MonochromeRectangleDetector.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/MonochromeRectangleDetector.h
                               (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/datamatrix/detector/MonochromeRectangleDetector.h
       2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,61 @@
+#ifndef __MONOCHROMERECTANGLEDETECTOR_H__
+#define __MONOCHROMERECTANGLEDETECTOR_H__
+
+/*
+ *  MonochromeRectangleDetector.h
+ *  zxing
+ *
+ *  Created by Luiz Silva on 09/02/2010.
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <vector>
+#include <zxing/ReaderException.h>
+#include <zxing/ResultPoint.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/common/Counted.h>
+#include <zxing/datamatrix/detector/CornerPoint.h>
+
+namespace zxing {
+namespace datamatrix {
+
+struct TwoInts: public Counted {
+       int start;
+       int end;
+};
+
+class MonochromeRectangleDetector : public Counted {
+private:
+  static const int MAX_MODULES = 32;
+  Ref<BitMatrix> image_;
+
+public:
+  MonochromeRectangleDetector(Ref<BitMatrix> image) : image_(image) {  };
+
+  std::vector<Ref<CornerPoint> > detect();
+
+private:
+  Ref<CornerPoint> findCornerFromCenter(int centerX, int deltaX, int left, int 
right,
+      int centerY, int deltaY, int top, int bottom, int maxWhiteRun);
+
+  Ref<TwoInts> blackWhiteRange(int fixedDimension, int maxWhiteRun, int 
minDim, int maxDim,
+      bool horizontal);
+
+  int max(int a, float b) { return (float) a > b ? a : (int) b;};
+};
+}
+}
+
+#endif // __MONOCHROMERECTANGLEDETECTOR_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/ByQuadrantReader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/ByQuadrantReader.cpp      
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/ByQuadrantReader.cpp      
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,71 @@
+/*
+ *  Copyright 2011 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/multi/ByQuadrantReader.h>
+#include <zxing/ReaderException.h>
+
+namespace zxing {
+namespace multi {
+
+ByQuadrantReader::ByQuadrantReader(Reader& delegate) : delegate_(delegate) {}
+
+ByQuadrantReader::~ByQuadrantReader(){}
+
+Ref<Result> ByQuadrantReader::decode(Ref<BinaryBitmap> image){
+  return decode(image, DecodeHints::DEFAULT_HINT);
+}
+
+Ref<Result> ByQuadrantReader::decode(Ref<BinaryBitmap> image, DecodeHints 
hints){
+  int width = image->getWidth();
+  int height = image->getHeight();
+  int halfWidth = width / 2;
+  int halfHeight = height / 2;
+  Ref<BinaryBitmap> topLeft = image->crop(0, 0, halfWidth, halfHeight);
+  try {
+    return delegate_.decode(topLeft, hints);
+  } catch (ReaderException& re) {
+    // continue
+  }
+
+  Ref<BinaryBitmap> topRight = image->crop(halfWidth, 0, halfWidth, 
halfHeight);
+  try {
+    return delegate_.decode(topRight, hints);
+  } catch (ReaderException& re) {
+    // continue
+  }
+
+  Ref<BinaryBitmap> bottomLeft = image->crop(0, halfHeight, halfWidth, 
halfHeight);
+  try {
+    return delegate_.decode(bottomLeft, hints);
+  } catch (ReaderException& re) {
+    // continue
+  }
+
+  Ref<BinaryBitmap> bottomRight = image->crop(halfWidth, halfHeight, 
halfWidth, halfHeight);
+  try {
+    return delegate_.decode(bottomRight, hints);
+  } catch (ReaderException& re) {
+    // continue
+  }
+
+  int quarterWidth = halfWidth / 2;
+  int quarterHeight = halfHeight / 2;
+  Ref<BinaryBitmap> center = image->crop(quarterWidth, quarterHeight, 
halfWidth, halfHeight);
+  return delegate_.decode(center, hints);
+}
+
+} // End zxing::multi namespace
+} // End zxing namespace

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/ByQuadrantReader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/ByQuadrantReader.h        
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/ByQuadrantReader.h        
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,40 @@
+#ifndef __BY_QUADRANT_READER_H__
+#define __BY_QUADRANT_READER_H__
+
+/*
+ *  Copyright 2011 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/Reader.h>
+#include <zxing/BinaryBitmap.h>
+#include <zxing/Result.h>
+#include <zxing/DecodeHints.h>
+
+namespace zxing {
+namespace multi {
+class ByQuadrantReader : public Reader {
+  private:
+    Reader& delegate_;
+
+  public:
+    ByQuadrantReader(Reader& delegate);
+    virtual ~ByQuadrantReader();
+    virtual Ref<Result> decode(Ref<BinaryBitmap> image);
+    virtual Ref<Result> decode(Ref<BinaryBitmap> image, DecodeHints hints);
+};
+} // End zxing::multi namespace
+} // End zxing namespace
+
+#endif // __BY_QUADRANT_READER_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/GenericMultipleBarcodeReader.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/GenericMultipleBarcodeReader.cpp
                          (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/GenericMultipleBarcodeReader.cpp
  2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,128 @@
+/*
+ *  Copyright 2011 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/multi/GenericMultipleBarcodeReader.h>
+#include <zxing/ReaderException.h>
+#include <zxing/ResultPoint.h>
+
+namespace zxing {
+namespace multi {
+GenericMultipleBarcodeReader::GenericMultipleBarcodeReader(Reader& delegate) : 
+    delegate_(delegate)
+{
+}
+
+GenericMultipleBarcodeReader::~GenericMultipleBarcodeReader(){}
+
+std::vector<Ref<Result> > GenericMultipleBarcodeReader::decodeMultiple(
+        Ref<BinaryBitmap> image, DecodeHints hints)
+{
+    std::vector<Ref<Result> > results;
+    doDecodeMultiple(image, hints, results, 0, 0);
+    if (results.empty()){
+        throw ReaderException("No code detected");
+    }
+    return results;
+}
+
+void GenericMultipleBarcodeReader::doDecodeMultiple(Ref<BinaryBitmap> image, 
+                                                    DecodeHints hints, 
std::vector<Ref<Result> >& results, int xOffset, int yOffset)
+{
+    Ref<Result> result;
+    try {
+        result = delegate_.decode(image, hints);
+    } catch (ReaderException& re) {
+        return;
+    }
+    bool alreadyFound = false;
+    for (unsigned int i = 0; i < results.size(); i++) {
+        Ref<Result> existingResult = results[i];
+        if (existingResult->getText()->getText() == 
result->getText()->getText()) {
+            alreadyFound = true;
+            break;
+        }
+    }
+    if (alreadyFound) {
+        return;
+    }
+
+    results.push_back(translateResultPoints(result, xOffset, yOffset));
+    const std::vector<Ref<ResultPoint> > resultPoints = 
result->getResultPoints();
+    if (resultPoints.empty()) {
+        return;
+    }
+
+    int width = image->getWidth();
+    int height = image->getHeight();
+    float minX = width;
+    float minY = height;
+    float maxX = 0.0f;
+    float maxY = 0.0f;
+    for (unsigned int i = 0; i < resultPoints.size(); i++) {
+        Ref<ResultPoint> point = resultPoints[i];
+        float x = point->getX();
+        float y = point->getY();
+        if (x < minX) {
+            minX = x;
+        }
+        if (y < minY) {
+            minY = y;
+        }
+        if (x > maxX) {
+            maxX = x;
+        }
+        if (y > maxY) {
+            maxY = y;
+        }
+    }
+
+    // Decode left of barcode
+    if (minX > MIN_DIMENSION_TO_RECUR) {
+        doDecodeMultiple(image->crop(0, 0, (int) minX, height),
+                         hints, results, xOffset, yOffset);
+    }
+    // Decode above barcode
+    if (minY > MIN_DIMENSION_TO_RECUR) {
+        doDecodeMultiple(image->crop(0, 0, width, (int) minY),
+                         hints, results, xOffset, yOffset);
+    }
+    // Decode right of barcode
+    if (maxX < width - MIN_DIMENSION_TO_RECUR) {
+        doDecodeMultiple(image->crop((int) maxX, 0, width - (int) maxX, 
height),
+                         hints, results, xOffset + (int) maxX, yOffset);
+    }
+    // Decode below barcode
+    if (maxY < height - MIN_DIMENSION_TO_RECUR) {
+        doDecodeMultiple(image->crop(0, (int) maxY, width, height - (int) 
maxY),
+                         hints, results, xOffset, yOffset + (int) maxY);
+    }
+}
+
+Ref<Result> GenericMultipleBarcodeReader::translateResultPoints(Ref<Result> 
result, int xOffset, int yOffset){
+    const std::vector<Ref<ResultPoint> > oldResultPoints = 
result->getResultPoints();
+    if (oldResultPoints.empty()) {
+        return result;
+    }
+    std::vector<Ref<ResultPoint> > newResultPoints;
+    for (unsigned int i = 0; i < oldResultPoints.size(); i++) {
+        Ref<ResultPoint> oldPoint = oldResultPoints[i];
+        newResultPoints.push_back(Ref<ResultPoint>(new 
ResultPoint(oldPoint->getX() + xOffset, oldPoint->getY() + yOffset)));
+    }
+    return Ref<Result>(new Result(result->getText(), result->getRawBytes(), 
newResultPoints, result->getBarcodeFormat()));
+}
+
+} // End zxing::multi namespace
+} // End zxing namespace

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/GenericMultipleBarcodeReader.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/GenericMultipleBarcodeReader.h
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/GenericMultipleBarcodeReader.h
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,47 @@
+#ifndef __GENERIC_MULTIPLE_BARCODE_READER_H__
+#define __GENERIC_MULTIPLE_BARCODE_READER_H__
+
+/*
+ *  Copyright 2011 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/multi/MultipleBarcodeReader.h>
+#include <zxing/Reader.h>
+
+namespace zxing {
+namespace multi {
+class GenericMultipleBarcodeReader : public MultipleBarcodeReader {
+  private:
+    static Ref<Result> translateResultPoints(Ref<Result> result, 
+                                             int xOffset, 
+                                             int yOffset);
+    void doDecodeMultiple(Ref<BinaryBitmap> image, 
+                          DecodeHints hints, 
+                          std::vector<Ref<Result> >& results, 
+                          int xOffset, 
+                          int yOffset);             
+    Reader& delegate_;
+    static const int MIN_DIMENSION_TO_RECUR = 100;
+
+  public:
+    GenericMultipleBarcodeReader(Reader& delegate);
+    virtual ~GenericMultipleBarcodeReader();
+    virtual std::vector<Ref<Result> > decodeMultiple(Ref<BinaryBitmap> image, 
+                                                     DecodeHints hints);
+};
+} // End zxing::multi namespace
+} // End zxing namespace
+
+#endif // __GENERIC_MULTIPLE_BARCODE_READER_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/MultipleBarcodeReader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/MultipleBarcodeReader.cpp 
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/MultipleBarcodeReader.cpp 
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,29 @@
+/*
+ *  Copyright 2011 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/multi/MultipleBarcodeReader.h>
+
+namespace zxing {
+namespace multi {
+
+MultipleBarcodeReader::~MultipleBarcodeReader() { }
+
+std::vector<Ref<Result> > 
MultipleBarcodeReader::decodeMultiple(Ref<BinaryBitmap> image) {
+  return decodeMultiple(image, DecodeHints::DEFAULT_HINT);
+}
+
+} // End zxing::multi namespace
+} // End zxing namespace

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/MultipleBarcodeReader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/MultipleBarcodeReader.h   
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/MultipleBarcodeReader.h   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,39 @@
+#ifndef __MULTIPLE_BARCODE_READER_H__
+#define __MULTIPLE_BARCODE_READER_H__
+
+/*
+ *  Copyright 2011 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+#include <zxing/Result.h>
+#include <zxing/BinaryBitmap.h>
+#include <zxing/DecodeHints.h>
+#include <vector>
+
+namespace zxing {
+namespace multi {
+class MultipleBarcodeReader : public Counted {
+  protected:
+    MultipleBarcodeReader() {}
+  public:
+    virtual std::vector<Ref<Result> > decodeMultiple(Ref<BinaryBitmap> image);
+    virtual std::vector<Ref<Result> > decodeMultiple(Ref<BinaryBitmap> image, 
DecodeHints hints) = 0;
+    virtual ~MultipleBarcodeReader();
+};
+} // End zxing::multi namespace
+} // End zxing namespace
+
+#endif // __MULTIPLE_BARCODE_READER_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/QRCodeMultiReader.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/QRCodeMultiReader.cpp  
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/QRCodeMultiReader.cpp  
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,57 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Copyright 2011 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/multi/qrcode/QRCodeMultiReader.h>
+#include <zxing/ReaderException.h>
+#include <zxing/multi/qrcode/detector/MultiDetector.h>
+#include <zxing/BarcodeFormat.h>
+
+namespace zxing {
+namespace multi {
+QRCodeMultiReader::QRCodeMultiReader(){}
+
+QRCodeMultiReader::~QRCodeMultiReader(){}
+
+std::vector<Ref<Result> > QRCodeMultiReader::decodeMultiple(Ref<BinaryBitmap> 
image, 
+  DecodeHints hints)
+{
+  std::vector<Ref<Result> > results;
+  MultiDetector detector(image->getBlackMatrix());
+
+  std::vector<Ref<DetectorResult> > detectorResult =  
detector.detectMulti(hints);
+  for (unsigned int i = 0; i < detectorResult.size(); i++) {
+    try {
+      Ref<DecoderResult> decoderResult = 
getDecoder().decode(detectorResult[i]->getBits());
+      std::vector<Ref<ResultPoint> > points = detectorResult[i]->getPoints();
+      Ref<Result> result = Ref<Result>(new Result(decoderResult->getText(),
+      decoderResult->getRawBytes(), 
+      points, BarcodeFormat_QR_CODE));
+      // result->putMetadata(ResultMetadataType.BYTE_SEGMENTS, 
decoderResult->getByteSegments());
+      // result->putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, 
decoderResult->getECLevel().toString());
+      results.push_back(result);
+    } catch (ReaderException& re) {
+    // ignore and continue 
+    }
+  }
+  if (results.empty()){
+    throw ReaderException("No code detected");
+  }
+  return results;
+}
+
+} // End zxing::multi namespace
+} // End zxing namespace

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/QRCodeMultiReader.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/QRCodeMultiReader.h    
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/QRCodeMultiReader.h    
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,34 @@
+#ifndef __QRCODE_MULTI_READER_H__
+#define __QRCODE_MULTI_READER_H__
+
+/*
+ *  Copyright 2011 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/multi/MultipleBarcodeReader.h>
+#include <zxing/qrcode/QRCodeReader.h>
+
+namespace zxing {
+namespace multi {
+class QRCodeMultiReader: public zxing::qrcode::QRCodeReader, public 
MultipleBarcodeReader {
+  public:
+    QRCodeMultiReader();
+    virtual ~QRCodeMultiReader();
+    virtual std::vector<Ref<Result> > decodeMultiple(Ref<BinaryBitmap> image, 
DecodeHints hints);
+};
+} // End zxing::multi namespace
+} // End zxing namespace
+
+#endif // __QRCODE_MULTI_READER_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiDetector.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiDetector.cpp
                         (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiDetector.cpp
 2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,46 @@
+/*
+ *  Copyright 2011 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/multi/qrcode/detector/MultiDetector.h>
+#include <zxing/multi/qrcode/detector/MultiFinderPatternFinder.h>
+#include <zxing/ReaderException.h>
+
+namespace zxing {
+namespace multi {
+using namespace zxing::qrcode;
+
+MultiDetector::MultiDetector(Ref<BitMatrix> image) : Detector(image) {}
+
+MultiDetector::~MultiDetector(){}
+
+std::vector<Ref<DetectorResult> > MultiDetector::detectMulti(DecodeHints 
hints){
+  Ref<BitMatrix> image = getImage();
+  MultiFinderPatternFinder finder = MultiFinderPatternFinder(image, 
hints.getResultPointCallback());
+  std::vector<Ref<FinderPatternInfo> > info = finder.findMulti(hints);
+  std::vector<Ref<DetectorResult> > result;
+  for(unsigned int i = 0; i < info.size(); i++){
+    try{
+      result.push_back(processFinderPatternInfo(info[i]));
+    } catch (ReaderException& e){
+      // ignore
+    }
+  }
+
+  return result;
+}
+
+} // End zxing::multi namespace
+} // End zxing namespace

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiDetector.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiDetector.h
                           (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiDetector.h
   2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,35 @@
+#ifndef __MULTI_DETECTOR_H__
+#define __MULTI_DETECTOR_H__
+
+/*
+ *  Copyright 2011 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/detector/Detector.h>
+#include <zxing/common/DetectorResult.h>
+#include <zxing/DecodeHints.h>
+
+namespace zxing {
+namespace multi {
+class MultiDetector : public zxing::qrcode::Detector {
+  public:
+    MultiDetector(Ref<BitMatrix> image);
+    virtual ~MultiDetector();
+    virtual std::vector<Ref<DetectorResult> > detectMulti(DecodeHints hints);
+};
+} // End zxing::multi namespace
+} // End zxing namespace
+
+#endif // __MULTI_DETECTOR_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiFinderPatternFinder.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiFinderPatternFinder.cpp
                              (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiFinderPatternFinder.cpp
      2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,230 @@
+/*
+ *  Copyright 2011 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <algorithm>
+#include <math.h>
+#include <stdlib.h>
+#include <zxing/multi/qrcode/detector/MultiFinderPatternFinder.h>
+#include <zxing/DecodeHints.h>
+#include <zxing/ReaderException.h>
+
+namespace zxing{
+namespace multi {
+using namespace zxing::qrcode;
+
+const float MultiFinderPatternFinder::MAX_MODULE_COUNT_PER_EDGE = 180;
+const float MultiFinderPatternFinder::MIN_MODULE_COUNT_PER_EDGE = 9;
+const float MultiFinderPatternFinder::DIFF_MODSIZE_CUTOFF_PERCENT = 0.05f;
+const float MultiFinderPatternFinder::DIFF_MODSIZE_CUTOFF = 0.5f;
+
+bool compareModuleSize(Ref<FinderPattern> a, Ref<FinderPattern> b){
+    float value = a->getEstimatedModuleSize() - b->getEstimatedModuleSize();
+    return value < 0.0;
+}
+
+
+MultiFinderPatternFinder::MultiFinderPatternFinder(Ref<BitMatrix> image, 
+  Ref<ResultPointCallback> resultPointCallback) : 
+    FinderPatternFinder(image, resultPointCallback)
+{
+}
+
+MultiFinderPatternFinder::~MultiFinderPatternFinder(){}
+
+std::vector<Ref<FinderPatternInfo> > 
MultiFinderPatternFinder::findMulti(DecodeHints const& hints){
+  bool tryHarder = hints.getTryHarder();
+  Ref<BitMatrix> image = image_; // Protected member
+  int maxI = image->getHeight();
+  int maxJ = image->getWidth();
+  // We are looking for black/white/black/white/black modules in
+  // 1:1:3:1:1 ratio; this tracks the number of such modules seen so far
+
+  // Let's assume that the maximum version QR Code we support takes up 1/4 the 
height of the
+  // image, and then account for the center being 3 modules in size. This 
gives the smallest
+  // number of pixels the center could be, so skip this often. When trying 
harder, look for all
+  // QR versions regardless of how dense they are.
+  int iSkip = (int) (maxI / (MAX_MODULES * 4.0f) * 3);
+  if (iSkip < MIN_SKIP || tryHarder) {
+    iSkip = MIN_SKIP;
+  }
+
+  int stateCount[5];
+  for (int i = iSkip - 1; i < maxI; i += iSkip) {
+    // Get a row of black/white values
+    stateCount[0] = 0;
+    stateCount[1] = 0;
+    stateCount[2] = 0;
+    stateCount[3] = 0;
+    stateCount[4] = 0;
+    int currentState = 0;
+    for (int j = 0; j < maxJ; j++) {
+      if (image->get(j, i)) {
+        // Black pixel
+        if ((currentState & 1) == 1) { // Counting white pixels
+          currentState++;
+        }
+        stateCount[currentState]++;
+      } else { // White pixel
+        if ((currentState & 1) == 0) { // Counting black pixels
+          if (currentState == 4) { // A winner?
+            if (foundPatternCross(stateCount)) { // Yes
+              bool confirmed = handlePossibleCenter(stateCount, i, j);
+              if (!confirmed) {
+                do { // Advance to next black pixel
+                  j++;
+                } while (j < maxJ && !image->get(j, i));
+                  j--; // back up to that last white pixel
+              }
+              // Clear state to start looking again
+              currentState = 0;
+              stateCount[0] = 0;
+              stateCount[1] = 0;
+              stateCount[2] = 0;
+              stateCount[3] = 0;
+              stateCount[4] = 0;
+            } else { // No, shift counts back by two
+              stateCount[0] = stateCount[2];
+              stateCount[1] = stateCount[3];
+              stateCount[2] = stateCount[4];
+              stateCount[3] = 1;
+              stateCount[4] = 0;
+              currentState = 3;
+            }
+          } else {
+            stateCount[++currentState]++;
+          }
+        } else { // Counting white pixels
+            stateCount[currentState]++;
+        }
+      }
+    } // for j=...
+
+    if (foundPatternCross(stateCount)) {
+      handlePossibleCenter(stateCount, i, maxJ);
+    } // end if foundPatternCross
+  } // for i=iSkip-1 ...
+  std::vector<std::vector<Ref<FinderPattern> > > patternInfo = 
selectBestPatterns();
+  std::vector<Ref<FinderPatternInfo> > result;
+  for (unsigned int i = 0; i < patternInfo.size(); i++) {
+    std::vector<Ref<FinderPattern> > pattern = patternInfo[i];
+    FinderPatternFinder::orderBestPatterns(pattern);
+    result.push_back(Ref<FinderPatternInfo>(new FinderPatternInfo(pattern)));
+  }
+  return result;
+}
+
+std::vector<std::vector<Ref<FinderPattern> > > 
MultiFinderPatternFinder::selectBestPatterns(){
+  std::vector<Ref<FinderPattern> > possibleCenters = possibleCenters_;
+  
+  int size = possibleCenters.size();
+
+  if (size < 3) {
+    // Couldn't find enough finder patterns
+    throw ReaderException("No code detected");
+  }
+  
+  std::vector<std::vector<Ref<FinderPattern> > > results;
+
+  /*
+  * Begin HE modifications to safely detect multiple codes of equal size
+  */
+  if (size == 3) {
+    results.push_back(possibleCenters_);
+    return results;
+  }
+
+  // Sort by estimated module size to speed up the upcoming checks
+  //TODO do a sort based on module size
+  std::sort(possibleCenters.begin(), possibleCenters.end(), compareModuleSize);
+
+  /*
+  * Now lets start: build a list of tuples of three finder locations that
+  *  - feature similar module sizes
+  *  - are placed in a distance so the estimated module count is within the QR 
specification
+  *  - have similar distance between upper left/right and left top/bottom 
finder patterns
+  *  - form a triangle with 90° angle (checked by comparing top right/bottom 
left distance
+  *    with pythagoras)
+  *
+  * Note: we allow each point to be used for more than one code region: this 
might seem
+  * counterintuitive at first, but the performance penalty is not that big. At 
this point,
+  * we cannot make a good quality decision whether the three finders actually 
represent
+  * a QR code, or are just by chance layouted so it looks like there might be 
a QR code there.
+  * So, if the layout seems right, lets have the decoder try to decode.     
+  */
+
+  for (int i1 = 0; i1 < (size - 2); i1++) {
+    Ref<FinderPattern> p1 = possibleCenters[i1];
+    for (int i2 = i1 + 1; i2 < (size - 1); i2++) {
+      Ref<FinderPattern> p2 = possibleCenters[i2];
+      // Compare the expected module sizes; if they are really off, skip
+      float vModSize12 = (p1->getEstimatedModuleSize() - 
p2->getEstimatedModuleSize()) / std::min(p1->getEstimatedModuleSize(), 
p2->getEstimatedModuleSize());
+      float vModSize12A = abs(p1->getEstimatedModuleSize() - 
p2->getEstimatedModuleSize());
+      if (vModSize12A > DIFF_MODSIZE_CUTOFF && vModSize12 >= 
DIFF_MODSIZE_CUTOFF_PERCENT) {
+        // break, since elements are ordered by the module size deviation 
there cannot be
+        // any more interesting elements for the given p1.
+        break;
+      }
+      for (int i3 = i2 + 1; i3 < size; i3++) {
+        Ref<FinderPattern> p3 = possibleCenters[i3];
+        // Compare the expected module sizes; if they are really off, skip
+        float vModSize23 = (p2->getEstimatedModuleSize() - 
p3->getEstimatedModuleSize()) / std::min(p2->getEstimatedModuleSize(), 
p3->getEstimatedModuleSize());
+        float vModSize23A = abs(p2->getEstimatedModuleSize() - 
p3->getEstimatedModuleSize());
+        if (vModSize23A > DIFF_MODSIZE_CUTOFF && vModSize23 >= 
DIFF_MODSIZE_CUTOFF_PERCENT) {
+          // break, since elements are ordered by the module size deviation 
there cannot be
+          // any more interesting elements for the given p1.
+          break;
+        }
+        std::vector<Ref<FinderPattern> > test;
+        test.push_back(p1);
+        test.push_back(p2);
+        test.push_back(p3);
+        FinderPatternFinder::orderBestPatterns(test);
+        // Calculate the distances: a = topleft-bottomleft, 
b=topleft-topright, c = diagonal
+        Ref<FinderPatternInfo> info = Ref<FinderPatternInfo>(new 
FinderPatternInfo(test));
+        float dA = FinderPatternFinder::distance(info->getTopLeft(), 
info->getBottomLeft());
+        float dC = FinderPatternFinder::distance(info->getTopRight(), 
info->getBottomLeft());
+        float dB = FinderPatternFinder::distance(info->getTopLeft(), 
info->getTopRight());
+        // Check the sizes
+        float estimatedModuleCount = (dA + dB) / (p1->getEstimatedModuleSize() 
* 2.0f);
+        if (estimatedModuleCount > MAX_MODULE_COUNT_PER_EDGE || 
estimatedModuleCount < MIN_MODULE_COUNT_PER_EDGE) {
+          continue;
+        }
+        // Calculate the difference of the edge lengths in percent
+        float vABBC = abs((dA - dB) / std::min(dA, dB));
+        if (vABBC >= 0.1f) {
+          continue;
+        }
+        // Calculate the diagonal length by assuming a 90° angle at topleft
+        float dCpy = (float) sqrt(dA * dA + dB * dB);
+        // Compare to the real distance in %
+        float vPyC = abs((dC - dCpy) / std::min(dC, dCpy));
+        if (vPyC >= 0.1f) {
+          continue;
+        }
+        // All tests passed!
+        results.push_back(test);
+      } // end iterate p3
+    } // end iterate p2
+  } // end iterate p1
+  if (results.empty()){
+    // Nothing found!
+    throw ReaderException("No code detected");    
+  }
+  return results;
+}
+
+} // End zxing::multi namespace
+} // End zxing namespace

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiFinderPatternFinder.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiFinderPatternFinder.h
                                (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/multi/qrcode/detector/MultiFinderPatternFinder.h
        2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,45 @@
+#ifndef __MULTI_FINDER_PATTERN_FINDER_H__
+#define __MULTI_FINDER_PATTERN_FINDER_H__
+
+/*
+ *  Copyright 2011 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/detector/FinderPattern.h>
+#include <zxing/qrcode/detector/FinderPatternFinder.h>
+#include <zxing/qrcode/detector/FinderPatternInfo.h>
+
+namespace zxing {
+namespace multi {
+class MultiFinderPatternFinder : zxing::qrcode::FinderPatternFinder {
+  private:
+    std::vector<std::vector<Ref<zxing::qrcode::FinderPattern> > > 
selectBestPatterns();
+
+    static const float MAX_MODULE_COUNT_PER_EDGE;
+    static const float MIN_MODULE_COUNT_PER_EDGE;
+    static const float DIFF_MODSIZE_CUTOFF_PERCENT;
+    static const float DIFF_MODSIZE_CUTOFF;
+
+  public:
+    MultiFinderPatternFinder(Ref<BitMatrix> image, Ref<ResultPointCallback> 
resultPointCallback);
+    virtual ~MultiFinderPatternFinder();
+    virtual std::vector<Ref<zxing::qrcode::FinderPatternInfo> > 
findMulti(DecodeHints const& hints);
+
+
+};
+}
+}
+
+#endif // __MULTI_FINDER_PATTERN_FINDER_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code128Reader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code128Reader.cpp          
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code128Reader.cpp  
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,490 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Code128Reader.h"
+#include <zxing/oned/OneDResultPoint.h>
+#include <zxing/common/Array.h>
+#include <zxing/ReaderException.h>
+#include <math.h>
+#include <string.h>
+#include <sstream>
+
+namespace zxing {
+       namespace oned {
+
+               const int CODE_PATTERNS_LENGTH = 107;
+               const int countersLength = 6;
+               static const int 
CODE_PATTERNS[CODE_PATTERNS_LENGTH][countersLength] = {
+                       {2, 1, 2, 2, 2, 2}, /* 0 */
+                       {2, 2, 2, 1, 2, 2},
+                       {2, 2, 2, 2, 2, 1},
+                       {1, 2, 1, 2, 2, 3},
+                       {1, 2, 1, 3, 2, 2},
+                       {1, 3, 1, 2, 2, 2}, /* 5 */
+                       {1, 2, 2, 2, 1, 3},
+                       {1, 2, 2, 3, 1, 2},
+                       {1, 3, 2, 2, 1, 2},
+                       {2, 2, 1, 2, 1, 3},
+                       {2, 2, 1, 3, 1, 2}, /* 10 */
+                       {2, 3, 1, 2, 1, 2},
+                       {1, 1, 2, 2, 3, 2},
+                       {1, 2, 2, 1, 3, 2},
+                       {1, 2, 2, 2, 3, 1},
+                       {1, 1, 3, 2, 2, 2}, /* 15 */
+                       {1, 2, 3, 1, 2, 2},
+                       {1, 2, 3, 2, 2, 1},
+                       {2, 2, 3, 2, 1, 1},
+                       {2, 2, 1, 1, 3, 2},
+                       {2, 2, 1, 2, 3, 1}, /* 20 */
+                       {2, 1, 3, 2, 1, 2},
+                       {2, 2, 3, 1, 1, 2},
+                       {3, 1, 2, 1, 3, 1},
+                       {3, 1, 1, 2, 2, 2},
+                       {3, 2, 1, 1, 2, 2}, /* 25 */
+                       {3, 2, 1, 2, 2, 1},
+                       {3, 1, 2, 2, 1, 2},
+                       {3, 2, 2, 1, 1, 2},
+                       {3, 2, 2, 2, 1, 1},
+                       {2, 1, 2, 1, 2, 3}, /* 30 */
+                       {2, 1, 2, 3, 2, 1},
+                       {2, 3, 2, 1, 2, 1},
+                       {1, 1, 1, 3, 2, 3},
+                       {1, 3, 1, 1, 2, 3},
+                       {1, 3, 1, 3, 2, 1}, /* 35 */
+                       {1, 1, 2, 3, 1, 3},
+                       {1, 3, 2, 1, 1, 3},
+                       {1, 3, 2, 3, 1, 1},
+                       {2, 1, 1, 3, 1, 3},
+                       {2, 3, 1, 1, 1, 3}, /* 40 */
+                       {2, 3, 1, 3, 1, 1},
+                       {1, 1, 2, 1, 3, 3},
+                       {1, 1, 2, 3, 3, 1},
+                       {1, 3, 2, 1, 3, 1},
+                       {1, 1, 3, 1, 2, 3}, /* 45 */
+                       {1, 1, 3, 3, 2, 1},
+                       {1, 3, 3, 1, 2, 1},
+                       {3, 1, 3, 1, 2, 1},
+                       {2, 1, 1, 3, 3, 1},
+                       {2, 3, 1, 1, 3, 1}, /* 50 */
+                       {2, 1, 3, 1, 1, 3},
+                       {2, 1, 3, 3, 1, 1},
+                       {2, 1, 3, 1, 3, 1},
+                       {3, 1, 1, 1, 2, 3},
+                       {3, 1, 1, 3, 2, 1}, /* 55 */
+                       {3, 3, 1, 1, 2, 1},
+                       {3, 1, 2, 1, 1, 3},
+                       {3, 1, 2, 3, 1, 1},
+                       {3, 3, 2, 1, 1, 1},
+                       {3, 1, 4, 1, 1, 1}, /* 60 */
+                       {2, 2, 1, 4, 1, 1},
+                       {4, 3, 1, 1, 1, 1},
+                       {1, 1, 1, 2, 2, 4},
+                       {1, 1, 1, 4, 2, 2},
+                       {1, 2, 1, 1, 2, 4}, /* 65 */
+                       {1, 2, 1, 4, 2, 1},
+                       {1, 4, 1, 1, 2, 2},
+                       {1, 4, 1, 2, 2, 1},
+                       {1, 1, 2, 2, 1, 4},
+                       {1, 1, 2, 4, 1, 2}, /* 70 */
+                       {1, 2, 2, 1, 1, 4},
+                       {1, 2, 2, 4, 1, 1},
+                       {1, 4, 2, 1, 1, 2},
+                       {1, 4, 2, 2, 1, 1},
+                       {2, 4, 1, 2, 1, 1}, /* 75 */
+                       {2, 2, 1, 1, 1, 4},
+                       {4, 1, 3, 1, 1, 1},
+                       {2, 4, 1, 1, 1, 2},
+                       {1, 3, 4, 1, 1, 1},
+                       {1, 1, 1, 2, 4, 2}, /* 80 */
+                       {1, 2, 1, 1, 4, 2},
+                       {1, 2, 1, 2, 4, 1},
+                       {1, 1, 4, 2, 1, 2},
+                       {1, 2, 4, 1, 1, 2},
+                       {1, 2, 4, 2, 1, 1}, /* 85 */
+                       {4, 1, 1, 2, 1, 2},
+                       {4, 2, 1, 1, 1, 2},
+                       {4, 2, 1, 2, 1, 1},
+                       {2, 1, 2, 1, 4, 1},
+                       {2, 1, 4, 1, 2, 1}, /* 90 */
+                       {4, 1, 2, 1, 2, 1},
+                       {1, 1, 1, 1, 4, 3},
+                       {1, 1, 1, 3, 4, 1},
+                       {1, 3, 1, 1, 4, 1},
+                       {1, 1, 4, 1, 1, 3}, /* 95 */
+                       {1, 1, 4, 3, 1, 1},
+                       {4, 1, 1, 1, 1, 3},
+                       {4, 1, 1, 3, 1, 1},
+                       {1, 1, 3, 1, 4, 1},
+                       {1, 1, 4, 1, 3, 1}, /* 100 */
+                       {3, 1, 1, 1, 4, 1},
+                       {4, 1, 1, 1, 3, 1},
+                       {2, 1, 1, 4, 1, 2},
+                       {2, 1, 1, 2, 1, 4},
+                       {2, 1, 1, 2, 3, 2}, /* 105 */
+                       {2, 3, 3, 1, 1, 1}
+               };
+
+
+               Code128Reader::Code128Reader(){
+               }
+
+               int* Code128Reader::findStartPattern(Ref<BitArray> row){
+                       int width = row->getSize();
+                       int rowOffset = 0;
+                       while (rowOffset < width) {
+                               if (row->get(rowOffset)) {
+                                       break;
+                               }
+                               rowOffset++;
+                       }
+
+                       int counterPosition = 0;
+                       int counters[countersLength] = {0,0,0,0,0,0};
+                       int patternStart = rowOffset;
+                       bool isWhite = false;
+                       int patternLength =  sizeof(counters) / sizeof(int);
+
+                       for (int i = rowOffset; i < width; i++) {
+                               bool pixel = row->get(i);
+                               if (pixel ^ isWhite) {
+                                       counters[counterPosition]++;
+                               } else {
+                                       if (counterPosition == patternLength - 
1) {
+                                               unsigned int bestVariance = 
MAX_AVG_VARIANCE;
+                                               int bestMatch = -1;
+                                               for (int startCode = 
CODE_START_A; startCode <= CODE_START_C; startCode++) {
+                                                       unsigned int variance = 
patternMatchVariance(counters, sizeof(counters) / sizeof(int),
+                                                           
CODE_PATTERNS[startCode], MAX_INDIVIDUAL_VARIANCE);
+                                                       if (variance < 
bestVariance) {
+                                                               bestVariance = 
variance;
+                                                               bestMatch = 
startCode;
+                                                       }
+                                               }
+                                               if (bestMatch >= 0) {
+                                                       // Look for whitespace 
before start pattern, >= 50% of width of start pattern
+              if (row->isRange(std::max(0, patternStart - (i - patternStart) / 
2), patternStart,
+                                                           false)) {
+                                                               int* 
resultValue = new int[3];
+                                                               resultValue[0] 
= patternStart;
+                                                               resultValue[1] 
= i;
+                                                               resultValue[2] 
= bestMatch;
+                                                               return 
resultValue;
+                                                       }
+                                               }
+                                               patternStart += counters[0] + 
counters[1];
+                                               for (int y = 2; y < 
patternLength; y++) {
+                                                       counters[y - 2] = 
counters[y];
+                                               }
+                                               counters[patternLength - 2] = 0;
+                                               counters[patternLength - 1] = 0;
+                                               counterPosition--;
+                                       } else {
+                                               counterPosition++;
+                                       }
+                                       counters[counterPosition] = 1;
+                                       isWhite = !isWhite;
+                               }
+                       }
+                       throw ReaderException("");
+               }
+
+               int Code128Reader::decodeCode(Ref<BitArray> row, int 
counters[], int countersCount,
+                   int rowOffset) {
+                 if (!recordPattern(row, rowOffset, counters, countersCount)) {
+                   throw ReaderException("");
+                 }
+                       unsigned int bestVariance = MAX_AVG_VARIANCE; // worst 
variance we'll accept
+                       int bestMatch = -1;
+                       for (int d = 0; d < CODE_PATTERNS_LENGTH; d++) {
+                               int pattern[countersLength];
+
+                               for(int ind = 0; ind< countersLength; ind++){
+                                       pattern[ind] = CODE_PATTERNS[d][ind];
+                               }
+//                             memcpy(pattern, CODE_PATTERNS[d], 
countersLength);
+                               unsigned int variance = 
patternMatchVariance(counters, countersCount, pattern,
+                                   MAX_INDIVIDUAL_VARIANCE);
+                               if (variance < bestVariance) {
+                                       bestVariance = variance;
+                                       bestMatch = d;
+                               }
+                       }
+                       // TODO We're overlooking the fact that the STOP 
pattern has 7 values, not 6.
+                       if (bestMatch >= 0) {
+                               return bestMatch;
+                       } else {
+                               throw ReaderException("");
+                       }
+               }
+
+               Ref<Result> Code128Reader::decodeRow(int rowNumber, 
Ref<BitArray> row) {
+                 int* startPatternInfo = NULL;
+                 try {
+        startPatternInfo = findStartPattern(row);
+        int startCode = startPatternInfo[2];
+        int codeSet;
+        switch (startCode) {
+          case CODE_START_A:
+            codeSet = CODE_CODE_A;
+            break;
+          case CODE_START_B:
+            codeSet = CODE_CODE_B;
+            break;
+          case CODE_START_C:
+            codeSet = CODE_CODE_C;
+            break;
+          default:
+            throw ReaderException("");
+        }
+
+        bool done = false;
+        bool isNextShifted = false;
+
+        std::string tmpResultString;
+        std::stringstream tmpResultSStr; // used if its Code 128C
+
+        int lastStart = startPatternInfo[0];
+        int nextStart = startPatternInfo[1];
+        int counters[countersLength] = {0,0,0,0,0,0};
+
+        int lastCode = 0;
+        int code = 0;
+        int checksumTotal = startCode;
+        int multiplier = 0;
+        bool lastCharacterWasPrintable = true;
+
+        while (!done) {
+          bool unshift = isNextShifted;
+          isNextShifted = false;
+
+          // Save off last code
+          lastCode = code;
+
+          // Decode another code from image
+          try {
+            code = decodeCode(row, counters, sizeof(counters)/sizeof(int), 
nextStart);
+          } catch (ReaderException const& re) {
+            throw re;
+          }
+
+          // Remember whether the last code was printable or not (excluding 
CODE_STOP)
+          if (code != CODE_STOP) {
+            lastCharacterWasPrintable = true;
+          }
+
+          // Add to checksum computation (if not CODE_STOP of course)
+          if (code != CODE_STOP) {
+            multiplier++;
+            checksumTotal += multiplier * code;
+          }
+
+          // Advance to where the next code will to start
+          lastStart = nextStart;
+          int _countersLength = sizeof(counters) / sizeof(int);
+          for (int i = 0; i < _countersLength; i++) {
+            nextStart += counters[i];
+          }
+
+          // Take care of illegal start codes
+          switch (code) {
+            case CODE_START_A:
+            case CODE_START_B:
+            case CODE_START_C:
+              throw ReaderException("");
+          }
+
+          switch (codeSet) {
+
+            case CODE_CODE_A:
+              if (code < 64) {
+                tmpResultString.append(1, (char) (' ' + code));
+              } else if (code < 96) {
+                tmpResultString.append(1, (char) (code - 64));
+              } else {
+                // Don't let CODE_STOP, which always appears, affect whether 
whether we think the
+                // last code was printable or not.
+                if (code != CODE_STOP) {
+                  lastCharacterWasPrintable = false;
+                }
+                switch (code) {
+                  case CODE_FNC_1:
+                  case CODE_FNC_2:
+                  case CODE_FNC_3:
+                  case CODE_FNC_4_A:
+                    // do nothing?
+                    break;
+                  case CODE_SHIFT:
+                    isNextShifted = true;
+                    codeSet = CODE_CODE_B;
+                    break;
+                  case CODE_CODE_B:
+                    codeSet = CODE_CODE_B;
+                    break;
+                  case CODE_CODE_C:
+                    codeSet = CODE_CODE_C;
+                    break;
+                  case CODE_STOP:
+                    done = true;
+                    break;
+                }
+              }
+              break;
+            case CODE_CODE_B:
+              if (code < 96) {
+                tmpResultString.append(1, (char) (' ' + code));
+              } else {
+                if (code != CODE_STOP) {
+                  lastCharacterWasPrintable = false;
+                }
+                switch (code) {
+                  case CODE_FNC_1:
+                  case CODE_FNC_2:
+                  case CODE_FNC_3:
+                  case CODE_FNC_4_B:
+                    // do nothing?
+                    break;
+                  case CODE_SHIFT:
+                    isNextShifted = true;
+                    codeSet = CODE_CODE_C;
+                    break;
+                  case CODE_CODE_A:
+                    codeSet = CODE_CODE_A;
+                    break;
+                  case CODE_CODE_C:
+                    codeSet = CODE_CODE_C;
+                    break;
+                  case CODE_STOP:
+                    done = true;
+                    break;
+                }
+              }
+              break;
+            case CODE_CODE_C:
+              tmpResultSStr.str(std::string());
+              // the code read in this case is the number encoded directly
+              if (code < 100) {
+                if (code < 10) {
+                                               tmpResultSStr << '0';
+                                       }
+                tmpResultSStr << code;
+                                       
tmpResultString.append(tmpResultSStr.str());
+              } else {
+                if (code != CODE_STOP) {
+                  lastCharacterWasPrintable = false;
+                }
+                switch (code) {
+                  case CODE_FNC_1:
+                    // do nothing?
+                    break;
+                  case CODE_CODE_A:
+                    codeSet = CODE_CODE_A;
+                    break;
+                  case CODE_CODE_B:
+                    codeSet = CODE_CODE_B;
+                    break;
+                  case CODE_STOP:
+                    done = true;
+                    break;
+                }
+              }
+              break;
+          }
+
+          // Unshift back to another code set if we were shifted
+          if (unshift) {
+            switch (codeSet) {
+              case CODE_CODE_A:
+                codeSet = CODE_CODE_C;
+                break;
+              case CODE_CODE_B:
+                codeSet = CODE_CODE_A;
+                break;
+              case CODE_CODE_C:
+                codeSet = CODE_CODE_B;
+                break;
+            }
+          }
+
+        }
+
+        // Check for ample whitespace following pattern, but, to do this we 
first need to remember that
+        // we fudged decoding CODE_STOP since it actually has 7 bars, not 6. 
There is a black bar left
+        // to read off. Would be slightly better to properly read. Here we 
just skip it:
+        int width = row->getSize();
+        while (nextStart < width && row->get(nextStart)) {
+          nextStart++;
+        }
+        if (!row->isRange(nextStart,
+                          std::min(width, nextStart + (nextStart - lastStart) 
/ 2),
+                          false)) {
+          throw ReaderException("");
+        }
+
+        // Pull out from sum the value of the penultimate check code
+        checksumTotal -= multiplier * lastCode;
+        // lastCode is the checksum then:
+        if (checksumTotal % 103 != lastCode) {
+          throw ReaderException("");
+        }
+
+        // Need to pull out the check digits from string
+        int resultLength = tmpResultString.length();
+        // Only bother if the result had at least one character, and if the 
checksum digit happened to
+        // be a printable character. If it was just interpreted as a control 
code, nothing to remove.
+        if (resultLength > 0 && lastCharacterWasPrintable) {
+          if (codeSet == CODE_CODE_C) {
+            tmpResultString.erase(resultLength - 2, resultLength);
+          } else {
+            tmpResultString.erase(resultLength - 1, resultLength);
+          }
+        }
+
+        Ref<String> resultString(new String(tmpResultString));
+        if (tmpResultString.length() == 0) {
+          // Almost surely a false positive
+          throw ReaderException("");
+        }
+
+        float left = (float) (startPatternInfo[1] + startPatternInfo[0]) / 
2.0f;
+        float right = (float) (nextStart + lastStart) / 2.0f;
+
+        std::vector< Ref<ResultPoint> > resultPoints(2);
+        Ref<OneDResultPoint> resultPoint1(new OneDResultPoint(left, (float) 
rowNumber));
+        Ref<OneDResultPoint> resultPoint2(new OneDResultPoint(right, (float) 
rowNumber));
+        resultPoints[0] = resultPoint1;
+        resultPoints[1] = resultPoint2;
+
+        delete [] startPatternInfo;
+        ArrayRef<unsigned char> resultBytes(1);
+        return Ref<Result>(new Result(resultString, resultBytes, resultPoints,
+            BarcodeFormat_CODE_128));
+                       } catch (ReaderException const& re) {
+                         delete [] startPatternInfo;
+                         return Ref<Result>();
+                       }
+               }
+
+               void Code128Reader::append(char* s, char c){
+                       int len = strlen(s);
+                       s[len] = c;
+                       s[len + 1] = '\0';
+               }
+
+               Code128Reader::~Code128Reader(){
+               }
+       }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code128Reader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code128Reader.h            
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code128Reader.h    
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,60 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __CODE_128_READER_H__
+#define __CODE_128_READER_H__
+/*
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/oned/OneDReader.h>
+#include <zxing/common/BitArray.h>
+#include <zxing/Result.h>
+
+namespace zxing {
+       namespace oned {
+               class Code128Reader : public OneDReader {
+                       
+               private:
+      enum {MAX_AVG_VARIANCE = (unsigned int) 
(PATTERN_MATCH_RESULT_SCALE_FACTOR * 250/1000)};
+      enum {MAX_INDIVIDUAL_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR 
* 700/1000)};
+                       static const int CODE_SHIFT = 98;
+                       
+                       static const int CODE_CODE_C = 99;
+                       static const int CODE_CODE_B = 100;
+                       static const int CODE_CODE_A = 101;
+                       
+                       static const int CODE_FNC_1 = 102;
+                       static const int CODE_FNC_2 = 97;
+                       static const int CODE_FNC_3 = 96;
+                       static const int CODE_FNC_4_A = 101;
+                       static const int CODE_FNC_4_B = 100;
+                       
+                       static const int CODE_START_A = 103;
+                       static const int CODE_START_B = 104;
+                       static const int CODE_START_C = 105;
+                       static const int CODE_STOP = 106;
+                       
+                       static int* findStartPattern(Ref<BitArray> row);
+                       static int decodeCode(Ref<BitArray> row, int 
counters[], int countersCount, int rowOffset);
+                       
+                       void append(char* s, char c);
+               public:
+                       Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
+                       Code128Reader();
+                       ~Code128Reader();
+               };
+       }
+}
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code39Reader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code39Reader.cpp           
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code39Reader.cpp   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,348 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Code39Reader.h"
+#include <zxing/oned/OneDResultPoint.h>
+#include <zxing/common/Array.h>
+#include <zxing/ReaderException.h>
+#include <math.h>
+#include <limits.h>
+
+namespace zxing {
+namespace oned {
+
+  static const char* ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%";
+
+
+  /**
+   * These represent the encodings of characters, as patterns of wide and 
narrow
+   * bars.
+   * The 9 least-significant bits of each int correspond to the pattern of wide
+   * and narrow, with 1s representing "wide" and 0s representing narrow.
+   */
+  const int CHARACTER_ENCODINGS_LEN = 44;
+  static int CHARACTER_ENCODINGS[CHARACTER_ENCODINGS_LEN] = {
+    0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064, // 
0-9
+    0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C, // 
A-J
+    0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106, 0x046, 0x016, // 
K-T
+    0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x094, // 
U-*
+    0x0A8, 0x0A2, 0x08A, 0x02A // $-%
+  };
+
+  static int ASTERISK_ENCODING = 0x094;
+  static const char* ALPHABET_STRING =
+    "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%";
+
+
+  /**
+   * Creates a reader that assumes all encoded data is data, and does not treat
+   * the final character as a check digit. It will not decoded "extended
+   * Code 39" sequences.
+   */
+  Code39Reader::Code39Reader() : alphabet_string(ALPHABET_STRING),
+                                 usingCheckDigit(false),
+                                 extendedMode(false) {
+  }
+
+  /**
+   * Creates a reader that can be configured to check the last character as a
+   * check digit. It will not decoded "extended Code 39" sequences.
+   *
+   * @param usingCheckDigit if true, treat the last data character as a check
+   * digit, not data, and verify that the checksum passes.
+   */
+  Code39Reader::Code39Reader(bool usingCheckDigit_) :
+    alphabet_string(ALPHABET_STRING),
+    usingCheckDigit(usingCheckDigit_),
+    extendedMode(false) {
+  }
+
+
+  Code39Reader::Code39Reader(bool usingCheckDigit_, bool extendedMode_) :
+    alphabet_string(ALPHABET_STRING),
+    usingCheckDigit(usingCheckDigit_),
+    extendedMode(extendedMode_) {
+  }
+
+  Ref<Result> Code39Reader::decodeRow(int rowNumber, Ref<BitArray> row) {
+    int* start = NULL;
+    try {
+      start = findAsteriskPattern(row);
+      int nextStart = start[1];
+      int end = row->getSize();
+
+      // Read off white space
+      while (nextStart < end && !row->get(nextStart)) {
+        nextStart++;
+      }
+
+      std::string tmpResultString;
+
+      const int countersLen = 9;
+      int counters[countersLen];
+      for (int i = 0; i < countersLen; i++) {
+        counters[i] = 0;
+      }
+      char decodedChar;
+      int lastStart;
+      do {
+        if (!recordPattern(row, nextStart, counters, countersLen)) {
+          throw ReaderException("");
+        }
+        int pattern = toNarrowWidePattern(counters, countersLen);
+        if (pattern < 0) {
+          throw ReaderException("pattern < 0");
+        }
+        decodedChar = patternToChar(pattern);
+        tmpResultString.append(1, decodedChar);
+        lastStart = nextStart;
+        for (int i = 0; i < countersLen; i++) {
+          nextStart += counters[i];
+        }
+        // Read off white space
+        while (nextStart < end && !row->get(nextStart)) {
+          nextStart++;
+        }
+      } while (decodedChar != '*');
+      tmpResultString.erase(tmpResultString.length()-1, 1);// remove asterisk
+
+      // Look for whitespace after pattern:
+      int lastPatternSize = 0;
+      for (int i = 0; i < countersLen; i++) {
+        lastPatternSize += counters[i];
+      }
+      int whiteSpaceAfterEnd = nextStart - lastStart - lastPatternSize;
+      // If 50% of last pattern size, following last pattern, is not 
whitespace,
+      // fail (but if it's whitespace to the very end of the image, that's OK)
+      if (nextStart != end && whiteSpaceAfterEnd / 2 < lastPatternSize) {
+        throw ReaderException("too short end white space");
+      }
+
+      if (usingCheckDigit) {
+        int max = tmpResultString.length() - 1;
+        unsigned int total = 0;
+        for (int i = 0; i < max; i++) {
+          total += alphabet_string.find_first_of(tmpResultString[i], 0);
+        }
+        if (total % 43 != alphabet_string.find_first_of(tmpResultString[max], 
0)) {
+          throw ReaderException("");
+        }
+        tmpResultString.erase(max, 1);
+      }
+
+      Ref<String> resultString(new String(tmpResultString));
+      if (extendedMode) {
+        resultString = decodeExtended(tmpResultString);
+      }
+
+      if (tmpResultString.length() == 0) {
+        // Almost surely a false positive
+        throw ReaderException("");
+      }
+
+      float left = (float) (start[1] + start[0]) / 2.0f;
+      float right = (float) (nextStart + lastStart) / 2.0f;
+
+      std::vector< Ref<ResultPoint> > resultPoints(2);
+      Ref<OneDResultPoint> resultPoint1(
+        new OneDResultPoint(left, (float) rowNumber));
+      Ref<OneDResultPoint> resultPoint2(
+        new OneDResultPoint(right, (float) rowNumber));
+      resultPoints[0] = resultPoint1;
+      resultPoints[1] = resultPoint2;
+
+      ArrayRef<unsigned char> resultBytes(1);
+
+      Ref<Result> res(new Result(
+                        resultString, resultBytes, resultPoints, 
BarcodeFormat_CODE_39));
+
+      delete [] start;
+      return res;
+    } catch (ReaderException const& re) {
+      delete [] start;
+      return Ref<Result>();
+    }
+  }
+
+  int* Code39Reader::findAsteriskPattern(Ref<BitArray> row){
+    int width = row->getSize();
+    int rowOffset = 0;
+    while (rowOffset < width) {
+      if (row->get(rowOffset)) {
+        break;
+      }
+      rowOffset++;
+    }
+
+    int counterPosition = 0;
+    const int countersLen = 9;
+    int counters[countersLen];
+    for (int i = 0; i < countersLen; i++) {
+      counters[i] = 0;
+    }
+    int patternStart = rowOffset;
+    bool isWhite = false;
+    int patternLength = countersLen;
+
+    for (int i = rowOffset; i < width; i++) {
+      bool pixel = row->get(i);
+      if (pixel ^ isWhite) {
+        counters[counterPosition]++;
+      } else {
+        if (counterPosition == patternLength - 1) {
+          if (toNarrowWidePattern(counters, countersLen) == ASTERISK_ENCODING) 
{
+            // Look for whitespace before start pattern, >= 50% of width of
+            // start pattern.
+            if (row->isRange(std::max(0, patternStart - ((i - patternStart) >> 
1)), patternStart, false)) {
+              int* resultValue = new int[2];
+              resultValue[0] = patternStart;
+              resultValue[1] = i;
+              return resultValue;
+            }
+          }
+          patternStart += counters[0] + counters[1];
+          for (int y = 2; y < patternLength; y++) {
+            counters[y - 2] = counters[y];
+          }
+          counters[patternLength - 2] = 0;
+          counters[patternLength - 1] = 0;
+          counterPosition--;
+        } else {
+          counterPosition++;
+        }
+        counters[counterPosition] = 1;
+        isWhite = !isWhite;
+      }
+    }
+    throw ReaderException("");
+  }
+
+  // For efficiency, returns -1 on failure. Not throwing here saved as many as
+  // 700 exceptions per image when using some of our blackbox images.
+  int Code39Reader::toNarrowWidePattern(int counters[], int countersLen){
+    int numCounters = countersLen;
+    int maxNarrowCounter = 0;
+    int wideCounters;
+    do {
+      int minCounter = INT_MAX;
+      for (int i = 0; i < numCounters; i++) {
+        int counter = counters[i];
+        if (counter < minCounter && counter > maxNarrowCounter) {
+          minCounter = counter;
+        }
+      }
+      maxNarrowCounter = minCounter;
+      wideCounters = 0;
+      int totalWideCountersWidth = 0;
+      int pattern = 0;
+      for (int i = 0; i < numCounters; i++) {
+        int counter = counters[i];
+        if (counters[i] > maxNarrowCounter) {
+          pattern |= 1 << (numCounters - 1 - i);
+          wideCounters++;
+          totalWideCountersWidth += counter;
+        }
+      }
+      if (wideCounters == 3) {
+        // Found 3 wide counters, but are they close enough in width?
+        // We can perform a cheap, conservative check to see if any individual
+        // counter is more than 1.5 times the average:
+        for (int i = 0; i < numCounters && wideCounters > 0; i++) {
+          int counter = counters[i];
+          if (counters[i] > maxNarrowCounter) {
+            wideCounters--;
+            // totalWideCountersWidth = 3 * average, so this checks if
+            // counter >= 3/2 * average.
+            if ((counter << 1) >= totalWideCountersWidth) {
+              return -1;
+            }
+          }
+        }
+        return pattern;
+      }
+    } while (wideCounters > 3);
+    return -1;
+  }
+
+  char Code39Reader::patternToChar(int pattern){
+    for (int i = 0; i < CHARACTER_ENCODINGS_LEN; i++) {
+      if (CHARACTER_ENCODINGS[i] == pattern) {
+        return ALPHABET[i];
+      }
+    }
+    throw ReaderException("");
+  }
+
+  Ref<String> Code39Reader::decodeExtended(std::string encoded){
+    int length = encoded.length();
+    std::string tmpDecoded;
+    for (int i = 0; i < length; i++) {
+      char c = encoded[i];
+      if (c == '+' || c == '$' || c == '%' || c == '/') {
+        char next = encoded[i + 1];
+        char decodedChar = '\0';
+        switch (c) {
+          case '+':
+            // +A to +Z map to a to z
+            if (next >= 'A' && next <= 'Z') {
+              decodedChar = (char) (next + 32);
+            } else {
+              throw ReaderException("");
+            }
+            break;
+          case '$':
+            // $A to $Z map to control codes SH to SB
+            if (next >= 'A' && next <= 'Z') {
+              decodedChar = (char) (next - 64);
+            } else {
+              throw ReaderException("");
+            }
+            break;
+          case '%':
+            // %A to %E map to control codes ESC to US
+            if (next >= 'A' && next <= 'E') {
+              decodedChar = (char) (next - 38);
+            } else if (next >= 'F' && next <= 'W') {
+              decodedChar = (char) (next - 11);
+            } else {
+              throw ReaderException("");
+            }
+            break;
+          case '/':
+            // /A to /O map to ! to , and /Z maps to :
+            if (next >= 'A' && next <= 'O') {
+              decodedChar = (char) (next - 32);
+            } else if (next == 'Z') {
+              decodedChar = ':';
+            } else {
+              throw ReaderException("");
+            }
+            break;
+        }
+        tmpDecoded.append(1, decodedChar);
+        // bump up i again since we read two characters
+        i++;
+      } else {
+        tmpDecoded.append(1, c);
+      }
+    }
+    Ref<String> decoded(new String(tmpDecoded));
+    return decoded;
+  }
+} // namespace oned
+} // namespace zxing
+

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code39Reader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code39Reader.h             
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/Code39Reader.h     
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,58 @@
+#ifndef __CODE_39_READER_H__
+#define __CODE_39_READER_H__
+/*
+ *  Code39Reader.h
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/oned/OneDReader.h>
+#include <zxing/common/BitArray.h>
+#include <zxing/Result.h>
+
+namespace zxing {
+       namespace oned {
+               
+               /**
+                * <p>Decodes Code 39 barcodes. This does not support "Full 
ASCII Code 39" yet.</p>
+                * Ported form Java (author Sean Owen)
+                * @author Lukasz Warchol
+                */
+               class Code39Reader : public OneDReader {
+                       
+               private:
+                       std::string alphabet_string;
+
+                       bool usingCheckDigit;
+                       bool extendedMode;
+                       
+                       static int* findAsteriskPattern(Ref<BitArray> row);     
                                                                                
                        //throws ReaderException 
+                       static int toNarrowWidePattern(int counters[], int 
countersLen);
+                       static char patternToChar(int pattern);                 
                                                                                
                                //throws ReaderException 
+                       static Ref<String> decodeExtended(std::string encoded); 
                                                                                
                //throws ReaderException 
+                       
+                       void append(char* s, char c);
+               public:
+                       Code39Reader();
+                       Code39Reader(bool usingCheckDigit_);
+                       Code39Reader(bool usingCheckDigit_, bool extendedMode_);
+                       
+                       Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
+    };
+       }
+}
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN13Reader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN13Reader.cpp            
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN13Reader.cpp    
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,99 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "EAN13Reader.h"
+#include <zxing/ReaderException.h>
+#include <qglobal.h>
+
+namespace zxing {
+namespace oned {
+
+static const int FIRST_DIGIT_ENCODINGS[10] = {
+    0x00, 0x0B, 0x0D, 0xE, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A
+};
+
+EAN13Reader::EAN13Reader() { }
+
+int EAN13Reader::decodeMiddle(Ref<BitArray> row, int startGuardBegin, int 
startGuardEnd,
+                              std::string& resultString) {
+    (void)startGuardBegin;
+    const int countersLen = 4;
+    int counters[countersLen] = { 0, 0, 0, 0 };
+
+    int end = row->getSize();
+    int rowOffset = startGuardEnd;
+    int lgPatternFound = 0;
+
+    for (int x = 0; x < 6 && rowOffset < end; x++) {
+        int bestMatch = decodeDigit(row, counters, countersLen, rowOffset,
+                                    UPC_EAN_PATTERNS_L_AND_G_PATTERNS);
+        if (bestMatch < 0) {
+            return -1;
+        }
+        resultString.append(1, (char) ('0' + bestMatch % 10));
+        for (int i = 0; i < countersLen; i++) {
+            rowOffset += counters[i];
+        }
+        if (bestMatch >= 10) {
+            lgPatternFound |= 1 << (5 - x);
+        }
+    }
+
+    if (!determineFirstDigit(resultString, lgPatternFound)) {
+        return -1;
+    }
+
+    int middleRangeStart;
+    int middleRangeEnd;
+    if (findGuardPattern(row, rowOffset, true, (int*)getMIDDLE_PATTERN(),
+                         getMIDDLE_PATTERN_LEN(), &middleRangeStart, 
&middleRangeEnd)) {
+        rowOffset = middleRangeEnd;
+        for (int x = 0; x < 6 && rowOffset < end; x++) {
+            int bestMatch = decodeDigit(row, counters, countersLen, rowOffset,
+                                        UPC_EAN_PATTERNS_L_PATTERNS);
+            if (bestMatch < 0) {
+                return -1;
+            }
+            resultString.append(1, (char) ('0' + bestMatch));
+            for (int i = 0; i < countersLen; i++) {
+                rowOffset += counters[i];
+            }
+        }
+        return rowOffset;
+    }
+    return -1;
+}
+
+bool EAN13Reader::determineFirstDigit(std::string& resultString, int 
lgPatternFound) {
+    for (int d = 0; d < 10; d++) {
+        if (lgPatternFound == FIRST_DIGIT_ENCODINGS[d]) {
+#if defined(Q_OS_SYMBIAN)
+            resultString.insert((char*)0, 1, (char) ('0' + d));
+#else
+            resultString.insert(/*(char*)*/0, 1, (char) ('0' + d));
+#endif
+            return true;
+        }
+    }
+    return false;
+}
+
+BarcodeFormat EAN13Reader::getBarcodeFormat(){
+    return BarcodeFormat_EAN_13;
+}
+}
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN13Reader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN13Reader.h              
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN13Reader.h      
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,44 @@
+#ifndef __EAN_13_READER_H__
+#define __EAN_13_READER_H__
+
+/*
+ *  EAN13Reader.h
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/oned/UPCEANReader.h>
+#include <zxing/Result.h>
+
+namespace zxing {
+  namespace oned {
+    class EAN13Reader : public UPCEANReader {
+
+    private:
+      static bool determineFirstDigit(std::string& resultString, int 
lgPatternFound);
+
+    public:
+      EAN13Reader();
+
+      int decodeMiddle(Ref<BitArray> row, int startGuardBegin, int 
startGuardEnd,
+          std::string& resultString);
+
+      BarcodeFormat getBarcodeFormat();
+    };
+  }
+}
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN8Reader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN8Reader.cpp             
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN8Reader.cpp     
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,72 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "EAN8Reader.h"
+#include <zxing/ReaderException.h>
+
+namespace zxing {
+  namespace oned {
+
+    EAN8Reader::EAN8Reader(){ }
+
+    int EAN8Reader::decodeMiddle(Ref<BitArray> row, int startGuardBegin, int 
startGuardEnd,
+        std::string& resultString){
+      (void)startGuardBegin;
+      const int countersLen = 4;
+      int counters[countersLen] = { 0, 0, 0, 0 };
+
+      int end = row->getSize();
+      int rowOffset = startGuardEnd;
+
+      for (int x = 0; x < 4 && rowOffset < end; x++) {
+        int bestMatch = decodeDigit(row, counters, countersLen, rowOffset,
+            UPC_EAN_PATTERNS_L_PATTERNS);
+        if (bestMatch < 0) {
+          return -1;
+        }
+        resultString.append(1, (char) ('0' + bestMatch));
+        for (int i = 0; i < countersLen; i++) {
+          rowOffset += counters[i];
+        }
+      }
+
+      int middleRangeStart;
+      int middleRangeEnd;
+      if (findGuardPattern(row, rowOffset, true, (int*)getMIDDLE_PATTERN(),
+            getMIDDLE_PATTERN_LEN(), &middleRangeStart, &middleRangeEnd)) {
+        rowOffset = middleRangeEnd;
+        for (int x = 0; x < 4 && rowOffset < end; x++) {
+          int bestMatch = decodeDigit(row, counters, countersLen, rowOffset,
+              UPC_EAN_PATTERNS_L_PATTERNS);
+          if (bestMatch < 0) {
+            return -1;
+          }
+          resultString.append(1, (char) ('0' + bestMatch));
+          for (int i = 0; i < countersLen; i++) {
+            rowOffset += counters[i];
+          }
+        }
+        return rowOffset;
+      }
+      return -1;
+    }
+
+    BarcodeFormat EAN8Reader::getBarcodeFormat(){
+      return BarcodeFormat_EAN_8;
+    }
+  }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN8Reader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN8Reader.h               
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/EAN8Reader.h       
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,41 @@
+#ifndef __EAN_8_READER_H__
+#define __EAN_8_READER_H__
+
+/*
+ *  EAN8Reader.h
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/oned/UPCEANReader.h>
+#include <zxing/Result.h>
+
+namespace zxing {
+  namespace oned {
+    class EAN8Reader : public UPCEANReader {
+
+    public:
+      EAN8Reader();
+
+      int decodeMiddle(Ref<BitArray> row, int startGuardBegin, int 
startGuardEnd,
+          std::string& resultString);
+
+      BarcodeFormat getBarcodeFormat();
+    };
+  }
+}
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/ITFReader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/ITFReader.cpp              
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/ITFReader.cpp      
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,367 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ITFReader.h"
+#include <zxing/oned/OneDResultPoint.h>
+#include <zxing/common/Array.h>
+#include <zxing/ReaderException.h>
+#include <math.h>
+
+namespace zxing {
+  namespace oned {
+
+    static const int W = 3; // Pixel width of a wide line
+    static const int N = 1; // Pixed width of a narrow line
+
+    const int DEFAULT_ALLOWED_LENGTHS_LEN = 10;
+    const int DEFAULT_ALLOWED_LENGTHS[DEFAULT_ALLOWED_LENGTHS_LEN] = { 44, 24, 
20, 18, 16, 14, 12, 10, 8, 6 };
+
+    /**
+     * Start/end guard pattern.
+     *
+     * Note: The end pattern is reversed because the row is reversed before
+     * searching for the END_PATTERN
+     */
+    static const int START_PATTERN_LEN = 4;
+    static const int START_PATTERN[START_PATTERN_LEN] = {N, N, N, N};
+
+    static const int END_PATTERN_REVERSED_LEN = 3;
+    static const int END_PATTERN_REVERSED[END_PATTERN_REVERSED_LEN] = {N, N, 
W};
+
+    /**
+     * Patterns of Wide / Narrow lines to indicate each digit
+     */
+    static const int PATTERNS_LEN = 10;
+    static const int PATTERNS[PATTERNS_LEN][5] = {
+      {N, N, W, W, N}, // 0
+      {W, N, N, N, W}, // 1
+      {N, W, N, N, W}, // 2
+      {W, W, N, N, N}, // 3
+      {N, N, W, N, W}, // 4
+      {W, N, W, N, N}, // 5
+      {N, W, W, N, N}, // 6
+      {N, N, N, W, W}, // 7
+      {W, N, N, W, N}, // 8
+      {N, W, N, W, N}  // 9
+    };
+
+
+    ITFReader::ITFReader() : narrowLineWidth(-1) {
+    }
+
+
+    Ref<Result> ITFReader::decodeRow(int rowNumber, Ref<BitArray> row) {
+      int* startRange = 0;
+      int* endRange = 0;
+      try {
+        // Find out where the Middle section (payload) starts & ends
+        startRange = decodeStart(row);
+        endRange = decodeEnd(row);
+
+        std::string tmpResult;
+        decodeMiddle(row, startRange[1], endRange[0], tmpResult);
+
+        // To avoid false positives with 2D barcodes (and other patterns), make
+        // an assumption that the decoded string must be a known length
+        int length = tmpResult.length();
+        bool lengthOK = false;
+        for (int i = 0; i < DEFAULT_ALLOWED_LENGTHS_LEN; i++) {
+          if (length == DEFAULT_ALLOWED_LENGTHS[i]) {
+            lengthOK = true;
+            break;
+          }
+        }
+        if (!lengthOK) {
+          throw ReaderException("not enough characters count");
+        }
+
+        Ref<String> resultString(new String(tmpResult));
+
+        std::vector< Ref<ResultPoint> > resultPoints(2);
+        Ref<OneDResultPoint> resultPoint1(new OneDResultPoint(startRange[1], 
(float) rowNumber));
+        Ref<OneDResultPoint> resultPoint2(new OneDResultPoint(endRange[0], 
(float) rowNumber));
+        resultPoints[0] = resultPoint1;
+        resultPoints[1] = resultPoint2;
+
+        delete [] startRange;
+        delete [] endRange;
+        ArrayRef<unsigned char> resultBytes(1);
+        return Ref<Result>(new Result(resultString, resultBytes, resultPoints, 
BarcodeFormat_ITF));
+      } catch (ReaderException const& re) {
+        delete [] startRange;
+        delete [] endRange;
+        return Ref<Result>();
+      }
+    }
+
+    /**
+     * @param row          row of black/white values to search
+     * @param payloadStart offset of start pattern
+     * @param resultString address@hidden StringBuffer} to append decoded 
chars to
+     * @throws ReaderException if decoding could not complete successfully
+     */
+    void ITFReader::decodeMiddle(Ref<BitArray> row, int payloadStart, int 
payloadEnd,
+        std::string& resultString) {
+      // Digits are interleaved in pairs - 5 black lines for one digit, and the
+      // 5
+      // interleaved white lines for the second digit.
+      // Therefore, need to scan 10 lines and then
+      // split these into two arrays
+      int counterDigitPairLen = 10;
+      int counterDigitPair[counterDigitPairLen];
+      for (int i=0; i<counterDigitPairLen; i++) {
+        counterDigitPair[i] = 0;
+      }
+
+      int counterBlack[5];
+      int counterWhite[5];
+      for (int i=0; i<5; i++) {
+        counterBlack[i] = 0;
+        counterWhite[i] = 0;
+      }
+
+      while (payloadStart < payloadEnd) {
+        // Get 10 runs of black/white.
+        if (!recordPattern(row, payloadStart, counterDigitPair, 
counterDigitPairLen)) {
+          throw ReaderException("");
+        }
+        // Split them into each array
+        for (int k = 0; k < 5; k++) {
+          int twoK = k << 1;
+          counterBlack[k] = counterDigitPair[twoK];
+          counterWhite[k] = counterDigitPair[twoK + 1];
+        }
+
+        int bestMatch = decodeDigit(counterBlack, 5);
+        resultString.append(1, (char) ('0' + bestMatch));
+        bestMatch = decodeDigit(counterWhite, 5);
+        resultString.append(1, (char) ('0' + bestMatch));
+
+        for (int i = 0; i < counterDigitPairLen; i++) {
+          payloadStart += counterDigitPair[i];
+        }
+      }
+    }
+
+    /**
+     * Identify where the start of the middle / payload section starts.
+     *
+     * @param row row of black/white values to search
+     * @return Array, containing index of start of 'start block' and end of
+     *         'start block'
+     * @throws ReaderException
+     */
+    int* ITFReader::decodeStart(Ref<BitArray> row) {
+      int endStart = skipWhiteSpace(row);
+      int* startPattern = 0;
+      try {
+          startPattern = findGuardPattern(row, endStart, START_PATTERN, 
START_PATTERN_LEN);
+
+          // Determine the width of a narrow line in pixels. We can do this by
+          // getting the width of the start pattern and dividing by 4 because 
its
+          // made up of 4 narrow lines.
+          narrowLineWidth = (startPattern[1] - startPattern[0]) >> 2;
+          validateQuietZone(row, startPattern[0]);
+          return startPattern;
+      } catch (ReaderException const& re) {
+          delete [] startPattern;
+        throw re;
+      }
+    }
+
+    /**
+     * Identify where the end of the middle / payload section ends.
+     *
+     * @param row row of black/white values to search
+     * @return Array, containing index of start of 'end block' and end of 'end
+     *         block'
+     * @throws ReaderException
+     */
+
+    int* ITFReader::decodeEnd(Ref<BitArray> row) {
+      // For convenience, reverse the row and then
+      // search from 'the start' for the end block
+      row->reverse();
+                        int* endPattern = 0;
+      try {
+        int endStart = skipWhiteSpace(row);
+        endPattern = findGuardPattern(row, endStart, END_PATTERN_REVERSED, 
END_PATTERN_REVERSED_LEN);
+
+        // The start & end patterns must be pre/post fixed by a quiet zone. 
This
+        // zone must be at least 10 times the width of a narrow line.
+        // ref: http://www.barcode-1.net/i25code.html
+        validateQuietZone(row, endPattern[0]);
+
+        // Now recalculate the indices of where the 'endblock' starts & stops 
to
+        // accommodate
+        // the reversed nature of the search
+        int temp = endPattern[0];
+        endPattern[0] = row->getSize() - endPattern[1];
+        endPattern[1] = row->getSize() - temp;
+
+        row->reverse();
+        return endPattern;
+      } catch (ReaderException const& re) {
+                                delete [] endPattern;
+        row->reverse();
+        throw re;
+      }
+    }
+
+    /**
+     * The start & end patterns must be pre/post fixed by a quiet zone. This
+     * zone must be at least 10 times the width of a narrow line.  Scan back 
until
+     * we either get to the start of the barcode or match the necessary number 
of
+     * quiet zone pixels.
+     *
+     * Note: Its assumed the row is reversed when using this method to find
+     * quiet zone after the end pattern.
+     *
+     * ref: http://www.barcode-1.net/i25code.html
+     *
+     * @param row bit array representing the scanned barcode.
+     * @param startPattern index into row of the start or end pattern.
+     * @throws ReaderException if the quiet zone cannot be found, a 
ReaderException is thrown.
+     */
+    void ITFReader::validateQuietZone(Ref<BitArray> row, int startPattern) {
+      (void)row;
+      (void)startPattern;
+//#pragma mark needs some corrections
+//      int quietCount = narrowLineWidth * 10;  // expect to find this many 
pixels of quiet zone
+//
+//      for (int i = startPattern - 1; quietCount > 0 && i >= 0; i--) {
+//        if (row->get(i)) {
+//          break;
+//        }
+//        quietCount--;
+//      }
+//      if (quietCount != 0) {
+//        // Unable to find the necessary number of quiet zone pixels.
+//        throw ReaderException("Unable to find the necessary number of quiet 
zone pixels");
+//      }
+    }
+
+    /**
+     * Skip all whitespace until we get to the first black line.
+     *
+     * @param row row of black/white values to search
+     * @return index of the first black line.
+     * @throws ReaderException Throws exception if no black lines are found in 
the row
+     */
+    int ITFReader::skipWhiteSpace(Ref<BitArray> row) {
+      int width = row->getSize();
+      int endStart = 0;
+      while (endStart < width) {
+        if (row->get(endStart)) {
+          break;
+        }
+        endStart++;
+      }
+      if (endStart == width) {
+        throw ReaderException("");
+      }
+      return endStart;
+    }
+
+    /**
+     * @param row       row of black/white values to search
+     * @param rowOffset position to start search
+     * @param pattern   pattern of counts of number of black and white pixels 
that are
+     *                  being searched for as a pattern
+     * @return start/end horizontal offset of guard pattern, as an array of two
+     *         ints
+     * @throws ReaderException if pattern is not found
+     */
+    int* ITFReader::findGuardPattern(Ref<BitArray> row, int rowOffset, const 
int pattern[],
+        int patternLen) {
+      // TODO: This is very similar to implementation in UPCEANReader. 
Consider if they can be
+      // merged to a single method.
+      int patternLength = patternLen;
+      int counters[patternLength];
+      for (int i=0; i<patternLength; i++) {
+        counters[i] = 0;
+      }
+      int width = row->getSize();
+      bool isWhite = false;
+
+      int counterPosition = 0;
+      int patternStart = rowOffset;
+      for (int x = rowOffset; x < width; x++) {
+        bool pixel = row->get(x);
+        if (pixel ^ isWhite) {
+          counters[counterPosition]++;
+        } else {
+          if (counterPosition == patternLength - 1) {
+            if (patternMatchVariance(counters, patternLength, pattern,
+                MAX_INDIVIDUAL_VARIANCE) < MAX_AVG_VARIANCE) {
+              int* resultValue = new int[2];
+              resultValue[0] = patternStart;
+              resultValue[1] = x;
+              return resultValue;
+            }
+            patternStart += counters[0] + counters[1];
+            for (int y = 2; y < patternLength; y++) {
+              counters[y - 2] = counters[y];
+            }
+            counters[patternLength - 2] = 0;
+            counters[patternLength - 1] = 0;
+            counterPosition--;
+          } else {
+            counterPosition++;
+          }
+          counters[counterPosition] = 1;
+          isWhite = !isWhite;
+        }
+      }
+      throw ReaderException("");
+    }
+
+    /**
+     * Attempts to decode a sequence of ITF black/white lines into single
+     * digit.
+     *
+     * @param counters the counts of runs of observed black/white/black/... 
values
+     * @return The decoded digit
+     * @throws ReaderException if digit cannot be decoded
+     */
+    int ITFReader::decodeDigit(int counters[], int countersLen){
+      unsigned int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll 
accept
+      int bestMatch = -1;
+      int max = PATTERNS_LEN;
+      for (int i = 0; i < max; i++) {
+        int pattern[countersLen];
+        for(int ind = 0; ind<countersLen; ind++){
+          pattern[ind] = PATTERNS[i][ind];
+        }
+        unsigned int variance = patternMatchVariance(counters, countersLen, 
pattern,
+            MAX_INDIVIDUAL_VARIANCE);
+        if (variance < bestVariance) {
+          bestVariance = variance;
+          bestMatch = i;
+        }
+      }
+      if (bestMatch >= 0) {
+        return bestMatch;
+      } else {
+        throw ReaderException("digit didint found");
+      }
+    }
+
+    ITFReader::~ITFReader(){
+    }
+  }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/ITFReader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/ITFReader.h                
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/ITFReader.h        
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,53 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __ITF_READER_H__
+#define __ITF_READER_H__
+
+/*
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/oned/OneDReader.h>
+#include <zxing/common/BitArray.h>
+#include <zxing/Result.h>
+
+namespace zxing {
+       namespace oned {
+               class ITFReader : public OneDReader {
+                       
+               private:
+      enum {MAX_AVG_VARIANCE = (unsigned int) 
(PATTERN_MATCH_RESULT_SCALE_FACTOR * 420/1000)};
+                       enum {MAX_INDIVIDUAL_VARIANCE = (int) 
(PATTERN_MATCH_RESULT_SCALE_FACTOR * 800/1000)};
+                       // Stores the actual narrow line width of the image 
being decoded.
+                       int narrowLineWidth;
+                       
+                       int* decodeStart(Ref<BitArray> row);                    
                                                                                
                                        //throws ReaderException
+                       int* decodeEnd(Ref<BitArray> row);                      
                                                                                
                                                        //throws 
ReaderException 
+                       static void decodeMiddle(Ref<BitArray> row, int 
payloadStart, int payloadEnd, std::string& resultString);       //throws 
ReaderException
+                       void validateQuietZone(Ref<BitArray> row, int 
startPattern);                                                                  
                          //throws ReaderException 
+                       static int skipWhiteSpace(Ref<BitArray> row);           
                                                                                
                                //throws ReaderException 
+                       
+                       static int* findGuardPattern(Ref<BitArray> row, int 
rowOffset, const int pattern[], int patternLen);            //throws 
ReaderException
+                       static int decodeDigit(int counters[], int 
countersLen);                                                                   
                                     //throws ReaderException 
+                       
+                       void append(char* s, char c);
+               public:
+                       Ref<Result> decodeRow(int rowNumber, Ref<BitArray> 
row);                                                                        
///throws ReaderException
+                       ITFReader();
+                       ~ITFReader();
+               };
+       }
+}
+
+#endif

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatOneDReader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatOneDReader.cpp  
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatOneDReader.cpp  
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,66 @@
+/*
+ *  MultiFormatOneDReader.cpp
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MultiFormatOneDReader.h"
+
+#include <zxing/oned/MultiFormatUPCEANReader.h>
+#include <zxing/oned/Code39Reader.h>
+#include <zxing/oned/Code128Reader.h>
+#include <zxing/oned/ITFReader.h>
+#include <zxing/ReaderException.h>
+
+namespace zxing {
+  namespace oned {
+    MultiFormatOneDReader::MultiFormatOneDReader(DecodeHints hints) : 
readers() {
+      if (hints.containsFormat(BarcodeFormat_EAN_13) ||
+          hints.containsFormat(BarcodeFormat_EAN_8) ||
+          hints.containsFormat(BarcodeFormat_UPC_A) ||
+          hints.containsFormat(BarcodeFormat_UPC_E)) {
+        readers.push_back(Ref<OneDReader>(new MultiFormatUPCEANReader(hints)));
+      }
+      if (hints.containsFormat(BarcodeFormat_CODE_39)) {
+        readers.push_back(Ref<OneDReader>(new Code39Reader()));
+      }
+      if (hints.containsFormat(BarcodeFormat_CODE_128)) {
+        readers.push_back(Ref<OneDReader>(new Code128Reader()));
+      }
+      if (hints.containsFormat(BarcodeFormat_ITF)) {
+        readers.push_back(Ref<OneDReader>(new ITFReader()));
+      }
+      if (readers.size() == 0) {
+        readers.push_back(Ref<OneDReader>(new MultiFormatUPCEANReader(hints)));
+        readers.push_back(Ref<OneDReader>(new Code39Reader()));
+        readers.push_back(Ref<OneDReader>(new Code128Reader()));
+        readers.push_back(Ref<OneDReader>(new ITFReader()));
+      }
+    }
+
+    Ref<Result> MultiFormatOneDReader::decodeRow(int rowNumber, Ref<BitArray> 
row) {
+      int size = readers.size();
+      for (int i = 0; i < size; i++) {
+        OneDReader* reader = readers[i];
+        Ref<Result> result = reader->decodeRow(rowNumber, row);
+        if (!result.empty()) {
+          return result;
+        }
+      }
+      return Ref<Result>();
+    }
+  }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatOneDReader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatOneDReader.h    
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatOneDReader.h    
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,38 @@
+#ifndef __MULTI_FORMAT_ONED_READER_H__
+#define __MULTI_FORMAT_ONED_READER_H__
+/*
+ *  MultiFormatOneDReader.h
+ *  ZXing
+ *
+  *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/oned/OneDReader.h>
+
+namespace zxing {
+  namespace oned {
+    class MultiFormatOneDReader : public OneDReader {
+
+    private:
+      std::vector<Ref<OneDReader> > readers;
+    public:
+      MultiFormatOneDReader(DecodeHints hints);
+
+      Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
+    };
+  }
+}
+
+#endif

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatUPCEANReader.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatUPCEANReader.cpp    
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatUPCEANReader.cpp    
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,87 @@
+/*
+ *  MultiFormatUPCEANReader.cpp
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "MultiFormatUPCEANReader.h"
+
+#include <zxing/oned/EAN13Reader.h>
+#include <zxing/oned/EAN8Reader.h>
+#include <zxing/oned/UPCEReader.h>
+#include <zxing/oned/UPCAReader.h>
+#include <zxing/oned/OneDResultPoint.h>
+#include <zxing/common/Array.h>
+#include <zxing/ReaderException.h>
+#include <math.h>
+
+namespace zxing {
+  namespace oned {
+
+    MultiFormatUPCEANReader::MultiFormatUPCEANReader(DecodeHints hints) : 
readers() {
+      if (hints.containsFormat(BarcodeFormat_EAN_13)) {
+        readers.push_back(Ref<OneDReader>(new EAN13Reader()));
+      } else if (hints.containsFormat(BarcodeFormat_UPC_A)) {
+        readers.push_back(Ref<OneDReader>(new UPCAReader()));
+      }
+      if (hints.containsFormat(BarcodeFormat_EAN_8)) {
+        readers.push_back(Ref<OneDReader>(new EAN8Reader()));
+      }
+      if (hints.containsFormat(BarcodeFormat_UPC_E)) {
+        readers.push_back(Ref<OneDReader>(new UPCEReader()));
+      }
+      if (readers.size() == 0) {
+        readers.push_back(Ref<OneDReader>(new EAN13Reader()));
+        // UPC-A is covered by EAN-13
+        readers.push_back(Ref<OneDReader>(new EAN8Reader()));
+        readers.push_back(Ref<OneDReader>(new UPCEReader()));
+      }
+    }
+
+    Ref<Result> MultiFormatUPCEANReader::decodeRow(int rowNumber, 
Ref<BitArray> row) {
+      // Compute this location once and reuse it on multiple implementations
+      int size = readers.size();
+      for (int i = 0; i < size; i++) {
+        Ref<OneDReader> reader = readers[i];
+        Ref<Result> result = reader->decodeRow(rowNumber, row);
+        if (result.empty()) {
+          continue;
+        }
+
+        // Special case: a 12-digit code encoded in UPC-A is identical to a "0"
+        // followed by those 12 digits encoded as EAN-13. Each will recognize 
such a code,
+        // UPC-A as a 12-digit string and EAN-13 as a 13-digit string starting 
with "0".
+        // Individually these are correct and their readers will both read 
such a code
+        // and correctly call it EAN-13, or UPC-A, respectively.
+        //
+        // In this case, if we've been looking for both types, we'd like to 
call it
+        // a UPC-A code. But for efficiency we only run the EAN-13 decoder to 
also read
+        // UPC-A. So we special case it here, and convert an EAN-13 result to 
a UPC-A
+        // result if appropriate.
+        if (result->getBarcodeFormat() == BarcodeFormat_EAN_13) {
+          const std::string& text = (result->getText())->getText();
+          if (text[0] == '0') {
+            Ref<String> resultString(new String(text.substr(1)));
+            Ref<Result> res(new Result(resultString, result->getRawBytes(),
+                result->getResultPoints(), BarcodeFormat_UPC_A));
+            return res;
+          }
+        }
+        return result;
+      }
+      return Ref<Result>();
+    }
+  }
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatUPCEANReader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatUPCEANReader.h  
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/MultiFormatUPCEANReader.h  
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,38 @@
+#ifndef __MULTI_FORMAT_UPC_EAN_READER_H__
+#define __MULTI_FORMAT_UPC_EAN_READER_H__
+/*
+ *  MultiFormatUPCEANReader.h
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/oned/OneDReader.h>
+
+namespace zxing {
+  namespace oned {
+    class MultiFormatUPCEANReader : public OneDReader {
+
+    private:
+      std::vector<Ref<OneDReader> > readers;
+    public:
+      MultiFormatUPCEANReader(DecodeHints hints);
+
+      Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
+    };
+  }
+}
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDReader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDReader.cpp             
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDReader.cpp     
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,207 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  OneDReader.cpp
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "OneDReader.h"
+#include <zxing/ReaderException.h>
+#include <zxing/oned/OneDResultPoint.h>
+#include <math.h>
+#include <limits.h>
+
+namespace zxing {
+  namespace oned {
+    using namespace std;
+
+    OneDReader::OneDReader() {
+    }
+
+    Ref<Result> OneDReader::decode(Ref<BinaryBitmap> image, DecodeHints hints) 
{
+      Ref<Result> result = doDecode(image, hints);
+      if (result.empty() && hints.getTryHarder() && 
image->isRotateSupported()) {
+        Ref<BinaryBitmap> rotatedImage(image->rotateCounterClockwise());
+        result = doDecode(rotatedImage, hints);
+        if (!result.empty()) {
+          /*
+          // Record that we found it rotated 90 degrees CCW / 270 degrees CW
+          Hashtable metadata = result.getResultMetadata();
+          int orientation = 270;
+          if (metadata != null && 
metadata.containsKey(ResultMetadataType.ORIENTATION)) {
+            // But if we found it reversed in doDecode(), add in that result 
here:
+            orientation = (orientation +
+                     ((Integer) 
metadata.get(ResultMetadataType.ORIENTATION)).intValue()) % 360;
+          }
+          result.putMetadata(ResultMetadataType.ORIENTATION, new 
Integer(orientation));
+          */
+          // Update result points
+          std::vector<Ref<ResultPoint> >& points (result->getResultPoints());
+          int height = rotatedImage->getHeight();
+          for (size_t i = 0; i < points.size(); i++) {
+            points[i].reset(new OneDResultPoint(height - points[i]->getY() - 
1, points[i]->getX()));
+          }
+        }
+      }
+      if (result.empty()) {
+        throw ReaderException("");
+      }
+      return result;
+    }
+
+    Ref<Result> OneDReader::doDecode(Ref<BinaryBitmap> image, DecodeHints 
hints) {
+      int width = image->getWidth();
+      int height = image->getHeight();
+      Ref<BitArray> row(new BitArray(width));
+      int middle = height >> 1;
+      bool tryHarder = hints.getTryHarder();
+      int rowStep = (int)fmax(1, height >> (tryHarder ? 8 : 5));
+      int maxLines;
+      if (tryHarder) {
+        maxLines = height; // Look at the whole image, not just the center
+      } else {
+        maxLines = 15; // 15 rows spaced 1/32 apart is roughly the middle half 
of the image
+      }
+
+      for (int x = 0; x < maxLines; x++) {
+        // Scanning from the middle out. Determine which row we're looking at 
next:
+        int rowStepsAboveOrBelow = (x + 1) >> 1;
+        bool isAbove = (x & 0x01) == 0; // i.e. is x even?
+        int rowNumber = middle + rowStep * (isAbove ? rowStepsAboveOrBelow : 
-rowStepsAboveOrBelow);
+        if (rowNumber < 0 || rowNumber >= height) {
+          // Oops, if we run off the top or bottom, stop
+          break;
+        }
+
+        // Estimate black point for this row and load it:
+        try {
+          row = image->getBlackRow(rowNumber, row);
+        } catch (ReaderException const& re) {
+          continue;
+        } catch (IllegalArgumentException const& re) {
+          continue;
+        }
+
+        // While we have the image data in a BitArray, it's fairly cheap to 
reverse it in place to
+        // handle decoding upside down barcodes.
+        for (int attempt = 0; attempt < 2; attempt++) {
+          if (attempt == 1) {
+            row->reverse(); // reverse the row and continue
+          }
+
+          // Look for a barcode
+          Ref<Result> result = decodeRow(rowNumber, row);
+          // We found our barcode
+          if (!result.empty()) {
+            if (attempt == 1) {
+              // But it was upside down, so note that
+              // result.putMetadata(ResultMetadataType.ORIENTATION, new 
Integer(180));
+              // And remember to flip the result points horizontally.
+              std::vector<Ref<ResultPoint> > points(result->getResultPoints());
+              // if there's exactly two points (which there should be), flip 
the x coordinate
+              // if there's not exactly 2, I don't know what do do with it
+              if (points.size() == 2) {
+                Ref<ResultPoint> pointZero(new OneDResultPoint(width - 
points[0]->getX() - 1,
+                    points[0]->getY()));
+                points[0] = pointZero;
+
+                Ref<ResultPoint> pointOne(new OneDResultPoint(width - 
points[1]->getX() - 1,
+                    points[1]->getY()));
+                points[1] = pointOne;
+
+                result.reset(new Result(result->getText(), 
result->getRawBytes(), points,
+                    result->getBarcodeFormat()));
+              }
+            }
+            return result;
+          }
+        }
+      }
+      return Ref<Result>();
+    }
+
+    unsigned int OneDReader::patternMatchVariance(int counters[], int 
countersSize,
+        const int pattern[], int maxIndividualVariance) {
+      int numCounters = countersSize;
+      unsigned int total = 0;
+      unsigned int patternLength = 0;
+      for (int i = 0; i < numCounters; i++) {
+        total += counters[i];
+        patternLength += pattern[i];
+      }
+      if (total < patternLength) {
+        // If we don't even have one pixel per unit of bar width, assume this 
is too small
+        // to reliably match, so fail:
+        return INT_MAX;
+      }
+      // We're going to fake floating-point math in integers. We just need to 
use more bits.
+      // Scale up patternLength so that intermediate values below like 
scaledCounter will have
+      // more "significant digits"
+      unsigned int unitBarWidth = (total << INTEGER_MATH_SHIFT) / 
patternLength;
+      maxIndividualVariance = (maxIndividualVariance * unitBarWidth) >> 
INTEGER_MATH_SHIFT;
+
+      unsigned int totalVariance = 0;
+      for (int x = 0; x < numCounters; x++) {
+        int counter = counters[x] << INTEGER_MATH_SHIFT;
+        int scaledPattern = pattern[x] * unitBarWidth;
+        int variance = counter > scaledPattern ? counter - scaledPattern : 
scaledPattern - counter;
+        if (variance > maxIndividualVariance) {
+          return INT_MAX;
+        }
+        totalVariance += variance;
+      }
+      return totalVariance / total;
+    }
+
+    bool OneDReader::recordPattern(Ref<BitArray> row, int start, int 
counters[], int countersCount) {
+      int numCounters = countersCount;//sizeof(counters) / sizeof(int);
+      for (int i = 0; i < numCounters; i++) {
+        counters[i] = 0;
+      }
+      int end = row->getSize();
+      if (start >= end) {
+        return false;
+      }
+      bool isWhite = !row->get(start);
+      int counterPosition = 0;
+      int i = start;
+      while (i < end) {
+        bool pixel = row->get(i);
+        if (pixel ^ isWhite) { // that is, exactly one is true
+          counters[counterPosition]++;
+        } else {
+          counterPosition++;
+          if (counterPosition == numCounters) {
+            break;
+          } else {
+            counters[counterPosition] = 1;
+            isWhite ^= true; // isWhite = !isWhite;
+          }
+        }
+        i++;
+      }
+      // If we read fully the last section of pixels and filled up our 
counters -- or filled
+      // the last counter but ran off the side of the image, OK. Otherwise, a 
problem.
+      if (!(counterPosition == numCounters || (counterPosition == numCounters 
- 1 && i == end))) {
+        return false;
+      }
+      return true;
+    }
+
+    OneDReader::~OneDReader() {
+    }
+  }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDReader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDReader.h               
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDReader.h       
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,50 @@
+#ifndef __ONED_READER_H__
+#define __ONED_READER_H__
+
+/*
+ *  OneDReader.h
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/Reader.h>
+
+namespace zxing {
+       namespace oned {
+               class OneDReader : public Reader {
+               private:
+                       static const int INTEGER_MATH_SHIFT = 8;
+
+                       Ref<Result> doDecode(Ref<BinaryBitmap> image, 
DecodeHints hints);
+               public:
+                       static const int PATTERN_MATCH_RESULT_SCALE_FACTOR = 1 
<< INTEGER_MATH_SHIFT;
+
+                       OneDReader();
+                       virtual Ref<Result> decode(Ref<BinaryBitmap> image, 
DecodeHints hints);
+
+                       // Implementations must not throw any exceptions. If a 
barcode is not found on this row,
+                       // a empty ref should be returned e.g. return 
Ref<Result>();
+                       virtual Ref<Result> decodeRow(int rowNumber, 
Ref<BitArray> row) = 0;
+
+                       static unsigned int patternMatchVariance(int 
counters[], int countersSize,
+                           const int pattern[], int maxIndividualVariance);
+                       static bool recordPattern(Ref<BitArray> row, int start, 
int counters[], int countersCount);
+                       virtual ~OneDReader();
+               };
+       }
+}
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDResultPoint.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDResultPoint.cpp        
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDResultPoint.cpp        
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,28 @@
+/*
+ *  OneDResultPoint.cpp
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "OneDResultPoint.h"
+
+namespace zxing {
+       namespace oned {
+
+               OneDResultPoint::OneDResultPoint(float posX, float posY) : 
ResultPoint(posX,posY) {
+               }
+       }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDResultPoint.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDResultPoint.h          
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/OneDResultPoint.h  
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,35 @@
+#ifndef __ONED_RESULT_POINT_H__
+#define __ONED_RESULT_POINT_H__
+/*
+ *  OneDResultPoint.h
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <zxing/ResultPoint.h>
+#include <cmath>
+
+namespace zxing {
+       namespace oned {
+               
+               class OneDResultPoint : public ResultPoint {
+                       
+               public:
+                       OneDResultPoint(float posX, float posY);
+               };
+       }
+}
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCAReader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCAReader.cpp             
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCAReader.cpp     
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,65 @@
+/*
+ *  UPCAReader.cpp
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "UPCAReader.h"
+#include <zxing/ReaderException.h>
+
+namespace zxing {
+  namespace oned {
+    UPCAReader::UPCAReader() : ean13Reader() {
+    }
+
+    Ref<Result> UPCAReader::decodeRow(int rowNumber, Ref<BitArray> row) {
+      return maybeReturnResult(ean13Reader.decodeRow(rowNumber, row));
+    }
+
+    Ref<Result> UPCAReader::decodeRow(int rowNumber, Ref<BitArray> row, int 
startGuardBegin,
+        int startGuardEnd) {
+      return maybeReturnResult(ean13Reader.decodeRow(rowNumber, row, 
startGuardBegin,
+          startGuardEnd));
+    }
+
+    Ref<Result> UPCAReader::decode(Ref<BinaryBitmap> image, DecodeHints hints) 
{
+      return maybeReturnResult(ean13Reader.decode(image, hints));
+    }
+
+    int UPCAReader::decodeMiddle(Ref<BitArray> row, int startGuardBegin, int 
startGuardEnd,
+        std::string& resultString) {
+      return ean13Reader.decodeMiddle(row, startGuardBegin, startGuardEnd, 
resultString);
+    }
+
+    Ref<Result> UPCAReader::maybeReturnResult(Ref<Result> result) {
+      if (result.empty()) {
+        return result;
+      }
+      const std::string& text = (result->getText())->getText();
+      if (text[0] == '0') {
+        Ref<String> resultString(new String(text.substr(1)));
+        Ref<Result> res(new Result(resultString, result->getRawBytes(), 
result->getResultPoints(),
+            BarcodeFormat_UPC_A));
+        return res;
+      }
+      return Ref<Result>();
+    }
+
+    BarcodeFormat UPCAReader::getBarcodeFormat(){
+      return BarcodeFormat_UPC_A;
+    }
+  }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCAReader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCAReader.h               
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCAReader.h       
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,49 @@
+#ifndef __UPCA_READER_H__
+#define __UPCA_READER_H__
+/*
+ *  UPCAReader.h
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/oned/EAN13Reader.h>
+#include <zxing/DecodeHints.h>
+
+namespace zxing {
+  namespace oned {
+    class UPCAReader : public UPCEANReader {
+
+    private:
+      EAN13Reader ean13Reader;
+      static Ref<Result> maybeReturnResult(Ref<Result> result);
+
+    public:
+      UPCAReader();
+
+      int decodeMiddle(Ref<BitArray> row, int startGuardBegin, int 
startGuardEnd,
+          std::string& resultString);
+
+      Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
+      Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row, int 
startGuardBegin,
+          int startGuardEnd);
+      Ref<Result> decode(Ref<BinaryBitmap> image, DecodeHints hints);
+
+      BarcodeFormat getBarcodeFormat();
+    };
+  }
+}
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEANReader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEANReader.cpp           
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEANReader.cpp   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,311 @@
+/*
+ *  UPCEANReader.cpp
+ *  ZXing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "UPCEANReader.h"
+#include <zxing/oned/OneDResultPoint.h>
+#include <zxing/ReaderException.h>
+
+namespace zxing {
+  namespace oned {
+
+    /**
+     * Start/end guard pattern.
+     */
+    static const int START_END_PATTERN[3] = {1, 1, 1};
+
+    /**
+     * Pattern marking the middle of a UPC/EAN pattern, separating the two 
halves.
+     */
+    static const int MIDDLE_PATTERN_LEN = 5;
+    static const int MIDDLE_PATTERN[MIDDLE_PATTERN_LEN] = {1, 1, 1, 1, 1};
+
+    /**
+     * "Odd", or "L" patterns used to encode UPC/EAN digits.
+     */
+    const int L_PATTERNS_LEN = 10;
+    const int L_PATTERNS_SUB_LEN = 4;
+    const int L_PATTERNS[L_PATTERNS_LEN][L_PATTERNS_SUB_LEN] = {
+      {3, 2, 1, 1}, // 0
+      {2, 2, 2, 1}, // 1
+      {2, 1, 2, 2}, // 2
+      {1, 4, 1, 1}, // 3
+      {1, 1, 3, 2}, // 4
+      {1, 2, 3, 1}, // 5
+      {1, 1, 1, 4}, // 6
+      {1, 3, 1, 2}, // 7
+      {1, 2, 1, 3}, // 8
+      {3, 1, 1, 2}  // 9
+    };
+
+    /**
+     * As above but also including the "even", or "G" patterns used to encode 
UPC/EAN digits.
+     */
+    const int L_AND_G_PATTERNS_LEN = 20;
+    const int L_AND_G_PATTERNS_SUB_LEN = 4;
+    const int L_AND_G_PATTERNS[L_AND_G_PATTERNS_LEN][L_AND_G_PATTERNS_SUB_LEN] 
= {
+      {3, 2, 1, 1}, // 0
+      {2, 2, 2, 1}, // 1
+      {2, 1, 2, 2}, // 2
+      {1, 4, 1, 1}, // 3
+      {1, 1, 3, 2}, // 4
+      {1, 2, 3, 1}, // 5
+      {1, 1, 1, 4}, // 6
+      {1, 3, 1, 2}, // 7
+      {1, 2, 1, 3}, // 8
+      {3, 1, 1, 2}, // 9
+      {1, 1, 2, 3}, // 10 reversed 0
+      {1, 2, 2, 2}, // 11 reversed 1
+      {2, 2, 1, 2}, // 12 reversed 2
+      {1, 1, 4, 1}, // 13 reversed 3
+      {2, 3, 1, 1}, // 14 reversed 4
+      {1, 3, 2, 1}, // 15 reversed 5
+      {4, 1, 1, 1}, // 16 reversed 6
+      {2, 1, 3, 1}, // 17 reversed 7
+      {3, 1, 2, 1}, // 18 reversed 8
+      {2, 1, 1, 3}  // 19 reversed 9
+    };
+
+
+    int UPCEANReader::getMIDDLE_PATTERN_LEN() {
+      return MIDDLE_PATTERN_LEN;
+    }
+
+    const int* UPCEANReader::getMIDDLE_PATTERN() {
+      return MIDDLE_PATTERN;
+    }
+
+    UPCEANReader::UPCEANReader() {
+    }
+
+
+    Ref<Result> UPCEANReader::decodeRow(int rowNumber, Ref<BitArray> row) {
+      int rangeStart;
+      int rangeEnd;
+                       if (findStartGuardPattern(row, &rangeStart, &rangeEnd)) 
{
+        try {
+          return decodeRow(rowNumber, row, rangeStart, rangeEnd);
+        } catch (ReaderException const& re) {
+        }
+                       }
+                       return Ref<Result>();
+    }
+
+    Ref<Result> UPCEANReader::decodeRow(int rowNumber, Ref<BitArray> row, int 
startGuardBegin,
+        int startGuardEnd) {
+      std::string tmpResultString;
+      std::string& tmpResultStringRef = tmpResultString;
+      int endStart = decodeMiddle(row, startGuardBegin, startGuardEnd, 
tmpResultStringRef);
+      if (endStart < 0) {
+        return Ref<Result>();
+      }
+
+      int endGuardBegin;
+      int endGuardEnd;
+      if (!decodeEnd(row, endStart, &endGuardBegin, &endGuardEnd)) {
+        return Ref<Result>();
+      }
+
+      // Make sure there is a quiet zone at least as big as the end pattern 
after the barcode.
+      // The spec might want more whitespace, but in practice this is the 
maximum we can count on.
+      size_t quietEnd = endGuardEnd + (endGuardEnd - endGuardBegin);
+      if (quietEnd >= row->getSize() || !row->isRange(endGuardEnd, quietEnd, 
false)) {
+        return Ref<Result>();
+      }
+
+      if (!checkChecksum(tmpResultString)) {
+        return Ref<Result>();
+      }
+
+      Ref<String> resultString(new String(tmpResultString));
+      float left = (float) (startGuardBegin + startGuardEnd) / 2.0f;
+      float right = (float) (endGuardBegin + endGuardEnd) / 2.0f;
+
+      std::vector< Ref<ResultPoint> > resultPoints(2);
+      Ref<OneDResultPoint> resultPoint1(new OneDResultPoint(left, (float) 
rowNumber));
+      Ref<OneDResultPoint> resultPoint2(new OneDResultPoint(right, (float) 
rowNumber));
+      resultPoints[0] = resultPoint1;
+      resultPoints[1] = resultPoint2;
+
+      ArrayRef<unsigned char> resultBytes(1);
+      return Ref<Result>(new Result(resultString, resultBytes, resultPoints, 
getBarcodeFormat()));
+    }
+
+    bool UPCEANReader::findStartGuardPattern(Ref<BitArray> row, int* 
rangeStart, int* rangeEnd) {
+      int nextStart = 0;
+      while (findGuardPattern(row, nextStart, false, START_END_PATTERN,
+          sizeof(START_END_PATTERN) / sizeof(int), rangeStart, rangeEnd)) {
+        int start = *rangeStart;
+        nextStart = *rangeEnd;
+        // Make sure there is a quiet zone at least as big as the start 
pattern before the barcode.
+        // If this check would run off the left edge of the image, do not 
accept this barcode,
+        // as it is very likely to be a false positive.
+        int quietStart = start - (nextStart - start);
+        if (quietStart >= 0 && row->isRange(quietStart, start, false)) {
+          return true;
+        }
+      }
+      return false;
+    }
+
+    bool UPCEANReader::findGuardPattern(Ref<BitArray> row, int rowOffset, bool 
whiteFirst,
+        const int pattern[], int patternLen, int* start, int* end) {
+      int patternLength = patternLen;
+      int counters[patternLength];
+      int countersCount = sizeof(counters) / sizeof(int);
+      for (int i = 0; i < countersCount; i++) {
+        counters[i] = 0;
+      }
+      int width = row->getSize();
+      bool isWhite = false;
+      while (rowOffset < width) {
+        isWhite = !row->get(rowOffset);
+        if (whiteFirst == isWhite) {
+          break;
+        }
+        rowOffset++;
+      }
+
+      int counterPosition = 0;
+      int patternStart = rowOffset;
+      for (int x = rowOffset; x < width; x++) {
+        bool pixel = row->get(x);
+        if (pixel ^ isWhite) {
+          counters[counterPosition]++;
+        } else {
+          if (counterPosition == patternLength - 1) {
+            if (patternMatchVariance(counters, countersCount, pattern,
+                MAX_INDIVIDUAL_VARIANCE) < MAX_AVG_VARIANCE) {
+              *start = patternStart;
+              *end = x;
+              return true;
+            }
+            patternStart += counters[0] + counters[1];
+            for (int y = 2; y < patternLength; y++) {
+              counters[y - 2] = counters[y];
+            }
+            counters[patternLength - 2] = 0;
+            counters[patternLength - 1] = 0;
+            counterPosition--;
+          } else {
+            counterPosition++;
+          }
+          counters[counterPosition] = 1;
+          isWhite = !isWhite;
+        }
+      }
+      return false;
+    }
+
+    bool UPCEANReader::decodeEnd(Ref<BitArray> row, int endStart, int* 
endGuardBegin,
+        int* endGuardEnd) {
+      return findGuardPattern(row, endStart, false, START_END_PATTERN,
+          sizeof(START_END_PATTERN) / sizeof(int), endGuardBegin, endGuardEnd);
+    }
+
+    int UPCEANReader::decodeDigit(Ref<BitArray> row, int counters[], int 
countersLen, int rowOffset,
+        UPC_EAN_PATTERNS patternType) {
+      if (!recordPattern(row, rowOffset, counters, countersLen)) {
+        return -1;
+      }
+      unsigned int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll 
accept
+      int bestMatch = -1;
+
+      int max = 0;
+      switch (patternType) {
+        case UPC_EAN_PATTERNS_L_PATTERNS:
+          max = L_PATTERNS_LEN;
+          for (int i = 0; i < max; i++) {
+            int pattern[countersLen];
+            for(int j = 0; j< countersLen; j++){
+              pattern[j] = L_PATTERNS[i][j];
+            }
+
+            unsigned int variance = patternMatchVariance(counters, 
countersLen, pattern,
+                MAX_INDIVIDUAL_VARIANCE);
+            if (variance < bestVariance) {
+              bestVariance = variance;
+              bestMatch = i;
+            }
+          }
+          break;
+        case UPC_EAN_PATTERNS_L_AND_G_PATTERNS:
+          max = L_AND_G_PATTERNS_LEN;
+          for (int i = 0; i < max; i++) {
+            int pattern[countersLen];
+            for(int j = 0; j< countersLen; j++){
+              pattern[j] = L_AND_G_PATTERNS[i][j];
+            }
+
+            unsigned int variance = patternMatchVariance(counters, 
countersLen, pattern,
+                MAX_INDIVIDUAL_VARIANCE);
+            if (variance < bestVariance) {
+              bestVariance = variance;
+              bestMatch = i;
+            }
+          }
+          break;
+        default:
+          break;
+      }
+      return bestMatch;
+    }
+
+    /**
+     * @return address@hidden #checkStandardUPCEANChecksum(String)}
+     */
+    bool UPCEANReader::checkChecksum(std::string s) {
+      return checkStandardUPCEANChecksum(s);
+    }
+
+    /**
+     * Computes the UPC/EAN checksum on a string of digits, and reports
+     * whether the checksum is correct or not.
+     *
+     * @param s string of digits to check
+     * @return true iff string of digits passes the UPC/EAN checksum algorithm
+     */
+    bool UPCEANReader::checkStandardUPCEANChecksum(std::string s) {
+      int length = s.length();
+      if (length == 0) {
+        return false;
+      }
+
+      int sum = 0;
+      for (int i = length - 2; i >= 0; i -= 2) {
+        int digit = (int) s[i] - (int) '0';
+        if (digit < 0 || digit > 9) {
+          return false;
+        }
+        sum += digit;
+      }
+      sum *= 3;
+      for (int i = length - 1; i >= 0; i -= 2) {
+        int digit = (int) s[i] - (int) '0';
+        if (digit < 0 || digit > 9) {
+          return false;
+        }
+        sum += digit;
+      }
+      return sum % 10 == 0;
+    }
+
+    UPCEANReader::~UPCEANReader() {
+    }
+  }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEANReader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEANReader.h             
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEANReader.h     
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,75 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __UPC_EAN_READER_H__
+#define __UPC_EAN_READER_H__
+
+/*
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/oned/OneDReader.h>
+#include <zxing/common/BitArray.h>
+#include <zxing/Result.h>
+
+typedef enum UPC_EAN_PATTERNS {
+       UPC_EAN_PATTERNS_L_PATTERNS = 0,
+       UPC_EAN_PATTERNS_L_AND_G_PATTERNS
+} UPC_EAN_PATTERNS;
+
+namespace zxing {
+       namespace oned {
+               class UPCEANReader : public OneDReader {
+
+               private:
+      enum {MAX_AVG_VARIANCE = (unsigned int) 
(PATTERN_MATCH_RESULT_SCALE_FACTOR * 420/1000)};
+      enum {MAX_INDIVIDUAL_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR 
* 700/1000)};
+
+                       static bool findStartGuardPattern(Ref<BitArray> row, 
int* rangeStart, int* rangeEnd);
+
+                       virtual bool decodeEnd(Ref<BitArray> row, int endStart, 
int* endGuardBegin, int* endGuardEnd);
+
+                       static bool checkStandardUPCEANChecksum(std::string s);
+               protected:
+                       static bool findGuardPattern(Ref<BitArray> row, int 
rowOffset, bool whiteFirst,
+                           const int pattern[], int patternLen, int* start, 
int* end);
+
+                       virtual int getMIDDLE_PATTERN_LEN();
+                       virtual const int* getMIDDLE_PATTERN();
+
+               public:
+                       UPCEANReader();
+
+      // Returns < 0 on failure, >= 0 on success.
+                       virtual int decodeMiddle(Ref<BitArray> row, int 
startGuardBegin, int startGuardEnd,
+                           std::string& resultString) = 0;
+
+                       Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
+
+                       // TODO(dswitkin): Should this be virtual so that 
UPCAReader can override it?
+                       Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row, 
int startGuardBegin,
+          int startGuardEnd);
+
+      // Returns < 0 on failure, >= 0 on success.
+                       static int decodeDigit(Ref<BitArray> row, int 
counters[], int countersLen, int rowOffset,
+                           UPC_EAN_PATTERNS patternType);
+
+                       virtual bool checkChecksum(std::string s);
+
+                       virtual BarcodeFormat getBarcodeFormat() = 0;
+                       virtual ~UPCEANReader();
+               };
+       }
+}
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEReader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEReader.cpp             
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEReader.cpp     
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,147 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "UPCEReader.h"
+#include <zxing/ReaderException.h>
+#include <qglobal.h>
+
+namespace zxing {
+  namespace oned {
+
+    /**
+     * The pattern that marks the middle, and end, of a UPC-E pattern.
+     * There is no "second half" to a UPC-E barcode.
+     */
+    static const int MIDDLE_END_PATTERN[6] = {1, 1, 1, 1, 1, 1};
+
+    /**
+     * See address@hidden #L_AND_G_PATTERNS}; these values similarly represent 
patterns of
+     * even-odd parity encodings of digits that imply both the number system 
(0 or 1)
+     * used, and the check digit.
+     */
+    static const int NUMSYS_AND_CHECK_DIGIT_PATTERNS[2][10] = {
+      {0x38, 0x34, 0x32, 0x31, 0x2C, 0x26, 0x23, 0x2A, 0x29, 0x25},
+      {0x07, 0x0B, 0x0D, 0x0E, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A}
+    };
+
+    UPCEReader::UPCEReader() {
+    }
+
+    int UPCEReader::decodeMiddle(Ref<BitArray> row, int startGuardBegin, int 
startGuardEnd,
+        std::string& resultString) {
+      (void)startGuardBegin;
+      const int countersLen = 4;
+      int counters[countersLen] = { 0, 0, 0, 0 };
+
+      int end = row->getSize();
+      int rowOffset = startGuardEnd;
+      int lgPatternFound = 0;
+
+      for (int x = 0; x < 6 && rowOffset < end; x++) {
+        int bestMatch = decodeDigit(row, counters, countersLen, rowOffset,
+            UPC_EAN_PATTERNS_L_AND_G_PATTERNS);
+        if (bestMatch < 0) {
+          return -1;
+        }
+        resultString.append(1, (char) ('0' + bestMatch % 10));
+        for (int i = 0; i < countersLen; i++) {
+          rowOffset += counters[i];
+        }
+        if (bestMatch >= 10) {
+          lgPatternFound |= 1 << (5 - x);
+        }
+      }
+
+      if (!determineNumSysAndCheckDigit(resultString, lgPatternFound)) {
+        return -1;
+      }
+      return rowOffset;
+    }
+
+    bool UPCEReader::decodeEnd(Ref<BitArray> row, int endStart, int* 
endGuardBegin,
+        int* endGuardEnd) {
+      return findGuardPattern(row, endStart, true, MIDDLE_END_PATTERN,
+          sizeof(MIDDLE_END_PATTERN) / sizeof(int), endGuardBegin, 
endGuardEnd);
+    }
+
+    bool UPCEReader::checkChecksum(std::string s){
+      return UPCEANReader::checkChecksum(convertUPCEtoUPCA(s));
+    }
+
+
+    bool UPCEReader::determineNumSysAndCheckDigit(std::string& resultString, 
int lgPatternFound) {
+      for (int numSys = 0; numSys <= 1; numSys++) {
+        for (int d = 0; d < 10; d++) {
+          if (lgPatternFound == NUMSYS_AND_CHECK_DIGIT_PATTERNS[numSys][d]) {
+#if defined(Q_OS_SYMBIAN)
+            resultString.insert((char*)0, 1, (char) ((int)'0' + numSys));
+#else
+            resultString.insert(/*(char*)*/0, 1, (char) ((int)'0' + numSys));
+#endif
+            resultString.append(1, (char) ('0' + d));
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+
+    /**
+     * Expands a UPC-E value back into its full, equivalent UPC-A code value.
+     *
+     * @param upce UPC-E code as string of digits
+     * @return equivalent UPC-A code as string of digits
+     */
+    std::string UPCEReader::convertUPCEtoUPCA(std::string upce) {
+      std::string result;
+      result.append(1, upce[0]);
+      char lastChar = upce[6];
+      switch (lastChar) {
+        case '0':
+        case '1':
+        case '2':
+          result.append(upce.substr(1,2));
+          result.append(1, lastChar);
+          result.append("0000");
+          result.append(upce.substr(3,3));
+          break;
+        case '3':
+          result.append(upce.substr(1,3));
+          result.append("00000");
+          result.append(upce.substr(4,2));
+          break;
+        case '4':
+          result.append(upce.substr(1,4));
+          result.append("00000");
+          result.append(1, upce[5]);
+          break;
+        default:
+          result.append(upce.substr(1,5));
+          result.append("0000");
+          result.append(1, lastChar);
+          break;
+      }
+      result.append(1, upce[7]);
+      return result;
+    }
+
+
+    BarcodeFormat UPCEReader::getBarcodeFormat() {
+      return BarcodeFormat_UPC_E;
+    }
+  }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEReader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEReader.h               
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/oned/UPCEReader.h       
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,44 @@
+#ifndef __UPC_E_READER_H__
+#define __UPC_E_READER_H__
+
+/*
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/oned/UPCEANReader.h>
+#include <zxing/Result.h>
+
+namespace zxing {
+  namespace oned {
+    class UPCEReader : public UPCEANReader {
+
+    private:
+      static bool determineNumSysAndCheckDigit(std::string& resultString, int 
lgPatternFound);
+    protected:
+      bool decodeEnd(Ref<BitArray> row, int endStart, int* endGuardBegin, int* 
endGuardEnd);
+      bool checkChecksum(std::string s);
+    public:
+      UPCEReader();
+
+      int decodeMiddle(Ref<BitArray> row, int startGuardBegin, int 
startGuardEnd,
+          std::string& resultString);
+      static std::string convertUPCEtoUPCA(std::string upce);
+
+      BarcodeFormat getBarcodeFormat();
+    };
+  }
+}
+
+#endif

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/ErrorCorrectionLevel.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/ErrorCorrectionLevel.h   
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/ErrorCorrectionLevel.h   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,52 @@
+#ifndef __ERROR_CORRECTION_LEVEL_H__
+#define __ERROR_CORRECTION_LEVEL_H__
+
+/*
+ *  ErrorCorrectionLevel.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/ReaderException.h>
+
+namespace zxing {
+namespace qrcode {
+
+class ErrorCorrectionLevel {
+private:
+  int ordinal_;
+  int bits_;
+  std::string name_;
+  ErrorCorrectionLevel(int inOrdinal, int bits, char const* name);
+  static ErrorCorrectionLevel *FOR_BITS[];
+  static int N_LEVELS;
+public:
+  static ErrorCorrectionLevel L;
+  static ErrorCorrectionLevel M;
+  static ErrorCorrectionLevel Q;
+  static ErrorCorrectionLevel H;
+
+  int ordinal() const;
+  int bits() const;
+  std::string const& name() const;
+  operator std::string const& () const;
+
+  static ErrorCorrectionLevel& forBits(int bits);
+};
+}
+}
+
+#endif // __ERROR_CORRECTION_LEVEL_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/FormatInformation.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/FormatInformation.h      
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/FormatInformation.h      
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,54 @@
+#ifndef __FORMAT_INFORMATION_H__
+#define __FORMAT_INFORMATION_H__
+
+/*
+ *  FormatInformation.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/ErrorCorrectionLevel.h>
+#include <zxing/common/Counted.h>
+#include <iostream>
+
+namespace zxing {
+namespace qrcode {
+
+class FormatInformation : public Counted {
+private:
+  static int FORMAT_INFO_MASK_QR;
+  static int FORMAT_INFO_DECODE_LOOKUP[][2];
+  static int N_FORMAT_INFO_DECODE_LOOKUPS;
+  static int BITS_SET_IN_HALF_BYTE[];
+
+  ErrorCorrectionLevel &errorCorrectionLevel_;
+  unsigned char dataMask_;
+
+  FormatInformation(int formatInfo);
+
+public:
+  static int numBitsDiffering(unsigned int a, unsigned int b);
+  static Ref<FormatInformation> decodeFormatInformation(int maskedFormatInfo1, 
int maskedFormatInfo2);
+  static Ref<FormatInformation> doDecodeFormatInformation(int 
maskedFormatInfo1, int maskedFormatInfo2);
+  ErrorCorrectionLevel &getErrorCorrectionLevel();
+  unsigned char getDataMask();
+  friend bool operator==(const FormatInformation &a, const FormatInformation 
&b);
+  friend std::ostream& operator<<(std::ostream& out, const FormatInformation& 
fi);
+};
+}
+}
+
+#endif // __FORMAT_INFORMATION_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRCodeReader.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRCodeReader.cpp         
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRCodeReader.cpp 
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,86 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  QRCodeReader.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 20/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/QRCodeReader.h>
+#include <zxing/qrcode/detector/Detector.h>
+
+#include <iostream>
+
+namespace zxing {
+       namespace qrcode {
+               
+               using namespace std;
+               
+               QRCodeReader::QRCodeReader() :decoder_() {
+               }
+               //TODO: see if any of the other files in the qrcode tree need 
tryHarder
+               Ref<Result> QRCodeReader::decode(Ref<BinaryBitmap> image, 
DecodeHints hints) {
+#ifdef DEBUG
+                       cout << "decoding image " << image.object_ << ":\n" << 
flush;
+#endif
+                       
+                       Detector detector(image->getBlackMatrix());
+                       
+                       
+#ifdef DEBUG
+                       cout << "(1) created detector " << &detector << "\n" << 
flush;
+#endif
+                       
+                       Ref<DetectorResult> 
detectorResult(detector.detect(hints));
+#ifdef DEBUG
+                       cout << "(2) detected, have detectorResult " << 
detectorResult.object_ << "\n" << flush;
+#endif
+                       
+                       std::vector<Ref<ResultPoint> > 
points(detectorResult->getPoints());
+                       
+                       
+#ifdef DEBUG
+                       cout << "(3) extracted points " << &points << "\n" << 
flush;
+                       cout << "found " << points.size() << " points:\n";
+                       for (size_t i = 0; i < points.size(); i++) {
+                               cout << "   " << points[i]->getX() << "," << 
points[i]->getY() << "\n";
+                       }
+                       cout << "bits:\n";
+                       cout << *(detectorResult->getBits()) << "\n";
+#endif
+                       
+                       Ref<DecoderResult> 
decoderResult(decoder_.decode(detectorResult->getBits()));
+#ifdef DEBUG
+                       cout << "(4) decoded, have decoderResult " << 
decoderResult.object_ << "\n" << flush;
+#endif
+                       
+                       Ref<Result> result(
+                                                          new 
Result(decoderResult->getText(), decoderResult->getRawBytes(), points, 
BarcodeFormat_QR_CODE));
+#ifdef DEBUG
+                       cout << "(5) created result " << result.object_ << ", 
returning\n" << flush;
+#endif
+                       
+                       return result;
+               }
+               
+               QRCodeReader::~QRCodeReader() {
+               }
+               
+    Decoder& QRCodeReader::getDecoder() {
+        return decoder_;
+    }
+       }
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRCodeReader.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRCodeReader.h           
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRCodeReader.h   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,47 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __QR_CODE_READER_H__
+#define __QR_CODE_READER_H__
+
+/*
+ *  QRCodeReader.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/Reader.h>
+#include <zxing/qrcode/decoder/Decoder.h>
+#include <zxing/DecodeHints.h>
+
+namespace zxing {
+       namespace qrcode {
+               
+               class QRCodeReader : public Reader {
+               private:
+                       Decoder decoder_;
+                       
+    protected:
+      Decoder& getDecoder();
+
+               public:
+                       QRCodeReader();
+                       virtual Ref<Result> decode(Ref<BinaryBitmap> image, 
DecodeHints hints);
+                       virtual ~QRCodeReader();
+                       
+               };
+       }
+}
+
+#endif // __QR_CODE_READER_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRErrorCorrectionLevel.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRErrorCorrectionLevel.cpp   
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRErrorCorrectionLevel.cpp   
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,65 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  ErrorCorrectionLevel.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 15/05/2008.
+ *  Copyright 2008-2011 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/ErrorCorrectionLevel.h>
+
+using std::string;
+
+namespace zxing {
+namespace qrcode {
+
+ErrorCorrectionLevel::ErrorCorrectionLevel(int inOrdinal,
+                                           int bits,
+                                           char const* name) :
+  ordinal_(inOrdinal), bits_(bits), name_(name) {}
+
+int ErrorCorrectionLevel::ordinal() const {
+  return ordinal_;
+}
+
+int ErrorCorrectionLevel::bits() const {
+  return bits_;
+}
+
+string const& ErrorCorrectionLevel::name() const {
+  return name_;
+}
+
+ErrorCorrectionLevel::operator string const& () const {
+  return name_;
+}
+
+ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
+  if (bits < 0 || bits >= N_LEVELS) {
+    throw ReaderException("Ellegal error correction level bits");
+  }
+  return *FOR_BITS[bits];
+}
+
+  ErrorCorrectionLevel ErrorCorrectionLevel::L(0, 0x01, "L");
+  ErrorCorrectionLevel ErrorCorrectionLevel::M(1, 0x00, "M");
+  ErrorCorrectionLevel ErrorCorrectionLevel::Q(2, 0x03, "Q");
+  ErrorCorrectionLevel ErrorCorrectionLevel::H(3, 0x02, "H");
+ErrorCorrectionLevel *ErrorCorrectionLevel::FOR_BITS[] = { &M, &L, &H, &Q };
+int ErrorCorrectionLevel::N_LEVELS = 4;
+
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRFormatInformation.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRFormatInformation.cpp  
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRFormatInformation.cpp  
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,118 @@
+/*
+ *  FormatInformation.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 18/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/FormatInformation.h>
+#include <limits>
+
+namespace zxing {
+namespace qrcode {
+
+using namespace std;
+
+int FormatInformation::FORMAT_INFO_MASK_QR = 0x5412;
+int FormatInformation::FORMAT_INFO_DECODE_LOOKUP[][2] = { { 0x5412, 0x00 }, { 
0x5125, 0x01 }, { 0x5E7C, 0x02 }, {
+    0x5B4B, 0x03 }, { 0x45F9, 0x04 }, { 0x40CE, 0x05 }, { 0x4F97, 0x06 }, { 
0x4AA0, 0x07 }, { 0x77C4, 0x08 }, {
+    0x72F3, 0x09 }, { 0x7DAA, 0x0A }, { 0x789D, 0x0B }, { 0x662F, 0x0C }, { 
0x6318, 0x0D }, { 0x6C41, 0x0E }, {
+    0x6976, 0x0F }, { 0x1689, 0x10 }, { 0x13BE, 0x11 }, { 0x1CE7, 0x12 }, { 
0x19D0, 0x13 }, { 0x0762, 0x14 }, {
+    0x0255, 0x15 }, { 0x0D0C, 0x16 }, { 0x083B, 0x17 }, { 0x355F, 0x18 }, { 
0x3068, 0x19 }, { 0x3F31, 0x1A }, {
+    0x3A06, 0x1B }, { 0x24B4, 0x1C }, { 0x2183, 0x1D }, { 0x2EDA, 0x1E }, { 
0x2BED, 0x1F },
+};
+int FormatInformation::N_FORMAT_INFO_DECODE_LOOKUPS = 32;
+
+int FormatInformation::BITS_SET_IN_HALF_BYTE[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 
2, 2, 3, 2, 3, 3, 4 };
+
+FormatInformation::FormatInformation(int formatInfo) :
+    errorCorrectionLevel_(ErrorCorrectionLevel::forBits((formatInfo >> 3) & 
0x03)), dataMask_(
+      (unsigned char)(formatInfo & 0x07)) {
+}
+
+ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
+  return errorCorrectionLevel_;
+}
+
+unsigned char FormatInformation::getDataMask() {
+  return dataMask_;
+}
+
+int FormatInformation::numBitsDiffering(unsigned int a, unsigned int b) {
+  a ^= b;
+  return BITS_SET_IN_HALF_BYTE[a & 0x0F] + BITS_SET_IN_HALF_BYTE[(a >> 4 & 
0x0F)] + BITS_SET_IN_HALF_BYTE[(a >> 8
+         & 0x0F)] + BITS_SET_IN_HALF_BYTE[(a >> 12 & 0x0F)] + 
BITS_SET_IN_HALF_BYTE[(a >> 16 & 0x0F)]
+         + BITS_SET_IN_HALF_BYTE[(a >> 20 & 0x0F)] + BITS_SET_IN_HALF_BYTE[(a 
>> 24 & 0x0F)]
+         + BITS_SET_IN_HALF_BYTE[(a >> 28 & 0x0F)];
+}
+
+Ref<FormatInformation> FormatInformation::decodeFormatInformation(int 
maskedFormatInfo1, int maskedFormatInfo2) {
+  Ref<FormatInformation> result(doDecodeFormatInformation(maskedFormatInfo1, 
maskedFormatInfo2));
+  if (result != 0) {
+    return result;
+  }
+  // Should return null, but, some QR codes apparently
+  // do not mask this info. Try again by actually masking the pattern
+  // first
+  return doDecodeFormatInformation(maskedFormatInfo1 ^ FORMAT_INFO_MASK_QR,
+                                   maskedFormatInfo2  ^ FORMAT_INFO_MASK_QR);
+}
+Ref<FormatInformation> FormatInformation::doDecodeFormatInformation(int 
maskedFormatInfo1, int maskedFormatInfo2) {
+  // Find the int in FORMAT_INFO_DECODE_LOOKUP with fewest bits differing
+  int bestDifference = numeric_limits<int>::max();
+  int bestFormatInfo = 0;
+  for (int i = 0; i < N_FORMAT_INFO_DECODE_LOOKUPS; i++) {
+    int* decodeInfo = FORMAT_INFO_DECODE_LOOKUP[i];
+    int targetInfo = decodeInfo[0];
+    if (targetInfo == maskedFormatInfo1 || targetInfo == maskedFormatInfo2) {
+      // Found an exact match
+      Ref<FormatInformation> result(new FormatInformation(decodeInfo[1]));
+      return result;
+    }
+    int bitsDifference = numBitsDiffering(maskedFormatInfo1, targetInfo);
+    if (bitsDifference < bestDifference) {
+      bestFormatInfo = decodeInfo[1];
+      bestDifference = bitsDifference;
+    }
+    if (maskedFormatInfo1 != maskedFormatInfo2) {
+        // also try the other option
+        bitsDifference = numBitsDiffering(maskedFormatInfo2, targetInfo);
+        if (bitsDifference < bestDifference) {
+            bestFormatInfo = decodeInfo[1];
+          bestDifference = bitsDifference;
+        }
+      }
+  }
+  if (bestDifference <= 3) {
+    Ref<FormatInformation> result(new FormatInformation(bestFormatInfo));
+    return result;
+  }
+  Ref<FormatInformation> result;
+  return result;
+}
+
+bool operator==(const FormatInformation &a, const FormatInformation &b) {
+  return &(a.errorCorrectionLevel_) == &(b.errorCorrectionLevel_) && 
a.dataMask_ == b.dataMask_;
+}
+
+ostream& operator<<(ostream& out, const FormatInformation& fi) {
+  const FormatInformation *fip = &fi;
+  out << "FormatInformation @ " << fip;
+  return out;
+}
+
+}
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRVersion.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRVersion.cpp            
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/QRVersion.cpp    
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,557 @@
+/*
+ *  Version.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 14/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/Version.h>
+#include <zxing/qrcode/FormatInformation.h>
+#include <limits>
+#include <iostream>
+#include <cstdarg>
+
+namespace zxing {
+namespace qrcode {
+using namespace std;
+
+ECB::ECB(int count, int dataCodewords) :
+    count_(count), dataCodewords_(dataCodewords) {
+}
+
+int ECB::getCount() {
+  return count_;
+}
+
+int ECB::getDataCodewords() {
+  return dataCodewords_;
+}
+
+ECBlocks::ECBlocks(int ecCodewords, ECB *ecBlocks) :
+    ecCodewords_(ecCodewords), ecBlocks_(1, ecBlocks) {
+}
+
+ECBlocks::ECBlocks(int ecCodewords, ECB *ecBlocks1, ECB *ecBlocks2) :
+    ecCodewords_(ecCodewords), ecBlocks_(1, ecBlocks1) {
+  ecBlocks_.push_back(ecBlocks2);
+}
+
+int ECBlocks::getECCodewords() {
+  return ecCodewords_;
+}
+
+std::vector<ECB*>& ECBlocks::getECBlocks() {
+  return ecBlocks_;
+}
+
+ECBlocks::~ECBlocks() {
+  for (size_t i = 0; i < ecBlocks_.size(); i++) {
+    delete ecBlocks_[i];
+  }
+}
+
+unsigned int Version::VERSION_DECODE_INFO[] = { 0x07C94, 0x085BC, 0x09A99, 
0x0A4D3, 0x0BBF6, 0x0C762, 0x0D847, 0x0E60D,
+    0x0F928, 0x10B78, 0x1145D, 0x12A17, 0x13532, 0x149A6, 0x15683, 0x168C9, 
0x177EC, 0x18EC4, 0x191E1, 0x1AFAB,
+    0x1B08E, 0x1CC1A, 0x1D33F, 0x1ED75, 0x1F250, 0x209D5, 0x216F0, 0x228BA, 
0x2379F, 0x24B0B, 0x2542E, 0x26A64,
+    0x27541, 0x28C69
+                                              };
+int Version::N_VERSION_DECODE_INFOS = 34;
+vector<Ref<Version> > Version::VERSIONS;
+static int N_VERSIONS = Version::buildVersions();
+
+int Version::getVersionNumber() {
+  return versionNumber_;
+}
+
+vector<int> &Version::getAlignmentPatternCenters() {
+  return alignmentPatternCenters_;
+}
+
+int Version::getTotalCodewords() {
+  return totalCodewords_;
+}
+
+int Version::getDimensionForVersion() {
+  return 17 + 4 * versionNumber_;
+}
+
+ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
+  return *ecBlocks_[ecLevel.ordinal()];
+}
+
+Version *Version::getProvisionalVersionForDimension(int dimension) {
+  if (dimension % 4 != 1) {
+    throw ReaderException("Dimension must be 1 mod 4");
+  }
+  return Version::getVersionForNumber((dimension - 17) >> 2);
+}
+
+Version *Version::getVersionForNumber(int versionNumber) {
+  if (versionNumber < 1 || versionNumber > N_VERSIONS) {
+    throw ReaderException("versionNumber must be between 1 and 40");
+  }
+
+  return VERSIONS[versionNumber - 1];
+}
+
+Version::Version(int versionNumber, vector<int> *alignmentPatternCenters, 
ECBlocks *ecBlocks1, ECBlocks *ecBlocks2,
+                 ECBlocks *ecBlocks3, ECBlocks *ecBlocks4) :
+    versionNumber_(versionNumber), 
alignmentPatternCenters_(*alignmentPatternCenters), ecBlocks_(4), 
totalCodewords_(0) {
+  ecBlocks_[0] = ecBlocks1;
+  ecBlocks_[1] = ecBlocks2;
+  ecBlocks_[2] = ecBlocks3;
+  ecBlocks_[3] = ecBlocks4;
+
+  int total = 0;
+  int ecCodewords = ecBlocks1->getECCodewords();
+  vector<ECB*> &ecbArray = ecBlocks1->getECBlocks();
+  for (size_t i = 0; i < ecbArray.size(); i++) {
+    ECB *ecBlock = ecbArray[i];
+    total += ecBlock->getCount() * (ecBlock->getDataCodewords() + ecCodewords);
+  }
+  totalCodewords_ = total;
+}
+
+Version::~Version() {
+  delete &alignmentPatternCenters_;
+  for (size_t i = 0; i < ecBlocks_.size(); i++) {
+    delete ecBlocks_[i];
+  }
+}
+
+Version *Version::decodeVersionInformation(unsigned int versionBits) {
+  int bestDifference = numeric_limits<int>::max();
+  size_t bestVersion = 0;
+  for (int i = 0; i < N_VERSION_DECODE_INFOS; i++) {
+    unsigned targetVersion = VERSION_DECODE_INFO[i];
+    // Do the version info bits match exactly? done.
+    if (targetVersion == versionBits) {
+      return getVersionForNumber(i + 7);
+    }
+    // Otherwise see if this is the closest to a real version info bit
+    // string we have seen so far
+    int bitsDifference = FormatInformation::numBitsDiffering(versionBits, 
targetVersion);
+    if (bitsDifference < bestDifference) {
+      bestVersion = i + 7;
+      bestDifference = bitsDifference;
+    }
+  }
+  // We can tolerate up to 3 bits of error since no two version info codewords 
will
+  // differ in less than 4 bits.
+  if (bestDifference <= 3) {
+    return getVersionForNumber(bestVersion);
+  }
+  // If we didn't find a close enough match, fail
+  return 0;
+}
+
+Ref<BitMatrix> Version::buildFunctionPattern() {
+  int dimension = getDimensionForVersion();
+  Ref<BitMatrix> functionPattern(new BitMatrix(dimension));
+
+
+  // Top left finder pattern + separator + format
+  functionPattern->setRegion(0, 0, 9, 9);
+  // Top right finder pattern + separator + format
+  functionPattern->setRegion(dimension - 8, 0, 8, 9);
+  // Bottom left finder pattern + separator + format
+  functionPattern->setRegion(0, dimension - 8, 9, 8);
+
+
+  // Alignment patterns
+  size_t max = alignmentPatternCenters_.size();
+  for (size_t x = 0; x < max; x++) {
+    int i = alignmentPatternCenters_[x] - 2;
+    for (size_t y = 0; y < max; y++) {
+      if ((x == 0 && (y == 0 || y == max - 1)) || (x == max - 1 && y == 0)) {
+        // No alignment patterns near the three finder patterns
+        continue;
+      }
+      functionPattern->setRegion(alignmentPatternCenters_[y] - 2, i, 5, 5);
+    }
+  }
+
+  // Vertical timing pattern
+  functionPattern->setRegion(6, 9, 1, dimension - 17);
+  // Horizontal timing pattern
+  functionPattern->setRegion(9, 6, dimension - 17, 1);
+
+  if (versionNumber_ > 6) {
+    // Version info, top right
+    functionPattern->setRegion(dimension - 11, 0, 3, 6);
+    // Version info, bottom left
+    functionPattern->setRegion(0, dimension - 11, 6, 3);
+  }
+
+
+  //#ifdef DEBUG
+  //   cout << "version " << versionNumber_ << " built function pattern:\n";
+  //   cout << *functionPattern;
+  //#endif
+
+  return functionPattern;
+}
+
+static vector<int> *intArray(size_t n...) {
+  va_list ap;
+  va_start(ap, n);
+  vector<int> *result = new vector<int>(n);
+  for (size_t i = 0; i < n; i++) {
+    (*result)[i] = va_arg(ap, int);
+  }
+  va_end(ap);
+  return result;
+}
+
+int Version::buildVersions() {
+  VERSIONS.push_back(Ref<Version>(new Version(1, intArray(0),
+                                  new ECBlocks(7, new ECB(1, 19)),
+                                  new ECBlocks(10, new ECB(1, 16)),
+                                  new ECBlocks(13, new ECB(1, 13)),
+                                  new ECBlocks(17, new ECB(1, 9)))));
+  VERSIONS.push_back(Ref<Version>(new Version(2, intArray(2, 6, 18),
+                                  new ECBlocks(10, new ECB(1, 34)),
+                                  new ECBlocks(16, new ECB(1, 28)),
+                                  new ECBlocks(22, new ECB(1, 22)),
+                                  new ECBlocks(28, new ECB(1, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(3, intArray(2, 6, 22),
+                                  new ECBlocks(15, new ECB(1, 55)),
+                                  new ECBlocks(26, new ECB(1, 44)),
+                                  new ECBlocks(18, new ECB(2, 17)),
+                                  new ECBlocks(22, new ECB(2, 13)))));
+  VERSIONS.push_back(Ref<Version>(new Version(4, intArray(2, 6, 26),
+                                  new ECBlocks(20, new ECB(1, 80)),
+                                  new ECBlocks(18, new ECB(2, 32)),
+                                  new ECBlocks(26, new ECB(2, 24)),
+                                  new ECBlocks(16, new ECB(4, 9)))));
+  VERSIONS.push_back(Ref<Version>(new Version(5, intArray(2, 6, 30),
+                                  new ECBlocks(26, new ECB(1, 108)),
+                                  new ECBlocks(24, new ECB(2, 43)),
+                                  new ECBlocks(18, new ECB(2, 15),
+                                               new ECB(2, 16)),
+                                  new ECBlocks(22, new ECB(2, 11),
+                                               new ECB(2, 12)))));
+  VERSIONS.push_back(Ref<Version>(new Version(6, intArray(2, 6, 34),
+                                  new ECBlocks(18, new ECB(2, 68)),
+                                  new ECBlocks(16, new ECB(4, 27)),
+                                  new ECBlocks(24, new ECB(4, 19)),
+                                  new ECBlocks(28, new ECB(4, 15)))));
+  VERSIONS.push_back(Ref<Version>(new Version(7, intArray(3, 6, 22, 38),
+                                  new ECBlocks(20, new ECB(2, 78)),
+                                  new ECBlocks(18, new ECB(4, 31)),
+                                  new ECBlocks(18, new ECB(2, 14),
+                                               new ECB(4, 15)),
+                                  new ECBlocks(26, new ECB(4, 13),
+                                               new ECB(1, 14)))));
+  VERSIONS.push_back(Ref<Version>(new Version(8, intArray(3, 6, 24, 42),
+                                  new ECBlocks(24, new ECB(2, 97)),
+                                  new ECBlocks(22, new ECB(2, 38),
+                                               new ECB(2, 39)),
+                                  new ECBlocks(22, new ECB(4, 18),
+                                               new ECB(2, 19)),
+                                  new ECBlocks(26, new ECB(4, 14),
+                                               new ECB(2, 15)))));
+  VERSIONS.push_back(Ref<Version>(new Version(9, intArray(3, 6, 26, 46),
+                                  new ECBlocks(30, new ECB(2, 116)),
+                                  new ECBlocks(22, new ECB(3, 36),
+                                               new ECB(2, 37)),
+                                  new ECBlocks(20, new ECB(4, 16),
+                                               new ECB(4, 17)),
+                                  new ECBlocks(24, new ECB(4, 12),
+                                               new ECB(4, 13)))));
+  VERSIONS.push_back(Ref<Version>(new Version(10, intArray(3, 6, 28, 50),
+                                  new ECBlocks(18, new ECB(2, 68),
+                                               new ECB(2, 69)),
+                                  new ECBlocks(26, new ECB(4, 43),
+                                               new ECB(1, 44)),
+                                  new ECBlocks(24, new ECB(6, 19),
+                                               new ECB(2, 20)),
+                                  new ECBlocks(28, new ECB(6, 15),
+                                               new ECB(2, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(11, intArray(3, 6, 30, 54),
+                                  new ECBlocks(20, new ECB(4, 81)),
+                                  new ECBlocks(30, new ECB(1, 50),
+                                               new ECB(4, 51)),
+                                  new ECBlocks(28, new ECB(4, 22),
+                                               new ECB(4, 23)),
+                                  new ECBlocks(24, new ECB(3, 12),
+                                               new ECB(8, 13)))));
+  VERSIONS.push_back(Ref<Version>(new Version(12, intArray(3, 6, 32, 58),
+                                  new ECBlocks(24, new ECB(2, 92),
+                                               new ECB(2, 93)),
+                                  new ECBlocks(22, new ECB(6, 36),
+                                               new ECB(2, 37)),
+                                  new ECBlocks(26, new ECB(4, 20),
+                                               new ECB(6, 21)),
+                                  new ECBlocks(28, new ECB(7, 14),
+                                               new ECB(4, 15)))));
+  VERSIONS.push_back(Ref<Version>(new Version(13, intArray(3, 6, 34, 62),
+                                  new ECBlocks(26, new ECB(4, 107)),
+                                  new ECBlocks(22, new ECB(8, 37),
+                                               new ECB(1, 38)),
+                                  new ECBlocks(24, new ECB(8, 20),
+                                               new ECB(4, 21)),
+                                  new ECBlocks(22, new ECB(12, 11),
+                                               new ECB(4, 12)))));
+  VERSIONS.push_back(Ref<Version>(new Version(14, intArray(4, 6, 26, 46, 66),
+                                  new ECBlocks(30, new ECB(3, 115),
+                                               new ECB(1, 116)),
+                                  new ECBlocks(24, new ECB(4, 40),
+                                               new ECB(5, 41)),
+                                  new ECBlocks(20, new ECB(11, 16),
+                                               new ECB(5, 17)),
+                                  new ECBlocks(24, new ECB(11, 12),
+                                               new ECB(5, 13)))));
+  VERSIONS.push_back(Ref<Version>(new Version(15, intArray(4, 6, 26, 48, 70),
+                                  new ECBlocks(22, new ECB(5, 87),
+                                               new ECB(1, 88)),
+                                  new ECBlocks(24, new ECB(5, 41),
+                                               new ECB(5, 42)),
+                                  new ECBlocks(30, new ECB(5, 24),
+                                               new ECB(7, 25)),
+                                  new ECBlocks(24, new ECB(11, 12),
+                                               new ECB(7, 13)))));
+  VERSIONS.push_back(Ref<Version>(new Version(16, intArray(4, 6, 26, 50, 74),
+                                  new ECBlocks(24, new ECB(5, 98),
+                                               new ECB(1, 99)),
+                                  new ECBlocks(28, new ECB(7, 45),
+                                               new ECB(3, 46)),
+                                  new ECBlocks(24, new ECB(15, 19),
+                                               new ECB(2, 20)),
+                                  new ECBlocks(30, new ECB(3, 15),
+                                               new ECB(13, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(17, intArray(4, 6, 30, 54, 78),
+                                  new ECBlocks(28, new ECB(1, 107),
+                                               new ECB(5, 108)),
+                                  new ECBlocks(28, new ECB(10, 46),
+                                               new ECB(1, 47)),
+                                  new ECBlocks(28, new ECB(1, 22),
+                                               new ECB(15, 23)),
+                                  new ECBlocks(28, new ECB(2, 14),
+                                               new ECB(17, 15)))));
+  VERSIONS.push_back(Ref<Version>(new Version(18, intArray(4, 6, 30, 56, 82),
+                                  new ECBlocks(30, new ECB(5, 120),
+                                               new ECB(1, 121)),
+                                  new ECBlocks(26, new ECB(9, 43),
+                                               new ECB(4, 44)),
+                                  new ECBlocks(28, new ECB(17, 22),
+                                               new ECB(1, 23)),
+                                  new ECBlocks(28, new ECB(2, 14),
+                                               new ECB(19, 15)))));
+  VERSIONS.push_back(Ref<Version>(new Version(19, intArray(4, 6, 30, 58, 86),
+                                  new ECBlocks(28, new ECB(3, 113),
+                                               new ECB(4, 114)),
+                                  new ECBlocks(26, new ECB(3, 44),
+                                               new ECB(11, 45)),
+                                  new ECBlocks(26, new ECB(17, 21),
+                                               new ECB(4, 22)),
+                                  new ECBlocks(26, new ECB(9, 13),
+                                               new ECB(16, 14)))));
+  VERSIONS.push_back(Ref<Version>(new Version(20, intArray(4, 6, 34, 62, 90),
+                                  new ECBlocks(28, new ECB(3, 107),
+                                               new ECB(5, 108)),
+                                  new ECBlocks(26, new ECB(3, 41),
+                                               new ECB(13, 42)),
+                                  new ECBlocks(30, new ECB(15, 24),
+                                               new ECB(5, 25)),
+                                  new ECBlocks(28, new ECB(15, 15),
+                                               new ECB(10, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(21, intArray(5, 6, 28, 50, 72, 
94),
+                                  new ECBlocks(28, new ECB(4, 116),
+                                               new ECB(4, 117)),
+                                  new ECBlocks(26, new ECB(17, 42)),
+                                  new ECBlocks(28, new ECB(17, 22),
+                                               new ECB(6, 23)),
+                                  new ECBlocks(30, new ECB(19, 16),
+                                               new ECB(6, 17)))));
+  VERSIONS.push_back(Ref<Version>(new Version(22, intArray(5, 6, 26, 50, 74, 
98),
+                                  new ECBlocks(28, new ECB(2, 111),
+                                               new ECB(7, 112)),
+                                  new ECBlocks(28, new ECB(17, 46)),
+                                  new ECBlocks(30, new ECB(7, 24),
+                                               new ECB(16, 25)),
+                                  new ECBlocks(24, new ECB(34, 13)))));
+  VERSIONS.push_back(Ref<Version>(new Version(23, intArray(5, 6, 30, 54, 78, 
102),
+                                  new ECBlocks(30, new ECB(4, 121),
+                                               new ECB(5, 122)),
+                                  new ECBlocks(28, new ECB(4, 47),
+                                               new ECB(14, 48)),
+                                  new ECBlocks(30, new ECB(11, 24),
+                                               new ECB(14, 25)),
+                                  new ECBlocks(30, new ECB(16, 15),
+                                               new ECB(14, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(24, intArray(5, 6, 28, 54, 80, 
106),
+                                  new ECBlocks(30, new ECB(6, 117),
+                                               new ECB(4, 118)),
+                                  new ECBlocks(28, new ECB(6, 45),
+                                               new ECB(14, 46)),
+                                  new ECBlocks(30, new ECB(11, 24),
+                                               new ECB(16, 25)),
+                                  new ECBlocks(30, new ECB(30, 16),
+                                               new ECB(2, 17)))));
+  VERSIONS.push_back(Ref<Version>(new Version(25, intArray(5, 6, 32, 58, 84, 
110),
+                                  new ECBlocks(26, new ECB(8, 106),
+                                               new ECB(4, 107)),
+                                  new ECBlocks(28, new ECB(8, 47),
+                                               new ECB(13, 48)),
+                                  new ECBlocks(30, new ECB(7, 24),
+                                               new ECB(22, 25)),
+                                  new ECBlocks(30, new ECB(22, 15),
+                                               new ECB(13, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(26, intArray(5, 6, 30, 58, 86, 
114),
+                                  new ECBlocks(28, new ECB(10, 114),
+                                               new ECB(2, 115)),
+                                  new ECBlocks(28, new ECB(19, 46),
+                                               new ECB(4, 47)),
+                                  new ECBlocks(28, new ECB(28, 22),
+                                               new ECB(6, 23)),
+                                  new ECBlocks(30, new ECB(33, 16),
+                                               new ECB(4, 17)))));
+  VERSIONS.push_back(Ref<Version>(new Version(27, intArray(5, 6, 34, 62, 90, 
118),
+                                  new ECBlocks(30, new ECB(8, 122),
+                                               new ECB(4, 123)),
+                                  new ECBlocks(28, new ECB(22, 45),
+                                               new ECB(3, 46)),
+                                  new ECBlocks(30, new ECB(8, 23),
+                                               new ECB(26, 24)),
+                                  new ECBlocks(30, new ECB(12, 15),
+                                               new ECB(28, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(28, intArray(6, 6, 26, 50, 74, 
98, 122),
+                                  new ECBlocks(30, new ECB(3, 117),
+                                               new ECB(10, 118)),
+                                  new ECBlocks(28, new ECB(3, 45),
+                                               new ECB(23, 46)),
+                                  new ECBlocks(30, new ECB(4, 24),
+                                               new ECB(31, 25)),
+                                  new ECBlocks(30, new ECB(11, 15),
+                                               new ECB(31, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(29, intArray(6, 6, 30, 54, 78, 
102, 126),
+                                  new ECBlocks(30, new ECB(7, 116),
+                                               new ECB(7, 117)),
+                                  new ECBlocks(28, new ECB(21, 45),
+                                               new ECB(7, 46)),
+                                  new ECBlocks(30, new ECB(1, 23),
+                                               new ECB(37, 24)),
+                                  new ECBlocks(30, new ECB(19, 15),
+                                               new ECB(26, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(30, intArray(6, 6, 26, 52, 78, 
104, 130),
+                                  new ECBlocks(30, new ECB(5, 115),
+                                               new ECB(10, 116)),
+                                  new ECBlocks(28, new ECB(19, 47),
+                                               new ECB(10, 48)),
+                                  new ECBlocks(30, new ECB(15, 24),
+                                               new ECB(25, 25)),
+                                  new ECBlocks(30, new ECB(23, 15),
+                                               new ECB(25, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(31, intArray(6, 6, 30, 56, 82, 
108, 134),
+                                  new ECBlocks(30, new ECB(13, 115),
+                                               new ECB(3, 116)),
+                                  new ECBlocks(28, new ECB(2, 46),
+                                               new ECB(29, 47)),
+                                  new ECBlocks(30, new ECB(42, 24),
+                                               new ECB(1, 25)),
+                                  new ECBlocks(30, new ECB(23, 15),
+                                               new ECB(28, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(32, intArray(6, 6, 34, 60, 86, 
112, 138),
+                                  new ECBlocks(30, new ECB(17, 115)),
+                                  new ECBlocks(28, new ECB(10, 46),
+                                               new ECB(23, 47)),
+                                  new ECBlocks(30, new ECB(10, 24),
+                                               new ECB(35, 25)),
+                                  new ECBlocks(30, new ECB(19, 15),
+                                               new ECB(35, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(33, intArray(6, 6, 30, 58, 86, 
114, 142),
+                                  new ECBlocks(30, new ECB(17, 115),
+                                               new ECB(1, 116)),
+                                  new ECBlocks(28, new ECB(14, 46),
+                                               new ECB(21, 47)),
+                                  new ECBlocks(30, new ECB(29, 24),
+                                               new ECB(19, 25)),
+                                  new ECBlocks(30, new ECB(11, 15),
+                                               new ECB(46, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(34, intArray(6, 6, 34, 62, 90, 
118, 146),
+                                  new ECBlocks(30, new ECB(13, 115),
+                                               new ECB(6, 116)),
+                                  new ECBlocks(28, new ECB(14, 46),
+                                               new ECB(23, 47)),
+                                  new ECBlocks(30, new ECB(44, 24),
+                                               new ECB(7, 25)),
+                                  new ECBlocks(30, new ECB(59, 16),
+                                               new ECB(1, 17)))));
+  VERSIONS.push_back(Ref<Version>(new Version(35, intArray(7, 6, 30, 54, 78,
+                                  102, 126, 150),
+                                  new ECBlocks(30, new ECB(12, 121),
+                                               new ECB(7, 122)),
+                                  new ECBlocks(28, new ECB(12, 47),
+                                               new ECB(26, 48)),
+                                  new ECBlocks(30, new ECB(39, 24),
+                                               new ECB(14, 25)),
+                                  new ECBlocks(30, new ECB(22, 15),
+                                               new ECB(41, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(36, intArray(7, 6, 24, 50, 76,
+                                  102, 128, 154),
+                                  new ECBlocks(30, new ECB(6, 121),
+                                               new ECB(14, 122)),
+                                  new ECBlocks(28, new ECB(6, 47),
+                                               new ECB(34, 48)),
+                                  new ECBlocks(30, new ECB(46, 24),
+                                               new ECB(10, 25)),
+                                  new ECBlocks(30, new ECB(2, 15),
+                                               new ECB(64, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(37, intArray(7, 6, 28, 54, 80,
+                                  106, 132, 158),
+                                  new ECBlocks(30, new ECB(17, 122),
+                                               new ECB(4, 123)),
+                                  new ECBlocks(28, new ECB(29, 46),
+                                               new ECB(14, 47)),
+                                  new ECBlocks(30, new ECB(49, 24),
+                                               new ECB(10, 25)),
+                                  new ECBlocks(30, new ECB(24, 15),
+                                               new ECB(46, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(38, intArray(7, 6, 32, 58, 84,
+                                  110, 136, 162),
+                                  new ECBlocks(30, new ECB(4, 122),
+                                               new ECB(18, 123)),
+                                  new ECBlocks(28, new ECB(13, 46),
+                                               new ECB(32, 47)),
+                                  new ECBlocks(30, new ECB(48, 24),
+                                               new ECB(14, 25)),
+                                  new ECBlocks(30, new ECB(42, 15),
+                                               new ECB(32, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(39, intArray(7, 6, 26, 54, 82,
+                                  110, 138, 166),
+                                  new ECBlocks(30, new ECB(20, 117),
+                                               new ECB(4, 118)),
+                                  new ECBlocks(28, new ECB(40, 47),
+                                               new ECB(7, 48)),
+                                  new ECBlocks(30, new ECB(43, 24),
+                                               new ECB(22, 25)),
+                                  new ECBlocks(30, new ECB(10, 15),
+                                               new ECB(67, 16)))));
+  VERSIONS.push_back(Ref<Version>(new Version(40, intArray(7, 6, 30, 58, 86,
+                                  114, 142, 170),
+                                  new ECBlocks(30, new ECB(19, 118),
+                                               new ECB(6, 119)),
+                                  new ECBlocks(28, new ECB(18, 47),
+                                               new ECB(31, 48)),
+                                  new ECBlocks(30, new ECB(34, 24),
+                                               new ECB(34, 25)),
+                                  new ECBlocks(30, new ECB(20, 15),
+                                               new ECB(61, 16)))));
+  return VERSIONS.size();
+}
+}
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/Version.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/Version.h                
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/Version.h        
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,85 @@
+#ifndef __VERSION_H__
+#define __VERSION_H__
+
+/*
+ *  Version.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+#include <zxing/qrcode/ErrorCorrectionLevel.h>
+#include <zxing/ReaderException.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/common/Counted.h>
+#include <vector>
+
+namespace zxing {
+namespace qrcode {
+
+class ECB {
+private:
+  int count_;
+  int dataCodewords_;
+public:
+  ECB(int count, int dataCodewords);
+  int getCount();
+  int getDataCodewords();
+};
+
+class ECBlocks {
+private:
+  int ecCodewords_;
+  std::vector<ECB*> ecBlocks_;
+public:
+  ECBlocks(int ecCodewords, ECB *ecBlocks);
+  ECBlocks(int ecCodewords, ECB *ecBlocks1, ECB *ecBlocks2);
+  int getECCodewords();
+  std::vector<ECB*>& getECBlocks();
+  ~ECBlocks();
+};
+
+class Version : public Counted {
+
+private:
+  int versionNumber_;
+  std::vector<int> &alignmentPatternCenters_;
+  std::vector<ECBlocks*> ecBlocks_;
+  int totalCodewords_;
+  Version(int versionNumber, std::vector<int> *alignmentPatternCenters, 
ECBlocks *ecBlocks1, ECBlocks *ecBlocks2,
+          ECBlocks *ecBlocks3, ECBlocks *ecBlocks4);
+
+public:
+  static unsigned int VERSION_DECODE_INFO[];
+  static int N_VERSION_DECODE_INFOS;
+  static std::vector<Ref<Version> > VERSIONS;
+
+  ~Version();
+  int getVersionNumber();
+  std::vector<int> &getAlignmentPatternCenters();
+  int getTotalCodewords();
+  int getDimensionForVersion();
+  ECBlocks &getECBlocksForLevel(ErrorCorrectionLevel &ecLevel);
+  static Version *getProvisionalVersionForDimension(int dimension);
+  static Version *getVersionForNumber(int versionNumber);
+  static Version *decodeVersionInformation(unsigned int versionBits);
+  Ref<BitMatrix> buildFunctionPattern();
+  static int buildVersions();
+};
+}
+}
+
+#endif // __VERSION_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/BitMatrixParser.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/BitMatrixParser.h    
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/BitMatrixParser.h    
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,56 @@
+#ifndef __BIT_MATRIX_PARSER_H__
+#define __BIT_MATRIX_PARSER_H__
+
+/*
+ *  BitMatrixParser.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/ReaderException.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/common/Counted.h>
+#include <zxing/common/Array.h>
+#include <zxing/qrcode/Version.h>
+#include <zxing/qrcode/FormatInformation.h>
+
+namespace zxing {
+namespace qrcode {
+
+class BitMatrixParser : public Counted {
+private:
+  Ref<BitMatrix> bitMatrix_;
+  Version *parsedVersion_;
+  Ref<FormatInformation> parsedFormatInfo_;
+
+  int copyBit(size_t x, size_t y, int versionBits);
+
+public:
+  BitMatrixParser(Ref<BitMatrix> bitMatrix);
+  Ref<FormatInformation> readFormatInformation();
+  Version *readVersion();
+  ArrayRef<unsigned char> readCodewords();
+
+private:
+  BitMatrixParser(const BitMatrixParser&);
+  BitMatrixParser& operator =(const BitMatrixParser&);
+  
+};
+
+}
+}
+
+#endif // __BIT_MATRIX_PARSER_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/DataBlock.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/DataBlock.h      
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/DataBlock.h      
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,50 @@
+#ifndef __DATA_BLOCK_H__
+#define __DATA_BLOCK_H__
+
+/*
+ *  DataBlock.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <vector>
+#include <zxing/common/Counted.h>
+#include <zxing/common/Array.h>
+#include <zxing/qrcode/Version.h>
+#include <zxing/qrcode/ErrorCorrectionLevel.h>
+
+namespace zxing {
+namespace qrcode {
+
+class DataBlock : public Counted {
+private:
+  int numDataCodewords_;
+  ArrayRef<unsigned char> codewords_;
+
+  DataBlock(int numDataCodewords, ArrayRef<unsigned char> codewords);
+
+public:
+  static std::vector<Ref<DataBlock> >
+  getDataBlocks(ArrayRef<unsigned char> rawCodewords, Version *version, 
ErrorCorrectionLevel &ecLevel);
+
+  int getNumDataCodewords();
+  ArrayRef<unsigned char> getCodewords();
+};
+
+}
+}
+
+#endif // __DATA_BLOCK_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/DataMask.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/DataMask.h       
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/DataMask.h       
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,50 @@
+#ifndef __DATA_MASK_H__
+#define __DATA_MASK_H__
+
+/*
+ *  DataMask.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Array.h>
+#include <zxing/common/Counted.h>
+#include <zxing/common/BitMatrix.h>
+
+#include <vector>
+
+namespace zxing {
+namespace qrcode {
+
+class DataMask : public Counted {
+private:
+  static std::vector<Ref<DataMask> > DATA_MASKS;
+
+protected:
+
+public:
+  static int buildDataMasks();
+  DataMask();
+  virtual ~DataMask();
+  void unmaskBitMatrix(BitMatrix& matrix, size_t dimension);
+  virtual bool isMasked(size_t x, size_t y) = 0;
+  static DataMask& forReference(int reference);
+};
+
+}
+}
+
+#endif // __DATA_MASK_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/DecodedBitStreamParser.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/DecodedBitStreamParser.h
                         (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/DecodedBitStreamParser.h
 2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,72 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+
+#ifndef __DECODED_BIT_STREAM_PARSER_H__
+#define __DECODED_BIT_STREAM_PARSER_H__
+
+/*
+ *  DecodedBitStreamParser.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string>
+#include <sstream>
+#include <map>
+#include <zxing/qrcode/decoder/Mode.h>
+#include <zxing/common/BitSource.h>
+#include <zxing/common/Counted.h>
+#include <zxing/common/Array.h>
+#include <zxing/common/DecoderResult.h>
+#include <zxing/common/CharacterSetECI.h>
+#include <zxing/DecodeHints.h>
+
+namespace zxing {
+namespace qrcode {
+
+class DecodedBitStreamParser {
+public:
+  typedef std::map<DecodeHintType, std::string> Hashtable;
+
+private:
+  static char const ALPHANUMERIC_CHARS[];
+  static char toAlphaNumericChar(size_t value);
+
+  static void decodeHanziSegment(Ref<BitSource> bits, std::string &result, int 
count);
+  static void decodeKanjiSegment(Ref<BitSource> bits, std::string &result, int 
count);
+  static void decodeByteSegment(Ref<BitSource> bits, std::string &result, int 
count);
+  static void decodeByteSegment(Ref<BitSource> bits_,
+                                std::string& result,
+                                int count,
+                                zxing::common::CharacterSetECI* 
currentCharacterSetECI,
+                                ArrayRef< ArrayRef<unsigned char> >& 
byteSegments,
+                                Hashtable const& hints);
+  static void decodeAlphanumericSegment(Ref<BitSource> bits, std::string 
&result, int count, bool fc1InEffect);
+  static void decodeNumericSegment(Ref<BitSource> bits, std::string &result, 
int count);
+
+  static void append(std::string &ost, const unsigned char *bufIn, size_t nIn, 
const char *src);
+  static void append(std::string &ost, std::string const& in, const char *src);
+
+public:
+  static Ref<DecoderResult> decode(ArrayRef<unsigned char> bytes,
+                                   Version *version,
+                                   ErrorCorrectionLevel const& ecLevel,
+                                   Hashtable const& hints);
+};
+
+}
+}
+
+#endif // __DECODED_BIT_STREAM_PARSER_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/Decoder.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/Decoder.h        
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/Decoder.h        
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,46 @@
+#ifndef __DECODER_H__
+#define __DECODER_H__
+
+/*
+ *  Decoder.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/reedsolomon/ReedSolomonDecoder.h>
+#include <zxing/common/Counted.h>
+#include <zxing/common/Array.h>
+#include <zxing/common/DecoderResult.h>
+#include <zxing/common/BitMatrix.h>
+
+namespace zxing {
+namespace qrcode {
+
+class Decoder {
+private:
+  ReedSolomonDecoder rsDecoder_;
+
+  void correctErrors(ArrayRef<unsigned char> bytes, int numDataCodewords);
+
+public:
+  Decoder();
+  Ref<DecoderResult> decode(Ref<BitMatrix> bits);
+};
+
+}
+}
+
+#endif // __DECODER_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/Mode.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/Mode.h           
                (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/Mode.h   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,58 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __MODE_H__
+#define __MODE_H__
+
+/*
+ *  Mode.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+#include <zxing/qrcode/Version.h>
+
+namespace zxing {
+namespace qrcode {
+
+class Mode {
+private:
+  int characterCountBitsForVersions0To9_;
+  int characterCountBitsForVersions10To26_;
+  int characterCountBitsForVersions27AndHigher_;
+  int bits_;
+  std::string name_;
+
+  Mode(int cbv0_9, int cbv10_26, int cbv27, int bits, char const* name);
+
+public:
+  static Mode TERMINATOR;
+  static Mode NUMERIC;
+  static Mode ALPHANUMERIC;
+  static Mode STRUCTURED_APPEND;
+  static Mode BYTE;
+  static Mode ECI;
+  static Mode KANJI;
+  static Mode FNC1_FIRST_POSITION;
+  static Mode FNC1_SECOND_POSITION;
+  static Mode HANZI;
+
+  static Mode& forBits(int bits);
+  int getCharacterCountBits(Version *version);
+};
+}
+}
+
+#endif // __MODE_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRBitMatrixParser.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRBitMatrixParser.cpp
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRBitMatrixParser.cpp
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,186 @@
+/*
+ *  BitMatrixParser.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 20/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/decoder/BitMatrixParser.h>
+#include <zxing/qrcode/decoder/DataMask.h>
+
+
+namespace zxing {
+namespace qrcode {
+
+int BitMatrixParser::copyBit(size_t x, size_t y, int versionBits) {
+  return bitMatrix_->get(x, y) ? (versionBits << 1) | 0x1 : versionBits << 1;
+}
+
+BitMatrixParser::BitMatrixParser(Ref<BitMatrix> bitMatrix) :
+    bitMatrix_(bitMatrix), parsedVersion_(0), parsedFormatInfo_() {
+  size_t dimension = bitMatrix->getDimension();
+  if ((dimension < 21) || (dimension & 0x03) != 1) {
+    throw ReaderException("Dimension must be 1 mod 4 and >= 21");
+  }
+}
+
+Ref<FormatInformation> BitMatrixParser::readFormatInformation() {
+  if (parsedFormatInfo_ != 0) {
+    return parsedFormatInfo_;
+  }
+
+  // Read top-left format info bits
+  int formatInfoBits1 = 0;
+  for (int i = 0; i < 6; i++) {
+    formatInfoBits1 = copyBit(i, 8, formatInfoBits1);
+  }
+  // .. and skip a bit in the timing pattern ...
+  formatInfoBits1 = copyBit(7, 8, formatInfoBits1);
+  formatInfoBits1 = copyBit(8, 8, formatInfoBits1);
+  formatInfoBits1 = copyBit(8, 7, formatInfoBits1);
+  // .. and skip a bit in the timing pattern ...
+  for (int j = 5; j >= 0; j--) {
+    formatInfoBits1 = copyBit(8, j, formatInfoBits1);
+  }
+
+  // Read the top-right/bottom-left pattern
+  int dimension = bitMatrix_->getDimension();
+  int formatInfoBits2 = 0;
+  int jMin = dimension - 7;
+  for (int j = dimension - 1; j >= jMin; j--) {
+    formatInfoBits2 = copyBit(8, j, formatInfoBits2);
+  }
+  for (int i = dimension - 8; i < dimension; i++) {
+    formatInfoBits2 = copyBit(i, 8, formatInfoBits2);
+  }
+
+  parsedFormatInfo_ = 
FormatInformation::decodeFormatInformation(formatInfoBits1,formatInfoBits2);
+  if (parsedFormatInfo_ != 0) {
+    return parsedFormatInfo_;
+  }
+  throw ReaderException("Could not decode format information");
+}
+
+Version *BitMatrixParser::readVersion() {
+  if (parsedVersion_ != 0) {
+    return parsedVersion_;
+  }
+
+  int dimension = bitMatrix_->getDimension();
+
+  int provisionalVersion = (dimension - 17) >> 2;
+  if (provisionalVersion <= 6) {
+    return Version::getVersionForNumber(provisionalVersion);
+  }
+
+  // Read top-right version info: 3 wide by 6 tall
+  int versionBits = 0;
+  for (int y = 5; y >= 0; y--) {
+    int xMin = dimension - 11;
+    for (int x = dimension - 9; x >= xMin; x--) {
+      versionBits = copyBit(x, y, versionBits);
+    }
+  }
+
+  parsedVersion_ = Version::decodeVersionInformation(versionBits);
+  if (parsedVersion_ != 0 && parsedVersion_->getDimensionForVersion() == 
dimension) {
+    return parsedVersion_;
+  }
+
+  // Hmm, failed. Try bottom left: 6 wide by 3 tall
+  versionBits = 0;
+  for (int x = 5; x >= 0; x--) {
+    int yMin = dimension - 11;
+    for (int y = dimension - 9; y >= yMin; y--) {
+      versionBits = copyBit(x, y, versionBits);
+    }
+  }
+
+  parsedVersion_ = Version::decodeVersionInformation(versionBits);
+  if (parsedVersion_ != 0 && parsedVersion_->getDimensionForVersion() == 
dimension) {
+    return parsedVersion_;
+  }
+  throw ReaderException("Could not decode version");
+}
+
+ArrayRef<unsigned char> BitMatrixParser::readCodewords() {
+  Ref<FormatInformation> formatInfo = readFormatInformation();
+  Version *version = readVersion();
+
+
+  //   cerr << *bitMatrix_ << endl;
+  //   cerr << bitMatrix_->getDimension() << endl;
+
+  // Get the data mask for the format used in this QR Code. This will exclude
+  // some bits from reading as we wind through the bit matrix.
+  DataMask &dataMask = DataMask::forReference((int)formatInfo->getDataMask());
+  //   cout << (int)formatInfo->getDataMask() << endl;
+  int dimension = bitMatrix_->getDimension();
+  dataMask.unmaskBitMatrix(*bitMatrix_, dimension);
+
+
+  //           cerr << *bitMatrix_ << endl;
+  //   cerr << version->getTotalCodewords() << endl;
+
+  Ref<BitMatrix> functionPattern = version->buildFunctionPattern();
+
+
+  //   cout << *functionPattern << endl;
+
+  bool readingUp = true;
+  ArrayRef<unsigned char> result(version->getTotalCodewords());
+  int resultOffset = 0;
+  int currentByte = 0;
+  int bitsRead = 0;
+  // Read columns in pairs, from right to left
+  for (int x = dimension - 1; x > 0; x -= 2) {
+    if (x == 6) {
+      // Skip whole column with vertical alignment pattern;
+      // saves time and makes the other code proceed more cleanly
+      x--;
+    }
+    // Read alternatingly from bottom to top then top to bottom
+    for (int counter = 0; counter < dimension; counter++) {
+      int y = readingUp ? dimension - 1 - counter : counter;
+      for (int col = 0; col < 2; col++) {
+        // Ignore bits covered by the function pattern
+        if (!functionPattern->get(x - col, y)) {
+          // Read a bit
+          bitsRead++;
+          currentByte <<= 1;
+          if (bitMatrix_->get(x - col, y)) {
+            currentByte |= 1;
+          }
+          // If we've made a whole byte, save it off
+          if (bitsRead == 8) {
+            result[resultOffset++] = (unsigned char)currentByte;
+            bitsRead = 0;
+            currentByte = 0;
+          }
+        }
+      }
+    }
+    readingUp = !readingUp; // switch directions
+  }
+
+  if (resultOffset != version->getTotalCodewords()) {
+    throw ReaderException("Did not read all codewords");
+  }
+  return result;
+}
+
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDataBlock.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDataBlock.cpp  
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDataBlock.cpp  
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,118 @@
+/*
+ *  DataBlock.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 19/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/decoder/DataBlock.h>
+#include <zxing/common/IllegalArgumentException.h>
+
+namespace zxing {
+namespace qrcode {
+
+using namespace std;
+
+DataBlock::DataBlock(int numDataCodewords, ArrayRef<unsigned char> codewords) :
+    numDataCodewords_(numDataCodewords), codewords_(codewords) {
+}
+
+int DataBlock::getNumDataCodewords() {
+  return numDataCodewords_;
+}
+
+ArrayRef<unsigned char> DataBlock::getCodewords() {
+  return codewords_;
+}
+
+
+std::vector<Ref<DataBlock> > DataBlock::getDataBlocks(ArrayRef<unsigned char> 
rawCodewords, Version *version,
+    ErrorCorrectionLevel &ecLevel) {
+
+
+  // Figure out the number and size of data blocks used by this version and
+  // error correction level
+  ECBlocks &ecBlocks = version->getECBlocksForLevel(ecLevel);
+
+
+  // First count the total number of data blocks
+  int totalBlocks = 0;
+  vector<ECB*> ecBlockArray = ecBlocks.getECBlocks();
+  for (size_t i = 0; i < ecBlockArray.size(); i++) {
+    totalBlocks += ecBlockArray[i]->getCount();
+  }
+
+  // Now establish DataBlocks of the appropriate size and number of data 
codewords
+  std::vector<Ref<DataBlock> > result(totalBlocks);
+  int numResultBlocks = 0;
+  for (size_t j = 0; j < ecBlockArray.size(); j++) {
+    ECB *ecBlock = ecBlockArray[j];
+    for (int i = 0; i < ecBlock->getCount(); i++) {
+      int numDataCodewords = ecBlock->getDataCodewords();
+      int numBlockCodewords = ecBlocks.getECCodewords() + numDataCodewords;
+      ArrayRef<unsigned char> buffer(numBlockCodewords);
+      Ref<DataBlock> blockRef(new DataBlock(numDataCodewords, buffer));
+      result[numResultBlocks++] = blockRef;
+    }
+  }
+
+  // All blocks have the same amount of data, except that the last n
+  // (where n may be 0) have 1 more byte. Figure out where these start.
+  int shorterBlocksTotalCodewords = result[0]->codewords_.size();
+  int longerBlocksStartAt = result.size() - 1;
+  while (longerBlocksStartAt >= 0) {
+    int numCodewords = result[longerBlocksStartAt]->codewords_.size();
+    if (numCodewords == shorterBlocksTotalCodewords) {
+      break;
+    }
+    if (numCodewords != shorterBlocksTotalCodewords + 1) {
+      throw IllegalArgumentException("Data block sizes differ by more than 1");
+    }
+    longerBlocksStartAt--;
+  }
+  longerBlocksStartAt++;
+
+  int shorterBlocksNumDataCodewords = shorterBlocksTotalCodewords - 
ecBlocks.getECCodewords();
+  // The last elements of result may be 1 element longer;
+  // first fill out as many elements as all of them have
+  int rawCodewordsOffset = 0;
+  for (int i = 0; i < shorterBlocksNumDataCodewords; i++) {
+    for (int j = 0; j < numResultBlocks; j++) {
+      result[j]->codewords_[i] = rawCodewords[rawCodewordsOffset++];
+    }
+  }
+  // Fill out the last data block in the longer ones
+  for (int j = longerBlocksStartAt; j < numResultBlocks; j++) {
+    result[j]->codewords_[shorterBlocksNumDataCodewords] = 
rawCodewords[rawCodewordsOffset++];
+  }
+  // Now add in error correction blocks
+  int max = result[0]->codewords_.size();
+  for (int i = shorterBlocksNumDataCodewords; i < max; i++) {
+    for (int j = 0; j < numResultBlocks; j++) {
+      int iOffset = j < longerBlocksStartAt ? i : i + 1;
+      result[j]->codewords_[iOffset] = rawCodewords[rawCodewordsOffset++];
+    }
+  }
+
+  if ((size_t)rawCodewordsOffset != rawCodewords.size()) {
+    throw IllegalArgumentException("rawCodewordsOffset != 
rawCodewords.length");
+  }
+
+  return result;
+}
+
+}
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDataMask.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDataMask.cpp   
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDataMask.cpp   
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,159 @@
+/*
+ *  DataMask.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 19/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/decoder/DataMask.h>
+
+#include <zxing/common/IllegalArgumentException.h>
+
+namespace zxing {
+namespace qrcode {
+
+using namespace std;
+
+DataMask::DataMask() {
+}
+
+DataMask::~DataMask() {
+}
+
+vector<Ref<DataMask> > DataMask::DATA_MASKS;
+static int N_DATA_MASKS = DataMask::buildDataMasks();
+
+DataMask &DataMask::forReference(int reference) {
+  if (reference < 0 || reference > 7) {
+    throw IllegalArgumentException("reference must be between 0 and 7");
+  }
+  return *DATA_MASKS[reference];
+}
+
+void DataMask::unmaskBitMatrix(BitMatrix& bits, size_t dimension) {
+  for (size_t y = 0; y < dimension; y++) {
+    for (size_t x = 0; x < dimension; x++) {
+      // TODO: check why the coordinates have to be swapped
+      if (isMasked(y, x)) {
+        bits.flip(x, y);
+      }
+    }
+  }
+}
+
+/**
+ * 000: mask bits for which (x + y) mod 2 == 0
+ */
+class DataMask000 : public DataMask {
+public:
+  bool isMasked(size_t x, size_t y) {
+    //         return ((x + y) & 0x01) == 0;
+    return ((x + y) % 2) == 0;
+  }
+};
+
+/**
+ * 001: mask bits for which x mod 2 == 0
+ */
+class DataMask001 : public DataMask {
+public:
+  bool isMasked(size_t x, size_t) {
+    //         return (x & 0x01) == 0;
+    return (x % 2) == 0;
+  }
+};
+
+/**
+ * 010: mask bits for which y mod 3 == 0
+ */
+class DataMask010 : public DataMask {
+public:
+  bool isMasked(size_t, size_t y) {
+    return y % 3 == 0;
+  }
+};
+
+/**
+ * 011: mask bits for which (x + y) mod 3 == 0
+ */
+class DataMask011 : public DataMask {
+public:
+  bool isMasked(size_t x, size_t y) {
+    return (x + y) % 3 == 0;
+  }
+};
+
+/**
+ * 100: mask bits for which (x/2 + y/3) mod 2 == 0
+ */
+class DataMask100 : public DataMask {
+public:
+  bool isMasked(size_t x, size_t y) {
+    //         return (((x >> 1) + (y / 3)) & 0x01) == 0;
+    return (((x >> 1) + (y / 3)) % 2) == 0;
+  }
+};
+
+/**
+ * 101: mask bits for which xy mod 2 + xy mod 3 == 0
+ */
+class DataMask101 : public DataMask {
+public:
+  bool isMasked(size_t x, size_t y) {
+    size_t temp = x * y;
+    //         return (temp & 0x01) + (temp % 3) == 0;
+    return (temp % 2) + (temp % 3) == 0;
+
+  }
+};
+
+/**
+ * 110: mask bits for which (xy mod 2 + xy mod 3) mod 2 == 0
+ */
+class DataMask110 : public DataMask {
+public:
+  bool isMasked(size_t x, size_t y) {
+    size_t temp = x * y;
+    //         return (((temp & 0x01) + (temp % 3)) & 0x01) == 0;
+    return (((temp % 2) + (temp % 3)) % 2) == 0;
+  }
+};
+
+/**
+ * 111: mask bits for which ((x+y)mod 2 + xy mod 3) mod 2 == 0
+ */
+class DataMask111 : public DataMask {
+public:
+  bool isMasked(size_t x, size_t y) {
+    //         return ((((x + y) & 0x01) + ((x * y) % 3)) & 0x01) == 0;
+    return ((((x + y) % 2) + ((x * y) % 3)) % 2) == 0;
+  }
+};
+
+int DataMask::buildDataMasks() {
+  DATA_MASKS.push_back(Ref<DataMask> (new DataMask000()));
+  DATA_MASKS.push_back(Ref<DataMask> (new DataMask001()));
+  DATA_MASKS.push_back(Ref<DataMask> (new DataMask010()));
+  DATA_MASKS.push_back(Ref<DataMask> (new DataMask011()));
+  DATA_MASKS.push_back(Ref<DataMask> (new DataMask100()));
+  DATA_MASKS.push_back(Ref<DataMask> (new DataMask101()));
+  DATA_MASKS.push_back(Ref<DataMask> (new DataMask110()));
+  DATA_MASKS.push_back(Ref<DataMask> (new DataMask111()));
+  return DATA_MASKS.size();
+}
+
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDecodedBitStreamParser.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDecodedBitStreamParser.cpp
                             (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDecodedBitStreamParser.cpp
     2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,416 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  DecodedBitStreamParser.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 20/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/decoder/DecodedBitStreamParser.h>
+#include <zxing/common/CharacterSetECI.h>
+#include <zxing/FormatException.h>
+#include <zxing/common/StringUtils.h>
+#include <iostream>
+
+#include <qglobal.h>
+
+#ifndef NO_ICONV
+#include <iconv.h>
+#endif
+
+// Required for compatibility. TODO: test on Symbian
+#ifdef ZXING_ICONV_CONST
+#undef ICONV_CONST
+#define ICONV_CONST const
+#endif
+
+#ifndef ICONV_CONST
+#define ICONV_CONST /**/
+#endif
+
+using namespace std;
+using namespace zxing;
+using namespace zxing::qrcode;
+using namespace zxing::common;
+
+const char DecodedBitStreamParser::ALPHANUMERIC_CHARS[] =
+{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B',
+  'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
+  'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
+  'Y', 'Z', ' ', '$', '%', '*', '+', '-', '.', '/', ':'
+};
+
+namespace {int GB2312_SUBSET = 1;}
+
+void DecodedBitStreamParser::append(std::string &result,
+                                    string const& in,
+                                    const char *src) {
+    append(result, (unsigned char const*)in.c_str(), in.length(), src);
+}
+
+void DecodedBitStreamParser::append(std::string &result,
+                                    const unsigned char *bufIn,
+                                    size_t nIn,
+                                    const char *src) {
+#ifndef NO_ICONV
+    if (nIn == 0) {
+        return;
+    }
+
+    iconv_t cd = iconv_open(StringUtils::UTF8, src);
+    if (cd == (iconv_t)-1) {
+        result.append((const char *)bufIn, nIn);
+        return;
+    }
+
+    const int maxOut = 4 * nIn + 1;
+    unsigned char* bufOut = new unsigned char[maxOut];
+
+    /*ICONV_CONST*/ char *fromPtr = (/*ICONV_CONST*/ char *)bufIn;
+    size_t nFrom = nIn;
+    char *toPtr = (char *)bufOut;
+    size_t nTo = maxOut;
+
+    while (nFrom > 0) {
+#if defined(Q_OS_SYMBIAN)
+        size_t oneway = iconv(cd, (const char**)&fromPtr, &nFrom, &toPtr, 
&nTo); // for Symbian and Mingw
+#else
+        size_t oneway = iconv(cd, (char**)&fromPtr, &nFrom, &toPtr, &nTo); // 
for Harmattan
+#endif
+
+        if (oneway == (size_t)(-1)) {
+            iconv_close(cd);
+            delete[] bufOut;
+            throw ReaderException("error converting characters");
+        }
+    }
+    iconv_close(cd);
+
+    int nResult = maxOut - nTo;
+    bufOut[nResult] = '\0';
+    result.append((const char *)bufOut);
+    delete[] bufOut;
+#else
+    result.append((const char *)bufIn, nIn);
+#endif
+}
+
+void DecodedBitStreamParser::decodeHanziSegment(Ref<BitSource> bits_,
+                                                string& result,
+                                                int count) {
+    BitSource& bits (*bits_);
+    // Don't crash trying to read more bits than we have available.
+    if (count * 13 > bits.available()) {
+        throw FormatException();
+    }
+
+    // Each character will require 2 bytes. Read the characters as 2-byte pairs
+    // and decode as GB2312 afterwards
+    size_t nBytes = 2 * count;
+    unsigned char* buffer = new unsigned char[nBytes];
+    int offset = 0;
+    while (count > 0) {
+        // Each 13 bits encodes a 2-byte character
+        int twoBytes = bits.readBits(13);
+        int assembledTwoBytes = ((twoBytes / 0x060) << 8) | (twoBytes % 0x060);
+        if (assembledTwoBytes < 0x003BF) {
+            // In the 0xA1A1 to 0xAAFE range
+            assembledTwoBytes += 0x0A1A1;
+        } else {
+            // In the 0xB0A1 to 0xFAFE range
+            assembledTwoBytes += 0x0A6A1;
+        }
+        buffer[offset] = (unsigned char) ((assembledTwoBytes >> 8) & 0xFF);
+        buffer[offset + 1] = (unsigned char) (assembledTwoBytes & 0xFF);
+        offset += 2;
+        count--;
+    }
+
+    try {
+        append(result, buffer, nBytes, StringUtils::GB2312);
+    } catch (ReaderException const& re) {
+        delete [] buffer;
+        throw FormatException();
+    }
+
+    delete [] buffer;
+}
+
+void DecodedBitStreamParser::decodeKanjiSegment(Ref<BitSource> bits, 
std::string &result, int count) {
+    // Each character will require 2 bytes. Read the characters as 2-byte pairs
+    // and decode as Shift_JIS afterwards
+    size_t nBytes = 2 * count;
+    unsigned char* buffer = new unsigned char[nBytes];
+    int offset = 0;
+    while (count > 0) {
+        // Each 13 bits encodes a 2-byte character
+
+        int twoBytes = bits->readBits(13);
+        int assembledTwoBytes = ((twoBytes / 0x0C0) << 8) | (twoBytes % 0x0C0);
+        if (assembledTwoBytes < 0x01F00) {
+            // In the 0x8140 to 0x9FFC range
+            assembledTwoBytes += 0x08140;
+        } else {
+            // In the 0xE040 to 0xEBBF range
+            assembledTwoBytes += 0x0C140;
+        }
+        buffer[offset] = (unsigned char)(assembledTwoBytes >> 8);
+        buffer[offset + 1] = (unsigned char)assembledTwoBytes;
+        offset += 2;
+        count--;
+    }
+
+    append(result, buffer, nBytes, StringUtils::SHIFT_JIS);
+    delete[] buffer;
+}
+
+void DecodedBitStreamParser::decodeByteSegment(Ref<BitSource> bits_,
+                                               string& result,
+                                               int count,
+                                               CharacterSetECI* 
currentCharacterSetECI,
+                                               ArrayRef< ArrayRef<unsigned 
char> >& byteSegments,
+                                               Hashtable const& hints) {
+    int nBytes = count;
+    BitSource& bits (*bits_);
+    // Don't crash trying to read more bits than we have available.
+    if (count << 3 > bits.available()) {
+        throw FormatException();
+    }
+
+    ArrayRef<unsigned char> bytes_ (count);
+    unsigned char* readBytes = &(*bytes_)[0];
+    for (int i = 0; i < count; i++) {
+        readBytes[i] = (unsigned char) bits.readBits(8);
+    }
+    string encoding;
+    if (currentCharacterSetECI == 0) {
+        // The spec isn't clear on this mode; see
+        // section 6.4.5: t does not say which encoding to assuming
+        // upon decoding. I have seen ISO-8859-1 used as well as
+        // Shift_JIS -- without anything like an ECI designator to
+        // give a hint.
+        encoding = StringUtils::guessEncoding(readBytes, count, hints);
+    } else {
+        encoding = currentCharacterSetECI->name();
+    }
+    try {
+        append(result, readBytes, nBytes, encoding.c_str());
+    } catch (ReaderException const& re) {
+        throw FormatException();
+    }
+    byteSegments->values().push_back(bytes_);
+}
+
+void DecodedBitStreamParser::decodeNumericSegment(Ref<BitSource> bits, 
std::string &result, int count) {
+    int nBytes = count;
+    unsigned char* bytes = new unsigned char[nBytes];
+    int i = 0;
+    // Read three digits at a time
+    while (count >= 3) {
+        // Each 10 bits encodes three digits
+        if (bits->available() < 10) {
+            throw ReaderException("format exception");
+        }
+        int threeDigitsBits = bits->readBits(10);
+        if (threeDigitsBits >= 1000) {
+            ostringstream s;
+            s << "Illegal value for 3-digit unit: " << threeDigitsBits;
+            delete[] bytes;
+            throw ReaderException(s.str().c_str());
+        }
+        bytes[i++] = ALPHANUMERIC_CHARS[threeDigitsBits / 100];
+        bytes[i++] = ALPHANUMERIC_CHARS[(threeDigitsBits / 10) % 10];
+        bytes[i++] = ALPHANUMERIC_CHARS[threeDigitsBits % 10];
+        count -= 3;
+    }
+    if (count == 2) {
+        if (bits->available() < 7) {
+            throw ReaderException("format exception");
+        }
+        // Two digits left over to read, encoded in 7 bits
+        int twoDigitsBits = bits->readBits(7);
+        if (twoDigitsBits >= 100) {
+            ostringstream s;
+            s << "Illegal value for 2-digit unit: " << twoDigitsBits;
+            delete[] bytes;
+            throw ReaderException(s.str().c_str());
+        }
+        bytes[i++] = ALPHANUMERIC_CHARS[twoDigitsBits / 10];
+        bytes[i++] = ALPHANUMERIC_CHARS[twoDigitsBits % 10];
+    } else if (count == 1) {
+        if (bits->available() < 4) {
+            throw ReaderException("format exception");
+        }
+        // One digit left over to read
+        int digitBits = bits->readBits(4);
+        if (digitBits >= 10) {
+            ostringstream s;
+            s << "Illegal value for digit unit: " << digitBits;
+            delete[] bytes;
+            throw ReaderException(s.str().c_str());
+        }
+        bytes[i++] = ALPHANUMERIC_CHARS[digitBits];
+    }
+    append(result, bytes, nBytes, StringUtils::ASCII);
+    delete[] bytes;
+}
+
+char DecodedBitStreamParser::toAlphaNumericChar(size_t value) {
+    if (value >= sizeof(DecodedBitStreamParser::ALPHANUMERIC_CHARS)) {
+        throw FormatException();
+    }
+    return ALPHANUMERIC_CHARS[value];
+}
+
+void DecodedBitStreamParser::decodeAlphanumericSegment(Ref<BitSource> bits_,
+                                                       string& result,
+                                                       int count,
+                                                       bool fc1InEffect) {
+    BitSource& bits (*bits_);
+    ostringstream bytes;
+    // Read two characters at a time
+    while (count > 1) {
+        if (bits.available() < 11) {
+            throw FormatException();
+        }
+        int nextTwoCharsBits = bits.readBits(11);
+        bytes << toAlphaNumericChar(nextTwoCharsBits / 45);
+        bytes << toAlphaNumericChar(nextTwoCharsBits % 45);
+        count -= 2;
+    }
+    if (count == 1) {
+        // special case: one character left
+        if (bits.available() < 6) {
+            throw FormatException();
+        }
+        bytes << toAlphaNumericChar(bits.readBits(6));
+    }
+    // See section 6.4.8.1, 6.4.8.2
+    string s = bytes.str();
+    if (fc1InEffect) {
+        // We need to massage the result a bit if in an FNC1 mode:
+        ostringstream r;
+        for (size_t i = 0; i < s.length(); i++) {
+            if (s[i] != '%') {
+                r << s[i];
+            } else {
+                if (i < s.length() - 1 && s[i + 1] == '%') {
+                    // %% is rendered as %
+                    r << s[i++];
+                } else {
+                    // In alpha mode, % should be converted to FNC1 separator 
0x1D
+                    r << (char)0x1D;
+                }
+            }
+        }
+        s = r.str();
+    }
+    append(result, s, StringUtils::ASCII);
+}
+
+namespace {
+int parseECIValue(BitSource bits) {
+    int firstByte = bits.readBits(8);
+    if ((firstByte & 0x80) == 0) {
+        // just one byte
+        return firstByte & 0x7F;
+    }
+    if ((firstByte & 0xC0) == 0x80) {
+        // two bytes
+        int secondByte = bits.readBits(8);
+        return ((firstByte & 0x3F) << 8) | secondByte;
+    }
+    if ((firstByte & 0xE0) == 0xC0) {
+        // three bytes
+        int secondThirdBytes = bits.readBits(16);
+        return ((firstByte & 0x1F) << 16) | secondThirdBytes;
+    }
+    throw FormatException();
+}
+}
+
+Ref<DecoderResult>
+DecodedBitStreamParser::decode(ArrayRef<unsigned char> bytes,
+                               Version* version,
+                               ErrorCorrectionLevel const& ecLevel,
+                               Hashtable const& hints) {
+    Ref<BitSource> bits_ (new BitSource(bytes));
+    BitSource& bits (*bits_);
+    string result;
+    CharacterSetECI* currentCharacterSetECI = 0;
+    bool fc1InEffect = false;
+    ArrayRef< ArrayRef<unsigned char> > byteSegments (size_t(0));
+    Mode* mode = 0;
+    do {
+        // While still another segment to read...
+        if (bits.available() < 4) {
+            // OK, assume we're done. Really, a TERMINATOR mode should have 
been recorded here
+            mode = &Mode::TERMINATOR;
+        } else {
+            try {
+                mode = &Mode::forBits(bits.readBits(4)); // mode is encoded by 
4 bits
+            } catch (IllegalArgumentException const& iae) {
+                throw iae;
+                // throw FormatException.getFormatInstance();
+            }
+        }
+        if (mode != &Mode::TERMINATOR) {
+            if ((mode == &Mode::FNC1_FIRST_POSITION) || (mode == 
&Mode::FNC1_SECOND_POSITION)) {
+                // We do little with FNC1 except alter the parsed result a bit 
according to the spec
+                fc1InEffect = true;
+            } else if (mode == &Mode::STRUCTURED_APPEND) {
+                // not really supported; all we do is ignore it
+                // Read next 8 bits (symbol sequence #) and 8 bits (parity 
data), then continue
+                bits.readBits(16);
+            } else if (mode == &Mode::ECI) {
+                // Count doesn't apply to ECI
+                int value = parseECIValue(bits);
+                currentCharacterSetECI = 
CharacterSetECI::getCharacterSetECIByValue(value);
+                if (currentCharacterSetECI == 0) {
+                    throw FormatException();
+                }
+            } else {
+                // First handle Hanzi mode which does not start with character 
count
+                if (mode == &Mode::HANZI) {
+                    //chinese mode contains a sub set indicator right after 
mode indicator
+                    int subset = bits.readBits(4);
+                    int countHanzi = 
bits.readBits(mode->getCharacterCountBits(version));
+                    if (subset == GB2312_SUBSET) {
+                        decodeHanziSegment(bits_, result, countHanzi);
+                    }
+                } else {
+                    // "Normal" QR code modes:
+                    // How many characters will follow, encoded in this mode?
+                    int count = 
bits.readBits(mode->getCharacterCountBits(version));
+                    if (mode == &Mode::NUMERIC) {
+                        decodeNumericSegment(bits_, result, count);
+                    } else if (mode == &Mode::ALPHANUMERIC) {
+                        decodeAlphanumericSegment(bits_, result, count, 
fc1InEffect);
+                    } else if (mode == &Mode::BYTE) {
+                        decodeByteSegment(bits_, result, count, 
currentCharacterSetECI, byteSegments, hints);
+                    } else if (mode == &Mode::KANJI) {
+                        decodeKanjiSegment(bits_, result, count);
+                    } else {
+                        throw FormatException();
+                    }
+                }
+            }
+        }
+    } while (mode != &Mode::TERMINATOR);
+
+    return Ref<DecoderResult>(new DecoderResult(bytes, Ref<String>(new 
String(result)), byteSegments, (string)ecLevel));
+}
+

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDecoder.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDecoder.cpp    
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRDecoder.cpp    
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,102 @@
+/*
+ *  Decoder.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 20/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/decoder/Decoder.h>
+#include <zxing/qrcode/decoder/BitMatrixParser.h>
+#include <zxing/qrcode/ErrorCorrectionLevel.h>
+#include <zxing/qrcode/Version.h>
+#include <zxing/qrcode/decoder/DataBlock.h>
+#include <zxing/qrcode/decoder/DecodedBitStreamParser.h>
+#include <zxing/ReaderException.h>
+#include <zxing/common/reedsolomon/ReedSolomonException.h>
+
+namespace zxing {
+namespace qrcode {
+
+using namespace std;
+
+Decoder::Decoder() :
+    rsDecoder_(GenericGF::QR_CODE_FIELD_256) {
+}
+
+void Decoder::correctErrors(ArrayRef<unsigned char> codewordBytes, int 
numDataCodewords) {
+  int numCodewords = codewordBytes->size();
+  ArrayRef<int> codewordInts(numCodewords);
+  for (int i = 0; i < numCodewords; i++) {
+    codewordInts[i] = codewordBytes[i] & 0xff;
+  }
+  int numECCodewords = numCodewords - numDataCodewords;
+
+  try {
+    rsDecoder_.decode(codewordInts, numECCodewords);
+  } catch (ReedSolomonException const& ex) {
+    ReaderException rex(ex.what());
+    throw rex;
+  }
+
+  for (int i = 0; i < numDataCodewords; i++) {
+    codewordBytes[i] = (unsigned char)codewordInts[i];
+  }
+}
+
+Ref<DecoderResult> Decoder::decode(Ref<BitMatrix> bits) {
+  // Construct a parser and read version, error-correction level
+  BitMatrixParser parser(bits);
+
+  Version *version = parser.readVersion();
+  ErrorCorrectionLevel &ecLevel = 
parser.readFormatInformation()->getErrorCorrectionLevel();
+
+
+  // Read codewords
+  ArrayRef<unsigned char> codewords(parser.readCodewords());
+
+
+  // Separate into data blocks
+  std::vector<Ref<DataBlock> > dataBlocks(DataBlock::getDataBlocks(codewords, 
version, ecLevel));
+
+
+  // Count total number of data bytes
+  int totalBytes = 0;
+  for (size_t i = 0; i < dataBlocks.size(); i++) {
+    totalBytes += dataBlocks[i]->getNumDataCodewords();
+  }
+  ArrayRef<unsigned char> resultBytes(totalBytes);
+  int resultOffset = 0;
+
+
+  // Error-correct and copy data blocks together into a stream of bytes
+  for (size_t j = 0; j < dataBlocks.size(); j++) {
+    Ref<DataBlock> dataBlock(dataBlocks[j]);
+    ArrayRef<unsigned char> codewordBytes = dataBlock->getCodewords();
+    int numDataCodewords = dataBlock->getNumDataCodewords();
+    correctErrors(codewordBytes, numDataCodewords);
+    for (int i = 0; i < numDataCodewords; i++) {
+      resultBytes[resultOffset++] = codewordBytes[i];
+    }
+  }
+
+  return DecodedBitStreamParser::decode(resultBytes,
+                                        version,
+                                        ecLevel,
+                                        DecodedBitStreamParser::Hashtable());
+}
+
+}
+}

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRMode.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRMode.cpp       
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/decoder/QRMode.cpp       
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,86 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Mode.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 19/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/decoder/Mode.h>
+#include <zxing/common/Counted.h>
+#include <zxing/ReaderException.h>
+#include <zxing/qrcode/Version.h>
+#include <sstream>
+
+using zxing::qrcode::Mode;
+using std::ostringstream;
+
+Mode Mode::TERMINATOR(0, 0, 0, 0x00, "TERMINATOR");
+Mode Mode::NUMERIC(10, 12, 14, 0x01, "NUMERIC");
+Mode Mode::ALPHANUMERIC(9, 11, 13, 0x02, "ALPHANUMERIC");
+Mode Mode::STRUCTURED_APPEND(0, 0, 0, 0x03, "STRUCTURED_APPEND");
+Mode Mode::BYTE(8, 16, 16, 0x04, "BYTE");
+Mode Mode::ECI(0, 0, 0, 0x07, "ECI");
+Mode Mode::KANJI(8, 10, 12, 0x08, "KANJI");
+Mode Mode::FNC1_FIRST_POSITION(0, 0, 0, 0x05, "FNC1_FIRST_POSITION");
+Mode Mode::FNC1_SECOND_POSITION(0, 0, 0, 0x09, "FNC1_SECOND_POSITION");
+Mode Mode::HANZI(8, 10, 12, 0x0D, "HANZI");
+
+Mode::Mode(int cbv0_9, int cbv10_26, int cbv27, int bits, char const* name) :
+    characterCountBitsForVersions0To9_(cbv0_9), 
characterCountBitsForVersions10To26_(cbv10_26),
+    characterCountBitsForVersions27AndHigher_(cbv27), bits_(bits), name_(name) 
{
+}
+
+Mode& Mode::forBits(int bits) {
+    switch (bits) {
+    case 0x0:
+        return TERMINATOR;
+    case 0x1:
+        return NUMERIC;
+    case 0x2:
+        return ALPHANUMERIC;
+    case 0x3:
+        return STRUCTURED_APPEND;
+    case 0x4:
+        return BYTE;
+    case 0x5:
+        return FNC1_FIRST_POSITION;
+    case 0x7:
+        return ECI;
+    case 0x8:
+        return KANJI;
+    case 0x9:
+        return FNC1_SECOND_POSITION;
+    case 0xD:
+        // 0xD is defined in GBT 18284-2000, may not be supported in foreign 
country
+        return HANZI;
+    default:
+        ostringstream s;
+        s << "Illegal mode bits: " << bits;
+        throw ReaderException(s.str().c_str());
+    }
+}
+
+int Mode::getCharacterCountBits(Version *version) {
+  int number = version->getVersionNumber();
+  if (number <= 9) {
+    return characterCountBitsForVersions0To9_;
+  } else if (number <= 26) {
+    return characterCountBitsForVersions10To26_;
+  } else {
+    return characterCountBitsForVersions27AndHigher_;
+  }
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/AlignmentPattern.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/AlignmentPattern.h  
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/AlignmentPattern.h  
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,45 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+
+#ifndef __ALIGNMENT_PATTERN_H__
+#define __ALIGNMENT_PATTERN_H__
+
+/*
+ *  AlignmentPattern.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/ResultPoint.h>
+#include <cmath>
+
+namespace zxing {
+       namespace qrcode {
+               
+               class AlignmentPattern : public ResultPoint {
+               private:
+                       float estimatedModuleSize_;
+                       
+               public:
+                       AlignmentPattern(float posX, float posY, float 
estimatedModuleSize);
+                       bool aboutEquals(float moduleSize, float i, float j) 
const;
+      Ref<AlignmentPattern> combineEstimate(float i, float j,
+                                            float newModuleSize) const;
+               };
+               
+       }
+}
+
+#endif // __ALIGNMENT_PATTERN_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/AlignmentPatternFinder.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/AlignmentPatternFinder.h
                                (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/AlignmentPatternFinder.h
        2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,68 @@
+#ifndef __ALIGNMENT_PATTERN_FINDER_H__
+#define __ALIGNMENT_PATTERN_FINDER_H__
+
+/*
+ *  AlignmentPatternFinder.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "AlignmentPattern.h"
+#include <zxing/common/Counted.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/ResultPointCallback.h>
+#include <vector>
+
+namespace zxing {
+namespace qrcode {
+
+class AlignmentPatternFinder : public Counted {
+private:
+  static int CENTER_QUORUM;
+  static int MIN_SKIP;
+  static int MAX_MODULES;
+
+  Ref<BitMatrix> image_;
+  std::vector<AlignmentPattern *> *possibleCenters_;
+  size_t startX_;
+  size_t startY_;
+  size_t width_;
+  size_t height_;
+  float moduleSize_;
+
+  static float centerFromEnd(std::vector<int> &stateCount, int end);
+  bool foundPatternCross(std::vector<int> &stateCount);
+
+  float crossCheckVertical(size_t startI, size_t centerJ, int maxCount, int 
originalStateCountTotal);
+
+  Ref<AlignmentPattern> handlePossibleCenter(std::vector<int> &stateCount, 
size_t i, size_t j);
+
+public:
+  AlignmentPatternFinder(Ref<BitMatrix> image, size_t startX, size_t startY, 
size_t width, size_t height,
+                         float moduleSize, Ref<ResultPointCallback>const& 
callback);
+  ~AlignmentPatternFinder();
+  Ref<AlignmentPattern> find();
+  
+private:
+  AlignmentPatternFinder(const AlignmentPatternFinder&);
+  AlignmentPatternFinder& operator =(const AlignmentPatternFinder&);
+  
+  Ref<ResultPointCallback> callback_;
+};
+}
+}
+
+#endif // __ALIGNMENT_PATTERN_FINDER_H__

Added: gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/Detector.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/Detector.h      
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/Detector.h      
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,66 @@
+#ifndef __DETECTOR_H__
+#define __DETECTOR_H__
+
+/*
+ *  Detector.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+#include <zxing/common/DetectorResult.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/qrcode/detector/AlignmentPattern.h>
+#include <zxing/common/PerspectiveTransform.h>
+#include <zxing/ResultPointCallback.h>
+#include <zxing/qrcode/detector/FinderPatternInfo.h>
+
+namespace zxing {
+
+class DecodeHints;
+
+namespace qrcode {
+
+class Detector : public Counted {
+private:
+  Ref<BitMatrix> image_;
+  Ref<ResultPointCallback> callback_;
+
+protected:
+  Ref<BitMatrix> getImage();
+
+  static Ref<BitMatrix> sampleGrid(Ref<BitMatrix> image, int dimension, 
Ref<PerspectiveTransform>);
+  static int computeDimension(Ref<ResultPoint> topLeft, Ref<ResultPoint> 
topRight, Ref<ResultPoint> bottomLeft,
+                              float moduleSize);
+  float calculateModuleSize(Ref<ResultPoint> topLeft, Ref<ResultPoint> 
topRight, Ref<ResultPoint> bottomLeft);
+  float calculateModuleSizeOneWay(Ref<ResultPoint> pattern, Ref<ResultPoint> 
otherPattern);
+  float sizeOfBlackWhiteBlackRunBothWays(int fromX, int fromY, int toX, int 
toY);
+  float sizeOfBlackWhiteBlackRun(int fromX, int fromY, int toX, int toY);
+  Ref<AlignmentPattern> findAlignmentInRegion(float overallEstModuleSize, int 
estAlignmentX, int estAlignmentY,
+      float allowanceFactor);
+  Ref<DetectorResult> processFinderPatternInfo(Ref<FinderPatternInfo> info);
+public:
+
+  virtual Ref<PerspectiveTransform> createTransform(Ref<ResultPoint> topLeft, 
Ref<ResultPoint> topRight, Ref <
+      ResultPoint > bottomLeft, Ref<ResultPoint> alignmentPattern, int 
dimension);
+
+  Detector(Ref<BitMatrix> image);
+  Ref<DetectorResult> detect(DecodeHints const& hints);
+};
+}
+}
+
+#endif // __DETECTOR_H__
\ No newline at end of file

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/FinderPattern.h
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/FinderPattern.h 
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/FinderPattern.h 
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,47 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+#ifndef __FINDER_PATTERN_H__
+#define __FINDER_PATTERN_H__
+
+/*
+ *  FinderPattern.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/ResultPoint.h>
+#include <cmath>
+
+namespace zxing {
+       namespace qrcode {
+               
+               class FinderPattern : public ResultPoint {
+               private:
+                       float estimatedModuleSize_;
+                       int count_;
+                       
+               public:
+                       FinderPattern(float posX, float posY, float 
estimatedModuleSize);
+                       FinderPattern(float posX, float posY, float 
estimatedModuleSize, int count);
+                       int getCount() const;
+                       float getEstimatedModuleSize() const;
+                       void incrementCount();
+                       bool aboutEquals(float moduleSize, float i, float j) 
const;
+                       Ref<FinderPattern> combineEstimate(float i, float j, 
float newModuleSize) const;
+               };
+       }
+}
+
+#endif // __FINDER_PATTERN_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/FinderPatternFinder.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/FinderPatternFinder.h
                           (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/FinderPatternFinder.h
   2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,71 @@
+#ifndef __FINDER_PATTERN_FINDER_H__
+#define __FINDER_PATTERN_FINDER_H__
+
+/*
+ *  FinderPatternFinder.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/detector/FinderPattern.h>
+#include <zxing/qrcode/detector/FinderPatternInfo.h>
+#include <zxing/common/Counted.h>
+#include <zxing/common/BitMatrix.h>
+#include <zxing/ResultPointCallback.h>
+#include <vector>
+
+namespace zxing {
+
+class DecodeHints;
+
+namespace qrcode {
+
+class FinderPatternFinder {
+private:
+  static int CENTER_QUORUM;
+
+protected:
+  static int MIN_SKIP;
+  static int MAX_MODULES;
+
+  Ref<BitMatrix> image_;
+  std::vector<Ref<FinderPattern> > possibleCenters_;
+  bool hasSkipped_;
+
+  Ref<ResultPointCallback> callback_;
+
+  /** stateCount must be int[5] */
+  static float centerFromEnd(int* stateCount, int end);
+  static bool foundPatternCross(int* stateCount);
+
+  float crossCheckVertical(size_t startI, size_t centerJ, int maxCount, int 
originalStateCountTotal);
+  float crossCheckHorizontal(size_t startJ, size_t centerI, int maxCount, int 
originalStateCountTotal);
+
+  /** stateCount must be int[5] */
+  bool handlePossibleCenter(int* stateCount, size_t i, size_t j);
+  int findRowSkip();
+  bool haveMultiplyConfirmedCenters();
+  std::vector<Ref<FinderPattern> > selectBestPatterns();
+  static std::vector<Ref<FinderPattern> > 
orderBestPatterns(std::vector<Ref<FinderPattern> > patterns);
+public:
+  static float distance(Ref<ResultPoint> p1, Ref<ResultPoint> p2);
+  FinderPatternFinder(Ref<BitMatrix> image, Ref<ResultPointCallback>const&);
+  Ref<FinderPatternInfo> find(DecodeHints const& hints);
+};
+}
+}
+
+#endif // __FINDER_PATTERN_FINDER_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/FinderPatternInfo.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/FinderPatternInfo.h 
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/FinderPatternInfo.h 
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,47 @@
+#ifndef __FINDER_PATTERN_INFO_H__
+#define __FINDER_PATTERN_INFO_H__
+
+/*
+ *  FinderPatternInfo.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/detector/FinderPattern.h>
+#include <zxing/common/Counted.h>
+#include <zxing/common/Array.h>
+#include <vector>
+
+namespace zxing {
+namespace qrcode {
+
+class FinderPatternInfo : public Counted {
+private:
+  Ref<FinderPattern> bottomLeft_;
+  Ref<FinderPattern> topLeft_;
+  Ref<FinderPattern> topRight_;
+
+public:
+  FinderPatternInfo(std::vector<Ref<FinderPattern> > patternCenters);
+
+  Ref<FinderPattern> getBottomLeft();
+  Ref<FinderPattern> getTopLeft();
+  Ref<FinderPattern> getTopRight();
+};
+}
+}
+
+#endif // __FINDER_PATTERN_INFO_H__

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRAlignmentPattern.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRAlignmentPattern.cpp
                          (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRAlignmentPattern.cpp
  2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,51 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  AlignmentPattern.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 13/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/detector/AlignmentPattern.h>
+
+namespace zxing {
+namespace qrcode {
+
+using namespace std;
+
+AlignmentPattern::AlignmentPattern(float posX, float posY, float 
estimatedModuleSize) :
+    ResultPoint(posX,posY), estimatedModuleSize_(estimatedModuleSize) {
+}
+
+bool AlignmentPattern::aboutEquals(float moduleSize, float i, float j) const {
+  if (abs(i - getY()) <= moduleSize && abs(j - getX()) <= moduleSize) {
+    float moduleSizeDiff = abs(moduleSize - estimatedModuleSize_);
+    return moduleSizeDiff <= 1.0f || moduleSizeDiff <= estimatedModuleSize_;
+  }
+  return false;
+}
+
+Ref<AlignmentPattern> AlignmentPattern::combineEstimate(float i, float j, 
float newModuleSize) const {
+  float combinedX = (getX() + j) / 2.0f;
+  float combinedY = (getY() + i) / 2.0f;
+  float combinedModuleSize = (estimatedModuleSize_ + newModuleSize) / 2.0f;
+  Ref<AlignmentPattern> result
+    (new AlignmentPattern(combinedX, combinedY, combinedModuleSize));
+  return result;
+}
+
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRAlignmentPatternFinder.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRAlignmentPatternFinder.cpp
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRAlignmentPatternFinder.cpp
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,209 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  AlignmentPatternFinder.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 14/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "AlignmentPatternFinder.h"
+#include <zxing/ReaderException.h>
+#include <zxing/common/BitArray.h>
+#include <vector>
+#include <cmath>
+#include <cstdlib>
+
+namespace zxing {
+namespace qrcode {
+
+using namespace std;
+
+float AlignmentPatternFinder::centerFromEnd(vector<int> &stateCount, int end) {
+  return (float)(end - stateCount[2]) - stateCount[1] / 2.0f;
+}
+
+bool AlignmentPatternFinder::foundPatternCross(vector<int> &stateCount) {
+  float maxVariance = moduleSize_ / 2.0f;
+  for (size_t i = 0; i < 3; i++) {
+    if (abs(moduleSize_ - stateCount[i]) >= maxVariance) {
+      return false;
+    }
+  }
+  return true;
+}
+
+float AlignmentPatternFinder::crossCheckVertical(size_t startI, size_t 
centerJ, int maxCount,
+    int originalStateCountTotal) {
+  int maxI = image_->getHeight();
+  vector<int> stateCount(3, 0);
+
+
+  // Start counting up from center
+  int i = startI;
+  while (i >= 0 && image_->get(centerJ, i) && stateCount[1] <= maxCount) {
+    stateCount[1]++;
+    i--;
+  }
+  // If already too many modules in this state or ran off the edge:
+  if (i < 0 || stateCount[1] > maxCount) {
+    return NAN;
+  }
+  while (i >= 0 && !image_->get(centerJ, i) && stateCount[0] <= maxCount) {
+    stateCount[0]++;
+    i--;
+  }
+  if (stateCount[0] > maxCount) {
+    return NAN;
+  }
+
+  // Now also count down from center
+  i = startI + 1;
+  while (i < maxI && image_->get(centerJ, i) && stateCount[1] <= maxCount) {
+    stateCount[1]++;
+    i++;
+  }
+  if (i == maxI || stateCount[1] > maxCount) {
+    return NAN;
+  }
+  while (i < maxI && !image_->get(centerJ, i) && stateCount[2] <= maxCount) {
+    stateCount[2]++;
+    i++;
+  }
+  if (stateCount[2] > maxCount) {
+    return NAN;
+  }
+
+  int stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2];
+  if (5 * abs(stateCountTotal - originalStateCountTotal) >= 2 * 
originalStateCountTotal) {
+    return NAN;
+  }
+
+  return foundPatternCross(stateCount) ? centerFromEnd(stateCount, i) : NAN;
+}
+
+Ref<AlignmentPattern> AlignmentPatternFinder::handlePossibleCenter(vector<int> 
&stateCount, size_t i, size_t j) {
+  int stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2];
+  float centerJ = centerFromEnd(stateCount, j);
+  float centerI = crossCheckVertical(i, (int)centerJ, 2 * stateCount[1], 
stateCountTotal);
+  if (!isnan(centerI)) {
+    float estimatedModuleSize = (float)(stateCount[0] + stateCount[1] + 
stateCount[2]) / 3.0f;
+    int max = possibleCenters_->size();
+    for (int index = 0; index < max; index++) {
+      Ref<AlignmentPattern> center((*possibleCenters_)[index]);
+      // Look for about the same center and module size:
+      if (center->aboutEquals(estimatedModuleSize, centerI, centerJ)) {
+        return center->combineEstimate(centerI, centerJ, estimatedModuleSize);
+      }
+    }
+    AlignmentPattern *tmp = new AlignmentPattern(centerJ, centerI, 
estimatedModuleSize);
+    // Hadn't found this before; save it
+    tmp->retain();
+    possibleCenters_->push_back(tmp);
+    if (callback_ != 0) {
+      callback_->foundPossibleResultPoint(*tmp);
+    }
+  }
+  Ref<AlignmentPattern> result;
+  return result;
+}
+
+AlignmentPatternFinder::AlignmentPatternFinder(Ref<BitMatrix> image, size_t 
startX, size_t startY, size_t width,
+                                               size_t height, float 
moduleSize, 
+                                               Ref<ResultPointCallback>const& 
callback) :
+    image_(image), possibleCenters_(new vector<AlignmentPattern *> ()), 
startX_(startX), startY_(startY),
+    width_(width), height_(height), moduleSize_(moduleSize), 
callback_(callback) {
+}
+
+AlignmentPatternFinder::~AlignmentPatternFinder() {
+  for (size_t i = 0; i < possibleCenters_->size(); i++) {
+    (*possibleCenters_)[i]->release();
+    (*possibleCenters_)[i] = 0;
+  }
+  delete possibleCenters_;
+}
+
+Ref<AlignmentPattern> AlignmentPatternFinder::find() {
+  size_t maxJ = startX_ + width_;
+  size_t middleI = startY_ + (height_ >> 1);
+  //      Ref<BitArray> luminanceRow(new BitArray(width_));
+  // We are looking for black/white/black modules in 1:1:1 ratio;
+  // this tracks the number of black/white/black modules seen so far
+  vector<int> stateCount(3, 0);
+  for (size_t iGen = 0; iGen < height_; iGen++) {
+    // Search from middle outwards
+    size_t i = middleI + ((iGen & 0x01) == 0 ? ((iGen + 1) >> 1) : -((iGen + 
1) >> 1));
+    //        image_->getBlackRow(i, luminanceRow, startX_, width_);
+    stateCount[0] = 0;
+    stateCount[1] = 0;
+    stateCount[2] = 0;
+    size_t j = startX_;
+    // Burn off leading white pixels before anything else; if we start in the 
middle of
+    // a white run, it doesn't make sense to count its length, since we don't 
know if the
+    // white run continued to the left of the start point
+    while (j < maxJ && !image_->get(j, i)) {
+      j++;
+    }
+    int currentState = 0;
+    while (j < maxJ) {
+      if (image_->get(j, i)) {
+        // Black pixel
+        if (currentState == 1) { // Counting black pixels
+          stateCount[currentState]++;
+        } else { // Counting white pixels
+          if (currentState == 2) { // A winner?
+            if (foundPatternCross(stateCount)) { // Yes
+              Ref<AlignmentPattern> confirmed(handlePossibleCenter(stateCount, 
i, j));
+              if (confirmed != 0) {
+                return confirmed;
+              }
+            }
+            stateCount[0] = stateCount[2];
+            stateCount[1] = 1;
+            stateCount[2] = 0;
+            currentState = 1;
+          } else {
+            stateCount[++currentState]++;
+          }
+        }
+      } else { // White pixel
+        if (currentState == 1) { // Counting black pixels
+          currentState++;
+        }
+        stateCount[currentState]++;
+      }
+      j++;
+    }
+    if (foundPatternCross(stateCount)) {
+      Ref<AlignmentPattern> confirmed(handlePossibleCenter(stateCount, i, 
maxJ));
+      if (confirmed != 0) {
+        return confirmed;
+      }
+    }
+
+  }
+
+  // Hmm, nothing we saw was observed and confirmed twice. If we had
+  // any guess at all, return it.
+  if (possibleCenters_->size() > 0) {
+    Ref<AlignmentPattern> center((*possibleCenters_)[0]);
+    return center;
+  }
+
+  throw zxing::ReaderException("Could not find alignment pattern");
+}
+
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRDetector.cpp
===================================================================
--- gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRDetector.cpp  
                        (rev 0)
+++ gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRDetector.cpp  
2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,298 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Detector.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 14/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/detector/Detector.h>
+#include <zxing/qrcode/detector/FinderPatternFinder.h>
+#include <zxing/qrcode/detector/FinderPattern.h>
+#include <zxing/qrcode/detector/AlignmentPattern.h>
+#include <zxing/qrcode/detector/AlignmentPatternFinder.h>
+#include <zxing/qrcode/Version.h>
+#include <zxing/common/GridSampler.h>
+#include <zxing/DecodeHints.h>
+#include <cmath>
+#include <sstream>
+#include <cstdlib>
+
+namespace zxing {
+namespace qrcode {
+
+using namespace std;
+
+Detector::Detector(Ref<BitMatrix> image) :
+    image_(image) {
+}
+
+Ref<BitMatrix> Detector::getImage() {
+   return image_;
+}
+
+Ref<DetectorResult> Detector::detect(DecodeHints const& hints) {
+  callback_ = hints.getResultPointCallback();
+  FinderPatternFinder finder(image_, hints.getResultPointCallback());
+  Ref<FinderPatternInfo> info(finder.find(hints));
+  return processFinderPatternInfo(info);
+}
+
+Ref<DetectorResult> Detector::processFinderPatternInfo(Ref<FinderPatternInfo> 
info){
+  Ref<FinderPattern> topLeft(info->getTopLeft());
+  Ref<FinderPattern> topRight(info->getTopRight());
+  Ref<FinderPattern> bottomLeft(info->getBottomLeft());
+
+  float moduleSize = calculateModuleSize(topLeft, topRight, bottomLeft);
+  if (moduleSize < 1.0f) {
+    throw zxing::ReaderException("bad module size");
+  }
+  int dimension = computeDimension(topLeft, topRight, bottomLeft, moduleSize);
+  Version *provisionalVersion = 
Version::getProvisionalVersionForDimension(dimension);
+  int modulesBetweenFPCenters = provisionalVersion->getDimensionForVersion() - 
7;
+
+  Ref<AlignmentPattern> alignmentPattern;
+  // Anything above version 1 has an alignment pattern
+  if (provisionalVersion->getAlignmentPatternCenters().size() > 0) {
+
+
+    // Guess where a "bottom right" finder pattern would have been
+    float bottomRightX = topRight->getX() - topLeft->getX() + 
bottomLeft->getX();
+    float bottomRightY = topRight->getY() - topLeft->getY() + 
bottomLeft->getY();
+
+
+    // Estimate that alignment pattern is closer by 3 modules
+    // from "bottom right" to known top left location
+    float correctionToTopLeft = 1.0f - 3.0f / (float)modulesBetweenFPCenters;
+    int estAlignmentX = (int)(topLeft->getX() + correctionToTopLeft * 
(bottomRightX - topLeft->getX()));
+    int estAlignmentY = (int)(topLeft->getY() + correctionToTopLeft * 
(bottomRightY - topLeft->getY()));
+
+
+    // Kind of arbitrary -- expand search radius before giving up
+    for (int i = 4; i <= 16; i <<= 1) {
+      try {
+        alignmentPattern = findAlignmentInRegion(moduleSize, estAlignmentX, 
estAlignmentY, (float)i);
+        break;
+      } catch (zxing::ReaderException const& re) {
+        // try next round
+      }
+    }
+    if (alignmentPattern == 0) {
+      // Try anyway
+    }
+
+  }
+
+  Ref<PerspectiveTransform> transform = createTransform(topLeft, topRight, 
bottomLeft, alignmentPattern, dimension);
+  Ref<BitMatrix> bits(sampleGrid(image_, dimension, transform));
+  std::vector<Ref<ResultPoint> > points(alignmentPattern == 0 ? 3 : 4);
+  points[0].reset(bottomLeft);
+  points[1].reset(topLeft);
+  points[2].reset(topRight);
+  if (alignmentPattern != 0) {
+    points[3].reset(alignmentPattern);
+  }
+
+            Ref<DetectorResult> result(new DetectorResult(bits, points));
+  return result;
+}
+
+Ref<PerspectiveTransform> Detector::createTransform(Ref<ResultPoint> topLeft, 
Ref<ResultPoint> topRight, Ref <
+    ResultPoint > bottomLeft, Ref<ResultPoint> alignmentPattern, int 
dimension) {
+
+  float dimMinusThree = (float)dimension - 3.5f;
+  float bottomRightX;
+  float bottomRightY;
+  float sourceBottomRightX;
+  float sourceBottomRightY;
+  if (alignmentPattern != 0) {
+    bottomRightX = alignmentPattern->getX();
+    bottomRightY = alignmentPattern->getY();
+    sourceBottomRightX = sourceBottomRightY = dimMinusThree - 3.0f;
+  } else {
+    // Don't have an alignment pattern, just make up the bottom-right point
+    bottomRightX = (topRight->getX() - topLeft->getX()) + bottomLeft->getX();
+    bottomRightY = (topRight->getY() - topLeft->getY()) + bottomLeft->getY();
+    sourceBottomRightX = sourceBottomRightY = dimMinusThree;
+  }
+
+  Ref<PerspectiveTransform> 
transform(PerspectiveTransform::quadrilateralToQuadrilateral(3.5f, 3.5f, 
dimMinusThree, 3.5f, sourceBottomRightX,
+                                      sourceBottomRightY, 3.5f, dimMinusThree, 
topLeft->getX(), topLeft->getY(), topRight->getX(),
+                                      topRight->getY(), bottomRightX, 
bottomRightY, bottomLeft->getX(), bottomLeft->getY()));
+
+  return transform;
+}
+
+Ref<BitMatrix> Detector::sampleGrid(Ref<BitMatrix> image, int dimension, 
Ref<PerspectiveTransform> transform) {
+  GridSampler &sampler = GridSampler::getInstance();
+  return sampler.sampleGrid(image, dimension, transform);
+}
+
+int Detector::computeDimension(Ref<ResultPoint> topLeft, Ref<ResultPoint> 
topRight, Ref<ResultPoint> bottomLeft,
+                               float moduleSize) {
+  int tltrCentersDimension = int(FinderPatternFinder::distance(topLeft, 
topRight) / moduleSize + 0.5f);
+  int tlblCentersDimension = int(FinderPatternFinder::distance(topLeft, 
bottomLeft) / moduleSize + 0.5f);
+  int dimension = ((tltrCentersDimension + tlblCentersDimension) >> 1) + 7;
+  switch (dimension & 0x03) { // mod 4
+  case 0:
+    dimension++;
+    break;
+    // 1? do nothing
+  case 2:
+    dimension--;
+    break;
+  case 3:
+    ostringstream s;
+    s << "Bad dimension: " << dimension;
+    throw zxing::ReaderException(s.str().c_str());
+  }
+  return dimension;
+}
+
+float Detector::calculateModuleSize(Ref<ResultPoint> topLeft, Ref<ResultPoint> 
topRight, Ref<ResultPoint> bottomLeft) {
+  // Take the average
+  return (calculateModuleSizeOneWay(topLeft, topRight) + 
calculateModuleSizeOneWay(topLeft, bottomLeft)) / 2.0f;
+}
+
+float Detector::calculateModuleSizeOneWay(Ref<ResultPoint> pattern, 
Ref<ResultPoint> otherPattern) {
+  float moduleSizeEst1 = 
sizeOfBlackWhiteBlackRunBothWays((int)pattern->getX(), (int)pattern->getY(),
+                         (int)otherPattern->getX(), (int)otherPattern->getY());
+  float moduleSizeEst2 = 
sizeOfBlackWhiteBlackRunBothWays((int)otherPattern->getX(), 
(int)otherPattern->getY(),
+                         (int)pattern->getX(), (int)pattern->getY());
+  if (isnan(moduleSizeEst1)) {
+    return moduleSizeEst2;
+  }
+  if (isnan(moduleSizeEst2)) {
+    return moduleSizeEst1;
+  }
+  // Average them, and divide by 7 since we've counted the width of 3 black 
modules,
+  // and 1 white and 1 black module on either side. Ergo, divide sum by 14.
+  return (moduleSizeEst1 + moduleSizeEst2) / 14.0f;
+}
+
+float Detector::sizeOfBlackWhiteBlackRunBothWays(int fromX, int fromY, int 
toX, int toY) {
+
+    float result = sizeOfBlackWhiteBlackRun(fromX, fromY, toX, toY);
+
+    // Now count other way -- don't run off image though of course
+    float scale = 1.0f;
+    int otherToX = fromX - (toX - fromX);
+    if (otherToX < 0) {
+      scale = (float) fromX / (float) (fromX - otherToX);
+      otherToX = 0;
+    } else if (otherToX >= (int)image_->getWidth()) {
+      scale = (float) (image_->getWidth() - 1 - fromX) / (float) (otherToX - 
fromX);
+      otherToX = image_->getWidth() - 1;
+    }
+    int otherToY = (int) (fromY - (toY - fromY) * scale);
+
+    scale = 1.0f;
+    if (otherToY < 0) {
+      scale = (float) fromY / (float) (fromY - otherToY);
+      otherToY = 0;
+    } else if (otherToY >= (int)image_->getHeight()) {
+      scale = (float) (image_->getHeight() - 1 - fromY) / (float) (otherToY - 
fromY);
+      otherToY = image_->getHeight() - 1;
+    }
+    otherToX = (int) (fromX + (otherToX - fromX) * scale);
+
+    result += sizeOfBlackWhiteBlackRun(fromX, fromY, otherToX, otherToY);
+
+    // Middle pixel is double-counted this way; subtract 1
+    return result - 1.0f;
+}
+
+float Detector::sizeOfBlackWhiteBlackRun(int fromX, int fromY, int toX, int 
toY) {
+    // Mild variant of Bresenham's algorithm;
+    // see http://en.wikipedia.org/wiki/Bresenham's_line_algorithm
+    bool steep = abs(toY - fromY) > abs(toX - fromX);
+    if (steep) {
+      int temp = fromX;
+      fromX = fromY;
+      fromY = temp;
+      temp = toX;
+      toX = toY;
+      toY = temp;
+    }
+
+    int dx = abs(toX - fromX);
+    int dy = abs(toY - fromY);
+    int error = -dx >> 1;
+    int xstep = fromX < toX ? 1 : -1;
+    int ystep = fromY < toY ? 1 : -1;
+
+    // In black pixels, looking for white, first or second time.
+    int state = 0;
+    // Loop up until x == toX, but not beyond
+    int xLimit = toX + xstep;
+    for (int x = fromX, y = fromY; x != xLimit; x += xstep) {
+      int realX = steep ? y : x;
+      int realY = steep ? x : y;
+
+      // Does current pixel mean we have moved white to black or vice versa?
+      if (!((state == 1) ^ image_->get(realX, realY))) {
+        if (state == 2) {
+          int diffX = x - fromX;
+          int diffY = y - fromY;
+          return (float) sqrt((double) (diffX * diffX + diffY * diffY));
+        }
+        state++;
+      }
+
+      error += dy;
+      if (error > 0) {
+        if (y == toY) {
+          break;
+        }
+        y += ystep;
+        error -= dx;
+      }
+    }
+    // Found black-white-black; give the benefit of the doubt that the next 
pixel outside the image
+    // is "white" so this last point at (toX+xStep,toY) is the right ending. 
This is really a
+    // small approximation; (toX+xStep,toY+yStep) might be really correct. 
Ignore this.
+    if (state == 2) {
+      int diffX = toX + xstep - fromX;
+      int diffY = toY - fromY;
+      return (float) sqrt((double) (diffX * diffX + diffY * diffY));
+    }
+    // else we didn't find even black-white-black; no estimate is really 
possible
+    return NAN;
+}
+
+Ref<AlignmentPattern> Detector::findAlignmentInRegion(float 
overallEstModuleSize, int estAlignmentX, int estAlignmentY,
+    float allowanceFactor) {
+  // Look for an alignment pattern (3 modules in size) around where it
+  // should be
+  int allowance = (int)(allowanceFactor * overallEstModuleSize);
+  int alignmentAreaLeftX = max(0, estAlignmentX - allowance);
+  int alignmentAreaRightX = min((int)(image_->getWidth() - 1), estAlignmentX + 
allowance);
+  if (alignmentAreaRightX - alignmentAreaLeftX < overallEstModuleSize * 3) {
+      throw zxing::ReaderException("region too small to hold alignment 
pattern");
+  }
+  int alignmentAreaTopY = max(0, estAlignmentY - allowance);
+  int alignmentAreaBottomY = min((int)(image_->getHeight() - 1), estAlignmentY 
+ allowance);
+  if (alignmentAreaBottomY - alignmentAreaTopY < overallEstModuleSize * 3) {
+      throw zxing::ReaderException("region too small to hold alignment 
pattern");
+  }
+
+  AlignmentPatternFinder alignmentFinder(image_, alignmentAreaLeftX, 
alignmentAreaTopY, alignmentAreaRightX
+                                         - alignmentAreaLeftX, 
alignmentAreaBottomY - alignmentAreaTopY, overallEstModuleSize, callback_);
+  return alignmentFinder.find();
+}
+
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QREdgeDetector.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QREdgeDetector.cpp  
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QREdgeDetector.cpp  
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,168 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  Created by Ralf Kistner on 7/12/2009.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/detector/QREdgeDetector.h>
+#include <zxing/common/EdgeDetector.h>
+#include <cstdlib>
+
+using namespace std;
+
+namespace zxing {
+namespace qrcode {
+
+static const float patternEdgeThreshold = 2;
+static const int patternEdgeWidth = 3;
+static const float patternEdgeSearchRatio = 1.1;
+static const int patternEdgeSkip = 2;
+
+static const float accurateEdgeThreshold = 3.3;
+static const int accurateEdgeWidth = 7;
+static const int accurateEdgeSkip = 2;
+
+static Point guessLastPattern(Point topLeft, Point topRight, Point bottomLeft) 
{
+  return Point(topRight.x - topLeft.x + bottomLeft.x, topRight.y - topLeft.y + 
bottomLeft.y);
+}
+
+static Point rp(Ref<ResultPoint> rp) {
+  return Point(rp->getX(), rp->getY());
+}
+
+QREdgeDetector::QREdgeDetector(Ref<BitMatrix> image) : Detector(image) { }
+
+Ref<PerspectiveTransform> QREdgeDetector::createTransform(Ref<ResultPoint> 
topLeft, Ref<ResultPoint> topRight, Ref <
+      ResultPoint > bottomLeft, Ref<ResultPoint> alignmentPattern, int 
dimension) {
+
+  if(alignmentPattern == NULL) {
+    Point corner = findCorner(*Detector::getImage(), rp(topLeft), 
rp(topRight), rp(bottomLeft), dimension);
+    return get1CornerTransform(rp(topLeft), rp(topRight), rp(bottomLeft), 
corner, dimension);
+  } else {
+    return Detector::createTransform(topLeft, topRight, bottomLeft, 
alignmentPattern, dimension);
+  }
+}
+
+
+
+
+Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLeft, Point 
topRight, Point bottomLeft, int dimension) {
+  (void)dimension;
+  Point bottomRight = guessLastPattern(topLeft, topRight, bottomLeft);
+
+  Line bottomEst = findPatternEdge(image, bottomLeft, topLeft, bottomRight, 
false);
+  Line rightEst = findPatternEdge(image, topRight, topLeft, bottomRight, true);
+
+  //return EdgeDetector::intersection(bottomEst, rightEst);
+
+  Line bottom = EdgeDetector::findLine(image, bottomEst, false, 
accurateEdgeWidth, accurateEdgeThreshold, accurateEdgeSkip);
+  Line right = EdgeDetector::findLine(image, rightEst, true, 
accurateEdgeWidth, accurateEdgeThreshold, accurateEdgeSkip);
+
+
+  return EdgeDetector::intersection(bottom, right);
+}
+
+Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point pattern, 
Point opposite, Point direction, bool invert) {
+  Point start = endOfReverseBlackWhiteBlackRun(image, pattern, opposite);
+
+  float dx = pattern.x - start.x;
+  float dy = pattern.y - start.y;
+  float dist = sqrt(dx*dx + dy*dy);
+
+  float dirX = direction.x - pattern.x;
+  float dirY = direction.y - pattern.y;
+  float dirSize = sqrt(dirX*dirX + dirY*dirY);
+
+  float nx = dirX/dirSize;
+  float ny = dirY/dirSize;
+
+  float search = dist * patternEdgeSearchRatio;
+  Point a(start.x + nx*search, start.y + ny*search);
+  Point b(start.x - nx*search, start.y - ny*search);
+
+  return EdgeDetector::findLine(image, Line(a, b), invert, patternEdgeWidth, 
patternEdgeThreshold, patternEdgeSkip);
+}
+
+
+Ref<PerspectiveTransform> QREdgeDetector::get1CornerTransform(Point topLeft, 
Point topRight, Point bottomLeft, Point corner, int dimension) {
+  float dimMinusThree = (float) dimension - 3.5f;
+
+  Ref<PerspectiveTransform> 
transform(PerspectiveTransform::quadrilateralToQuadrilateral(3.5f, 3.5f, 
dimMinusThree, 3.5f, dimension,
+                                      dimension, 3.5f, dimMinusThree, 
topLeft.x, topLeft.y, topRight.x,
+                                      topRight.y, corner.x, corner.y, 
bottomLeft.x, bottomLeft.y));
+
+  return transform;
+}
+
+// Adapted from "sizeOfBlackWhiteBlackRun" in zxing::qrcode::Detector
+Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix& image, 
Point from, Point to) {
+  int fromX = (int)from.x;
+  int fromY = (int)from.y;
+  int toX = (int)to.x;
+  int toY = (int)to.y;
+
+  bool steep = abs(toY - fromY) > abs(toX - fromX);
+  if (steep) {
+    int temp = fromX;
+    fromX = fromY;
+    fromY = temp;
+    temp = toX;
+    toX = toY;
+    toY = temp;
+  }
+
+  int dx = abs(toX - fromX);
+  int dy = abs(toY - fromY);
+  int error = -dx >> 1;
+  int ystep = fromY < toY ? -1 : 1;
+  int xstep = fromX < toX ? -1 : 1;
+  int state = 0; // In black pixels, looking for white, first or second time
+
+  // In case there are no points, prepopulate to from
+  int realX = fromX;
+  int realY = fromY;
+  for (int x = fromX, y = fromY; x != toX; x += xstep) {
+    realX = steep ? y : x;
+    realY = steep ? x : y;
+
+    if(realX < 0 || realY < 0 || realX >= (int)image.getWidth() || realY >= 
(int)image.getHeight())
+      break;
+
+    if (state == 1) { // In white pixels, looking for black
+      if (image.get(realX, realY)) {
+        state++;
+      }
+    } else {
+      if (!image.get(realX, realY)) {
+        state++;
+      }
+    }
+
+    if (state == 3) { // Found black, white, black, and stumbled back onto 
white; done
+      return Point(realX, realY);
+    }
+    error += dy;
+    if (error > 0) {
+      y += ystep;
+      error -= dx;
+    }
+  }
+
+  // B-W-B run not found, return the last point visited.
+  return Point(realX, realY);
+}
+
+} // namespace qrcode
+} // namespace zxing

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QREdgeDetector.h
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QREdgeDetector.h    
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QREdgeDetector.h    
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,48 @@
+#ifndef __QREDGEDETECTOR_H__
+#define __QREDGEDETECTOR_H__
+/*
+ *  QREdgeDetector.h
+ *  zxing
+ *
+ *  Copyright 2010 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <zxing/qrcode/detector/Detector.h>
+#include <zxing/common/Point.h>
+
+namespace zxing {
+namespace qrcode {
+
+class QREdgeDetector : public Detector {
+public:
+  QREdgeDetector(Ref<BitMatrix> image);
+
+  virtual Ref<PerspectiveTransform> createTransform(Ref<ResultPoint> topLeft, 
Ref<ResultPoint> topRight, Ref <
+      ResultPoint > bottomLeft, Ref<ResultPoint> alignmentPattern, int 
dimension);
+
+private:
+  Point findCorner(const BitMatrix& image, Point topLeft, Point topRight, 
Point bottomLeft, int dimension);
+  Line findPatternEdge(const BitMatrix& image, Point pattern, Point opposite, 
Point direction, bool invert);
+
+  Point endOfReverseBlackWhiteBlackRun(const BitMatrix& image, Point from, 
Point to);
+
+  Ref<PerspectiveTransform> get1CornerTransform(Point topLeft, Point topRight, 
Point bottomLeft, Point corner, int dimension);
+};
+
+}
+}
+#endif // QREDGEDETECTOR_H_

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRFinderPattern.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRFinderPattern.cpp 
                            (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRFinderPattern.cpp 
    2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,71 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  FinderPattern.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 13/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/detector/FinderPattern.h>
+
+namespace zxing {
+       namespace qrcode {
+               
+               using namespace std;
+               
+               FinderPattern::FinderPattern(float posX, float posY, float 
estimatedModuleSize) :
+               ResultPoint(posX,posY), 
estimatedModuleSize_(estimatedModuleSize), count_(1) {
+               }
+               
+               FinderPattern::FinderPattern(float posX, float posY, float 
estimatedModuleSize, int count) :
+               ResultPoint(posX,posY), 
estimatedModuleSize_(estimatedModuleSize), count_(count) {
+               }
+               
+               int FinderPattern::getCount() const {
+                       return count_;
+               }
+               
+               float FinderPattern::getEstimatedModuleSize() const {
+                       return estimatedModuleSize_;
+               }
+               
+               void FinderPattern::incrementCount() {
+                       count_++;
+               }
+               
+/*
+               bool FinderPattern::aboutEquals(float moduleSize, float i, 
float j) const {
+                       return abs(i - posY_) <= moduleSize && abs(j - posX_) 
<= moduleSize && (abs(moduleSize - estimatedModuleSize_)
+                                                                               
                                                                                
        <= 1.0f || abs(moduleSize - estimatedModuleSize_) / 
estimatedModuleSize_ <= 0.1f);
+               }
+*/
+    bool FinderPattern::aboutEquals(float moduleSize, float i, float j) const {
+      if (abs(i - getY()) <= moduleSize && abs(j - getX()) <= moduleSize) {
+        float moduleSizeDiff = abs(moduleSize - estimatedModuleSize_);
+        return moduleSizeDiff <= 1.0f || moduleSizeDiff <= 
estimatedModuleSize_;
+      }
+      return false;
+    }
+               
+    Ref<FinderPattern> FinderPattern::combineEstimate(float i, float j, float 
newModuleSize) const {
+      int combinedCount = count_ + 1;
+      float combinedX = (count_ * getX() + j) / combinedCount;
+      float combinedY = (count_ * getY() + i) / combinedCount;
+      float combinedModuleSize = (count_ * getEstimatedModuleSize() + 
newModuleSize) / combinedCount;
+      return Ref<FinderPattern>(new FinderPattern(combinedX, combinedY, 
combinedModuleSize, combinedCount));
+    }
+       }
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRFinderPatternFinder.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRFinderPatternFinder.cpp
                               (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRFinderPatternFinder.cpp
       2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,541 @@
+// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
+/*
+ *  FinderPatternFinder.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 13/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/detector/FinderPatternFinder.h>
+#include <zxing/ReaderException.h>
+#include <zxing/DecodeHints.h>
+#include <vector>
+#include <cmath>
+#include <cstdlib>
+#include <algorithm>
+
+namespace zxing {
+namespace qrcode {
+
+using namespace std;
+
+class FurthestFromAverageComparator {
+private:
+  const float averageModuleSize_;
+public:
+  FurthestFromAverageComparator(float averageModuleSize) :
+    averageModuleSize_(averageModuleSize) {
+  }
+  bool operator()(Ref<FinderPattern> a, Ref<FinderPattern> b) {
+    float dA = abs(a->getEstimatedModuleSize() - averageModuleSize_);
+    float dB = abs(b->getEstimatedModuleSize() - averageModuleSize_);
+    return dA > dB;
+  }
+};
+
+class CenterComparator {
+  const float averageModuleSize_;
+public:
+  CenterComparator(float averageModuleSize) :
+    averageModuleSize_(averageModuleSize) {
+  }
+  bool operator()(Ref<FinderPattern> a, Ref<FinderPattern> b) {
+    // N.B.: we want the result in descending order ...
+    if (a->getCount() != b->getCount()) {
+      return a->getCount() > b->getCount();
+    } else {
+      float dA = abs(a->getEstimatedModuleSize() - averageModuleSize_);
+      float dB = abs(b->getEstimatedModuleSize() - averageModuleSize_);
+      return dA < dB;
+    }
+  }
+};
+
+int FinderPatternFinder::CENTER_QUORUM = 2;
+int FinderPatternFinder::MIN_SKIP = 3;
+int FinderPatternFinder::MAX_MODULES = 57;
+
+float FinderPatternFinder::centerFromEnd(int* stateCount, int end) {
+  return (float)(end - stateCount[4] - stateCount[3]) - stateCount[2] / 2.0f;
+}
+
+bool FinderPatternFinder::foundPatternCross(int* stateCount) {
+  int totalModuleSize = 0;
+  for (int i = 0; i < 5; i++) {
+    if (stateCount[i] == 0) {
+      return false;
+    }
+    totalModuleSize += stateCount[i];
+  }
+  if (totalModuleSize < 7) {
+    return false;
+  }
+  float moduleSize = (float)totalModuleSize / 7.0f;
+  float maxVariance = moduleSize / 2.0f;
+  // Allow less than 50% variance from 1-1-3-1-1 proportions
+  return abs(moduleSize - stateCount[0]) < maxVariance && abs(moduleSize - 
stateCount[1]) < maxVariance && abs(3.0f
+         * moduleSize - stateCount[2]) < 3.0f * maxVariance && abs(moduleSize 
- stateCount[3]) < maxVariance && abs(
+           moduleSize - stateCount[4]) < maxVariance;
+}
+
+float FinderPatternFinder::crossCheckVertical(size_t startI, size_t centerJ, 
int maxCount, int originalStateCountTotal) {
+
+  int maxI = image_->getHeight();
+  int stateCount[5];
+  for (int i = 0; i < 5; i++)
+    stateCount[i] = 0;
+
+
+  // Start counting up from center
+  int i = startI;
+  while (i >= 0 && image_->get(centerJ, i)) {
+    stateCount[2]++;
+    i--;
+  }
+  if (i < 0) {
+    return NAN;
+  }
+  while (i >= 0 && !image_->get(centerJ, i) && stateCount[1] <= maxCount) {
+    stateCount[1]++;
+    i--;
+  }
+  // If already too many modules in this state or ran off the edge:
+  if (i < 0 || stateCount[1] > maxCount) {
+    return NAN;
+  }
+  while (i >= 0 && image_->get(centerJ, i) && stateCount[0] <= maxCount) {
+    stateCount[0]++;
+    i--;
+  }
+  if (stateCount[0] > maxCount) {
+    return NAN;
+  }
+
+  // Now also count down from center
+  i = startI + 1;
+  while (i < maxI && image_->get(centerJ, i)) {
+    stateCount[2]++;
+    i++;
+  }
+  if (i == maxI) {
+    return NAN;
+  }
+  while (i < maxI && !image_->get(centerJ, i) && stateCount[3] < maxCount) {
+    stateCount[3]++;
+    i++;
+  }
+  if (i == maxI || stateCount[3] >= maxCount) {
+    return NAN;
+  }
+  while (i < maxI && image_->get(centerJ, i) && stateCount[4] < maxCount) {
+    stateCount[4]++;
+    i++;
+  }
+  if (stateCount[4] >= maxCount) {
+    return NAN;
+  }
+
+  // If we found a finder-pattern-like section, but its size is more than 40% 
different than
+  // the original, assume it's a false positive
+  int stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + 
stateCount[3] + stateCount[4];
+  if (5 * abs(stateCountTotal - originalStateCountTotal) >= 2 * 
originalStateCountTotal) {
+    return NAN;
+  }
+
+  return foundPatternCross(stateCount) ? centerFromEnd(stateCount, i) : NAN;
+}
+
+float FinderPatternFinder::crossCheckHorizontal(size_t startJ, size_t centerI, 
int maxCount,
+    int originalStateCountTotal) {
+
+  int maxJ = image_->getWidth();
+  int stateCount[5];
+  for (int i = 0; i < 5; i++)
+    stateCount[i] = 0;
+
+  int j = startJ;
+  while (j >= 0 && image_->get(j, centerI)) {
+    stateCount[2]++;
+    j--;
+  }
+  if (j < 0) {
+    return NAN;
+  }
+  while (j >= 0 && !image_->get(j, centerI) && stateCount[1] <= maxCount) {
+    stateCount[1]++;
+    j--;
+  }
+  if (j < 0 || stateCount[1] > maxCount) {
+    return NAN;
+  }
+  while (j >= 0 && image_->get(j, centerI) && stateCount[0] <= maxCount) {
+    stateCount[0]++;
+    j--;
+  }
+  if (stateCount[0] > maxCount) {
+    return NAN;
+  }
+
+  j = startJ + 1;
+  while (j < maxJ && image_->get(j, centerI)) {
+    stateCount[2]++;
+    j++;
+  }
+  if (j == maxJ) {
+    return NAN;
+  }
+  while (j < maxJ && !image_->get(j, centerI) && stateCount[3] < maxCount) {
+    stateCount[3]++;
+    j++;
+  }
+  if (j == maxJ || stateCount[3] >= maxCount) {
+    return NAN;
+  }
+  while (j < maxJ && image_->get(j, centerI) && stateCount[4] < maxCount) {
+    stateCount[4]++;
+    j++;
+  }
+  if (stateCount[4] >= maxCount) {
+    return NAN;
+  }
+
+  // If we found a finder-pattern-like section, but its size is significantly 
different than
+  // the original, assume it's a false positive
+  int stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + 
stateCount[3] + stateCount[4];
+  if (5 * abs(stateCountTotal - originalStateCountTotal) >= 
originalStateCountTotal) {
+    return NAN;
+  }
+
+  return foundPatternCross(stateCount) ? centerFromEnd(stateCount, j) : NAN;
+}
+
+bool FinderPatternFinder::handlePossibleCenter(int* stateCount, size_t i, 
size_t j) {
+  int stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + 
stateCount[3] + stateCount[4];
+  float centerJ = centerFromEnd(stateCount, j);
+  float centerI = crossCheckVertical(i, (size_t)centerJ, stateCount[2], 
stateCountTotal);
+  if (!isnan(centerI)) {
+    // Re-cross check
+    centerJ = crossCheckHorizontal((size_t)centerJ, (size_t)centerI, 
stateCount[2], stateCountTotal);
+    if (!isnan(centerJ)) {
+      float estimatedModuleSize = (float)stateCountTotal / 7.0f;
+      bool found = false;
+      size_t max = possibleCenters_.size();
+      for (size_t index = 0; index < max; index++) {
+        Ref<FinderPattern> center = possibleCenters_[index];
+        // Look for about the same center and module size:
+        if (center->aboutEquals(estimatedModuleSize, centerI, centerJ)) {
+          possibleCenters_[index] = center->combineEstimate(centerI, centerJ, 
estimatedModuleSize);
+          found = true;
+          break;
+        }
+      }
+      if (!found) {
+        Ref<FinderPattern> newPattern(new FinderPattern(centerJ, centerI, 
estimatedModuleSize));
+        possibleCenters_.push_back(newPattern);
+        if (callback_ != 0) {
+          callback_->foundPossibleResultPoint(*newPattern);
+        }
+      }
+      return true;
+    }
+  }
+  return false;
+}
+
+int FinderPatternFinder::findRowSkip() {
+  size_t max = possibleCenters_.size();
+  if (max <= 1) {
+    return 0;
+  }
+  Ref<FinderPattern> firstConfirmedCenter;
+  for (size_t i = 0; i < max; i++) {
+    Ref<FinderPattern> center = possibleCenters_[i];
+    if (center->getCount() >= CENTER_QUORUM) {
+      if (firstConfirmedCenter == 0) {
+        firstConfirmedCenter = center;
+      } else {
+        // We have two confirmed centers
+        // How far down can we skip before resuming looking for the next
+        // pattern? In the worst case, only the difference between the
+        // difference in the x / y coordinates of the two centers.
+        // This is the case where you find top left first. Draw it out.
+        hasSkipped_ = true;
+        return (int)(abs(firstConfirmedCenter->getX() - center->getX()) - 
abs(firstConfirmedCenter->getY()
+                     - center->getY()))/2;
+      }
+    }
+  }
+  return 0;
+}
+
+bool FinderPatternFinder::haveMultiplyConfirmedCenters() {
+  int confirmedCount = 0;
+  float totalModuleSize = 0.0f;
+  size_t max = possibleCenters_.size();
+  for (size_t i = 0; i < max; i++) {
+    Ref<FinderPattern> pattern = possibleCenters_[i];
+    if (pattern->getCount() >= CENTER_QUORUM) {
+      confirmedCount++;
+      totalModuleSize += pattern->getEstimatedModuleSize();
+    }
+  }
+  if (confirmedCount < 3) {
+    return false;
+  }
+  // OK, we have at least 3 confirmed centers, but, it's possible that one is 
a "false positive"
+  // and that we need to keep looking. We detect this by asking if the 
estimated module sizes
+  // vary too much. We arbitrarily say that when the total deviation from 
average exceeds
+  // 5% of the total module size estimates, it's too much.
+  float average = totalModuleSize / max;
+  float totalDeviation = 0.0f;
+  for (size_t i = 0; i < max; i++) {
+    Ref<FinderPattern> pattern = possibleCenters_[i];
+    totalDeviation += abs(pattern->getEstimatedModuleSize() - average);
+  }
+  return totalDeviation <= 0.05f * totalModuleSize;
+}
+
+vector<Ref<FinderPattern> > FinderPatternFinder::selectBestPatterns() {
+  size_t startSize = possibleCenters_.size();
+
+  if (startSize < 3) {
+    // Couldn't find enough finder patterns
+    throw zxing::ReaderException("Could not find three finder patterns");
+  }
+
+  // Filter outlier possibilities whose module size is too different
+  if (startSize > 3) {
+    // But we can only afford to do so if we have at least 4 possibilities to 
choose from
+    float totalModuleSize = 0.0f;
+    float square = 0.0f;
+    for (size_t i = 0; i < startSize; i++) {
+      float size = possibleCenters_[i]->getEstimatedModuleSize();
+      totalModuleSize += size;
+      square += size * size;
+    }
+    float average = totalModuleSize / (float) startSize;
+    float stdDev = (float)sqrt(square / startSize - average * average);
+
+    sort(possibleCenters_.begin(), possibleCenters_.end(), 
FurthestFromAverageComparator(average));
+    
+    float limit = max(0.2f * average, stdDev);
+
+    for (size_t i = 0; i < possibleCenters_.size() && possibleCenters_.size() 
> 3; i++) {
+      if (abs(possibleCenters_[i]->getEstimatedModuleSize() - average) > 
limit) {
+        possibleCenters_.erase(possibleCenters_.begin()+i);
+        i--;
+      }
+    }
+  }
+
+  if (possibleCenters_.size() > 3) {
+    // Throw away all but those first size candidate points we found.
+    float totalModuleSize = 0.0f;
+    for (size_t i = 0; i < possibleCenters_.size(); i++) {
+      float size = possibleCenters_[i]->getEstimatedModuleSize();
+      totalModuleSize += size;
+    }
+    float average = totalModuleSize / (float) possibleCenters_.size();
+    sort(possibleCenters_.begin(), possibleCenters_.end(), 
CenterComparator(average));
+  }
+
+  if (possibleCenters_.size() > 3) {
+    possibleCenters_.erase(possibleCenters_.begin()+3,possibleCenters_.end());
+  }
+
+  vector<Ref<FinderPattern> > result(3);
+  result[0] = possibleCenters_[0];
+  result[1] = possibleCenters_[1];
+  result[2] = possibleCenters_[2];
+  return result;
+}
+
+vector<Ref<FinderPattern> > 
FinderPatternFinder::orderBestPatterns(vector<Ref<FinderPattern> > patterns) {
+  // Find distances between pattern centers
+  float abDistance = distance(patterns[0], patterns[1]);
+  float bcDistance = distance(patterns[1], patterns[2]);
+  float acDistance = distance(patterns[0], patterns[2]);
+
+  Ref<FinderPattern> topLeft;
+  Ref<FinderPattern> topRight;
+  Ref<FinderPattern> bottomLeft;
+  // Assume one closest to other two is top left;
+  // topRight and bottomLeft will just be guesses below at first
+  if (bcDistance >= abDistance && bcDistance >= acDistance) {
+    topLeft = patterns[0];
+    topRight = patterns[1];
+    bottomLeft = patterns[2];
+  } else if (acDistance >= bcDistance && acDistance >= abDistance) {
+    topLeft = patterns[1];
+    topRight = patterns[0];
+    bottomLeft = patterns[2];
+  } else {
+    topLeft = patterns[2];
+    topRight = patterns[0];
+    bottomLeft = patterns[1];
+  }
+
+  // Use cross product to figure out which of other1/2 is the bottom left
+  // pattern. The vector "top-left -> bottom-left" x "top-left -> top-right"
+  // should yield a vector with positive z component
+  if ((bottomLeft->getY() - topLeft->getY()) * (topRight->getX() - 
topLeft->getX()) < (bottomLeft->getX()
+      - topLeft->getX()) * (topRight->getY() - topLeft->getY())) {
+    Ref<FinderPattern> temp = topRight;
+    topRight = bottomLeft;
+    bottomLeft = temp;
+  }
+
+  vector<Ref<FinderPattern> > results(3);
+  results[0] = bottomLeft;
+  results[1] = topLeft;
+  results[2] = topRight;
+  return results;
+}
+
+float FinderPatternFinder::distance(Ref<ResultPoint> p1, Ref<ResultPoint> p2) {
+  float dx = p1->getX() - p2->getX();
+  float dy = p1->getY() - p2->getY();
+  return (float)sqrt(dx * dx + dy * dy);
+}
+
+FinderPatternFinder::FinderPatternFinder(Ref<BitMatrix> image,
+                                           Ref<ResultPointCallback>const& 
callback) :
+    image_(image), possibleCenters_(), hasSkipped_(false), callback_(callback) 
{
+}
+
+Ref<FinderPatternInfo> FinderPatternFinder::find(DecodeHints const& hints) {
+  bool tryHarder = hints.getTryHarder();
+
+  size_t maxI = image_->getHeight();
+  size_t maxJ = image_->getWidth();
+
+
+  // We are looking for black/white/black/white/black modules in
+  // 1:1:3:1:1 ratio; this tracks the number of such modules seen so far
+
+  // As this is used often, we use an integer array instead of vector
+  int stateCount[5];
+  bool done = false;
+
+
+  // Let's assume that the maximum version QR Code we support takes up 1/4
+  // the height of the image, and then account for the center being 3
+  // modules in size. This gives the smallest number of pixels the center
+  // could be, so skip this often. When trying harder, look for all
+  // QR versions regardless of how dense they are.
+  int iSkip = (3 * maxI) / (4 * MAX_MODULES);
+  if (iSkip < MIN_SKIP || tryHarder) {
+      iSkip = MIN_SKIP;
+  }
+
+  // This is slightly faster than using the Ref. Efficiency is important here
+  BitMatrix& matrix = *image_;
+
+  for (size_t i = iSkip - 1; i < maxI && !done; i += iSkip) {
+    // Get a row of black/white values
+
+    stateCount[0] = 0;
+    stateCount[1] = 0;
+    stateCount[2] = 0;
+    stateCount[3] = 0;
+    stateCount[4] = 0;
+    int currentState = 0;
+    for (size_t j = 0; j < maxJ; j++) {
+      if (matrix.get(j, i)) {
+        // Black pixel
+        if ((currentState & 1) == 1) { // Counting white pixels
+          currentState++;
+        }
+        stateCount[currentState]++;
+      } else { // White pixel
+        if ((currentState & 1) == 0) { // Counting black pixels
+          if (currentState == 4) { // A winner?
+            if (foundPatternCross(stateCount)) { // Yes
+              bool confirmed = handlePossibleCenter(stateCount, i, j);
+              if (confirmed) {
+                // Start examining every other line. Checking each line turned 
out to be too
+                // expensive and didn't improve performance.
+                iSkip = 2;
+                if (hasSkipped_) {
+                  done = haveMultiplyConfirmedCenters();
+                } else {
+                  int rowSkip = findRowSkip();
+                  if (rowSkip > stateCount[2]) {
+                    // Skip rows between row of lower confirmed center
+                    // and top of presumed third confirmed center
+                    // but back up a bit to get a full chance of detecting
+                    // it, entire width of center of finder pattern
+
+                    // Skip by rowSkip, but back off by stateCount[2] (size
+                    // of last center of pattern we saw) to be conservative,
+                    // and also back off by iSkip which is about to be
+                    // re-added
+                    i += rowSkip - stateCount[2] - iSkip;
+                    j = maxJ - 1;
+                  }
+                }
+              } else {
+                stateCount[0] = stateCount[2];
+                stateCount[1] = stateCount[3];
+                stateCount[2] = stateCount[4];
+                stateCount[3] = 1;
+                stateCount[4] = 0;
+                currentState = 3;
+                continue;
+              }
+              // Clear state to start looking again
+              currentState = 0;
+              stateCount[0] = 0;
+              stateCount[1] = 0;
+              stateCount[2] = 0;
+              stateCount[3] = 0;
+              stateCount[4] = 0;
+            } else { // No, shift counts back by two
+              stateCount[0] = stateCount[2];
+              stateCount[1] = stateCount[3];
+              stateCount[2] = stateCount[4];
+              stateCount[3] = 1;
+              stateCount[4] = 0;
+              currentState = 3;
+            }
+          } else {
+            stateCount[++currentState]++;
+          }
+        } else { // Counting white pixels
+          stateCount[currentState]++;
+        }
+      }
+    }
+    if (foundPatternCross(stateCount)) {
+      bool confirmed = handlePossibleCenter(stateCount, i, maxJ);
+      if (confirmed) {
+        iSkip = stateCount[0];
+        if (hasSkipped_) {
+          // Found a third one
+          done = haveMultiplyConfirmedCenters();
+        }
+      }
+    }
+  }
+
+  vector<Ref<FinderPattern> > patternInfo = selectBestPatterns();
+  patternInfo = orderBestPatterns(patternInfo);
+
+  Ref<FinderPatternInfo> result(new FinderPatternInfo(patternInfo));
+  return result;
+}
+}
+}

Added: 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRFinderPatternInfo.cpp
===================================================================
--- 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRFinderPatternInfo.cpp
                         (rev 0)
+++ 
gnunet-qt/SecureShare/3rdParty/qzxing/zxing/qrcode/detector/QRFinderPatternInfo.cpp
 2014-06-20 23:46:12 UTC (rev 33741)
@@ -0,0 +1,41 @@
+/*
+ *  FinderPatternInfo.cpp
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 13/05/2008.
+ *  Copyright 2008 ZXing authors All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/qrcode/detector/FinderPatternInfo.h>
+
+namespace zxing {
+namespace qrcode {
+
+FinderPatternInfo::FinderPatternInfo(std::vector<Ref<FinderPattern> > 
patternCenters) :
+    bottomLeft_(patternCenters[0]), topLeft_(patternCenters[1]), 
topRight_(patternCenters[2]) {
+}
+
+Ref<FinderPattern> FinderPatternInfo::getBottomLeft() {
+  return bottomLeft_;
+}
+Ref<FinderPattern> FinderPatternInfo::getTopLeft() {
+  return topLeft_;
+}
+Ref<FinderPattern> FinderPatternInfo::getTopRight() {
+  return topRight_;
+}
+
+}
+}

Modified: gnunet-qt/SecureShare/SecureShare.pro
===================================================================
--- gnunet-qt/SecureShare/SecureShare.pro       2014-06-20 14:49:36 UTC (rev 
33740)
+++ gnunet-qt/SecureShare/SecureShare.pro       2014-06-20 23:46:12 UTC (rev 
33741)
@@ -4,6 +4,7 @@
 
 LIBS += -lgnunetutil -lgnunetcore -lgnunetidentity -lgnunetarm -lgnunetfriends 
-lextractor
 
+#include(3rdParty/qzxing-master/QZXing.pro)
 
 SOURCES += main.cpp \
     core/psyccore.cpp \

Added: gnunet-qt/SecureShare/qml/QrReader.qml
===================================================================
--- gnunet-qt/SecureShare/qml/QrReader.qml                              (rev 0)
+++ gnunet-qt/SecureShare/qml/QrReader.qml      2014-06-20 23:46:12 UTC (rev 
33741)
@@ -0,0 +1,52 @@
+import QtQuick.Window 2.1;
+import QtQuick 2.2
+import QtQuick.Controls 1.1
+import QtQuick.Layouts 1.1
+import QZXing 1.3
+import QtMultimedia 5.0
+
+
+
+import Psyc 1.0
+
+Window {
+    title: "Qr Reader";
+    width: 300;
+    height: 60;
+    id: newEgoWnd
+
+
+
+    Item {
+        width: 640
+        height: 360
+
+        Camera {
+            id: camera
+
+            imageProcessing.whiteBalanceMode: 
CameraImageProcessing.WhiteBalanceFlash
+
+            exposure {
+                exposureCompensation: -1.0
+                exposureMode: Camera.ExposurePortrait
+            }
+
+            flash.mode: Camera.FlashRedEyeReduction
+
+            imageCapture {
+                onImageCaptured: {
+                    photoPreview.source = preview  // Show the preview in an 
Image
+                }
+            }
+        }
+
+        VideoOutput {
+            source: camera
+            anchors.fill: parent
+            focus : visible // to receive focus and capture key events when 
visible
+        }
+        Image {
+            id: photoPreview
+        }
+    }
+}

Modified: gnunet-qt/SecureShare/qml/main.qml
===================================================================
--- gnunet-qt/SecureShare/qml/main.qml  2014-06-20 14:49:36 UTC (rev 33740)
+++ gnunet-qt/SecureShare/qml/main.qml  2014-06-20 23:46:12 UTC (rev 33741)
@@ -2,6 +2,7 @@
 import QtQuick.Controls 1.1
 import QtQuick.Layouts 1.1
 import QtQuick.Window 2.0
+
 import Psyc 1.0
 
 ApplicationWindow {
@@ -22,17 +23,17 @@
             MenuItem {
                 text: qsTr("Create new Room")
                 onTriggered: {
-                    var threadChat = 
Qt.createComponent("qrc:///qml/createRoom.qml");
-                    var threadChatWnd = threadChat.createObject();
-                    threadChatWnd.show();
+                    var createRoom = 
Qt.createComponent("qrc:///qml/createRoom.qml");
+                    var createRoomWnd = createRoom.createObject();
+                    createRoomWnd.show();
                 }
             }
             MenuItem {
                 text: qsTr("Join Room")
                 onTriggered: {
-                    var threadChat = 
Qt.createComponent("qrc:///qml/joinRoom.qml");
-                    var threadChatWnd = threadChat.createObject();
-                    threadChatWnd.show();
+                    var joinRoom = 
Qt.createComponent("qrc:///qml/joinRoom.qml");
+                    var joinRoomWnd = joinRoom.createObject();
+                    joinRoomWnd.show();
                 }
             }
 
@@ -45,11 +46,18 @@
                 }
             }
 
+            MenuItem {
+                text: qsTr("QR Reader")
+                onTriggered: {
+                    var reader = Qt.createComponent("qrc:///qml/QrReader.qml");
+                    var readerWnd = reader.createObject();
+                    readerWnd.show();
+                }
+            }
 
 
 
 
-
         }
     }
 

Modified: gnunet-qt/SecureShare/qml.qrc
===================================================================
--- gnunet-qt/SecureShare/qml.qrc       2014-06-20 14:49:36 UTC (rev 33740)
+++ gnunet-qt/SecureShare/qml.qrc       2014-06-20 23:46:12 UTC (rev 33741)
@@ -27,5 +27,6 @@
         <file>qml/About.qml</file>
         <file>qml/images/enter.png</file>
         <file>qml/images/new.png</file>
+        <file>qml/QrReader.qml</file>
     </qresource>
 </RCC>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]