]> git.wh0rd.org Git - tt-rss.git/commitdiff
implement one time passwords using TOTP
authorAndrew Dolgov <fox@madoka.volgo-balt.ru>
Mon, 3 Sep 2012 14:33:46 +0000 (18:33 +0400)
committerAndrew Dolgov <fox@madoka.volgo-balt.ru>
Mon, 3 Sep 2012 14:33:46 +0000 (18:33 +0400)
439 files changed:
classes/auth/internal.php
classes/pref/prefs.php
include/functions.php
lib/otphp/LICENCE [new file with mode: 0644]
lib/otphp/lib/hotp.php [new file with mode: 0644]
lib/otphp/lib/otp.php [new file with mode: 0644]
lib/otphp/lib/otphp.php [new file with mode: 0644]
lib/otphp/lib/totp.php [new file with mode: 0644]
lib/otphp/vendor/base32.php [new file with mode: 0644]
lib/otphp/vendor/libs.php [new file with mode: 0644]
lib/phpqrcode/CHANGELOG [new file with mode: 0644]
lib/phpqrcode/INSTALL [new file with mode: 0644]
lib/phpqrcode/LICENSE [new file with mode: 0644]
lib/phpqrcode/README [new file with mode: 0644]
lib/phpqrcode/VERSION [new file with mode: 0644]
lib/phpqrcode/bindings/tcpdf/qrcode.php [new file with mode: 0644]
lib/phpqrcode/cache/frame_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_1.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_10.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_10.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_11.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_11.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_12.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_12.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_13.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_13.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_14.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_14.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_15.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_15.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_16.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_16.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_17.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_17.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_18.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_18.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_19.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_19.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_2.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_20.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_20.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_21.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_21.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_22.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_22.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_23.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_23.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_24.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_24.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_25.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_25.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_26.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_26.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_27.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_27.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_28.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_28.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_29.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_29.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_3.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_30.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_30.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_31.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_31.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_32.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_32.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_33.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_33.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_34.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_34.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_35.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_35.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_36.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_36.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_37.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_37.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_38.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_38.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_39.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_39.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_4.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_40.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_40.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_5.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_6.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_7.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_8.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_8.png [new file with mode: 0644]
lib/phpqrcode/cache/frame_9.dat [new file with mode: 0644]
lib/phpqrcode/cache/frame_9.png [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_101_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_105_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_109_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_113_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_117_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_121_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_125_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_129_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_133_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_137_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_141_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_145_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_149_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_153_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_157_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_161_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_165_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_169_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_173_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_177_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_21_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_25_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_29_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_33_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_37_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_41_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_45_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_49_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_53_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_57_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_61_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_65_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_69_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_73_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_77_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_81_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_85_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_89_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_93_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_0/mask_97_0.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_101_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_105_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_109_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_113_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_117_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_121_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_125_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_129_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_133_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_137_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_141_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_145_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_149_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_153_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_157_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_161_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_165_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_169_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_173_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_177_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_21_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_25_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_29_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_33_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_37_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_41_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_45_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_49_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_53_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_57_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_61_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_65_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_69_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_73_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_77_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_81_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_85_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_89_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_93_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_1/mask_97_1.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_101_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_105_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_109_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_113_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_117_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_121_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_125_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_129_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_133_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_137_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_141_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_145_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_149_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_153_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_157_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_161_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_165_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_169_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_173_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_177_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_21_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_25_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_29_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_33_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_37_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_41_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_45_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_49_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_53_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_57_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_61_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_65_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_69_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_73_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_77_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_81_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_85_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_89_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_93_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_2/mask_97_2.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_101_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_105_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_109_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_113_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_117_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_121_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_125_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_129_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_133_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_137_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_141_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_145_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_149_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_153_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_157_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_161_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_165_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_169_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_173_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_177_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_21_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_25_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_29_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_33_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_37_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_41_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_45_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_49_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_53_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_57_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_61_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_65_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_69_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_73_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_77_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_81_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_85_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_89_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_93_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_3/mask_97_3.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_101_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_105_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_109_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_113_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_117_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_121_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_125_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_129_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_133_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_137_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_141_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_145_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_149_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_153_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_157_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_161_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_165_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_169_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_173_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_177_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_21_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_25_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_29_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_33_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_37_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_41_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_45_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_49_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_53_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_57_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_61_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_65_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_69_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_73_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_77_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_81_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_85_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_89_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_93_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_4/mask_97_4.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_101_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_105_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_109_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_113_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_117_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_121_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_125_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_129_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_133_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_137_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_141_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_145_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_149_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_153_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_157_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_161_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_165_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_169_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_173_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_177_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_21_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_25_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_29_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_33_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_37_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_41_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_45_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_49_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_53_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_57_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_61_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_65_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_69_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_73_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_77_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_81_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_85_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_89_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_93_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_5/mask_97_5.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_101_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_105_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_109_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_113_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_117_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_121_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_125_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_129_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_133_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_137_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_141_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_145_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_149_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_153_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_157_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_161_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_165_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_169_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_173_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_177_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_21_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_25_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_29_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_33_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_37_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_41_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_45_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_49_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_53_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_57_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_61_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_65_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_69_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_73_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_77_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_81_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_85_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_89_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_93_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_6/mask_97_6.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_101_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_105_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_109_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_113_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_117_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_121_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_125_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_129_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_133_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_137_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_141_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_145_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_149_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_153_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_157_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_161_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_165_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_169_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_173_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_177_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_21_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_25_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_29_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_33_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_37_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_41_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_45_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_49_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_53_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_57_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_61_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_65_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_69_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_73_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_77_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_81_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_85_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_89_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_93_7.dat [new file with mode: 0644]
lib/phpqrcode/cache/mask_7/mask_97_7.dat [new file with mode: 0644]
lib/phpqrcode/index.php [new file with mode: 0644]
lib/phpqrcode/phpqrcode.php [new file with mode: 0644]
lib/phpqrcode/qrbitstream.php [new file with mode: 0644]
lib/phpqrcode/qrconfig.php [new file with mode: 0644]
lib/phpqrcode/qrconst.php [new file with mode: 0644]
lib/phpqrcode/qrencode.php [new file with mode: 0644]
lib/phpqrcode/qrimage.php [new file with mode: 0644]
lib/phpqrcode/qrinput.php [new file with mode: 0644]
lib/phpqrcode/qrlib.php [new file with mode: 0644]
lib/phpqrcode/qrmask.php [new file with mode: 0644]
lib/phpqrcode/qrrscode.php [new file with mode: 0644]
lib/phpqrcode/qrspec.php [new file with mode: 0644]
lib/phpqrcode/qrsplit.php [new file with mode: 0644]
lib/phpqrcode/qrtools.php [new file with mode: 0644]
lib/phpqrcode/tools/merge.bat [new file with mode: 0644]
lib/phpqrcode/tools/merge.php [new file with mode: 0644]
lib/phpqrcode/tools/merge.sh [new file with mode: 0644]
lib/phpqrcode/tools/merged_config.php [new file with mode: 0644]
lib/phpqrcode/tools/merged_header.php [new file with mode: 0644]
schema/ttrss_schema_mysql.sql
schema/ttrss_schema_pgsql.sql
schema/versions/mysql/97.sql [new file with mode: 0644]
schema/versions/pgsql/97.sql [new file with mode: 0644]

index 8890d445588cc15e80d7676f941ffaeeef1000a4..a4e8b471c33c6e7334be6cdfc7aa0c2904da24ec 100644 (file)
@@ -6,6 +6,48 @@ class Auth_Internal extends Auth_Base {
                $pwd_hash1 = encrypt_password($password);
                $pwd_hash2 = encrypt_password($password, $login);
                $login = db_escape_string($login);
+               $otp = db_escape_string($_REQUEST["otp"]);
+
+               if (get_schema_version($this->link) > 96) {
+                       $result = db_query($this->link, "SELECT otp_enabled,salt FROM ttrss_users WHERE
+                               login = '$login'");
+
+                       require_once "lib/otphp/vendor/base32.php";
+                       require_once "lib/otphp/lib/otp.php";
+                       require_once "lib/otphp/lib/totp.php";
+
+                       $base32 = new Base32();
+
+                       $otp_enabled = sql_bool_to_bool(db_fetch_result($result, 0, "otp_enabled"));
+                       $secret = $base32->encode(sha1(db_fetch_result($result, 0, "salt")));
+
+                       $topt = new \OTPHP\TOTP($secret);
+                       $otp_check = $topt->now();
+
+                       if ($otp_enabled) {
+                               if ($otp) {
+                                       if ($otp != $otp_check) {
+                                               return false;
+                                       }
+                               } else {
+                                       ?><html>
+                                               <head><title>Tiny Tiny RSS</title></head>
+                                       <body>
+                                       <form method="POST">
+                                               <input type="hidden" name="login_action" value="do_login">
+                                               <input type="hidden" name="login" value="<?php echo htmlspecialchars($login) ?>">
+                                               <input type="hidden" name="password" value="<?php echo htmlspecialchars($password) ?>">
+
+                                               <label><?php echo __("Please enter your one time password:") ?></label>
+                                               <input type="password" size="6" name="otp"/>
+                                               <input type="submit" value="Continue"/>
+                                       </form>
+                                       </form>
+                                       <?php
+                                       exit;
+                               }
+                       }
+               }
 
                if (get_schema_version($this->link) > 87) {
 
@@ -104,7 +146,7 @@ class Auth_Internal extends Auth_Base {
                        $new_password_hash = encrypt_password($new_password, $new_salt, true);
 
                        db_query($this->link, "UPDATE ttrss_users SET
-                               pwd_hash = '$new_password_hash', salt = '$new_salt'
+                               pwd_hash = '$new_password_hash', salt = '$new_salt', otp_enabled = false
                                        WHERE id = '$owner_uid'");
 
                        $_SESSION["pwd_hash"] = $new_password_hash;
index 705b709faed9a98ba048c9c0e7bc9145d8a7e36f..c6b109877eb8c4095ac0672ad25b3708018541b7 100644 (file)
@@ -154,12 +154,15 @@ class Pref_Prefs extends Handler_Protected {
 
                print "<table width=\"100%\" class=\"prefPrefsList\">";
 
-               $result = db_query($this->link, "SELECT email,full_name,
+               print "<h2>" . __("Personal data") . "</h2>";
+
+               $result = db_query($this->link, "SELECT email,full_name,otp_enabled,
                        access_level FROM ttrss_users
                        WHERE id = ".$_SESSION["uid"]);
 
                $email = htmlspecialchars(db_fetch_result($result, 0, "email"));
                $full_name = htmlspecialchars(db_fetch_result($result, 0, "full_name"));
+               $otp_enabled = sql_bool_to_bool(db_fetch_result($result, 0, "otp_enabled"));
 
                print "<tr><td width=\"40%\">".__('Full name')."</td>";
                print "<td class=\"prefValue\"><input dojoType=\"dijit.form.ValidationTextBox\" name=\"full_name\" required=\"1\"
@@ -194,6 +197,8 @@ class Pref_Prefs extends Handler_Protected {
 
                if ($authenticator && method_exists($authenticator, "change_password")) {
 
+                       print "<h2>" . __("Password") . "</h2>";
+
                        $result = db_query($this->link, "SELECT id FROM ttrss_users
                                WHERE id = ".$_SESSION["uid"]." AND pwd_hash
                                = 'SHA1:5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8'");
@@ -249,6 +254,55 @@ class Pref_Prefs extends Handler_Protected {
 
                        print "</form>";
 
+                       if ($_SESSION["auth_module"] == "internal") {
+
+                               print "<h2>" . __("One time passwords / Authenticator") . "</h2>";
+
+                               if ($otp_enabled) {
+
+                                       print "<p>".__("One time passwords are currently enabled. Change your current password and refresh this page to reconfigure.") . "</p>";
+
+                               } else {
+
+                                       print "<p>".__("You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP.") . "</p>";
+
+                                       print "<p>".__("Scan the following code by the Authenticator application:")."</p>";
+
+                                       $csrf_token = $_SESSION["csrf_token"];
+
+                                       print "<img src=\"backend.php?op=pref-prefs&method=otpqrcode&csrf_token=$csrf_token\">";
+
+                                       print "<form dojoType=\"dijit.form.Form\" id=\"changeOtpForm\">";
+
+                                       print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-prefs\">";
+                                       print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"changeotp\">";
+
+                                       print "<script type=\"dojo/method\" event=\"onSubmit\" args=\"evt\">
+                                       evt.preventDefault();
+                                       if (this.validate()) {
+                                               notify_progress('Saving data...', true);
+
+                                               new Ajax.Request('backend.php', {
+                                                       parameters: dojo.objectToQuery(this.getValues()),
+                                                       onComplete: function(transport) {
+                                                               window.location.reload();
+                                               } });
+
+                                       }
+                                       </script>";
+
+                                       print "<input dojoType=\"dijit.form.CheckBox\" required=\"1\"
+                                               type=\"checkbox\" id=\"enable_otp\" name=\"enable_otp\"/> ";
+                                       print "<label for=\"enable_otp\">".__("I have scanned the code and would like to enable OTP")."</label>";
+
+                                       print "<p><button dojoType=\"dijit.form.Button\" type=\"submit\">".
+                                               __("Save OTP setting")."</button>";
+
+                                       print "</form>";
+
+                               }
+
+                       }
                }
 
                print "</div>"; #pane
@@ -571,5 +625,34 @@ class Pref_Prefs extends Handler_Protected {
        function toggleAdvanced() {
                $_SESSION["prefs_show_advanced"] = !$_SESSION["prefs_show_advanced"];
        }
+
+       function otpqrcode() {
+               require_once "lib/otphp/vendor/base32.php";
+               require_once "lib/otphp/lib/otp.php";
+               require_once "lib/otphp/lib/totp.php";
+               require_once "lib/phpqrcode/phpqrcode.php";
+
+               $result = db_query($this->link, "SELECT login,salt
+                       FROM ttrss_users
+                       WHERE id = ".$_SESSION["uid"]);
+
+               $base32 = new Base32();
+
+               $login = db_fetch_result($result, 0, "login");
+               $secret = $base32->encode(sha1(db_fetch_result($result, 0, "salt")));
+
+               $topt = new \OTPHP\TOTP($secret);
+
+               print QRcode::png($topt->provisioning_uri($login));
+       }
+
+       function changeotp() {
+               $enable_otp = $_REQUEST["enable_otp"];
+
+               if ($enable_otp == "on") {
+                       db_query($this->link, "UPDATE ttrss_users SET otp_enabled = true WHERE
+                               id = " . $_SESSION["uid"]);
+               }
+       }
 }
 ?>
index d1855e993bea671c0b171609d6acf19bace59669..2924d17962fb64b70ed96a30cc6e27e160da3880 100644 (file)
@@ -1,6 +1,6 @@
 <?php
        define('EXPECTED_CONFIG_VERSION', 26);
-       define('SCHEMA_VERSION', 96);
+       define('SCHEMA_VERSION', 97);
 
        $fetch_last_error = false;
 
diff --git a/lib/otphp/LICENCE b/lib/otphp/LICENCE
new file mode 100644 (file)
index 0000000..d14cbc2
--- /dev/null
@@ -0,0 +1,20 @@
+Copyright (c) 2011 Le Lag 
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/lib/otphp/lib/hotp.php b/lib/otphp/lib/hotp.php
new file mode 100644 (file)
index 0000000..7092fd9
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+/*
+ * Copyright (c) 2011 Le Lag 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+namespace OTPHP {
+  /**
+   * HOTP - One time password generator 
+   * 
+   * The HOTP class allow for the generation 
+   * and verification of one-time password using 
+   * the HOTP specified algorithm.
+   *
+   * This class is meant to be compatible with 
+   * Google Authenticator
+   *
+   * This class was originally ported from the rotp
+   * ruby library available at https://github.com/mdp/rotp
+   */
+  class HOTP extends OTP {
+    /**
+     *  Get the password for a specific counter value
+     *  @param integer $count the counter which is used to
+     *  seed the hmac hash function.
+     *  @return integer the One Time Password
+     */
+    public function at($count) {
+      return $this->generateOTP($count);
+    }
+
+
+    /**
+     * Verify if a password is valid for a specific counter value
+     *
+     * @param integer $otp the one-time password 
+     * @param integer $counter the counter value
+     * @return  bool true if the counter is valid, false otherwise
+     */
+    public function verify($otp, $counter) {
+      return ($otp == $this->at($counter));
+    }
+
+    /**
+     * Returns the uri for a specific secret for hotp method.
+     * Can be encoded as a image for simple configuration in 
+     * Google Authenticator.
+     *
+     * @param string $name the name of the account / profile
+     * @param integer $initial_count the initial counter 
+     * @return string the uri for the hmac secret
+     */
+    public function provisioning_uri($name, $initial_count) {
+      return "otpauth://hotp/".urlencode($name)."?secret={$this->secret}&counter=$initial_count";
+    }
+  }
+
+}
diff --git a/lib/otphp/lib/otp.php b/lib/otphp/lib/otp.php
new file mode 100644 (file)
index 0000000..77bcfe9
--- /dev/null
@@ -0,0 +1,120 @@
+<?php
+/*
+ * Copyright (c) 2011 Le Lag 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+namespace OTPHP {
+/**
+ * One Time Password Generator 
+ * 
+ * The OTP class allow the generation of one-time
+ * password that is described in rfc 4xxx.
+ * 
+ * This is class is meant to be compatible with 
+ * Google Authenticator.
+ *
+ * This class was originally ported from the rotp
+ * ruby library available at https://github.com/mdp/rotp
+ */
+class OTP {
+    /**
+     * The base32 encoded secret key
+     * @var string
+     */
+    public $secret;
+
+    /**
+     * The algorithm used for the hmac hash function
+     * @var string
+     */
+    public $digest;
+
+    /**
+     * The number of digits in the one-time password
+     * @var integer
+     */ 
+    public $digits;
+
+    /**
+     * Constructor for the OTP class
+     * @param string $secret the secret key
+     * @param array $opt options array can contain the
+     * following keys :
+     *   @param integer digits : the number of digits in the one time password
+     *   Currently Google Authenticator only support 6. Defaults to 6.
+     *   @param string digest : the algorithm used for the hmac hash function
+     *   Google Authenticator only support sha1. Defaults to sha1
+     *
+     * @return new OTP class.
+     */
+    public function __construct($secret, $opt = Array()) {
+      $this->digits = isset($opt['digits']) ? $opt['digits'] : 6;
+      $this->digest = isset($opt['digest']) ? $opt['digest'] : 'sha1';
+      $this->secret = $secret;
+    }
+
+    /**
+     * Generate a one-time password
+     *
+     * @param integer $input : number used to seed the hmac hash function.
+     * This number is usually a counter (HOTP) or calculated based on the current
+     * timestamp (see TOTP class).
+     * @return integer the one-time password 
+     */
+    public function generateOTP($input) {
+      $hash = hash_hmac($this->digest, $this->intToBytestring($input), $this->byteSecret());
+      foreach(str_split($hash, 2) as $hex) { // stupid PHP has bin2hex but no hex2bin WTF
+        $hmac[] = hexdec($hex);
+      }
+      $offset = $hmac[19] & 0xf;
+      $code = ($hmac[$offset+0] & 0x7F) << 24 |
+        ($hmac[$offset + 1] & 0xFF) << 16 |
+        ($hmac[$offset + 2] & 0xFF) << 8 |
+        ($hmac[$offset + 3] & 0xFF);
+      return $code % pow(10, $this->digits);
+    }
+
+    /**
+     * Returns the binary value of the base32 encoded secret
+     * @access private
+     * This method should be private but was left public for
+     * phpunit tests to work.
+     * @return binary secret key
+     */
+    public function byteSecret() {
+      return \Base32::decode($this->secret);
+    }
+
+    /**
+     * Turns an integer in a OATH bytestring
+     * @param integer $int
+     * @access private
+     * @return string bytestring
+     */
+    public function intToBytestring($int) {
+      $result = Array();
+      while($int != 0) {
+        $result[] = chr($int & 0xFF);
+        $int >>= 8;
+      }
+      return str_pad(join(array_reverse($result)), 8, "\000", STR_PAD_LEFT);
+    }
+  }
+}
diff --git a/lib/otphp/lib/otphp.php b/lib/otphp/lib/otphp.php
new file mode 100644 (file)
index 0000000..a6c6f8d
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+/*
+ * Copyright (c) 2011 Le Lag 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+require_once dirname(__FILE__).'/../vendor/libs.php';
+require_once dirname(__FILE__).'/otp.php';
+require_once dirname(__FILE__).'/hotp.php';
+require_once dirname(__FILE__).'/totp.php';
+
diff --git a/lib/otphp/lib/totp.php b/lib/otphp/lib/totp.php
new file mode 100644 (file)
index 0000000..10a1f42
--- /dev/null
@@ -0,0 +1,106 @@
+<?php
+/*
+ * Copyright (c) 2011 Le Lag 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+namespace OTPHP {
+  /**
+   * TOTP - One time password generator 
+   * 
+   * The TOTP class allow for the generation 
+   * and verification of one-time password using 
+   * the TOTP specified algorithm.
+   *
+   * This class is meant to be compatible with 
+   * Google Authenticator
+   *
+   * This class was originally ported from the rotp
+   * ruby library available at https://github.com/mdp/rotp
+   */
+  class TOTP extends OTP {
+    /**
+     * The interval in seconds for a one-time password timeframe
+     * Defaults to 30
+     * @var integer
+     */
+    public $interval;
+
+    public function __construct($s, $opt = Array()) {
+      $this->interval = isset($opt['interval']) ? $opt['interval'] : 30;
+      parent::__construct($s, $opt);
+    }
+
+    /**
+     *  Get the password for a specific timestamp value 
+     *
+     *  @param integer $timestamp the timestamp which is timecoded and 
+     *  used to seed the hmac hash function.
+     *  @return integer the One Time Password
+     */
+    public function at($timestamp) {
+      return $this->generateOTP($this->timecode($timestamp));
+    }
+
+    /**
+     *  Get the password for the current timestamp value 
+     *
+     *  @return integer the current One Time Password
+     */
+    public function now() {
+      return $this->generateOTP($this->timecode(time()));
+    }
+
+    /**
+     * Verify if a password is valid for a specific counter value
+     *
+     * @param integer $otp the one-time password 
+     * @param integer $timestamp the timestamp for the a given time, defaults to current time.
+     * @return  bool true if the counter is valid, false otherwise
+     */
+    public function verify($otp, $timestamp = null) {
+      if($timestamp === null)
+        $timestamp = time();
+      return ($otp == $this->at($timestamp));
+    }
+
+    /**
+     * Returns the uri for a specific secret for totp method.
+     * Can be encoded as a image for simple configuration in 
+     * Google Authenticator.
+     *
+     * @param string $name the name of the account / profile
+     * @return string the uri for the hmac secret
+     */
+    public function provisioning_uri($name) {
+      return "otpauth://totp/".urlencode($name)."?secret={$this->secret}";
+    }
+
+    /**
+     * Transform a timestamp in a counter based on specified internal
+     *
+     * @param integer $timestamp
+     * @return integer the timecode
+     */
+    protected function timecode($timestamp) {
+      return (int)( (((int)$timestamp * 1000) / ($this->interval * 1000)));
+    }
+  }
+
+}
diff --git a/lib/otphp/vendor/base32.php b/lib/otphp/vendor/base32.php
new file mode 100644 (file)
index 0000000..99c3f1b
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+
+/**
+ * Encode in Base32 based on RFC 4648.
+ * Requires 20% more space than base64  
+ * Great for case-insensitive filesystems like Windows and URL's  (except for = char which can be excluded using the pad option for urls)
+ *
+ * @package default
+ * @author Bryan Ruiz
+ **/
+class Base32 {
+
+   private static $map = array(
+        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', //  7
+        'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 15
+        'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 23
+        'Y', 'Z', '2', '3', '4', '5', '6', '7', // 31
+        '='  // padding char
+    );
+    
+   private static $flippedMap = array(
+        'A'=>'0', 'B'=>'1', 'C'=>'2', 'D'=>'3', 'E'=>'4', 'F'=>'5', 'G'=>'6', 'H'=>'7',
+        'I'=>'8', 'J'=>'9', 'K'=>'10', 'L'=>'11', 'M'=>'12', 'N'=>'13', 'O'=>'14', 'P'=>'15',
+        'Q'=>'16', 'R'=>'17', 'S'=>'18', 'T'=>'19', 'U'=>'20', 'V'=>'21', 'W'=>'22', 'X'=>'23',
+        'Y'=>'24', 'Z'=>'25', '2'=>'26', '3'=>'27', '4'=>'28', '5'=>'29', '6'=>'30', '7'=>'31'
+    );
+    
+    /**
+     *    Use padding false when encoding for urls
+     *
+     * @return base32 encoded string
+     * @author Bryan Ruiz
+     **/
+    public static function encode($input, $padding = true) {
+        if(empty($input)) return "";
+        $input = str_split($input);
+        $binaryString = "";
+        for($i = 0; $i < count($input); $i++) {
+            $binaryString .= str_pad(base_convert(ord($input[$i]), 10, 2), 8, '0', STR_PAD_LEFT);
+        }
+        $fiveBitBinaryArray = str_split($binaryString, 5);
+        $base32 = "";
+        $i=0;
+        while($i < count($fiveBitBinaryArray)) {    
+            $base32 .= self::$map[base_convert(str_pad($fiveBitBinaryArray[$i], 5,'0'), 2, 10)];
+            $i++;
+        }
+        if($padding && ($x = strlen($binaryString) % 40) != 0) {
+            if($x == 8) $base32 .= str_repeat(self::$map[32], 6);
+            else if($x == 16) $base32 .= str_repeat(self::$map[32], 4);
+            else if($x == 24) $base32 .= str_repeat(self::$map[32], 3);
+            else if($x == 32) $base32 .= self::$map[32];
+        }
+        return $base32;
+    }
+    
+    public static function decode($input) {
+        if(empty($input)) return;
+        $paddingCharCount = substr_count($input, self::$map[32]);
+        $allowedValues = array(6,4,3,1,0);
+        if(!in_array($paddingCharCount, $allowedValues)) return false;
+        for($i=0; $i<4; $i++){ 
+            if($paddingCharCount == $allowedValues[$i] && 
+                substr($input, -($allowedValues[$i])) != str_repeat(self::$map[32], $allowedValues[$i])) return false;
+        }
+        $input = str_replace('=','', $input);
+        $input = str_split($input);
+        $binaryString = "";
+        for($i=0; $i < count($input); $i = $i+8) {
+            $x = "";
+            if(!in_array($input[$i], self::$map)) return false;
+            for($j=0; $j < 8; $j++) {
+                $x .= str_pad(base_convert(@self::$flippedMap[@$input[$i + $j]], 10, 2), 5, '0', STR_PAD_LEFT);
+            }
+            $eightBits = str_split($x, 8);
+            for($z = 0; $z < count($eightBits); $z++) {
+                $binaryString .= ( ($y = chr(base_convert($eightBits[$z], 2, 10))) || ord($y) == 48 ) ? $y:"";
+            }
+        }
+        return $binaryString;
+    }
+}
+
diff --git a/lib/otphp/vendor/libs.php b/lib/otphp/vendor/libs.php
new file mode 100644 (file)
index 0000000..742c7b9
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+/*
+ * Copyright (c) 2011 Le Lag 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+// Add any needed third party library to this directory
+
+//require_once dirname(__FILE__).'/some_lib/lib.php';
+require_once dirname(__FILE__).'/base32.php';
diff --git a/lib/phpqrcode/CHANGELOG b/lib/phpqrcode/CHANGELOG
new file mode 100644 (file)
index 0000000..1088530
--- /dev/null
@@ -0,0 +1,38 @@
+* 1.0.0 build 2010031920 \r
+\r
+  - first public release\r
+  - help in readme, install\r
+  - cleanup ans separation of QRtools and QRspec\r
+  - now TCPDF binding requires minimal changes in TCPDF, having most of job\r
+    done in QRtools tcpdfBarcodeArray\r
+  - nicer QRtools::timeBenchmark output\r
+  - license and copyright notices in files\r
+  - indent cleanup - from tab to 4spc, keep it that way please :)\r
+  - sf project, repository, wiki\r
+  - simple code generator in index.php\r
+  \r
+* 1.1.0 build 2010032113\r
+\r
+  - added merge tool wich generate merged version of code\r
+    located in phpqrcode.php\r
+  - splited qrconst.php from qrlib.php\r
+  \r
+* 1.1.1 build 2010032405\r
+\r
+  - patch by Rick Seymour allowing saving PNG and displaying it at the same time\r
+  - added version info in VERSION file\r
+  - modified merge tool to include version info into generated file\r
+  - fixed e-mail in almost all head comments\r
+  \r
+* 1.1.2 build 2010032722\r
+\r
+  - full integration with TCPDF thanks to Nicola Asuni, it's author\r
+  - fixed bug with alphanumeric encoding detection\r
+  \r
+* 1.1.3 build 2010081807\r
+\r
+  - short opening tags replaced with standard ones\r
+  \r
+* 1.1.4 build 2010100721\r
+\r
+  - added missing static keyword QRinput::check (found by Luke Brookhart, Onjax LLC)\r
diff --git a/lib/phpqrcode/INSTALL b/lib/phpqrcode/INSTALL
new file mode 100644 (file)
index 0000000..eac6b07
--- /dev/null
@@ -0,0 +1,67 @@
+== REQUIREMENTS ==\r
+\r
+ * PHP5\r
+ * PHP GD2 extension with JPEG and PNG support\r
\r
+== INSTALLATION ==\r
+\r
+If you want to recreate cache by yourself make sure cache directory is\r
+writable and you have permisions to write into it. Also make sure you are\r
+able to read files in it if you have cache option enabled\r
\r
+== CONFIGURATION ==\r
+\r
+Feel free to modify config constants in qrconfig.php file. Read about it in\r
+provided comments and project wiki page (links in README file)\r
+\r
+== QUICK START ==\r
+\r
+Notice: probably you should'nt use all of this in same script :)\r
+\r
+<?phpb\r
+\r
+//include only that one, rest required files will be included from it\r
+include "qrlib.php"\r
+\r
+//write code into file, Error corection lecer is lowest, L (one form: L,M,Q,H)\r
+//each code square will be 4x4 pixels (4x zoom)\r
+//code will have 2 code squares white boundary around \r
+\r
+QRcode::png('PHP QR Code :)', 'test.png', 'L', 4, 2);\r
+\r
+//same as above but outputs file directly into browser (with appr. header etc.)\r
+//all other settings are default\r
+//WARNING! it should be FIRST and ONLY output generated by script, otherwise\r
+//rest of output will land inside PNG binary, breaking it for sure\r
+QRcode::png('PHP QR Code :)');\r
+\r
+//show benchmark\r
+QRtools::timeBenchmark();\r
+\r
+//rebuild cache\r
+QRtools::buildCache();\r
+\r
+//code generated in text mode - as a binary table\r
+//then displayed out as HTML using Unicode block building chars :)\r
+$tab = $qr->encode('PHP QR Code :)');\r
+QRspec::debug($tab, true);\r
+\r
+== TCPDF INTEGRATION ==\r
+\r
+Inside bindings/tcpdf you will find slightly modified 2dbarcodes.php.\r
+Instal phpqrcode liblaty inside tcpdf folder, then overwrite (or merge)\r
+2dbarcodes.php \r
+\r
+Then use similar as example #50 from TCPDF examples:\r
+\r
+<?php\r
+\r
+$style = array(\r
+    'border' => true,\r
+    'padding' => 4,\r
+    'fgcolor' => array(0,0,0),\r
+    'bgcolor' => false, //array(255,255,255)\r
+);\r
+\r
+//code name: QR, specify error correction level after semicolon (L,M,Q,H)\r
+$pdf->write2DBarcode('PHP QR Code :)', 'QR,L', '', '', 30, 30, $style, 'N');\r
diff --git a/lib/phpqrcode/LICENSE b/lib/phpqrcode/LICENSE
new file mode 100644 (file)
index 0000000..1883303
--- /dev/null
@@ -0,0 +1,165 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE\r
+                       Version 3, 29 June 2007\r
+\r
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\r
+ Everyone is permitted to copy and distribute verbatim copies\r
+ of this license document, but changing it is not allowed.\r
+\r
+\r
+  This version of the GNU Lesser General Public License incorporates\r
+the terms and conditions of version 3 of the GNU General Public\r
+License, supplemented by the additional permissions listed below.\r
+\r
+  0. Additional Definitions.\r
+\r
+  As used herein, "this License" refers to version 3 of the GNU Lesser\r
+General Public License, and the "GNU GPL" refers to version 3 of the GNU\r
+General Public License.\r
+\r
+  "The Library" refers to a covered work governed by this License,\r
+other than an Application or a Combined Work as defined below.\r
+\r
+  An "Application" is any work that makes use of an interface provided\r
+by the Library, but which is not otherwise based on the Library.\r
+Defining a subclass of a class defined by the Library is deemed a mode\r
+of using an interface provided by the Library.\r
+\r
+  A "Combined Work" is a work produced by combining or linking an\r
+Application with the Library.  The particular version of the Library\r
+with which the Combined Work was made is also called the "Linked\r
+Version".\r
+\r
+  The "Minimal Corresponding Source" for a Combined Work means the\r
+Corresponding Source for the Combined Work, excluding any source code\r
+for portions of the Combined Work that, considered in isolation, are\r
+based on the Application, and not on the Linked Version.\r
+\r
+  The "Corresponding Application Code" for a Combined Work means the\r
+object code and/or source code for the Application, including any data\r
+and utility programs needed for reproducing the Combined Work from the\r
+Application, but excluding the System Libraries of the Combined Work.\r
+\r
+  1. Exception to Section 3 of the GNU GPL.\r
+\r
+  You may convey a covered work under sections 3 and 4 of this License\r
+without being bound by section 3 of the GNU GPL.\r
+\r
+  2. Conveying Modified Versions.\r
+\r
+  If you modify a copy of the Library, and, in your modifications, a\r
+facility refers to a function or data to be supplied by an Application\r
+that uses the facility (other than as an argument passed when the\r
+facility is invoked), then you may convey a copy of the modified\r
+version:\r
+\r
+   a) under this License, provided that you make a good faith effort to\r
+   ensure that, in the event an Application does not supply the\r
+   function or data, the facility still operates, and performs\r
+   whatever part of its purpose remains meaningful, or\r
+\r
+   b) under the GNU GPL, with none of the additional permissions of\r
+   this License applicable to that copy.\r
+\r
+  3. Object Code Incorporating Material from Library Header Files.\r
+\r
+  The object code form of an Application may incorporate material from\r
+a header file that is part of the Library.  You may convey such object\r
+code under terms of your choice, provided that, if the incorporated\r
+material is not limited to numerical parameters, data structure\r
+layouts and accessors, or small macros, inline functions and templates\r
+(ten or fewer lines in length), you do both of the following:\r
+\r
+   a) Give prominent notice with each copy of the object code that the\r
+   Library is used in it and that the Library and its use are\r
+   covered by this License.\r
+\r
+   b) Accompany the object code with a copy of the GNU GPL and this license\r
+   document.\r
+\r
+  4. Combined Works.\r
+\r
+  You may convey a Combined Work under terms of your choice that,\r
+taken together, effectively do not restrict modification of the\r
+portions of the Library contained in the Combined Work and reverse\r
+engineering for debugging such modifications, if you also do each of\r
+the following:\r
+\r
+   a) Give prominent notice with each copy of the Combined Work that\r
+   the Library is used in it and that the Library and its use are\r
+   covered by this License.\r
+\r
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license\r
+   document.\r
+\r
+   c) For a Combined Work that displays copyright notices during\r
+   execution, include the copyright notice for the Library among\r
+   these notices, as well as a reference directing the user to the\r
+   copies of the GNU GPL and this license document.\r
+\r
+   d) Do one of the following:\r
+\r
+       0) Convey the Minimal Corresponding Source under the terms of this\r
+       License, and the Corresponding Application Code in a form\r
+       suitable for, and under terms that permit, the user to\r
+       recombine or relink the Application with a modified version of\r
+       the Linked Version to produce a modified Combined Work, in the\r
+       manner specified by section 6 of the GNU GPL for conveying\r
+       Corresponding Source.\r
+\r
+       1) Use a suitable shared library mechanism for linking with the\r
+       Library.  A suitable mechanism is one that (a) uses at run time\r
+       a copy of the Library already present on the user's computer\r
+       system, and (b) will operate properly with a modified version\r
+       of the Library that is interface-compatible with the Linked\r
+       Version.\r
+\r
+   e) Provide Installation Information, but only if you would otherwise\r
+   be required to provide such information under section 6 of the\r
+   GNU GPL, and only to the extent that such information is\r
+   necessary to install and execute a modified version of the\r
+   Combined Work produced by recombining or relinking the\r
+   Application with a modified version of the Linked Version. (If\r
+   you use option 4d0, the Installation Information must accompany\r
+   the Minimal Corresponding Source and Corresponding Application\r
+   Code. If you use option 4d1, you must provide the Installation\r
+   Information in the manner specified by section 6 of the GNU GPL\r
+   for conveying Corresponding Source.)\r
+\r
+  5. Combined Libraries.\r
+\r
+  You may place library facilities that are a work based on the\r
+Library side by side in a single library together with other library\r
+facilities that are not Applications and are not covered by this\r
+License, and convey such a combined library under terms of your\r
+choice, if you do both of the following:\r
+\r
+   a) Accompany the combined library with a copy of the same work based\r
+   on the Library, uncombined with any other library facilities,\r
+   conveyed under the terms of this License.\r
+\r
+   b) Give prominent notice with the combined library that part of it\r
+   is a work based on the Library, and explaining where to find the\r
+   accompanying uncombined form of the same work.\r
+\r
+  6. Revised Versions of the GNU Lesser General Public License.\r
+\r
+  The Free Software Foundation may publish revised and/or new versions\r
+of the GNU Lesser General Public License from time to time. Such new\r
+versions will be similar in spirit to the present version, but may\r
+differ in detail to address new problems or concerns.\r
+\r
+  Each version is given a distinguishing version number. If the\r
+Library as you received it specifies that a certain numbered version\r
+of the GNU Lesser General Public License "or any later version"\r
+applies to it, you have the option of following the terms and\r
+conditions either of that published version or of any later version\r
+published by the Free Software Foundation. If the Library as you\r
+received it does not specify a version number of the GNU Lesser\r
+General Public License, you may choose any version of the GNU Lesser\r
+General Public License ever published by the Free Software Foundation.\r
+\r
+  If the Library as you received it specifies that a proxy can decide\r
+whether future versions of the GNU Lesser General Public License shall\r
+apply, that proxy's public statement of acceptance of any version is\r
+permanent authorization for you to choose that version for the\r
+Library.\r
diff --git a/lib/phpqrcode/README b/lib/phpqrcode/README
new file mode 100644 (file)
index 0000000..a022fb5
--- /dev/null
@@ -0,0 +1,45 @@
+This is PHP implementation of QR Code 2-D barcode generator. It is pure-php\r
+LGPL-licensed implementation based on C libqrencode by Kentaro Fukuchi.\r
+\r
+== LICENSING ==\r
+\r
+Copyright (C) 2010 by Dominik Dzienia \r
+\r
+This library is free software; you can redistribute it and/or modify it under\r
+the terms of the GNU Lesser General Public License as published by the Free\r
+Software Foundation; either version 3 of the License, or any later version.\r
+\r
+This library is distributed in the hope that it will be useful, but WITHOUT ANY\r
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A\r
+PARTICULAR PURPOSE. See the GNU Lesser General Public License (LICENSE file)\r
+for more details.\r
+\r
+You should have received a copy of the GNU Lesser General Public License along\r
+with this library; if not, write to the Free Software Foundation, Inc., 51\r
+Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+\r
+== INSTALATION AND USAGE ==\r
+\r
+ * INSTALL file\r
+ * http://sourceforge.net/apps/mediawiki/phpqrcode/index.php?title=Main_Page\r
+\r
+== CONTACT ==\r
+\r
+Fell free to contact me via e-mail (deltalab at poczta dot fm) or using\r
+folowing project pages:\r
+\r
+ * http://sourceforge.net/projects/phpqrcode/\r
+ * http://phpqrcode.sourceforge.net/\r
+  \r
+== ACKNOWLEDGMENTS ==\r
+\r
+Based on C libqrencode library (ver. 3.1.1) \r
+Copyright (C) 2006-2010 by Kentaro Fukuchi\r
+http://megaui.net/fukuchi/works/qrencode/index.en.html\r
+\r
+QR Code is registered trademarks of DENSO WAVE INCORPORATED in JAPAN and other\r
+countries.\r
+\r
+Reed-Solomon code encoder is written by Phil Karn, KA9Q.\r
+Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q\r
\ No newline at end of file
diff --git a/lib/phpqrcode/VERSION b/lib/phpqrcode/VERSION
new file mode 100644 (file)
index 0000000..9f99279
--- /dev/null
@@ -0,0 +1,2 @@
+1.1.4\r
+2010100721
\ No newline at end of file
diff --git a/lib/phpqrcode/bindings/tcpdf/qrcode.php b/lib/phpqrcode/bindings/tcpdf/qrcode.php
new file mode 100644 (file)
index 0000000..7995460
--- /dev/null
@@ -0,0 +1,2875 @@
+<?php
+//============================================================+
+// File name   : qrcode.php
+// Begin       : 2010-03-22
+// Last Update : 2010-03-29
+// Version     : 1.0.002
+// License     : GNU LGPL v.3 (http://www.gnu.org/copyleft/lesser.html)
+//     ----------------------------------------------------------------------------
+//
+//     This library is free software; you can redistribute it and/or
+//     modify it under the terms of the GNU Lesser General Public
+//     License as published by the Free Software Foundation; either
+//     version 3 of the License, or any later version.
+//
+//     This library is distributed in the hope that it will be useful,
+//     but WITHOUT ANY WARRANTY; without even the implied warranty of
+//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+//     Lesser General Public License for more details.
+//
+//     You should have received a copy of the GNU Lesser General Public
+//     License along with this library; if not, write to the Free Software
+//     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//  or browse http://www.gnu.org/copyleft/lesser.html
+//
+//  ----------------------------------------------------------------------------
+//
+// DESCRIPTION :
+//
+// Class to create QR-code arrays for TCPDF class.
+// QR Code symbol is a 2D barcode that can be scanned by
+// handy terminals such as a mobile phone with CCD.
+// The capacity of QR Code is up to 7000 digits or 4000
+// characters, and has high robustness.
+// This class supports QR Code model 2, described in
+// JIS (Japanese Industrial Standards) X0510:2004
+// or ISO/IEC 18004.
+// Currently the following features are not supported:
+// ECI and FNC1 mode, Micro QR Code, QR Code model 1,
+// Structured mode.
+//
+// This class is derived from the following projects:
+// ---------------------------------------------------------
+// "PHP QR Code encoder"
+// License: GNU-LGPLv3
+// Copyright (C) 2010 by Dominik Dzienia <deltalab at poczta dot fm>
+// http://phpqrcode.sourceforge.net/
+// https://sourceforge.net/projects/phpqrcode/
+//
+// The "PHP QR Code encoder" is based on
+// "C libqrencode library" (ver. 3.1.1)
+// License: GNU-LGPL 2.1
+// Copyright (C) 2006-2010 by Kentaro Fukuchi
+// http://megaui.net/fukuchi/works/qrencode/index.en.html
+//
+// Reed-Solomon code encoder is written by Phil Karn, KA9Q.
+// Copyright (C) 2002-2006 Phil Karn, KA9Q
+//
+// QR Code is registered trademark of DENSO WAVE INCORPORATED
+// http://www.denso-wave.com/qrcode/index-e.html
+// ---------------------------------------------------------
+//
+// Author: Nicola Asuni
+//
+// (c) Copyright 2010:
+//               Nicola Asuni
+//               Tecnick.com S.r.l.
+//               Via della Pace, 11
+//               09044 Quartucciu (CA)
+//               ITALY
+//               www.tecnick.com
+//               info@tecnick.com
+//============================================================+
+
+/**
+ * Class to create QR-code arrays for TCPDF class.
+ * QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD.
+ * The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness.
+ * This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004.
+ * Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode.
+ *
+ * This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html).
+ * Please read comments on this class source file for full copyright and license information.
+ *
+ * @package com.tecnick.tcpdf
+ * @abstract Class for generating QR-code array for TCPDF.
+ * @author Nicola Asuni
+ * @copyright 2010 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
+ * @link http://www.tcpdf.org
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL
+ * @version 1.0.002
+ */
+
+// definitions
+if (!defined('QRCODEDEFS')) {
+
+       /**
+        * Indicate that definitions for this class are set
+        */
+       define('QRCODEDEFS', true);
+
+       // -----------------------------------------------------
+
+       // Encoding modes (characters which can be encoded in QRcode)
+
+       /**
+        * Encoding mode
+        */
+       define('QR_MODE_NL', -1);
+
+       /**
+        * Encoding mode numeric (0-9). 3 characters are encoded to 10bit length. In theory, 7089 characters or less can be stored in a QRcode.
+        */
+       define('QR_MODE_NM', 0);
+
+       /**
+        * Encoding mode alphanumeric (0-9A-Z $%*+-./:) 45characters. 2 characters are encoded to 11bit length. In theory, 4296 characters or less can be stored in a QRcode.
+        */
+       define('QR_MODE_AN', 1);
+
+       /**
+        * Encoding mode 8bit byte data. In theory, 2953 characters or less can be stored in a QRcode.
+        */
+       define('QR_MODE_8B', 2);
+
+       /**
+        * Encoding mode KANJI. A KANJI character (multibyte character) is encoded to 13bit length. In theory, 1817 characters or less can be stored in a QRcode.
+        */
+       define('QR_MODE_KJ', 3);
+
+       /**
+        * Encoding mode STRUCTURED (currently unsupported)
+        */
+       define('QR_MODE_ST', 4);
+
+       // -----------------------------------------------------
+
+       // Levels of error correction.
+       // QRcode has a function of an error correcting for miss reading that white is black.
+       // Error correcting is defined in 4 level as below.
+
+       /**
+        * Error correction level L : About 7% or less errors can be corrected.
+        */
+       define('QR_ECLEVEL_L', 0);
+
+       /**
+        * Error correction level M : About 15% or less errors can be corrected.
+        */
+       define('QR_ECLEVEL_M', 1);
+
+       /**
+        * Error correction level Q : About 25% or less errors can be corrected.
+        */
+       define('QR_ECLEVEL_Q', 2);
+
+       /**
+        * Error correction level H : About 30% or less errors can be corrected.
+        */
+       define('QR_ECLEVEL_H', 3);
+
+       // -----------------------------------------------------
+
+       // Version. Size of QRcode is defined as version.
+       // Version is from 1 to 40.
+       // Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases.
+       // So version 40 is 177*177 matrix.
+
+       /**
+        * Maximum QR Code version.
+        */
+       define('QRSPEC_VERSION_MAX', 40);
+
+       /**
+        * Maximum matrix size for maximum version (version 40 is 177*177 matrix).
+        */
+    define('QRSPEC_WIDTH_MAX', 177);
+
+       // -----------------------------------------------------
+
+       /**
+        * Matrix index to get width from $capacity array.
+        */
+    define('QRCAP_WIDTH',    0);
+
+    /**
+        * Matrix index to get number of words from $capacity array.
+        */
+    define('QRCAP_WORDS',    1);
+
+    /**
+        * Matrix index to get remainder from $capacity array.
+        */
+    define('QRCAP_REMINDER', 2);
+
+    /**
+        * Matrix index to get error correction level from $capacity array.
+        */
+    define('QRCAP_EC',       3);
+
+       // -----------------------------------------------------
+
+       // Structure (currently usupported)
+
+       /**
+        * Number of header bits for structured mode
+        */
+    define('STRUCTURE_HEADER_BITS',  20);
+
+    /**
+        * Max number of symbols for structured mode
+        */
+    define('MAX_STRUCTURED_SYMBOLS', 16);
+
+       // -----------------------------------------------------
+
+    // Masks
+
+    /**
+        * Down point base value for case 1 mask pattern (concatenation of same color in a line or a column)
+        */
+    define('N1',  3);
+
+    /**
+        * Down point base value for case 2 mask pattern (module block of same color)
+        */
+       define('N2',  3);
+
+    /**
+        * Down point base value for case 3 mask pattern (1:1:3:1:1(dark:bright:dark:bright:dark)pattern in a line or a column)
+        */
+       define('N3', 40);
+
+    /**
+        * Down point base value for case 4 mask pattern (ration of dark modules in whole)
+        */
+       define('N4', 10);
+
+       // -----------------------------------------------------
+
+       // Optimization settings
+
+       /**
+        * if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code
+        */
+       define('QR_FIND_BEST_MASK', true);
+
+       /**
+        * if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly
+        */
+       define('QR_FIND_FROM_RANDOM', 2);
+
+       /**
+        * when QR_FIND_BEST_MASK === false
+        */
+       define('QR_DEFAULT_MASK', 2);
+
+       // -----------------------------------------------------
+
+} // end of definitions
+
+// #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+
+if (!class_exists('QRcode', false)) {
+
+       // for compaibility with PHP4
+       if (!function_exists('str_split')) {
+       /**
+        * Convert a string to an array (needed for PHP4 compatibility)
+        * @param string $string The input string.
+        * @param int $split_length Maximum length of the chunk.
+        * @return  If the optional split_length  parameter is specified, the returned array will be broken down into chunks with each being split_length  in length, otherwise each chunk will be one character in length. FALSE is returned if split_length is less than 1. If the split_length length exceeds the length of string , the entire string is returned as the first (and only) array element.
+        */
+               function str_split($string, $split_length=1) {
+                       if ((strlen($string) > $split_length) OR (!$split_length)) {
+                               do {
+                                       $c = strlen($string);
+                                       $parts[] = substr($string, 0, $split_length);
+                                       $string = substr($string, $split_length);
+                               } while ($string !== false);
+                       } else {
+                               $parts = array($string);
+                       }
+                       return $parts;
+               }
+       }
+
+       // #####################################################
+
+       /**
+        * Class to create QR-code arrays for TCPDF class.
+        * QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD.
+        * The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness.
+        * This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004.
+        * Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode.
+        *
+        * This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html).
+        * Please read comments on this class source file for full copyright and license information.
+        *
+        * @name QRcode
+        * @package com.tecnick.tcpdf
+        * @abstract Class for generating QR-code array for TCPDF.
+        * @author Nicola Asuni
+        * @copyright 2010 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
+        * @link http://www.tcpdf.org
+        * @license http://www.gnu.org/copyleft/lesser.html LGPL
+        * @version 1.0.002
+        */
+       class QRcode {
+
+               /**
+                * @var barcode array to be returned which is readable by TCPDF
+                * @access protected
+                */
+               protected $barcode_array = array();
+
+               /**
+                * @var QR code version. Size of QRcode is defined as version. Version is from 1 to 40. Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases. So version 40 is 177*177 matrix.
+                * @access protected
+                */
+               protected $version = 0;
+
+               /**
+                * @var Levels of error correction. See definitions for possible values.
+                * @access protected
+                */
+               protected $level = QR_ECLEVEL_L;
+
+               /**
+                * @var Encoding mode
+                * @access protected
+                */
+               protected $hint = QR_MODE_8B;
+
+               /**
+                * @var if true the input string will be converted to uppercase
+                * @access protected
+                */
+               protected $casesensitive = true;
+
+               /**
+                * @var structured QR code (not supported yet)
+                * @access protected
+                */
+               protected $structured = 0;
+
+               /**
+                * @var mask data
+                * @access protected
+                */
+               protected $data;
+
+               // FrameFiller
+
+               /**
+                * @var width
+                * @access protected
+                */
+               protected $width;
+
+               /**
+                * @var frame
+                * @access protected
+                */
+               protected $frame;
+
+               /**
+                * @var X position of bit
+                * @access protected
+                */
+               protected $x;
+
+               /**
+                * @var Y position of bit
+                * @access protected
+                */
+               protected $y;
+
+               /**
+                * @var direction
+                * @access protected
+                */
+               protected $dir;
+
+               /**
+                * @var single bit
+                * @access protected
+                */
+               protected $bit;
+
+               // ---- QRrawcode ----
+
+               /**
+                * @var data code
+                * @access protected
+                */
+               protected $datacode = array();
+
+               /**
+                * @var error correction code
+                * @access protected
+                */
+               protected $ecccode = array();
+
+               /**
+                * @var blocks
+                * @access protected
+                */
+               protected $blocks;
+
+               /**
+                * @var Reed-Solomon blocks
+                * @access protected
+                */
+               protected $rsblocks = array(); //of RSblock
+
+               /**
+                * @var counter
+                * @access protected
+                */
+               protected $count;
+
+               /**
+                * @var data length
+                * @access protected
+                */
+               protected $dataLength;
+
+               /**
+                * @var error correction length
+                * @access protected
+                */
+               protected $eccLength;
+
+               /**
+                * @var b1
+                * @access protected
+                */
+               protected $b1;
+
+               // ---- QRmask ----
+
+               /**
+                * @var run length
+                * @access protected
+                */
+               protected $runLength = array();
+
+               // ---- QRsplit ----
+
+               /**
+                * @var input data string
+                * @access protected
+                */
+               protected $dataStr = '';
+
+               /**
+                * @var input items
+                * @access protected
+                */
+               protected $items;
+
+               // Reed-Solomon items
+
+               /**
+                * @var Reed-Solomon items
+                * @access protected
+                */
+               protected $rsitems = array();
+
+               /**
+                * @var array of frames
+                * @access protected
+                */
+               protected $frames = array();
+
+               /**
+                * @var alphabet-numeric convesion table
+                * @access protected
+                */
+               protected $anTable = array(
+                       -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //
+                       -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //
+                       36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, //
+                        0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 44, -1, -1, -1, -1, -1, //
+                       -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, //
+                       25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, //
+                       -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //
+                       -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1  //
+                       );
+
+               /**
+                * @var array Table of the capacity of symbols
+                * See Table 1 (pp.13) and Table 12-16 (pp.30-36), JIS X0510:2004.
+                * @access protected
+                */
+               protected $capacity = array(
+                       array(  0,    0, 0, array(   0,    0,    0,    0)), //
+                       array( 21,   26, 0, array(   7,   10,   13,   17)), //  1
+                       array( 25,   44, 7, array(  10,   16,   22,   28)), //
+                       array( 29,   70, 7, array(  15,   26,   36,   44)), //
+                       array( 33,  100, 7, array(  20,   36,   52,   64)), //
+                       array( 37,  134, 7, array(  26,   48,   72,   88)), //  5
+                       array( 41,  172, 7, array(  36,   64,   96,  112)), //
+                       array( 45,  196, 0, array(  40,   72,  108,  130)), //
+                       array( 49,  242, 0, array(  48,   88,  132,  156)), //
+                       array( 53,  292, 0, array(  60,  110,  160,  192)), //
+                       array( 57,  346, 0, array(  72,  130,  192,  224)), // 10
+                       array( 61,  404, 0, array(  80,  150,  224,  264)), //
+                       array( 65,  466, 0, array(  96,  176,  260,  308)), //
+                       array( 69,  532, 0, array( 104,  198,  288,  352)), //
+                       array( 73,  581, 3, array( 120,  216,  320,  384)), //
+                       array( 77,  655, 3, array( 132,  240,  360,  432)), // 15
+                       array( 81,  733, 3, array( 144,  280,  408,  480)), //
+                       array( 85,  815, 3, array( 168,  308,  448,  532)), //
+                       array( 89,  901, 3, array( 180,  338,  504,  588)), //
+                       array( 93,  991, 3, array( 196,  364,  546,  650)), //
+                       array( 97, 1085, 3, array( 224,  416,  600,  700)), // 20
+                       array(101, 1156, 4, array( 224,  442,  644,  750)), //
+                       array(105, 1258, 4, array( 252,  476,  690,  816)), //
+                       array(109, 1364, 4, array( 270,  504,  750,  900)), //
+                       array(113, 1474, 4, array( 300,  560,  810,  960)), //
+                       array(117, 1588, 4, array( 312,  588,  870, 1050)), // 25
+                       array(121, 1706, 4, array( 336,  644,  952, 1110)), //
+                       array(125, 1828, 4, array( 360,  700, 1020, 1200)), //
+                       array(129, 1921, 3, array( 390,  728, 1050, 1260)), //
+                       array(133, 2051, 3, array( 420,  784, 1140, 1350)), //
+                       array(137, 2185, 3, array( 450,  812, 1200, 1440)), // 30
+                       array(141, 2323, 3, array( 480,  868, 1290, 1530)), //
+                       array(145, 2465, 3, array( 510,  924, 1350, 1620)), //
+                       array(149, 2611, 3, array( 540,  980, 1440, 1710)), //
+                       array(153, 2761, 3, array( 570, 1036, 1530, 1800)), //
+                       array(157, 2876, 0, array( 570, 1064, 1590, 1890)), // 35
+                       array(161, 3034, 0, array( 600, 1120, 1680, 1980)), //
+                       array(165, 3196, 0, array( 630, 1204, 1770, 2100)), //
+                       array(169, 3362, 0, array( 660, 1260, 1860, 2220)), //
+                       array(173, 3532, 0, array( 720, 1316, 1950, 2310)), //
+                       array(177, 3706, 0, array( 750, 1372, 2040, 2430))  // 40
+               );
+
+               /**
+                * @var array Length indicator
+                * @access protected
+                */
+               protected $lengthTableBits = array(
+                       array(10, 12, 14),
+                       array( 9, 11, 13),
+                       array( 8, 16, 16),
+                       array( 8, 10, 12)
+               );
+
+               /**
+                * @var array Table of the error correction code (Reed-Solomon block)
+                * See Table 12-16 (pp.30-36), JIS X0510:2004.
+                * @access protected
+                */
+               protected $eccTable = array(
+                       array(array( 0,  0), array( 0,  0), array( 0,  0), array( 0,  0)), //
+                       array(array( 1,  0), array( 1,  0), array( 1,  0), array( 1,  0)), //  1
+                       array(array( 1,  0), array( 1,  0), array( 1,  0), array( 1,  0)), //
+                       array(array( 1,  0), array( 1,  0), array( 2,  0), array( 2,  0)), //
+                       array(array( 1,  0), array( 2,  0), array( 2,  0), array( 4,  0)), //
+                       array(array( 1,  0), array( 2,  0), array( 2,  2), array( 2,  2)), //  5
+                       array(array( 2,  0), array( 4,  0), array( 4,  0), array( 4,  0)), //
+                       array(array( 2,  0), array( 4,  0), array( 2,  4), array( 4,  1)), //
+                       array(array( 2,  0), array( 2,  2), array( 4,  2), array( 4,  2)), //
+                       array(array( 2,  0), array( 3,  2), array( 4,  4), array( 4,  4)), //
+                       array(array( 2,  2), array( 4,  1), array( 6,  2), array( 6,  2)), // 10
+                       array(array( 4,  0), array( 1,  4), array( 4,  4), array( 3,  8)), //
+                       array(array( 2,  2), array( 6,  2), array( 4,  6), array( 7,  4)), //
+                       array(array( 4,  0), array( 8,  1), array( 8,  4), array(12,  4)), //
+                       array(array( 3,  1), array( 4,  5), array(11,  5), array(11,  5)), //
+                       array(array( 5,  1), array( 5,  5), array( 5,  7), array(11,  7)), // 15
+                       array(array( 5,  1), array( 7,  3), array(15,  2), array( 3, 13)), //
+                       array(array( 1,  5), array(10,  1), array( 1, 15), array( 2, 17)), //
+                       array(array( 5,  1), array( 9,  4), array(17,  1), array( 2, 19)), //
+                       array(array( 3,  4), array( 3, 11), array(17,  4), array( 9, 16)), //
+                       array(array( 3,  5), array( 3, 13), array(15,  5), array(15, 10)), // 20
+                       array(array( 4,  4), array(17,  0), array(17,  6), array(19,  6)), //
+                       array(array( 2,  7), array(17,  0), array( 7, 16), array(34,  0)), //
+                       array(array( 4,  5), array( 4, 14), array(11, 14), array(16, 14)), //
+                       array(array( 6,  4), array( 6, 14), array(11, 16), array(30,  2)), //
+                       array(array( 8,  4), array( 8, 13), array( 7, 22), array(22, 13)), // 25
+                       array(array(10,  2), array(19,  4), array(28,  6), array(33,  4)), //
+                       array(array( 8,  4), array(22,  3), array( 8, 26), array(12, 28)), //
+                       array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), //
+                       array(array( 7,  7), array(21,  7), array( 1, 37), array(19, 26)), //
+                       array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), // 30
+                       array(array(13,  3), array( 2, 29), array(42,  1), array(23, 28)), //
+                       array(array(17,  0), array(10, 23), array(10, 35), array(19, 35)), //
+                       array(array(17,  1), array(14, 21), array(29, 19), array(11, 46)), //
+                       array(array(13,  6), array(14, 23), array(44,  7), array(59,  1)), //
+                       array(array(12,  7), array(12, 26), array(39, 14), array(22, 41)), // 35
+                       array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), //
+                       array(array(17,  4), array(29, 14), array(49, 10), array(24, 46)), //
+                       array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), //
+                       array(array(20,  4), array(40,  7), array(43, 22), array(10, 67)), //
+                       array(array(19,  6), array(18, 31), array(34, 34), array(20, 61))  // 40
+               );
+
+               /**
+                * @var array Positions of alignment patterns.
+                * This array includes only the second and the third position of the alignment patterns. Rest of them can be calculated from the distance between them.
+                * See Table 1 in Appendix E (pp.71) of JIS X0510:2004.
+                * @access protected
+                */
+               protected $alignmentPattern = array(
+                       array( 0,  0),
+                       array( 0,  0), array(18,  0), array(22,  0), array(26,  0), array(30,  0), //  1- 5
+                       array(34,  0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), //  6-10
+                       array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), // 11-15
+                       array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), // 16-20
+                       array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), // 21-25
+                       array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), // 26-30
+                       array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), // 31-35
+                       array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58)  // 35-40
+               );
+
+               /**
+                * @var array Version information pattern (BCH coded).
+                * See Table 1 in Appendix D (pp.68) of JIS X0510:2004.
+                * size: [QRSPEC_VERSION_MAX - 6]
+                * @access protected
+                */
+               protected $versionPattern = array(
+                       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
+               );
+
+               /**
+                * @var array Format information
+                * @access protected
+                */
+               protected $formatInfo = array(
+                       array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), //
+                       array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), //
+                       array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), //
+                       array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b)  //
+               );
+
+
+               // -------------------------------------------------
+               // -------------------------------------------------
+
+
+               /**
+                * This is the class constructor.
+                * Creates a QRcode object
+                * @param string $code code to represent using QRcode
+                * @param string $eclevel error level: <ul><li>L : About 7% or less errors can be corrected.</li><li>M : About 15% or less errors can be corrected.</li><li>Q : About 25% or less errors can be corrected.</li><li>H : About 30% or less errors can be corrected.</li></ul>
+                * @access public
+                * @since 1.0.000
+                */
+               public function __construct($code, $eclevel = 'L') {
+                       $barcode_array = array();
+                       if ((is_null($code)) OR ($code == '\0') OR ($code == '')) {
+                               return false;
+                       }
+                       // set error correction level
+                       $this->level = array_search($eclevel, array('L', 'M', 'Q', 'H'));
+                       if ($this->level === false) {
+                               $this->level = QR_ECLEVEL_L;
+                       }
+                       if (($this->hint != QR_MODE_8B) AND ($this->hint != QR_MODE_KJ)) {
+                               return false;
+                       }
+                       if (($this->version < 0) OR ($this->version > QRSPEC_VERSION_MAX)) {
+                               return false;
+                       }
+                       $this->items = array();
+                       $this->encodeString($code);
+                       $qrTab = $this->binarize($this->data);
+                       $size = count($qrTab);
+                       $barcode_array['num_rows'] = $size;
+                       $barcode_array['num_cols'] = $size;
+                       $barcode_array['bcode'] = array();
+                       foreach ($qrTab as $line) {
+                               $arrAdd = array();
+                               foreach (str_split($line) as $char) {
+                                       $arrAdd[] = ($char=='1')?1:0;
+                               }
+                               $barcode_array['bcode'][] = $arrAdd;
+                       }
+                       $this->barcode_array = $barcode_array;
+               }
+
+               /**
+                * Returns a barcode array which is readable by TCPDF
+                * @return array barcode array readable by TCPDF;
+                * @access public
+                */
+               public function getBarcodeArray() {
+                       return $this->barcode_array;
+               }
+
+               /**
+                * Convert the frame in binary form
+                * @param array $frame array to binarize
+                * @return array frame in binary form
+                */
+               protected function binarize($frame) {
+                       $len = count($frame);
+                       // the frame is square (width = height)
+                       foreach ($frame as &$frameLine) {
+                               for ($i=0; $i<$len; $i++) {
+                                       $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0';
+                               }
+                       }
+                       return $frame;
+               }
+
+               /**
+                * Encode the input string to QR code
+                * @param string $string input string to encode
+                */
+               protected function encodeString($string) {
+                       $this->dataStr = $string;
+                       if (!$this->casesensitive) {
+                               $this->toUpper();
+                       }
+                       $ret = $this->splitString();
+                       if ($ret < 0) {
+                               return NULL;
+                       }
+                       $this->encodeMask(-1);
+               }
+
+               /**
+                * Encode mask
+                * @param int $mask masking mode
+                */
+               protected function encodeMask($mask) {
+                       $spec = array(0, 0, 0, 0, 0);
+                       $this->datacode = $this->getByteStream($this->items);
+                       if (is_null($this->datacode)) {
+                               return NULL;
+                       }
+                       $spec = $this->getEccSpec($this->version, $this->level, $spec);
+                       $this->b1 = $this->rsBlockNum1($spec);
+                       $this->dataLength = $this->rsDataLength($spec);
+                       $this->eccLength = $this->rsEccLength($spec);
+                       $this->ecccode = array_fill(0, $this->eccLength, 0);
+                       $this->blocks = $this->rsBlockNum($spec);
+                       $ret = $this->init($spec);
+                       if ($ret < 0) {
+                               return NULL;
+                       }
+                       $this->count = 0;
+                       $this->width = $this->getWidth($this->version);
+                       $this->frame = $this->newFrame($this->version);
+                       $this->x = $this->width - 1;
+                       $this->y = $this->width - 1;
+                       $this->dir = -1;
+                       $this->bit = -1;
+                       // inteleaved data and ecc codes
+                       for ($i=0; $i < ($this->dataLength + $this->eccLength); $i++) {
+                               $code = $this->getCode();
+                               $bit = 0x80;
+                               for ($j=0; $j<8; $j++) {
+                                       $addr = $this->getNextPosition();
+                                       $this->setFrameAt($addr, 0x02 | (($bit & $code) != 0));
+                                       $bit = $bit >> 1;
+                               }
+                       }
+                       // remainder bits
+                       $j = $this->getRemainder($this->version);
+                       for ($i=0; $i<$j; $i++) {
+                               $addr = $this->getNextPosition();
+                               $this->setFrameAt($addr, 0x02);
+                       }
+                       // masking
+                       $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0);
+                       if ($mask < 0) {
+                               if (QR_FIND_BEST_MASK) {
+                                       $masked = $this->mask($this->width, $this->frame, $this->level);
+                               } else {
+                                       $masked = $this->makeMask($this->width, $this->frame, (intval(QR_DEFAULT_MASK) % 8), $this->level);
+                               }
+                       } else {
+                               $masked = $this->makeMask($this->width, $this->frame, $mask, $this->level);
+                       }
+                       if ($masked == NULL) {
+                               return NULL;
+                       }
+                       $this->data = $masked;
+               }
+
+               // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+               // FrameFiller
+
+               /**
+                * Set frame value at specified position
+                * @param array $at x,y position
+                * @param int $val value of the character to set
+                */
+               protected function setFrameAt($at, $val) {
+                       $this->frame[$at['y']][$at['x']] = chr($val);
+               }
+
+               /**
+                * Get frame value at specified position
+                * @param array $at x,y position
+                * @return value at specified position
+                */
+               protected function getFrameAt($at) {
+                       return ord($this->frame[$at['y']][$at['x']]);
+               }
+
+               /**
+                * Return the next frame position
+                * @return array of x,y coordinates
+                */
+               protected function getNextPosition() {
+                       do {
+                               if ($this->bit == -1) {
+                                       $this->bit = 0;
+                                       return array('x'=>$this->x, 'y'=>$this->y);
+                               }
+                               $x = $this->x;
+                               $y = $this->y;
+                               $w = $this->width;
+                               if ($this->bit == 0) {
+                                       $x--;
+                                       $this->bit++;
+                               } else {
+                                       $x++;
+                                       $y += $this->dir;
+                                       $this->bit--;
+                               }
+                               if ($this->dir < 0) {
+                                       if ($y < 0) {
+                                               $y = 0;
+                                               $x -= 2;
+                                               $this->dir = 1;
+                                               if ($x == 6) {
+                                                       $x--;
+                                                       $y = 9;
+                                               }
+                                       }
+                               } else {
+                                       if ($y == $w) {
+                                               $y = $w - 1;
+                                               $x -= 2;
+                                               $this->dir = -1;
+                                               if ($x == 6) {
+                                                       $x--;
+                                                       $y -= 8;
+                                               }
+                                       }
+                               }
+                               if (($x < 0) OR ($y < 0)) {
+                                       return NULL;
+                               }
+                               $this->x = $x;
+                               $this->y = $y;
+                       } while(ord($this->frame[$y][$x]) & 0x80);
+                       return array('x'=>$x, 'y'=>$y);
+               }
+
+               // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+               // QRrawcode
+
+               /**
+                * Initialize code.
+                * @param array $spec array of ECC specification
+                * @return 0 in case of success, -1 in case of error
+                */
+               protected function init($spec) {
+                       $dl = $this->rsDataCodes1($spec);
+                       $el = $this->rsEccCodes1($spec);
+                       $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el);
+                       $blockNo = 0;
+                       $dataPos = 0;
+                       $eccPos = 0;
+                       $endfor = $this->rsBlockNum1($spec);
+                       for ($i=0; $i < $endfor; ++$i) {
+                               $ecc = array_slice($this->ecccode, $eccPos);
+                               $this->rsblocks[$blockNo] = array();
+                               $this->rsblocks[$blockNo]['dataLength'] = $dl;
+                               $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos);
+                               $this->rsblocks[$blockNo]['eccLength'] = $el;
+                               $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc);
+                               $this->rsblocks[$blockNo]['ecc'] = $ecc;
+                               $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc);
+                               $dataPos += $dl;
+                               $eccPos += $el;
+                               $blockNo++;
+                       }
+                       if ($this->rsBlockNum2($spec) == 0) {
+                               return 0;
+                       }
+                       $dl = $this->rsDataCodes2($spec);
+                       $el = $this->rsEccCodes2($spec);
+                       $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el);
+                       if ($rs == NULL) {
+                               return -1;
+                       }
+                       $endfor = $this->rsBlockNum2($spec);
+                       for ($i=0; $i < $endfor; ++$i) {
+                               $ecc = array_slice($this->ecccode, $eccPos);
+                               $this->rsblocks[$blockNo] = array();
+                               $this->rsblocks[$blockNo]['dataLength'] = $dl;
+                               $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos);
+                               $this->rsblocks[$blockNo]['eccLength'] = $el;
+                               $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc);
+                               $this->rsblocks[$blockNo]['ecc'] = $ecc;
+                               $this->ecccode = array_merge(array_slice($this->ecccode, 0, $eccPos), $ecc);
+                               $dataPos += $dl;
+                               $eccPos += $el;
+                               $blockNo++;
+                       }
+                       return 0;
+               }
+
+               /**
+                * Return Reed-Solomon block code.
+                * @return array rsblocks
+                */
+               protected function getCode() {
+                       if ($this->count < $this->dataLength) {
+                               $row = $this->count % $this->blocks;
+                               $col = $this->count / $this->blocks;
+                               if ($col >= $this->rsblocks[0]['dataLength']) {
+                                       $row += $this->b1;
+                               }
+                               $ret = $this->rsblocks[$row]['data'][$col];
+                       } elseif ($this->count < $this->dataLength + $this->eccLength) {
+                               $row = ($this->count - $this->dataLength) % $this->blocks;
+                               $col = ($this->count - $this->dataLength) / $this->blocks;
+                               $ret = $this->rsblocks[$row]['ecc'][$col];
+                       } else {
+                               return 0;
+                       }
+                       $this->count++;
+                       return $ret;
+               }
+
+               // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+               // QRmask
+
+               /**
+                * Write Format Information on frame and returns the number of black bits
+                * @param int $width frame width
+                * @param array $frame frame
+                * @param array $mask masking mode
+                * @param int $level error correction level
+                * @return int blacks
+                */
+                protected function writeFormatInformation($width, &$frame, $mask, $level) {
+                       $blacks = 0;
+                       $format =  $this->getFormatInfo($mask, $level);
+                       for ($i=0; $i<8; ++$i) {
+                               if ($format & 1) {
+                                       $blacks += 2;
+                                       $v = 0x85;
+                               } else {
+                                       $v = 0x84;
+                               }
+                               $frame[8][$width - 1 - $i] = chr($v);
+                               if ($i < 6) {
+                                       $frame[$i][8] = chr($v);
+                               } else {
+                                       $frame[$i + 1][8] = chr($v);
+                               }
+                               $format = $format >> 1;
+                       }
+                       for ($i=0; $i<7; ++$i) {
+                       if ($format & 1) {
+                               $blacks += 2;
+                               $v = 0x85;
+                       } else {
+                               $v = 0x84;
+                       }
+                       $frame[$width - 7 + $i][8] = chr($v);
+                       if ($i == 0) {
+                               $frame[8][7] = chr($v);
+                       } else {
+                               $frame[8][6 - $i] = chr($v);
+                       }
+                       $format = $format >> 1;
+                       }
+                       return $blacks;
+               }
+
+               /**
+                * mask0
+                * @param int $x X position
+                * @param int $y Y position
+                * @return int mask
+                */
+                protected function mask0($x, $y) {
+                       return ($x + $y) & 1;
+               }
+
+               /**
+                * mask1
+                * @param int $x X position
+                * @param int $y Y position
+                * @return int mask
+                */
+                protected function mask1($x, $y) {
+                       return ($y & 1);
+               }
+
+               /**
+                * mask2
+                * @param int $x X position
+                * @param int $y Y position
+                * @return int mask
+                */
+                protected function mask2($x, $y) {
+                       return ($x % 3);
+               }
+
+               /**
+                * mask3
+                * @param int $x X position
+                * @param int $y Y position
+                * @return int mask
+                */
+                protected function mask3($x, $y) {
+                       return ($x + $y) % 3;
+               }
+
+               /**
+                * mask4
+                * @param int $x X position
+                * @param int $y Y position
+                * @return int mask
+                */
+                protected function mask4($x, $y) {
+                       return (((int)($y / 2)) + ((int)($x / 3))) & 1;
+               }
+
+               /**
+                * mask5
+                * @param int $x X position
+                * @param int $y Y position
+                * @return int mask
+                */
+                protected function mask5($x, $y) {
+                       return (($x * $y) & 1) + ($x * $y) % 3;
+               }
+
+               /**
+                * mask6
+                * @param int $x X position
+                * @param int $y Y position
+                * @return int mask
+                */
+                protected function mask6($x, $y) {
+                       return ((($x * $y) & 1) + ($x * $y) % 3) & 1;
+               }
+
+               /**
+                * mask7
+                * @param int $x X position
+                * @param int $y Y position
+                * @return int mask
+                */
+                protected function mask7($x, $y) {
+                       return ((($x * $y) % 3) + (($x + $y) & 1)) & 1;
+               }
+
+               /**
+                * Return bitmask
+                * @param int $maskNo mask number
+                * @param int $width width
+                * @param array $frame frame
+                * @return array bitmask
+                */
+               protected function generateMaskNo($maskNo, $width, $frame) {
+                       $bitMask = array_fill(0, $width, array_fill(0, $width, 0));
+                       for ($y=0; $y<$width; ++$y) {
+                               for ($x=0; $x<$width; ++$x) {
+                                       if (ord($frame[$y][$x]) & 0x80) {
+                                               $bitMask[$y][$x] = 0;
+                                       } else {
+                                               $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y);
+                                               $bitMask[$y][$x] = ($maskFunc == 0)?1:0;
+                                       }
+                               }
+                       }
+                       return $bitMask;
+               }
+
+               /**
+                * makeMaskNo
+                * @param int $maskNo
+                * @param int $width
+                * @param int $s
+                * @param int $d
+                * @param boolean $maskGenOnly
+                * @return int b
+                */
+                protected function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly=false) {
+                       $b = 0;
+                       $bitMask = array();
+                       $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);
+                       if ($maskGenOnly) {
+                               return;
+                       }
+                       $d = $s;
+                       for ($y=0; $y<$width; ++$y) {
+                               for ($x=0; $x<$width; ++$x) {
+                                       if ($bitMask[$y][$x] == 1) {
+                                               $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]);
+                                       }
+                                       $b += (int)(ord($d[$y][$x]) & 1);
+                               }
+                       }
+                       return $b;
+               }
+
+               /**
+                * makeMask
+                * @param int $width
+                * @param array $frame
+                * @param int $maskNo
+                * @param int $level
+                * @return array mask
+                */
+                protected function makeMask($width, $frame, $maskNo, $level) {
+                       $masked = array_fill(0, $width, str_repeat("\0", $width));
+                       $this->makeMaskNo($maskNo, $width, $frame, $masked);
+                       $this->writeFormatInformation($width, $masked, $maskNo, $level);
+                       return $masked;
+               }
+
+               /**
+                * calcN1N3
+                * @param int $length
+                * @return int demerit
+                */
+                protected function calcN1N3($length) {
+                       $demerit = 0;
+                       for ($i=0; $i<$length; ++$i) {
+                               if ($this->runLength[$i] >= 5) {
+                                       $demerit += (N1 + ($this->runLength[$i] - 5));
+                               }
+                               if ($i & 1) {
+                                       if (($i >= 3) AND ($i < ($length-2)) AND ($this->runLength[$i] % 3 == 0)) {
+                                               $fact = (int)($this->runLength[$i] / 3);
+                                               if (($this->runLength[$i-2] == $fact)
+                                                       AND ($this->runLength[$i-1] == $fact)
+                                                       AND ($this->runLength[$i+1] == $fact)
+                                                       AND ($this->runLength[$i+2] == $fact)) {
+                                                       if (($this->runLength[$i-3] < 0) OR ($this->runLength[$i-3] >= (4 * $fact))) {
+                                                               $demerit += N3;
+                                                       } elseif ((($i+3) >= $length) OR ($this->runLength[$i+3] >= (4 * $fact))) {
+                                                               $demerit += N3;
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+                       return $demerit;
+               }
+
+               /**
+                * evaluateSymbol
+                * @param int $width
+                * @param array $frame
+                * @return int demerit
+                */
+                protected function evaluateSymbol($width, $frame) {
+                       $head = 0;
+                       $demerit = 0;
+                       for ($y=0; $y<$width; ++$y) {
+                               $head = 0;
+                               $this->runLength[0] = 1;
+                               $frameY = $frame[$y];
+                               if ($y > 0) {
+                                       $frameYM = $frame[$y-1];
+                               }
+                               for ($x=0; $x<$width; ++$x) {
+                                       if (($x > 0) AND ($y > 0)) {
+                                               $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]);
+                                               $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]);
+                                               if (($b22 | ($w22 ^ 1)) & 1) {
+                                                       $demerit += N2;
+                                               }
+                                       }
+                                       if (($x == 0) AND (ord($frameY[$x]) & 1)) {
+                                               $this->runLength[0] = -1;
+                                               $head = 1;
+                                               $this->runLength[$head] = 1;
+                                       } elseif ($x > 0) {
+                                               if ((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) {
+                                                       $head++;
+                                                       $this->runLength[$head] = 1;
+                                               } else {
+                                                       $this->runLength[$head]++;
+                                               }
+                                       }
+                               }
+                               $demerit += $this->calcN1N3($head+1);
+                       }
+                       for ($x=0; $x<$width; ++$x) {
+                               $head = 0;
+                               $this->runLength[0] = 1;
+                               for ($y=0; $y<$width; ++$y) {
+                                       if (($y == 0) AND (ord($frame[$y][$x]) & 1)) {
+                                               $this->runLength[0] = -1;
+                                               $head = 1;
+                                               $this->runLength[$head] = 1;
+                                       } elseif ($y > 0) {
+                                               if ((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) {
+                                                       $head++;
+                                                       $this->runLength[$head] = 1;
+                                               } else {
+                                                       $this->runLength[$head]++;
+                                               }
+                                       }
+                               }
+                               $demerit += $this->calcN1N3($head+1);
+                       }
+                       return $demerit;
+               }
+
+               /**
+                * mask
+                * @param int $width
+                * @param array $frame
+                * @param int $level
+                * @return array best mask
+                */
+                protected function mask($width, $frame, $level) {
+                       $minDemerit = PHP_INT_MAX;
+                       $bestMaskNum = 0;
+                       $bestMask = array();
+                       $checked_masks = array(0, 1, 2, 3, 4, 5, 6, 7);
+                       if (QR_FIND_FROM_RANDOM !== false) {
+                               $howManuOut = 8 - (QR_FIND_FROM_RANDOM % 9);
+                               for ($i = 0; $i <  $howManuOut; ++$i) {
+                                       $remPos = rand (0, count($checked_masks)-1);
+                                       unset($checked_masks[$remPos]);
+                                       $checked_masks = array_values($checked_masks);
+                               }
+                       }
+                       $bestMask = $frame;
+                       foreach ($checked_masks as $i) {
+                               $mask = array_fill(0, $width, str_repeat("\0", $width));
+                               $demerit = 0;
+                               $blacks = 0;
+                               $blacks  = $this->makeMaskNo($i, $width, $frame, $mask);
+                               $blacks += $this->writeFormatInformation($width, $mask, $i, $level);
+                               $blacks  = (int)(100 * $blacks / ($width * $width));
+                               $demerit = (int)((int)(abs($blacks - 50) / 5) * N4);
+                               $demerit += $this->evaluateSymbol($width, $mask);
+                               if ($demerit < $minDemerit) {
+                                       $minDemerit = $demerit;
+                                       $bestMask = $mask;
+                                       $bestMaskNum = $i;
+                               }
+                       }
+                       return $bestMask;
+               }
+
+               // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+               // QRsplit
+
+               /**
+                * Return true if the character at specified position is a number
+                * @param string $str string
+                * @param int $pos characted position
+                * @return boolean true of false
+                */
+                protected function isdigitat($str, $pos) {
+                       if ($pos >= strlen($str)) {
+                               return false;
+                       }
+                       return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9')));
+               }
+
+               /**
+                * Return true if the character at specified position is an alphanumeric character
+                * @param string $str string
+                * @param int $pos characted position
+                * @return boolean true of false
+                */
+                protected function isalnumat($str, $pos) {
+                       if ($pos >= strlen($str)) {
+                               return false;
+                       }
+                       return ($this->lookAnTable(ord($str[$pos])) >= 0);
+               }
+
+               /**
+                * identifyMode
+                * @param int $pos
+                * @return int mode
+                */
+                protected function identifyMode($pos) {
+                       if ($pos >= strlen($this->dataStr)) {
+                               return QR_MODE_NL;
+                       }
+                       $c = $this->dataStr[$pos];
+                       if ($this->isdigitat($this->dataStr, $pos)) {
+                               return QR_MODE_NM;
+                       } elseif ($this->isalnumat($this->dataStr, $pos)) {
+                               return QR_MODE_AN;
+                       } elseif ($this->hint == QR_MODE_KJ) {
+                               if ($pos+1 < strlen($this->dataStr)) {
+                                       $d = $this->dataStr[$pos+1];
+                                       $word = (ord($c) << 8) | ord($d);
+                                       if (($word >= 0x8140 && $word <= 0x9ffc) OR ($word >= 0xe040 && $word <= 0xebbf)) {
+                                               return QR_MODE_KJ;
+                                       }
+                               }
+                       }
+                       return QR_MODE_8B;
+               }
+
+               /**
+                * eatNum
+                * @return int run
+                */
+                protected function eatNum() {
+                       $ln = $this->lengthIndicator(QR_MODE_NM, $this->version);
+                       $p = 0;
+                       while($this->isdigitat($this->dataStr, $p)) {
+                               $p++;
+                       }
+                       $run = $p;
+                       $mode = $this->identifyMode($p);
+                       if ($mode == QR_MODE_8B) {
+                               $dif = $this->estimateBitsModeNum($run) + 4 + $ln
+                               + $this->estimateBitsMode8(1)         // + 4 + l8
+                               - $this->estimateBitsMode8($run + 1); // - 4 - l8
+                               if ($dif > 0) {
+                                       return $this->eat8();
+                               }
+                       }
+                       if ($mode == QR_MODE_AN) {
+                               $dif = $this->estimateBitsModeNum($run) + 4 + $ln
+                               + $this->estimateBitsModeAn(1)        // + 4 + la
+                               - $this->estimateBitsModeAn($run + 1);// - 4 - la
+                               if ($dif > 0) {
+                                       return $this->eatAn();
+                               }
+                       }
+                       $this->items = $this->appendNewInputItem($this->items, QR_MODE_NM, $run, str_split($this->dataStr));
+                       return $run;
+               }
+
+               /**
+                * eatAn
+                * @return int run
+                */
+                protected function eatAn() {
+                       $la = $this->lengthIndicator(QR_MODE_AN,  $this->version);
+                       $ln = $this->lengthIndicator(QR_MODE_NM, $this->version);
+                       $p = 0;
+                       while($this->isalnumat($this->dataStr, $p)) {
+                               if ($this->isdigitat($this->dataStr, $p)) {
+                                       $q = $p;
+                                       while($this->isdigitat($this->dataStr, $q)) {
+                                               $q++;
+                                       }
+                                       $dif = $this->estimateBitsModeAn($p) // + 4 + la
+                                       + $this->estimateBitsModeNum($q - $p) + 4 + $ln
+                                       - $this->estimateBitsModeAn($q); // - 4 - la
+                                       if ($dif < 0) {
+                                               break;
+                                       } else {
+                                               $p = $q;
+                                       }
+                               } else {
+                                       $p++;
+                               }
+                       }
+                       $run = $p;
+                       if (!$this->isalnumat($this->dataStr, $p)) {
+                               $dif = $this->estimateBitsModeAn($run) + 4 + $la
+                               + $this->estimateBitsMode8(1) // + 4 + l8
+                               - $this->estimateBitsMode8($run + 1); // - 4 - l8
+                               if ($dif > 0) {
+                                       return $this->eat8();
+                               }
+                       }
+                       $this->items = $this->appendNewInputItem($this->items, QR_MODE_AN, $run, str_split($this->dataStr));
+                       return $run;
+               }
+
+               /**
+                * eatKanji
+                * @return int run
+                */
+                protected function eatKanji() {
+                       $p = 0;
+                       while($this->identifyMode($p) == QR_MODE_KJ) {
+                               $p += 2;
+                       }
+                       $this->items = $this->appendNewInputItem($this->items, QR_MODE_KJ, $p, str_split($this->dataStr));
+                       return $run;
+               }
+
+               /**
+                * eat8
+                * @return int run
+                */
+                protected function eat8() {
+                       $la = $this->lengthIndicator(QR_MODE_AN, $this->version);
+                       $ln = $this->lengthIndicator(QR_MODE_NM, $this->version);
+                       $p = 1;
+                       $dataStrLen = strlen($this->dataStr);
+                       while($p < $dataStrLen) {
+                               $mode = $this->identifyMode($p);
+                               if ($mode == QR_MODE_KJ) {
+                                       break;
+                               }
+                               if ($mode == QR_MODE_NM) {
+                                       $q = $p;
+                                       while($this->isdigitat($this->dataStr, $q)) {
+                                               $q++;
+                                       }
+                                       $dif = $this->estimateBitsMode8($p) // + 4 + l8
+                                       + $this->estimateBitsModeNum($q - $p) + 4 + $ln
+                                       - $this->estimateBitsMode8($q); // - 4 - l8
+                                       if ($dif < 0) {
+                                               break;
+                                       } else {
+                                               $p = $q;
+                                       }
+                               } elseif ($mode == QR_MODE_AN) {
+                                       $q = $p;
+                                       while($this->isalnumat($this->dataStr, $q)) {
+                                               $q++;
+                                       }
+                                       $dif = $this->estimateBitsMode8($p)  // + 4 + l8
+                                       + $this->estimateBitsModeAn($q - $p) + 4 + $la
+                                       - $this->estimateBitsMode8($q); // - 4 - l8
+                                       if ($dif < 0) {
+                                               break;
+                                       } else {
+                                               $p = $q;
+                                       }
+                               } else {
+                                       $p++;
+                               }
+                       }
+                       $run = $p;
+                       $this->items = $this->appendNewInputItem($this->items, QR_MODE_8B, $run, str_split($this->dataStr));
+                       return $run;
+               }
+
+               /**
+                * splitString
+                */
+                protected function splitString() {
+                       while (strlen($this->dataStr) > 0) {
+                               if ($this->dataStr == '') {
+                                       return 0;
+                               }
+                               $mode = $this->identifyMode(0);
+                               switch ($mode) {
+                                       case QR_MODE_NM: {
+                                               $length = $this->eatNum();
+                                               break;
+                                       }
+                                       case QR_MODE_AN: {
+                                               $length = $this->eatAn();
+                                               break;
+                                       }
+                                       case QR_MODE_KJ: {
+                                               if ($hint == QR_MODE_KJ) {
+                                                       $length = $this->eatKanji();
+                                               } else {
+                                                       $length = $this->eat8();
+                                               }
+                                               break;
+                                       }
+                                       default: {
+                                               $length = $this->eat8();
+                                               break;
+                                       }
+                               }
+                               if ($length == 0) {
+                                       return 0;
+                               }
+                               if ($length < 0) {
+                                       return -1;
+                               }
+                               $this->dataStr = substr($this->dataStr, $length);
+                       }
+               }
+
+               /**
+                * toUpper
+                */
+                protected function toUpper() {
+                       $stringLen = strlen($this->dataStr);
+                       $p = 0;
+                       while ($p < $stringLen) {
+                               $mode = $this->identifyMode(substr($this->dataStr, $p), $this->hint);
+                               if ($mode == QR_MODE_KJ) {
+                                       $p += 2;
+                               } else {
+                                       if ((ord($this->dataStr[$p]) >= ord('a')) AND (ord($this->dataStr[$p]) <= ord('z'))) {
+                                               $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32);
+                                       }
+                                       $p++;
+                               }
+                       }
+                       return $this->dataStr;
+               }
+
+               // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+               // QRinputItem
+
+               /**
+                * newInputItem
+                * @param int $mode
+                * @param int $size
+                * @param array $data
+                * @param array $bstream
+                * @return array input item
+                */
+                protected function newInputItem($mode, $size, $data, $bstream=null) {
+                       $setData = array_slice($data, 0, $size);
+                       if (count($setData) < $size) {
+                               $setData = array_merge($setData, array_fill(0, ($size - count($setData)), 0));
+                       }
+                       if (!$this->check($mode, $size, $setData)) {
+                               return NULL;
+                       }
+                       $inputitem = array();
+                       $inputitem['mode'] = $mode;
+                       $inputitem['size'] = $size;
+                       $inputitem['data'] = $setData;
+                       $inputitem['bstream'] = $bstream;
+                       return $inputitem;
+               }
+
+               /**
+                * encodeModeNum
+                * @param array $inputitem
+                * @param int $version
+                * @return array input item
+                */
+                protected function encodeModeNum($inputitem, $version) {
+                       $words = (int)($inputitem['size'] / 3);
+                       $inputitem['bstream'] = array();
+                       $val = 0x1;
+                       $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val);
+                       $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_NM, $version), $inputitem['size']);
+                       for ($i=0; $i < $words; ++$i) {
+                               $val  = (ord($inputitem['data'][$i*3  ]) - ord('0')) * 100;
+                               $val += (ord($inputitem['data'][$i*3+1]) - ord('0')) * 10;
+                               $val += (ord($inputitem['data'][$i*3+2]) - ord('0'));
+                               $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 10, $val);
+                       }
+                       if ($inputitem['size'] - $words * 3 == 1) {
+                               $val = ord($inputitem['data'][$words*3]) - ord('0');
+                               $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val);
+                       } elseif (($inputitem['size'] - ($words * 3)) == 2) {
+                               $val  = (ord($inputitem['data'][$words*3  ]) - ord('0')) * 10;
+                               $val += (ord($inputitem['data'][$words*3+1]) - ord('0'));
+                               $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 7, $val);
+                       }
+                       return $inputitem;
+               }
+
+               /**
+                * encodeModeAn
+                * @param array $inputitem
+                * @param int $version
+                * @return array input item
+                */
+                protected function encodeModeAn($inputitem, $version) {
+                       $words = (int)($inputitem['size'] / 2);
+                       $inputitem['bstream'] = array();
+                       $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x02);
+                       $inputitem['bstream'] = $this->appendNum(v, $this->lengthIndicator(QR_MODE_AN, $version), $inputitem['size']);
+                       for ($i=0; $i < $words; ++$i) {
+                               $val  = (int)$this->lookAnTable(ord($inputitem['data'][$i*2  ])) * 45;
+                               $val += (int)$this->lookAnTable(ord($inputitem['data'][$i*2+1]));
+                               $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 11, $val);
+                       }
+                       if ($inputitem['size'] & 1) {
+                               $val = $this->lookAnTable(ord($inputitem['data'][($words * 2)]));
+                               $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 6, $val);
+                       }
+                       return $inputitem;
+               }
+
+               /**
+                * encodeMode8
+                * @param array $inputitem
+                * @param int $version
+                * @return array input item
+                */
+                protected function encodeMode8($inputitem, $version) {
+                       $inputitem['bstream'] = array();
+                       $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x4);
+                       $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_8B, $version), $inputitem['size']);
+                       for ($i=0; $i < $inputitem['size']; ++$i) {
+                               $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][$i]));
+                       }
+                       return $inputitem;
+               }
+
+               /**
+                * encodeModeKanji
+                * @param array $inputitem
+                * @param int $version
+                * @return array input item
+                */
+                protected function encodeModeKanji($inputitem, $version) {
+                       $inputitem['bstream'] = array();
+                       $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x8);
+                       $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_KJ, $version), (int)($inputitem['size'] / 2));
+                       for ($i=0; $i<$inputitem['size']; $i+=2) {
+                               $val = (ord($inputitem['data'][$i]) << 8) | ord($inputitem['data'][$i+1]);
+                               if ($val <= 0x9ffc) {
+                                       $val -= 0x8140;
+                               } else {
+                                       $val -= 0xc140;
+                               }
+                               $h = ($val >> 8) * 0xc0;
+                               $val = ($val & 0xff) + $h;
+                               $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 13, $val);
+                       }
+                       return $inputitem;
+               }
+
+               /**
+                * encodeModeStructure
+                * @param array $inputitem
+                * @return array input item
+                */
+                protected function encodeModeStructure($inputitem) {
+                       $inputitem['bstream'] = array();
+                       $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x03);
+                       $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][1]) - 1);
+                       $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][0]) - 1);
+                       $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][2]));
+                       return $inputitem;
+               }
+
+               /**
+                * encodeBitStream
+                * @param array $inputitem
+                * @param int $version
+                * @return array input item
+                */
+                protected function encodeBitStream($inputitem, $version) {
+                       $inputitem['bstream'] = array();
+                       $words = $this->maximumWords($inputitem['mode'], $version);
+                       if ($inputitem['size'] > $words) {
+                               $st1 = $this->newInputItem($inputitem['mode'], $words, $inputitem['data']);
+                               $st2 = $this->newInputItem($inputitem['mode'], $inputitem['size'] - $words, array_slice($inputitem['data'], $words));
+                               $st1 = $this->encodeBitStream($st1, $version);
+                               $st2 = $this->encodeBitStream($st2, $version);
+                               $inputitem['bstream'] = array();
+                               $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st1['bstream']);
+                               $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st2['bstream']);
+                       } else {
+                               switch($inputitem['mode']) {
+                                       case QR_MODE_NM: {
+                                               $inputitem = $this->encodeModeNum($inputitem, $version);
+                                               break;
+                                       }
+                                       case QR_MODE_AN: {
+                                               $inputitem = $this->encodeModeAn($inputitem, $version);
+                                               break;
+                                       }
+                                       case QR_MODE_8B: {
+                                               $inputitem = $this->encodeMode8($inputitem, $version);
+                                               break;
+                                       }
+                                       case QR_MODE_KJ: {
+                                               $inputitem = $this->encodeModeKanji($inputitem, $version);
+                                               break;
+                                       }
+                                       case QR_MODE_ST: {
+                                               $inputitem = $this->encodeModeStructure($inputitem);
+                                               break;
+                                       }
+                                       default: {
+                                               break;
+                                       }
+                               }
+                       }
+                       return $inputitem;
+               }
+
+               // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+               // QRinput
+
+               /**
+                * Append data to an input object.
+                * The data is copied and appended to the input object.
+                * @param array items input items
+                * @param int $mode encoding mode.
+                * @param int $size size of data (byte).
+                * @param array $data array of input data.
+                * @return items
+                *
+                */
+               protected function appendNewInputItem($items, $mode, $size, $data) {
+                       $items[] = $this->newInputItem($mode, $size, $data);
+                       return $items;
+               }
+
+               /**
+                * insertStructuredAppendHeader
+                * @param array $items
+                * @param int $size
+                * @param int $index
+                * @param int $parity
+                * @return array items
+                */
+                protected function insertStructuredAppendHeader($items, $size, $index, $parity) {
+                       if ($size > MAX_STRUCTURED_SYMBOLS) {
+                               return -1;
+                       }
+                       if (($index <= 0) OR ($index > MAX_STRUCTURED_SYMBOLS)) {
+                               return -1;
+                       }
+                       $buf = array($size, $index, $parity);
+                       $entry = $this->newInputItem(QR_MODE_ST, 3, buf);
+                       array_unshift($items, $entry);
+                       return $items;
+               }
+
+               /**
+                * calcParity
+                * @param array $items
+                * @return int parity
+                */
+                protected function calcParity($items) {
+                       $parity = 0;
+                       foreach ($items as $item) {
+                               if ($item['mode'] != QR_MODE_ST) {
+                                       for ($i=$item['size']-1; $i>=0; --$i) {
+                                               $parity ^= $item['data'][$i];
+                                       }
+                               }
+                       }
+                       return $parity;
+               }
+
+               /**
+                * checkModeNum
+                * @param int $size
+                * @param array $data
+                * @return boolean true or false
+                */
+                protected function checkModeNum($size, $data) {
+                       for ($i=0; $i<$size; ++$i) {
+                               if ((ord($data[$i]) < ord('0')) OR (ord($data[$i]) > ord('9'))){
+                                       return false;
+                               }
+                       }
+                       return true;
+               }
+
+               /**
+                * estimateBitsModeNum
+                * @param int $size
+                * @return int number of bits
+                */
+                protected function estimateBitsModeNum($size) {
+                       $w = (int)$size / 3;
+                       $bits = $w * 10;
+                       switch($size - $w * 3) {
+                               case 1: {
+                                       $bits += 4;
+                                       break;
+                               }
+                               case 2: {
+                                       $bits += 7;
+                                       break;
+                               }
+                               default: {
+                                       break;
+                               }
+                       }
+                       return $bits;
+               }
+
+               /**
+                * Look up the alphabet-numeric convesion table (see JIS X0510:2004, pp.19).
+                * @param int $c character value
+                * @return value
+                */
+               protected function lookAnTable($c) {
+                       return (($c > 127)?-1:$this->anTable[$c]);
+               }
+
+               /**
+                * checkModeAn
+                * @param int $size
+                * @param array $data
+                * @return boolean true or false
+                */
+                protected function checkModeAn($size, $data) {
+                       for ($i=0; $i<$size; ++$i) {
+                               if ($this->lookAnTable(ord($data[$i])) == -1) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               }
+
+               /**
+                * estimateBitsModeAn
+                * @param int $size
+                * @return int number of bits
+                */
+                protected function estimateBitsModeAn($size) {
+                       $w = (int)($size / 2);
+                       $bits = $w * 11;
+                       if ($size & 1) {
+                               $bits += 6;
+                       }
+                       return $bits;
+               }
+
+               /**
+                * estimateBitsMode8
+                * @param int $size
+                * @return int number of bits
+                */
+                protected function estimateBitsMode8($size) {
+                       return $size * 8;
+               }
+
+               /**
+                * estimateBitsModeKanji
+                * @param int $size
+                * @return int number of bits
+                */
+                protected function estimateBitsModeKanji($size) {
+                       return (int)(($size / 2) * 13);
+               }
+
+               /**
+                * checkModeKanji
+                * @param int $size
+                * @param array $data
+                * @return boolean true or false
+                */
+                protected function checkModeKanji($size, $data) {
+                       if ($size & 1) {
+                               return false;
+                       }
+                       for ($i=0; $i<$size; $i+=2) {
+                               $val = (ord($data[$i]) << 8) | ord($data[$i+1]);
+                               if (($val < 0x8140) OR (($val > 0x9ffc) AND ($val < 0xe040)) OR ($val > 0xebbf)) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               }
+
+               /**
+                * Validate the input data.
+                * @param int $mode encoding mode.
+                * @param int $size size of data (byte).
+                * @param array data data to validate
+                * @return boolean true in case of valid data, false otherwise
+                */
+               protected function check($mode, $size, $data) {
+                       if ($size <= 0) {
+                               return false;
+                       }
+                       switch($mode) {
+                               case QR_MODE_NM: {
+                                       return $this->checkModeNum($size, $data);
+                               }
+                               case QR_MODE_AN: {
+                                       return $this->checkModeAn($size, $data);
+                               }
+                               case QR_MODE_KJ: {
+                                       return $this->checkModeKanji($size, $data);
+                               }
+                               case QR_MODE_8B: {
+                                       return true;
+                               }
+                               case QR_MODE_ST: {
+                                       return true;
+                               }
+                               default: {
+                                       break;
+                               }
+                       }
+                       return false;
+               }
+
+               /**
+                * estimateBitStreamSize
+                * @param array $items
+                * @param int $version
+                * @return int bits
+                */
+                protected function estimateBitStreamSize($items, $version) {
+                       $bits = 0;
+                       if ($version == 0) {
+                               $version = 1;
+                       }
+                       foreach ($items as $item) {
+                               switch($item['mode']) {
+                                       case QR_MODE_NM: {
+                                               $bits = $this->estimateBitsModeNum($item['size']);
+                                               break;
+                                       }
+                                       case QR_MODE_AN: {
+                                               $bits = $this->estimateBitsModeAn($item['size']);
+                                               break;
+                                       }
+                                       case QR_MODE_8B: {
+                                               $bits = $this->estimateBitsMode8($item['size']);
+                                               break;
+                                       }
+                                       case QR_MODE_KJ: {
+                                               $bits = $this->estimateBitsModeKanji($item['size']);
+                                               break;
+                                       }
+                                       case QR_MODE_ST: {
+                                               return STRUCTURE_HEADER_BITS;
+                                       }
+                                       default: {
+                                               return 0;
+                                       }
+                               }
+                               $l = $this->lengthIndicator($item['mode'], $version);
+                               $m = 1 << $l;
+                               $num = (int)(($item['size'] + $m - 1) / $m);
+                               $bits += $num * (4 + $l);
+                       }
+                       return $bits;
+               }
+
+               /**
+                * estimateVersion
+                * @param array $items
+                * @return int version
+                */
+                protected function estimateVersion($items) {
+                       $version = 0;
+                       $prev = 0;
+                       do {
+                               $prev = $version;
+                               $bits = $this->estimateBitStreamSize($items, $prev);
+                               $version = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level);
+                               if ($version < 0) {
+                                       return -1;
+                               }
+                       } while ($version > $prev);
+                       return $version;
+               }
+
+               /**
+                * lengthOfCode
+                * @param int $mode
+                * @param int $version
+                * @param int $bits
+                * @return int size
+                */
+                protected function lengthOfCode($mode, $version, $bits) {
+                       $payload = $bits - 4 - $this->lengthIndicator($mode, $version);
+                       switch($mode) {
+                               case QR_MODE_NM: {
+                                       $chunks = (int)($payload / 10);
+                                       $remain = $payload - $chunks * 10;
+                                       $size = $chunks * 3;
+                                       if ($remain >= 7) {
+                                               $size += 2;
+                                       } elseif ($remain >= 4) {
+                                               $size += 1;
+                                       }
+                                       break;
+                               }
+                               case QR_MODE_AN: {
+                                       $chunks = (int)($payload / 11);
+                                       $remain = $payload - $chunks * 11;
+                                       $size = $chunks * 2;
+                                       if ($remain >= 6) {
+                                               ++$size;
+                                       }
+                                       break;
+                               }
+                               case QR_MODE_8B: {
+                                       $size = (int)($payload / 8);
+                                       break;
+                               }
+                               case QR_MODE_KJ: {
+                                       $size = (int)(($payload / 13) * 2);
+                                       break;
+                               }
+                               case QR_MODE_ST: {
+                                       $size = (int)($payload / 8);
+                                       break;
+                               }
+                               default: {
+                                       $size = 0;
+                                       break;
+                               }
+                       }
+                       $maxsize = $this->maximumWords($mode, $version);
+                       if ($size < 0) {
+                               $size = 0;
+                       }
+                       if ($size > $maxsize) {
+                               $size = $maxsize;
+                       }
+                       return $size;
+               }
+
+               /**
+                * createBitStream
+                * @param array $items
+                * @return array of items and total bits
+                */
+                protected function createBitStream($items) {
+                       $total = 0;
+                       foreach ($items as $key => $item) {
+                               $items[$key] = $this->encodeBitStream($item, $this->version);
+                               $bits = count($items[$key]['bstream']);
+                               $total += $bits;
+                       }
+                       return array($items, $total);
+               }
+
+               /**
+                * convertData
+                * @param array $items
+                * @return array items
+                */
+                protected function convertData($items) {
+                       $ver = $this->estimateVersion($items);
+                       if ($ver > $this->version) {
+                               $this->version = $ver;
+                       }
+                       for (;;) {
+                               $cbs = $this->createBitStream($items);
+                               $items = $cbs[0];
+                               $bits = $cbs[1];
+                               if ($bits < 0) {
+                                       return -1;
+                               }
+                               $ver = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level);
+                               if ($ver < 0) {
+                                       return -1;
+                               } elseif ($ver > $this->version) {
+                                       $this->version = $ver;
+                               } else {
+                                       break;
+                               }
+                       }
+                       return $items;
+               }
+
+               /**
+                * Append Padding Bit to bitstream
+                * @param array $bstream
+                * @return array bitstream
+                */
+                protected function appendPaddingBit($bstream) {
+                       $bits = count($bstream);
+                       $maxwords = $this->getDataLength($this->version, $this->level);
+                       $maxbits = $maxwords * 8;
+                       if ($maxbits == $bits) {
+                               return 0;
+                       }
+                       if ($maxbits - $bits < 5) {
+                               return $this->appendNum($bstream, $maxbits - $bits, 0);
+                       }
+                       $bits += 4;
+                       $words = (int)(($bits + 7) / 8);
+                       $padding = array();
+                       $padding = $this->appendNum($padding, $words * 8 - $bits + 4, 0);
+                       $padlen = $maxwords - $words;
+                       if ($padlen > 0) {
+                               $padbuf = array();
+                               for ($i=0; $i<$padlen; ++$i) {
+                                       $padbuf[$i] = ($i&1)?0x11:0xec;
+                               }
+                               $padding = $this->appendBytes($padding, $padlen, $padbuf);
+                       }
+                       return $this->appendBitstream($bstream, $padding);
+               }
+
+               /**
+                * mergeBitStream
+                * @param array $bstream
+                * @return array bitstream
+                */
+                protected function mergeBitStream($items) {
+                       $items = $this->convertData($items);
+                       $bstream = array();
+                       foreach ($items as $item) {
+                               $bstream = $this->appendBitstream($bstream, $item['bstream']);
+                       }
+                       return $bstream;
+               }
+
+               /**
+                * Returns a stream of bits.
+                * @param int $items
+                * @return array padded merged byte stream
+                */
+               protected function getBitStream($items) {
+                       $bstream = $this->mergeBitStream($items);
+                       return $this->appendPaddingBit($bstream);
+               }
+
+               /**
+                * Pack all bit streams padding bits into a byte array.
+                * @param int $items
+                * @return array padded merged byte stream
+                */
+               protected function getByteStream($items) {
+                       $bstream = $this->getBitStream($items);
+                       return $this->bitstreamToByte($bstream);
+               }
+
+               // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+               // QRbitstream
+
+               /**
+                * Return an array with zeros
+                * @param int $setLength array size
+                * @return array
+                */
+                protected function allocate($setLength) {
+                       return array_fill(0, $setLength, 0);
+               }
+
+               /**
+                * Return new bitstream from number
+                * @param int $bits number of bits
+                * @param int $num number
+                * @return array bitstream
+                */
+                protected function newFromNum($bits, $num) {
+                       $bstream = $this->allocate($bits);
+                       $mask = 1 << ($bits - 1);
+                       for ($i=0; $i<$bits; ++$i) {
+                               if ($num & $mask) {
+                                       $bstream[$i] = 1;
+                               } else {
+                                       $bstream[$i] = 0;
+                               }
+                               $mask = $mask >> 1;
+                       }
+                       return $bstream;
+               }
+
+               /**
+                * Return new bitstream from bytes
+                * @param int $size size
+                * @param array $data bytes
+                * @return array bitstream
+                */
+                protected function newFromBytes($size, $data) {
+                       $bstream = $this->allocate($size * 8);
+                       $p=0;
+                       for ($i=0; $i<$size; ++$i) {
+                               $mask = 0x80;
+                               for ($j=0; $j<8; ++$j) {
+                                       if ($data[$i] & $mask) {
+                                               $bstream[$p] = 1;
+                                       } else {
+                                               $bstream[$p] = 0;
+                                       }
+                                       $p++;
+                                       $mask = $mask >> 1;
+                               }
+                       }
+                       return $bstream;
+               }
+
+               /**
+                * Append one bitstream to another
+                * @param array $bitstream original bitstream
+                * @param array $append bitstream to append
+                * @return array bitstream
+                */
+                protected function appendBitstream($bitstream, $append) {
+                       if ((!is_array($append)) OR (count($append) == 0)) {
+                               return $bitstream;
+                       }
+                       if (count($bitstream) == 0) {
+                               return $append;
+                       }
+                       return array_values(array_merge($bitstream, $append));
+               }
+
+               /**
+                * Append one bitstream created from number to another
+                * @param array $bitstream original bitstream
+                * @param int $bits number of bits
+                * @param int $num number
+                * @return array bitstream
+                */
+                protected function appendNum($bitstream, $bits, $num) {
+                       if ($bits == 0) {
+                               return 0;
+                       }
+                       $b = $this->newFromNum($bits, $num);
+                       return $this->appendBitstream($bitstream, $b);
+               }
+
+               /**
+                * Append one bitstream created from bytes to another
+                * @param array $bitstream original bitstream
+                * @param int $size size
+                * @param array $data bytes
+                * @return array bitstream
+                */
+                protected function appendBytes($bitstream, $size, $data) {
+                       if ($size == 0) {
+                               return 0;
+                       }
+                       $b = $this->newFromBytes($size, $data);
+                       return $this->appendBitstream($bitstream, $b);
+               }
+
+               /**
+                * Convert bitstream to bytes
+                * @param array $bitstream original bitstream
+                * @return array of bytes
+                */
+                protected function bitstreamToByte($bstream) {
+                       $size = count($bstream);
+                       if ($size == 0) {
+                               return array();
+                       }
+                       $data = array_fill(0, (int)(($size + 7) / 8), 0);
+                       $bytes = (int)($size / 8);
+                       $p = 0;
+                       for ($i=0; $i<$bytes; $i++) {
+                               $v = 0;
+                               for ($j=0; $j<8; $j++) {
+                                       $v = $v << 1;
+                                       $v |= $bstream[$p];
+                                       $p++;
+                               }
+                               $data[$i] = $v;
+                       }
+                       if ($size & 7) {
+                               $v = 0;
+                               for ($j=0; $j<($size & 7); $j++) {
+                                       $v = $v << 1;
+                                       $v |= $bstream[$p];
+                                       $p++;
+                               }
+                               $data[$bytes] = $v;
+                       }
+                       return $data;
+               }
+
+               // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+               // QRspec
+
+               /**
+                * Replace a value on the array at the specified position
+                * @param array $srctab
+                * @param int $x X position
+                * @param int $y Y position
+                * @param string $repl value to replace
+                * @param int $replLen length of the repl string
+                * @return array srctab
+                */
+                protected function qrstrset($srctab, $x, $y, $repl, $replLen=false) {
+                       $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl));
+                       return $srctab;
+               }
+
+               /**
+                * Return maximum data code length (bytes) for the version.
+                * @param int $version version
+                * @param int $level error correction level
+                * @return int maximum size (bytes)
+                */
+               protected function getDataLength($version, $level) {
+                       return $this->capacity[$version][QRCAP_WORDS] - $this->capacity[$version][QRCAP_EC][$level];
+               }
+
+               /**
+                * Return maximum error correction code length (bytes) for the version.
+                * @param int $version version
+                * @param int $level error correction level
+                * @return int ECC size (bytes)
+                */
+               protected function getECCLength($version, $level){
+                       return $this->capacity[$version][QRCAP_EC][$level];
+               }
+
+               /**
+                * Return the width of the symbol for the version.
+                * @param int $version version
+                * @return int width
+                */
+               protected function getWidth($version) {
+                       return $this->capacity[$version][QRCAP_WIDTH];
+               }
+
+               /**
+                * Return the numer of remainder bits.
+                * @param int $version version
+                * @return int number of remainder bits
+                */
+               protected function getRemainder($version) {
+                       return $this->capacity[$version][QRCAP_REMINDER];
+               }
+
+               /**
+                * Return a version number that satisfies the input code length.
+                * @param int $size input code length (byte)
+                * @param int $level error correction level
+                * @return int version number
+                */
+               protected function getMinimumVersion($size, $level) {
+                       for ($i=1; $i <= QRSPEC_VERSION_MAX; ++$i) {
+                               $words  = $this->capacity[$i][QRCAP_WORDS] - $this->capacity[$i][QRCAP_EC][$level];
+                               if ($words >= $size) {
+                                       return $i;
+                               }
+                       }
+                       return -1;
+               }
+
+               /**
+                * Return the size of length indicator for the mode and version.
+                * @param int $mode encoding mode
+                * @param int $version version
+                * @return int the size of the appropriate length indicator (bits).
+                */
+               protected function lengthIndicator($mode, $version) {
+                       if ($mode == QR_MODE_ST) {
+                               return 0;
+                       }
+                       if ($version <= 9) {
+                               $l = 0;
+                       } elseif ($version <= 26) {
+                               $l = 1;
+                       } else {
+                               $l = 2;
+                       }
+                       return $this->lengthTableBits[$mode][$l];
+               }
+
+               /**
+                * Return the maximum length for the mode and version.
+                * @param int $mode encoding mode
+                * @param int $version version
+                * @return int the maximum length (bytes)
+                */
+               protected function maximumWords($mode, $version) {
+                       if ($mode == QR_MODE_ST) {
+                               return 3;
+                       }
+                       if ($version <= 9) {
+                               $l = 0;
+                       } else if ($version <= 26) {
+                               $l = 1;
+                       } else {
+                               $l = 2;
+                       }
+                       $bits = $this->lengthTableBits[$mode][$l];
+                       $words = (1 << $bits) - 1;
+                       if ($mode == QR_MODE_KJ) {
+                               $words *= 2; // the number of bytes is required
+                       }
+                       return $words;
+               }
+
+               /**
+                * Return an array of ECC specification.
+                * @param int $version version
+                * @param int $level error correction level
+                * @param array $spec an array of ECC specification contains as following: {# of type1 blocks, # of data code, # of ecc code, # of type2 blocks, # of data code}
+                * @return array spec
+                */
+               protected function getEccSpec($version, $level, $spec) {
+                       if (count($spec) < 5) {
+                               $spec = array(0, 0, 0, 0, 0);
+                       }
+                       $b1 = $this->eccTable[$version][$level][0];
+                       $b2 = $this->eccTable[$version][$level][1];
+                       $data = $this->getDataLength($version, $level);
+                       $ecc = $this->getECCLength($version, $level);
+                       if ($b2 == 0) {
+                               $spec[0] = $b1;
+                               $spec[1] = (int)($data / $b1);
+                               $spec[2] = (int)($ecc / $b1);
+                               $spec[3] = 0;
+                               $spec[4] = 0;
+                       } else {
+                               $spec[0] = $b1;
+                               $spec[1] = (int)($data / ($b1 + $b2));
+                               $spec[2] = (int)($ecc  / ($b1 + $b2));
+                               $spec[3] = $b2;
+                               $spec[4] = $spec[1] + 1;
+                       }
+                       return $spec;
+               }
+
+               /**
+                * Put an alignment marker.
+                * @param array $frame frame
+                * @param int $width width
+                * @param int $ox X center coordinate of the pattern
+                * @param int $oy Y center coordinate of the pattern
+                * @return array frame
+                */
+               protected function putAlignmentMarker($frame, $ox, $oy) {
+                       $finder = array(
+                               "\xa1\xa1\xa1\xa1\xa1",
+                               "\xa1\xa0\xa0\xa0\xa1",
+                               "\xa1\xa0\xa1\xa0\xa1",
+                               "\xa1\xa0\xa0\xa0\xa1",
+                               "\xa1\xa1\xa1\xa1\xa1"
+                               );
+                       $yStart = $oy - 2;
+                       $xStart = $ox - 2;
+                       for ($y=0; $y < 5; $y++) {
+                               $frame = $this->qrstrset($frame, $xStart, $yStart+$y, $finder[$y]);
+                       }
+                       return $frame;
+               }
+
+               /**
+                * Put an alignment pattern.
+                * @param int $version version
+                * @param array $fram frame
+                * @param int $width width
+                * @return array frame
+                */
+                protected function putAlignmentPattern($version, $frame, $width) {
+                       if ($version < 2) {
+                               return $frame;
+                       }
+                       $d = $this->alignmentPattern[$version][1] - $this->alignmentPattern[$version][0];
+                       if ($d < 0) {
+                               $w = 2;
+                       } else {
+                               $w = (int)(($width - $this->alignmentPattern[$version][0]) / $d + 2);
+                       }
+                       if ($w * $w - 3 == 1) {
+                               $x = $this->alignmentPattern[$version][0];
+                               $y = $this->alignmentPattern[$version][0];
+                               $frame = $this->putAlignmentMarker($frame, $x, $y);
+                               return $frame;
+                       }
+                       $cx = $this->alignmentPattern[$version][0];
+                       $wo = $w - 1;
+                       for ($x=1; $x < $wo; ++$x) {
+                               $frame = $this->putAlignmentMarker($frame, 6, $cx);
+                               $frame = $this->putAlignmentMarker($frame, $cx,  6);
+                               $cx += $d;
+                       }
+                       $cy = $this->alignmentPattern[$version][0];
+                       for ($y=0; $y < $wo; ++$y) {
+                               $cx = $this->alignmentPattern[$version][0];
+                               for ($x=0; $x < $wo; ++$x) {
+                                       $frame = $this->putAlignmentMarker($frame, $cx, $cy);
+                                       $cx += $d;
+                               }
+                               $cy += $d;
+                       }
+                       return $frame;
+               }
+
+               /**
+                * Return BCH encoded version information pattern that is used for the symbol of version 7 or greater. Use lower 18 bits.
+                * @param int $version version
+                * @return BCH encoded version information pattern
+                */
+               protected function getVersionPattern($version) {
+                       if (($version < 7) OR ($version > QRSPEC_VERSION_MAX)) {
+                               return 0;
+                       }
+                       return $this->versionPattern[($version - 7)];
+               }
+
+               /**
+                * Return BCH encoded format information pattern.
+                * @param array $mask
+                * @param int $level error correction level
+                * @return BCH encoded format information pattern
+                */
+               protected function getFormatInfo($mask, $level) {
+                       if (($mask < 0) OR ($mask > 7)) {
+                               return 0;
+                       }
+                       if (($level < 0) OR ($level > 3)) {
+                               return 0;
+                       }
+                       return $this->formatInfo[$level][$mask];
+               }
+
+               /**
+                * Put a finder pattern.
+                * @param array $frame frame
+                * @param int $width width
+                * @param int $ox X center coordinate of the pattern
+                * @param int $oy Y center coordinate of the pattern
+                * @return array frame
+                */
+               protected function putFinderPattern($frame, $ox, $oy) {
+                       $finder = array(
+                       "\xc1\xc1\xc1\xc1\xc1\xc1\xc1",
+                       "\xc1\xc0\xc0\xc0\xc0\xc0\xc1",
+                       "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
+                       "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
+                       "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
+                       "\xc1\xc0\xc0\xc0\xc0\xc0\xc1",
+                       "\xc1\xc1\xc1\xc1\xc1\xc1\xc1"
+                       );
+                       for ($y=0; $y < 7; $y++) {
+                               $frame = $this->qrstrset($frame, $ox, ($oy + $y), $finder[$y]);
+                       }
+                       return $frame;
+               }
+
+               /**
+                * Return a copy of initialized frame.
+                * @param int $version version
+                * @return Array of unsigned char.
+                */
+               protected function createFrame($version) {
+                       $width = $this->capacity[$version][QRCAP_WIDTH];
+                       $frameLine = str_repeat ("\0", $width);
+                       $frame = array_fill(0, $width, $frameLine);
+                       // Finder pattern
+                       $frame = $this->putFinderPattern($frame, 0, 0);
+                       $frame = $this->putFinderPattern($frame, $width - 7, 0);
+                       $frame = $this->putFinderPattern($frame, 0, $width - 7);
+                       // Separator
+                       $yOffset = $width - 7;
+                       for ($y=0; $y < 7; ++$y) {
+                               $frame[$y][7] = "\xc0";
+                               $frame[$y][$width - 8] = "\xc0";
+                               $frame[$yOffset][7] = "\xc0";
+                               ++$yOffset;
+                       }
+                       $setPattern = str_repeat("\xc0", 8);
+                       $frame = $this->qrstrset($frame, 0, 7, $setPattern);
+                       $frame = $this->qrstrset($frame, $width-8, 7, $setPattern);
+                       $frame = $this->qrstrset($frame, 0, $width - 8, $setPattern);
+                       // Format info
+                       $setPattern = str_repeat("\x84", 9);
+                       $frame = $this->qrstrset($frame, 0, 8, $setPattern);
+                       $frame = $this->qrstrset($frame, $width - 8, 8, $setPattern, 8);
+                       $yOffset = $width - 8;
+                       for ($y=0; $y < 8; ++$y,++$yOffset) {
+                               $frame[$y][8] = "\x84";
+                               $frame[$yOffset][8] = "\x84";
+                       }
+                       // Timing pattern
+                       $wo = $width - 15;
+                       for ($i=1; $i < $wo; ++$i) {
+                               $frame[6][7+$i] = chr(0x90 | ($i & 1));
+                               $frame[7+$i][6] = chr(0x90 | ($i & 1));
+                       }
+                       // Alignment pattern
+                       $frame = $this->putAlignmentPattern($version, $frame, $width);
+                       // Version information
+                       if ($version >= 7) {
+                               $vinf = $this->getVersionPattern($version);
+                               $v = $vinf;
+                               for ($x=0; $x<6; ++$x) {
+                                       for ($y=0; $y<3; ++$y) {
+                                               $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1));
+                                               $v = $v >> 1;
+                                       }
+                               }
+                               $v = $vinf;
+                               for ($y=0; $y<6; ++$y) {
+                                       for ($x=0; $x<3; ++$x) {
+                                               $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1));
+                                               $v = $v >> 1;
+                                       }
+                               }
+                       }
+                       // and a little bit...
+                       $frame[$width - 8][8] = "\x81";
+                       return $frame;
+               }
+
+               /**
+                * Set new frame for the specified version.
+                * @param int $version version
+                * @return Array of unsigned char.
+                */
+               protected function newFrame($version) {
+                       if (($version < 1) OR ($version > QRSPEC_VERSION_MAX)) {
+                               return NULL;
+                       }
+                       if (!isset($this->frames[$version])) {
+                               $this->frames[$version] = $this->createFrame($version);
+                       }
+                       if (is_null($this->frames[$version])) {
+                               return NULL;
+                       }
+                       return $this->frames[$version];
+               }
+
+               /**
+                * Return block number 0
+                * @param array $spec
+                * @return int value
+                */
+                protected function rsBlockNum($spec) {
+                       return ($spec[0] + $spec[3]);
+               }
+
+               /**
+               * Return block number 1
+                * @param array $spec
+                * @return int value
+                */
+                protected function rsBlockNum1($spec) {
+                       return $spec[0];
+               }
+
+               /**
+                * Return data codes 1
+                * @param array $spec
+                * @return int value
+                */
+                protected function rsDataCodes1($spec) {
+                       return $spec[1];
+               }
+
+               /**
+                * Return ecc codes 1
+                * @param array $spec
+                * @return int value
+                */
+                protected function rsEccCodes1($spec) {
+                       return $spec[2];
+               }
+
+               /**
+                * Return block number 2
+                * @param array $spec
+                * @return int value
+                */
+                protected function rsBlockNum2($spec) {
+                       return $spec[3];
+               }
+
+               /**
+                * Return data codes 2
+                * @param array $spec
+                * @return int value
+                */
+                protected function rsDataCodes2($spec) {
+                       return $spec[4];
+               }
+
+               /**
+                * Return ecc codes 2
+                * @param array $spec
+                * @return int value
+                */
+                protected function rsEccCodes2($spec) {
+                       return $spec[2];
+               }
+
+               /**
+                * Return data length
+                * @param array $spec
+                * @return int value
+                */
+                protected function rsDataLength($spec) {
+                       return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]);
+               }
+
+               /**
+                * Return ecc length
+                * @param array $spec
+                * @return int value
+                */
+                protected function rsEccLength($spec) {
+                       return ($spec[0] + $spec[3]) * $spec[2];
+               }
+
+               // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+               // QRrs
+
+               /**
+                * Initialize a Reed-Solomon codec and add it to existing rsitems
+                * @param int $symsize symbol size, bits
+                * @param int $gfpoly  Field generator polynomial coefficients
+                * @param int $fcr  first root of RS code generator polynomial, index form
+                * @param int $prim  primitive element to generate polynomial roots
+                * @param int $nroots RS code generator polynomial degree (number of roots)
+                * @param int $pad  padding bytes at front of shortened block
+                * @return array Array of RS values:<ul><li>mm = Bits per symbol;</li><li>nn = Symbols per block;</li><li>alpha_to = log lookup table array;</li><li>index_of = Antilog lookup table array;</li><li>genpoly = Generator polynomial array;</li><li>nroots = Number of generator;</li><li>roots = number of parity symbols;</li><li>fcr = First consecutive root, index form;</li><li>prim = Primitive element, index form;</li><li>iprim = prim-th root of 1, index form;</li><li>pad = Padding bytes in shortened block;</li><li>gfpoly</ul>.
+                */
+                protected function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) {
+                       foreach ($this->rsitems as $rs) {
+                               if (($rs['pad'] != $pad) OR ($rs['nroots'] != $nroots) OR ($rs['mm'] != $symsize)
+                                       OR ($rs['gfpoly'] != $gfpoly) OR ($rs['fcr'] != $fcr) OR ($rs['prim'] != $prim)) {
+                                       continue;
+                               }
+                               return $rs;
+                       }
+                       $rs = $this->init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad);
+                       array_unshift($this->rsitems, $rs);
+                       return $rs;
+               }
+
+               // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+               // QRrsItem
+
+               /**
+                * modnn
+                * @param array RS values
+                * @param int $x X position
+                * @return int X osition
+                */
+                protected function modnn($rs, $x) {
+                       while ($x >= $rs['nn']) {
+                               $x -= $rs['nn'];
+                               $x = ($x >> $rs['mm']) + ($x & $rs['nn']);
+                       }
+                       return $x;
+               }
+
+               /**
+                * Initialize a Reed-Solomon codec and returns an array of values.
+                * @param int $symsize symbol size, bits
+                * @param int $gfpoly  Field generator polynomial coefficients
+                * @param int $fcr  first root of RS code generator polynomial, index form
+                * @param int $prim  primitive element to generate polynomial roots
+                * @param int $nroots RS code generator polynomial degree (number of roots)
+                * @param int $pad  padding bytes at front of shortened block
+                * @return array Array of RS values:<ul><li>mm = Bits per symbol;</li><li>nn = Symbols per block;</li><li>alpha_to = log lookup table array;</li><li>index_of = Antilog lookup table array;</li><li>genpoly = Generator polynomial array;</li><li>nroots = Number of generator;</li><li>roots = number of parity symbols;</li><li>fcr = First consecutive root, index form;</li><li>prim = Primitive element, index form;</li><li>iprim = prim-th root of 1, index form;</li><li>pad = Padding bytes in shortened block;</li><li>gfpoly</ul>.
+                */
+               protected function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) {
+                       // Based on Reed solomon encoder by Phil Karn, KA9Q (GNU-LGPLv2)
+                       $rs = null;
+                       // Check parameter ranges
+                       if (($symsize < 0) OR ($symsize > 8)) {
+                               return $rs;
+                       }
+                       if (($fcr < 0) OR ($fcr >= (1<<$symsize))) {
+                               return $rs;
+                       }
+                       if (($prim <= 0) OR ($prim >= (1<<$symsize))) {
+                               return $rs;
+                       }
+                       if (($nroots < 0) OR ($nroots >= (1<<$symsize))) {
+                               return $rs;
+                       }
+                       if (($pad < 0) OR ($pad >= ((1<<$symsize) -1 - $nroots))) {
+                               return $rs;
+                       }
+                       $rs = array();
+                       $rs['mm'] = $symsize;
+                       $rs['nn'] = (1 << $symsize) - 1;
+                       $rs['pad'] = $pad;
+                       $rs['alpha_to'] = array_fill(0, ($rs['nn'] + 1), 0);
+                       $rs['index_of'] = array_fill(0, ($rs['nn'] + 1), 0);
+                       // PHP style macro replacement ;)
+                       $NN =& $rs['nn'];
+                       $A0 =& $NN;
+                       // Generate Galois field lookup tables
+                       $rs['index_of'][0] = $A0; // log(zero) = -inf
+                       $rs['alpha_to'][$A0] = 0; // alpha**-inf = 0
+                       $sr = 1;
+                       for ($i=0; $i<$rs['nn']; ++$i) {
+                               $rs['index_of'][$sr] = $i;
+                               $rs['alpha_to'][$i] = $sr;
+                               $sr <<= 1;
+                               if ($sr & (1 << $symsize)) {
+                                       $sr ^= $gfpoly;
+                               }
+                               $sr &= $rs['nn'];
+                       }
+                       if ($sr != 1) {
+                               // field generator polynomial is not primitive!
+                               return NULL;
+                       }
+                       // Form RS code generator polynomial from its roots
+                       $rs['genpoly'] = array_fill(0, ($nroots + 1), 0);
+                       $rs['fcr'] = $fcr;
+                       $rs['prim'] = $prim;
+                       $rs['nroots'] = $nroots;
+                       $rs['gfpoly'] = $gfpoly;
+                       // Find prim-th root of 1, used in decoding
+                       for ($iprim=1; ($iprim % $prim) != 0; $iprim += $rs['nn']) {
+                               ; // intentional empty-body loop!
+                       }
+                       $rs['iprim'] = (int)($iprim / $prim);
+                       $rs['genpoly'][0] = 1;
+
+
+                       for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) {
+                               $rs['genpoly'][$i+1] = 1;
+                               // Multiply rs->genpoly[] by  @**(root + x)
+                               for ($j = $i; $j > 0; --$j) {
+                                       if ($rs['genpoly'][$j] != 0) {
+                                               $rs['genpoly'][$j] = $rs['genpoly'][$j-1] ^ $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][$j]] + $root)];
+                                       } else {
+                                               $rs['genpoly'][$j] = $rs['genpoly'][$j-1];
+                                       }
+                               }
+                               // rs->genpoly[0] can never be zero
+                               $rs['genpoly'][0] = $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][0]] + $root)];
+                       }
+                       // convert rs->genpoly[] to index form for quicker encoding
+                       for ($i = 0; $i <= $nroots; ++$i) {
+                               $rs['genpoly'][$i] = $rs['index_of'][$rs['genpoly'][$i]];
+                       }
+                       return $rs;
+               }
+
+               /**
+                * Encode a Reed-Solomon codec and returns the parity array
+                * @param array $rs RS values
+                * @param array $data data
+                * @param array $parity parity
+                * @return parity array
+                */
+                protected function encode_rs_char($rs, $data, $parity) {
+                       $MM       =& $rs['mm']; // bits per symbol
+                       $NN       =& $rs['nn']; // the total number of symbols in a RS block
+                       $ALPHA_TO =& $rs['alpha_to']; // the address of an array of NN elements to convert Galois field elements in index (log) form to polynomial form
+                       $INDEX_OF =& $rs['index_of']; // the address of an array of NN elements to convert Galois field elements in polynomial form to index (log) form
+                       $GENPOLY  =& $rs['genpoly']; // an array of NROOTS+1 elements containing the generator polynomial in index form
+                       $NROOTS   =& $rs['nroots']; // the number of roots in the RS code generator polynomial, which is the same as the number of parity symbols in a block
+                       $FCR      =& $rs['fcr']; // first consecutive root, index form
+                       $PRIM     =& $rs['prim']; // primitive element, index form
+                       $IPRIM    =& $rs['iprim']; // prim-th root of 1, index form
+                       $PAD      =& $rs['pad']; // the number of pad symbols in a block
+                       $A0       =& $NN;
+                       $parity = array_fill(0, $NROOTS, 0);
+                       for ($i=0; $i < ($NN - $NROOTS - $PAD); $i++) {
+                               $feedback = $INDEX_OF[$data[$i] ^ $parity[0]];
+                               if ($feedback != $A0) {
+                                       // feedback term is non-zero
+                                       // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must
+                                       // always be for the polynomials constructed by init_rs()
+                                       $feedback = $this->modnn($rs, $NN - $GENPOLY[$NROOTS] + $feedback);
+                                       for ($j=1; $j < $NROOTS; ++$j) {
+                                       $parity[$j] ^= $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[($NROOTS - $j)])];
+                                       }
+                               }
+                               // Shift
+                               array_shift($parity);
+                               if ($feedback != $A0) {
+                                       array_push($parity, $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[0])]);
+                               } else {
+                                       array_push($parity, 0);
+                               }
+                       }
+                       return $parity;
+               }
+
+       } // end QRcode class
+
+} // END OF "class_exists QRcode"
+?>
diff --git a/lib/phpqrcode/cache/frame_1.dat b/lib/phpqrcode/cache/frame_1.dat
new file mode 100644 (file)
index 0000000..be28fea
--- /dev/null
@@ -0,0 +1,2 @@
+xÚ\9d\90Á\rÀ \bE9³u\13\ 6\90\8d`³"PÅ\84CÛç\89\97\1f\ 4T\1d!0$
+E\95ɲQ\99\9dÉm½úhÛ¾9\ 3\ f{k\ 6I"\9b 9Ln)Ap\ 6\1c¤åÖ¾Ë>ß^\87Õz³mënÅ\96;ü´mßn\86\eú\ 4¦Ë
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_1.png b/lib/phpqrcode/cache/frame_1.png
new file mode 100644 (file)
index 0000000..86ce6e9
Binary files /dev/null and b/lib/phpqrcode/cache/frame_1.png differ
diff --git a/lib/phpqrcode/cache/frame_10.dat b/lib/phpqrcode/cache/frame_10.dat
new file mode 100644 (file)
index 0000000..aff163f
Binary files /dev/null and b/lib/phpqrcode/cache/frame_10.dat differ
diff --git a/lib/phpqrcode/cache/frame_10.png b/lib/phpqrcode/cache/frame_10.png
new file mode 100644 (file)
index 0000000..dbfcd70
Binary files /dev/null and b/lib/phpqrcode/cache/frame_10.png differ
diff --git a/lib/phpqrcode/cache/frame_11.dat b/lib/phpqrcode/cache/frame_11.dat
new file mode 100644 (file)
index 0000000..95af68a
Binary files /dev/null and b/lib/phpqrcode/cache/frame_11.dat differ
diff --git a/lib/phpqrcode/cache/frame_11.png b/lib/phpqrcode/cache/frame_11.png
new file mode 100644 (file)
index 0000000..c07c761
Binary files /dev/null and b/lib/phpqrcode/cache/frame_11.png differ
diff --git a/lib/phpqrcode/cache/frame_12.dat b/lib/phpqrcode/cache/frame_12.dat
new file mode 100644 (file)
index 0000000..73228b3
Binary files /dev/null and b/lib/phpqrcode/cache/frame_12.dat differ
diff --git a/lib/phpqrcode/cache/frame_12.png b/lib/phpqrcode/cache/frame_12.png
new file mode 100644 (file)
index 0000000..8ba6782
Binary files /dev/null and b/lib/phpqrcode/cache/frame_12.png differ
diff --git a/lib/phpqrcode/cache/frame_13.dat b/lib/phpqrcode/cache/frame_13.dat
new file mode 100644 (file)
index 0000000..2256f0e
Binary files /dev/null and b/lib/phpqrcode/cache/frame_13.dat differ
diff --git a/lib/phpqrcode/cache/frame_13.png b/lib/phpqrcode/cache/frame_13.png
new file mode 100644 (file)
index 0000000..6e49d35
Binary files /dev/null and b/lib/phpqrcode/cache/frame_13.png differ
diff --git a/lib/phpqrcode/cache/frame_14.dat b/lib/phpqrcode/cache/frame_14.dat
new file mode 100644 (file)
index 0000000..e9ae093
Binary files /dev/null and b/lib/phpqrcode/cache/frame_14.dat differ
diff --git a/lib/phpqrcode/cache/frame_14.png b/lib/phpqrcode/cache/frame_14.png
new file mode 100644 (file)
index 0000000..efc36c0
Binary files /dev/null and b/lib/phpqrcode/cache/frame_14.png differ
diff --git a/lib/phpqrcode/cache/frame_15.dat b/lib/phpqrcode/cache/frame_15.dat
new file mode 100644 (file)
index 0000000..1872781
Binary files /dev/null and b/lib/phpqrcode/cache/frame_15.dat differ
diff --git a/lib/phpqrcode/cache/frame_15.png b/lib/phpqrcode/cache/frame_15.png
new file mode 100644 (file)
index 0000000..a9f416c
Binary files /dev/null and b/lib/phpqrcode/cache/frame_15.png differ
diff --git a/lib/phpqrcode/cache/frame_16.dat b/lib/phpqrcode/cache/frame_16.dat
new file mode 100644 (file)
index 0000000..60af678
--- /dev/null
@@ -0,0 +1 @@
+xÚí\99A\ e\84 \fE]sëIX´;¸\ 1Ü\ 4n6\80È`\82q\94êê\7fW6ñå¥\ 4\9a`\8c%A/3!¢°\82¢\8a!g\96ÈÌ¡\92\121\eN\13)\13\véE¢Ï\19|;®\97>6â¸\8fÞ97$\ eëÄôëc]kkö\8fwé1Öü[·m­CÍ\9c\ 6RºÄê¹>¦è\1aµ¾\9aE,\95\89p\84#\1cáxF\1c\9dyWÏÇVWGçòÕ3¼Õ+Ñ\ f\88þàË\93úS\8eâ}Ä\9e\81#\1cá\bG8b^c^cÏÀ\11\8ep\84c&\123\13YQ"\11ñ\e\8e÷çÌvµù\11\9b\85ñàÎþþ¼\96¹kÞ9\8aÜ\87÷}\94¹³ï×ú     ¢Ä¿\8f\1dQäÿL\97/ÝÔÀÏ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_16.png b/lib/phpqrcode/cache/frame_16.png
new file mode 100644 (file)
index 0000000..6ac8fe8
Binary files /dev/null and b/lib/phpqrcode/cache/frame_16.png differ
diff --git a/lib/phpqrcode/cache/frame_17.dat b/lib/phpqrcode/cache/frame_17.dat
new file mode 100644 (file)
index 0000000..87f0cf5
Binary files /dev/null and b/lib/phpqrcode/cache/frame_17.dat differ
diff --git a/lib/phpqrcode/cache/frame_17.png b/lib/phpqrcode/cache/frame_17.png
new file mode 100644 (file)
index 0000000..5b929ac
Binary files /dev/null and b/lib/phpqrcode/cache/frame_17.png differ
diff --git a/lib/phpqrcode/cache/frame_18.dat b/lib/phpqrcode/cache/frame_18.dat
new file mode 100644 (file)
index 0000000..bb7138c
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\99A
+\830\10E]çÖ\85,2;s\83ä&ÉÍ\9ah\14¥\1dÛêO¡ô\7fÝÈàã1\ 4&09OIv@DDÒ\fÌ&§\1a\14Ù\89K\8dXÈÕ\18Fv\95<\11Ádqò\169Ö<%h\95¹\e\vYïs\f!(d¥²ës;\e~||b(ÏøYůg#µ`\9cK\16 ±S¼Åô¹Ä¶\98ùs\1càidß\8dLg:Ó\99Îtþ/gmª\9d\99\83\1cMâ3³{­4rTÈQýÿe¥·s·>ó<Ó\99Ît¦3\9déÌ;\12ïH¼#Ñ\99Ît¦3\9d\7fÍY\9c+o\ fg©hù¶óµÙ½¬lnðûF>Øi^»#awm;gè~pÛgìNs{6z\92\91»ã\1d\19ºïÞä\ ep¾Ê'
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_18.png b/lib/phpqrcode/cache/frame_18.png
new file mode 100644 (file)
index 0000000..ee0d6a3
Binary files /dev/null and b/lib/phpqrcode/cache/frame_18.png differ
diff --git a/lib/phpqrcode/cache/frame_19.dat b/lib/phpqrcode/cache/frame_19.dat
new file mode 100644 (file)
index 0000000..95e26ad
--- /dev/null
@@ -0,0 +1,3 @@
+xÚí\9aA
+Ä \fE»öÖ\ 3.ÌNo 7Ñ\9b\8d¶ii\19RÚN2\8bá\7fW%ðx\ 4Á@ÚÚ\9cê'­\ 4
+u\816×ê\88.\9d*S;}\98«ÒàÏT\vúèÌ\ 5z\19\11\18r\8d\ et¹ï%ç,ÒÅÚâÎ}ç;\93âç)¹\9f\98âÝZÚîLåè¹÷¬Pçç$¯×÷\1eÏqËg\9cLÂôdJ\87;Üá\ ew¸Ãý.]z#\9f¾«[Í\9d½ïOg\82­Æô"ÐË        áBí\17î¦}Ç}\87;Üá\ ew¸Ã\1dî\98#1Gb\8e\84;Üá\ ew¸Ãý_ÝC\ f\ 5+w¢@Dfî\1d\1f\ 4÷ïç\99u\9dø2\99ÅÚÉNþû9R\7f7|pWßkïû®¿\93ßß\19kºö¿\10\aºú\7f\1c»¼\ 1\ 2\1cÎÓ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_19.png b/lib/phpqrcode/cache/frame_19.png
new file mode 100644 (file)
index 0000000..20fddd8
Binary files /dev/null and b/lib/phpqrcode/cache/frame_19.png differ
diff --git a/lib/phpqrcode/cache/frame_2.dat b/lib/phpqrcode/cache/frame_2.dat
new file mode 100644 (file)
index 0000000..7e42f31
--- /dev/null
@@ -0,0 +1 @@
+xÚÍ\92Í\rÀ \bF{vë&\f \eà&°Y+?Z1öÐS\9f'y!¢\9fÌ\ 2Áa\90\16815&£\95Û´\8eÙHå£Ù\9e\95l«ÏFÆè1\12\b\ 5º\ 1#é6\1f\vfÊÖü©§6Äø\95O7\88¨\86\15«\9bðÖ\8f\9e\90Ï8gI®ÏöfB¦ÃÄÿæ\DÔ»(
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_2.png b/lib/phpqrcode/cache/frame_2.png
new file mode 100644 (file)
index 0000000..9c150eb
Binary files /dev/null and b/lib/phpqrcode/cache/frame_2.png differ
diff --git a/lib/phpqrcode/cache/frame_20.dat b/lib/phpqrcode/cache/frame_20.dat
new file mode 100644 (file)
index 0000000..d5ecc1d
Binary files /dev/null and b/lib/phpqrcode/cache/frame_20.dat differ
diff --git a/lib/phpqrcode/cache/frame_20.png b/lib/phpqrcode/cache/frame_20.png
new file mode 100644 (file)
index 0000000..23a061d
Binary files /dev/null and b/lib/phpqrcode/cache/frame_20.png differ
diff --git a/lib/phpqrcode/cache/frame_21.dat b/lib/phpqrcode/cache/frame_21.dat
new file mode 100644 (file)
index 0000000..1974dd9
--- /dev/null
@@ -0,0 +1 @@
+xÚí\9aA\ e\84 \fE]sëIX´;¹\ 1Ü\ 4n6Up\82\13\8d\93в\99ÿ]Ù\98þ<\vi\17-eWö\8b\98)×äÅ\95¼ÉÂ\85H\jvqÙHL\6\96\9aÝÐ\85\7frI\9b\ 6¢LܹÜÕ%Å\18Ó@´þ±V\97vÆÂúý¤(ÏP4|ÎXnÒg\11\1dÉ\9dß\15¼~]D¾ÉÕ×u1Us        S\À\ 2\16°\80\ 5,ÿÅ2Þ\15\1f¢N§Ã?D\9bKºüF-:\93eJ]p_À\ 2\16°\80\ 5,\98a0Ã`\86ÁÝ\a\v\ 2\16°`\86Á\f\83\19\ 6w\1f,`\ 1\vX´]\98\88\99\82¹\8b\98°5\v\89®Y4{å±æñ2íûåvçJs\86±Ûí9±\98í)õu±Û¹êÏØ,\17«]¸\93\8bÙ^_§7$\83
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_21.png b/lib/phpqrcode/cache/frame_21.png
new file mode 100644 (file)
index 0000000..291598c
Binary files /dev/null and b/lib/phpqrcode/cache/frame_21.png differ
diff --git a/lib/phpqrcode/cache/frame_22.dat b/lib/phpqrcode/cache/frame_22.dat
new file mode 100644 (file)
index 0000000..0f01802
--- /dev/null
@@ -0,0 +1,3 @@
+xÚí\9aA
+\840\fE]{ë\81.\92]{\ 3{\13{³©Z¥BepÆ\14\ 6Þwe@\1f\8fV\9bERZ3»Á"*2o\804¦y\89)i#dÒbdFÒ\85´\12\8cI"ú\91\14\974\9e½W\17­Iíu\8aÓ45ßx«.Z­SÙ{Á\9f¯8åË\aÿk=\1c{o.±qÊÙ\ 1£[\13\9cÍ:å¸\92q»õ\83y
+)t#á\84\13N8ádCj\9d-O\9dOG}¼:/\9f:s\8fz!Å\ 6)^<ùe½·S·uâ{    '\9cp    'ú=ú=ú=¾'\9cp    '\9cp¢ß£ß£ßã\1f\81\13N8á\84Óÿ9©ª\88ôp\12QQõ]H\19Ôpz¾\8fØG\9c^æ½Qº\98I|¾ß³\9du;9\99ÎïÕëd;\93Xï½\9e$ËÙÑ\13Ét\1e¶Ê\eÛédy
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_22.png b/lib/phpqrcode/cache/frame_22.png
new file mode 100644 (file)
index 0000000..bc97bd0
Binary files /dev/null and b/lib/phpqrcode/cache/frame_22.png differ
diff --git a/lib/phpqrcode/cache/frame_23.dat b/lib/phpqrcode/cache/frame_23.dat
new file mode 100644 (file)
index 0000000..ee3b370
--- /dev/null
@@ -0,0 +1,3 @@
+xÚí\9aA
+à\10E³öÖ\ 5\17f\17o 7Ñ\9bU\8d)    %M!Î\94ÂûYu(<\1e\9að\17\93sK²\93T\9c\9bÓ
+É&§\1aIÚ\i+¥Ðª\99(m®´FQ¡¹¯h±æöüèv~n1\84\10oÏ]sëçÖï¤_Þ\9f\18Ê3`î_w2õȹ\95l\10c[¼\95\12ÛcÖ\9fˤ\92Nóª4ÜpÃ\r7ÜpÃí\1emTÿ¸\9c\9b\91ÝêrÞiñä_\83ç¿pS=7Þ7ÜpÃ\r7ÜpÃ\8d>I\9f¤Oò-Á\r7ÜpÃ\r7ú$}\92>É·\ 47ÜpÃ\r·\7ftss\89Órs\r§åVÍÎÜÆ÷\92mýï¡Ò¹ò\87\9dÞñ}R~7ôà&¾÷º?7ù\9dÞý\9dÔ¦Iïb\1fhâ{æ»<\ 1ÀMi-
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_23.png b/lib/phpqrcode/cache/frame_23.png
new file mode 100644 (file)
index 0000000..b8f16ae
Binary files /dev/null and b/lib/phpqrcode/cache/frame_23.png differ
diff --git a/lib/phpqrcode/cache/frame_24.dat b/lib/phpqrcode/cache/frame_24.dat
new file mode 100644 (file)
index 0000000..7b92e29
--- /dev/null
@@ -0,0 +1 @@
+xÚí\9bA\ e\83 \10E»öÖMX0;¸\81Ü\ 4nVP4ÚHSS\19»xßU3±/O´ý\vLiJ4\8f\9e±Vâ\fJC\8a\896VR&\16ÃÞD\91B\9cHjDù\82\18J\ eÏ??\99¯êBl­c\18DZñ½§'óU­ëXïUïÞ\8f0æÃywÍį÷j¬éë\98³\80\ 6\9b¾ë\98cj\86ù£{¨¥\12½:\11G\1c\11G\1cÿÝñø\9fûÚ\ e°N\86v;¹¶ç¬\93J\f\87ÄÐ<û\87É]\8eêëÈó\88#\8e\88#\8e8âH'§\93ÓÉùÍÁ\11G\1c\11G\1céätr:9Ï#\8e\88#\8e8âØ\93\88\15¯NÔt\94\8c´Ö_ÝØ>t¹eëìS­¯¦æ\9eù^\9d\g¯õÎQe?ùv\1duöÌoïÕ;\88\1aï>ì\88*ïwlò\ 2×\12
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_24.png b/lib/phpqrcode/cache/frame_24.png
new file mode 100644 (file)
index 0000000..397c64f
Binary files /dev/null and b/lib/phpqrcode/cache/frame_24.png differ
diff --git a/lib/phpqrcode/cache/frame_25.dat b/lib/phpqrcode/cache/frame_25.dat
new file mode 100644 (file)
index 0000000..ba12518
--- /dev/null
@@ -0,0 +1,3 @@
+xÚíÛA
+à\10\85á¬së\82\8b\99]r\83x\13½Y51m\ 2MÈBG
+ÿ¸*Sx|Ua\165Ƶ\82\eZ\97\8a\84-,\8e1ä²H\15ÑPÒRj\96\9aX5§®i\86©\92\7fáG©>W¥\8e\9eRïöÕ/Ëâ+uT廯å\fÏÓ¯å\97´ªuæÏ\19\ e¥Ú[Sía£[kví÷5\95+5n\1f§Á´JêÜ%\15+V¬X±bÅ\8aõ߬u'Á\a\9d±þÔû SRýå÷\9atzZ»ì+÷\15+V¬X±bÅ\8a\95Ù\9fÙ\9fÙ\9fû\8a\15+V¬X±bÅÊìÏìÏìÏ}Å\8a\15+V¬X±ö±ª¤¥ÖVI©¢ÖÖ\ 4\15\91+k«\19qÿ[úËt\1e\8e·oVZÍþvo\eNV³w\1cÇ}µ{³r<ýR­Þ"\9dRÍÞ]\1dê\rW«r}
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_25.png b/lib/phpqrcode/cache/frame_25.png
new file mode 100644 (file)
index 0000000..25bc445
Binary files /dev/null and b/lib/phpqrcode/cache/frame_25.png differ
diff --git a/lib/phpqrcode/cache/frame_26.dat b/lib/phpqrcode/cache/frame_26.dat
new file mode 100644 (file)
index 0000000..d34a73f
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9bA
+à\10E³öÖ\85,t§7\88\9bU\8d             E)i\1d7ï»*\ 3~\1ecÃüÅÄX\14ÖEBÆè°\eF\15C\96\98³6¡:&çL,å¬Mv.\8eÂÎæKg\9fÕ¸ãYMç>\9fÎí>ûmÛ\9a·?ª\95\17vô¹¾mg?\8fßÒ±Îþ³æη\1dªd\98\93\ e\16¹U¦ÏIk\95Ú\7fÚE\ÕÙMs\86\19f\98a\86\19f\98a>\9c[sÓ\889쬩ެ8bö<kÕÙ7\9c\86\1f\99§õ\99ÿ3Ì0Ã\f3Ì0Ã\f3Ìä*r\15¹\8a\Å7\ff\98a\86\19f\98a\86\19fr\15¹\8a\Å7\ff\98a\86\19f\98a\86YÆÙ\18\9dÎ\fæd\9b4\839\ekíÆÌÔÝyûX     y\89g\8cØÙ)\e\9b«dw\8dnÌ¢ûU×>Ëî\94]ßöLgÉÝÁ\9b³è¾äEo\82 w1
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_26.png b/lib/phpqrcode/cache/frame_26.png
new file mode 100644 (file)
index 0000000..f4a6b39
Binary files /dev/null and b/lib/phpqrcode/cache/frame_26.png differ
diff --git a/lib/phpqrcode/cache/frame_27.dat b/lib/phpqrcode/cache/frame_27.dat
new file mode 100644 (file)
index 0000000..b4d9ffd
Binary files /dev/null and b/lib/phpqrcode/cache/frame_27.dat differ
diff --git a/lib/phpqrcode/cache/frame_27.png b/lib/phpqrcode/cache/frame_27.png
new file mode 100644 (file)
index 0000000..8419ec2
Binary files /dev/null and b/lib/phpqrcode/cache/frame_27.png differ
diff --git a/lib/phpqrcode/cache/frame_28.dat b/lib/phpqrcode/cache/frame_28.dat
new file mode 100644 (file)
index 0000000..8cbaa19
Binary files /dev/null and b/lib/phpqrcode/cache/frame_28.dat differ
diff --git a/lib/phpqrcode/cache/frame_28.png b/lib/phpqrcode/cache/frame_28.png
new file mode 100644 (file)
index 0000000..7609d8e
Binary files /dev/null and b/lib/phpqrcode/cache/frame_28.png differ
diff --git a/lib/phpqrcode/cache/frame_29.dat b/lib/phpqrcode/cache/frame_29.dat
new file mode 100644 (file)
index 0000000..5e4a711
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜA\ e\83 \10\85a×Þº \8b\99\9dÜ@n\ 27+*¶\9aÖÚ4\91!Í?®J\9aðò\ 5       ³\90\94æ\8a®«]ª\1a\97ÉS\9fâTf)\96Ùs\8aIÂ"\85È\94b\9eÝ0\85\8a|\95"LuÙ¸î,\8e×E\18Ç1\6®*ÏuQÞ\11?¼>aÌÏ\85ãþñ\8eÄRõ-r­\93÷n.ïê¯\8b\®T¿ü\1c:Ó*)|\13)°À\ 2\v,°À\ 2\v,þÑâêóåéx_ã¬}:^R\84\83\7fU\1aoÉ¢\89uÁ~ÁÞ\89\ 5\16X`\81\ 5\16\8fÐ\8fÐ\8fÐ\8f°_`\81\ 5\16X`\81\ 5\16\8fÐ\8fÐ\8f°_`\81\ 5\16X`\81\ 5\16\8fÐ\8fÐ\8fÐ\8f°wb\81\ 5\16X`\81\ 5\16¿¥P\15Uõö)DÔÞ"cÈ{\8bzçÎõ3ê\9bé\19<}¸ó¡^?b÷mÿÎÂì\9e\83íº°»óaû\8e´\92Âê.\90]
+³{Q6u\aáT,9
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_29.png b/lib/phpqrcode/cache/frame_29.png
new file mode 100644 (file)
index 0000000..ffe072c
Binary files /dev/null and b/lib/phpqrcode/cache/frame_29.png differ
diff --git a/lib/phpqrcode/cache/frame_3.dat b/lib/phpqrcode/cache/frame_3.dat
new file mode 100644 (file)
index 0000000..188d531
--- /dev/null
@@ -0,0 +1 @@
+xÚí\93Á\rÀ \bE{vë&\f \eà&°Y+¢b¤öÐk\9f'yù\91¤¿Ì\ 2Áa :äÀTXl\9dÞ¶$W+Ó\8fvû®î\9c¢9}gRæ¬\12@H0YPB½ÆÃEmÚÚ?û\9cÍ\ 5±ís\9cÖ"bµìt2cnÖé\86É:½\1aﺭë;¿Y§\93ÃzÿQã\ 2«7¿Ô
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_3.png b/lib/phpqrcode/cache/frame_3.png
new file mode 100644 (file)
index 0000000..945ee7c
Binary files /dev/null and b/lib/phpqrcode/cache/frame_3.png differ
diff --git a/lib/phpqrcode/cache/frame_30.dat b/lib/phpqrcode/cache/frame_30.dat
new file mode 100644 (file)
index 0000000..44cf3d3
Binary files /dev/null and b/lib/phpqrcode/cache/frame_30.dat differ
diff --git a/lib/phpqrcode/cache/frame_30.png b/lib/phpqrcode/cache/frame_30.png
new file mode 100644 (file)
index 0000000..75dbddd
Binary files /dev/null and b/lib/phpqrcode/cache/frame_30.png differ
diff --git a/lib/phpqrcode/cache/frame_31.dat b/lib/phpqrcode/cache/frame_31.dat
new file mode 100644 (file)
index 0000000..ce429d0
--- /dev/null
@@ -0,0 +1 @@
+xÚíÜA\ e\83 \10\85a×Þº \vØÉ\rà&r³\82 Á´¸ªÎ4ù§«\86´yù\82Ä·!¥mV3I\8dµv­!Ò\9cÖ2¢i\NSSä4EF2\8d+65Å\1f¥\89e¾þÃ/W\9cs]\9añ¾\89!\84Á?ÿpÅõû¦=S~ùüÄ\90?Ëý+þx¦Ö6r6yö\10³ÙÆ\e¹}\93Ç´\99ë×eR1-\8dW\95\ 6\el°Á\ 6\el°Á\ 6\9bûÒ\8cÞX\9fz/>Væ«·ù§:ñÒÒÄA\9a8üý-+\1amTí\eÎ\eÎbl°Á\ 6\el°Á\ 6\e\9atMº&]\93³\18\el°Á\ 6\el°Á\ 6\eº&]\93®I×ä¼Á\ 6\el°Á\ 6\el°Á\ 6\eº&]\93®Éy\83\r6Ø`\83\r6Ø`\83ÍÝi¬uy´ØXWòè±Éi¬\7f²\19\t\86ýz\95\97\8a>\95\94z¾kÊß\r\11¿7©ß7òwJõÏ\94¶4Òw\91\9dÒ\88ßÓÖÍ\e\1885\89
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_31.png b/lib/phpqrcode/cache/frame_31.png
new file mode 100644 (file)
index 0000000..b14d1fa
Binary files /dev/null and b/lib/phpqrcode/cache/frame_31.png differ
diff --git a/lib/phpqrcode/cache/frame_32.dat b/lib/phpqrcode/cache/frame_32.dat
new file mode 100644 (file)
index 0000000..aaa0808
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜÁ
+\84 \14\85áÖ¾õ\80\8bë.ß ßDßl¬,\f¦\9aMz\89ÿ6\9b\10\86Ã\87      gcJËD;ô\1c'.®A\92Iq\9eÞ\89ÄI,Ir¢Y¨»\91ËFk\12%\89DþO\14æy|EDªD×û(LÓ\14\1e_Y\8dÊ>*ß\9a\1f\7f?aÊO\83\15¿\7fk±L_£<[\10c\97ñ¶ï>ÊcË\98õu\1cÔLIäÕ%Â\b#\8c\b#\8c\b#\8cÞotÑ¢\9aõµ}ÅÜ4Íf\9dv_)\89ÂE¢pú\1f\8f¬h5R·\8f8\8f8³1Â\b#\8c\b#\8c0¢ÓÒié´tZÎ#\8c\b#\8c\b#\8c0¢ÓÒié´tZÎ#\8c\b#\8c\b#\8c0¢ÓÒié´tZÎl\8c\b#\8c\b£÷\e9q"¢ÉHÜ\9cH\99\9d\eµï"ÛÕL\1f5}-ÝÜY×¾Óê¸kì`¤â>¶z\1f鸳®þÖ4&Òp÷á!\91\8aû!«ù\ 2`¿:5
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_32.png b/lib/phpqrcode/cache/frame_32.png
new file mode 100644 (file)
index 0000000..58d42db
Binary files /dev/null and b/lib/phpqrcode/cache/frame_32.png differ
diff --git a/lib/phpqrcode/cache/frame_33.dat b/lib/phpqrcode/cache/frame_33.dat
new file mode 100644 (file)
index 0000000..a261375
--- /dev/null
@@ -0,0 +1,14 @@
+xÚíÜA\ e\83 \10\85a×Þº\89\8b\99\9dÜ@n\ 27+*\1aL\ 3++Óæ\9f®\1a\12óò\ 5\89ÌbbÜ*LCï\12\91°\87\89c\fk\99\1ar\9a\94j\95²\90J5Yíi~0\95_«ò\8cû×TÊTõ}å\97e©>ýö5\91b_åwÐÍ\9f?¿¤ßìæ§ÖÜù\ e\86\ý­R\1daÆi+7õßW©¦\ãþw\1eLUNåL¦Â
++¬°Â
++¬°Âêÿ­jßÒO\7f·\9fkcëÞñô\1dç\Ë©|%\95o<á\8bk\96­Lî+Î+Îv¬°Â
++¬°Â
++¬°Â\8a>\ 3}\ 6ú\fô\198¯°Â
++¬°Â
++¬°Â
++ú\fô\19è3Ðgà¼Â
++¬°Â
++¬°Â
++¬è3Ðg Ï@\9f\81ó
++¬°Â
++¬°Â
++¬°:R\89¨ªX³ÚB\89\94IÔ=\7fçkÞ\a\8f±o/SwçØ\98\99Ù¯Ï`g¶áÅÊÌ\1cÈr_Ù\99\99\83VSY\99ÅzIefnmQoz\r
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_33.png b/lib/phpqrcode/cache/frame_33.png
new file mode 100644 (file)
index 0000000..924c728
Binary files /dev/null and b/lib/phpqrcode/cache/frame_33.png differ
diff --git a/lib/phpqrcode/cache/frame_34.dat b/lib/phpqrcode/cache/frame_34.dat
new file mode 100644 (file)
index 0000000..7ceb025
Binary files /dev/null and b/lib/phpqrcode/cache/frame_34.dat differ
diff --git a/lib/phpqrcode/cache/frame_34.png b/lib/phpqrcode/cache/frame_34.png
new file mode 100644 (file)
index 0000000..a477042
Binary files /dev/null and b/lib/phpqrcode/cache/frame_34.png differ
diff --git a/lib/phpqrcode/cache/frame_35.dat b/lib/phpqrcode/cache/frame_35.dat
new file mode 100644 (file)
index 0000000..56bc3e2
Binary files /dev/null and b/lib/phpqrcode/cache/frame_35.dat differ
diff --git a/lib/phpqrcode/cache/frame_35.png b/lib/phpqrcode/cache/frame_35.png
new file mode 100644 (file)
index 0000000..d29806c
Binary files /dev/null and b/lib/phpqrcode/cache/frame_35.png differ
diff --git a/lib/phpqrcode/cache/frame_36.dat b/lib/phpqrcode/cache/frame_36.dat
new file mode 100644 (file)
index 0000000..282c60d
Binary files /dev/null and b/lib/phpqrcode/cache/frame_36.dat differ
diff --git a/lib/phpqrcode/cache/frame_36.png b/lib/phpqrcode/cache/frame_36.png
new file mode 100644 (file)
index 0000000..96ecb42
Binary files /dev/null and b/lib/phpqrcode/cache/frame_36.png differ
diff --git a/lib/phpqrcode/cache/frame_37.dat b/lib/phpqrcode/cache/frame_37.dat
new file mode 100644 (file)
index 0000000..015c0f2
Binary files /dev/null and b/lib/phpqrcode/cache/frame_37.dat differ
diff --git a/lib/phpqrcode/cache/frame_37.png b/lib/phpqrcode/cache/frame_37.png
new file mode 100644 (file)
index 0000000..fcc5162
Binary files /dev/null and b/lib/phpqrcode/cache/frame_37.png differ
diff --git a/lib/phpqrcode/cache/frame_38.dat b/lib/phpqrcode/cache/frame_38.dat
new file mode 100644 (file)
index 0000000..71cf53e
--- /dev/null
@@ -0,0 +1 @@
+xÚíÝAª\830\14\ 5Ð\8eÝuÁA2«;Ð\9dèÎ\1akü(ü\16g¾Ày\1d\95tp9Ä\14ï$Ëò\99¹\7fD\9c\94ò¼\ 5\ºe^'tÒ-aIº\8aFM\9aS\9akÂðIóŤÓ:7®¤|Lúk\9fNã8N7®\9cöi}ö\87×\7f\9fi,\9f[W\86¿g\7f®\13Ó´Ì\1e°ë?3ô1÷i\99¾N·}}=ÂOM:4\93\94)S¦L\992eÊ\94)S¦L#$½ÿ\rôÂJ\17ã­þÂJM:}ý]\98\95ÖL\9bÙ§ÎSÿQL\992eÊ\94)S¦L\992Õ¡èPt(:\14\1d\8aó\94)S¦L\992eÊ\94)S¦:\14\1d\8a\ eE\87¢Cq\9e2eÊ\94)S¦L\992eÊ\94©\ eE\87¢CÑ¡8O\992eÊ\94)S¦L\992eÊT\87¢CÑ¡èP\9c§L\992eÊ\94)S¦L\99\93¦\94sJC\13IKÖÔ\82i\11Í9\7f3\8dônº_Ñò\fÿ¾¿ü¼\93+R\87\12û®£\93ièû£\8eû4ö\9d\Çg¿¥¤\91ï\8e;%\r}\1fßaÞn\8e\1c£
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_38.png b/lib/phpqrcode/cache/frame_38.png
new file mode 100644 (file)
index 0000000..89238f3
Binary files /dev/null and b/lib/phpqrcode/cache/frame_38.png differ
diff --git a/lib/phpqrcode/cache/frame_39.dat b/lib/phpqrcode/cache/frame_39.dat
new file mode 100644 (file)
index 0000000..53511f7
Binary files /dev/null and b/lib/phpqrcode/cache/frame_39.dat differ
diff --git a/lib/phpqrcode/cache/frame_39.png b/lib/phpqrcode/cache/frame_39.png
new file mode 100644 (file)
index 0000000..1dc9cd1
Binary files /dev/null and b/lib/phpqrcode/cache/frame_39.png differ
diff --git a/lib/phpqrcode/cache/frame_4.dat b/lib/phpqrcode/cache/frame_4.dat
new file mode 100644 (file)
index 0000000..67b30e8
--- /dev/null
@@ -0,0 +1 @@
+xÚí\94Á\rÀ \bE=»u\13\ 6Ð\rp\13ج\15Q\e\95ØCOM\9f'ÃË\8f$ ³@à\ 6¨\14Ø3e\96F©\FNX\eRyÉؾC{\89a8­\17\fÅ\83\10a2@ñå\1a\9c\89\1aqkü\19ßÉH\191ê(\1d£\81\88Å`cç\12¦j\18³~Ë0ö¥¿ÃܨÖË\13ÃعnXÿGå\ 4ÿ\8dÄ\80
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_4.png b/lib/phpqrcode/cache/frame_4.png
new file mode 100644 (file)
index 0000000..b72f9e7
Binary files /dev/null and b/lib/phpqrcode/cache/frame_4.png differ
diff --git a/lib/phpqrcode/cache/frame_40.dat b/lib/phpqrcode/cache/frame_40.dat
new file mode 100644 (file)
index 0000000..90d36dd
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÝA\8a\83@\10\ 5Ь½õ\80\8bî\9dÞ@o¢7\e\93\98`\93Qfeºä\95«PA>\8f¦ÀÚô<?jjo5WNiz\ 6\9d\9byºWý\89ó´&]\12ß\85C\18?\93\ 6I\9crþWâñ^;ï8·\97
+ãýs<\ eðûöS{Å9^gEß}>ã°<]ßÕÐëß³bZ«nã¥^A\9böQ}[÷9^ª]«yþìnajMÜ\87\981cÆ\8c\193fÌ\981ã¸Æ{ßW5}ç½{ÍÑ7lMßÒïÞ\9axÜI<\1e¼áK½¨Æáαyl\1e3fÌ\981cÆ\8c\193fÌ\981ã«\eÛ»Ù»\15={·\93αyl\1e3fÌ\981cÆ\8c\193fÌ\981ã«\eÛ»Ù»\15={·\93αyl\1e3fÌ\981cÆ\8c\193fÌ\981ã«\eÛ»Ù»\15={·\93αyl\1e3fÌ\981cÆ\8c\193fÌ\981ã«\eÛ»Ù»\15={·\93αyl\1e3fÌ\981cÆ\8c\193fÌ\98ñ÷\12ç\9c\91\8cÓ\927¥HÆKÞ¼g\ç¾âuõßÏ_ÿªr'4\1fÜ\19[çÞ-Æ]\9b\85q\88ûL·ç8Æ\9d±ÛY\111q\84»\8f\8bÄ!î\97ÞÔ/\17(%û
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_40.png b/lib/phpqrcode/cache/frame_40.png
new file mode 100644 (file)
index 0000000..8034d86
Binary files /dev/null and b/lib/phpqrcode/cache/frame_40.png differ
diff --git a/lib/phpqrcode/cache/frame_5.dat b/lib/phpqrcode/cache/frame_5.dat
new file mode 100644 (file)
index 0000000..d5dafe1
--- /dev/null
@@ -0,0 +1 @@
+xÚí\941\ eÀ \bE\9d½u\13\ e 7Ð\9bÀÍZ\ 1µ\ 3\12\87\ e\1d|N\86\97\1f\19üD\fB0@\19R$l,-\99>VKZ[<ýØÚz\97î\98\93\8e¨ØYJ\ 4&\83i\81\12å\9a\82\8bZyË:Y'ë¯YµÁVÿ&\97e\95RÄ"§sj©Ýrþö+Ëé\89ù.·MÆ\8e»\96Ó9Óòzµs\ 3\8e\94É,
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/frame_5.png b/lib/phpqrcode/cache/frame_5.png
new file mode 100644 (file)
index 0000000..96b6494
Binary files /dev/null and b/lib/phpqrcode/cache/frame_5.png differ
diff --git a/lib/phpqrcode/cache/frame_6.dat b/lib/phpqrcode/cache/frame_6.dat
new file mode 100644 (file)
index 0000000..0fc3d03
Binary files /dev/null and b/lib/phpqrcode/cache/frame_6.dat differ
diff --git a/lib/phpqrcode/cache/frame_6.png b/lib/phpqrcode/cache/frame_6.png
new file mode 100644 (file)
index 0000000..05ca358
Binary files /dev/null and b/lib/phpqrcode/cache/frame_6.png differ
diff --git a/lib/phpqrcode/cache/frame_7.dat b/lib/phpqrcode/cache/frame_7.dat
new file mode 100644 (file)
index 0000000..4337596
Binary files /dev/null and b/lib/phpqrcode/cache/frame_7.dat differ
diff --git a/lib/phpqrcode/cache/frame_7.png b/lib/phpqrcode/cache/frame_7.png
new file mode 100644 (file)
index 0000000..7d2ff4f
Binary files /dev/null and b/lib/phpqrcode/cache/frame_7.png differ
diff --git a/lib/phpqrcode/cache/frame_8.dat b/lib/phpqrcode/cache/frame_8.dat
new file mode 100644 (file)
index 0000000..669b325
Binary files /dev/null and b/lib/phpqrcode/cache/frame_8.dat differ
diff --git a/lib/phpqrcode/cache/frame_8.png b/lib/phpqrcode/cache/frame_8.png
new file mode 100644 (file)
index 0000000..db1f187
Binary files /dev/null and b/lib/phpqrcode/cache/frame_8.png differ
diff --git a/lib/phpqrcode/cache/frame_9.dat b/lib/phpqrcode/cache/frame_9.dat
new file mode 100644 (file)
index 0000000..d79295e
Binary files /dev/null and b/lib/phpqrcode/cache/frame_9.dat differ
diff --git a/lib/phpqrcode/cache/frame_9.png b/lib/phpqrcode/cache/frame_9.png
new file mode 100644 (file)
index 0000000..74ddf08
Binary files /dev/null and b/lib/phpqrcode/cache/frame_9.png differ
diff --git a/lib/phpqrcode/cache/mask_0/mask_101_0.dat b/lib/phpqrcode/cache/mask_0/mask_101_0.dat
new file mode 100644 (file)
index 0000000..51deaba
Binary files /dev/null and b/lib/phpqrcode/cache/mask_0/mask_101_0.dat differ
diff --git a/lib/phpqrcode/cache/mask_0/mask_105_0.dat b/lib/phpqrcode/cache/mask_0/mask_105_0.dat
new file mode 100644 (file)
index 0000000..97e9e5d
Binary files /dev/null and b/lib/phpqrcode/cache/mask_0/mask_105_0.dat differ
diff --git a/lib/phpqrcode/cache/mask_0/mask_109_0.dat b/lib/phpqrcode/cache/mask_0/mask_109_0.dat
new file mode 100644 (file)
index 0000000..eadf83a
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÚ=
+\800\f\ 6н§iï\7f9'Åb\11\87$ ¾tË\12\1eýá\eÚû^#i\9dª¥\ f\eËi?³Åô\1fÛbúK[AUØFå¾\9dƵijx]m\9f]2\8e\8d\8d\8d\8d\8d\8d\96\9dK\8e~\vÏVw}¶X\9bûÆÆÆÆÆÆÆ&O²É\93Þ\12666666yR\9e\94'½%lllll/´å\7fh\9cl\85Ãîm    ¹¤ê\8fádël\99¶´3Ù+ïÛ\17m\e\e\13Í«
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_113_0.dat b/lib/phpqrcode/cache/mask_0/mask_113_0.dat
new file mode 100644 (file)
index 0000000..5eb7f5d
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÚ;
+\850\10\ 5Ð>«Iö¿9+Eñ\83\82sá=ϤL1\1eÌ\84[¤÷¹FáZU\8b4\1c\87\1d?i<ÿ\90ç;7\8dçòç;\87ÆP¥\8c\1fW-[ñ\19ݯ6÷\8fµddddddü\11c"\ 3,;í"\9d¼\9fs\18k\8dæ\91\91\91\91\91\91\91\91Q&\97Éerw\ e######£L.¯Êäæ\91\91\91\91\91\91\91±Ð\98y\14¼1\86\e^\19˲\ò\8dîÆØ\193Æâ³ÚÓóøÏÆ       \91Ñv\1a
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_117_0.dat b/lib/phpqrcode/cache/mask_0/mask_117_0.dat
new file mode 100644 (file)
index 0000000..781c7f8
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÚA
+\840\f\ 5Ð}OÓÞÿr³R,#3\bö\añ¥Ë,âÃ\ 6þ¢½o5\16\9fCµØÐq:õõÖ;;\17¬wvN­ÁJZGÅ\7f=\8cm\81»û}Úö\rѱ¬¬¬¬¬¬¬¬\ fµ¦2âÞi\8bRïï\ ekÆj_YYYYYYYYe\7fÙ_ö·¯¬¬¬¬¬¬¬¬²¿ì/ûÛWVVVVVVÖ\12kîáýd-\18úϺ,#¦ßÀOÖÎZc]|\87{ž¾Áú\ 1\88­$\99
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_121_0.dat b/lib/phpqrcode/cache/mask_0/mask_121_0.dat
new file mode 100644 (file)
index 0000000..68810c3
--- /dev/null
@@ -0,0 +1 @@
+xÚíÛ1\ e\84 \10\ 5Ð\9eÓÀý/·\95\ 6w\rYMüSø Ä8>\ 42SÐûÖF O­E\ 3\8fÓÈÌÓc«W\\1dûÛ¼\9a\8b{c§æpK\9b\7f\9eB·Ð\9aþímû\8exhfffffffæ/s2\ fÛÇÚ2W|*÷d®1ÛÏÌÌÌÌÌÌÌÌÌê*5\ 6³ºÊ\19ÆÌÌÌÌÌÌÌ̬®RW©«\9caÌÌÌÌÌÌÌÌ\11söòËÁ\\14xm~8ß®¸\83r0wæjsdm÷ªýü&ó\aâyÙ\19
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_125_0.dat b/lib/phpqrcode/cache/mask_0/mask_125_0.dat
new file mode 100644 (file)
index 0000000..2c73ef1
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÛA
+\80 \10\ 5н§Ñû_®\95\91TH`3AO\97\13L\8f\vkí£\ 5ÍÃ(áÍÛewö\9bGWÖ\1eÙ××.í      #ÃÞ2¿û¡}        \ëçYú»¤´gggggggggg_d\8f>Ïïµòj^\99ÕØsíö;;;;;;;;;;»\1c'ÇÉqö;;;;;;;;;»\1c'Ë°Ëqþuìììììììì\1fµÇ_P\eì\89Íçö\97ÏóYwÄ\ 6{eÿ\9a=dÍ×ÌýþGû\ 6\93¸
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_129_0.dat b/lib/phpqrcode/cache/mask_0/mask_129_0.dat
new file mode 100644 (file)
index 0000000..812ee8a
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÛ1
+Å \10\ 5ÀÞÓèý/\97*\9f\84DøEØ'Éhgõ\18tÙ-ì}_£p\1fV\8b\ 4\18· \18\"Ìb=sþ\97ÁÌå\99ó[\83ÐJ\19\8cô=8DhÅoàºÛ\9e'\16\81\ 1\ 3\ 6\f\180XРÑ\1füÎÛ´\8f©è\91\18¬e \1e0`À\80\ 1\ 3\ 6\f\18\98\17ôÊ\fÌ\vj"\ 3\ 6\f\180`ÀÀ¼ Wf`^P\13\190`À\80\ 1\ 3\ 6æ\ 5½2\ 3ó\82\9aÈ\80\ 1\ 3\ 6\f\18¼Ò óÉôd\10\ e07(ì\13\93\7f<O\ 6\9dÁ\8a\ 6åo¡§ëÁ\97\r6\rÎSÞ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_133_0.dat b/lib/phpqrcode/cache/mask_0/mask_133_0.dat
new file mode 100644 (file)
index 0000000..03b41d3
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÛ1
+\800\f\ 5н§Iï\7f\8a¢\14\11ÚTyí\96)<4ä\ f\8dh§N¾\87\9a¨·]°èZ\8c­?¶\18[¿µH<\99\16u\85ïâÐFIø7®·´\9eRÛ`Á\82\ 5\v\16,X°ø±EÖÞ¹×Ë´]»Wg±¦\85\82\ 5\v\16,X°`!\8fØÁYÈ#æ\ 5\v\16,X°`Á\82\85<"\8fÈ#æ\ 5\v\16,X°`Á\82\85<b\ag!\8f\98\9d,X°`Á\82\ 5\8bW\16y\ fÉO\16\v4Ñ·\98¸wf¿á>Y\ 4\8b/XLÿGb\85yÁ"ê\ 6pT\1a\9d
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_137_0.dat b/lib/phpqrcode/cache/mask_0/mask_137_0.dat
new file mode 100644 (file)
index 0000000..f6d993b
--- /dev/null
@@ -0,0 +1 @@
+xÚíÜ1\ e\84 \10\ 5Ð\9eÓÀý/·\95+FÉZ\18\ fJ\9aÉ\vLæ7Ôº¬\16ØÝ*ÑBÚa%L~\9a\8cË»òä\94ÉØéÊ\93C\93ðJ\9b´YîIWJ ½\99ý.K]ñR\980aÂ\84   \93\17\9b\93ïI\19NTwÎlL\9e\9fè±L\980aÂ\84     \13&Ld@\19P\ 6ÔO\980aÂ\84 \13&L\980\91\ 1e@\19P?aÂ\84 \13&L\980aÂD\ 6\94\ 1e@ý\84 \13&L\980aÂäÏM²\9fIlL&)dl\12\98ígøÃacR\99<É$övê,ý\84ɺ?U2ç]
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_141_0.dat b/lib/phpqrcode/cache/mask_0/mask_141_0.dat
new file mode 100644 (file)
index 0000000..8c685c8
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜ=
+\800\f\ 6н§iï\7f9'EÑú\ 3ÖDxÍ\98%<lð[Zë|ZP­N      \1f¦\1dNÃæ\91M\7fÌ7;·múfov\ em\12\9c\f6-Ów³\1a§\ 4Þ¥}\95\14ã°aÃ\86\r\e6lØ°\19n\13ý_¼tÊeÒi\1fvØüËƾ±\8bÙ°aÃ\86\r\e6lØÈ\9aò\14\eYÓ.fÃ\86\r\e6lØ°a#kÊSldMû\86\r\e6lØ°aÃ\86\r\eYSÖ\94\e6lØ°aÃ\86\r\e6\83\1f\9cÙØ$\1aæÜ& 3dyãecSÙüÙ&ìNÕLû\86;&ëîº<
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_145_0.dat b/lib/phpqrcode/cache/mask_0/mask_145_0.dat
new file mode 100644 (file)
index 0000000..9c9c1ae
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜ;
+\850\14\ 4Ð>«Iö¿9+EñÇ{\88\19õ$åm\86\83^\98\8e§u¼³S"\ 2µÍD\8cþ6Ú\9f]9ùÉè8ìU\93\90\93bÔÒ¾£Y¤Òù\1f[ß2æ\8b\89Ä\88\11#F\8c\181bÄ\88\11£Ï\18%ôµiRN\9aæ½\9d\96ѳ\8dì#;\9b\11#F\8c\181bÄ\88\91N«¯1Òií#F\8c\181bÄ\88\11#F\8ctZ}\8d\91Nk\1f1bÄ\88\11#F\8c\181b¤Óêk\8ctZ;\9b\11#F\8c\181bÄèõF\19\8fV-\8cÂ\ 2\9d\euè"IoD-\8c*£7\19uû×jÚ>b´\7f\aMV\93+
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_149_0.dat b/lib/phpqrcode/cache/mask_0/mask_149_0.dat
new file mode 100644 (file)
index 0000000..d258350
--- /dev/null
@@ -0,0 +1,3 @@
+xÚíÜA
+\80 \10\ 5н§Ñû_®MEQXPà§\9e.Ý|\1e94³°ÖeµÁ{³JL¨v\9a\8aÕ#«^Ü÷Ïn[õ\fß?;µ
+ZIV-ñ»ÚÄ*\ 1wï¸Ë\921*\16+V¬X±bÅ\8a\15«ßX¥ü·¯g¥Ûw\8cèqX}ÇJ½RÛY±bÅ\8a\15+V¬X±beΠwfeΠ^±bÅ\8a\15+V¬X±bÅÊ\9cAïÌÊ\9cA½bÅ\8a\15+V¬X±bÅ\8a\959\83ÞÙ\9cÁ\9cA½bÅ\8a\15+V¬X±bÅ\8aÕl\95ó0ÞÎ*0Tßj`?\98ö\ 6ÝΪ²ú¢Õð;X\13ë\15«ë=\ 1zZr*
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_153_0.dat b/lib/phpqrcode/cache/mask_0/mask_153_0.dat
new file mode 100644 (file)
index 0000000..fc79e9e
--- /dev/null
@@ -0,0 +1 @@
+xÚíÜ1\ e\80 \f\ 5Ð\9dÓÀý/ç¤\91h¢&F¾ú`ìÒ¼@I;Pë¼ZÀ^­\12\95XÛÍ\8cÙmfÏÆ.\99=\eÛ5\v[if-õ\9c­R+!wr»Ë\9cg\jÌ\981cÆ\8c\193fÌ\981c\16f\96Ôo.±2¬\ f?\8a\9e\99\r\8c\193fÌ\981cÆ\8c\99¹\86\1e\9d\99¹\86\8c\193fÌ\981cÆ\8c\193fæ\1aztfæ\1aê\193fÌ\981cÆ\8c\193fÌ\98\99k\98k03×ð\ 60cÆ\8c\193fÌ\981cö\1a³¬Ï9;³ÐÄ\8eÍ\ 6ö\9b\89\7f`vf\95Ù\1fÌ\86ßÍ\9a\98\9dß\13\ 1¶W9
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_157_0.dat b/lib/phpqrcode/cache/mask_0/mask_157_0.dat
new file mode 100644 (file)
index 0000000..ad749f3
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜA
+\80 \10\ 5н§Ñû_®\95Q\14R\10ù©§»Y\r\ f\1dù\ekí«\85ìÍ*q͵ÓîØ=j7§~ÙnNýÔ.p%Úµäs·i¯\ 4ÝÕã.½×ÈöرcÇ\8e\1d;vìر{Ù.-W¬õ2={\8dêì¾mgÞy+رcÇ\8e\1d;vìØɳ2\19;yÖ¼cÇ\8e\1d;vìرcÇN\9e\95ÉØɳæ\1d;vìرcÇ\8e\1d;v2\99<ËN\9eõV°cÇ\8e\1d;vìر\93ge2vò¬yÇ\8e\1d;vìرcÇî¦]Þ\aÂ;»àæÆv\ 1¹"õ\8fÞ\9d]e÷'»\98;[\93ç\1d»û{\ 1¾|Aµ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_161_0.dat b/lib/phpqrcode/cache/mask_0/mask_161_0.dat
new file mode 100644 (file)
index 0000000..4bdc5fd
Binary files /dev/null and b/lib/phpqrcode/cache/mask_0/mask_161_0.dat differ
diff --git a/lib/phpqrcode/cache/mask_0/mask_165_0.dat b/lib/phpqrcode/cache/mask_0/mask_165_0.dat
new file mode 100644 (file)
index 0000000..3a17a05
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÝ;
+\800\10\ 5À>§Iî\7f9+Åà\17DyÁIÊ4Ë \e÷5Ö:¯\16¶W«Ä\16Ùv«dù¢åqñß\9cÜ´<\16þæd×2x%[¶\11\9eËU\99%ðÝÞî2×\1c]&K\96,Y²dÉ\92%Ë¡,S¿Õ\97\93r2ydÌ=,ÿk©_º{X²dÉ\92%K\96,Y²d)Û0\8f³\94\97,Y²dÉ\92%K\96,Y²d)Û0\8f³\94\97,Y²dÉ\92%K\96,Y²\94m\98Çe\e,e\eú%K\96,Y²dÉ\92%K\96,e\eæq\96²\rýÒÝÃ\92%K\96,Y²dÉ\92å\85\8f\1e\ 1\8a\8c\9a!Óÿ¡ÐYV\96,\ 3ßñ:B¿dù|O¨$*#
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_169_0.dat b/lib/phpqrcode/cache/mask_0/mask_169_0.dat
new file mode 100644 (file)
index 0000000..c4787d9
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÝ1
+\800\10\ 4À>¯Iþÿ9\e\15EQ\ 4Ñ=\98¤Ls\fæä¶IïË\1a\81{³Zt¡ã´R¦\1f\99þ}òÀôï\93SÓð\95n:ª|§\9bR[è\9d?î¶Ô\1d_*S¦L\992eÊ\94)S¦L\99\ 6\99&ϦëI\v\9aê¯O\982ÕOý£\982eÊ\94)S¦L\992e*C1ïËP\98ÊPôS¦L\992eÊ\94)S¦L\99ÊPÌû2\14¦2\14ý\94)S¦L\992eÊ\94)S¦Le(æ}¦2\14ý\94)S¦L\992eÊ\94)S¦Le(æ}¦2\14ý\94)S¦L\992eÊ\94)S¦³iöc7;Ó"\85Þ\99Fͦ\15Þ\90Ù\99v¦L\vÜý^¥\9f2}oOäß'r
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_173_0.dat b/lib/phpqrcode/cache/mask_0/mask_173_0.dat
new file mode 100644 (file)
index 0000000..5ef85e7
--- /dev/null
@@ -0,0 +1 @@
+xÚíÝ1\ e\830\10\ 4ÀÞ¯±ÿÿ¹T  \ 6¥\88¬[4véæ2\8a\16Øƽok\14Ý\87ÕÊ\ f;¦Ó²]fûô\13Ö\9eýdûä½ölj\e°\12lGÒÿö0n+\9c\ 5ß»m³G\8cË\96-[¶lÙ²eû"Ûêï·ûY»}o¯öíÀ\96íÕVÞÊ[¶lÙ²eË\96-[¶lÙ²e«\aÓÕ°Õ\83É[Ï2¶lÙ²eË\96-[¶lÙ²e«\aÓÕ°Õ\83É[Ï2¶lÙ²eË\96-[¶lÙ²e«\aÓÕ°Õ\83É[¶lÙ²eË\96-[¶lÙ²eËV\ f¦«a«\a\93·lÙ²eË\96-[¶lÙ²e\ef[ÿB°\93mа÷¶Eû\84\94;¶N¶\9d\9cT\b¸/r\92·lÿ¿?ØÔ*Ñ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_177_0.dat b/lib/phpqrcode/cache/mask_0/mask_177_0.dat
new file mode 100644 (file)
index 0000000..78a26a7
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÝ1
+\850\10\ 4Ð>§Iî\7f9+?\8a²Øèß\81\97\94\87\fd\9a̹¯Õx\1fÖ\88\18xÝNÌø/ÆÕ§|{öظ²ÿöìÖ8d¥\18¯´ÿø0òh\9e\11×=öùcFfÌ\981cÆ\8c\193fÌ\98q¼qÂ=ïw6Ê;l·»4cÆ\95±<\96Ç\8c\193fÌ\981cÆ\8c\193fÌXï¦\13Ò»1Ö»ÉcÆ\8c\193fÌ\981cÆ\8c\193fÌXï¦\13b¬w\93Ç\8c\193fÌ\981cÆ\8c\193fÌ\98±ÞM'ÄXï&\8få1cÆ\8c\193fÌ\981cÆ\8c\193Ö»é\84ôn\8cõnò\981cÆ\8c\193fÌ\981cÆ\8cÃ\8d3\1eU<\19\87\r\\e7í+\92Þ(<\19\8c\9f\19·Î\8a\99\96Ç\8cßÛ\eÕä4@
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_21_0.dat b/lib/phpqrcode/cache/mask_0/mask_21_0.dat
new file mode 100644 (file)
index 0000000..368c994
Binary files /dev/null and b/lib/phpqrcode/cache/mask_0/mask_21_0.dat differ
diff --git a/lib/phpqrcode/cache/mask_0/mask_25_0.dat b/lib/phpqrcode/cache/mask_0/mask_25_0.dat
new file mode 100644 (file)
index 0000000..e4a5b6d
Binary files /dev/null and b/lib/phpqrcode/cache/mask_0/mask_25_0.dat differ
diff --git a/lib/phpqrcode/cache/mask_0/mask_29_0.dat b/lib/phpqrcode/cache/mask_0/mask_29_0.dat
new file mode 100644 (file)
index 0000000..74a216b
Binary files /dev/null and b/lib/phpqrcode/cache/mask_0/mask_29_0.dat differ
diff --git a/lib/phpqrcode/cache/mask_0/mask_33_0.dat b/lib/phpqrcode/cache/mask_0/mask_33_0.dat
new file mode 100644 (file)
index 0000000..2ec712a
Binary files /dev/null and b/lib/phpqrcode/cache/mask_0/mask_33_0.dat differ
diff --git a/lib/phpqrcode/cache/mask_0/mask_37_0.dat b/lib/phpqrcode/cache/mask_0/mask_37_0.dat
new file mode 100644 (file)
index 0000000..1588cfc
Binary files /dev/null and b/lib/phpqrcode/cache/mask_0/mask_37_0.dat differ
diff --git a/lib/phpqrcode/cache/mask_0/mask_41_0.dat b/lib/phpqrcode/cache/mask_0/mask_41_0.dat
new file mode 100644 (file)
index 0000000..e369027
Binary files /dev/null and b/lib/phpqrcode/cache/mask_0/mask_41_0.dat differ
diff --git a/lib/phpqrcode/cache/mask_0/mask_45_0.dat b/lib/phpqrcode/cache/mask_0/mask_45_0.dat
new file mode 100644 (file)
index 0000000..452f126
Binary files /dev/null and b/lib/phpqrcode/cache/mask_0/mask_45_0.dat differ
diff --git a/lib/phpqrcode/cache/mask_0/mask_49_0.dat b/lib/phpqrcode/cache/mask_0/mask_49_0.dat
new file mode 100644 (file)
index 0000000..fdd2aac
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÕK\ eÀ \bEÑ9«\81ýo®#\e?H/\ 3\9b6\ 1g$Ï\13-\8dª­,X]  
+\98\9b\98;Àð·\98\fXÔ°ì9º\88<ÜѺ¤åq¤\8c2 Af÷îHð7ø\9d/\e5We\84\ 6\ 6#\19Ø\19áìfÞ¨ÁÐ?\18à®4û=N\1a\17 >Çæ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_53_0.dat b/lib/phpqrcode/cache/mask_0/mask_53_0.dat
new file mode 100644 (file)
index 0000000..572d279
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÖK
+@!\b\ 5й«Ñýo®QÑϺ:(\ 4m&Ü\ e¯\9e\10s-¹¬®\b\ eÉ6õÑZ{\90¥m4Y\86²Xâù®.FÀÙ­\8bê\1e¦XZi\ 5·Ðùj=:έÖ\8bbå¿\91VH\v\7f8\f\96#¤[\97ù²¾\ 1\ 6\8bãYÐ\19²ç¾^X\ 5Ô÷\15e
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_57_0.dat b/lib/phpqrcode/cache/mask_0/mask_57_0.dat
new file mode 100644 (file)
index 0000000..ea81e6d
--- /dev/null
@@ -0,0 +1,4 @@
+xÚíÖA
+À \f\ 4À{^\93üÿs=YLÕ\9a\r(
+\eo\81\96 j)\v¬ª\ 4
+Z7y\84Ùë\ 6Íñv\1f\13,Ô´ìwVQ    \9ei»¤ì\ 3GiÒ¤¹ÅDfÂÛ\95ÉÄ\19wo4ù\ fѤ¹ÐÄ\1eoÎL\ 6ÿÌéLȼÁ\9c©·\9bÁ³Õì}î4\1f\81\r
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_61_0.dat b/lib/phpqrcode/cache/mask_0/mask_61_0.dat
new file mode 100644 (file)
index 0000000..93d2444
Binary files /dev/null and b/lib/phpqrcode/cache/mask_0/mask_61_0.dat differ
diff --git a/lib/phpqrcode/cache/mask_0/mask_65_0.dat b/lib/phpqrcode/cache/mask_0/mask_65_0.dat
new file mode 100644 (file)
index 0000000..df29d7b
Binary files /dev/null and b/lib/phpqrcode/cache/mask_0/mask_65_0.dat differ
diff --git a/lib/phpqrcode/cache/mask_0/mask_69_0.dat b/lib/phpqrcode/cache/mask_0/mask_69_0.dat
new file mode 100644 (file)
index 0000000..8a2cfbd
--- /dev/null
@@ -0,0 +1 @@
+xÚí×K\ eÀ \b\ 4Ð=§\81û_®+\e­m\90ÏBìà\92d|Q\13"s+1®®È\1d"¯)\ 5,ß=\93EÛàa    TÄ"\19çÒÅ\90ãnæE-3\14\ 3\v,°À\ 2KY\8bw\1eÝ=Z\9a\7fZïT\vÞ.,°À\ 2K1\8bÿ#<X\12BtËâ<\8aþa\a\vÿÇbº#Îx/;X.\ 6®\87Ô
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_73_0.dat b/lib/phpqrcode/cache/mask_0/mask_73_0.dat
new file mode 100644 (file)
index 0000000..3de4606
--- /dev/null
@@ -0,0 +1 @@
+xÚíØ1\ eÀ \b\85á\9dÓÀý/×ÉFSM(\90´Æ\1f7\86\97/J\18Tme\81Ó\95¤\82l\9a´\81É×s\99|½©)YY\93UÝS\17%Á7{\1ei¹é(L\980moÊ짻'¯÷ãªw\82\89\19Ç\84       \13{\9c\8ccÂô\81\192\98\8a\82Ö¦À~ªøÃ\18Lz\96)üvZ5O\7f2]=\8có?
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_77_0.dat b/lib/phpqrcode/cache/mask_0/mask_77_0.dat
new file mode 100644 (file)
index 0000000..2717fd8
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíØA\ e\80 \fDÑ}OÓÞÿr®0  \81ÎBÃ/;b\86\17\10Hp/\15\8b­*K\87E7íG¶þ\10ã/_l}ïx\88\8bMP
+[(ç­\8a³ÄZÞ\9b\95lI\1c6lض´eÏ·³×\1e\98ìÝÍÆ^À\86\r\e6î,î,ö\ 26lØ&lù\a³Æ&\f\eÛ\16Ï^Õ\eWcó}m©5uåÿöEÛ\ 1;âe\1e
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_81_0.dat b/lib/phpqrcode/cache/mask_0/mask_81_0.dat
new file mode 100644 (file)
index 0000000..2d9a052
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíØ1\ e\80 \f\85ὧiï\7f9'\14\95\1aBß ñ\87\8dáñE¤Mpo#
\e&    \8c\a\8dÙ6ãõ)cæ~Úèb\14\r\951Ôß±\8b´â\19ߧµ|Y$F\8c\181N\1a\15õq_·´.¯Ôð¿\e¹3\181bÄ\88\91~M¿æÎ`Ä\88\11c\1co{B£807\16ú\8cò\8dôdt\8c\92³võÿøfã\ 6ßØÜþ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_85_0.dat b/lib/phpqrcode/cache/mask_0/mask_85_0.dat
new file mode 100644 (file)
index 0000000..eb8197b
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíØ1
+À \f\85á=§Iî\7f¹N\16E\91Z_\86À\1f·\f¯\1fm E÷Vqyº2Yh,S\8b[Ïú\9f­gý¥UXJkd¼×.Ö\ 4ß~>Ö\9e!\8dÅ\8a\15+V¬å¬ª½õöí÷.Ýõ±2¯X±bÅ\8a\95ÿ\ 1¬Ì+V¬X±\96²ê.ö\akBèÞz±·Ôwð\83Õ±¦Ì\80gÌk\ 5ë\ 3¡YZý
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_89_0.dat b/lib/phpqrcode/cache/mask_0/mask_89_0.dat
new file mode 100644 (file)
index 0000000..aaa4c52
--- /dev/null
@@ -0,0 +1 @@
+xÚíÙ1\ e\80 \f\85ὧiï\7f9'\8c\88\80Ñ×\ 1ýËHl?L\13\9aà^"\ 4ë\10&M\1c\97\99?bî\97\1c\7fqÃÜ?˸äÉ,\ eµ9²þó!µ\89z¢]VêÈScÆ\8c\193æ_\9a\95÷à¾cÓé!\1eî`nÍô3fÌ\981cÆÌ\8c\84\99\19   3fÌ\981/fÖ>.Uæ¤ÄcóË»;ã\r¨2;æ\99\e\9eÕÏ+\997\17\eÞý
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_93_0.dat b/lib/phpqrcode/cache/mask_0/mask_93_0.dat
new file mode 100644 (file)
index 0000000..e218fa0
--- /dev/null
@@ -0,0 +1,3 @@
+xÚíÙK
+À \fEÑyV\13÷¿¹\8e,ÚO¬mÞ rãPH\8e\120 {\8d\92´\9a°ôäå2ûbö¨ìýÞc{t¦Qá\83]\10
+{QÞ{\93Þ\12{弬Ö\92¤Ç\8e\1d;vìØ_Ú³ßÕ}ÏÂ÷ýËL\80}l§ß±cÇ\8e\1d;vìÌ\91Ì\91Ì\91رcÇ\8e\1dû¢öü\ fÐÎ.L\1eÛ\13æ\19Õ\1fegwì3ö´\9eqe¿ÿѾ\ 1@\8fi\1c
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_0/mask_97_0.dat b/lib/phpqrcode/cache/mask_0/mask_97_0.dat
new file mode 100644 (file)
index 0000000..74ac719
Binary files /dev/null and b/lib/phpqrcode/cache/mask_0/mask_97_0.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_101_1.dat b/lib/phpqrcode/cache/mask_1/mask_101_1.dat
new file mode 100644 (file)
index 0000000..ec939b5
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÖ1
+À \f\ 5н§\89÷¿\\17Q÷ªEóþ¢d   \ f       1¢¦ÌNô<±#½ËÕ\96¯Õ\1f-7u\99þ.ÃÓl²Ô¦eiXXXXXRZVíÊVeIo1û,,,,,v%\8b?\8cÙgaaaa±÷YÌ\v\v\v\vK&K=/·\9c·+Û\8då\10˱ó²Öò\ 2¼Þ\8eã
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_105_1.dat b/lib/phpqrcode/cache/mask_1/mask_105_1.dat
new file mode 100644 (file)
index 0000000..e1f5c99
--- /dev/null
@@ -0,0 +1 @@
+xÚíÖ1\ e\80 \f\ 5ÐÝÓ\94û_Î¥\ 1\17\a\87b\80÷\17\rKóB¬?"Ó*\12#WÌÊ\98t\80éÍùíügÓ\8e\93JîéqU\13M9¸\95\87\89\89\89\89©ÔTù\7fêçLLv\ 4\13\13\13\13\13\93¾Ç¤ïÙ\11LLLLLLz\ 4\93¾gG01111\15\9aòy\84\1eÑß\98\964mð=Õ\9bn§¥+2
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_109_1.dat b/lib/phpqrcode/cache/mask_1/mask_109_1.dat
new file mode 100644 (file)
index 0000000..7e0d6d1
--- /dev/null
@@ -0,0 +1 @@
+xÚíÖ±\rÀ \f\ 4À>Ó\98ý\97K\83\80\ 1°\95À}\93\88Æ:!£\8fèiY\89\99'*3§]fÛsþ\ 1ÛÉÓÒîm¹ºb[\1fÞJÂÆÆÆÆÆƶÅ\96ÝKÆ9\e\9b}ccccccÓ'u.6ûÆÆÆÆÆÆƦs±é\93Þ\126666¶R[ÿ^gû{/\19\7flÇØ\ eÙ·\1aÛ\vÞ7Í\82
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_113_1.dat b/lib/phpqrcode/cache/mask_1/mask_113_1.dat
new file mode 100644 (file)
index 0000000..1dd666d
--- /dev/null
@@ -0,0 +1 @@
+xÚíÖ1\ e\80 \10\ 4ÀÞ×\1cÿÿ\9c\r\ 1\e\13-8\ 5f\eL(pB\8elDM\19\99è9";ýÄ-\8d÷ò÷;?1îpâÐ{¼\å\aÆú\ 3%-\8c\8c\8c\8c\8c\8c\93\183:@Ûad4\8f\8c\8c\8c\8c\8c\8c\8c\8cú*£NîÍaddddddÔÉ\19\19Í#######ã#c]75®ÓåÚ\17ã¢Æåæ1Ïx\ 2\7fYuñ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_117_1.dat b/lib/phpqrcode/cache/mask_1/mask_117_1.dat
new file mode 100644 (file)
index 0000000..8921f64
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÖ»\rÀ \f\ 5À>Ó\98ý\97K\83\80\ 1ø$ø^\ 3\92\v8Y\96\1cQSV'z\9e8\91þjzëÌÊ\87¬\99^]Þסµ\87¬õ\13ekXYYYYYYY\7fjݵ#¶
++«yeeeeeeeeµ#²²\9aWVVVVVVVV;"+«yeeeeeee\9dl­'ëe;b»±&²^9¯{­/ÊJ$p
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_121_1.dat b/lib/phpqrcode/cache/mask_1/mask_121_1.dat
new file mode 100644 (file)
index 0000000..64bd8ba
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí×1
+À \f\ 5н§\89÷¿\\97 ¥C¡PbÑ\97EÁÁ<DñGdµ\8a\8aQG̪±3óèð©û×k?3ï¸sÉ9_\8ez¢9\eiåÅÌÌÌÌÌÌÌ|3WþÃú\1a3³ûÌÌÌÌÌÌÌÌÌ,WÉ\18Ìr\957\8c\99\99\99\99\99\99\99\99YÆ`\96«¼aÌÌÌÌÌÌÌÌ\1f\9bsd^ü¿ÝgÌÛ\9a\17¿Ïõæ\134\1aØð
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_125_1.dat b/lib/phpqrcode/cache/mask_1/mask_125_1.dat
new file mode 100644 (file)
index 0000000..d5881dd
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí×1
+À \f\ 5н§\89÷¿\\97 \1d:\8a\11òþÒ\82\83>$\92DdÆ©ÄÊ\13\95Y»³ÿ\9ftëÚ\85öλ\1f»÷ÏÕ\17Ûó0£$ìììììììììì\9bì§ûù¹ÆήÞÙÙÙÙÙÙÙÙÙÙõóììê\9d\9d\9d\9d\9d\9d\9d\9d\9dÝ\1cg\96a7ÇyëØÙÙÙÙÙÙÙ¯³ç\97½Y??ÿØÙ{Õ{\8dý\ 5¾D\93\8f
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_129_1.dat b/lib/phpqrcode/cache/mask_1/mask_129_1.dat
new file mode 100644 (file)
index 0000000..62cd1c9
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_129_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_133_1.dat b/lib/phpqrcode/cache/mask_1/mask_133_1.dat
new file mode 100644 (file)
index 0000000..18d68dc
--- /dev/null
@@ -0,0 +1 @@
+xÚí×1\ e\80 \f\ 5ÐÝÓ\94û_Î\85\80\93ºh«¼¿h\98\9a\17Ò|"zÚÛ\89\99-*dNÁâÔâÙóÂ\16¦H¼\17\87«QÄ¢\ fÕRÃ\82\ 5\v\16,X°`ñc\8b¬Þ9ÎY°(na_°`Á\82\ 5\v\16,Xè\9d,XØ\17,X°`Á\82\ 5\v\16Þ#:8\vï\11»\93\ 5\v\16,X°`ÁBïdÁ¾`Á\82\ 5\v\16,X|Ï¢\7fY\X¬Ö;Ç\1f\v\167-\16Ý\17¹\16;\9d\v\1a`
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_137_1.dat b/lib/phpqrcode/cache/mask_1/mask_137_1.dat
new file mode 100644 (file)
index 0000000..284d7be
--- /dev/null
@@ -0,0 +1,3 @@
+xÚí×1
+\800\f\ 5ÐÝÓ¤÷¿\9cKh]D\11¥\91¾,-t \8f\12ò#²Ú\8c\8aQ[T©Ñ   \93K\93s§7_\8a\9bè¤È?9|\95B&ÙX\9b^L\980aÂ\84ÉÂ&3÷\93þÂ\84É\ f\13&L\980aÂ\84       \13&2 ¼ÃD\ 64c\990aÂ\84 \13&L\98È\80ò\ e\13\19Ð\8c\84 \13&L\980ab·\97w\98È\80f,\13&L\980aÂ\84É7&y2¹a²ònßoL\98<01O
+\98ì\ 4¾ç 
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_141_1.dat b/lib/phpqrcode/cache/mask_1/mask_141_1.dat
new file mode 100644 (file)
index 0000000..83220dd
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí×1
+À \10\ 4À>¯9ÿÿ¹4¢6)\ 4\83\173×$`s\f²¸\11uÊ®\89>Wd\9a¾\r\9b)\9b\95'\1f°±MÂ{3\\9dd6u¹\92bØ°aÃ\86\r\e6lؼn³û]ÜNØ°9ÄFÞ°aÃ\86\r\e6lØ°a£3°a#oØ°aÃ\86\r\e6lØ°Ñ\19Ø°Ñ5e1\e6lØ°aÃ\86\r\e]S\9fb£kÊ\e6lØ°aÃ\86\r\9b\13\97ͤÍß;CûcÃf\91\8d¼Ids\ 3\90G¹ÿ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_145_1.dat b/lib/phpqrcode/cache/mask_1/mask_145_1.dat
new file mode 100644 (file)
index 0000000..6a9950f
--- /dev/null
@@ -0,0 +1 @@
+xÚíÜ!\ e\800\10\ 4@Ïk®ÿÿ\1c¦¡\18\f4a)³\ 6qæ2i.YCUO{35²UZÆF\8cn\e]ÏfN>bd£ðwtzJ\81F}Á\16\13F\8c\181bÄ\88\11#F\8c\18ýÆ(¡¯\1d\13F\8c\166r\8f\181bÄ\88\11#F\8c\181ÒE\181ÒiÝlF\8c\181bÄ\88\11#F\8ct\11F\8cÜ#F\8c\181bÄ\88\11#F\8ctZ}\8d\11\88\11#F\8c\181bÄ\88Ñl£þeôÀH\17ÉùG\14£µ\8dÜ£@£\1dÙ\9d\92î
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_149_1.dat b/lib/phpqrcode/cache/mask_1/mask_149_1.dat
new file mode 100644 (file)
index 0000000..02a3cdc
--- /dev/null
@@ -0,0 +1 @@
+xÚíØ1\ e\80 \f\ 5ÐÝÓ\94û_Î\85\88\83qÁH\eÞ_\1cX\9a\17òc\89èi«\13#GdÌ\98\8aÕ\94Õ\9bá÷g\85¬LUè^Ý®VR«>dK\15V¬X±bÅ\8a\15+VÛXeùo¿ÎX±ÚÌJ_±bÅ\8a\15+V¬X±bÅÊ;\83Ý\99\15+}Å\8a\15+V¬X±bÅ\8a\15+VöAV¬ô\95ngÅ\8a\15+V¬X±bÅ\8a\95}\90\15\fú\8a\15+V¬X±bÅ\8a\15«\15VýËjÒÊ>øhewfõ\9b\95¾*`u\ 2T\ 6
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_153_1.dat b/lib/phpqrcode/cache/mask_1/mask_153_1.dat
new file mode 100644 (file)
index 0000000..2abfca2
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíØ1
+\800\10\ 4ÀÞ×\þÿ9\9bÃ\bb\17t\ 3³\8dE\9ac\b'\9bªÎHHÍ\1c\95\9a9\19³efß\9emff²MïÙíª\ 5\9bõ #.Ì\981cÆ\8c\193fÌ\981c\16f\96Ô7¯3fÌ\98ÙgÌ\981cÆ\8c\193fÌ\981c¦o2cæ]Ã?\80\193fÌ\981cÆ\8c\193fÞ5ôMfÌì3fÌ\981cÆ\8c\193fÌ\981Ó7utfÌì3fÌ\981cÆ\8c\193fÌ\98=ÌúËl¡\99¾ùj¦£3ûÕÌ>ÛÈì\ 4¤ÐVü
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_157_1.dat b/lib/phpqrcode/cache/mask_1/mask_157_1.dat
new file mode 100644 (file)
index 0000000..17344b8
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí×1
+À \10\ 4À>¯9ÿÿ¹4\12\90d/Ì5\82Õ1ÈÊVÍ\19)Sk\8eJ\9eµ\1d»­vßÜ7´³Ý\ fÞÝíé\85ÛÍeGä°cÇ\8e\1d;vìرc÷²]Z¯¸îÙ±c'ïرcÇ\8e\1d;vìرÓ+رÓgå\1d;vìرcÇ\8e\1d;}V¯`ÇNÞù+رcÇ\8e\1d;vìØé\15:\19;vò\8e\1d;vìرcÇ\8e\1d\82\1d;}VÞ±cÇ\8e\1d;vìص±\9b'»ÍvzÅ#;\9d\8c]\8c\9d¼klw\ 2¯oA`
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_161_1.dat b/lib/phpqrcode/cache/mask_1/mask_161_1.dat
new file mode 100644 (file)
index 0000000..669ade1
--- /dev/null
@@ -0,0 +1 @@
+xÚíØ1\ e\800\b\ 5ÐÝÓÐû_Î\85X\17\17Ó\18¨\8fÅ¡\vyi~\85\88¬Q©bÖ\11ÕkvÈp±á³ê7'M\ru¸Ù=¼]Å\ 6\86Ùð([\f\192dÈ\90áÏ\f+þÛ\'\f\192\94\87\f\192dÈ\90!C\86\f\192´s0/3d(\ f½)\f\192dÈ\90!C\86\f\1924ë1dhç \ f\192dÈ\90!C\86\f\192dhÖcÈ\90¡<dÈ\90!C\86\f\192dÈ\90¡\9d\83y\99!CyèMaÈ\90!C\86\f\192dØÞ0¿\f\97\e\9aõ^\18\9a\97\19\164\94\87[\19\9e\8bE2\8f
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_165_1.dat b/lib/phpqrcode/cache/mask_1/mask_165_1.dat
new file mode 100644 (file)
index 0000000..abb48f0
--- /dev/null
@@ -0,0 +1 @@
+xÚíØ1\ e\80 \f\ 5ÐÝÓ\94û_Î¥\11\16\17\13LK^\17\a\96æ\85\14\7f#²Fµ\8aYWt¨Ù%Ë\8d\96ïÂÿ\9c4¶ÔåÁ÷r¹\9aM,³éQºX²dÉ\92%K\96,Y¶²¬ú¯þ\9c°dÉÒ¼dÉ\92%K\96,Y²dÉ\92%K\19\92%K»\ró\92%K\96,Y²dÉ\92%K\96v\e2$K\96v\eÞ\1e\96,Y²dÉ\92%K\96,YÊ\90ò8K\96楷\87%K\96,Y²dÉ\92%K\962$K\96,ÍK\96,Y²dÉ\92%K\96,ÛZæ\97åVK\19ò£¥<β\89¥yy¤å\r\99ó)Î
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_169_1.dat b/lib/phpqrcode/cache/mask_1/mask_169_1.dat
new file mode 100644 (file)
index 0000000..ba21b71
--- /dev/null
@@ -0,0 +1 @@
+xÚíØ1\ eÀ \b\ 5н§Áû_®\vÑîM,ØÇâàB^\fæ\13\915*V¬º¢K­N\99n2ýú¦¹©N\7fòN\1f\91i6>Ê\17S¦L\992eÊ\94)S¦L\99\16\9c\rS¦LÍS¦L\992eÊ\94)S¦L\992\95Må}¦LÍS\7f\14S¦L\992eÊ\94)S¦LeSy\9f)SóÔ\1fÅ\94)S¦L\992eÊ\94)S;\14Ù\94)S;\14ó\94)S¦L\992eÊ\94)S¦v(²)S¦v(æ)S¦L\992eÊ\94)S¦íLódºÍT6}a*ï3mlj\9e\1emz\ 3C\13'\1d
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_173_1.dat b/lib/phpqrcode/cache/mask_1/mask_173_1.dat
new file mode 100644 (file)
index 0000000..436918c
--- /dev/null
@@ -0,0 +1 @@
+xÚíØ1\ e\80 \f\ 5ÐÝÓ\94û_Î¥\11''Ó@y]\1cX\9a\17ò1?"g¬:1ç\8a\9dfn˶ÌöË»ö¬\81­m\ f¼·¯«»\99m.?¶\18¶lÙ²eË\96-ÛF¶«ÿß>glÙ²\95·Þ2¶lÙ²eË\96-[¶lÙ²e«O`Ë\96­¼eË\96-[¶lÙ²eË\96-[¶lõ lÙ²\95·lÙ²eË\96-[¶lÙ²eËV\ f¦O`Ë\96­¼eË\96-[¶lÙ²eË\96-[¶z0}\ 2[¶z0yË\96-[¶lÙ²eË\96-[¶E¶ùe[h«OøÍVWö\85­¼=Ìö\ 6tÿ*|
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_177_1.dat b/lib/phpqrcode/cache/mask_1/mask_177_1.dat
new file mode 100644 (file)
index 0000000..12e2e52
--- /dev/null
@@ -0,0 +1 @@
+xÚíØ1\ e\80 \10\ 4ÀÞ×\1cÿÿ\9cÍE¨¬\8cp0×XÐà\84,a#rÚÊ\13}®¨6}Ç\8c§\18¿Ùÿ»¶\89±\1d\1f~\8e\87£\Ð8\7f \95\19Æ\8c\193fÌ\981cÆ\8c\19\977®ðÎ{Ö\183f,\8fÝy\8c\193fÌ\981cÆ\8c\193fÌX_¡¯`ÌXï&\8f\193fÌ\981cÆ\8c\193fÌ\98±ÞM_Á\981cyÌ\981cÆ\8c\193fÌ\981cÆ\8c\19ë+\183f,\8fÝy\8c\193fÌ\981cÆ\8c\193fÌX_¡\13bÌXï&\8f\193fÌ\981cÆ\8c\193fÌx\11ãü2\9ed¬¯øÔX'Äx[cy|¨ñ\r¸\95
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_21_1.dat b/lib/phpqrcode/cache/mask_1/mask_21_1.dat
new file mode 100644 (file)
index 0000000..f87e0a1
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_21_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_25_1.dat b/lib/phpqrcode/cache/mask_1/mask_25_1.dat
new file mode 100644 (file)
index 0000000..3a225e3
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_25_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_29_1.dat b/lib/phpqrcode/cache/mask_1/mask_29_1.dat
new file mode 100644 (file)
index 0000000..0a1cb3b
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_29_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_33_1.dat b/lib/phpqrcode/cache/mask_1/mask_33_1.dat
new file mode 100644 (file)
index 0000000..318949d
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_33_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_37_1.dat b/lib/phpqrcode/cache/mask_1/mask_37_1.dat
new file mode 100644 (file)
index 0000000..5bd9e3a
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_37_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_41_1.dat b/lib/phpqrcode/cache/mask_1/mask_41_1.dat
new file mode 100644 (file)
index 0000000..52e9e58
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_41_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_45_1.dat b/lib/phpqrcode/cache/mask_1/mask_45_1.dat
new file mode 100644 (file)
index 0000000..b35c567
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_45_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_49_1.dat b/lib/phpqrcode/cache/mask_1/mask_49_1.dat
new file mode 100644 (file)
index 0000000..d20d717
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_49_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_53_1.dat b/lib/phpqrcode/cache/mask_1/mask_53_1.dat
new file mode 100644 (file)
index 0000000..a676d7d
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_53_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_57_1.dat b/lib/phpqrcode/cache/mask_1/mask_57_1.dat
new file mode 100644 (file)
index 0000000..896ed43
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_57_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_61_1.dat b/lib/phpqrcode/cache/mask_1/mask_61_1.dat
new file mode 100644 (file)
index 0000000..4165a4b
--- /dev/null
@@ -0,0 +1 @@
+xÚ30\80\ 2Cb\81\ 1\ 2p\19P\ 2\10º\a\99ÝØÅi`÷@ê&ÚßH^§Ðn¨a\86d\81Q»Gí\1eµ{Ôn<v\93Z®ÁÅGí\1eMk£v\8fÚ=j7¶¶â ³\9bÖå\1a9mäán7\9dâ\9b\ 1ª³Âh
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_65_1.dat b/lib/phpqrcode/cache/mask_1/mask_65_1.dat
new file mode 100644 (file)
index 0000000..db8db88
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_65_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_69_1.dat b/lib/phpqrcode/cache/mask_1/mask_69_1.dat
new file mode 100644 (file)
index 0000000..03bba65
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_69_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_73_1.dat b/lib/phpqrcode/cache/mask_1/mask_73_1.dat
new file mode 100644 (file)
index 0000000..a729fdf
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_73_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_77_1.dat b/lib/phpqrcode/cache/mask_1/mask_77_1.dat
new file mode 100644 (file)
index 0000000..0fe0b03
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_77_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_81_1.dat b/lib/phpqrcode/cache/mask_1/mask_81_1.dat
new file mode 100644 (file)
index 0000000..eacbdb1
Binary files /dev/null and b/lib/phpqrcode/cache/mask_1/mask_81_1.dat differ
diff --git a/lib/phpqrcode/cache/mask_1/mask_85_1.dat b/lib/phpqrcode/cache/mask_1/mask_85_1.dat
new file mode 100644 (file)
index 0000000..b8a20c7
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÙ1
+À \f\ 5н§\89÷¿\\17©]\8b\894ðþ\98A\1fA        hÄÌØM¬\Q\91µjsë·úAk§U·ûújm\91un2RÃÊÊÊÊÚÎ\9a\9e:k;«»ÅÊÊÊÊjƲº[¬¬¬¬eoÅí­\7f\9b[\99oð¬\15ÿ[ÇÎk®õ\ 6¨ðZä
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_89_1.dat b/lib/phpqrcode/cache/mask_1/mask_89_1.dat
new file mode 100644 (file)
index 0000000..e9d226f
--- /dev/null
@@ -0,0 +1 @@
+xÚíÙ1\ e\80 \f\ 5ÐÝÓ\94û_Î\85\b\8bN\85h}\7f\83@ iDOËH\8c\1c±*cä"æûµ<öØgþâÈ)û<mõBs\9f¨¥\87\99\99\99\99ù\97æÌwðja.av\a\99\99\99\99\99ý\91ü7\98ÝAffff極\892æ·¾ÝÙ5 æ\1duØ­ç9ß|\ 2²\eÞä
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_93_1.dat b/lib/phpqrcode/cache/mask_1/mask_93_1.dat
new file mode 100644 (file)
index 0000000..f37836c
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÙ;
+À \10\ 5À>§Ñû_.\8dÄ4I\91ìâ\87\82\8e¢¸`)-5*¥ç(\99é£of\7f[Ósm\80}åÑÃöý¶õÉö6YM      ;;;;;ûG{ô»zÕØ·µ»«ìììììììz1vw\95\9d\9d\9d\9d\9d}\9c=úwu\16ûìýLÆ\1f%û?û"ç=Ç~\ 2e\97i\ 3
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_1/mask_97_1.dat b/lib/phpqrcode/cache/mask_1/mask_97_1.dat
new file mode 100644 (file)
index 0000000..24fa60f
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÙ1
+À0\b\ 5н§1÷¿\\97ÐtncKÌû«\83<D\10\8cèi3\13#Gdgt(lxVûÉP¡ÃÔ9ÜFñ\81¡7lia``````ØÞ\90q/]5\86­\fv\9a\81\81\81\81\81\81Á½Äàne``````xùÛ-mXá^Êú±3Ì5,´\ fy\86\13-\86ù#
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_101_2.dat b/lib/phpqrcode/cache/mask_2/mask_101_2.dat
new file mode 100644 (file)
index 0000000..e39fd2c
--- /dev/null
@@ -0,0 +1,3 @@
+xÚíÚ1
+À \f\ 5н§\89÷¿\9c\8bC\87â \89Ux!\93\ 4\1e\ e\92?\181ªe÷«\9e ä)\9fç\93ás\94Ê*¼KÛ®Lfò\9aB¡P(\94ÝJÖ®¤Ü¨x/\14
+\85B\91a(2\f\85B¡P(2\fE\86¡P(\14ʲR÷Så(%qWR®S¼\97ÿ\94\ eiY\89\ 2
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_105_2.dat b/lib/phpqrcode/cache/mask_2/mask_105_2.dat
new file mode 100644 (file)
index 0000000..7b63e31
--- /dev/null
@@ -0,0 +1 @@
+xÚíÚ!\ eÀ \10\ 4@ß×\1cÿÿ\M\83«iØp4sÁ\80\99 6¬ ê\99\91Ys®"\ 5¤7þÛù&)=ñ;\8d\rÒÜ\8cð"\91H$Ò\8f¥µ¯;é|I\9eH$\12\89DÒ÷t#}O\9eH$\12\89DÒ÷Hú\9eä\92H$\12©·\94þ­ÕIZß#HgKòÔJº\ 1t\94$\95
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_109_2.dat b/lib/phpqrcode/cache/mask_2/mask_109_2.dat
new file mode 100644 (file)
index 0000000..252f6d8
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÚ1
+À0\b\ 5н§1÷¿\\97@¶NÖ\88<q\92À#\83ð\a#v­ßúÔ\13´\12-e~_«¨\8a¿­[Ú÷«ä¦Ñh4\1a\8d6JK\9eÓFjö\8dF£Ñh4\9aÌE\93'i4\1a\8dF£É\934y\92F£Ñh´¾ZÁEcS-;\97Ð&jö­©ö\ 2\8c³Æñ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_113_2.dat b/lib/phpqrcode/cache/mask_2/mask_113_2.dat
new file mode 100644 (file)
index 0000000..26b5d7e
--- /dev/null
@@ -0,0 +1 @@
+xÚíÚ1\ e\800\b\ 5ÐÝÓÐû_ÎÅ¡\13\89\89Ъ\8f0óÚ\81ä\ fD\5*{ª#\88½bò\92H'o+vUÓ\1fÇR1\9fPÐD"\91H$\12ï\89\15\19\80ø\aÑ>\12\89D"\91H$ÊäD\99\9cH$\12\89D"Q&\97WerûH$\12\89D"ñ\11±ç*x[±(Ë\11?/ÚÇ÷\88'\9f\8and
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_117_2.dat b/lib/phpqrcode/cache/mask_2/mask_117_2.dat
new file mode 100644 (file)
index 0000000..b4dcce4
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÚ1
+À \10\ 4À>¯9ÿÿ¹4!m dO\83s\§0X,laÕ5#¿÷\1cE\9dª¾>Z[í\9cÖ·\8eÉêã½ÄR©T*\95J¥R?Q\13-\9cº«*¯T*\95J¥R©º?U÷\97W*\95J¥R©TÝ\9fªûË+\95J¥R©Ô¤Úùó~m5Õ\11©;ªòúSõ\ 4\a&\1c+
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_121_2.dat b/lib/phpqrcode/cache/mask_2/mask_121_2.dat
new file mode 100644 (file)
index 0000000..a2a0097
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_121_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_125_2.dat b/lib/phpqrcode/cache/mask_2/mask_125_2.dat
new file mode 100644 (file)
index 0000000..0ea40fd
--- /dev/null
@@ -0,0 +1 @@
+xÚíÛ!\ eÀ \f\ 5P¿Ó\94û_\ e\83@\rU(Ûkp@^\10\ 5\11£Ú®5Õ\13ôªúËîòâ-ú\89:ðöVF_\9eÌ\t:\9dN§Óétú÷õ¼y\9eN×qt:\9dN§Óétº\1cG\97ãô;\9dN§Óét:\9d.ËÐå8:\9dN§ÓétzA}ÿ\ fµ\8bôÔy\9eN×q¿Ñ;+n\8a&
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_129_2.dat b/lib/phpqrcode/cache/mask_2/mask_129_2.dat
new file mode 100644 (file)
index 0000000..bf04839
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÛ1
+À0\b\ 5н§Ñû_®KÈVÚ¡¨\81'.Éô\b\bþ!\11«²¶w]A0XðÄú÷~\98 «ÚÞ \a        ö!\9b\9a\80\80\80\80\80\80࣠fK# x\13\98F\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2y\81\80À4\12\10\10\10\10\10\10\10È\vve\ 2y\81\80\80\80\80\80\80\80@^°+\13È\v\ 4\ 4\ 4\ 4\ 4\ 4\ 4ç\vº~\99\9e ¨Û\13        \bL#Áê\eveI\8f
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_133_2.dat b/lib/phpqrcode/cache/mask_2/mask_133_2.dat
new file mode 100644 (file)
index 0000000..9e78b6d
--- /dev/null
@@ -0,0 +1,10 @@
+xÚíÛ1
+À \f\ 5н§\89÷¿\9c\8bà&´`¢ô\85Lâð\10\94üÁ\88Q-½g=Aq\95bëú¹\8aʪ<\8bv\9ab½+©)((((((((Ê\14\14\14\1f\14n*\ 5\ 5\ 5\ 5\ 5\ 5\ 5\85<b\ 6§\90G(((((((((ä\11
+yÄ{AAAAAAAA!\8f\98Á)ä\11
+
+
+
+
+
+
+\8a\95¢ð'ùe\8a¬¹\93\82â½ÂMý©¢\ 3fv\10{
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_137_2.dat b/lib/phpqrcode/cache/mask_2/mask_137_2.dat
new file mode 100644 (file)
index 0000000..95c3c48
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜ1
+À \f\ 5н§\89÷¿\\97\ eN\82\bI,/d+Ê£`ð/F|5*zª'H.\94,xëO[K\9aKª«ø\9f\8c\96\92õ\ e\89MBBBBBBÒT\92|?!!9\948Å$$$$$$$$$$2 \89\fh\9e\90\90\90\90\90\90\90\90\90\90È\80$2 yBBBBBBBBBB"e\90È\80æ                                                               É\9f$µ¯IÜ%É¿Û\93\90\9cH\9cb\92©_xêÛë
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_141_2.dat b/lib/phpqrcode/cache/mask_2/mask_141_2.dat
new file mode 100644 (file)
index 0000000..da07da2
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜ=
+À \f\ 6н§\89÷¿\9c\8bt*-\88?±¼\90M\85\87\10á[\8chUöõ]WÐüB\13¯ç;\96ÎÔd¨\14wS\92j>÷­l\1a\1a\1a\1a\1a\1a\1a\1a\1a\9a\r      \86\86f\8eÆ\84ÓÐÐÐÐÐÐÐÐÐÈ\9a44²&\r\r\r\r\r\r\r\r\r\8d¬)OÑÈ\9aÞ\e\1a\1a\1a\1a\1a\1a\1a\1a\1a\1aY\93FÖ4á444444444c4\19~\9c9S³:3ÐÐ\8c×\98p\9aÇ®>\ 3®\a
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_145_2.dat b/lib/phpqrcode/cache/mask_2/mask_145_2.dat
new file mode 100644 (file)
index 0000000..9ff2bbf
--- /dev/null
@@ -0,0 +1,4 @@
+xÚíÜ1
+À \f\ 5н§ùÞÿr]
+Ý,t\88Q^È&ÊC\88ð\17\93§ÆÒ~ë
\89¢Éj~mɾ¢.Õå\8eFgÑüì\ 5MDDDDDDDDDDDÔST\99×\88\88êD¦\9f\88\88\88\88\88\88\88\88\88\95\8e\88dZï\11\11\11\11\11\11\11\11\11\11\91L+¯\11É´DDDDDDDDDDD2-\11\91é'"""""""":BÔäת½EåY\84\88¨Ddú\89¾û\ 6\86\v\86\8a
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_149_2.dat b/lib/phpqrcode/cache/mask_2/mask_149_2.dat
new file mode 100644 (file)
index 0000000..d52e048
--- /dev/null
@@ -0,0 +1 @@
+xÚíÜ;\ e\80@\b\ 5ÀÞÓÀý/gcaGÖBX\1dBç'\93-\88¼Â\88«²»ou\ 4Õ§UQ½dõRVOm¡\9aT\83Î*Ç«Ê;;\9a\8a\8a\8a\8a\8a\8a\8a\8a\8aj¨ªå»\9d\8aªEe2PQQQQQQQQQQQÉ\19¨¨ä\fTTTTTTTTTTTTr\ 6»3\95\9cÁ¼¢¢¢¢¢¢¢¢¢¢¢\923ØR©ä\f&\ 3\15\15\15\15\15\15\15\15\15ÕßTsþ\8c·»ªk\1f¤¢z_e2P=ê\13 ïd\99
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_153_2.dat b/lib/phpqrcode/cache/mask_2/mask_153_2.dat
new file mode 100644 (file)
index 0000000..3b06041
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜ1
+\800\f\ 5ÐÝÓ¤÷¿\9c\8b8ZP!¿úB¶Òòè\10è\1fZuÔÈ賶"û\93ìbuºñö\99\8bÈÒ*îÎÆ\ 2²é)]MFFFFFFFFFFFFö\86¬%= #\8b\91\99\1addddddddddddr\rot2¹\86yFFFFFFFFFFFF&× #\93k\90\91\91\91\91\91\91\91\91\91\91\91\91É5ÈÈL\r2222222222²(YÚï\9c\9f\90µ½7ÉÈ"d¦\ 6ÙóÞ\ 1@\13H\97
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_157_2.dat b/lib/phpqrcode/cache/mask_2/mask_157_2.dat
new file mode 100644 (file)
index 0000000..2baf535
--- /dev/null
@@ -0,0 +1,3 @@
+xÚíÜ1
+\800\10\ 4À>¯¹üÿs6\82M\10\e¹\8dÎqUH1¤XØ&UçÌ\98½f\14Ý/u-çûé\12'ñíæ.ºû[ÍKGGGGGGGGGG÷H×|NG\17¨\93(ttttttttttú¬NF§ÏÊ;::::::::::}\96\8eN\9f¥££££££££££Ózèè$
+\1d\1d\1d\1d\1d\1d\1d\1d\1d\9d\93Ñé³\12\85\8e\8e\8e\8e\8e\8e\8e\8e\vüAø#ºî^AG\97§\93(t¯ì\ 1 =3{
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_161_2.dat b/lib/phpqrcode/cache/mask_2/mask_161_2.dat
new file mode 100644 (file)
index 0000000..d2df759
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_161_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_165_2.dat b/lib/phpqrcode/cache/mask_2/mask_165_2.dat
new file mode 100644 (file)
index 0000000..2e6cd7c
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÝ1
+\800\f\ 5ÐÝÓ¤÷¿\9c\8b\14\1c\8aè ?òBÆV\1e\ e\81ü¥UG\8d¼\9eµ\15%åùÐêþ¸\7fåÙ×\1a*\93+ú_\8efÊËs       MIIIIIIIIIù\962d;£¤l¨4\89()))))))))))e\eöqJÙ\86IDIIIIIIIIIII)Û ¤\94mPRRRRRRRRRRRÊ6lº\94\94²\rJJJJJJJJJJJJÙ\86}\9cR¶a\12QRRRRRRRRRRNeòK\ f?R\ 6í\90\94\94Í\94&\11åW½\ 33\ 4\19U
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_169_2.dat b/lib/phpqrcode/cache/mask_2/mask_169_2.dat
new file mode 100644 (file)
index 0000000..4052062
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_169_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_173_2.dat b/lib/phpqrcode/cache/mask_2/mask_173_2.dat
new file mode 100644 (file)
index 0000000..0a30ba5
--- /dev/null
@@ -0,0 +1 @@
+xÚíÝ+\ e\80@\f\ 4PÏiº÷¿\1c\ 6\81ÚfÝtó\9a:>y &d\fU߬ÔýÍS´´[íþ\11ª»ùé¡Õ]5Z;a\ 6¼Û5VÛ\9e\99´´´´´´´´´´AÚÀï[ZÚË´\12\8c\96\96\96\96\96\96\96\96\96\96\96\96\96V\ f¦«¡Õ\83I0ZZZZZZZZZZZZZZ=\18\1eL\82ÑÒÒÒÒÒÒÒÒÒÒÒÒÒêÁhiõ`\12\8c\96\96\96\96\96\96\96\96\96\96\96\96\96V\ fFK«\a\93·´´´´´´´´´´´´ÉÚü?\82ݧÍì\13hioÒJ0Úà}\ 1³¢\18o
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_177_2.dat b/lib/phpqrcode/cache/mask_2/mask_177_2.dat
new file mode 100644 (file)
index 0000000..d2c52f9
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÝ1
+À \10EÁ>§Yï\7f¹4\92V$Í~\1d±\v,C\8a\85¼&Uó\8cÞ÷;O\11\13o\8ak5b÷ÑÏ\99áâ\94\13ó\8eG°x9¥Û%&&&&&&&&&&&n$îöõOL|\87Øv#&&&&&&&&&&&&&ÖÝ\14\16bbÝ\8d\98\98\98\98\98\98\98\98\98\98\98\98\98\98Xw#&ÖÝl7bbbbbbbbbbbbbbÝM\13"ÖÝl7bbbbbbbbbbbbbbÝMa!&ÖÝ\88\89\89\89\89\89\89\89\89\89\89\89\893Ä)\7fU<WܱW\10\13\9f/¶Ý\88\vn\17 Â
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_21_2.dat b/lib/phpqrcode/cache/mask_2/mask_21_2.dat
new file mode 100644 (file)
index 0000000..7466be4
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_21_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_25_2.dat b/lib/phpqrcode/cache/mask_2/mask_25_2.dat
new file mode 100644 (file)
index 0000000..0bc44c0
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_25_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_29_2.dat b/lib/phpqrcode/cache/mask_2/mask_29_2.dat
new file mode 100644 (file)
index 0000000..5112d11
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_29_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_33_2.dat b/lib/phpqrcode/cache/mask_2/mask_33_2.dat
new file mode 100644 (file)
index 0000000..5bac0c8
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_33_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_37_2.dat b/lib/phpqrcode/cache/mask_2/mask_37_2.dat
new file mode 100644 (file)
index 0000000..bdfc0bd
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_37_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_41_2.dat b/lib/phpqrcode/cache/mask_2/mask_41_2.dat
new file mode 100644 (file)
index 0000000..c55c63e
--- /dev/null
@@ -0,0 +1 @@
+xÚ30\80\ 2C\1c\b\ 6¸\f\86¯JB\80&¶Ã¹\86\ 4ШÊQ\95£*\87ªJXi@lÉ0øUÂý> *\ 1F\99>\96
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_45_2.dat b/lib/phpqrcode/cache/mask_2/mask_45_2.dat
new file mode 100644 (file)
index 0000000..ad44ff1
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_45_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_49_2.dat b/lib/phpqrcode/cache/mask_2/mask_49_2.dat
new file mode 100644 (file)
index 0000000..6e8edff
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_49_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_53_2.dat b/lib/phpqrcode/cache/mask_2/mask_53_2.dat
new file mode 100644 (file)
index 0000000..682cae2
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_53_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_57_2.dat b/lib/phpqrcode/cache/mask_2/mask_57_2.dat
new file mode 100644 (file)
index 0000000..66a5c05
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_57_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_61_2.dat b/lib/phpqrcode/cache/mask_2/mask_61_2.dat
new file mode 100644 (file)
index 0000000..77d3815
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_61_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_65_2.dat b/lib/phpqrcode/cache/mask_2/mask_65_2.dat
new file mode 100644 (file)
index 0000000..caf184a
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_65_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_69_2.dat b/lib/phpqrcode/cache/mask_2/mask_69_2.dat
new file mode 100644 (file)
index 0000000..6a3801b
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_69_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_73_2.dat b/lib/phpqrcode/cache/mask_2/mask_73_2.dat
new file mode 100644 (file)
index 0000000..74945b7
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_73_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_77_2.dat b/lib/phpqrcode/cache/mask_2/mask_77_2.dat
new file mode 100644 (file)
index 0000000..903cba4
--- /dev/null
@@ -0,0 +1 @@
+xÚíØ1\ eÀ \b\ 5н§Áû_®\8bC\17M\8aØ\ e>òGót \90\18Ñ«eó¨+\8e×FWÄ\1fZE\15¼­mÓ&gÞ\87F£Ñ¶h\89ùF+×t/\8dF£ÙYv\16\8d\8d´õ\1f³ïµÜì¥Õjçô[*7òÕa¶
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_81_2.dat b/lib/phpqrcode/cache/mask_2/mask_81_2.dat
new file mode 100644 (file)
index 0000000..17a9ac2
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíØ1
+À0\b\ 5н§Ñû_®KÉÒ©Vi!O\"á\91\90\88«ò]¯:\82\91\ fçÃbWµ½1\aÅuȦ&\12\89Ä_\89µT Î\8b6\9cH$\12\89ÒU^\13\89Dâ~bׯë\17b=g\88³â\9eûXî\13­ÛÙ\a
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_85_2.dat b/lib/phpqrcode/cache/mask_2/mask_85_2.dat
new file mode 100644 (file)
index 0000000..72c74ff
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíØ1
+À0\b\ 5Ð=§1÷¿\\97B7¡ÖÖ\ eOþ$á\91A0$â¬ý8W­ ¦ê­þwjguÞu¿­æ§\8a¡R©T*u\95÷SÖ§\8e¨æ\95J¥R©Þ\ 3TóJ¥R©ÿR\e\7fö\87ÕêÞ¢N¨æµ\98\ 3ç\15
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_89_2.dat b/lib/phpqrcode/cache/mask_2/mask_89_2.dat
new file mode 100644 (file)
index 0000000..06c9a4f
--- /dev/null
@@ -0,0 +1 @@
+xÚíÙ±  À0\f\ 4À>ÓÈû/\97&E*câÇQqâëÃÅ\83\fªzf$ò\9a«ÈËrM\85ßåô\84ß<\8eÈsa#d2\99L&\1f\92?ïAr\13Y\9fÉd2\99LöG"ë3\99L&\93{ÊÙëR\aygw\93;Èú\1cÊ\r\83ñÚI
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_2/mask_93_2.dat b/lib/phpqrcode/cache/mask_2/mask_93_2.dat
new file mode 100644 (file)
index 0000000..f520296
Binary files /dev/null and b/lib/phpqrcode/cache/mask_2/mask_93_2.dat differ
diff --git a/lib/phpqrcode/cache/mask_2/mask_97_2.dat b/lib/phpqrcode/cache/mask_2/mask_97_2.dat
new file mode 100644 (file)
index 0000000..38842b9
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÙ1
+À0\b\ 5н§Ñû_®Ki·vH4\r<q   \ e\8f\fÂ\a#®Ê©ýÔ\11\84\19ÂËôsÔ-TUÕ\1f²S¸_YÔ\ 4\ 2\81\10\bk\85\91¼DØI°\ f\ 4\ 2\81\10äV\82ÜJ \10\b\ 4\ 2a©PtÅÿ\970\9c\97\b\9b\bö¡C8\ 1\13%ó¬
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_101_3.dat b/lib/phpqrcode/cache/mask_3/mask_101_3.dat
new file mode 100644 (file)
index 0000000..fa99251
--- /dev/null
@@ -0,0 +1 @@
+xÚíÚK\ e\80 \fEÑyWSö¿9'D1ñ\9f¾ªp      \ 3ã /9±Ð\81îu\95èÝ,k\9eu9\96\11Ò¤¼$¶\17îû%\1f\89Ý­wAL¹¤b%ClA³\83zqÛ´åë¶\8c\90\82\18b\88!\86ØÇĤwå\99XÜ4`Áõ¶_ö'FWr\8e!\86\18b\88õ&Æt1Ä<FWr\8e!\86\18b\88ýX\8cé\82y\8c®ä\1cC\f\86\10Óý©²\16Ó\87Ì)E{WúÙ¯\19\85gL\17\9e1]¼-&øƼ§®\94æLqn\89\ e
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_105_3.dat b/lib/phpqrcode/cache/mask_3/mask_105_3.dat
new file mode 100644 (file)
index 0000000..d8a28ce
--- /dev/null
@@ -0,0 +1 @@
+xÚíÚ1\ e\80 \10DÑ~O3Üÿr6\84Ð@(\9c1ê'\14\86\84¬ûâÂ\16J}4Ï\1c£¦gk 9\92\14éA=­÷\9e¯\9fèi»÷p}\91\93w¸õZJo\ 2¬ýûÜ8Ë\1f¢ÏJ\ 5B\ f=ôÐCÏs=\r\9d\94Hê³zT.ç\1ezè¡\87\1ezô{ô{ô{T.ç\1ezè¡\87\1ezô{ô{ô{T.zè¡\87\1ezoÔS$P«T õ\1fh\8e\8e\8e%\95Ô¿ôbß\9e¯r\95ª\\7fR\17åL$Ý
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_109_3.dat b/lib/phpqrcode/cache/mask_3/mask_109_3.dat
new file mode 100644 (file)
index 0000000..48d9404
--- /dev/null
@@ -0,0 +1 @@
+xÚíÚ1\ e\80 \10DÑ~O3Üÿr6\ 4Ñ\ 6\8bÝ        ÁO(\14\8b;\b\99\ 2©\8fV6ï\11Ósy±¹\9a¡¹Ð>\92)ë_%s×_½Õ\ f\83d3K\8eO1^\9aa\86§L\9fá,\86$\92H"\89$\92\aKzRP\97t\15[I&¯ÿX\92ÝÍ9\89$\92H"\89$\92äIò$y\92s\12I$\91D\12I$É\93äIò$»\eI$\91D\12É\8d%eëÌs\7fò!¹¼=\97\99\82äLAZ5\97\9c'åÌ\93\eIVý\93rîn\1d¸»/2oÆ\85
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_113_3.dat b/lib/phpqrcode/cache/mask_3/mask_113_3.dat
new file mode 100644 (file)
index 0000000..023b273
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÚA
+\800\fDÑ}N\93ÞÿrnDëÂFj2\14úK\17\82ÂÈCÂ\14t?W«ÜݲîZ\93iêÀ.q\ 1ÕÁ\8b\8coýP\9d\vô¯ªª%SmjÕ\eÖÂ7ËÞ¦\8b:·©\ 3\eª¨¢\8a*ª¨N©Ê:@¤:Ý\11\87·ìýÁ\8a¾º\95*\13\80¹\8a*ª¨¢\8a*ª¨f©ÒW9\ 5dª2\ 1\98«¨¢\8a*ª¨¢\8aj\96*}\95S@ Ê\ 4`®¢\8a*ª¨¢\8aj½ªæ¯à§ª6ðJlº¾êÑ¿Ã\ 5}ÕÕ}ÕÕ§\80\95T\8b¿Ußa\ 2È2\ f4hnt
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_117_3.dat b/lib/phpqrcode/cache/mask_3/mask_117_3.dat
new file mode 100644 (file)
index 0000000..79cc04d
--- /dev/null
@@ -0,0 +1,4 @@
+xÚíÛ1
+Ã0\f\ 5Ð]§Qî\7f¹.¡xIÚB$\19ú\8c\87\80Á?~\ 4!\ fÉ<ÇQ?ß#\96ç¶Ð5µ/tIÝJ8owøié{á\aßçâ¬}£Sø\98\10^\90ã~\87¢\19½qç\8c\89\84      \13&L\980áJá¢î1ÊúϻݢðD×K\7f'¬J¨Ã\84    \13&L\98\9d\85õÃn\1c\ f
\12ê0aÂ\84        \13&Lxgaý°\eG\83°*¡\ e\13&L\980aÂ{
+g{è\11\13¡\9fþ2¨ë\87\1fÎ\89~\98ðì7\]%r¢Jô\1eö\ 59n\1cZ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_121_3.dat b/lib/phpqrcode/cache/mask_3/mask_121_3.dat
new file mode 100644 (file)
index 0000000..aff5a7b
Binary files /dev/null and b/lib/phpqrcode/cache/mask_3/mask_121_3.dat differ
diff --git a/lib/phpqrcode/cache/mask_3/mask_125_3.dat b/lib/phpqrcode/cache/mask_3/mask_125_3.dat
new file mode 100644 (file)
index 0000000..e2febdb
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÛ1
+Ä \10\ 5Ð~N3ÞÿrÛ\84\89\91Ý'\16\81\14?<Âà/̼VÛµ»\15Ýóþü¨\fïÒ\8f\94¿ÿ´\1c\85<\96\7f\920-_±Jä[¥ü\a?\86    +wÔÄ^;*Ã\eyòäÉ\93'O\9e\1f\92/9ÏÏɯì9±<áî\15yÓÆ\9c'O\9e<yòäÉ\93'¿J^\93Òa\97È\9b\ryòäÉ\93'O\9e<ùGò\9a\94\ e{\96¼icÎ\93'O\9e<yòäÉ\ få÷ßPû\96¯\v\7f§·\9aó|Î]¨ZÖ¤²²Iee\93:[~Ë?\9fÿ<mJò_¶N\8a:
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_129_3.dat b/lib/phpqrcode/cache/mask_3/mask_129_3.dat
new file mode 100644 (file)
index 0000000..b1ce63b
--- /dev/null
@@ -0,0 +1,8 @@
+xÚíÛA
+\80 \10\ 5н§\19ï\7f¹6!n\94 ðG<q\11\824øhð/ªºG?;ÇhÓs¤\80¹\82L\ 1S\ 5\1fT¨õÞ÷ëO\14j»÷åúâ\f2#¥ÐÓ
+\13DÛ×y`¶Ü«ïÙÒ\ 5P @\81\ 2\ 5
\14Î\\ f\86\8e4\14*y\b\14t$\1d\89\ 2\ 5
+\14(P  /È\vò\82¼ #Q @\81\ 2\ 5
+\14ä\ 5yA^\90\17t$
+\14(P @\81\82¼ /È\vò\82\8eD\81\ 2\ 5
+\14(ü\¡¢\ 5ô\96.`ý§íÉ\9bj¥oªéC °S\88\7f\vç;R¥;Rî\10.\80\8f
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_133_3.dat b/lib/phpqrcode/cache/mask_3/mask_133_3.dat
new file mode 100644 (file)
index 0000000..f418150
Binary files /dev/null and b/lib/phpqrcode/cache/mask_3/mask_133_3.dat differ
diff --git a/lib/phpqrcode/cache/mask_3/mask_137_3.dat b/lib/phpqrcode/cache/mask_3/mask_137_3.dat
new file mode 100644 (file)
index 0000000..e24ac5b
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜA
+Â0\10\ 5Ð}N\93ÞÿrnªFÔHS\9a\99à\vY\bQ\19|øé\87ÒZ÷µEìf\95æuì,%Ë Í$\89uj÷Ó\ 3G£:Ãßzèèóo\12»Âu¶,:O òsâY»Ä\8f°ï\92e\90\8d\ e\1d:tèÐI¡sÅÕj÷¨|\7fãÌ+ê»Nø5\e\9d\8e\8ed\93ltèСC\87\ e\1d:tÎèè;Úèb:\92M²Ñ¡C\87\ e\1d:tèÐ9££ïh£ËëH6ÉF\87\ e\1d:tèСCǽ Ú¨{A%\9bd£C\87\ e\1d:tèü³NìÓ$^ur\fò\98dV\97èô\9d±\a'\Ówj\96¾S³´Ñ\15t\82þ;U²½'[ø,7Ã\15Ü\b
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_141_3.dat b/lib/phpqrcode/cache/mask_3/mask_141_3.dat
new file mode 100644 (file)
index 0000000..a3f6a24
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜA
+Â0\14\ 4Ð}Nó{ÿ˹)%]ØjÀf\f/d!\88uÈÃO\a\8aUûÚæícµîõô0}\9aùaº4ùR\179ëòÊ_½õ¡T\8d~é`\98ÓÙÌ_   R[\92T\87Õ®¯ððn\191öÝ\92Â\90"E\8a\14)R¤H-*\95p\97~H\85Ü¥ßJýä\ 4Þ\7f\84Ô°\94égú\91"E\8a\14)R¤H\91J\93Ò§4ß\7f\912ýL?R¤H\91"E\8a\14)RiRú\94æ»\80\94égú\91"E\8a\14)R¤H\91ò\f­>¥ùz\86Öô#E\8a\14)R¤H\91Z@ªbÂl-)ÌÝ¿ñ<ߧ*©OUR\9f"5&\95ö\9b\9a5ý*iúe\1cÎ\vJ]®+
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_145_3.dat b/lib/phpqrcode/cache/mask_3/mask_145_3.dat
new file mode 100644 (file)
index 0000000..338b7e7
--- /dev/null
@@ -0,0 +1,3 @@
+xÚíÜÁ
+\82@\14\ 5Ðý|Íóÿ\7f®\8d\94\ 5\95:\8c\f³\bJyÌ¡\e\17¤ªyM§î×j\8b×\11\ 3-'
+9¤V\97SÛýÖ¦K¶©\1d9ëÇ\19\10µ)PíyUûû¹£wË\19eÞ-m jÔ¨Q£F\8d\1a5jÔ¨\8dRËiÙ«ÔF4×_wk}·\180+µµj\12RBR£F\8d\1a5jÔ¨Q»\83\9a¾¦eßOMBJHjÔ¨Q£F\8d\1a5jwPÓ×´ì˪IH   I\8d\1a5jÔ¨Q£FͳÇú\9a\96íÙc     éw\8d\1a5jÔ¨Q£Fí\14µ\8a\9cÿÑzS«\8e*2¤¯UZ_«¾C\1aÒ×*­e_Oí´ïZ¥%dIȯû\ 1\ 6â\86b
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_149_3.dat b/lib/phpqrcode/cache/mask_3/mask_149_3.dat
new file mode 100644 (file)
index 0000000..30bc5fa
--- /dev/null
@@ -0,0 +1 @@
+xÚíÜA\ e\820\14\ 4Ð}Oó¹ÿåÜ â¦\90Hé ¯éÂ\8dô\93\17'\19\12¬Z×2{oVÛ|Î\99«%\ eµ\99ê>\82\9dyû·R{\87\7f!8îäÃ\82I+JpI\14|#¶Ý\13\965κ[âP\vA\82\ 4   \12$H\90 Á\11\82Q}ð)\18Õ&\ e\b\ e<¹÷E\82§        JQ)J\90 A\82\ 4       \12$H\90 Ás\ 45z\8dþ\8f\ 4¥¨\14%H\90 A\82\ 4        \12$H\90à4A\8d^£ÿ5A)*E        \12$H\90 A\82\ 4        \12$è½    \8dÞ3\19ïMHQ\82\ 4      \12$H\90 A\82\ 4ç       æü3Þ§`ÞP¯©®o¢Ý>X{×\98Ôè+±ÑWb£¿¡àìß`IÑã)\1a\ 3\88%d\9a
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_153_3.dat b/lib/phpqrcode/cache/mask_3/mask_153_3.dat
new file mode 100644 (file)
index 0000000..89cdec0
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜA
+Â0\14\ 4Ð}Nósÿ˹)\127m\bJ¦õ\85,\ 4Å\ e}8\90\ fµêX=c¿W\e^G\ 5\e\93e\ 5\e\92ÝNó<v]]bí­Iͯ_½Ï\ 4û¸gY+M³§j\ e íò\93»vË\8b\96\1a\8c&M\9a4iÒ¤I\93&M\9aÿª\19\9cÑÜu~o[¯~ö\9d4W55­¦¥I\93&M\9a4iÒ¤I\93æS5M\ fL\ f\1e¯©i5-M\9a4iÒ¤I\93&M\9a4o­iz`z@SÓjZ\9a4iÒ¤I\93&M\9a4iz\ eÅôÀôÀs(\9aVÓÒ¤I\93&M\9a4iÒ¤¹¬Y\91ÁzK\r\8f¦\eÏ\9b\95:=¨Ôé\ 1Í_hÆþ6·7m¥6mÞM{\ 1\9düHã
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_157_3.dat b/lib/phpqrcode/cache/mask_3/mask_157_3.dat
new file mode 100644 (file)
index 0000000..167e6f8
Binary files /dev/null and b/lib/phpqrcode/cache/mask_3/mask_157_3.dat differ
diff --git a/lib/phpqrcode/cache/mask_3/mask_161_3.dat b/lib/phpqrcode/cache/mask_3/mask_161_3.dat
new file mode 100644 (file)
index 0000000..72a26a4
--- /dev/null
@@ -0,0 +1,3 @@
+xÚíÜA
+Â0\10\ 5Ð}N\93ÜÿrnªF±ÑTk\7fá\85,\84\80NûðÛ   ÄZ\97Ñ\92f7J÷:³Æ\92^`WáÙ\94\aU×á»nXÚ¤¼Ç§M-½¾\87\99#V¹¥+ß¡ËÛ+9z\96ÜÒ\96\vl\94)S¦L\99òo\95c\9f±¯Ê±O_Cå?ß©õ%Ê;*Kl\89M\992eÊ\94)S¦L\992åYeý²]\11ÊÏÊ\12[bS¦L\992eÊ\94)S¦LyVY¿lW\84òGÊ\12[bS¦L\992eÊ\94)S¦LÙÙ
+ý²]\11g+$¶ßeÊ\94)S¦L\992eÊ\94\9d­Ð/Û\15q¶BbKlÊ\94)S¦L\992eÊqÊ\99ÿ\82þ¨\9c]à­Â£{ÎA¿¼¦\9cÔ/×ô~¹¦ï\8a\9cV9ï»\%ö÷\89\1d\ 5P¯#'
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_165_3.dat b/lib/phpqrcode/cache/mask_3/mask_165_3.dat
new file mode 100644 (file)
index 0000000..870af8f
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÝA
+Â0\10\ 5Ð}N3¹ÿåÜT\89\v#ØZþÀ\vY\b¥uÈÃ\8f\13\b­:ÆÌ\9b¯1\96ϱE®Uæ\16¹TÙT|SüþÒ\ f·Ô      ñ\v¿q\9e)òm-sG²øì ¾ \8fý\13BæÈ.ï\98£C\91Ä\89\13'N\9c8qâÄ\9fâáÿÕ÷âwv7û[Æç'\84tgÄÿ!.Õ¥:qâÄ\89\13'N\9c8qâÄ\13Äõãv`\88_+.Õ¥:qâÄ\89\13'N\9c8qâÄ\13Äõãv`\88\7f\15\97êR\9d8qâÄ\89\13'N\9c8qâΤèÇíÀ8\93"Õ¥:qâÄ\89\13'N\9c8qâÄ\9d\8fÛ\81q&EªKuâÄ\89\13'N\9c8qâ½Ä+¾È9:\14¹}kFT?^\1dúñêÐ\8f\13¿G¼Åo<0Õ«Cªg/æ\ 3\1d_\19\8d
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_169_3.dat b/lib/phpqrcode/cache/mask_3/mask_169_3.dat
new file mode 100644 (file)
index 0000000..9431095
--- /dev/null
@@ -0,0 +1 @@
+xÚíÝA\ e\820\10\ 5Ð}O3Üÿrn\88¢\89\10\ 4ñ·¾¦\v\13¨)}á'3\eªæ1EÎÇh\8bßÑ\e]î4üP[\r£_«\7fñÁ¥]Kvè\87<ÃË\99f\8fpý©#ýûª¶y_Êlù[\9cgëe£ôéÓ§O\9f>}úôéÓÿoý ªµ%uJV/µ°\93{¿\84þ\97ô%¿ä§O\9f>}úôéÓ§O\9fþ¨úê}Ý\1eú§êK~ÉO\9f>}úôéÓ§O\9f>ýQõÕûº=ô/Ñ\97ü\92\9f>}úôéÓ§O\9f>}ú£ê«÷u{èï×\97ü\92\9f>}úôéÓ§O\9f>}ú£ê«÷u{è\9fª/ù%?}úôéÓ§O\9f>}ú¿×¯.N4ÿ»<Oúµõ±\91\94z¿z©÷\8flôêz¿zéö\f¢\9føîW/É_\92ÿ´y\ 3p\ 5\16\ 4
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_173_3.dat b/lib/phpqrcode/cache/mask_3/mask_173_3.dat
new file mode 100644 (file)
index 0000000..7466986
--- /dev/null
@@ -0,0 +1 @@
+xÚíÝA\ e\820\10\ 5Ð}O3ÜÿrnPk\8cTTè\8cyM\17$&e\16/|ù\e"ÖµdÝÝjÝuþy[¥a»i\8bK\88Ñ\ 1{\7fúòÌM        S&z[B\85UBÂRIÂ\1dC\eÞ!Ón5Æ\w«4ìB\ 2    $\90@\ 2    $\90°[Â\94ÿ°£3Ûëc²½E^%\94xw á\ 4        ÒA:\90@\ 2  $\90@\ 2    $\90@\ 2    $\90\90B\82fI³DÂ\ 4     ÒA:\90@\ 2  $\90@\ 2    $\90@\ 2    $\90\ 4Í\92f\89\84Ã%H\aé@\ 2       $\90@\ 2    $\90@\ 2    $\90@BR   \9a\12    ¿\94 \1d¤\ 3  $\90@\ 2    $\90@\ 2    $\90@\ 2    )$h\964K$L\90 \1d¤\ 3   $\90@\ 2    $\90@\ 2    $\90@³\84ü_\ 4{\94PgØÛ´y\1a\8eÍ>á\83\8fVMm\96¢R³\14\95\9a¥\7f\91\90ø\99\10Òá¸t(1ï\ 5\85¢\18|
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_177_3.dat b/lib/phpqrcode/cache/mask_3/mask_177_3.dat
new file mode 100644 (file)
index 0000000..9586979
Binary files /dev/null and b/lib/phpqrcode/cache/mask_3/mask_177_3.dat differ
diff --git a/lib/phpqrcode/cache/mask_3/mask_21_3.dat b/lib/phpqrcode/cache/mask_3/mask_21_3.dat
new file mode 100644 (file)
index 0000000..bcb4eec
Binary files /dev/null and b/lib/phpqrcode/cache/mask_3/mask_21_3.dat differ
diff --git a/lib/phpqrcode/cache/mask_3/mask_25_3.dat b/lib/phpqrcode/cache/mask_3/mask_25_3.dat
new file mode 100644 (file)
index 0000000..0ffc375
Binary files /dev/null and b/lib/phpqrcode/cache/mask_3/mask_25_3.dat differ
diff --git a/lib/phpqrcode/cache/mask_3/mask_29_3.dat b/lib/phpqrcode/cache/mask_3/mask_29_3.dat
new file mode 100644 (file)
index 0000000..6150ac1
Binary files /dev/null and b/lib/phpqrcode/cache/mask_3/mask_29_3.dat differ
diff --git a/lib/phpqrcode/cache/mask_3/mask_33_3.dat b/lib/phpqrcode/cache/mask_3/mask_33_3.dat
new file mode 100644 (file)
index 0000000..6053b5e
Binary files /dev/null and b/lib/phpqrcode/cache/mask_3/mask_33_3.dat differ
diff --git a/lib/phpqrcode/cache/mask_3/mask_37_3.dat b/lib/phpqrcode/cache/mask_3/mask_37_3.dat
new file mode 100644 (file)
index 0000000..5dea5b9
Binary files /dev/null and b/lib/phpqrcode/cache/mask_3/mask_37_3.dat differ
diff --git a/lib/phpqrcode/cache/mask_3/mask_41_3.dat b/lib/phpqrcode/cache/mask_3/mask_41_3.dat
new file mode 100644 (file)
index 0000000..ca9ddc2
Binary files /dev/null and b/lib/phpqrcode/cache/mask_3/mask_41_3.dat differ
diff --git a/lib/phpqrcode/cache/mask_3/mask_45_3.dat b/lib/phpqrcode/cache/mask_3/mask_45_3.dat
new file mode 100644 (file)
index 0000000..3daad97
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\94K
+À \fD÷s\9añþ\97ëFJ(&\99)ô³0d¡øÐ\87\ e\92³FÞg!\8c[8Ò=\1cèÛ&ËiaÂÎD)Åd8&A\ 6ËÕ¬¡a³áÀÛä\v\131'\99I\96I\94«×³\9e7Ù9ù­     exÀ\81\93߾Ƞ       \9dÄÒIìû&Ö\9d´¯Cçu´Í\ fJy\7f\82
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_49_3.dat b/lib/phpqrcode/cache/mask_3/mask_49_3.dat
new file mode 100644 (file)
index 0000000..7f6508d
Binary files /dev/null and b/lib/phpqrcode/cache/mask_3/mask_49_3.dat differ
diff --git a/lib/phpqrcode/cache/mask_3/mask_53_3.dat b/lib/phpqrcode/cache/mask_3/mask_53_3.dat
new file mode 100644 (file)
index 0000000..8800bea
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\96K
+À0\bD÷s\1a½ÿ庠   ­¥\89Ñ!\r-(.Bp&\8f|\88"-t\96&`Æq\1d\18\91Q-"\14\86ð9Ù_+\1e)Be\b/H8¾ãD®¼%\18\91\16a\11~\9aÐ}spKFN\98úö\9c\13Ö=,Â\7f\12Æ;\87;a^tª4÷\96\89Ï\\99ÞF\99Îá\15ÂÀ\1eÊÎSNé\ e§é\13â
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_57_3.dat b/lib/phpqrcode/cache/mask_3/mask_57_3.dat
new file mode 100644 (file)
index 0000000..4e1e5da
Binary files /dev/null and b/lib/phpqrcode/cache/mask_3/mask_57_3.dat differ
diff --git a/lib/phpqrcode/cache/mask_3/mask_61_3.dat b/lib/phpqrcode/cache/mask_3/mask_61_3.dat
new file mode 100644 (file)
index 0000000..bf1a3cc
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\96A
+À0\b\ 4ï¾fýÿçz\914-%\9a\95\90Ò*\1e\12Ãâ\10d\11°Ðp\9e!ÝyZÜ«\89æ\82\8fõ(ù¸~ë=\1f\ 4¹&ÉÛ\93´\8b\12)\9cÌR2â"/ò"ÿ<9ç\8a\8a=r§þbò\9aó"/ò\1f\93\83îÌíç\17rw\e\1d¹"2®\b¯¹ãçÈøùBòè\9f#3-Ø0-\aK\8fÀW
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_65_3.dat b/lib/phpqrcode/cache/mask_3/mask_65_3.dat
new file mode 100644 (file)
index 0000000..8589208
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\97Q
+\80 \10Dÿç4»÷¿\?R\ 6\95Û\f\85Å,û!¨O\1f\8a²\11-òNv\81®Í1 \ 2:Âc\16¡Z\9cu\1dï\81\vÚ"U\8bM\ 4Ã\95F    ~jK¨\80´\85-la\8b\ f[\14^q\14\ 6^³Q\é\9c=\8d\85o\94-la\8bÿZpUÒÞB\ 3¬\84äÿ\v±@IµÖKµJzÉ¢|\16\8d¢\19\v÷\90\1f¹
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_69_3.dat b/lib/phpqrcode/cache/mask_3/mask_69_3.dat
new file mode 100644 (file)
index 0000000..55318a8
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí×Á
+\800\f\ 3Ð{¿&ûÿ\9fó2¤'\97®\11\1ddô l\86=,\14\81¹F½î\15éy;$§ì\87¤\94WEË-R\84\8a¨³:¢¡\10%T,O2\15½×g\85"Ä"\8b,²È¢/DÍyÄ\88\98¹\19ôɧ{þO䮳È"\8b,:N\84\bE\bñWNÎ#(&,\14\13ö,\91ä\e\95º\ e\8a®ë]æ\ 2\85\10
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_73_3.dat b/lib/phpqrcode/cache/mask_3/mask_73_3.dat
new file mode 100644 (file)
index 0000000..15be77f
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\98Q
+\800\fCÿ{\9aìþ\97ógè\14\1a¥JJ?dÔ¬\ fK\84\ 2=ÚR\1eaÃsJhTJ6ex\81\ eÎkaº\90ú¥§\$é\1a\91n¯´IE,-/ÑÓXB¢\13\9dè*Ñ\85=Ëâ\9eí\1cÚÒýweeé4\99¢\13\9dè¸tÿöÌ\92t\9a\89î«t t\94ß«\9cèà¯\ 1b\9e      \96gF\85f\9e  Ö\1fáqºõo\aÖd¢Ðdn-\13ð?
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_77_3.dat b/lib/phpqrcode/cache/mask_3/mask_77_3.dat
new file mode 100644 (file)
index 0000000..ec78280
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíØA
+\800\f\ 4Àû¾&ùÿç¼\14­B\8aiÖRaK\ e"té`I@³¶|¶º\85î¹\9e\afX\97ö±Ôâ­yiöåólõE\91:Sza18G¾À\89i\ 5f\98K*©¤?\96\ e:YÜC1ì\8c\9eì¡\98\19\89·\97êöJ*©¤\92¾\92jÊl*Õí\95TRI×Kë\7fÌîR^Ø\99æ\9cÞksûÂ)cÌ)cÌ)³JZø¦¶óí¥ä\1d\ 4ãa·
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_81_3.dat b/lib/phpqrcode/cache/mask_3/mask_81_3.dat
new file mode 100644 (file)
index 0000000..47bc0f7
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíØ1
+À \fFá=§\89÷¿\\17\91,JÑGAúÄ¡\8b\7fýhjÀÌ>ÚÙ\1c#Ê3\12X\13\99À\92ø\81:çk÷Ô¹\ûFM\rJÝhu\81Çú½\e3¸¨>\83\ eT­Zõ\9fÔ{ÇãPSgøP'¹ÉkÔV¸jÕªU«¶_Û¯ý¯U«V­º\95»=P\r\aÎo\86O:WÒ\9d\8bÞäÝjü[\9fWxÒ\15Îmò\ 1\9d\rÙ5
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_85_3.dat b/lib/phpqrcode/cache/mask_3/mask_85_3.dat
new file mode 100644 (file)
index 0000000..02c4f8c
Binary files /dev/null and b/lib/phpqrcode/cache/mask_3/mask_85_3.dat differ
diff --git a/lib/phpqrcode/cache/mask_3/mask_89_3.dat b/lib/phpqrcode/cache/mask_3/mask_89_3.dat
new file mode 100644 (file)
index 0000000..2b4cb59
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÙ1\ e\80 \f\85ὧ)÷¿\9c\v*.@àUÁü\r\83ÓÓ|±¶\89î¹\92â\14eŵ6Û¢\82\8bäw5*÷ô)\ro\ 5ôi¨K®\91¢4n\10k>Áè1}d>\16\15\9cÐ@\ 3\r4ÐXYC¾o\9c\1aò    Û¡1<º\7f©A§ \81\ 6\1a\81F\84\ 6ûÆ\1e\1at
\r4Ð@\ 3\8dµ5´\7f\97\9e\1a1ÁWrÒï\e>7û«û\86\e\1eµ}}¤¡x7|ÇN\91g\1fÆîÚN
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_93_3.dat b/lib/phpqrcode/cache/mask_3/mask_93_3.dat
new file mode 100644 (file)
index 0000000..b4cc8a9
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÙA
+\800\fDÑ}N\93ÞÿrnJɪQ\9a\11\1a~éB¨\8cú06 û\1c£n®aá¸<<¦×\87\87ôÿe6×M\97R\99ýCù\17\19ÅPÈ\f¥LÀ±ôÌ\93i\9aØ9M\19\8e\f2È \83Lk\19Å®½dD»v*ó"a·ÔX\86jB\ 6\19d\90A\ 6\19dªdèôZöÀT\13ß\19d\90A\ 6\19\90qYø0exö÷ö¼\9fqe§çÊN¯«\8cú\9d©ª&WV\93ææ\1fQvcô
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_3/mask_97_3.dat b/lib/phpqrcode/cache/mask_3/mask_97_3.dat
new file mode 100644 (file)
index 0000000..7adc9eb
Binary files /dev/null and b/lib/phpqrcode/cache/mask_3/mask_97_3.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_101_4.dat b/lib/phpqrcode/cache/mask_4/mask_101_4.dat
new file mode 100644 (file)
index 0000000..1c97dc0
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9aA\ e\80 \f\ 4Füÿs^\101 b¤\8bÆáÐ\98ª]ÃØÖ4\9am+Æ8Ð\16+\98Ve¬Ä^H­R]\96\ec\87\7f®\8aÛ
\1eoõW\14N#¸îXá\ féØá\ 5+lð\f\9e­HE³cp\81\v\ 2\97^.Î\1d9qñW9\ eø¼ïç\b"\15\1d\17ò\85:\ 6\17¸À\ 5.\9fæBßÿó÷\18ùB\1d\83\v\ 2\17æ0Ìa\98ÃPǨcp\81\v\ÞÍÅïO\95\92\8bN¥qjpGÖô}\93ô}¥Ê$.äË\85\8a§Ð\ 2\8a\b\8f\10
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_105_4.dat b/lib/phpqrcode/cache/mask_4/mask_105_4.dat
new file mode 100644 (file)
index 0000000..0211cdb
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9aK
+\800\fD÷=Mrÿ˹\91øA\v\85ÎTáe\91E\15FóL2\v#\8eÈÌé¹¢\85_I!\93\8b\95\1eßú­\1a£çë\94¤Ñº\8f\93\93Î-Õ«km¿Oñá]sS\vT6*ùª\a'8Á       N\9fâ$Þî'N\ 6¥Z\8bÊí^\9c<JvNô\13s\ fNp\82\13\9cà\84ßÃïá÷è'æ\1e\9cà\ 4'8Á  ¿\87ßÃï1÷\98{p\82\13\9càô?N¿µn\9c¼JóüBÏ\85ùü^Øü\9e[i\19'úiHI-¶\ 1¢m+W
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_109_4.dat b/lib/phpqrcode/cache/mask_4/mask_109_4.dat
new file mode 100644 (file)
index 0000000..2cc0c81
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_109_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_113_4.dat b/lib/phpqrcode/cache/mask_4/mask_113_4.dat
new file mode 100644 (file)
index 0000000..99bd73f
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÚA
+à\10\ 5н§Ñû_®\8bJb)\15\1at&\84çBBÒøK_\95\89¤Ö³µÖ6õC+5/q_Üghfâ×Çú©Éíÿ\9e¿CbH+\17¾p\9bº¿¯§;\ eWK?ÞüG\1dú\12\15tô     \89ñ¿*G\8e\1c9r|\82c`ÕÑ\1dc\13\7f\ f¾¶Î9FKHÌq4\1f­«\1c9räÈ\91\85\8eêUÏ\1d×\1cÍGë*G\8e\1c9räÈÑ>¹}rûäÖUë*G\8e\1c9r|ºcÌ[Á£cNâ¬Þ[_=Æ׫5¼^ÍJ¼\81£ù¸ 1*ô\ 5q\9bv\1e
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_117_4.dat b/lib/phpqrcode/cache/mask_4/mask_117_4.dat
new file mode 100644 (file)
index 0000000..3867259
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÚË
+à\10\ 5н_£ÿÿs]4Ø\a¥©Dg¤\1c\17nò¸à\892Jj}´ÖÚÒ¾·RsSWG¶\8dR¿\8cɧ\17\1d\17\86\9eÚ)5¬\9d»ÞE\ 6\86áämá#ܯ\95ã¾Õ\1fðk_"Ãz\9f\94\9a3Â\¹råÊ\95\7fr\r­L»k|ê/{\84¹;\8e'×àÔ<WóÕ:Ì\95+W®\¹rÝÜU=l\9f3ÏÕ|µ\ esåÊ\95+W®\\9dû;÷wîo¾Z\87¹råÊ\95+×ý\\83þ¼\7fsÍK\1dýÃûze\9aS\ f×\94z83u#Wóubjdð\ràÝ$\9f
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_121_4.dat b/lib/phpqrcode/cache/mask_4/mask_121_4.dat
new file mode 100644 (file)
index 0000000..84957eb
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_121_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_125_4.dat b/lib/phpqrcode/cache/mask_4/mask_125_4.dat
new file mode 100644 (file)
index 0000000..b98dc81
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_125_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_129_4.dat b/lib/phpqrcode/cache/mask_4/mask_129_4.dat
new file mode 100644 (file)
index 0000000..8ecfa25
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_129_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_133_4.dat b/lib/phpqrcode/cache/mask_4/mask_133_4.dat
new file mode 100644 (file)
index 0000000..69f83ac
--- /dev/null
@@ -0,0 +1,3 @@
+xÚíÛA
+à\14\ 4н§Ñû_®\9bÒ\9a\8d\85\1fÂËB¨\14\8bf\16\99ó{­µ
+ÇíÆcf¥¨\8d°gÈKqøã=óÙ)Ú®£\8b»çWÀ\8alK2Þ¿Ê\1f\90Ë8:oþ\19CRd¬\b\17\pÁ\ 5\17\pñ@\17­ï\9d+$EÅ\eÿÏù\90\14Q.ì\17Î\11ç\b\17\pÁ\ 5\17\è#ú\88\8fØ/\9c#\pÁ\ 5\17\pÁ\85\8fè#ö\vç\b\17\pÁ\ 5\17\p¡\8fè#ú\88\1cq\8e\ 5\17\pÁÅ\7f.º¾$¿ºÈIqü𽤠  dô\91\19ÑG\92R\ 4»°_4¦è\fò\ 2\15\80\1a\98
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_137_4.dat b/lib/phpqrcode/cache/mask_4/mask_137_4.dat
new file mode 100644 (file)
index 0000000..0c09c48
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_137_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_141_4.dat b/lib/phpqrcode/cache/mask_4/mask_141_4.dat
new file mode 100644 (file)
index 0000000..62b03f2
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_141_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_145_4.dat b/lib/phpqrcode/cache/mask_4/mask_145_4.dat
new file mode 100644 (file)
index 0000000..33fb211
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_145_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_149_4.dat b/lib/phpqrcode/cache/mask_4/mask_149_4.dat
new file mode 100644 (file)
index 0000000..de99310
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜÁ
+\ 2!\14\ 5н_£ÿÿsm\9cÉ \8c\84Á+\1c\17\12\8b9=ó.ªõ=Zk\eça\94\9a]ÕÞ\92>\vK¯jò´o\17é\v\7f¾ªý|¯Sª\8a\19SWK\1fùZmË×\8cº\83Ãjé\8f\ 3¾\80Ã\\92\8a¹çЪ2ï W\qÅ\15W\qÅÕñ®"~·ß×\f­jv\1aÚtòê®òª\8av¥_Ù\aí\83\qÅ\15W\qÅ\15W\q%g\90\19ä\fú\95}\90+®¸â\8a+®¸â\8a+®ä\fr\ 69\83\9cA¿²\ f\15W\qÅ\15W\qÅ\95\9cAΠg\903èWöAû W\qÅ\15W\qÅ\15W\97«\9c\7fÆ\e]åVµ~v{êD\9f\993ÔÈ\9c!¹ª\83\éWÇô«¬Â^<ír/
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_153_4.dat b/lib/phpqrcode/cache/mask_4/mask_153_4.dat
new file mode 100644 (file)
index 0000000..e827dd1
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíØ1\ e\830\10\ 4ÀÞ¯ñýÿsi,')p\14!äµ4.Ü\10Ð\ 1\93;±½¿WUmßçj=¿²\84²ê°Ê.N\18\a\16O¾þ>úû\9açT\16µÚ\8d[\1f÷¾\10S7\1evÜÛ\9cg¶q\95\84?æ÷ÞÒ
+\9a{pe¹o\933Î8ã\8c3Î8ã\8c3Î8{ØYXzðá,°²Û_úO¤\aÓYfeñÎô3sÓÜä\8c3Î8ã\8c3Î8ã\8c\86\C®!×ÐÏÌMs\933Î8ã\8c3Î8ã\8c3Îä\1ar\r¹\86\C?379ã\8c3Î8ã\8c3Î8ã\8c\86\C®!×07ÍMÎ8ã\8c3Î8ã\8c3ÎÎq¶þ\ 4Úé,»²Ë\1fmM\ frs\8d\1e\9bk¤Wv\9c3ýìÀ~\96\v\1d\80WB
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_157_4.dat b/lib/phpqrcode/cache/mask_4/mask_157_4.dat
new file mode 100644 (file)
index 0000000..ad5fcf6
--- /dev/null
@@ -0,0 +1 @@
+xÚíÜ1\ eÂ0\10\ 4ÀÞ¯ñýÿs4\11\98"FPà=iRX¢XÉ\13\1fÛ0ç멪\80u     4f\8ft\19ÑÖl}Òm¾øßý\9eéâ\9e­»Sû\15|²ËÑ\8eëSÌ\vû¶\8eÄPÏ5<]öÉrÇ\1dwÜqÇ\1dwÜq÷£»È^QáéN6Ã\8fûáéZ¸sß\99³æ,wÜqÇ\1dwÜqÇ\9d>«Ïê³ú¬ûÎ\9c5g¹ã\8e;î¸ã\8e;îôY}V\9fÕgÝwæ,wÜqÇ\1dwÜqÇ\1dwú¬>«Ïê³æ¬9Ë\1dwÜqÇ\1dwÜq§Ïê³ú¬>ë¾3gÍYî¸ã\8e;î¸ãî[ww?P3Üå§Ûþ\11òÑÆ\98Ýggt\9fí\90®¡;÷]ûû.3à\ 3w4A¯
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_161_4.dat b/lib/phpqrcode/cache/mask_4/mask_161_4.dat
new file mode 100644 (file)
index 0000000..7604c45
--- /dev/null
@@ -0,0 +1 @@
+xÚíÚA\ e\82@\f\ 5Ðý\9cfæþ\97s!AL\80\ 4\9dÄ_|,\88\ 1\994òl)iï¯m\8c\11²ßl­×\890'¼÷ +E¸û\85£\v÷\96]N\ºêüxÅ\b\ 3\87§2\9fç/ü¼_¬\16{\977gÛò9ì\8f¼Ù·ÔÀÖ}\81\bóï2\87\1crÈ!\87\95\1c\ 6?}-\ e³#<Zü×Ï\87ëj\ 5"¬áP>T\97Õe\ e\90C\ e\90C\ e9üÀ¡~ùöý²÷6S\1cÊ\87겺Ì!\87\1crÈ!\87\1crÈ!\87æ\1côËÞÛ\98s\90\ fÕe\ e\90C\ e\90C\ e94ç _öÞÆ\9c\83|¨.«Ë\1crÈ!\87\1crÈ!\87\1c\9asÐ/\9bs0ç \1fªËê2\87\1crÈ!\87\1crÈá\7f8ì§}D\82Ã\1a\11Îì\1fçw£ùýr\8fï\97«DXΡ|xÃ|\98\eä\ 3!à2ð
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_165_4.dat b/lib/phpqrcode/cache/mask_4/mask_165_4.dat
new file mode 100644 (file)
index 0000000..d83d631
--- /dev/null
@@ -0,0 +1,3 @@
+xÚíÚA
+\ 21\f\ 5Ð}OÓÞÿr.\1cª"\16Ñ*?úfÑÅÌP\82óLHIï\97k\8c\11µÎ«õZQ¦\858
+Gy÷êqkñ-\9e¿ÿÎn5£\8c½Ú+?ÌÒñùù¾Ýâ¿ø|Ö\8e÷Òþà·kK\ en®E¢¬ñŹä\92K.¹ä\92K.?ï2º£\98.ó£|¼EJ§{å2<Ê:.åKu\\1dç\92K.¹ä\92K.¹ä\92Ë\10\97úñ¿êÇ\9d\13mu)_ªãê8\97\rÉ%\97\rÉ%\97\\9aÛÐ\8f;'2·!_ªãê8\97\rÉ%\97\rÉ%\97\\9aÛÐ\8f;'2·!_ªã\rÉ%\97\rÉ%\97\rinC?nnÃ9\91¹\rùR\1dç\92K.¹ä\92K.¹äò;.û²óHqY'ÊݽéþN·F?ÞKôã\95¢,êR¾üé|\99\1dè   My*3
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_169_4.dat b/lib/phpqrcode/cache/mask_4/mask_169_4.dat
new file mode 100644 (file)
index 0000000..4aac95c
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_169_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_173_4.dat b/lib/phpqrcode/cache/mask_4/mask_173_4.dat
new file mode 100644 (file)
index 0000000..9df4d86
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíØK
+\ 21\10\ 5À}N\93ÜÿrnÂ\18a\føÃ~ZY\ 4!ÎÐJÑt^ï×5Æ(¸/«õÌjk\96z[pjµ§_Ø?~v:\ f\1e|jwú\eÕ\96_mû£îXzòo\7fõ\9d\11\12\96Ó6?\17n\bËÞ\12\8a<ö°j³$pË-·ÜrË-·_p[z¾=Þ\19Víæ\96Qí¦3ÝæT\eéV¿ÕoÍ      ÜrË-·ÜrË-·ÜrË-·r09\98\1cL\ e¦ß\9a\13Ì     ÜrË-·ÜrË-·ÜrË-·r09\98\1cL\ e¦ß\9a\13Ì     ÜrË-·ÜrË-·ÜrË-·r09\98\1cL\ e¦ß\9a\13Ì     ÜrË-·ÜrË-·ÜrË-·r09\98\1cL\ e¦ß\9a\13Ì     ÜrË-·ÜrË-·Ür\9bæv\7f\15­æ6¯Ú÷ßý?\95,eå`=*\aK¬6Ú­~û§ý6£à\v\8f´*×
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_177_4.dat b/lib/phpqrcode/cache/mask_4/mask_177_4.dat
new file mode 100644 (file)
index 0000000..6437d25
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíØA
+\ 3!\10\ 4À»¯Ñÿ\7f.\171\e\bB\12\84éMyð\12\94![\fc÷þ\c\8c²ûZ­çV\¹Üq\93\8a7ßâÝEó\87\ fOýzg~Å\11këøË¿j\9e;pg\94\8au²Í[*7\8a×½¥\14ºöÀ\8aóTpÌ1Ç\1csÌ1Ç\1csÌñqÇ!¯ÿ\8bã \8aw/òr¯ÿå8«âXÇú±~l®à\98c\8e\98c\8e\98c\8e9\96»ÉÝänr7¹\9b~l®0WpÌ1Ç\1csÌ1Ç\1csÌ1Ç\1cËÝänr7¹\9b~l®0WpÌ1Ç\1csÌ1Ç\1csÌ1Ç\1cËÝänr7¹\9b\1f\9b+8æ\98c\8e\98c\8e\98c\8eånr7¹\9bÜMî¦\1f\9b+8æ\98c\8e\98c\8e\98ãtÇû§oEÇ\99\15\9fÉ\16N¥Xy¹[\8fËÝR+¾\89cýø¯ûqNÑ\ f\,4J
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_21_4.dat b/lib/phpqrcode/cache/mask_4/mask_21_4.dat
new file mode 100644 (file)
index 0000000..e006b67
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_21_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_25_4.dat b/lib/phpqrcode/cache/mask_4/mask_25_4.dat
new file mode 100644 (file)
index 0000000..0c7c44b
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_25_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_29_4.dat b/lib/phpqrcode/cache/mask_4/mask_29_4.dat
new file mode 100644 (file)
index 0000000..c28dc20
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_29_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_33_4.dat b/lib/phpqrcode/cache/mask_4/mask_33_4.dat
new file mode 100644 (file)
index 0000000..5834b6f
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_33_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_37_4.dat b/lib/phpqrcode/cache/mask_4/mask_37_4.dat
new file mode 100644 (file)
index 0000000..4bf2e26
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_37_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_41_4.dat b/lib/phpqrcode/cache/mask_4/mask_41_4.dat
new file mode 100644 (file)
index 0000000..b75b7d0
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_41_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_45_4.dat b/lib/phpqrcode/cache/mask_4/mask_45_4.dat
new file mode 100644 (file)
index 0000000..1b921f3
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_45_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_49_4.dat b/lib/phpqrcode/cache/mask_4/mask_49_4.dat
new file mode 100644 (file)
index 0000000..e417f94
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_49_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_53_4.dat b/lib/phpqrcode/cache/mask_4/mask_53_4.dat
new file mode 100644 (file)
index 0000000..7e88826
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_53_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_57_4.dat b/lib/phpqrcode/cache/mask_4/mask_57_4.dat
new file mode 100644 (file)
index 0000000..84669c7
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_57_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_61_4.dat b/lib/phpqrcode/cache/mask_4/mask_61_4.dat
new file mode 100644 (file)
index 0000000..d127c3b
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_61_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_65_4.dat b/lib/phpqrcode/cache/mask_4/mask_65_4.dat
new file mode 100644 (file)
index 0000000..c24343d
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\97K\ e\80 \f\9c¦½ÿåt\81X\13£Ð\99.4ÓE1\ 1^ÂãÓhv\86»Oæ\10Íx\84ùéW\b\93ð0\fñ°JHÅ»\87½­ð\10z[ÿ^Ü\88\90[vâÈ\ 4\ 2¾
+y\90\ay\90\87Z\ fÀkß=`\84\99êv\a·cí\ 4\ 2Ç\83î\85\83<üÚCî/)zà\10Ü\91×\1e¯\17\ 6×\v\16¡ÈÃÇÎC\1e²\ 1\8c\9a""
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_69_4.dat b/lib/phpqrcode/cache/mask_4/mask_69_4.dat
new file mode 100644 (file)
index 0000000..a73b114
--- /dev/null
@@ -0,0 +1 @@
+xÚí\97;\ eÀ0\bCwN\ 3÷¿\\97\88~¤¨\ 1;C$3°$<)/m­ºß\15\11¥\9eeÎ¥T\11±\912\19\18\v \97:¥]ÿ^VV¡\13\ 6²zAïnÈpv\12\85s"y\91\17y\91\17y)z\ 1\12öá\ 5¤dÄu\136½à\14ª\17½Gú¾È\8b¼ÈËi^\9a\7fÂ\1f/<ÊtÓrÂrrÚ)9ͤlõrìó\82\81.\11\87Ö
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_73_4.dat b/lib/phpqrcode/cache/mask_4/mask_73_4.dat
new file mode 100644 (file)
index 0000000..72f8922
--- /dev/null
@@ -0,0 +1,3 @@
+xÚí\98A
+\800\f\ 4ïyMòÿÏé¡´)\141Ý-\82l\ f\11E\a3\9a=Ô}¬\88(Öô°9\9fTÇdÎ\19Òò\96E/eO\18     ZO\9eîãÛ\17Å»KíY;ÛúpS5\14Ð+\91ÄëN\9eäI\9e\8a\9eà|
+"©eìvúö+D\12Ý\93æNs'Oò¤\1cW\8ekîäI\9e¾ð\84ì\86Ì\9e¸¤\bFúòrÜi9Î&\1dóô«ÿ    \87]?ÃóA
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_77_4.dat b/lib/phpqrcode/cache/mask_4/mask_77_4.dat
new file mode 100644 (file)
index 0000000..993c486
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\98Ñ
+\800\bEßý\1a÷ÿ?×ËjFe8¯0êú \11uØN©0Õ\11­µ\89lB´\866\87:\ 3«h·\ f\18õ\96§¥CÜe\,¹\v\86ìÔÜ\97~\9dø &\v\ 2rd0\r»Sz£7z+ô\96êoº»\ 2ÓÜþ\1cëäÝ\e\8e\8duÊ:¥7z£·Wo¿\9a\vËÎSÖ)ë\94Þèm\19\13\rO\8b\9d\17y\9d\1c;\17\14:\17*h¥Þ>û¿a\80\eïCe\1d
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_81_4.dat b/lib/phpqrcode/cache/mask_4/mask_81_4.dat
new file mode 100644 (file)
index 0000000..dd65216
--- /dev/null
@@ -0,0 +1,3 @@
+xÚí\98A
+\800\f\ 4ïyMòÿÏy\91XE\vm7"89ä 2\92Ѹ ûQ\111ݳÌë\88+¸x\89x;ÅÓt3\1e5DIY÷¶1x\:u\9e³ýº\95\a}î¦\ 2e/ ê§Æ#\1eñø\11\8f¢Th<
+\89ùùU¤BzÔ\12Ë<²×ì5\1eñ\88G<\92×ä5{\8dG<â\11\8f¢¿®\17\8f5Äñ<饫>¯]\9e×UÄr\8f¿x\1f\r\94\rÜû
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_85_4.dat b/lib/phpqrcode/cache/mask_4/mask_85_4.dat
new file mode 100644 (file)
index 0000000..c8d5123
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_85_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_4/mask_89_4.dat b/lib/phpqrcode/cache/mask_4/mask_89_4.dat
new file mode 100644 (file)
index 0000000..5b9bd7e
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÙ1
+\800\f\85ὧIî\7f9\a«Æ% Í\v\8a\7f\87 VÞð\11Ú\80f×r÷Å\1aÖ0}òzì=¼#9ùìéûÎäÒ\95:§þû~\9b\1dó¹¨1B\1dÕ\81g\15&ë4pÆ\19g\9cq.p.»\aí°\15&g·ÿÂT0\9d5Érgú\99s\ 3g\9c\19çrgæ\8d¯Ïuô3ç\ 6Î8ã\8cóë\9dkÿ.Egm²»b*ÐÍ\e&\9b7ÔÉÍÎ?íçúð\r¯:Þü
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_93_4.dat b/lib/phpqrcode/cache/mask_4/mask_93_4.dat
new file mode 100644 (file)
index 0000000..be7f5e5
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÙK
+À \f\84ὧIî\7f¹n$}P\82Å\8cBù]¸\91Né§È@ÍÎáî%s\8cfkÒ«¢}Czò\8doA}aʽ2½|¤îé~ØÀªD&\9el=¥êÀÜç¦\b\8dY\9c®\95Á\1dwÜqÇ}³» q\ÜEéY³\98j\1cá®K_âÎyç\9eÁ\1dwÜqÇ\1dwz$=\92\1eÉ=\83;î¸ã\8eû_Ý\8bÿ\80>Üõé\9f+ÑpÓÓöH\93öÈ\15é\eÜ9ï¢\17\1cDÞi\1e
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_4/mask_97_4.dat b/lib/phpqrcode/cache/mask_4/mask_97_4.dat
new file mode 100644 (file)
index 0000000..5d848ca
Binary files /dev/null and b/lib/phpqrcode/cache/mask_4/mask_97_4.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_101_5.dat b/lib/phpqrcode/cache/mask_5/mask_101_5.dat
new file mode 100644 (file)
index 0000000..c21869e
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9aÑ
+\80 \fEßý\9aíÿ\7f®\17+£%=ÜM¢3Cb\bvó¸\rѬ\9b«ÍNkû¹´\ fgqõ\13kqq{©%ôO\ 6¿Òòüoç\9eùÈû,i\96¨ÅKÖe\9ceçÁ3[\9b|\89îi\9e¶÷\87¾õ\98ã©V¥¥h]`\fÆ`\fÆ\160¦Ê\95\9d±¸\1e\13zË´TÔ0Gu\1e×ì\1a/q\8c8F®\841\18\83±\8f3¶:WÊò>õ\98´\1e#\8e\11ÇÈ\950\ 6c0öQÆ8»øE=F\1c#\8e\91+a\fÆþÄXÖÍ\9e+cV©%9W>ßíQ\9e]Tk©¹\ f\93Y\8f-gL¸÷óî\8f\8dq¬DË\ 6è\89\8bÏ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_105_5.dat b/lib/phpqrcode/cache/mask_5/mask_105_5.dat
new file mode 100644 (file)
index 0000000..bc8798c
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_105_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_109_5.dat b/lib/phpqrcode/cache/mask_5/mask_109_5.dat
new file mode 100644 (file)
index 0000000..25a3944
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_109_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_113_5.dat b/lib/phpqrcode/cache/mask_5/mask_113_5.dat
new file mode 100644 (file)
index 0000000..25f42b8
--- /dev/null
@@ -0,0 +1,9 @@
+xÚí\9bÁ
+\830\10Dïù\9aÝÿÿ¹^Ò6¥I\9063[è[ED\ fqÌc\98Å\18Ñ+\95\15ÏjÃy¤ì8\1d1\95û\c
\8b\1a7Úc«åªÆõû?uý}DK\994¦}\1eÇ\11ï,¥kkûg\16ì--\9e3\1c[÷½´U\85Æ\82y\84UX\85UXýSV\15\19 ³:Ï«ë\14ûÕ\9d\12\8dî,÷è|æýкSúô\ e¾\8a¯â«°
+«°
+«°
\ eVÉ«¢¼*ÑXÒ[á«ø*¾
+«°
+«°
+«°z\8aUò*ß\ 2N÷Vø*¾J\ 6\80UX\85UX\85ÕSóèXiýÊjTi4f¹õZkU^­Ôè_\87ìê­~\8aU\91çxþ\v\18}Õ®ñ\ 6Z/r\ 1
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_117_5.dat b/lib/phpqrcode/cache/mask_5/mask_117_5.dat
new file mode 100644 (file)
index 0000000..f236940
--- /dev/null
@@ -0,0 +1 @@
+xÚí\9bÁ\ e\84 \fDï|Mçÿ\7fn/*{\10ÁM¦ÕÍ+\84\98pÐI_&m\90\88\8eèѾ\9eCæõä­òÏ3­2\8fu­?o-k\1dgB7wc=¯\99\91ªU%yíoÝùRæhÓ¯șDo:Ö¶y¤R£JkQ^a\18\86a\18\86a\18\86ÿ\9dáqOgÚiJ¯ýç\f\9c\9dáqOgÚ)Ó\8a\ fãÃø0\fÃ0\fÃ0\fÃð[\19¦\1ev×ö>ç\81=\1d>\8c\ fãÃ0\fÃ0\fÃ0\fÃOf\98z\983\8e»=\1d>\8c\ fãÃ0\fÃ0\fÃ0ü.\863ÿ÷ïZ£$¯×·8\õp\94ÔÃùw\e4½Çá:ã¨ÖZÀp¤:q¹ÖÄù\ 1§X 7
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_121_5.dat b/lib/phpqrcode/cache/mask_5/mask_121_5.dat
new file mode 100644 (file)
index 0000000..9bb5c41
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_121_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_125_5.dat b/lib/phpqrcode/cache/mask_5/mask_125_5.dat
new file mode 100644 (file)
index 0000000..2161c50
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9bA
+Ä \f\9e&¹ÿåfc;\ eS´¶$?\8b\17\8b\94\8aØ\8f\8f\8fQ4ëáYaßhûyJ}9ºg=×Ú=©li\9f´.;nh_ÍÔýïwzý\8f\9e\1e\ 2í.\9d÷qô\83CW\94¶üÏȧyº×\ruëÞë\92Pk\17Ï;ÌÃ<ÌÃ<ÌÃ<ÌÃ|*óqëùÎü,\87\rm\93kWæqçNÊl\97\r\9fÇçñy\98\87y\98\87y\98\87y\98\87ù×Ì×^Ï\aæ2ä°\85sX|\1e\9fÇça\1eæa\1eæa\1eæa\1eæ\1f\99\149lH\ e\8bÏãóø<ÌÃ<ÌÃ<ÌÃ<Ì¿\9b÷ì\9b\81¿Ì[\ 5í¢õüên`ì\99T\15íÚûq\8a\1c¶8ó¡^\97\7f\1fvôy©ö\ f\ 4\b\8e«
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_129_5.dat b/lib/phpqrcode/cache/mask_5/mask_129_5.dat
new file mode 100644 (file)
index 0000000..f0c1d65
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_129_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_133_5.dat b/lib/phpqrcode/cache/mask_5/mask_133_5.dat
new file mode 100644 (file)
index 0000000..46be8b0
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜA
+Ã0\fDѽOcÝÿr]4%1mC\bT\12åÉÆ\ 4¯\84Ð÷x\16Î\9c[DvÌ=Æá{Fúú\96E¤Ï\8fµ\88äq½\16?Ý¿Ü\179ûk\16eÑ­\16ù}±'2^ý\1a\95c\9cç\9a4G\94\9e\9dÛ:¶3=J£K-\9aô\ 5F0\82\11\8c`\ 4#ÿÍHÒþ\88\ 6wð'#ß<{Ú~\97Z4é\v:BGè\88»\16F0\82\11\8c`\84\1fáGø\11~\84\8eÐ\11:\82\11\8c`\ 4#\18Á\b\8fð#t\84\8eÐ\11w-\8c`\ 4#\18Á\b\8fð#ü\b\1d¡#t\ 4#\18Á\bF0r·\16\85ïÙ\ f}Qõ\9a}e¤üÝòR\8bÚ;ø<ùçC\9e\1féV\8b\1e\97\91ìó¢ËÙY\18\ f-H\15\9e
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_137_5.dat b/lib/phpqrcode/cache/mask_5/mask_137_5.dat
new file mode 100644 (file)
index 0000000..064e7f2
--- /dev/null
@@ -0,0 +1,3 @@
+x򒆄
+\830\f\85áû>Móþ/·\eÇ\1ckÅ1mÂøªÈX\11º³ü=\89\96ö¾µÈhýÕÚîs\8få×áH"ã\1ck\12    Ç\19M\ e\84:îúê\963qÒOü¿W}ÿ9\92Ô\96¬I\94\89\93ýH\9e1\1cÙG;þ-\vÏ\16©sìîÚ¶ù?Ò[%M
+Å      v°\83\1dìü#;£zg^\ 3ÝÔ3Õd}Î6\8b\93Å9ÛÆΨÞ\99×@7õ\94Ò\84ïð\1d¾#gÃ\ e\83\1dì`\a;׳£Þ©\ï$ÔÅå\9f\15ð\1d¾ÃwälØÁ\ e\83\1dì`ç\17vÔ;Þ\8dÖ}7Êwø\ eß\91³a\a;ØÁ\ e\83\1dkA­\ 5µ\16\94ïð\1d¾#gÃ\ e\83\1dì`ç=N2wúxg§WÓ¤@n?Ûëc}½SQ\93:ûZd?+¨ÏÎú9vÆÎzß)£É\ 3æÝáP
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_141_5.dat b/lib/phpqrcode/cache/mask_5/mask_141_5.dat
new file mode 100644 (file)
index 0000000..60c1a8e
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_141_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_145_5.dat b/lib/phpqrcode/cache/mask_5/mask_145_5.dat
new file mode 100644 (file)
index 0000000..9303c07
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_145_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_149_5.dat b/lib/phpqrcode/cache/mask_5/mask_149_5.dat
new file mode 100644 (file)
index 0000000..4256cef
--- /dev/null
@@ -0,0 +1,3 @@
+xÚíÜ[
+Â0\10\ 5Ðÿ®&³ÿÍùcµ }\b-s+'\15\11\8a\10\87\9c^;AÇx\8eê\1eã=¦ÅëQ­Ï_gUÝ\8fﵪæãx­ÆÞGûõTí½ëȺ\1a\aV¹ïú\9c\bªUE®«å¬æõ_IÇ´;ÿ\8eÇT1×öÅóôÌ \8a\1a©µ
+]W\f2È \83\f2Èà\9d\f¶|oß5Øu\8fóê\86¬uI¶:(W\9dK­Uèº\92\83rP\ eÊA\ 6\19d\90A\ 6\19d\90A\ 6;\r\ f®íÑoíÝ_zNOæÏ{2rP\ eÊA9È \83\f2È \83\f2Èà9\ 6íÑß}\8f^Oæ\8c\9e\8c\1c\94\83rÐwQ\ 6\19d\90A\ 6\19d\90A\ 6ýnÂ\1e½\9e\8cßMÈA9(\a\19d\90A\ 6\19d\90A\ 6¯^Wó\84²\f\8eäZ\85Ý\ f.+\95³G\9f^«ÌÿëKêÉÜÑ`×µ}Ë`_\ eFÖê\ 1÷\9dk\11
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_153_5.dat b/lib/phpqrcode/cache/mask_5/mask_153_5.dat
new file mode 100644 (file)
index 0000000..deea09d
--- /dev/null
@@ -0,0 +1,2 @@
+x򒆄
+\82@\10\ 5Ðw¿fæÿ\7f®\97¬¨Ð¬`ïÖÙD"I¶ÁÃe\a­ê<:aÔu,7ï«\ 3öOfÖ\19Û³\9auÀëPÍ6\8eî~ñís¾z\9dÕÁÏûãsÞÏ,jÄÕ¬c¯³ëÌV\13\9döZv\7fߨmé°\f¸ì\97s^uÜH®YðuÆ&\9bl²É&\9bl²É&\9b_±9¤¯±ÚÜê\ 5\r;\16]³Ä^Ðjs«O;ì\98Ü\94\9brSn²É&\9bl²É&\9bl²9½Íy×\9b\83ÖèzA\7fÖ\v\92\9brSnÊM6Ùd\93M6Ùd\93M6§µéÞ\83\1f»÷@/è±\17$7å¦Ü\94\9bl²É&\9bl²É&\9blz\ eŽ\azA\9eC\91\9brSnÊM6Ùd\93M6Ùd\93ÍOlîþ7á°\9aUìu¶NªãÖ\9b\15»F¯\17Ú\13\1a·óÌê\ 5ÍP³P\9b\15\97\9cSÔ,l;\ 1HûO§
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_157_5.dat b/lib/phpqrcode/cache/mask_5/mask_157_5.dat
new file mode 100644 (file)
index 0000000..176e2a6
--- /dev/null
@@ -0,0 +1 @@
+xÚíØ1\ e\830\10DÑÞ§ñÞÿri\9c\98(  r*\8f¥· \84\\99Õ~>Cï£*¥ú¬v¹ï\15sýØ]Å\9c_{W!Çzﶬ/ÏÝÞõ÷ÝÅÕ)½Ë\99»¹Áöä¤\12\8fvÿ\f\9bÏV\91®\18×6ÜV\91\95Þ»ð¹Ã,f1\8bYÌb\16³\98\8dÊ\15\vÌn^o¯¿>¿þ\ 6í\Oï]øÜñ,Ïò,Ïb\16³\98Å,f1\8bYyV\9e\95gåY\9eåY\9eåYÌb\16³\98Å,f1+Ïʳò¬<˳<˳¾\8d1\8bYÌb\16³\98Ŭ<+Ïʳò,Ïò,Ïb\16³\98Å,f1\8bYyV\9e\95gåY\9eåY\9eåYÌb\16³\98Å,fÿïÝukys77\97Èì}ïvç\8a\1e\9dÉæmb\9e=¥wÙsw\1e³)ï»tW\ 4Ö\ 3\86Ó:®
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_161_5.dat b/lib/phpqrcode/cache/mask_5/mask_161_5.dat
new file mode 100644 (file)
index 0000000..70d5fb0
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜI
+\83@\10\ 5н§éºÿå²ÑDp@\rèo|m\90\10        \98¢\1fßrHk㨤Ñ~c\98½o\15³^ÝÃJz­×°\82\96#5l»¿î¦S_92\ fÛî\f©\93[¯}¾ÜÃÈ\11\8a\9f\87ó=\9cìTê2ìÿÆ\80×P\91\992[\ fc\ eVìè¡\86\1dÌC\96Yf\99å'-\87\1cÛìXÎ9>üv§Ë~u»\93½sK\ f5ì`\1eÊe¹,\97å2Ë,³Ì2Ë,³Ì2Ëç-ë\97ßÐ//¯/o_q¾}KÇç¾ä²\\96Ër\99e\96Yf\99e\96Yf\99å³\96õËoè\97Ý+òÿ¹/¹,\97å²\f\99e\96Yf\99e\96YfÙ³\15úe÷\8ax¶B.Ëe¹Ì2Ë,³Ì2Ë,³Ì²g+ôËî\15ñl\85\\96ËrÙ16Ë,³Ì2Ë,³üì<\9cv.×rë¥\86Á½Þ¼\82\99ýrO5Ìÿ\9föÔs_ýZÎÉ\94uËI¹\1c\ fìÞ*\9f
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_165_5.dat b/lib/phpqrcode/cache/mask_5/mask_165_5.dat
new file mode 100644 (file)
index 0000000..94af813
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_165_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_169_5.dat b/lib/phpqrcode/cache/mask_5/mask_169_5.dat
new file mode 100644 (file)
index 0000000..921a770
--- /dev/null
@@ -0,0 +1 @@
+xÚíÛÑj\840\10\ 5Ð÷|Íäÿ\7f®/¶niµ¢K¹£'\8aÈÊ.\12rö:ÁT-m&¶ZÛx9¯\19yüq§3rÿµOgàv¼OO_zׯ\1d\1e§u`\ 4]ÿüÈ·¾ßitëا\99ãt½Ùñil¦oc¿\17\82ö1ã3j9\8e%_g|ëÔ§\8dÆ)ûì³Ï>ûì³Ï>ûÏ°¿=×\17teÌ&õþ_ã4¤Þÿ²¿=×\17t¥U\9fÊ}¹/÷å>ûì³Ï>ûì³Ï>ûO´¯Þ\7f\1f5/u\93¹>¹/÷å¾Üg\9f}öÙg\9f}öÙgÿ®öÕûO®÷½Ûsv®OîË}¹/÷Ùg\9f}öÙg\9f}öÙ·\96G½o-\8fw{¬å\91ûr_î{æg\9f}öÙg\9f}öÙg_½¯Þ÷n\8fµ<r_îË}Ïüì³Ï>ûì³Ïþ=ì×n]\984Nk§Öβ_\17Êðÿ­÷«M½¿\9e¦×û\1dû´Ï8ím?ñÿ´SF\85·\ f<\12\1e·
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_173_5.dat b/lib/phpqrcode/cache/mask_5/mask_173_5.dat
new file mode 100644 (file)
index 0000000..f9a6741
--- /dev/null
@@ -0,0 +1,4 @@
+xÚíÛ[
+\830\10\ 5Ðÿ¬&³ÿÍõG1Ðø¢\14gäD)\ 5[°Cz¼\ e±÷eDÖÑ·Ñ\86÷=R¾NÏ6²îóÚFÒíJm\8f\vÞÏJq÷P\9c}ëxÞö\vséîÑ_¾õ}¶éG\81ÚF©y;\9eíú¿\8b
+[;ý]\99ö\16é¯eÃk[®ÅQbT«m±yË\ 4&0\81    L`ÂÌ\84Y?á¨ÇðرÝÚæ¼wØ\9b·   ï\1d\16\13\84£\1eÃcÇÊÕVN\90\13ä\ 49Á½\ 3\13\98À\ 4&0\81 L`\ 2\13\98\90×\84\84¤}0=F=F9AN\90\13ä\ 4÷\ eL`\ 2\13\98À\ 4&0\81   L`Bz\13¬Y²fI\8fñß=F9AN\90\13ä\ 4&0\81       L`\ 2\13\98À\ 4&0\81      \9e\8b´fI\8fÑs\91r\82\9c 'È L`\ 2\13\98À\ 4&0\81      L`\ 2\13<\17\92\1e£ç"å\ 49AN\90\13\98À\ 4&0\81      L`\ 2\13\98ðV\13Ö\13­aB¯XÛ"ý\84±²ù×,U­m\85>Øö±
+=Æw\98\90óZ¶gBÎ\9cPª¶\1f\94\v!8
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_177_5.dat b/lib/phpqrcode/cache/mask_5/mask_177_5.dat
new file mode 100644 (file)
index 0000000..b07c636
--- /dev/null
@@ -0,0 +1,11 @@
+xÚíÝÑ\8aÂ0\10\ 5Ð÷~ÍÌÿÿܾح\88\9a\8a\vÎuO,"\14%\rñô:$Xui=¹ÕѶ«×Õ\83\9fïô¸g\1f÷Ƹ\a\8fq­.úÕSo~æz\1e×\89¹õWï:ó\99·=\8eh1cÜqóøèñþ]ì\94Ƕ¼îiÇÖ!÷¼ßçírßî\98\96\81ó\98\15¬`\ 5+XÁ
+V°\82\15   õ\8aµ\15Óê\15»\15\8fj\9bÏj\9e\1f;\97\81óX®\90
+¹Âo\10\82\15¬`\ 5+XÁ
+V°â?[1µ^ñh-Ö³5Z\1f;§¶©¶ùrmS®\90
+¹Âo\10\82\15¬`\ 5+XÁ
+V°â;¬°\16ËZ,µÍYµM¹B®\90
+V°\82\15¬`\ 5+XÁ
+V°\82\15ö\99Z\8be\9f©Ú¦}¦r\85\!WÈ\15¬`\ 5+XÁ
+V°\82\15¬`\ 5+ì3µ\16KmÓ>S¹B®\90
+V°\82\15¬`\ 5+XÁ
+V°¢cþ\aò\18ã\8a\9bÇ{g;¦^Qq5¡ZU»ÆÕÝ®û\9fQÛL\1eã0+*&YD\8fqÈñ\ 3éô*6
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_21_5.dat b/lib/phpqrcode/cache/mask_5/mask_21_5.dat
new file mode 100644 (file)
index 0000000..04f97ea
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_21_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_25_5.dat b/lib/phpqrcode/cache/mask_5/mask_25_5.dat
new file mode 100644 (file)
index 0000000..c20b59b
--- /dev/null
@@ -0,0 +1,2 @@
+xÚ\9d\91a
+@!\b\83ÿï4îþ\97\vÞ³\18Ê¢\9a\11\99\r?,"ÅÔÌ\11"j\ 2½¦\16¡\8e?n<¶OÕ\13Ûäa\r¬w,\vl}rG\ e\8bM;ϦÏ9[\9eí\f¤¢_ú±\9dx|\9fÊÖ=´l4lK\ 3¨ýv½
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_29_5.dat b/lib/phpqrcode/cache/mask_5/mask_29_5.dat
new file mode 100644 (file)
index 0000000..217ec1b
--- /dev/null
@@ -0,0 +1,2 @@
+xÚÕ\92]
+À \f\83ß=M¿û_n0W  .«\8e=-\15Á\9f4¡mÄ\ 5\ 4y×B\80ìÓ+²\f\17\89·ÜR×á\93çô\88\8b\86$¼­Æ\83.=s/,\16+îB÷7\9eó³\9d\8dq®zÄ~\7f§q>=GéÙê\8eZùyÎ:\97Ü\ 3DR\9f«
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_33_5.dat b/lib/phpqrcode/cache/mask_5/mask_33_5.dat
new file mode 100644 (file)
index 0000000..726d7fd
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_33_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_37_5.dat b/lib/phpqrcode/cache/mask_5/mask_37_5.dat
new file mode 100644 (file)
index 0000000..6d32ca6
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_37_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_41_5.dat b/lib/phpqrcode/cache/mask_5/mask_41_5.dat
new file mode 100644 (file)
index 0000000..e07c617
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíTA
+À \f»÷5Íÿ?7\98«ÈXMtxÒ´x©¤ \85¸?@\82\98\9b7@ò¾~"é\ fN$õ\87SÖÉ°Ä{ø\ 3+C³¨Û\ 6A'Êör\P\8cp\ eè<Þ\8f÷-¼\a     Íº:S3\ 4s¹Ô\89ùÛ»ËÞ©Îz#\9eóqw\99ó\ 2\9b     >þ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_45_5.dat b/lib/phpqrcode/cache/mask_5/mask_45_5.dat
new file mode 100644 (file)
index 0000000..5168a17
--- /dev/null
@@ -0,0 +1 @@
+xÚíUA\ e\80 \f»ï5íÿ?ç\ 5\84\90U:N&Z\16"\86\94:;\ 64P\ 1\ 31=\83bNvSGÆM1¶ÜË\9b½n<ëv`q³¤{ìîßMg\ 4§ã¶\114þå=Gó\ 2-T¹\8bº?\9b\93Ôß='kíÈu\99Û­\9d\9e\93õ>\91ëß'¯®\1dçþ\1eÜ(éκ\8eö J\1eô{\ 3EßѵsÊ]È   ,§\1cs\eq\ 1\ 3\18\7fð
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_49_5.dat b/lib/phpqrcode/cache/mask_5/mask_49_5.dat
new file mode 100644 (file)
index 0000000..9f3f3cd
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_49_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_53_5.dat b/lib/phpqrcode/cache/mask_5/mask_53_5.dat
new file mode 100644 (file)
index 0000000..449807b
--- /dev/null
@@ -0,0 +1 @@
+xÚíVA\ eÀ \b»ó\1aúÿÏíâ"Ë\10\vzYf5Æ\90\98JC ª\r\98A;ÄÜ\15áé¾Âlû\\98,\86ë\1ddòR.¯\f\12\(åe_Ýú ³\ 4æ\ 3ô\16еaNi5\86\14ª\ż\8e\86ÿÐÐë\87aLPòò(¯ÐàÒ;\9d×ý\ 6±2שÃãå¯jÈN6O\ru\85+é¯Ñl\13{y\95«6odúá^\rãÚàçC[\87\v\17\ f\14\84
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_57_5.dat b/lib/phpqrcode/cache/mask_5/mask_57_5.dat
new file mode 100644 (file)
index 0000000..c7dd81f
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíVA
+À \f»÷5Éÿ?·\8bN\ fÝlª\83\1dZ\8bHAbB\89\ 5Z0\12\18\19\fìÎMÆÒÃd`\ 51Ýz\94'"<Õ\901\99æ9nvͨ.ãô\f)\8db\ fÝ»µ~¤\1c;\98\e<KÛÒö\87Ú¾x_×Ö÷ÛEu\v3ã·][ÿ/[T«oË\13JÛϵUç¾\81\894Ïçévå     HûPnÖäë|»òÛ\13\98Im!wî\11L1/8,gã
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_61_5.dat b/lib/phpqrcode/cache/mask_5/mask_61_5.dat
new file mode 100644 (file)
index 0000000..dee749f
--- /dev/null
@@ -0,0 +1 @@
+xÚí\97Q\ e\80 \fCÿw\9aíþ\97óC\f\10ÁÕ\96Ï\15B\f\89¾´.\13Ý\9b\ 2\95wÙpí\ 1¯¯»\ 3\9eKv\80\ 3g;ÌÞû\ 3|3:ÅÆ}÷\aØ\93c0þ\19É´ j­­Öj7(©lÑwe^\99WæJæɾ\85ÐSïÌwßÐt_e\8b¾«Î«·Tæ\95ù\8aM\9cÏ\aß\7fOçsæô9ubs=Õ?þ\89ò~~\8a­ù>\9f9ú¾ÕZ#t\ 1õBÁ~
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_65_5.dat b/lib/phpqrcode/cache/mask_5/mask_65_5.dat
new file mode 100644 (file)
index 0000000..ecd9380
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_65_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_69_5.dat b/lib/phpqrcode/cache/mask_5/mask_69_5.dat
new file mode 100644 (file)
index 0000000..ead4edc
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_69_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_73_5.dat b/lib/phpqrcode/cache/mask_5/mask_73_5.dat
new file mode 100644 (file)
index 0000000..0000117
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_73_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_77_5.dat b/lib/phpqrcode/cache/mask_5/mask_77_5.dat
new file mode 100644 (file)
index 0000000..1652cdc
--- /dev/null
@@ -0,0 +1 @@
+xÚí\98Q\ e\80 \fCÿw\9aõþ\97ó\a#&C`T£±Ã\10Ã\a\94ƹ\97B¶ü(«Þ\1d©9Ü\rÙ'Ö\86ä\18ÑÖ\12ì\83Ú¢ÓÀÀzk·å"h\ 3õÜêÝv.`\f»øâücXöB5[ñ\1a(ÅÖF>71\15Ó/3\8dò4ÎØΪ\81z÷^'ÑÔÝ[\98Fy\1aglg\95®M>\95OÅTLÅ4Ï\94{÷&3ëWy*\9fʧb*¦ï`ºÚ\19<3õ;´\91îÞVo0÷/s\976nÿ\8d\91§Ï0Íya½ß[û\94ªm\ 3á\18cE
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_81_5.dat b/lib/phpqrcode/cache/mask_5/mask_81_5.dat
new file mode 100644 (file)
index 0000000..71215e9
--- /dev/null
@@ -0,0 +1,3 @@
+xÚí\98Á
+À \fCï~Móÿ?·Ãtz°U4½\8cÔ"£\a        }t\81\9aÕÀMX\8f2|\e.îÉ\8b¸Ë\99F\\9c\1d\8d\9eð¸\1eõÑÂ~mõ\91\154\8d ÷±¿ØX\81u
+\ 6Ù\94, ÍÌw\97:\97 E\86Æ\84>\8aµXÿ\9dõ̯=\ f_Ö]\8dg>\13±>óÂÆzæ×\9e\87/ë)\1a\9a\16\16kùµüZs­\7f¸X\8bµX¿¬Y{Ü®Ñè}ô¶áç~mt¿æî\9a\11ìÃÏý:S#\99µÑ&;U#)\1f\bñÚä
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_85_5.dat b/lib/phpqrcode/cache/mask_5/mask_85_5.dat
new file mode 100644 (file)
index 0000000..09cf0e2
Binary files /dev/null and b/lib/phpqrcode/cache/mask_5/mask_85_5.dat differ
diff --git a/lib/phpqrcode/cache/mask_5/mask_89_5.dat b/lib/phpqrcode/cache/mask_5/mask_89_5.dat
new file mode 100644 (file)
index 0000000..5fff530
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\99á
+à\f\84ÿû4Éû¿Üþ¸5eÆÙå®npQ¤´ Gú\99\ 4cÖÍ\11f\87µðl^^\87;;b\8e5;`¬k¶©¶U͹߮¾\7fß\19j`ÍNósÜùùO\1d=Ú\[a6\87\9eÁ°¶~Þ\1dnLÍD?\8b\r±!6ÄÆ\7f°ñu\1eüÈF%w¿*Ȭ²ÌkÎù\17¦f¢\9f\157\147\94\86Ø\10\eb\83Ã\86ê\8dXodw_ù\9dØÂ\97mµ¨â\86â\86Ø\10\ebClü\ 2\eÈNÛ\99\rck&äîY¯­VoÜ¡\99×·B×¢»Ø¨\9cAl\1f\r\9aæ\aJjÜx
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_93_5.dat b/lib/phpqrcode/cache/mask_5/mask_93_5.dat
new file mode 100644 (file)
index 0000000..ec4240b
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\99K
+Ã0\fD÷>\8dæþ\97ë&©»ð¯µ&\ráÉÆ\ 4\ffP^\94Á\8a8BY\115ÊÇs(im\9c®¼ÙÒ®¤±®=f\ 2\97µ÷3¨/wÛ§§\87E»¬y¯§\9fïY\8e\1awf\91á[}¯å¨\r²\84[»9ï0\ 330\ 33ÏefÇÏÌ\99Ùñ3'3=\ f<òÆK{níæ¼Sg¨3ü\9b`\ 6f`\ 6f`æ¿Ìdø\99Þ\9dÞè®oi\ f\ fü£\a¦ÎPgø7Á\fÌÀ\fÌÜ\87\19G\7fµj\ fkÞG]í}?\13V/æë\rkÒ×Þ÷ÀWi72\13\96Js\99vÃ|\ 1*"f^
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_5/mask_97_5.dat b/lib/phpqrcode/cache/mask_5/mask_97_5.dat
new file mode 100644 (file)
index 0000000..509d117
--- /dev/null
@@ -0,0 +1 @@
+xÚí\9aA\ e\84 \f\9c¦½ÿåf!3bf\ 65í¯Æ¼B\88\91\ 5ùé£|#f=<3l\8d6<\9b§\8e_+xjÿ©Á\13Û)\r\93ÙÝ©Ãy°\93ïÿ¯ \89J\r¹yX\17iïÜ»ª5\1f¤IzsÙ\9eîcëuÄeQ¡¡ \ f°\ 4\ 4\ 4K·d)â\97>,ͼwx®D\83Ö·.,;ãÂsÔ%ê\12g\1c\12\12,=\80¥ëýRÐóá½\93¼7u\89ºÄ\19\a\ 4K°ôT\96\ 4\86<(n   lY\92þ\9fÞhÐùVÛ¹s\12÷Þ\95\1aôy¸\8c¥´ýP±§Eñ\ 2<¸öq
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_101_6.dat b/lib/phpqrcode/cache/mask_6/mask_101_6.dat
new file mode 100644 (file)
index 0000000..13f97a0
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9ak
+\840\f\84ÿç4Éý/·Ën_.\89Ê2#\88S\8bH\946±_\93PâÞZ \9bÏf˳\7f_¡îé,ï7Ø\9eÛ\12à+·%×åWÇÂîd\84Â\96âÏnå}\96\93_&«Ok;\8c\9d×úP¾Ç\18fµ>³t\1e\82yY×\ 5¾]Öns\r°;\7fs·æs\82Ú,º!Lk¬Á\10Ô\85\11cbL\8c\8912cÔX9\18Ëó1 ÔÀZç#XÐò±En#;Ïsv\8cT~L~L±R\8c\8911vsÆ.\8b\95\94³\8b1\82ò±¿ò1ù1ù1ÅJ1&ÆÄØ\8d\19ÓÙÅ\83ó1ù1ù1ÅJ1&Æ\9eÄ\18«²gËØ\fKLƪj\18l¬¬k{\90g\17¼Ú\9e5\1fóKò1/ëÇ\90ù\18¯~,a\8c»ù\89õc«\1f«\19\ 3ö\17$\13\93Þ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_105_6.dat b/lib/phpqrcode/cache/mask_6/mask_105_6.dat
new file mode 100644 (file)
index 0000000..a58fec7
--- /dev/null
@@ -0,0 +1,3 @@
+xÚí\9aQ
+\83@\fDÿs\9aäþ\97k¡®ÙBÒZ»#\bo\15)Sd\8d}\9dÌGÜ·\15\8aå¹lú쯯Ö^\8b\9d\9eúú³®)\ 4G]Sñ4ÝS\1e×ë\9aÞÞñ¸ó?½#BºZö:\1a\7fÕã+{þñÅ\1f×s§ÁH¨\ f\e\eKþNóiI\8eÂ!¦«mþ\14òe1
+RWe\e9!ÿ¡`\ fö`ï¶ìUy¯Ë\80§uë:æª\9e»ëÖå\9aU=w×-ûo\95Ôº\ 4wB·}cMÞK\1dßÃ÷è¹°\a\a{ä=ò\1ey\ fßÃ÷è¹°\a\a{ä=ò\1ey\ fßÃ÷è¹°\a{°wSö¤caoìi'Ýföºé½õyO=C\95yO=C\95\9bß[\9f÷Äó{SÞ»\9c=\97;\9f|v4}ϯ2\89\a¨¸0§
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_109_6.dat b/lib/phpqrcode/cache/mask_6/mask_109_6.dat
new file mode 100644 (file)
index 0000000..be7b474
--- /dev/null
@@ -0,0 +1 @@
+xÚí\9aA\ eÂ0\f\ 4ï~\8dýÿÏ\81DB\13HÓC½\16HãV\152\87Æ0Ùn¥uo\15ªò£lø쯯²¯Ë»=Û¢s9[\88\8eõl'«ºÝ?\99íë7Ïí\7fR"¯\v&\93§Û2\99Õ\7fßÏ:7QqX_\95\r§\1dû]£$ÓÕ\9a\96EIYôÁ*¦³ÆL\94üq0      \930      \930ù{LJýäз(s\\9dɳw\9cô¾\89¦X÷-Ó7^öÑIt\12\9d\84I\98\84I\98\84Iü$~\12?\89\930    \930      \930\89\9fÄOâ'ÑIt\92g7LÂ$Lþ-\93\9b\84¡\80Iuzrfr\e\r\93^ê'}\93éÍ÷\93\95ùÉ(ÉO\1e~R\9fé]1Y²ãL\9dÄ\9euÒå9ó¡\1eQÍÓ\95
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_113_6.dat b/lib/phpqrcode/cache/mask_6/mask_113_6.dat
new file mode 100644 (file)
index 0000000..397f527
--- /dev/null
@@ -0,0 +1,3 @@
+xÚí\9bÑ\ e \fEßû5ôÿ\7f\e°¤Õ\89ëõÁÃÈbF6¨\1con\1d´¶\15¯,m\14\9b>·gSÅ9ìñÞRWã\18½ð\88c\8cÇ\95\ e9\8c&»%\891ùöÏ_÷Þcx= GR^°\9a\8dw-z?Ãêdzõvî\1f=î,¹ê°}Ô¥?ǹÚ\98³:Å9\9cmÓ=\97\15ó=@U\94\81ä²\89\84UX\85UXý\ 3Ve\1e ³\1aûÕÜÅ~Õby4WúÕéiæ\12¿:Ýe=ó\89ó¡<SZmAWÑUt\15Va\15Va\15VaõZVñ«5~µüÿÕþ´\1fåVè*º\8a®Â*¬Â*¬Â*¬^Å*~\95w\ 1\15º\8a®¢«°
+«°
+«°ZϪb¥õ\91ÕayT¬f«\90ëüj¾ÖºÊ¯jÖZÏ~µÉß\ 5´t_@Un¥Ù\17\10°ª\13\1dѾ\80YWsV\8bê\r¶[|H
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_117_6.dat b/lib/phpqrcode/cache/mask_6/mask_117_6.dat
new file mode 100644 (file)
index 0000000..99108be
--- /dev/null
@@ -0,0 +1 @@
+xÚí\9ba\ e \fFÿ÷4íý/§\89#E\ 5\9c\8cv3¾nYÌ\88\8c\8e·/m ª\9bY´©\9bT¿õÑ\14wm<õ~?ölûjÁGÛ×îø\9aC×qSÿ/¯¾6f£tÝ\9f¥oï¿Ó\94f\1f\18\16l'Ã\13³7`Á\9fZø²ÌCÊ Â?×ú\14\9f¥heª®²i¤¥\9aXq4Ó[Ù\80´Ô\89\85a\18\86a\18\86a\18þ\ 3\86û9]P\8bÌÅñ\a³\ 2Y\9eÍìéM<6îçaË[äð¸gÞ\ 2:\8c\ e£Ã0\fÃ0\fÃ0\fÃ\97g\98x8:\1eÎYã¨z;7§C\87Ñat\18\86a\18\86a\18\86aøº\f\13\ f³Æ±,§C\87Ñat\18\86a\18\86a\18\86\7f\8bá´íþO\fçU6Ô\f\8f«8¢âáÌ=ð\1e\ f\81÷xx\Ç\11µÆ\91XÇQåt§2¬©J\9cZ\8bä:¬g\88Ó\r\bC+\
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_121_6.dat b/lib/phpqrcode/cache/mask_6/mask_121_6.dat
new file mode 100644 (file)
index 0000000..f3c3299
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_121_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_125_6.dat b/lib/phpqrcode/cache/mask_6/mask_125_6.dat
new file mode 100644 (file)
index 0000000..ff64d44
--- /dev/null
@@ -0,0 +1 @@
+xÚí\9bA\ e\840\b\9c¦Üÿr3\99±¶&H\8d\r°yØ\18\13b+öùSlhí0Ͳ6L¦ëöwE\9fÍÑ¿\9e\9cfÇ®I\87\1d»÷¤v\1cî;»íó&vw\9e,o\1fýÅ]\ 6ué¶dþ]|\ f½kæ£\98ø\8dÞ9Ô\8a\93¦}îs\931»9Jw9Ë¡½Zb¢=ð\8aèå\80PK&\1eæa\1eæa\1eæa\1eæa>\80ù\92õüɼ\97Ã\86ú$<>¯OÑô\1cvòÊù'ÅûË\12åCçÑyt\1eæa\1eæa\1eæa\1eæa~\9bùòõ|ê\9eÔÙ'9li\ e\8bΣóè<ÌÃ<ÌÃ<ÌÃ<ÌÃü\16óìI\91æç°è<:\8fÎÃ<ÌÃ<ÌÃ<ÌÃü\1eóÙ\95\81WæDz¸\82y¿:.z=¿ª\r\8cÝ\93ʯ\r\9csØV\9aöE=ll\ e\9b_\ fk0_#v\ 5õ°³Î¯\98\ fm\1fÝ÷\9bj
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_129_6.dat b/lib/phpqrcode/cache/mask_6/mask_129_6.dat
new file mode 100644 (file)
index 0000000..b4695c3
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_129_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_133_6.dat b/lib/phpqrcode/cache/mask_6/mask_133_6.dat
new file mode 100644 (file)
index 0000000..40911dc
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_133_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_137_6.dat b/lib/phpqrcode/cache/mask_6/mask_137_6.dat
new file mode 100644 (file)
index 0000000..43ccb68
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9cÑ\ e\83 \fEßû5ðÿ?·e\13\85¥ÕÍÍ^²\1c4f\19\81Håp[1-e)UQÊV¬û]\9eU\99W÷Nî5ù§o\93*8|\9b\8c÷\eÛ©ìW¹£\8f\9a\ 46\19\9ebk\e?Ý÷ÿ\8f{\8bf¬´\84ì|>¾sÖª\87ìür6\1cöö¸\936\87«ú°6\1aÉrÒ\9f¶=ûü\15v¸Ú²þWy±Ú\f¢¶\8a-\13¸Ê'
+ìÀ\ eìÀÎ\9f²ãÅ;q\ftQ\8dE>U\96϶öf\91¯\95ê³­ìxñN\1c\ 3]TcÑ(sâ\9d®7t\aÝAwðÙ`\av`\av`\av`çkv\88wf\8ewtû;]«ùÞ\15 ;è\ eº\83Ï\ 6\ 3\ 3\ 3;çÙ!Þ\99;Þaoôå]\ 1º\83î ;øl°\ 3\ 3\ 3;°Ã· |\vÊ· è\ eº\83îà³Á\ eìÀ\ eìÀ\ eì\8cì(3}\8cìl.­\9a\1d\85\89r}äÇ;Ú\\1f}¼S¦Ù\e-A\9e\9cüw\ 5Ú<9\ e;úEV\9c'§×\9d\88\9dôó\ 6¡\ 1ð\90
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_141_6.dat b/lib/phpqrcode/cache/mask_6/mask_141_6.dat
new file mode 100644 (file)
index 0000000..0340409
--- /dev/null
@@ -0,0 +1,10 @@
+xÚí\9ca\ e \fFÿ÷4íý/§\89c Òêâ¤]òز\18È\90\14\1e\1f\85¥ª[²¬¤=Éð[\1f\9f\93ÖÜósî¹m,é\9aÛfÒn/ß|kj\ä¿òj\e§?g½ÝþòÈ[qþû(NO\1f\98Zc5û\8a©SGGP[oM\e×Vá\92Ö¸´éf¼¥÷vÖL<<eÓ
++\91Ä\9aa*XG6\10¬ÄÀ\81)\98\82)\98\82)\98\82©cLåúS½6±t\7fj¨Mö]\ 2o÷ÀßW8¿D~ñ\ f\9aD£`\95?µ×\86N¡Sè\14k?\98\82)\98\82)\98\82)\98\14þÔUü)ïÌ×?\vþSIÁ=
+t
+\9dB§XûÁ\14\14\14LÁT5¦ð§®âOqæ\eîQ Sè\14:ÅÚ\ f¦`
+¦`
+¦`
+¦ø\86\16\7f\8a3_¾¡E§Ð)t
+¦`
+¦`
+¦`êâL¥\87¿yb*?2ÐÈT\145i½?U!ÆK÷§*ÄxéþT\147iý\99o\81¸IÃ\1eEI¦´\84R\95\88EÖuJ+MÆ7\vºÄ'
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_145_6.dat b/lib/phpqrcode/cache/mask_6/mask_145_6.dat
new file mode 100644 (file)
index 0000000..6c14215
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_145_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_149_6.dat b/lib/phpqrcode/cache/mask_6/mask_149_6.dat
new file mode 100644 (file)
index 0000000..69e9883
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9cÑ
+\830\fEßó5ÍÿÿÜÆfµ\834\137ÍÝ8UD\b\936Ëñ\92\14ÓÚ2¼z´mØpß\9e¦ªk8«»¥ö\8c}åÅGì«ÉôÓ\95ÅëN}?}æÄW\93\7f:\8f\83ÈÚguàWA´Ë\8c7\f\1f;­)\83ÇâãÃ\98{̪ǿ+\1dÖWPþº\1aOÛ¢¤öÍþrµE\83\j\98wG)yË\96àw©À\82A\18\84A\18\84A\18\84AM\ 6%òÁá\99æ2ùà`µµ\1a\92d\15\94³l\96¯àÚ|p}¦eqP\92\ f¢\83è :\88\ e \f \f \f \fÂàe\f\83³=úlïþT\e5\99\7f©É \83è :\88\ e \f \f \f \fÂà©\f²Gÿë{ôÔdö×dÐAt\10\1dD\aa\10\ 6a\10\ 6a\10\ 6a\10\ 6a\90ï&Ø£§&Ãw\13è :\88\ e \f \f \f \fÖ1¨ÒÙð\95Á-MRb0éÖW\98\ f\rëöèuz\e\8e5\99&Y\93iI\7fѺ\9a\8cN\7fÑ\80\97»P\7fÑQ\aS\ 6«Î\eþL}4
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_153_6.dat b/lib/phpqrcode/cache/mask_6/mask_153_6.dat
new file mode 100644 (file)
index 0000000..3ab6130
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_153_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_157_6.dat b/lib/phpqrcode/cache/mask_6/mask_157_6.dat
new file mode 100644 (file)
index 0000000..b45c0ce
--- /dev/null
@@ -0,0 +1 @@
+xÚíÝA\ e\82@\10DÑ}\9ffæþ\97ÓD\10Ð\ 1\13\17N%¾\81\10Ón Ã§ü,ÚÖ\96ÕSVÛVí>·ÇW³\8fó»\97CöaïzÈ6îÝÉUü¼~Ò»·{`ný\95\8a¸õ\81ÙÉÝ»dvVýy~µrÒ\13·Z¯"çq·Ûk{>g$ÅáXK¶õÈU}m\b÷ja¤GÞx\98Å,f1\8bYÌbö¿\99\8dòÙ]½z¬\91­Ì\9e½\83\9a\90.\8dë5Ó[?Öå¬\9c\95³r\16³\98Å,f1\8bYÌòY>Ëgù¬\9c\95³rVÎb\16³\98Å,f1\8bY>Ëgù,\9f\95³rVÎúm\8cYÌb\16³\98Å,fù,\9få³|VÎÊY9\8bYÌb\16³\98Å,fù,\9få³|VÎÊY9+g1\8bYÌb\16³\98ý\8aÙ\8b       ½\ 1̦M7>2{9\1azºÏ¶h\9fm\173Éçûlò|ã\1e9ßxóÙ¼\99ä#f#\9fx\956     ÿ\98³-î\7f\ 4\ 6%\85N'
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_161_6.dat b/lib/phpqrcode/cache/mask_6/mask_161_6.dat
new file mode 100644 (file)
index 0000000..ecec68b
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_161_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_165_6.dat b/lib/phpqrcode/cache/mask_6/mask_165_6.dat
new file mode 100644 (file)
index 0000000..d641dfa
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_165_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_169_6.dat b/lib/phpqrcode/cache/mask_6/mask_169_6.dat
new file mode 100644 (file)
index 0000000..ae68972
--- /dev/null
@@ -0,0 +1 @@
+xÚíÝáJÃ0\14\ 6Ðÿ÷i\92÷\7f9\ 5[ÛJÓÉ\98ók{²1Äb\98!gßnhHkSë\89­-­V?·¯KI¯»ïôó×\81ÏÝ1í\81\8fý1Ýû§Æ£Ý\8e/½¨·Á\98\8eæÉ`\16\8dþê/zû)*º=°\9f\8fì¿g6\1eõöý^k6ÖÓ\1f5\8fCæÇéêYË<ÉK¨ÍkMùÚã[õy@ÓGµ&_=~¢²Ï>ûì³Ï>ûì³\7f\eûãµ¾ +õþõ\90'{«\84Õ§_õVË\8aÚx­-âJýËø<Ó\9bÜ\97ûr_î³Ï>ûì³Ï>ûì³\7fiûêý;×ûù÷ö\9cr­OîË}¹/÷Ùg\9f}öÙg\9f}öÙ¿¦}õþ½ë}÷ö¼x­OîË}¹/÷Ùg\9f}öÙg\9f}öÙ·\97G½o/\8f{{ìå\91ûr_îûÎÏ>ûì³Ï>ûì³o/\8fzß^\1e÷öØË#÷å¾Ü÷\9d\9f}öÙg\9f}öÙ¿\86ý£\13d²ì'\9fʳµ\7f|ÔQR½ßNSï·Ã3¹\92êý³\9cËÓãÏåYÖú²ÏäÚ³\1fÿ\89ZÉ'Çms¿E\9fÇ·j\1f\a\9b
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_173_6.dat b/lib/phpqrcode/cache/mask_6/mask_173_6.dat
new file mode 100644 (file)
index 0000000..95fa97c
--- /dev/null
@@ -0,0 +1 @@
+xÚíÝa\8aÂ0\10\ 6Ðÿ9MrÿËí¢­M SÜ*:a_-²\905hh_¿\ e)©uÛZÖ­\1e[éþ®÷¦lïÓoûÛ\92s\9f\8fmKú\9a\8fíø\9bNÇ{òÿãHÌ?x­Ï`l\87#fï9>\92Ú\9f[¯õ\19\9deé·Ð\84Ï\8eß\93­¡   ï?þ^ìóöm÷ó®­ð*û/KËm¿\97ãhËy%\eÞËv-nKl¥í\ 3»Âè\96í¤kK\1c¸L`\ 2\13\98À\ 4&\ 4&Ìê     g5\86¯µ\95(·gºwxôY¢Ü\9eîÞáa¬\9epVcøZ[\89Æ#O=¡ëSN\90\13ä\ 49Á½\ 3\13\98À\ 4&0\81  L`\ 2\13\98\90Ç\84¥ê      ¹ç't­j\8cj\8c]\8dQN\90\13ä\ 49Á½\ 3\13\98À\ 4&0\81    L`\ 2\13\98\90Á\ 4s\96ÌYRcü@\8dQN\90\13ä\ 49\81       L`\ 2\13\98À\ 4&0\81      L`\82ç"ÍYRcô\¤\9c 'È        r\ 2\13\98À\ 4&0\81       L`\ 2\13\98À\ 4ÏE\9a³¤Æè¹H9AN\90\13ä\ 4&0\81      L`\ 2\13\98À\ 4\e\13²¯\f7\9apÜ6¯`Â|õ²¬õ\84hm¸\9cs\96ò¯\r××\18ëR5Æ\1a¬\17\99³Æ\98\7f½È\89 k\Ì\16X/²Ï        \91       )÷\1fg\ 5
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_177_6.dat b/lib/phpqrcode/cache/mask_6/mask_177_6.dat
new file mode 100644 (file)
index 0000000..e9f0476
--- /dev/null
@@ -0,0 +1,14 @@
+xÚíÝÑn\84 \10\85á{\9e\ 6ÞÿåÚ¤*4\ 1vÛ´u¦û¡1\e\89£²ø{<\81L­Gi\91Kí¥\f¿ëGUÌíä\8aß÷Ç]çmÜ\ 2/ó6\9eÜÛjÿõ?mZ¤m\ eüzÌy\e/úξgÍjÏ\13ÿ\ÌÕ\93\97¢<`Å_¶ã>f{\8a\15¿Ð\1f¿\1d³_ñù,¶,K9o 4\8eǵô\1e\14ù\8d7lËñÞniJig\ 3giår<¤-MGÆ
+¬À
+¬À
+¬À
+¬xuVÄ÷+zÌÒRø\15CÌr9\87+Gqç6ÞQW\9eñb"ø\15×Qe×ï"ù\15WLº\82® +è
+ß X\81\15X\81\15X\81\15X\81\15X\81\15\8a|~Åj,Ön\8cÖmu¼MÞæÚÛ¤+è
\82®ð\r\82\15X\81\15X\81\15X\81\15X\81\15Xñ¯Ya,\96±X¼Í;¼Mº\82® +è
+ß X\81\15X\81\15X\81\15X\81\15X\81\15æ\99\1a\8be\9e)oÓ<Sº\82® +è
+¬À
+¬À
+¬À
+¬À
+¬À
+¬0ÏÔX,Þ¦y¦t\ 5]AWÐ\15X\81\15X\81\15X\81\15X\81\15X\81\15;V¤H\ 3ù\89\1592m\8e¬Øe3\8déWdÉQØÇbeÉQؽÍ]>Ó\98Þf\92\83·\99\96\155\8d²H\93û¸ë\8a\9aí¥÷\ 67/D\1c
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_21_6.dat b/lib/phpqrcode/cache/mask_6/mask_21_6.dat
new file mode 100644 (file)
index 0000000..6bd505b
--- /dev/null
@@ -0,0 +1 @@
+xÚ\9d\90Q\ eÀ \bCÿ9M{ÿËi\1c]èÒýX\891¤À\13 Å-½\vC!»\9dÉ\e³Dìû7\rW\fìÙ\9c§Ø&rDñ)~\19Î]<\ 2MΠ·3(>{\10\83ïA\f¡«ÿí\8ea\ 1²¼Sý
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_25_6.dat b/lib/phpqrcode/cache/mask_6/mask_25_6.dat
new file mode 100644 (file)
index 0000000..d45083a
--- /dev/null
@@ -0,0 +1 @@
+xÚ\9dQA\ eÀ \b»÷5öÿ\9fÛ2)\ 3êe+Ä(XmÊZ\ 1\ 6tÆ*(õÚ¹«;\9dÃ\bçtJã<å³\82\86_Ú¤\873°o\16\8a\12Ü\ f½Ú´"Ì¢\ 1\14\10zh\1f}Ñ&\ fqv\80µSGÊÖ\99,ó-÷\87\99J\9bÍ4}³\99¦oS[â\ 2ü}w\ 6
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_29_6.dat b/lib/phpqrcode/cache/mask_6/mask_29_6.dat
new file mode 100644 (file)
index 0000000..0408e22
--- /dev/null
@@ -0,0 +1,3 @@
+xÚÕRA
+À0\fºû\9aäÿ\9fÛXc\90Ôõ²ÓL(4E\94Ô\88B
+8C\bÖܾ޳nÃM©\9d+lÇ\9dªÃÕ\86O\9eé1]\81&\95Ú\8d¥4UëD-6-\90$:6ÊdZá?yæ\7fÛlôÝf£?í\98\rå\8e8?\9eß²±<Ûlô\9e}\9e¹g\9b\ 5\bí *
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_33_6.dat b/lib/phpqrcode/cache/mask_6/mask_33_6.dat
new file mode 100644 (file)
index 0000000..8de4ba5
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_33_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_37_6.dat b/lib/phpqrcode/cache/mask_6/mask_37_6.dat
new file mode 100644 (file)
index 0000000..b37ff0a
--- /dev/null
@@ -0,0 +1 @@
+xÚí\94A\ eÀ \b\ 4ï¼\86ýÿçÚT \18`½ôèj<PÜ0¡¢jB#ÿ&\9a´âù,Yo´îê\85fU¯Ùjó*UõÕ\8fú\95ÑYÀ\96¬[\83\95oY5\f\8c~\8a5\fT\ 27bnb, \85]ÆË\98\7fû\8fñü\82\90³¦\91\83-\8b¹Ñ÷\18ñÃÌqF:s¢\8ftæD\1f\19\ 1Øh\ 4Ù
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_41_6.dat b/lib/phpqrcode/cache/mask_6/mask_41_6.dat
new file mode 100644 (file)
index 0000000..c1535f7
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_41_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_45_6.dat b/lib/phpqrcode/cache/mask_6/mask_45_6.dat
new file mode 100644 (file)
index 0000000..a7da7ee
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_45_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_49_6.dat b/lib/phpqrcode/cache/mask_6/mask_49_6.dat
new file mode 100644 (file)
index 0000000..64ded70
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíVQ\ eÅ \bûïiàþ\97{K&\11·ÂêÇû\13\8dYX¤³Ø\81Ù0ï̦!=Ûý\8a­tÇån&Åðfp\8cWL
+±`¤/¯<Ï\93KVrU¢\14\1öbGpáê@ÄìÓ\91&fNë\8c/+ƽqÙà\ 1 ¢`ðàòA\ eWÿçêS\83É\ 3ßRGpõþ_5\1e|Æ|zÀ\15×xν:\1a\14¸¢\15ªåJ©\82+WE©m4hÛ\1a4Ú3t\1aÜ­\83.×Á©A­g`\É\19\81Òù¬÷ʤþ*Ù\ fÅFÈô
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_53_6.dat b/lib/phpqrcode/cache/mask_6/mask_53_6.dat
new file mode 100644 (file)
index 0000000..9139e32
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_53_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_57_6.dat b/lib/phpqrcode/cache/mask_6/mask_57_6.dat
new file mode 100644 (file)
index 0000000..61e7e24
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíWÑ\ eà\b|çkàÿ\7f®K¦ÂÜQ¹-Ë^@c\1aª"Wr^U\87YÅÔM³>_Ý\8f`åÃ\7fî8¦\15\1a\8e¹\a\80GÁ1\93\9c`\96\eB\94Ý`;\ f»ù+ØÂì}åÄÌØ&s£Òç\8c]<§J\ 5\85QF=\1amb3 \eU\ 6\8cF'ÚØ6¶\7fÆ\96á\84E âü\80¹5õJa÷w\1aZØÖù60¢¬\e
+ß[¹·ë¶9¡±ý9¶\94ì{Á\96S\9a\11Û\Ý\9e8\81Õ`k&­Á\9cos}{â[Rß\ 6¾ý\1a[¥+\97þwðºÕO\8bè\ 2d^jW
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_61_6.dat b/lib/phpqrcode/cache/mask_6/mask_61_6.dat
new file mode 100644 (file)
index 0000000..f2d3f10
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\97K\ eÀ \bD÷s\1a¸ÿåÚ¤\12µE~Ý\82\8dihÌÄ'\99
\b\8e\ 6ÍÀòNÏ'oVWßéà£jspèÚ\a\15CzÓþìÑο©¥Ãaî¨\9bÌÏg!«\85#W\ 6D%~ÜË\83Y?±JÛf\8cÚåR\80E¸¢\8eÁ\90K\eoæͼ\99Ç\98§ü|É\83Ë\8e*ÌOÿP7\8f \8a\9e\87åÛn¾ë¼½¥\99\ 3\86\1c`\9e½\9dïÌÍÖÀõsúåçdôD¾\9fÿ¹\9fsé~>ý<ß\13iÌK'\8el'¸×9¥ûÐ%.ÆîÄ7
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_65_6.dat b/lib/phpqrcode/cache/mask_6/mask_65_6.dat
new file mode 100644 (file)
index 0000000..550fc8f
--- /dev/null
@@ -0,0 +1 @@
+xÚíWQ\ eÅ \bûïiäþ\97{K\9eNL\10k?\17\90\98e$\8cQ´ikÝìÆÚ4¸çö\ f1{\98á\89ð\1e×`\17+®!úÚ®ºM\rÁ?\8f\fáû \93\92\1d°È1b°8\86\9e\f£·¦.\8cÞ^\8d\83wÌÞò\13¹ìèsn²ÁF\ 1j\15è\8d\11\85EaQX|\1a\8b=w\13\11ä¼@°\192v<òÅ\8bÅ\9e»\89\b\96|4w»êê\Ô\1dUX\14\16\1fÇBQz+\16óÊT±ÈT\16Ç\17¹ÖcøBÓz\9e/4­ç8Õë,\91»5Ý\1d\ f¥¨»ý¹È± ü\aOV$\r
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_69_6.dat b/lib/phpqrcode/cache/mask_6/mask_69_6.dat
new file mode 100644 (file)
index 0000000..a3e4fa0
--- /dev/null
@@ -0,0 +1 @@
+xÚí\98K\ eÄ \b\9c\ 6î\7f¹\99dThÃðí¦       hLSSE\9e\14\14q       e\ 5Y@<ã¯+Þ*£|ß窮\v%\8b®\8b>¥¡¨®\8b¹zÃ*7ë\96Åe´\17¤öÆ\19\196ãQ¶½©S`\ f\9aÞ.²\ 2¯>»sE\vË'¨%@[\91\8e6°@PË0Ãh\18\r£aô\ 2FÕxt\ 2\19pl²2\ 3§\ fÂóý\v\8d\87Q-g\101\1cN\86feo^ßøÑüë\86Ñ0\1aF¯dT>N_\18ÕOö\92\91\10\8bG\9d3ìùªu\86å\9cÁ»g\88å\f\8d{\ 6\913<Ê\b[\9eÔº\vb?Â'6ï\a\8a\12
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_73_6.dat b/lib/phpqrcode/cache/mask_6/mask_73_6.dat
new file mode 100644 (file)
index 0000000..ab71b70
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_73_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_77_6.dat b/lib/phpqrcode/cache/mask_6/mask_77_6.dat
new file mode 100644 (file)
index 0000000..ad5a660
--- /dev/null
@@ -0,0 +1 @@
+xÚí\98Ñ\ eà\bEßù\1aøÿ\9fÛ²i\8bÙÅVäaË.\9a¦±F©§pST\9bYÖô4q÷ú~´z\85«=\9fä:öÍ\92\rû6î\19ø\eÍüôm8\91¾\1a:#0\13Pض\90iDy:\1e2Å '§ùZ­s±\8a&}Ïôçæ»\9c\r\910\¥Å\9a\95\98Xw¬Â;iP¬äàÈ\94L\7f\9c)ÒS¬±\17£\12\95Ü{h\88D\19u9÷\1eL\91\9eb\8d½\18\95©JÞÒS÷\1e\8cSÆ)\99\92)\99ÞgZ\9a{÷þeÜø\9fé)ã\94qJ¦dú\1dLw+\83#Ó3-V0ÅÕ·lî\8dj\83¹\7f\99ýÚ ×S-ÕS\rê½9=ݯ÷\ 2¦5ÁPPïõq\1a1Mõ\a?ågÓ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_81_6.dat b/lib/phpqrcode/cache/mask_6/mask_81_6.dat
new file mode 100644 (file)
index 0000000..28a6d07
--- /dev/null
@@ -0,0 +1,3 @@
+xÚí\99Q\ e\840\bDÿ9\rÜÿr»ÉÚR³LÕvök\87\9aÆ`´¤¯0     º\1f\16;æi6ÜûçÑÚ\|ñí_¿ê\18ccÔ1\16«¢h¾ýu\8c§½ioÞó#2\14\83¬\11}x*.YûtÃ&¸­±
+Ö°¶ÀÖq\1c/K\82;\193ÌväeÐÌ¢\ 5È\8aÒ\ e\82AÛH±\16ë?`]é5ÒðK¿¡Êü´\86w¿!}{Zû߲\9eW
+\8c\94yâ·¾À\9e^§_y­¼\16\16\96^K¯\95תáb-ÖbÝYSÚ¸'Ö\9cNóÈ\1auÃ×õ\9aÕ#M½fõHS¯Q?|]¯IýðA¯\7fÆÚi\99Mû÷\91yíì¤y\ 1uWà\11
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_6/mask_85_6.dat b/lib/phpqrcode/cache/mask_6/mask_85_6.dat
new file mode 100644 (file)
index 0000000..d5403e4
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_85_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_89_6.dat b/lib/phpqrcode/cache/mask_6/mask_89_6.dat
new file mode 100644 (file)
index 0000000..eeeb5d1
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_89_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_93_6.dat b/lib/phpqrcode/cache/mask_6/mask_93_6.dat
new file mode 100644 (file)
index 0000000..6ff38db
Binary files /dev/null and b/lib/phpqrcode/cache/mask_6/mask_93_6.dat differ
diff --git a/lib/phpqrcode/cache/mask_6/mask_97_6.dat b/lib/phpqrcode/cache/mask_6/mask_97_6.dat
new file mode 100644 (file)
index 0000000..3a2072e
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9aa\ e\830\b\85ÿs\1a¸ÿå¶dÅêÒÒFx[²=4ÆH\96\16ù\8ao\8aj3«4í&§s}¹*\8eÃ\11\9e\97\v÷a\f\8dc\88&3\9eêÜ5\89arWç^\1faþ«÷LClÉÒz\9e\e,ÝÌÑ1\86\rµ\89SQ»\1cN»ô»]·¢/GiuÄ`&æ\ 1 ¢\90\96w\83%\82,\91%²D\96È\12Yú"K\b½t¸¤+åHE'|R2Ï(v1¨öv\96¢ÿqi\1fë\12ë\12\9fqd\89,\91%²D\96~\80¥\8fè%Ø»Jjï}íͺĺÄg\1cY"Kd\89,ý+Kñ\17ö
+\96\10]\ 2W\96të+sF/)ü]¥.zNòÚ\eÝ'`°>\81®½1='#\96`+b\83¥l]Z±\94\a­¬ýð
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_101_7.dat b/lib/phpqrcode/cache/mask_7/mask_101_7.dat
new file mode 100644 (file)
index 0000000..1f6bc51
--- /dev/null
@@ -0,0 +1 @@
+xÚí\9aQ\ eà\fCÿ}\1arÿËm\93Ê`\1déÚÊfªj\90ò\81T\ 2é#±\10¥Ô\16äÞ54'\11tûí\85îf¼\17aÈÐ\87\96$\b±c<ÙËêãÝÓÕñHÝ Ìh8\14\84lÕÛûþÁ\18ëo=½Ä\84\8eŧàHv\16º©;\8bz\80¤!\83|\1f/\8bF\8eÐ\8d\193cfÌ\8c\89\19S×Ê\85±±\1eã\8d\82¼êñ\f8©K\8e)\e4©9\16 \94Qç1ç1×J3fÆÌØÅ\19\9bS+Åw\17Öcçõ\98ó\98ó\98\193cfìº\8cùîâ¾zÌyÌy̵Ò\8c\99±\e1¦{¨²bL÷¶çÍX\99S+ó\90\11ï.to{>ô\98îmO§ÇJ\1a\1eû3cÄ<6ãXn0F´\ f\r)\8f\10
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_105_7.dat b/lib/phpqrcode/cache/mask_7/mask_105_7.dat
new file mode 100644 (file)
index 0000000..6b0cacf
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9aA
+Ä0\b\9e\7f¹a MÒ\99\18\98N¾Px)¸pQ£¼è_è~\9e\10|ñ\1e(b¿\9dF\92\84\9aç$.\9f\8da¿o\93ÝòWÿGNÚPæUÇ\96·\89Mþ%{\87ëo\7fôHQôÙ\11Uñl¯Ö´¿\1f¬\9d\ fL^>+Éçm­\93#\ e\ 5\a{\8feo&Y2\19sÛoM\95)gncO9s\9bßZ\8a³´3\ 5wÇo\99\84Ú+Âè{ô=f.ìÁ\1eìÁ\1ez\ f½\87Þ£ïÑ÷\98¹°\a\a{è=ô\1ez\8f¾GßcæÂ\1eìÁÞsÙkCQÏ\9epÓíÊ^¶\80&Ñ{^£÷¼Nï­Ê·UïÕìï\rìe5\16°ç\15}¯æE\89wG\aû\ 2ßn+o
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_109_7.dat b/lib/phpqrcode/cache/mask_7/mask_109_7.dat
new file mode 100644 (file)
index 0000000..9875cbe
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9aA
+\850\fD÷9MrÿË}\ 4µ\15Ú*\98\f_x-d\11\90\98ú:Î"îÇ\8a¢Ý-kÅ"\8aâ¨\9a¢\9c\95\1fd\8c{\9b¿Õ»ü¤·ñã¯ó³ÞÊ×\92ɬ|<b2+ßU\vá¶ý­ÊîÚ%Z}\89.Úq\ 1%Gi²¾¶h\rQA9\98\84I\98\84I\98üG&\8b\9dÉ\9e·<ßø oÍ:Ï,ubÞ2}ãmÞ\84_\r\9dD'ÑI\98\84I\98\84I\98ÄOâ'ñ\93è$:  \930      \930      \93øIü$~\12\9dD'ùwÃ$LÂä\87\99TÌOvLVOO^\98<\eÓøÉòùÉÞOúb\14µÄOºÎOºÖOº\90Ê\9b\99Þt\9d\3\99¬\93®<Ê\1fG¼Í«
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_113_7.dat b/lib/phpqrcode/cache/mask_7/mask_113_7.dat
new file mode 100644 (file)
index 0000000..b6e2159
--- /dev/null
@@ -0,0 +1,11 @@
+xÚí\9aQ\ e\83 \10Dÿ÷4pÿ˵M´PeQ\91\9d6éÃd?Ô¸°>'\83\90ÒÚràQ5+    s\ e\8dû\8c¡)Ûc\14\95Õê\127úÕ-ÑÕó»1nní\96ºqÿÉ\94\96ÔÍ\ 6Jtgô\a¬^îÊ\89wÿÌ\98Å\87\83?ÿ*\9a&M\15mý@ee5éø^Ñ
+c¢\94°
+«°
\7fÀªÒ\ 3,¬¶ýªïbï\1¿×3ýjõ4ó\1dØT¿Z\9efÅ¢·\8d»oé\a¯ «è*º
+«°
+«°
+«°:\9bUüêt¿*ü¿ú½¹\15º\8a®¢«°
+«°
+«°
\93Xů²\160<·BWÑUt\15Va\15Va\15V\83YÕl
+Þ°ªÙkýf5éýª_Ö ¿ªÙkýáW5{­«µ\80ä\965pnõC¬\ 6éªZ\ 2\ 6Å\a  bv\1e
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_117_7.dat b/lib/phpqrcode/cache/mask_7/mask_117_7.dat
new file mode 100644 (file)
index 0000000..cde78c1
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9bY\ eà\fDÿç4pÿËU\95²\90\16ÈêIª>"ù\a%6æed\v\91Ò8rðS\fÍNs\8eµU¯ánëk5¦Xe\b­øjÑ\ f\13»Þª®u\97Ûî¦ô¿ö±VÛXgøê,l`øøîuÝÊÀî÷£!\82h\89XZù\\15\ flM±ìë|[ͬ\1aÝÂ0\fÃ0\fÃ0\fÿ\ 1Ãí\96#hF'ëøc]\81²±\1e\9e¾¦iéí>ìú\19\9d\8eûH\16Ðat\18\1d\86a\18\86a\18\86a\18~<ÃÔÃ\86zØyÆqkO\87\ e£Ãè0\fÃ0\fÃ0\fÃðÃ\19¦\1eæ\8cãª\9e\ e\1dF\87Ña\18\86a\18\86a\18þ)\86§2ÇË°éfÃ\92áþ%\83Àz8ùëátO=¼\9eâ\803\ eÿ=\8e\82áÖî\ 53\9cÜ:ìÿc\8dw\91
\ 2\90V$¢
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_121_7.dat b/lib/phpqrcode/cache/mask_7/mask_121_7.dat
new file mode 100644 (file)
index 0000000..d5d577f
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9b[
+Ä \fEÿ³\9adÿ\9b\e\ 6ú°\8cÆi;^az,ø#6Æ\9e^r\11Ý×\16\82§h¶\a\8e\10ôµÈêÐ&Ýì¨çÜ^amýËÀ\95Y\9f9×_Òغô\ 35C·r\966ë®ðt^ù^ÅWlûÅÐ\19\ 3\98ôز~É¿|èM\e®èmýÁåÛmSò}÷¶Ó(\ e\rÛ°\rÛ°\rÛ°}\8emQ½]\8cZ§Vüq½]¼ÓvËѲ"\99M¹1fÙúGÔÛÛ,\vq½½ÍB·Ñmt\e¶a\e¶a\e¶a\e\1fÂöÄz»eF²3\9d»cxI¹\97D·Ñmt\e¶a\e¶a\e¶a\e¶ÿ\9fmÎnð\92ý$º\8dn£Û°\rÛ°\rÛ°\rÛ\8fa[}ï¦`[yëæÀö\96°¾Þ\96Þ»)Ïn<¹æ4ÜKú\1c/éó¼¤O¢»s§l¨nçl\ fÔm\9fµÝ/GëÙ\e
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_125_7.dat b/lib/phpqrcode/cache/mask_7/mask_125_7.dat
new file mode 100644 (file)
index 0000000..f9ec088
Binary files /dev/null and b/lib/phpqrcode/cache/mask_7/mask_125_7.dat differ
diff --git a/lib/phpqrcode/cache/mask_7/mask_129_7.dat b/lib/phpqrcode/cache/mask_7/mask_129_7.dat
new file mode 100644 (file)
index 0000000..9bf51d5
Binary files /dev/null and b/lib/phpqrcode/cache/mask_7/mask_129_7.dat differ
diff --git a/lib/phpqrcode/cache/mask_7/mask_133_7.dat b/lib/phpqrcode/cache/mask_7/mask_133_7.dat
new file mode 100644 (file)
index 0000000..b643ffe
Binary files /dev/null and b/lib/phpqrcode/cache/mask_7/mask_133_7.dat differ
diff --git a/lib/phpqrcode/cache/mask_7/mask_137_7.dat b/lib/phpqrcode/cache/mask_7/mask_137_7.dat
new file mode 100644 (file)
index 0000000..11d212b
--- /dev/null
@@ -0,0 +1,5 @@
+xÚí\9cÝ
+à\fFïó4úþ/·\rúc§\11\8b«_\18Ç\82\17\18\12\15SÚK\16<E±Ó\90\9c%um\89Ä\94¶OÄÃcåPÕNsûÑuõÝß+\9f\f\9aÒ\1dʺ\9dQS,E)Öµ÷^ÿf¼Õaç\97_ÃHkoKr\90Ç6»DÓZQ\9böï\8bÚö   F><\16Â\1f\9fÚÎo[l
+ìÀ\ eìÀÎ\9f²Ó
+©ý0û¡7Ö\89µVÆl\e;\11\8d\9d\96ëü\1cè\997æõfM¾S´\86î ;è\ e1\eìÀ\ eìÀ\ eìÀ\ eìL³C¾\13<ßQíï\9c­\ 5[+@wÐ\1dt\87\98\rv`\av`\av`\av&Ù!ß       \9bï°7ÚX+@wÐ\1dt\87\98\rv`\av`\av`\av8\vÊYPÎ\82¢;è\ eºCÌ\ 6\ 3\ 3;°saG{\99Ä\17;Ú»>\ evR\9c\e\9eåù\8eö®\8fK¾£½ë£Ø\eMÎðHÖ
+\82³#Ð\9d(S\9bËÎòú\ 5qÌçd
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_141_7.dat b/lib/phpqrcode/cache/mask_7/mask_141_7.dat
new file mode 100644 (file)
index 0000000..98dffab
--- /dev/null
@@ -0,0 +1 @@
+xÚí\9cA\ e\84 \fE÷=\rÜÿr\93I\14ë\8cTY@¿ÉÃ\84Å0!µøø|1\94²\97\9at¹bG0µæÔ\97Ѥ\85s\9d\e\81¡2\1fZ/îç¿o\8da\16\82ìøÜ\ÿq¬ã\1a\ ezÜÛOnÒ\8bMºÏñÞn\99\9añt\84áX"Kÿ\97m\91eM}çÚòCpµí\13\90ÄP\99L^¾µ\1d\8c\b\84\ 3S0\ 5S0\ 5S0\ 5S£L  ø)Ç\94\82\9fÚ\98êYß¾%\9eÔbÑý,õS\8d©l?ÕzC§Ð)t\8aµ\1f\14\14\14LI2\85\9fz\8d\9f\8aRX\17¶h¾£@§Ð)t\8aµ\1f\14\14\14LI1\85\9fz\91\9fbÏ·ó\8e\ 2\9dB§Ð)Ö~0\ 5S0\ 5S0\ 5S0Å7´ø)ö|ù\86\16\9dB§Ð)\98\82)\98\82)\98\82©÷3Õ\96«\1aL%\9f\ftfª¬wM±\9f*:~ªhù©»¡Zºç«sn\92cª÷\14$1UTtJgÆ\118\8bÌÕ\1fOYºE
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_145_7.dat b/lib/phpqrcode/cache/mask_7/mask_145_7.dat
new file mode 100644 (file)
index 0000000..4aa2bac
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9cÑ
+à\fEßó5úÿ?W6Zµ ¦-\9b^é±à\832\89q§×Äb\bG\89\13\9f¢X6(Æ\89uÍ"\15\93LbÑbÝGuû÷\8eμ®··Gkø¨:HwA[¿j\9aÔm¯øH¢ø¬Ý\9eï3ïÅ\e¬ýîßâOðkQ\14{l·|ê»èT\9b\86\19EmÇ\vJfÙLÊ?\9fÚ2\1d"&Á\1a¬Á\1a¬Á\1a¬Á\1a¬ÁÚ\12¬)Äk©ÝRf¢\97µ\18Ùc\7f\9dï\93ÑÌ\89Ó\aåF\8aÑ,§\93z©¦\81\1aº\86®±\87\845X\835X\835X\83µ7±F¼¶\¼¦p\96\9dÚUs#è\1aº\86®±\87\845X\835X\835X\83µ\17°F¼¶d¼ÆYö\95Ü\bº\86®¡kì!a\rÖ`\rÖ`\rÖ`\8do\8f\89×8ËæÛct\r]C×ØCÂ\1a¬Á\1a¬Á\1a¬\rgMå\1e­\825\85[´N¬%\aéÄk\12÷h\95ñZp®?\9b\12¯IÜ£\95ϲ\83^n$\88ÑæÞY7A×\1cÖÆëZP[¶\r\930
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_149_7.dat b/lib/phpqrcode/cache/mask_7/mask_149_7.dat
new file mode 100644 (file)
index 0000000..809f005
--- /dev/null
@@ -0,0 +1 @@
+xÚíÜÑnà\f\85á{?\r¼ÿËu\93Ú\86­\85´\9d2»ÕG$n\88\88cççÈF¡µKëÉ×Ðb3ª÷ôþÖªt³îûªP\bc\fçÌ¥Ó7[\ 6¢?9:ñÕý['\ e\7féÁë9'¾*Ó\96\f\1eà\8fGæÜa°½hÖ_¿¹/«zÁ+Î6\16XB\87\982ôqYÀJ\850Êùé»\8f\8d\9aBfa\10\83\18Ä \ 61\88Áª\f\16È\a\879c7Gë   ùOl©ô,Å^¥ß\a\8dÅê½\93òÁ3\83ÕòA:H\aé \1dÄ \ 61\88A\fb\10\83\18Äàÿ0X4\1f\9c%Ù«½û#ÇÔd>¢&C\aé \1d¤\83\18Ä \ 61\88A\fb\10\83\18<\9aA{ôo¿G¯&óLM\86\ eÒA:H\a1\88A\fb\10\83\18Ä \ 61è¿       {ôj2þ\9b \83t\90\ eb\10\83\18Ä \ 61\88A\f&1Xç`¼_\fÖ9ÛðÊ`«\99\ f®B\98¶G_çlÃ\1f5\99:g\e\ e5\99\bajMæÍ\18LÔÁ\8aËè\ e\83Iý     <|r.
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_153_7.dat b/lib/phpqrcode/cache/mask_7/mask_153_7.dat
new file mode 100644 (file)
index 0000000..c1ab276
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜQ\ e\820\10\84á÷=\r½ÿå\8c\89B5\88
\8eæ\83¤/\8dͲåïØIÙiº^-àî®Z\ 2km|»\1aYDhë9\v\9bÎêÃ\{\92KÇÆ\13¶·{\9f\8fy\97³Ç3ßv\86\7fÌ»\9cE]u`RÚÇrý"\9bß}\aÛ\12Y\v½ë\12eÂ2{ÛVV8][×\ 5.n:+2_ç¶\16ÊÂBÃ&6±\89Mlb\13\9bØÄ&6ß`3i¿9\8f\ 3³åÎ\8cè«¡yÙúU}Ô\9f82f-vÚ\96Õ6 \8fnÒMºI7±\89Mlb\13\9bØÄ&6±ùólæî7ãÎ\1eð\82þÕ\v¢\9bt\93nÒMlb\13\9bØÄ&6±\89Mlþ2\9bÎ\1eüÍÙ\ 3\ e/\88nÒMºI7±\89Mlb\13\9bØÄ&6±é;\14g\ fxA¾C¡\9bt\93núO\8bMlb\13\9bØÄ&6±y\80Íy\17\95ÇfP¥Õ[6\9f\154\1dºßÌ«\81Ù\12k`v^Ð+Ó9Ä\vʬOÛ±ùð}\19Ïæ\94¨\9b\99+ZXíè®=\ 1:iWE
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_157_7.dat b/lib/phpqrcode/cache/mask_7/mask_157_7.dat
new file mode 100644 (file)
index 0000000..2db27f6
--- /dev/null
@@ -0,0 +1,2 @@
+xÚíÜM
+\830\14Eáù[M²ÿÍ\95\82­\11ü£\ 3s¡_\84\f\1e\14\9e\89ÇÛã ­}F\ f¹\86Qks½\87Ì{Ý%¶Wq\eÛ÷×îø.\9e­\1f¬ÝþÏ\1f¯\1f­]Ü8evV½ßbvV}è®\a_µÜEÌ»n3W^KÃ\\9f\17`äÖV캽çZ\11\ el\ f³\98Å,f1\8bYÌþ;³af±Ôk\9e·Þ¨×úiàè\93ÁÄzÍôÖËz\ 5?urVÎÊY9\8bYÌb\16³\98Å,fù,\9få³|VÎÊY9+g1\8bYÌb\16³\98Å,\9få³|\96ÏÊY9+gý7Æ,f1\8bYÌb\16³|\96ÏòY>+gå¬\9cÅ,f1\8bYÌb\16³|\96ÏòY>+gå¬\9c\95³\98Å,f1\8bYÌþÈlâùÆ\ 3³i§\eo\98ý.\¦ÏÆ\9do<úl;9º:Âg[®Ï¶l\9fmÁÔ^\9cI>=gÏ\99\9d\9c³-yk_\1cTAµ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_161_7.dat b/lib/phpqrcode/cache/mask_7/mask_161_7.dat
new file mode 100644 (file)
index 0000000..35ba8ff
--- /dev/null
@@ -0,0 +1 @@
+xÚíÜÑ\8e \10\85áûy\9aòþ/ç\9a¨E)Æ®\9bî1~4áÂ\1a\9c\ eý93\b,˵´ «+µ\1aØZT=Z\18eâ¶\ fC»¹ú.\1f\9d<sþô¹\9fvÙÞÏ\a\1f>~iß\8fµ§¯ÊÞÖ&>\8c,\13\96ÿÔ\1fï´6eù\98·í\95Ö~,láW]ì\r\e®»º2Íêêº\ e\90±Ý\Ñþ;×µ2\15j"\96±\8ce,\1fËrX\8cݵVÓ(í\7fcìµµZÓ\961\91\99§8\aÞ©í§\8f\89±/,'ÇØt\99.Óeº\8ce,c\19ËXÆ2\96±\8cåß±,_þ\8a|ytõü\1fç£ï|ÎÜ\17]¦Ët\99.c\19ËXÆ2\96±\8ce,cy\17Ëòå/É\97­\15ysî\8b.ÓeºL\97±\8ce,c\19ËXÆ2\96±lo\85|ÙZ\11{+è2]¦Ëbl,c\19ËXÆ2\96±\8ce{+äËÖ\8aØ[A\97é2]¦ËXÆ2\96±\8ce,c9\8fåÌCÐ\1fXÎ<ëþÆò\92\9f/owsP¾\9cyÖý]¾\9cyÖ}·VdÙìæ°¹¯\8fd9J\97Ó\87ì)Ë1õ    jI2ë
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_165_7.dat b/lib/phpqrcode/cache/mask_7/mask_165_7.dat
new file mode 100644 (file)
index 0000000..e27fb8e
--- /dev/null
@@ -0,0 +1 @@
+xÚíÝQ\8e\820\14\ 5Ðÿ·\9a²ÿÍM&A,NĘ̈!\97x0é\87&XZ\ e×\87\10Z»-KØ«[êÞÉeÉj\87½\8cëæx,\83§¼ú.ï·g}ë`;ÿþþ+k{\18ËÑ~1\9f\8eÿ}á+k{\18ËØ¥\9e\99¾SGùWãgî}\87ݬ@Û?_µö8í\90¾o+·k][·\ 3\94Wü8~·u·\19ÜMÆ\19g\9c\19g|j<õ·ú¶¶Ú*ßq=<¯\94Ïü¤æÛ\93R\8f\93ëñÕøø\14ÌüÄÌé\9fÈq9.Çå8ã\8c3Î8ã\8c3Î8ãIÆÕã\1fU\8fGÿ?~µsnr\\8eËq9Î8ã\8c3Î8ã\8c3Îx\80qõøÇÕã®\81yç979.Çå¸\1cg\9c\19g\9c\19gÜ=)êq×À¸'E\8eËq9.Ç\19g\9c\19g\9c\19wO\8azÜ50îI\91ãr\\8eû­Î8ã\8c3Î8ã\8c_ÆøVvd\e\ f}²ÇÞøü¡\19aõx˯ÇÛ5êñã)\ f¹\ 6&ÿ9)\9dñÙÞ\14f¼¥çxþ\113øYH]û\ 5S^*/
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_169_7.dat b/lib/phpqrcode/cache/mask_7/mask_169_7.dat
new file mode 100644 (file)
index 0000000..ef1a181
Binary files /dev/null and b/lib/phpqrcode/cache/mask_7/mask_169_7.dat differ
diff --git a/lib/phpqrcode/cache/mask_7/mask_173_7.dat b/lib/phpqrcode/cache/mask_7/mask_173_7.dat
new file mode 100644 (file)
index 0000000..3b51371
--- /dev/null
@@ -0,0 +1 @@
+xÚíÝÝjÃ0\f\ 6Ð{=Mòþ/·\rRbÖH¬û«´\9d\14r\13j\Ç=ý,\1cºm·coúZ\8e8;»ïmÏ÷½mÛÝë±\1d0\15b\9d\16÷\83\9at$\1e~Wu5\19ÛÇ\9aNnÜ'?dÕf2¶í\8f(oÁï\8dßGÚ,Løþù÷õ6_{»\ fzÅÑ÷Æ?\rË9úwq9Ç\rà\11S!Æ\8cëÛ9Îoë\80î2\81       L`\ 2\13\98\90\98\8c¬\96\96\16Enï¶v8L\98²v8L¸º  U\8dáY×"ûd}ê      K\9br\82\9c 'È        Ö\ eL`\ 2\13\98À\ 4&0\81    L`B'\13\13:ïO8ÛTcTc\k\8cr\82\9c 'È      Ö\ eL`\ 2\13\98À\ 4&0\81    L`B\ 3\13ìY²gI\8dñ§k\8cr\82\9c 'È   Ö\ eL`\ 2\13\98À\ 4&0\81    L`\82ç"íYRcô\¤\9c 'È        r\ 2\13\98À\ 4&0\81       L`\ 2\13\98À\ 4ÏEÚ³¤Æè¹H9AN\90\13ä\ 4&0\81      L`\ 2\13\98À\ 4&ü'\13úÿ!Ø;\13êÅq+\13¶Yõ\84l*´Ü³´þ=Ø\80\1aã9¶\ 3j\8c[2\15ÚÖ\18ÿ\80     Ms¤\9f\87Ô\84\96ç\17­ë*Ø
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_177_7.dat b/lib/phpqrcode/cache/mask_7/mask_177_7.dat
new file mode 100644 (file)
index 0000000..068477c
Binary files /dev/null and b/lib/phpqrcode/cache/mask_7/mask_177_7.dat differ
diff --git a/lib/phpqrcode/cache/mask_7/mask_21_7.dat b/lib/phpqrcode/cache/mask_7/mask_21_7.dat
new file mode 100644 (file)
index 0000000..4f9f138
--- /dev/null
@@ -0,0 +1,4 @@
+xÚ\9d\90Q
+À0\fBÿ=\8dÞÿr\e]\9a\98-?]\ 2Rl\90\87ä\1eÝ\e\832\95¦¹nc
+ð[\8e¹öÝnù\8fAÃ".\96j+êi
+\ 5~\8bx3<úaXÚ{H\86ÖC1x\ fÉÀ)â\84á\ 2¤üSå
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_25_7.dat b/lib/phpqrcode/cache/mask_7/mask_25_7.dat
new file mode 100644 (file)
index 0000000..cefe1b9
--- /dev/null
@@ -0,0 +1 @@
+xÚ\9dQA\ eÀ \b»÷5ôÿ\9f[F@©àa\83\84ÄÔÖZ̲\18\1d\85\r\90>;\92ÐÀQ±ÊIÖÀQH8Rÿ¼ñÒ\88GÉ"è\13z,\13ù½&\87ñþ;±­\1eÐ'oñ»97\1e\19\94%P8%\1c÷6oǽ\9d;]ÞúNWnÝ[äf7¹\aÌÕvÔ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_29_7.dat b/lib/phpqrcode/cache/mask_7/mask_29_7.dat
new file mode 100644 (file)
index 0000000..e3d7391
--- /dev/null
@@ -0,0 +1,2 @@
+xÚÕR9\ eÀ \fÛý\9aøÿ\9f«\8aÈQpX\98\1a$\ f\18\a\alæŲf!I2pg\15\8dSãª\15êªMZj·ºóÌÃÂ<K.ê\81Ø·
+ÂÇ\97­Ñê^D\8e/è_y\9e/ßgcxVÙ0\9fBf#\8eÖÿ]BÇϽʳ\9dhí9Þ¹ËóÀ\a\9b^\9fä
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_33_7.dat b/lib/phpqrcode/cache/mask_7/mask_33_7.dat
new file mode 100644 (file)
index 0000000..1763f42
--- /dev/null
@@ -0,0 +1 @@
+xÚíSA\ eÀ@\ 4¼Ïkøÿç\9a6¨¨á²Ç\928Èì0\v\117-n\86\17 ZbE0\b¶"\99£°t\1c]\17\85£µ3Ztq\18úó>"út\8aðï¡e0¾¿#Ô\9b`\90_Ë1-±Þó\8eé´câÝÍ÷òha÷\12\19~/¡Eh\994\17¦Åæ"\eä\ 2\98~Ï    
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_37_7.dat b/lib/phpqrcode/cache/mask_7/mask_37_7.dat
new file mode 100644 (file)
index 0000000..87d9a1a
Binary files /dev/null and b/lib/phpqrcode/cache/mask_7/mask_37_7.dat differ
diff --git a/lib/phpqrcode/cache/mask_7/mask_41_7.dat b/lib/phpqrcode/cache/mask_7/mask_41_7.dat
new file mode 100644 (file)
index 0000000..8acec04
--- /dev/null
@@ -0,0 +1 @@
+xÚíTA\ eÀ \b»÷5ôÿ\9f[fDYæ(\17O\13\92^¬ÅbR3/~t/L"¹Ä7SQQ\1d\1e5\85jÔ\S\97\9aiíñÎb£ß#\13Õ\86È\8f\ 3Â×+Ç£¤w#æz\ 5õx?Þ\7f㽧A-ë\9aw\95\9b\91Y7$b.%AËÇ;\95w«Rµ÷ñï\95\9cox\ 1G}?\83
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_45_7.dat b/lib/phpqrcode/cache/mask_7/mask_45_7.dat
new file mode 100644 (file)
index 0000000..dbba31d
Binary files /dev/null and b/lib/phpqrcode/cache/mask_7/mask_45_7.dat differ
diff --git a/lib/phpqrcode/cache/mask_7/mask_49_7.dat b/lib/phpqrcode/cache/mask_7/mask_49_7.dat
new file mode 100644 (file)
index 0000000..be5dce8
--- /dev/null
@@ -0,0 +1 @@
+xÚíVË\ e\800\b»÷kàÿ\7fÎh\9cC-X.\9eÆ\12\ e\8d<ì¨h6Ì\8b\13\f3À½ð,B\r\81Ô\94ó\1a,ç@\92\1aÏ\90\80d5$K¸"T|p\95%9"¼ypæ,ïâæ¡=\16\ 5Ém¡\95\7f÷\98Ô\89!\8b«?¸\12¦÷DÀ\14W"\98²\7f\7f\b(\ 2®¸\ 2Aó-Ö\-\rJ\©{0p¥lÁ\eWW\ 1]\83Ò\1e\8c\1a\9e?4h=\rZ_\83Öd+ýg(æ*ã*\9d+붵\ 1(ÏÇæ
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_53_7.dat b/lib/phpqrcode/cache/mask_7/mask_53_7.dat
new file mode 100644 (file)
index 0000000..7028ef6
--- /dev/null
@@ -0,0 +1 @@
+xÚí\96K\ eÀ \bD÷s\1a¼ÿå\9a&´Råkºiª&,H)øt\bD×jÁ\16\v=¨µÐÎQa\98\9e«P"d¹s1ZyC®|\18hey\f­ü\ eCvéaH°\9b\1f\89+\16\16ùO\85Åu\81¥\12QÎsZtb\85°Íð7\fµvãúÀ\8a­h\99\19VµÌ\fµ~èùà·1#ÿ~\87\1ff\98\1f\1c\ 6\86ùÙæfHkZ¶Jtµ\9c\9fm\1eZÎÏ6½\97ÉsÕúá\8b\f\83w¸rÍ&C×\1e߶\15f
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_57_7.dat b/lib/phpqrcode/cache/mask_7/mask_57_7.dat
new file mode 100644 (file)
index 0000000..ee3107a
--- /dev/null
@@ -0,0 +1 @@
+xÚí\97A\ e\800\b\ 4ïû\9aöÿ\9f3&\95ÒH)Kb¼Ð&\1c\88\14\1cqÅÖ\9eÕ\ 3[-ÌÀÞÏÖ\8c\f\85Ú9Ér¡\8fYs\f×.«ÎiÝÓ¾`´ìòØú~\97­ëG\90é{c\9c\12i\83Õ\82»\Y<\ f\98.\17©|·Åì\172´Ø\16Û\9fÙ2\9a \8a\bQQ[[÷^\ 4N·ë\8088½\1dlíÏÃÁ[}[\9aPl?g+o*Ï\96\984W¶û\811        ü Õ33\98Ò[¿\Gosó­bkèm\94mËômî\89\92ÿ\ eÊ^¬¢hë
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_61_7.dat b/lib/phpqrcode/cache/mask_7/mask_61_7.dat
new file mode 100644 (file)
index 0000000..76f8d72
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\97K
+À \fD÷s\9aäþ\97+-µ*5ÿm\14²\b¤c\9faT¢1Ø9\97\81YÌì\8c§êL9Â\v糶¬²ç\ 5ísù//i\87\87Ê\\84éb®\7fö©æÂÄ«âÞë-"^²D\8c\ 6H-\1diÝ;bnA¢¼\997ófîe\1et¶7\ fÙ·\1dyÌ£E:r\94<4ß6ó(üu÷y{K3oæ"óÌý|a\1e½\9doÌ?á\9c\9f\87ïç«\9f\93ò´pù9åý\9cj~N\ 5êÆ\9bÈìs\9d¹ÑçTYú\ 5¡\vÂu
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_65_7.dat b/lib/phpqrcode/cache/mask_7/mask_65_7.dat
new file mode 100644 (file)
index 0000000..d8b9206
--- /dev/null
@@ -0,0 +1 @@
+xÚí\97A\ e\80 \f\ 4ïû\1aøÿç\8cI\91*\ 2í6^L!é\85°¶\f¸i)mTÇT\ 3] VW\1c\15\\12ï9\90e@\974Ku^Â#\aN\ 2%:ö,ÖÙmYÈÂJ\ 2N\ 6ã\84è9¯\93\8aඩ\88vAè2\10úþ\19ÑÏ\9c\94H\16É"Yü\9aÅÜö\f+\10?`ýBXDüBX̽{¿\ 2\8bÁ.³Ëw\91ÿ¨d\91,~Î\82k\92\1e,¸^ïbQâ~±.Ãà\17\¯wó\v®×ë^«Ï\81÷îOY\98ÞEôJmX\18â\ 1ÑÏ"%
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_69_7.dat b/lib/phpqrcode/cache/mask_7/mask_69_7.dat
new file mode 100644 (file)
index 0000000..c2db020
Binary files /dev/null and b/lib/phpqrcode/cache/mask_7/mask_69_7.dat differ
diff --git a/lib/phpqrcode/cache/mask_7/mask_73_7.dat b/lib/phpqrcode/cache/mask_7/mask_73_7.dat
new file mode 100644 (file)
index 0000000..f414e4a
Binary files /dev/null and b/lib/phpqrcode/cache/mask_7/mask_73_7.dat differ
diff --git a/lib/phpqrcode/cache/mask_7/mask_77_7.dat b/lib/phpqrcode/cache/mask_7/mask_77_7.dat
new file mode 100644 (file)
index 0000000..3e52bfd
Binary files /dev/null and b/lib/phpqrcode/cache/mask_7/mask_77_7.dat differ
diff --git a/lib/phpqrcode/cache/mask_7/mask_81_7.dat b/lib/phpqrcode/cache/mask_7/mask_81_7.dat
new file mode 100644 (file)
index 0000000..78e08df
--- /dev/null
@@ -0,0 +1 @@
+xÚí\99Á\ eÄ \bDïó5ðÿ?×lÒ"Í\8aÝ\95¹u4áÀa\84>u\12kv\roÌ40\ 4Ý÷ãT±%9¯\91Ô6²ü÷ªU5\8b*s\8d\1cI\18{`¹ªÿ\99_²>S?ç}(:yâTïlï{\ 4G&E\\e\94Ö6¨õ}"\ 6A\92¤X\8bõ\vXϬ«²³Ç<Âm\19wx°fÜá\91G\94<k£ræU\1e\95\99«ÎµÎµX\8bµX\8bµüZ~­s­;\¬ÅZ¬3ë¸|y¬      /ÍwÖÕÃp˯\8dë×Æ÷ëUÛ[~Í}\ fO¬«oÓ`mÌsÍÝ\91¤\7f\1f)\1e~,Ý\v
\ No newline at end of file
diff --git a/lib/phpqrcode/cache/mask_7/mask_85_7.dat b/lib/phpqrcode/cache/mask_7/mask_85_7.dat
new file mode 100644 (file)
index 0000000..a53824a
Binary files /dev/null and b/lib/phpqrcode/cache/mask_7/mask_85_7.dat differ
diff --git a/lib/phpqrcode/cache/mask_7/mask_89_7.dat b/lib/phpqrcode/cache/mask_7/mask_89_7.dat
new file mode 100644 (file)
index 0000000..32934a4
Binary files /dev/null and b/lib/phpqrcode/cache/mask_7/mask_89_7.dat differ
diff --git a/lib/phpqrcode/cache/mask_7/mask_93_7.dat b/lib/phpqrcode/cache/mask_7/mask_93_7.dat
new file mode 100644 (file)
index 0000000..1955f6b
Binary files /dev/null and b/lib/phpqrcode/cache/mask_7/mask_93_7.dat differ
diff --git a/lib/phpqrcode/cache/mask_7/mask_97_7.dat b/lib/phpqrcode/cache/mask_7/mask_97_7.dat
new file mode 100644 (file)
index 0000000..b277368
--- /dev/null
@@ -0,0 +1,2 @@
+xÚí\9aá\ e\830\b\84ÿßÓÀû¿Ü²D[ÌÚâV.K¶«Iÿ`\85â'\9e\ 6³sxá\11\ 6º\ 3÷Âyä\81å\ 2\94$ùx\ fãx\ eÃ"Îéª×=\fO^&pêb¶\aÊÈYʬ\9e\ 6K\9fÝ£àÁÉ\a\8e8K\9f\85Ë\fÎeÃ\8có\ 1¡¥    Ôø\9f3:\15$\17bI,\89%±$\96ÄÒ\17Yb襶
+M)¯Tô\8e\r%q®¬Èô綦Eÿ\9cX}jlØT\97T\97ô\8e\13KbI,\89%±ô\ 3,ñõ\12ã_e[%íý\8eöV]R]Ò;N,\89%±$\96þ\92%V\9f@`\89Ñ%pa©m\80§\97(}\ 2ñ_¥%í\14%ÚÛ¸ÚÛøÚÛÈ4¥='\ 5u)ai¿.\19;M\ f¾\15ù>
\ No newline at end of file
diff --git a/lib/phpqrcode/index.php b/lib/phpqrcode/index.php
new file mode 100644 (file)
index 0000000..9e14b7e
--- /dev/null
@@ -0,0 +1,94 @@
+<?php    
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Exemplatory usage\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
+    \r
+    echo "<h1>PHP QR Code</h1><hr/>";
+    \r
+    //set it to writable location, a place for temp generated PNG files\r
+    $PNG_TEMP_DIR = dirname(__FILE__).DIRECTORY_SEPARATOR.'temp'.DIRECTORY_SEPARATOR;\r
+    \r
+    //html PNG location prefix\r
+    $PNG_WEB_DIR = 'temp/';\r
+\r
+    include "qrlib.php";    \r
+    \r
+    //ofcourse we need rights to create temp dir\r
+    if (!file_exists($PNG_TEMP_DIR))\r
+        mkdir($PNG_TEMP_DIR);
+    \r
+    \r
+    $filename = $PNG_TEMP_DIR.'test.png';\r
+    \r
+    //processing form input\r
+    //remember to sanitize user input in real-life solution !!!\r
+    $errorCorrectionLevel = 'L';\r
+    if (isset($_REQUEST['level']) && in_array($_REQUEST['level'], array('L','M','Q','H')))\r
+        $errorCorrectionLevel = $_REQUEST['level'];    \r
+\r
+    $matrixPointSize = 4;\r
+    if (isset($_REQUEST['size']))\r
+        $matrixPointSize = min(max((int)$_REQUEST['size'], 1), 10);\r
+\r
+
+    if (isset($_REQUEST['data'])) { \r
+    \r
+        //it's very important!\r
+        if (trim($_REQUEST['data']) == '')\r
+            die('data cannot be empty! <a href="?">back</a>');\r
+            
+        // user data\r
+        $filename = $PNG_TEMP_DIR.'test'.md5($_REQUEST['data'].'|'.$errorCorrectionLevel.'|'.$matrixPointSize).'.png';
+        QRcode::png($_REQUEST['data'], $filename, $errorCorrectionLevel, $matrixPointSize, 2);    \r
+        
+    } else {    \r
+    \r
+        //default data
+        echo 'You can provide data in GET parameter: <a href="?data=like_that">like that</a><hr/>';    
+        QRcode::png('PHP QR Code :)', $filename, $errorCorrectionLevel, $matrixPointSize, 2);    \r
+        
+    }    
+        \r
+    //display generated file
+    echo '<img src="'.$PNG_WEB_DIR.basename($filename).'" /><hr/>';  \r
+    \r
+    //config form\r
+    echo '<form action="index.php" method="post">\r
+        Data:&nbsp;<input name="data" value="'.(isset($_REQUEST['data'])?htmlspecialchars($_REQUEST['data']):'PHP QR Code :)').'" />&nbsp;\r
+        ECC:&nbsp;<select name="level">\r
+            <option value="L"'.(($errorCorrectionLevel=='L')?' selected':'').'>L - smallest</option>\r
+            <option value="M"'.(($errorCorrectionLevel=='M')?' selected':'').'>M</option>\r
+            <option value="Q"'.(($errorCorrectionLevel=='Q')?' selected':'').'>Q</option>\r
+            <option value="H"'.(($errorCorrectionLevel=='H')?' selected':'').'>H - best</option>\r
+        </select>&nbsp;\r
+        Size:&nbsp;<select name="size">';\r
+        \r
+    for($i=1;$i<=10;$i++)\r
+        echo '<option value="'.$i.'"'.(($matrixPointSize==$i)?' selected':'').'>'.$i.'</option>';\r
+        \r
+    echo '</select>&nbsp;\r
+        <input type="submit" value="GENERATE"></form><hr/>';\r
+        \r
+    // benchmark
+    QRtools::timeBenchmark();    
+
+    
\ No newline at end of file
diff --git a/lib/phpqrcode/phpqrcode.php b/lib/phpqrcode/phpqrcode.php
new file mode 100644 (file)
index 0000000..80adb9d
--- /dev/null
@@ -0,0 +1,3312 @@
+<?php\r
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * This file contains MERGED version of PHP QR Code library.\r
+ * It was auto-generated from full version for your convenience.\r
+ *\r
+ * This merged version was configured to not requre any external files,\r
+ * with disabled cache, error loging and weker but faster mask matching.\r
+ * If you need tune it up please use non-merged version.\r
+ *\r
+ * For full version, documentation, examples of use please visit:\r
+ *\r
+ *    http://phpqrcode.sourceforge.net/\r
+ *    https://sourceforge.net/projects/phpqrcode/\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+
+/*
+ * Version: 1.1.4
+ * Build: 2010100721
+ */
+
+
+
+//---- qrconst.php -----------------------------
+
+
+
+\r
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Common constants\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+       // Encoding modes\r
+        \r
+       define('QR_MODE_NUL', -1);\r
+       define('QR_MODE_NUM', 0);\r
+       define('QR_MODE_AN', 1);\r
+       define('QR_MODE_8', 2);\r
+       define('QR_MODE_KANJI', 3);\r
+       define('QR_MODE_STRUCTURE', 4);\r
+\r
+       // Levels of error correction.\r
+\r
+       define('QR_ECLEVEL_L', 0);\r
+       define('QR_ECLEVEL_M', 1);\r
+       define('QR_ECLEVEL_Q', 2);\r
+       define('QR_ECLEVEL_H', 3);\r
+       \r
+       // Supported output formats\r
+       \r
+       define('QR_FORMAT_TEXT', 0);\r
+       define('QR_FORMAT_PNG',  1);\r
+       \r
+       class qrstr {\r
+               public static function set(&$srctab, $x, $y, $repl, $replLen = false) {\r
+                       $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl));\r
+               }\r
+       }       
+
+
+
+//---- merged_config.php -----------------------------
+
+
+
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Config file, tuned-up for merged verion\r
+ */\r
+     \r
+    define('QR_CACHEABLE', false);       // use cache - more disk reads but less CPU power, masks and format templates are stored there\r
+    define('QR_CACHE_DIR', false);       // used when QR_CACHEABLE === true\r
+    define('QR_LOG_DIR', false);         // default error logs dir   \r
+    \r
+    define('QR_FIND_BEST_MASK', true);                                                          // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code\r
+    define('QR_FIND_FROM_RANDOM', 2);                                                       // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly\r
+    define('QR_DEFAULT_MASK', 2);                                                               // when QR_FIND_BEST_MASK === false\r
+                                                  \r
+    define('QR_PNG_MAXIMUM_SIZE',  1024);                                                       // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images\r
+                                                  
+
+
+
+//---- qrtools.php -----------------------------
+
+
+
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Toolset, handy and debug utilites.\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
+\r
+    class QRtools {\r
+    \r
+        //----------------------------------------------------------------------\r
+        public static function binarize($frame)\r
+        {\r
+            $len = count($frame);\r
+            foreach ($frame as &$frameLine) {\r
+                \r
+                for($i=0; $i<$len; $i++) {\r
+                    $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0';\r
+                }\r
+            }\r
+            \r
+            return $frame;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037')\r
+        {\r
+            $barcode_array = array();\r
+            \r
+            if (!is_array($mode))\r
+                $mode = explode(',', $mode);\r
+                \r
+            $eccLevel = 'L';\r
+                \r
+            if (count($mode) > 1) {\r
+                $eccLevel = $mode[1];\r
+            }\r
+                \r
+            $qrTab = QRcode::text($code, false, $eccLevel);\r
+            $size = count($qrTab);\r
+                \r
+            $barcode_array['num_rows'] = $size;\r
+            $barcode_array['num_cols'] = $size;\r
+            $barcode_array['bcode'] = array();\r
+                \r
+            foreach ($qrTab as $line) {\r
+                $arrAdd = array();\r
+                foreach(str_split($line) as $char)\r
+                    $arrAdd[] = ($char=='1')?1:0;\r
+                $barcode_array['bcode'][] = $arrAdd;\r
+            }\r
+                    \r
+            return $barcode_array;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function clearCache()\r
+        {\r
+            self::$frames = array();\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function buildCache()\r
+        {\r
+                       QRtools::markTime('before_build_cache');\r
+                       \r
+                       $mask = new QRmask();\r
+            for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) {\r
+                $frame = QRspec::newFrame($a);\r
+                if (QR_IMAGE) {\r
+                    $fileName = QR_CACHE_DIR.'frame_'.$a.'.png';\r
+                    QRimage::png(self::binarize($frame), $fileName, 1, 0);\r
+                }\r
+                               \r
+                               $width = count($frame);\r
+                               $bitMask = array_fill(0, $width, array_fill(0, $width, 0));\r
+                               for ($maskNo=0; $maskNo<8; $maskNo++)\r
+                                       $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true);\r
+            }\r
+                       \r
+                       QRtools::markTime('after_build_cache');\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function log($outfile, $err)\r
+        {\r
+            if (QR_LOG_DIR !== false) {\r
+                if ($err != '') {\r
+                    if ($outfile !== false) {\r
+                        file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND);\r
+                    } else {\r
+                        file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND);\r
+                    }\r
+                }    \r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function dumpMask($frame) \r
+        {\r
+            $width = count($frame);\r
+            for($y=0;$y<$width;$y++) {\r
+                for($x=0;$x<$width;$x++) {\r
+                    echo ord($frame[$y][$x]).',';\r
+                }\r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function markTime($markerId)\r
+        {\r
+            list($usec, $sec) = explode(" ", microtime());\r
+            $time = ((float)$usec + (float)$sec);\r
+            \r
+            if (!isset($GLOBALS['qr_time_bench']))\r
+                $GLOBALS['qr_time_bench'] = array();\r
+            \r
+            $GLOBALS['qr_time_bench'][$markerId] = $time;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function timeBenchmark()\r
+        {\r
+            self::markTime('finish');\r
+        \r
+            $lastTime = 0;\r
+            $startTime = 0;\r
+            $p = 0;\r
+\r
+            echo '<table cellpadding="3" cellspacing="1">\r
+                    <thead><tr style="border-bottom:1px solid silver"><td colspan="2" style="text-align:center">BENCHMARK</td></tr></thead>\r
+                    <tbody>';\r
+\r
+            foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) {\r
+                if ($p > 0) {\r
+                    echo '<tr><th style="text-align:right">till '.$markerId.': </th><td>'.number_format($thisTime-$lastTime, 6).'s</td></tr>';\r
+                } else {\r
+                    $startTime = $thisTime;\r
+                }\r
+                \r
+                $p++;\r
+                $lastTime = $thisTime;\r
+            }\r
+            \r
+            echo '</tbody><tfoot>\r
+                <tr style="border-top:2px solid black"><th style="text-align:right">TOTAL: </th><td>'.number_format($lastTime-$startTime, 6).'s</td></tr>\r
+            </tfoot>\r
+            </table>';\r
+        }\r
+        \r
+    }\r
+    \r
+    //##########################################################################\r
+    \r
+    QRtools::markTime('start');\r
+    
+
+
+
+//---- qrspec.php -----------------------------
+
+
+
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * QR Code specifications\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * The following data / specifications are taken from\r
+ * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004)\r
+ *  or\r
+ * "Automatic identification and data capture techniques -- \r
+ *  QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006)\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+    define('QRSPEC_VERSION_MAX', 40);\r
+    define('QRSPEC_WIDTH_MAX',   177);\r
+\r
+    define('QRCAP_WIDTH',        0);\r
+    define('QRCAP_WORDS',        1);\r
+    define('QRCAP_REMINDER',     2);\r
+    define('QRCAP_EC',           3);\r
+\r
+    class QRspec {\r
+    \r
+        public static $capacity = array(\r
+            array(  0,    0, 0, array(   0,    0,    0,    0)),\r
+            array( 21,   26, 0, array(   7,   10,   13,   17)), // 1\r
+            array( 25,   44, 7, array(  10,   16,   22,   28)),\r
+            array( 29,   70, 7, array(  15,   26,   36,   44)),\r
+            array( 33,  100, 7, array(  20,   36,   52,   64)),\r
+            array( 37,  134, 7, array(  26,   48,   72,   88)), // 5\r
+            array( 41,  172, 7, array(  36,   64,   96,  112)),\r
+            array( 45,  196, 0, array(  40,   72,  108,  130)),\r
+            array( 49,  242, 0, array(  48,   88,  132,  156)),\r
+            array( 53,  292, 0, array(  60,  110,  160,  192)),\r
+            array( 57,  346, 0, array(  72,  130,  192,  224)), //10\r
+            array( 61,  404, 0, array(  80,  150,  224,  264)),\r
+            array( 65,  466, 0, array(  96,  176,  260,  308)),\r
+            array( 69,  532, 0, array( 104,  198,  288,  352)),\r
+            array( 73,  581, 3, array( 120,  216,  320,  384)),\r
+            array( 77,  655, 3, array( 132,  240,  360,  432)), //15\r
+            array( 81,  733, 3, array( 144,  280,  408,  480)),\r
+            array( 85,  815, 3, array( 168,  308,  448,  532)),\r
+            array( 89,  901, 3, array( 180,  338,  504,  588)),\r
+            array( 93,  991, 3, array( 196,  364,  546,  650)),\r
+            array( 97, 1085, 3, array( 224,  416,  600,  700)), //20\r
+            array(101, 1156, 4, array( 224,  442,  644,  750)),\r
+            array(105, 1258, 4, array( 252,  476,  690,  816)),\r
+            array(109, 1364, 4, array( 270,  504,  750,  900)),\r
+            array(113, 1474, 4, array( 300,  560,  810,  960)),\r
+            array(117, 1588, 4, array( 312,  588,  870, 1050)), //25\r
+            array(121, 1706, 4, array( 336,  644,  952, 1110)),\r
+            array(125, 1828, 4, array( 360,  700, 1020, 1200)),\r
+            array(129, 1921, 3, array( 390,  728, 1050, 1260)),\r
+            array(133, 2051, 3, array( 420,  784, 1140, 1350)),\r
+            array(137, 2185, 3, array( 450,  812, 1200, 1440)), //30\r
+            array(141, 2323, 3, array( 480,  868, 1290, 1530)),\r
+            array(145, 2465, 3, array( 510,  924, 1350, 1620)),\r
+            array(149, 2611, 3, array( 540,  980, 1440, 1710)),\r
+            array(153, 2761, 3, array( 570, 1036, 1530, 1800)),\r
+            array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35\r
+            array(161, 3034, 0, array( 600, 1120, 1680, 1980)),\r
+            array(165, 3196, 0, array( 630, 1204, 1770, 2100)),\r
+            array(169, 3362, 0, array( 660, 1260, 1860, 2220)),\r
+            array(173, 3532, 0, array( 720, 1316, 1950, 2310)),\r
+            array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40\r
+        );\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function getDataLength($version, $level)\r
+        {\r
+            return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level];\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function getECCLength($version, $level)\r
+        {\r
+            return self::$capacity[$version][QRCAP_EC][$level];\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function getWidth($version)\r
+        {\r
+            return self::$capacity[$version][QRCAP_WIDTH];\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function getRemainder($version)\r
+        {\r
+            return self::$capacity[$version][QRCAP_REMINDER];\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function getMinimumVersion($size, $level)\r
+        {\r
+\r
+            for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) {\r
+                $words  = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level];\r
+                if($words >= $size) \r
+                    return $i;\r
+            }\r
+\r
+            return -1;\r
+        }\r
+    \r
+        //######################################################################\r
+        \r
+        public static $lengthTableBits = array(\r
+            array(10, 12, 14),\r
+            array( 9, 11, 13),\r
+            array( 8, 16, 16),\r
+            array( 8, 10, 12)\r
+        );\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function lengthIndicator($mode, $version)\r
+        {\r
+            if ($mode == QR_MODE_STRUCTURE)\r
+                return 0;\r
+                \r
+            if ($version <= 9) {\r
+                $l = 0;\r
+            } else if ($version <= 26) {\r
+                $l = 1;\r
+            } else {\r
+                $l = 2;\r
+            }\r
+\r
+            return self::$lengthTableBits[$mode][$l];\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function maximumWords($mode, $version)\r
+        {\r
+            if($mode == QR_MODE_STRUCTURE) \r
+                return 3;\r
+                \r
+            if($version <= 9) {\r
+                $l = 0;\r
+            } else if($version <= 26) {\r
+                $l = 1;\r
+            } else {\r
+                $l = 2;\r
+            }\r
+\r
+            $bits = self::$lengthTableBits[$mode][$l];\r
+            $words = (1 << $bits) - 1;\r
+            \r
+            if($mode == QR_MODE_KANJI) {\r
+                $words *= 2; // the number of bytes is required\r
+            }\r
+\r
+            return $words;\r
+        }\r
+\r
+        // Error correction code -----------------------------------------------\r
+        // Table of the error correction code (Reed-Solomon block)\r
+        // See Table 12-16 (pp.30-36), JIS X0510:2004.\r
+\r
+        public static $eccTable = array(\r
+            array(array( 0,  0), array( 0,  0), array( 0,  0), array( 0,  0)),\r
+            array(array( 1,  0), array( 1,  0), array( 1,  0), array( 1,  0)), // 1\r
+            array(array( 1,  0), array( 1,  0), array( 1,  0), array( 1,  0)),\r
+            array(array( 1,  0), array( 1,  0), array( 2,  0), array( 2,  0)),\r
+            array(array( 1,  0), array( 2,  0), array( 2,  0), array( 4,  0)),\r
+            array(array( 1,  0), array( 2,  0), array( 2,  2), array( 2,  2)), // 5\r
+            array(array( 2,  0), array( 4,  0), array( 4,  0), array( 4,  0)),\r
+            array(array( 2,  0), array( 4,  0), array( 2,  4), array( 4,  1)),\r
+            array(array( 2,  0), array( 2,  2), array( 4,  2), array( 4,  2)),\r
+            array(array( 2,  0), array( 3,  2), array( 4,  4), array( 4,  4)),\r
+            array(array( 2,  2), array( 4,  1), array( 6,  2), array( 6,  2)), //10\r
+            array(array( 4,  0), array( 1,  4), array( 4,  4), array( 3,  8)),\r
+            array(array( 2,  2), array( 6,  2), array( 4,  6), array( 7,  4)),\r
+            array(array( 4,  0), array( 8,  1), array( 8,  4), array(12,  4)),\r
+            array(array( 3,  1), array( 4,  5), array(11,  5), array(11,  5)),\r
+            array(array( 5,  1), array( 5,  5), array( 5,  7), array(11,  7)), //15\r
+            array(array( 5,  1), array( 7,  3), array(15,  2), array( 3, 13)),\r
+            array(array( 1,  5), array(10,  1), array( 1, 15), array( 2, 17)),\r
+            array(array( 5,  1), array( 9,  4), array(17,  1), array( 2, 19)),\r
+            array(array( 3,  4), array( 3, 11), array(17,  4), array( 9, 16)),\r
+            array(array( 3,  5), array( 3, 13), array(15,  5), array(15, 10)), //20\r
+            array(array( 4,  4), array(17,  0), array(17,  6), array(19,  6)),\r
+            array(array( 2,  7), array(17,  0), array( 7, 16), array(34,  0)),\r
+            array(array( 4,  5), array( 4, 14), array(11, 14), array(16, 14)),\r
+            array(array( 6,  4), array( 6, 14), array(11, 16), array(30,  2)),\r
+            array(array( 8,  4), array( 8, 13), array( 7, 22), array(22, 13)), //25\r
+            array(array(10,  2), array(19,  4), array(28,  6), array(33,  4)),\r
+            array(array( 8,  4), array(22,  3), array( 8, 26), array(12, 28)),\r
+            array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)),\r
+            array(array( 7,  7), array(21,  7), array( 1, 37), array(19, 26)),\r
+            array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30\r
+            array(array(13,  3), array( 2, 29), array(42,  1), array(23, 28)),\r
+            array(array(17,  0), array(10, 23), array(10, 35), array(19, 35)),\r
+            array(array(17,  1), array(14, 21), array(29, 19), array(11, 46)),\r
+            array(array(13,  6), array(14, 23), array(44,  7), array(59,  1)),\r
+            array(array(12,  7), array(12, 26), array(39, 14), array(22, 41)), //35\r
+            array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)),\r
+            array(array(17,  4), array(29, 14), array(49, 10), array(24, 46)),\r
+            array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)),\r
+            array(array(20,  4), array(40,  7), array(43, 22), array(10, 67)),\r
+            array(array(19,  6), array(18, 31), array(34, 34), array(20, 61)),//40\r
+        );                                                                       \r
+\r
+        //----------------------------------------------------------------------\r
+        // CACHEABLE!!!\r
+        \r
+        public static function getEccSpec($version, $level, array &$spec)\r
+        {\r
+            if (count($spec) < 5) {\r
+                $spec = array(0,0,0,0,0);\r
+            }\r
+\r
+            $b1   = self::$eccTable[$version][$level][0];\r
+            $b2   = self::$eccTable[$version][$level][1];\r
+            $data = self::getDataLength($version, $level);\r
+            $ecc  = self::getECCLength($version, $level);\r
+\r
+            if($b2 == 0) {\r
+                $spec[0] = $b1;\r
+                $spec[1] = (int)($data / $b1);\r
+                $spec[2] = (int)($ecc / $b1);\r
+                $spec[3] = 0; \r
+                $spec[4] = 0;\r
+            } else {\r
+                $spec[0] = $b1;\r
+                $spec[1] = (int)($data / ($b1 + $b2));\r
+                $spec[2] = (int)($ecc  / ($b1 + $b2));\r
+                $spec[3] = $b2;\r
+                $spec[4] = $spec[1] + 1;\r
+            }\r
+        }\r
+\r
+        // Alignment pattern ---------------------------------------------------\r
+\r
+        // Positions of alignment patterns.\r
+        // This array includes only the second and the third position of the \r
+        // alignment patterns. Rest of them can be calculated from the distance \r
+        // between them.\r
+         \r
+        // See Table 1 in Appendix E (pp.71) of JIS X0510:2004.\r
+         \r
+        public static $alignmentPattern = array(      \r
+            array( 0,  0),\r
+            array( 0,  0), array(18,  0), array(22,  0), array(26,  0), array(30,  0), // 1- 5\r
+            array(34,  0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10\r
+            array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15\r
+            array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20\r
+            array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25\r
+            array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30\r
+            array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35\r
+            array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40\r
+        );                                                                                  \r
+\r
+        \r
+        /** --------------------------------------------------------------------\r
+         * Put an alignment marker.\r
+         * @param frame\r
+         * @param width\r
+         * @param ox,oy center coordinate of the pattern\r
+         */\r
+        public static function putAlignmentMarker(array &$frame, $ox, $oy)\r
+        {\r
+            $finder = array(\r
+                "\xa1\xa1\xa1\xa1\xa1",\r
+                "\xa1\xa0\xa0\xa0\xa1",\r
+                "\xa1\xa0\xa1\xa0\xa1",\r
+                "\xa1\xa0\xa0\xa0\xa1",\r
+                "\xa1\xa1\xa1\xa1\xa1"\r
+            );                        \r
+            \r
+            $yStart = $oy-2;         \r
+            $xStart = $ox-2;\r
+            \r
+            for($y=0; $y<5; $y++) {\r
+                QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]);\r
+            }\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function putAlignmentPattern($version, &$frame, $width)\r
+        {\r
+            if($version < 2)\r
+                return;\r
+\r
+            $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0];\r
+            if($d < 0) {\r
+                $w = 2;\r
+            } else {\r
+                $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2);\r
+            }\r
+\r
+            if($w * $w - 3 == 1) {\r
+                $x = self::$alignmentPattern[$version][0];\r
+                $y = self::$alignmentPattern[$version][0];\r
+                self::putAlignmentMarker($frame, $x, $y);\r
+                return;\r
+            }\r
+\r
+            $cx = self::$alignmentPattern[$version][0];\r
+            for($x=1; $x<$w - 1; $x++) {\r
+                self::putAlignmentMarker($frame, 6, $cx);\r
+                self::putAlignmentMarker($frame, $cx,  6);\r
+                $cx += $d;\r
+            }\r
+\r
+            $cy = self::$alignmentPattern[$version][0];\r
+            for($y=0; $y<$w-1; $y++) {\r
+                $cx = self::$alignmentPattern[$version][0];\r
+                for($x=0; $x<$w-1; $x++) {\r
+                    self::putAlignmentMarker($frame, $cx, $cy);\r
+                    $cx += $d;\r
+                }\r
+                $cy += $d;\r
+            }\r
+        }\r
+\r
+        // Version information pattern -----------------------------------------\r
+\r
+               // Version information pattern (BCH coded).\r
+        // See Table 1 in Appendix D (pp.68) of JIS X0510:2004.\r
+        \r
+               // size: [QRSPEC_VERSION_MAX - 6]\r
+               \r
+        public static $versionPattern = array(\r
+            0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d,\r
+            0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9,\r
+            0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75,\r
+            0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64,\r
+            0x27541, 0x28c69\r
+        );\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function getVersionPattern($version)\r
+        {\r
+            if($version < 7 || $version > QRSPEC_VERSION_MAX)\r
+                return 0;\r
+\r
+            return self::$versionPattern[$version -7];\r
+        }\r
+\r
+        // Format information --------------------------------------------------\r
+        // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib)\r
+        \r
+        public static $formatInfo = array(\r
+            array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976),\r
+            array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0),\r
+            array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed),\r
+            array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b)\r
+        );\r
+\r
+        public static function getFormatInfo($mask, $level)\r
+        {\r
+            if($mask < 0 || $mask > 7)\r
+                return 0;\r
+                \r
+            if($level < 0 || $level > 3)\r
+                return 0;                \r
+\r
+            return self::$formatInfo[$level][$mask];\r
+        }\r
+\r
+        // Frame ---------------------------------------------------------------\r
+        // Cache of initial frames.\r
+         \r
+        public static $frames = array();\r
+\r
+        /** --------------------------------------------------------------------\r
+         * Put a finder pattern.\r
+         * @param frame\r
+         * @param width\r
+         * @param ox,oy upper-left coordinate of the pattern\r
+         */\r
+        public static function putFinderPattern(&$frame, $ox, $oy)\r
+        {\r
+            $finder = array(\r
+                "\xc1\xc1\xc1\xc1\xc1\xc1\xc1",\r
+                "\xc1\xc0\xc0\xc0\xc0\xc0\xc1",\r
+                "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",\r
+                "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",\r
+                "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",\r
+                "\xc1\xc0\xc0\xc0\xc0\xc0\xc1",\r
+                "\xc1\xc1\xc1\xc1\xc1\xc1\xc1"\r
+            );                            \r
+            \r
+            for($y=0; $y<7; $y++) {\r
+                QRstr::set($frame, $ox, $oy+$y, $finder[$y]);\r
+            }\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function createFrame($version)\r
+        {\r
+            $width = self::$capacity[$version][QRCAP_WIDTH];\r
+            $frameLine = str_repeat ("\0", $width);\r
+            $frame = array_fill(0, $width, $frameLine);\r
+\r
+            // Finder pattern\r
+            self::putFinderPattern($frame, 0, 0);\r
+            self::putFinderPattern($frame, $width - 7, 0);\r
+            self::putFinderPattern($frame, 0, $width - 7);\r
+            \r
+            // Separator\r
+            $yOffset = $width - 7;\r
+            \r
+            for($y=0; $y<7; $y++) {\r
+                $frame[$y][7] = "\xc0";\r
+                $frame[$y][$width - 8] = "\xc0";\r
+                $frame[$yOffset][7] = "\xc0";\r
+                $yOffset++;\r
+            }\r
+            \r
+            $setPattern = str_repeat("\xc0", 8);\r
+            \r
+            QRstr::set($frame, 0, 7, $setPattern);\r
+            QRstr::set($frame, $width-8, 7, $setPattern);\r
+            QRstr::set($frame, 0, $width - 8, $setPattern);\r
+        \r
+            // Format info\r
+            $setPattern = str_repeat("\x84", 9);\r
+            QRstr::set($frame, 0, 8, $setPattern);\r
+            QRstr::set($frame, $width - 8, 8, $setPattern, 8);\r
+            \r
+            $yOffset = $width - 8;\r
+\r
+            for($y=0; $y<8; $y++,$yOffset++) {\r
+                $frame[$y][8] = "\x84";\r
+                $frame[$yOffset][8] = "\x84";\r
+            }\r
+\r
+            // Timing pattern  \r
+            \r
+            for($i=1; $i<$width-15; $i++) {\r
+                $frame[6][7+$i] = chr(0x90 | ($i & 1));\r
+                $frame[7+$i][6] = chr(0x90 | ($i & 1));\r
+            }\r
+            \r
+            // Alignment pattern  \r
+            self::putAlignmentPattern($version, $frame, $width);\r
+            \r
+            // Version information \r
+            if($version >= 7) {\r
+                $vinf = self::getVersionPattern($version);\r
+\r
+                $v = $vinf;\r
+                \r
+                for($x=0; $x<6; $x++) {\r
+                    for($y=0; $y<3; $y++) {\r
+                        $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1));\r
+                        $v = $v >> 1;\r
+                    }\r
+                }\r
+\r
+                $v = $vinf;\r
+                for($y=0; $y<6; $y++) {\r
+                    for($x=0; $x<3; $x++) {\r
+                        $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1));\r
+                        $v = $v >> 1;\r
+                    }\r
+                }\r
+            }\r
+    \r
+            // and a little bit...  \r
+            $frame[$width - 8][8] = "\x81";\r
+            \r
+            return $frame;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function debug($frame, $binary_mode = false)\r
+        {\r
+            if ($binary_mode) {\r
+            \r
+                    foreach ($frame as &$frameLine) {\r
+                        $frameLine = join('<span class="m">&nbsp;&nbsp;</span>', explode('0', $frameLine));\r
+                        $frameLine = join('&#9608;&#9608;', explode('1', $frameLine));\r
+                    }\r
+                    \r
+                    ?>\r
+                <style>\r
+                    .m { background-color: white; }\r
+                </style>\r
+                <?php\r
+                    echo '<pre><tt><br/ ><br/ ><br/ >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';\r
+                    echo join("<br/ >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;", $frame);\r
+                    echo '</tt></pre><br/ ><br/ ><br/ ><br/ ><br/ ><br/ >';\r
+            \r
+            } else {\r
+            \r
+                foreach ($frame as &$frameLine) {\r
+                    $frameLine = join('<span class="m">&nbsp;</span>',  explode("\xc0", $frameLine));\r
+                    $frameLine = join('<span class="m">&#9618;</span>', explode("\xc1", $frameLine));\r
+                    $frameLine = join('<span class="p">&nbsp;</span>',  explode("\xa0", $frameLine));\r
+                    $frameLine = join('<span class="p">&#9618;</span>', explode("\xa1", $frameLine));\r
+                    $frameLine = join('<span class="s">&#9671;</span>', explode("\x84", $frameLine)); //format 0\r
+                    $frameLine = join('<span class="s">&#9670;</span>', explode("\x85", $frameLine)); //format 1\r
+                    $frameLine = join('<span class="x">&#9762;</span>', explode("\x81", $frameLine)); //special bit\r
+                    $frameLine = join('<span class="c">&nbsp;</span>',  explode("\x90", $frameLine)); //clock 0\r
+                    $frameLine = join('<span class="c">&#9719;</span>', explode("\x91", $frameLine)); //clock 1\r
+                    $frameLine = join('<span class="f">&nbsp;</span>',  explode("\x88", $frameLine)); //version\r
+                    $frameLine = join('<span class="f">&#9618;</span>', explode("\x89", $frameLine)); //version\r
+                    $frameLine = join('&#9830;', explode("\x01", $frameLine));\r
+                    $frameLine = join('&#8901;', explode("\0", $frameLine));\r
+                }\r
+                \r
+                ?>\r
+                <style>\r
+                    .p { background-color: yellow; }\r
+                    .m { background-color: #00FF00; }\r
+                    .s { background-color: #FF0000; }\r
+                    .c { background-color: aqua; }\r
+                    .x { background-color: pink; }\r
+                    .f { background-color: gold; }\r
+                </style>\r
+                <?php\r
+                echo "<pre><tt>";\r
+                echo join("<br/ >", $frame);\r
+                echo "</tt></pre>";\r
+            \r
+            }\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function serial($frame)\r
+        {\r
+            return gzcompress(join("\n", $frame), 9);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function unserial($code)\r
+        {\r
+            return explode("\n", gzuncompress($code));\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function newFrame($version)\r
+        {\r
+            if($version < 1 || $version > QRSPEC_VERSION_MAX) \r
+                return null;\r
+\r
+            if(!isset(self::$frames[$version])) {\r
+                \r
+                $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat';\r
+                \r
+                if (QR_CACHEABLE) {\r
+                    if (file_exists($fileName)) {\r
+                        self::$frames[$version] = self::unserial(file_get_contents($fileName));\r
+                    } else {\r
+                        self::$frames[$version] = self::createFrame($version);\r
+                        file_put_contents($fileName, self::serial(self::$frames[$version]));\r
+                    }\r
+                } else {\r
+                    self::$frames[$version] = self::createFrame($version);\r
+                }\r
+            }\r
+            \r
+            if(is_null(self::$frames[$version]))\r
+                return null;\r
+\r
+            return self::$frames[$version];\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function rsBlockNum($spec)     { return $spec[0] + $spec[3]; }\r
+        public static function rsBlockNum1($spec)    { return $spec[0]; }\r
+        public static function rsDataCodes1($spec)   { return $spec[1]; }\r
+        public static function rsEccCodes1($spec)    { return $spec[2]; }\r
+        public static function rsBlockNum2($spec)    { return $spec[3]; }\r
+        public static function rsDataCodes2($spec)   { return $spec[4]; }\r
+        public static function rsEccCodes2($spec)    { return $spec[2]; }\r
+        public static function rsDataLength($spec)   { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]);    }\r
+        public static function rsEccLength($spec)    { return ($spec[0] + $spec[3]) * $spec[2]; }\r
+        \r
+    }
+
+
+
+//---- qrimage.php -----------------------------
+
+
+
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Image output of code using GD2\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+    define('QR_IMAGE', true);\r
+\r
+    class QRimage {\r
+    \r
+        //----------------------------------------------------------------------\r
+        public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) \r
+        {\r
+            $image = self::image($frame, $pixelPerPoint, $outerFrame);\r
+            \r
+            if ($filename === false) {\r
+                Header("Content-type: image/png");\r
+                ImagePng($image);\r
+            } else {\r
+                if($saveandprint===TRUE){\r
+                    ImagePng($image, $filename);\r
+                    header("Content-type: image/png");\r
+                    ImagePng($image);\r
+                }else{\r
+                    ImagePng($image, $filename);\r
+                }\r
+            }\r
+            \r
+            ImageDestroy($image);\r
+        }\r
+    \r
+        //----------------------------------------------------------------------\r
+        public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) \r
+        {\r
+            $image = self::image($frame, $pixelPerPoint, $outerFrame);\r
+            \r
+            if ($filename === false) {\r
+                Header("Content-type: image/jpeg");\r
+                ImageJpeg($image, null, $q);\r
+            } else {\r
+                ImageJpeg($image, $filename, $q);            \r
+            }\r
+            \r
+            ImageDestroy($image);\r
+        }\r
+    \r
+        //----------------------------------------------------------------------\r
+        private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) \r
+        {\r
+            $h = count($frame);\r
+            $w = strlen($frame[0]);\r
+            \r
+            $imgW = $w + 2*$outerFrame;\r
+            $imgH = $h + 2*$outerFrame;\r
+            \r
+            $base_image =ImageCreate($imgW, $imgH);\r
+            \r
+            $col[0] = ImageColorAllocate($base_image,255,255,255);\r
+            $col[1] = ImageColorAllocate($base_image,0,0,0);\r
+\r
+            imagefill($base_image, 0, 0, $col[0]);\r
+\r
+            for($y=0; $y<$h; $y++) {\r
+                for($x=0; $x<$w; $x++) {\r
+                    if ($frame[$y][$x] == '1') {\r
+                        ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); \r
+                    }\r
+                }\r
+            }\r
+            \r
+            $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint);\r
+            ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH);\r
+            ImageDestroy($base_image);\r
+            \r
+            return $target_image;\r
+        }\r
+    }
+
+
+
+//---- qrinput.php -----------------------------
+
+
+
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Input encoding class\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+    define('STRUCTURE_HEADER_BITS',  20);\r
+    define('MAX_STRUCTURED_SYMBOLS', 16);\r
+\r
+    class QRinputItem {\r
+    \r
+        public $mode;\r
+        public $size;\r
+        public $data;\r
+        public $bstream;\r
+\r
+        public function __construct($mode, $size, $data, $bstream = null) \r
+        {\r
+            $setData = array_slice($data, 0, $size);\r
+            \r
+            if (count($setData) < $size) {\r
+                $setData = array_merge($setData, array_fill(0,$size-count($setData),0));\r
+            }\r
+        \r
+            if(!QRinput::check($mode, $size, $setData)) {\r
+                throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData));\r
+                return null;\r
+            }\r
+            \r
+            $this->mode = $mode;\r
+            $this->size = $size;\r
+            $this->data = $setData;\r
+            $this->bstream = $bstream;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeModeNum($version)\r
+        {\r
+            try {\r
+            \r
+                $words = (int)($this->size / 3);\r
+                $bs = new QRbitstream();\r
+                \r
+                $val = 0x1;\r
+                $bs->appendNum(4, $val);\r
+                $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size);\r
+\r
+                for($i=0; $i<$words; $i++) {\r
+                    $val  = (ord($this->data[$i*3  ]) - ord('0')) * 100;\r
+                    $val += (ord($this->data[$i*3+1]) - ord('0')) * 10;\r
+                    $val += (ord($this->data[$i*3+2]) - ord('0'));\r
+                    $bs->appendNum(10, $val);\r
+                }\r
+\r
+                if($this->size - $words * 3 == 1) {\r
+                    $val = ord($this->data[$words*3]) - ord('0');\r
+                    $bs->appendNum(4, $val);\r
+                } else if($this->size - $words * 3 == 2) {\r
+                    $val  = (ord($this->data[$words*3  ]) - ord('0')) * 10;\r
+                    $val += (ord($this->data[$words*3+1]) - ord('0'));\r
+                    $bs->appendNum(7, $val);\r
+                }\r
+\r
+                $this->bstream = $bs;\r
+                return 0;\r
+                \r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeModeAn($version)\r
+        {\r
+            try {\r
+                $words = (int)($this->size / 2);\r
+                $bs = new QRbitstream();\r
+                \r
+                $bs->appendNum(4, 0x02);\r
+                $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size);\r
+\r
+                for($i=0; $i<$words; $i++) {\r
+                    $val  = (int)QRinput::lookAnTable(ord($this->data[$i*2  ])) * 45;\r
+                    $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1]));\r
+\r
+                    $bs->appendNum(11, $val);\r
+                }\r
+\r
+                if($this->size & 1) {\r
+                    $val = QRinput::lookAnTable(ord($this->data[$words * 2]));\r
+                    $bs->appendNum(6, $val);\r
+                }\r
+        \r
+                $this->bstream = $bs;\r
+                return 0;\r
+            \r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeMode8($version)\r
+        {\r
+            try {\r
+                $bs = new QRbitstream();\r
+\r
+                $bs->appendNum(4, 0x4);\r
+                $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size);\r
+\r
+                for($i=0; $i<$this->size; $i++) {\r
+                    $bs->appendNum(8, ord($this->data[$i]));\r
+                }\r
+\r
+                $this->bstream = $bs;\r
+                return 0;\r
+            \r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeModeKanji($version)\r
+        {\r
+            try {\r
+\r
+                $bs = new QRbitrtream();\r
+                \r
+                $bs->appendNum(4, 0x8);\r
+                $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2));\r
+\r
+                for($i=0; $i<$this->size; $i+=2) {\r
+                    $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]);\r
+                    if($val <= 0x9ffc) {\r
+                        $val -= 0x8140;\r
+                    } else {\r
+                        $val -= 0xc140;\r
+                    }\r
+                    \r
+                    $h = ($val >> 8) * 0xc0;\r
+                    $val = ($val & 0xff) + $h;\r
+\r
+                    $bs->appendNum(13, $val);\r
+                }\r
+\r
+                $this->bstream = $bs;\r
+                return 0;\r
+            \r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function encodeModeStructure()\r
+        {\r
+            try {\r
+                $bs =  new QRbitstream();\r
+                \r
+                $bs->appendNum(4, 0x03);\r
+                $bs->appendNum(4, ord($this->data[1]) - 1);\r
+                $bs->appendNum(4, ord($this->data[0]) - 1);\r
+                $bs->appendNum(8, ord($this->data[2]));\r
+\r
+                $this->bstream = $bs;\r
+                return 0;\r
+            \r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function estimateBitStreamSizeOfEntry($version)\r
+        {\r
+            $bits = 0;\r
+\r
+            if($version == 0) \r
+                $version = 1;\r
+\r
+            switch($this->mode) {\r
+                case QR_MODE_NUM:        $bits = QRinput::estimateBitsModeNum($this->size);    break;\r
+                case QR_MODE_AN:        $bits = QRinput::estimateBitsModeAn($this->size);    break;\r
+                case QR_MODE_8:            $bits = QRinput::estimateBitsMode8($this->size);    break;\r
+                case QR_MODE_KANJI:        $bits = QRinput::estimateBitsModeKanji($this->size);break;\r
+                case QR_MODE_STRUCTURE:    return STRUCTURE_HEADER_BITS;            \r
+                default:\r
+                    return 0;\r
+            }\r
+\r
+            $l = QRspec::lengthIndicator($this->mode, $version);\r
+            $m = 1 << $l;\r
+            $num = (int)(($this->size + $m - 1) / $m);\r
+\r
+            $bits += $num * (4 + $l);\r
+\r
+            return $bits;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeBitStream($version)\r
+        {\r
+            try {\r
+            \r
+                unset($this->bstream);\r
+                $words = QRspec::maximumWords($this->mode, $version);\r
+                \r
+                if($this->size > $words) {\r
+                \r
+                    $st1 = new QRinputItem($this->mode, $words, $this->data);\r
+                    $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words));\r
+\r
+                    $st1->encodeBitStream($version);\r
+                    $st2->encodeBitStream($version);\r
+                    \r
+                    $this->bstream = new QRbitstream();\r
+                    $this->bstream->append($st1->bstream);\r
+                    $this->bstream->append($st2->bstream);\r
+                    \r
+                    unset($st1);\r
+                    unset($st2);\r
+                    \r
+                } else {\r
+                    \r
+                    $ret = 0;\r
+                    \r
+                    switch($this->mode) {\r
+                        case QR_MODE_NUM:        $ret = $this->encodeModeNum($version);    break;\r
+                        case QR_MODE_AN:        $ret = $this->encodeModeAn($version);    break;\r
+                        case QR_MODE_8:            $ret = $this->encodeMode8($version);    break;\r
+                        case QR_MODE_KANJI:        $ret = $this->encodeModeKanji($version);break;\r
+                        case QR_MODE_STRUCTURE:    $ret = $this->encodeModeStructure();    break;\r
+                        \r
+                        default:\r
+                            break;\r
+                    }\r
+                    \r
+                    if($ret < 0)\r
+                        return -1;\r
+                }\r
+\r
+                return $this->bstream->size();\r
+            \r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+    };\r
+    \r
+    //##########################################################################\r
+\r
+    class QRinput {\r
+\r
+        public $items;\r
+        \r
+        private $version;\r
+        private $level;\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function __construct($version = 0, $level = QR_ECLEVEL_L)\r
+        {\r
+            if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) {\r
+                throw new Exception('Invalid version no');\r
+                return NULL;\r
+            }\r
+            \r
+            $this->version = $version;\r
+            $this->level = $level;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function getVersion()\r
+        {\r
+            return $this->version;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function setVersion($version)\r
+        {\r
+            if($version < 0 || $version > QRSPEC_VERSION_MAX) {\r
+                throw new Exception('Invalid version no');\r
+                return -1;\r
+            }\r
+\r
+            $this->version = $version;\r
+\r
+            return 0;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function getErrorCorrectionLevel()\r
+        {\r
+            return $this->level;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function setErrorCorrectionLevel($level)\r
+        {\r
+            if($level > QR_ECLEVEL_H) {\r
+                throw new Exception('Invalid ECLEVEL');\r
+                return -1;\r
+            }\r
+\r
+            $this->level = $level;\r
+\r
+            return 0;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function appendEntry(QRinputItem $entry)\r
+        {\r
+            $this->items[] = $entry;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function append($mode, $size, $data)\r
+        {\r
+            try {\r
+                $entry = new QRinputItem($mode, $size, $data);\r
+                $this->items[] = $entry;\r
+                return 0;\r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        \r
+        public function insertStructuredAppendHeader($size, $index, $parity)\r
+        {\r
+            if( $size > MAX_STRUCTURED_SYMBOLS ) {\r
+                throw new Exception('insertStructuredAppendHeader wrong size');\r
+            }\r
+            \r
+            if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) {\r
+                throw new Exception('insertStructuredAppendHeader wrong index');\r
+            }\r
+\r
+            $buf = array($size, $index, $parity);\r
+            \r
+            try {\r
+                $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf);\r
+                array_unshift($this->items, $entry);\r
+                return 0;\r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function calcParity()\r
+        {\r
+            $parity = 0;\r
+            \r
+            foreach($this->items as $item) {\r
+                if($item->mode != QR_MODE_STRUCTURE) {\r
+                    for($i=$item->size-1; $i>=0; $i--) {\r
+                        $parity ^= $item->data[$i];\r
+                    }\r
+                }\r
+            }\r
+\r
+            return $parity;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function checkModeNum($size, $data)\r
+        {\r
+            for($i=0; $i<$size; $i++) {\r
+                if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){\r
+                    return false;\r
+                }\r
+            }\r
+\r
+            return true;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function estimateBitsModeNum($size)\r
+        {\r
+            $w = (int)$size / 3;\r
+            $bits = $w * 10;\r
+            \r
+            switch($size - $w * 3) {\r
+                case 1:\r
+                    $bits += 4;\r
+                    break;\r
+                case 2:\r
+                    $bits += 7;\r
+                    break;\r
+                default:\r
+                    break;\r
+            }\r
+\r
+            return $bits;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static $anTable = array(\r
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
+            36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43,\r
+             0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 44, -1, -1, -1, -1, -1,\r
+            -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\r
+            25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,\r
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1\r
+        );\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function lookAnTable($c)\r
+        {\r
+            return (($c > 127)?-1:self::$anTable[$c]);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function checkModeAn($size, $data)\r
+        {\r
+            for($i=0; $i<$size; $i++) {\r
+                if (self::lookAnTable(ord($data[$i])) == -1) {\r
+                    return false;\r
+                }\r
+            }\r
+\r
+            return true;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function estimateBitsModeAn($size)\r
+        {\r
+            $w = (int)($size / 2);\r
+            $bits = $w * 11;\r
+            \r
+            if($size & 1) {\r
+                $bits += 6;\r
+            }\r
+\r
+            return $bits;\r
+        }\r
+    \r
+        //----------------------------------------------------------------------\r
+        public static function estimateBitsMode8($size)\r
+        {\r
+            return $size * 8;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function estimateBitsModeKanji($size)\r
+        {\r
+            return (int)(($size / 2) * 13);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function checkModeKanji($size, $data)\r
+        {\r
+            if($size & 1)\r
+                return false;\r
+\r
+            for($i=0; $i<$size; $i+=2) {\r
+                $val = (ord($data[$i]) << 8) | ord($data[$i+1]);\r
+                if( $val < 0x8140 \r
+                || ($val > 0x9ffc && $val < 0xe040) \r
+                || $val > 0xebbf) {\r
+                    return false;\r
+                }\r
+            }\r
+\r
+            return true;\r
+        }\r
+\r
+        /***********************************************************************\r
+         * Validation\r
+         **********************************************************************/\r
+\r
+        public static function check($mode, $size, $data)\r
+        {\r
+            if($size <= 0) \r
+                return false;\r
+\r
+            switch($mode) {\r
+                case QR_MODE_NUM:       return self::checkModeNum($size, $data);   break;\r
+                case QR_MODE_AN:        return self::checkModeAn($size, $data);    break;\r
+                case QR_MODE_KANJI:     return self::checkModeKanji($size, $data); break;\r
+                case QR_MODE_8:         return true; break;\r
+                case QR_MODE_STRUCTURE: return true; break;\r
+                \r
+                default:\r
+                    break;\r
+            }\r
+\r
+            return false;\r
+        }\r
+        \r
+        \r
+        //----------------------------------------------------------------------\r
+        public function estimateBitStreamSize($version)\r
+        {\r
+            $bits = 0;\r
+\r
+            foreach($this->items as $item) {\r
+                $bits += $item->estimateBitStreamSizeOfEntry($version);\r
+            }\r
+\r
+            return $bits;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function estimateVersion()\r
+        {\r
+            $version = 0;\r
+            $prev = 0;\r
+            do {\r
+                $prev = $version;\r
+                $bits = $this->estimateBitStreamSize($prev);\r
+                $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level);\r
+                if ($version < 0) {\r
+                    return -1;\r
+                }\r
+            } while ($version > $prev);\r
+\r
+            return $version;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function lengthOfCode($mode, $version, $bits)\r
+        {\r
+            $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version);\r
+            switch($mode) {\r
+                case QR_MODE_NUM:\r
+                    $chunks = (int)($payload / 10);\r
+                    $remain = $payload - $chunks * 10;\r
+                    $size = $chunks * 3;\r
+                    if($remain >= 7) {\r
+                        $size += 2;\r
+                    } else if($remain >= 4) {\r
+                        $size += 1;\r
+                    }\r
+                    break;\r
+                case QR_MODE_AN:\r
+                    $chunks = (int)($payload / 11);\r
+                    $remain = $payload - $chunks * 11;\r
+                    $size = $chunks * 2;\r
+                    if($remain >= 6) \r
+                        $size++;\r
+                    break;\r
+                case QR_MODE_8:\r
+                    $size = (int)($payload / 8);\r
+                    break;\r
+                case QR_MODE_KANJI:\r
+                    $size = (int)(($payload / 13) * 2);\r
+                    break;\r
+                case QR_MODE_STRUCTURE:\r
+                    $size = (int)($payload / 8);\r
+                    break;\r
+                default:\r
+                    $size = 0;\r
+                    break;\r
+            }\r
+            \r
+            $maxsize = QRspec::maximumWords($mode, $version);\r
+            if($size < 0) $size = 0;\r
+            if($size > $maxsize) $size = $maxsize;\r
+\r
+            return $size;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function createBitStream()\r
+        {\r
+            $total = 0;\r
+\r
+            foreach($this->items as $item) {\r
+                $bits = $item->encodeBitStream($this->version);\r
+                \r
+                if($bits < 0) \r
+                    return -1;\r
+                    \r
+                $total += $bits;\r
+            }\r
+\r
+            return $total;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function convertData()\r
+        {\r
+            $ver = $this->estimateVersion();\r
+            if($ver > $this->getVersion()) {\r
+                $this->setVersion($ver);\r
+            }\r
+\r
+            for(;;) {\r
+                $bits = $this->createBitStream();\r
+                \r
+                if($bits < 0) \r
+                    return -1;\r
+                    \r
+                $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level);\r
+                if($ver < 0) {\r
+                    throw new Exception('WRONG VERSION');\r
+                    return -1;\r
+                } else if($ver > $this->getVersion()) {\r
+                    $this->setVersion($ver);\r
+                } else {\r
+                    break;\r
+                }\r
+            }\r
+\r
+            return 0;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function appendPaddingBit(&$bstream)\r
+        {\r
+            $bits = $bstream->size();\r
+            $maxwords = QRspec::getDataLength($this->version, $this->level);\r
+            $maxbits = $maxwords * 8;\r
+\r
+            if ($maxbits == $bits) {\r
+                return 0;\r
+            }\r
+\r
+            if ($maxbits - $bits < 5) {\r
+                return $bstream->appendNum($maxbits - $bits, 0);\r
+            }\r
+\r
+            $bits += 4;\r
+            $words = (int)(($bits + 7) / 8);\r
+\r
+            $padding = new QRbitstream();\r
+            $ret = $padding->appendNum($words * 8 - $bits + 4, 0);\r
+            \r
+            if($ret < 0) \r
+                return $ret;\r
+\r
+            $padlen = $maxwords - $words;\r
+            \r
+            if($padlen > 0) {\r
+                \r
+                $padbuf = array();\r
+                for($i=0; $i<$padlen; $i++) {\r
+                    $padbuf[$i] = ($i&1)?0x11:0xec;\r
+                }\r
+                \r
+                $ret = $padding->appendBytes($padlen, $padbuf);\r
+                \r
+                if($ret < 0)\r
+                    return $ret;\r
+                \r
+            }\r
+\r
+            $ret = $bstream->append($padding);\r
+            \r
+            return $ret;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function mergeBitStream()\r
+        {\r
+            if($this->convertData() < 0) {\r
+                return null;\r
+            }\r
+\r
+            $bstream = new QRbitstream();\r
+            \r
+            foreach($this->items as $item) {\r
+                $ret = $bstream->append($item->bstream);\r
+                if($ret < 0) {\r
+                    return null;\r
+                }\r
+            }\r
+\r
+            return $bstream;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function getBitStream()\r
+        {\r
+\r
+            $bstream = $this->mergeBitStream();\r
+            \r
+            if($bstream == null) {\r
+                return null;\r
+            }\r
+            \r
+            $ret = $this->appendPaddingBit($bstream);\r
+            if($ret < 0) {\r
+                return null;\r
+            }\r
+\r
+            return $bstream;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function getByteStream()\r
+        {\r
+            $bstream = $this->getBitStream();\r
+            if($bstream == null) {\r
+                return null;\r
+            }\r
+            \r
+            return $bstream->toByte();\r
+        }\r
+    }\r
+        \r
+        \r
+    
+
+
+
+//---- qrbitstream.php -----------------------------
+
+
+
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Bitstream class\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
+     \r
+    class QRbitstream {\r
+    \r
+        public $data = array();\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function size()\r
+        {\r
+            return count($this->data);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function allocate($setLength)\r
+        {\r
+            $this->data = array_fill(0, $setLength, 0);\r
+            return 0;\r
+        }\r
+    \r
+        //----------------------------------------------------------------------\r
+        public static function newFromNum($bits, $num)\r
+        {\r
+            $bstream = new QRbitstream();\r
+            $bstream->allocate($bits);\r
+            \r
+            $mask = 1 << ($bits - 1);\r
+            for($i=0; $i<$bits; $i++) {\r
+                if($num & $mask) {\r
+                    $bstream->data[$i] = 1;\r
+                } else {\r
+                    $bstream->data[$i] = 0;\r
+                }\r
+                $mask = $mask >> 1;\r
+            }\r
+\r
+            return $bstream;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function newFromBytes($size, $data)\r
+        {\r
+            $bstream = new QRbitstream();\r
+            $bstream->allocate($size * 8);\r
+            $p=0;\r
+\r
+            for($i=0; $i<$size; $i++) {\r
+                $mask = 0x80;\r
+                for($j=0; $j<8; $j++) {\r
+                    if($data[$i] & $mask) {\r
+                        $bstream->data[$p] = 1;\r
+                    } else {\r
+                        $bstream->data[$p] = 0;\r
+                    }\r
+                    $p++;\r
+                    $mask = $mask >> 1;\r
+                }\r
+            }\r
+\r
+            return $bstream;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function append(QRbitstream $arg)\r
+        {\r
+            if (is_null($arg)) {\r
+                return -1;\r
+            }\r
+            \r
+            if($arg->size() == 0) {\r
+                return 0;\r
+            }\r
+            \r
+            if($this->size() == 0) {\r
+                $this->data = $arg->data;\r
+                return 0;\r
+            }\r
+            \r
+            $this->data = array_values(array_merge($this->data, $arg->data));\r
+\r
+            return 0;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function appendNum($bits, $num)\r
+        {\r
+            if ($bits == 0) \r
+                return 0;\r
+\r
+            $b = QRbitstream::newFromNum($bits, $num);\r
+            \r
+            if(is_null($b))\r
+                return -1;\r
+\r
+            $ret = $this->append($b);\r
+            unset($b);\r
+\r
+            return $ret;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function appendBytes($size, $data)\r
+        {\r
+            if ($size == 0) \r
+                return 0;\r
+\r
+            $b = QRbitstream::newFromBytes($size, $data);\r
+            \r
+            if(is_null($b))\r
+                return -1;\r
+\r
+            $ret = $this->append($b);\r
+            unset($b);\r
+\r
+            return $ret;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function toByte()\r
+        {\r
+        \r
+            $size = $this->size();\r
+\r
+            if($size == 0) {\r
+                return array();\r
+            }\r
+            \r
+            $data = array_fill(0, (int)(($size + 7) / 8), 0);\r
+            $bytes = (int)($size / 8);\r
+\r
+            $p = 0;\r
+            \r
+            for($i=0; $i<$bytes; $i++) {\r
+                $v = 0;\r
+                for($j=0; $j<8; $j++) {\r
+                    $v = $v << 1;\r
+                    $v |= $this->data[$p];\r
+                    $p++;\r
+                }\r
+                $data[$i] = $v;\r
+            }\r
+            \r
+            if($size & 7) {\r
+                $v = 0;\r
+                for($j=0; $j<($size & 7); $j++) {\r
+                    $v = $v << 1;\r
+                    $v |= $this->data[$p];\r
+                    $p++;\r
+                }\r
+                $data[$bytes] = $v;\r
+            }\r
+\r
+            return $data;\r
+        }\r
+\r
+    }\r
+
+
+
+
+//---- qrsplit.php -----------------------------
+
+
+
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Input splitting classes\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * The following data / specifications are taken from\r
+ * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004)\r
+ *  or\r
+ * "Automatic identification and data capture techniques -- \r
+ *  QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006)\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
+    class QRsplit {\r
+\r
+        public $dataStr = '';\r
+        public $input;\r
+        public $modeHint;\r
+\r
+        //----------------------------------------------------------------------\r
+        public function __construct($dataStr, $input, $modeHint) \r
+        {\r
+            $this->dataStr  = $dataStr;\r
+            $this->input    = $input;\r
+            $this->modeHint = $modeHint;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function isdigitat($str, $pos)\r
+        {    \r
+            if ($pos >= strlen($str))\r
+                return false;\r
+            \r
+            return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9')));\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function isalnumat($str, $pos)\r
+        {\r
+            if ($pos >= strlen($str))\r
+                return false;\r
+                \r
+            return (QRinput::lookAnTable(ord($str[$pos])) >= 0);\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function identifyMode($pos)\r
+        {\r
+            if ($pos >= strlen($this->dataStr)) \r
+                return QR_MODE_NUL;\r
+                \r
+            $c = $this->dataStr[$pos];\r
+            \r
+            if(self::isdigitat($this->dataStr, $pos)) {\r
+                return QR_MODE_NUM;\r
+            } else if(self::isalnumat($this->dataStr, $pos)) {\r
+                return QR_MODE_AN;\r
+            } else if($this->modeHint == QR_MODE_KANJI) {\r
+            \r
+                if ($pos+1 < strlen($this->dataStr)) \r
+                {\r
+                    $d = $this->dataStr[$pos+1];\r
+                    $word = (ord($c) << 8) | ord($d);\r
+                    if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) {\r
+                        return QR_MODE_KANJI;\r
+                    }\r
+                }\r
+            }\r
+\r
+            return QR_MODE_8;\r
+        } \r
+        \r
+        //----------------------------------------------------------------------\r
+        public function eatNum()\r
+        {\r
+            $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion());\r
+\r
+            $p = 0;\r
+            while(self::isdigitat($this->dataStr, $p)) {\r
+                $p++;\r
+            }\r
+            \r
+            $run = $p;\r
+            $mode = $this->identifyMode($p);\r
+            \r
+            if($mode == QR_MODE_8) {\r
+                $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln\r
+                     + QRinput::estimateBitsMode8(1)         // + 4 + l8\r
+                     - QRinput::estimateBitsMode8($run + 1); // - 4 - l8\r
+                if($dif > 0) {\r
+                    return $this->eat8();\r
+                }\r
+            }\r
+            if($mode == QR_MODE_AN) {\r
+                $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln\r
+                     + QRinput::estimateBitsModeAn(1)        // + 4 + la\r
+                     - QRinput::estimateBitsModeAn($run + 1);// - 4 - la\r
+                if($dif > 0) {\r
+                    return $this->eatAn();\r
+                }\r
+            }\r
+            \r
+            $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr));\r
+            if($ret < 0)\r
+                return -1;\r
+\r
+            return $run;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function eatAn()\r
+        {\r
+            $la = QRspec::lengthIndicator(QR_MODE_AN,  $this->input->getVersion());\r
+            $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion());\r
+\r
+            $p = 0;\r
+            \r
+            while(self::isalnumat($this->dataStr, $p)) {\r
+                if(self::isdigitat($this->dataStr, $p)) {\r
+                    $q = $p;\r
+                    while(self::isdigitat($this->dataStr, $q)) {\r
+                        $q++;\r
+                    }\r
+                    \r
+                    $dif = QRinput::estimateBitsModeAn($p) // + 4 + la\r
+                         + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln\r
+                         - QRinput::estimateBitsModeAn($q); // - 4 - la\r
+                         \r
+                    if($dif < 0) {\r
+                        break;\r
+                    } else {\r
+                        $p = $q;\r
+                    }\r
+                } else {\r
+                    $p++;\r
+                }\r
+            }\r
+\r
+            $run = $p;\r
+\r
+            if(!self::isalnumat($this->dataStr, $p)) {\r
+                $dif = QRinput::estimateBitsModeAn($run) + 4 + $la\r
+                     + QRinput::estimateBitsMode8(1) // + 4 + l8\r
+                      - QRinput::estimateBitsMode8($run + 1); // - 4 - l8\r
+                if($dif > 0) {\r
+                    return $this->eat8();\r
+                }\r
+            }\r
+\r
+            $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr));\r
+            if($ret < 0)\r
+                return -1;\r
+\r
+            return $run;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function eatKanji()\r
+        {\r
+            $p = 0;\r
+            \r
+            while($this->identifyMode($p) == QR_MODE_KANJI) {\r
+                $p += 2;\r
+            }\r
+            \r
+            $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr));\r
+            if($ret < 0)\r
+                return -1;\r
+\r
+            return $run;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function eat8()\r
+        {\r
+            $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion());\r
+            $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion());\r
+\r
+            $p = 1;\r
+            $dataStrLen = strlen($this->dataStr);\r
+            \r
+            while($p < $dataStrLen) {\r
+                \r
+                $mode = $this->identifyMode($p);\r
+                if($mode == QR_MODE_KANJI) {\r
+                    break;\r
+                }\r
+                if($mode == QR_MODE_NUM) {\r
+                    $q = $p;\r
+                    while(self::isdigitat($this->dataStr, $q)) {\r
+                        $q++;\r
+                    }\r
+                    $dif = QRinput::estimateBitsMode8($p) // + 4 + l8\r
+                         + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln\r
+                         - QRinput::estimateBitsMode8($q); // - 4 - l8\r
+                    if($dif < 0) {\r
+                        break;\r
+                    } else {\r
+                        $p = $q;\r
+                    }\r
+                } else if($mode == QR_MODE_AN) {\r
+                    $q = $p;\r
+                    while(self::isalnumat($this->dataStr, $q)) {\r
+                        $q++;\r
+                    }\r
+                    $dif = QRinput::estimateBitsMode8($p)  // + 4 + l8\r
+                         + QRinput::estimateBitsModeAn($q - $p) + 4 + $la\r
+                         - QRinput::estimateBitsMode8($q); // - 4 - l8\r
+                    if($dif < 0) {\r
+                        break;\r
+                    } else {\r
+                        $p = $q;\r
+                    }\r
+                } else {\r
+                    $p++;\r
+                }\r
+            }\r
+\r
+            $run = $p;\r
+            $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr));\r
+            \r
+            if($ret < 0)\r
+                return -1;\r
+\r
+            return $run;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function splitString()\r
+        {\r
+            while (strlen($this->dataStr) > 0)\r
+            {\r
+                if($this->dataStr == '')\r
+                    return 0;\r
+\r
+                $mode = $this->identifyMode(0);\r
+                \r
+                switch ($mode) {\r
+                    case QR_MODE_NUM: $length = $this->eatNum(); break;\r
+                    case QR_MODE_AN:  $length = $this->eatAn(); break;\r
+                    case QR_MODE_KANJI:\r
+                        if ($hint == QR_MODE_KANJI)\r
+                                $length = $this->eatKanji();\r
+                        else    $length = $this->eat8();\r
+                        break;\r
+                    default: $length = $this->eat8(); break;\r
+                \r
+                }\r
+\r
+                if($length == 0) return 0;\r
+                if($length < 0)  return -1;\r
+                \r
+                $this->dataStr = substr($this->dataStr, $length);\r
+            }\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function toUpper()\r
+        {\r
+            $stringLen = strlen($this->dataStr);\r
+            $p = 0;\r
+            \r
+            while ($p<$stringLen) {\r
+                $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint);\r
+                if($mode == QR_MODE_KANJI) {\r
+                    $p += 2;\r
+                } else {\r
+                    if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) {\r
+                        $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32);\r
+                    }\r
+                    $p++;\r
+                }\r
+            }\r
+\r
+            return $this->dataStr;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true)\r
+        {\r
+            if(is_null($string) || $string == '\0' || $string == '') {\r
+                throw new Exception('empty string!!!');\r
+            }\r
+\r
+            $split = new QRsplit($string, $input, $modeHint);\r
+            \r
+            if(!$casesensitive)\r
+                $split->toUpper();\r
+                \r
+            return $split->splitString();\r
+        }\r
+    }
+
+
+
+//---- qrrscode.php -----------------------------
+
+
+
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Reed-Solomon error correction support\r
+ * \r
+ * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q\r
+ * (libfec is released under the GNU Lesser General Public License.)\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+    class QRrsItem {\r
+    \r
+        public $mm;                  // Bits per symbol \r
+        public $nn;                  // Symbols per block (= (1<<mm)-1) \r
+        public $alpha_to = array();  // log lookup table \r
+        public $index_of = array();  // Antilog lookup table \r
+        public $genpoly = array();   // Generator polynomial \r
+        public $nroots;              // Number of generator roots = number of parity symbols \r
+        public $fcr;                 // First consecutive root, index form \r
+        public $prim;                // Primitive element, index form \r
+        public $iprim;               // prim-th root of 1, index form \r
+        public $pad;                 // Padding bytes in shortened block \r
+        public $gfpoly;\r
+    \r
+        //----------------------------------------------------------------------\r
+        public function modnn($x)\r
+        {\r
+            while ($x >= $this->nn) {\r
+                $x -= $this->nn;\r
+                $x = ($x >> $this->mm) + ($x & $this->nn);\r
+            }\r
+            \r
+            return $x;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad)\r
+        {\r
+            // Common code for intializing a Reed-Solomon control block (char or int symbols)\r
+            // Copyright 2004 Phil Karn, KA9Q\r
+            // May be used under the terms of the GNU Lesser General Public License (LGPL)\r
+\r
+            $rs = null;\r
+            \r
+            // Check parameter ranges\r
+            if($symsize < 0 || $symsize > 8)                     return $rs;\r
+            if($fcr < 0 || $fcr >= (1<<$symsize))                return $rs;\r
+            if($prim <= 0 || $prim >= (1<<$symsize))             return $rs;\r
+            if($nroots < 0 || $nroots >= (1<<$symsize))          return $rs; // Can't have more roots than symbol values!\r
+            if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding\r
+\r
+            $rs = new QRrsItem();\r
+            $rs->mm = $symsize;\r
+            $rs->nn = (1<<$symsize)-1;\r
+            $rs->pad = $pad;\r
+\r
+            $rs->alpha_to = array_fill(0, $rs->nn+1, 0);\r
+            $rs->index_of = array_fill(0, $rs->nn+1, 0);\r
+          \r
+            // PHP style macro replacement ;)\r
+            $NN =& $rs->nn;\r
+            $A0 =& $NN;\r
+            \r
+            // Generate Galois field lookup tables\r
+            $rs->index_of[0] = $A0; // log(zero) = -inf\r
+            $rs->alpha_to[$A0] = 0; // alpha**-inf = 0\r
+            $sr = 1;\r
+          \r
+            for($i=0; $i<$rs->nn; $i++) {\r
+                $rs->index_of[$sr] = $i;\r
+                $rs->alpha_to[$i] = $sr;\r
+                $sr <<= 1;\r
+                if($sr & (1<<$symsize)) {\r
+                    $sr ^= $gfpoly;\r
+                }\r
+                $sr &= $rs->nn;\r
+            }\r
+            \r
+            if($sr != 1){\r
+                // field generator polynomial is not primitive!\r
+                $rs = NULL;\r
+                return $rs;\r
+            }\r
+\r
+            /* Form RS code generator polynomial from its roots */\r
+            $rs->genpoly = array_fill(0, $nroots+1, 0);\r
+        \r
+            $rs->fcr = $fcr;\r
+            $rs->prim = $prim;\r
+            $rs->nroots = $nroots;\r
+            $rs->gfpoly = $gfpoly;\r
+\r
+            /* Find prim-th root of 1, used in decoding */\r
+            for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn)\r
+            ; // intentional empty-body loop!\r
+            \r
+            $rs->iprim = (int)($iprim / $prim);\r
+            $rs->genpoly[0] = 1;\r
+            \r
+            for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) {\r
+                $rs->genpoly[$i+1] = 1;\r
+\r
+                // Multiply rs->genpoly[] by  @**(root + x)\r
+                for ($j = $i; $j > 0; $j--) {\r
+                    if ($rs->genpoly[$j] != 0) {\r
+                        $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)];\r
+                    } else {\r
+                        $rs->genpoly[$j] = $rs->genpoly[$j-1];\r
+                    }\r
+                }\r
+                // rs->genpoly[0] can never be zero\r
+                $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)];\r
+            }\r
+            \r
+            // convert rs->genpoly[] to index form for quicker encoding\r
+            for ($i = 0; $i <= $nroots; $i++)\r
+                $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]];\r
+\r
+            return $rs;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encode_rs_char($data, &$parity)\r
+        {\r
+            $MM       =& $this->mm;\r
+            $NN       =& $this->nn;\r
+            $ALPHA_TO =& $this->alpha_to;\r
+            $INDEX_OF =& $this->index_of;\r
+            $GENPOLY  =& $this->genpoly;\r
+            $NROOTS   =& $this->nroots;\r
+            $FCR      =& $this->fcr;\r
+            $PRIM     =& $this->prim;\r
+            $IPRIM    =& $this->iprim;\r
+            $PAD      =& $this->pad;\r
+            $A0       =& $NN;\r
+\r
+            $parity = array_fill(0, $NROOTS, 0);\r
+\r
+            for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) {\r
+                \r
+                $feedback = $INDEX_OF[$data[$i] ^ $parity[0]];\r
+                if($feedback != $A0) {      \r
+                    // feedback term is non-zero\r
+            \r
+                    // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must\r
+                    // always be for the polynomials constructed by init_rs()\r
+                    $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback);\r
+            \r
+                    for($j=1;$j<$NROOTS;$j++) {\r
+                        $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])];\r
+                    }\r
+                }\r
+                \r
+                // Shift \r
+                array_shift($parity);\r
+                if($feedback != $A0) {\r
+                    array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]);\r
+                } else {\r
+                    array_push($parity, 0);\r
+                }\r
+            }\r
+        }\r
+    }\r
+    \r
+    //##########################################################################\r
+    \r
+    class QRrs {\r
+    \r
+        public static $items = array();\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad)\r
+        {\r
+            foreach(self::$items as $rs) {\r
+                if($rs->pad != $pad)       continue;\r
+                if($rs->nroots != $nroots) continue;\r
+                if($rs->mm != $symsize)    continue;\r
+                if($rs->gfpoly != $gfpoly) continue;\r
+                if($rs->fcr != $fcr)       continue;\r
+                if($rs->prim != $prim)     continue;\r
+\r
+                return $rs;\r
+            }\r
+\r
+            $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad);\r
+            array_unshift(self::$items, $rs);\r
+\r
+            return $rs;\r
+        }\r
+    }
+
+
+
+//---- qrmask.php -----------------------------
+
+
+
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Masking\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+       define('N1', 3);\r
+       define('N2', 3);\r
+       define('N3', 40);\r
+       define('N4', 10);\r
+\r
+       class QRmask {\r
+       \r
+               public $runLength = array();\r
+               \r
+               //----------------------------------------------------------------------\r
+               public function __construct() \r
+        {\r
+            $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function writeFormatInformation($width, &$frame, $mask, $level)\r
+        {\r
+            $blacks = 0;\r
+            $format =  QRspec::getFormatInfo($mask, $level);\r
+\r
+            for($i=0; $i<8; $i++) {\r
+                if($format & 1) {\r
+                    $blacks += 2;\r
+                    $v = 0x85;\r
+                } else {\r
+                    $v = 0x84;\r
+                }\r
+                \r
+                $frame[8][$width - 1 - $i] = chr($v);\r
+                if($i < 6) {\r
+                    $frame[$i][8] = chr($v);\r
+                } else {\r
+                    $frame[$i + 1][8] = chr($v);\r
+                }\r
+                $format = $format >> 1;\r
+            }\r
+            \r
+            for($i=0; $i<7; $i++) {\r
+                if($format & 1) {\r
+                    $blacks += 2;\r
+                    $v = 0x85;\r
+                } else {\r
+                    $v = 0x84;\r
+                }\r
+                \r
+                $frame[$width - 7 + $i][8] = chr($v);\r
+                if($i == 0) {\r
+                    $frame[8][7] = chr($v);\r
+                } else {\r
+                    $frame[8][6 - $i] = chr($v);\r
+                }\r
+                \r
+                $format = $format >> 1;\r
+            }\r
+\r
+            return $blacks;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function mask0($x, $y) { return ($x+$y)&1;                       }\r
+        public function mask1($x, $y) { return ($y&1);                          }\r
+        public function mask2($x, $y) { return ($x%3);                          }\r
+        public function mask3($x, $y) { return ($x+$y)%3;                       }\r
+        public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; }\r
+        public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3;           }\r
+        public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1;       }\r
+        public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1;     }\r
+        \r
+        //----------------------------------------------------------------------\r
+        private function generateMaskNo($maskNo, $width, $frame)\r
+        {\r
+            $bitMask = array_fill(0, $width, array_fill(0, $width, 0));\r
+            \r
+            for($y=0; $y<$width; $y++) {\r
+                for($x=0; $x<$width; $x++) {\r
+                    if(ord($frame[$y][$x]) & 0x80) {\r
+                        $bitMask[$y][$x] = 0;\r
+                    } else {\r
+                        $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y);\r
+                        $bitMask[$y][$x] = ($maskFunc == 0)?1:0;\r
+                    }\r
+                    \r
+                }\r
+            }\r
+            \r
+            return $bitMask;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function serial($bitFrame)\r
+        {\r
+            $codeArr = array();\r
+            \r
+            foreach ($bitFrame as $line)\r
+                $codeArr[] = join('', $line);\r
+                \r
+            return gzcompress(join("\n", $codeArr), 9);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function unserial($code)\r
+        {\r
+            $codeArr = array();\r
+            \r
+            $codeLines = explode("\n", gzuncompress($code));\r
+            foreach ($codeLines as $line)\r
+                $codeArr[] = str_split($line);\r
+            \r
+            return $codeArr;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) \r
+        {\r
+            $b = 0;\r
+            $bitMask = array();\r
+            \r
+            $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat';\r
+\r
+            if (QR_CACHEABLE) {\r
+                if (file_exists($fileName)) {\r
+                    $bitMask = self::unserial(file_get_contents($fileName));\r
+                } else {\r
+                    $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);\r
+                    if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo))\r
+                        mkdir(QR_CACHE_DIR.'mask_'.$maskNo);\r
+                    file_put_contents($fileName, self::serial($bitMask));\r
+                }\r
+            } else {\r
+                $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);\r
+            }\r
+\r
+            if ($maskGenOnly)\r
+                return;\r
+                \r
+            $d = $s;\r
+\r
+            for($y=0; $y<$width; $y++) {\r
+                for($x=0; $x<$width; $x++) {\r
+                    if($bitMask[$y][$x] == 1) {\r
+                        $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]);\r
+                    }\r
+                    $b += (int)(ord($d[$y][$x]) & 1);\r
+                }\r
+            }\r
+\r
+            return $b;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function makeMask($width, $frame, $maskNo, $level)\r
+        {\r
+            $masked = array_fill(0, $width, str_repeat("\0", $width));\r
+            $this->makeMaskNo($maskNo, $width, $frame, $masked);\r
+            $this->writeFormatInformation($width, $masked, $maskNo, $level);\r
+       \r
+            return $masked;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function calcN1N3($length)\r
+        {\r
+            $demerit = 0;\r
+\r
+            for($i=0; $i<$length; $i++) {\r
+                \r
+                if($this->runLength[$i] >= 5) {\r
+                    $demerit += (N1 + ($this->runLength[$i] - 5));\r
+                }\r
+                if($i & 1) {\r
+                    if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) {\r
+                        $fact = (int)($this->runLength[$i] / 3);\r
+                        if(($this->runLength[$i-2] == $fact) &&\r
+                           ($this->runLength[$i-1] == $fact) &&\r
+                           ($this->runLength[$i+1] == $fact) &&\r
+                           ($this->runLength[$i+2] == $fact)) {\r
+                            if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) {\r
+                                $demerit += N3;\r
+                            } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) {\r
+                                $demerit += N3;\r
+                            }\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+            return $demerit;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function evaluateSymbol($width, $frame)\r
+        {\r
+            $head = 0;\r
+            $demerit = 0;\r
+\r
+            for($y=0; $y<$width; $y++) {\r
+                $head = 0;\r
+                $this->runLength[0] = 1;\r
+                \r
+                $frameY = $frame[$y];\r
+                \r
+                if ($y>0)\r
+                    $frameYM = $frame[$y-1];\r
+                \r
+                for($x=0; $x<$width; $x++) {\r
+                    if(($x > 0) && ($y > 0)) {\r
+                        $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]);\r
+                        $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]);\r
+                        \r
+                        if(($b22 | ($w22 ^ 1))&1) {                                                                     \r
+                            $demerit += N2;\r
+                        }\r
+                    }\r
+                    if(($x == 0) && (ord($frameY[$x]) & 1)) {\r
+                        $this->runLength[0] = -1;\r
+                        $head = 1;\r
+                        $this->runLength[$head] = 1;\r
+                    } else if($x > 0) {\r
+                        if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) {\r
+                            $head++;\r
+                            $this->runLength[$head] = 1;\r
+                        } else {\r
+                            $this->runLength[$head]++;\r
+                        }\r
+                    }\r
+                }\r
+    \r
+                $demerit += $this->calcN1N3($head+1);\r
+            }\r
+\r
+            for($x=0; $x<$width; $x++) {\r
+                $head = 0;\r
+                $this->runLength[0] = 1;\r
+                \r
+                for($y=0; $y<$width; $y++) {\r
+                    if($y == 0 && (ord($frame[$y][$x]) & 1)) {\r
+                        $this->runLength[0] = -1;\r
+                        $head = 1;\r
+                        $this->runLength[$head] = 1;\r
+                    } else if($y > 0) {\r
+                        if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) {\r
+                            $head++;\r
+                            $this->runLength[$head] = 1;\r
+                        } else {\r
+                            $this->runLength[$head]++;\r
+                        }\r
+                    }\r
+                }\r
+            \r
+                $demerit += $this->calcN1N3($head+1);\r
+            }\r
+\r
+            return $demerit;\r
+        }\r
+        \r
+        \r
+        //----------------------------------------------------------------------\r
+        public function mask($width, $frame, $level)\r
+        {\r
+            $minDemerit = PHP_INT_MAX;\r
+            $bestMaskNum = 0;\r
+            $bestMask = array();\r
+            \r
+            $checked_masks = array(0,1,2,3,4,5,6,7);\r
+            \r
+            if (QR_FIND_FROM_RANDOM !== false) {\r
+            \r
+                $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9);\r
+                for ($i = 0; $i <  $howManuOut; $i++) {\r
+                    $remPos = rand (0, count($checked_masks)-1);\r
+                    unset($checked_masks[$remPos]);\r
+                    $checked_masks = array_values($checked_masks);\r
+                }\r
+            \r
+            }\r
+            \r
+            $bestMask = $frame;\r
+             \r
+            foreach($checked_masks as $i) {\r
+                $mask = array_fill(0, $width, str_repeat("\0", $width));\r
+\r
+                $demerit = 0;\r
+                $blacks = 0;\r
+                $blacks  = $this->makeMaskNo($i, $width, $frame, $mask);\r
+                $blacks += $this->writeFormatInformation($width, $mask, $i, $level);\r
+                $blacks  = (int)(100 * $blacks / ($width * $width));\r
+                $demerit = (int)((int)(abs($blacks - 50) / 5) * N4);\r
+                $demerit += $this->evaluateSymbol($width, $mask);\r
+                \r
+                if($demerit < $minDemerit) {\r
+                    $minDemerit = $demerit;\r
+                    $bestMask = $mask;\r
+                    $bestMaskNum = $i;\r
+                }\r
+            }\r
+            \r
+            return $bestMask;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+    }\r
+
+
+
+
+//---- qrencode.php -----------------------------
+
+
+
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Main encoder classes.\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+    class QRrsblock {\r
+        public $dataLength;\r
+        public $data = array();\r
+        public $eccLength;\r
+        public $ecc = array();\r
+        \r
+        public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs)\r
+        {\r
+            $rs->encode_rs_char($data, $ecc);\r
+        \r
+            $this->dataLength = $dl;\r
+            $this->data = $data;\r
+            $this->eccLength = $el;\r
+            $this->ecc = $ecc;\r
+        }\r
+    };\r
+    \r
+    //##########################################################################\r
+\r
+    class QRrawcode {\r
+        public $version;\r
+        public $datacode = array();\r
+        public $ecccode = array();\r
+        public $blocks;\r
+        public $rsblocks = array(); //of RSblock\r
+        public $count;\r
+        public $dataLength;\r
+        public $eccLength;\r
+        public $b1;\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function __construct(QRinput $input)\r
+        {\r
+            $spec = array(0,0,0,0,0);\r
+            \r
+            $this->datacode = $input->getByteStream();\r
+            if(is_null($this->datacode)) {\r
+                throw new Exception('null imput string');\r
+            }\r
+\r
+            QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec);\r
+\r
+            $this->version = $input->getVersion();\r
+            $this->b1 = QRspec::rsBlockNum1($spec);\r
+            $this->dataLength = QRspec::rsDataLength($spec);\r
+            $this->eccLength = QRspec::rsEccLength($spec);\r
+            $this->ecccode = array_fill(0, $this->eccLength, 0);\r
+            $this->blocks = QRspec::rsBlockNum($spec);\r
+            \r
+            $ret = $this->init($spec);\r
+            if($ret < 0) {\r
+                throw new Exception('block alloc error');\r
+                return null;\r
+            }\r
+\r
+            $this->count = 0;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function init(array $spec)\r
+        {\r
+            $dl = QRspec::rsDataCodes1($spec);\r
+            $el = QRspec::rsEccCodes1($spec);\r
+            $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el);\r
+            \r
+\r
+            $blockNo = 0;\r
+            $dataPos = 0;\r
+            $eccPos = 0;\r
+            for($i=0; $i<QRspec::rsBlockNum1($spec); $i++) {\r
+                $ecc = array_slice($this->ecccode,$eccPos);\r
+                $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el,  $ecc, $rs);\r
+                $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc);\r
+                \r
+                $dataPos += $dl;\r
+                $eccPos += $el;\r
+                $blockNo++;\r
+            }\r
+\r
+            if(QRspec::rsBlockNum2($spec) == 0)\r
+                return 0;\r
+\r
+            $dl = QRspec::rsDataCodes2($spec);\r
+            $el = QRspec::rsEccCodes2($spec);\r
+            $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el);\r
+            \r
+            if($rs == NULL) return -1;\r
+            \r
+            for($i=0; $i<QRspec::rsBlockNum2($spec); $i++) {\r
+                $ecc = array_slice($this->ecccode,$eccPos);\r
+                $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs);\r
+                $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc);\r
+                \r
+                $dataPos += $dl;\r
+                $eccPos += $el;\r
+                $blockNo++;\r
+            }\r
+\r
+            return 0;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function getCode()\r
+        {\r
+            $ret;\r
+\r
+            if($this->count < $this->dataLength) {\r
+                $row = $this->count % $this->blocks;\r
+                $col = $this->count / $this->blocks;\r
+                if($col >= $this->rsblocks[0]->dataLength) {\r
+                    $row += $this->b1;\r
+                }\r
+                $ret = $this->rsblocks[$row]->data[$col];\r
+            } else if($this->count < $this->dataLength + $this->eccLength) {\r
+                $row = ($this->count - $this->dataLength) % $this->blocks;\r
+                $col = ($this->count - $this->dataLength) / $this->blocks;\r
+                $ret = $this->rsblocks[$row]->ecc[$col];\r
+            } else {\r
+                return 0;\r
+            }\r
+            $this->count++;\r
+            \r
+            return $ret;\r
+        }\r
+    }\r
+\r
+    //##########################################################################\r
+    \r
+    class QRcode {\r
+    \r
+        public $version;\r
+        public $width;\r
+        public $data; \r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeMask(QRinput $input, $mask)\r
+        {\r
+            if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) {\r
+                throw new Exception('wrong version');\r
+            }\r
+            if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) {\r
+                throw new Exception('wrong level');\r
+            }\r
+\r
+            $raw = new QRrawcode($input);\r
+            \r
+            QRtools::markTime('after_raw');\r
+            \r
+            $version = $raw->version;\r
+            $width = QRspec::getWidth($version);\r
+            $frame = QRspec::newFrame($version);\r
+            \r
+            $filler = new FrameFiller($width, $frame);\r
+            if(is_null($filler)) {\r
+                return NULL;\r
+            }\r
+\r
+            // inteleaved data and ecc codes\r
+            for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) {\r
+                $code = $raw->getCode();\r
+                $bit = 0x80;\r
+                for($j=0; $j<8; $j++) {\r
+                    $addr = $filler->next();\r
+                    $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0));\r
+                    $bit = $bit >> 1;\r
+                }\r
+            }\r
+            \r
+            QRtools::markTime('after_filler');\r
+            \r
+            unset($raw);\r
+            \r
+            // remainder bits\r
+            $j = QRspec::getRemainder($version);\r
+            for($i=0; $i<$j; $i++) {\r
+                $addr = $filler->next();\r
+                $filler->setFrameAt($addr, 0x02);\r
+            }\r
+            \r
+            $frame = $filler->frame;\r
+            unset($filler);\r
+            \r
+            \r
+            // masking\r
+            $maskObj = new QRmask();\r
+            if($mask < 0) {\r
+            \r
+                if (QR_FIND_BEST_MASK) {\r
+                    $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel());\r
+                } else {\r
+                    $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel());\r
+                }\r
+            } else {\r
+                $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel());\r
+            }\r
+            \r
+            if($masked == NULL) {\r
+                return NULL;\r
+            }\r
+            \r
+            QRtools::markTime('after_mask');\r
+            \r
+            $this->version = $version;\r
+            $this->width = $width;\r
+            $this->data = $masked;\r
+            \r
+            return $this;\r
+        }\r
+    \r
+        //----------------------------------------------------------------------\r
+        public function encodeInput(QRinput $input)\r
+        {\r
+            return $this->encodeMask($input, -1);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeString8bit($string, $version, $level)\r
+        {\r
+            if(string == NULL) {\r
+                throw new Exception('empty string!');\r
+                return NULL;\r
+            }\r
+\r
+            $input = new QRinput($version, $level);\r
+            if($input == NULL) return NULL;\r
+\r
+            $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string));\r
+            if($ret < 0) {\r
+                unset($input);\r
+                return NULL;\r
+            }\r
+            return $this->encodeInput($input);\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function encodeString($string, $version, $level, $hint, $casesensitive)\r
+        {\r
+\r
+            if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) {\r
+                throw new Exception('bad hint');\r
+                return NULL;\r
+            }\r
+\r
+            $input = new QRinput($version, $level);\r
+            if($input == NULL) return NULL;\r
+\r
+            $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive);\r
+            if($ret < 0) {\r
+                return NULL;\r
+            }\r
+\r
+            return $this->encodeInput($input);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) \r
+        {\r
+            $enc = QRencode::factory($level, $size, $margin);\r
+            return $enc->encodePNG($text, $outfile, $saveandprint=false);\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) \r
+        {\r
+            $enc = QRencode::factory($level, $size, $margin);\r
+            return $enc->encode($text, $outfile);\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) \r
+        {\r
+            $enc = QRencode::factory($level, $size, $margin);\r
+            return $enc->encodeRAW($text, $outfile);\r
+        }\r
+    }\r
+    \r
+    //##########################################################################\r
+    \r
+    class FrameFiller {\r
+    \r
+        public $width;\r
+        public $frame;\r
+        public $x;\r
+        public $y;\r
+        public $dir;\r
+        public $bit;\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function __construct($width, &$frame)\r
+        {\r
+            $this->width = $width;\r
+            $this->frame = $frame;\r
+            $this->x = $width - 1;\r
+            $this->y = $width - 1;\r
+            $this->dir = -1;\r
+            $this->bit = -1;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function setFrameAt($at, $val)\r
+        {\r
+            $this->frame[$at['y']][$at['x']] = chr($val);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function getFrameAt($at)\r
+        {\r
+            return ord($this->frame[$at['y']][$at['x']]);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function next()\r
+        {\r
+            do {\r
+            \r
+                if($this->bit == -1) {\r
+                    $this->bit = 0;\r
+                    return array('x'=>$this->x, 'y'=>$this->y);\r
+                }\r
+\r
+                $x = $this->x;\r
+                $y = $this->y;\r
+                $w = $this->width;\r
+\r
+                if($this->bit == 0) {\r
+                    $x--;\r
+                    $this->bit++;\r
+                } else {\r
+                    $x++;\r
+                    $y += $this->dir;\r
+                    $this->bit--;\r
+                }\r
+\r
+                if($this->dir < 0) {\r
+                    if($y < 0) {\r
+                        $y = 0;\r
+                        $x -= 2;\r
+                        $this->dir = 1;\r
+                        if($x == 6) {\r
+                            $x--;\r
+                            $y = 9;\r
+                        }\r
+                    }\r
+                } else {\r
+                    if($y == $w) {\r
+                        $y = $w - 1;\r
+                        $x -= 2;\r
+                        $this->dir = -1;\r
+                        if($x == 6) {\r
+                            $x--;\r
+                            $y -= 8;\r
+                        }\r
+                    }\r
+                }\r
+                if($x < 0 || $y < 0) return null;\r
+\r
+                $this->x = $x;\r
+                $this->y = $y;\r
+\r
+            } while(ord($this->frame[$y][$x]) & 0x80);\r
+                        \r
+            return array('x'=>$x, 'y'=>$y);\r
+        }\r
+        \r
+    } ;\r
+    \r
+    //##########################################################################    \r
+    \r
+    class QRencode {\r
+    \r
+        public $casesensitive = true;\r
+        public $eightbit = false;\r
+        \r
+        public $version = 0;\r
+        public $size = 3;\r
+        public $margin = 4;\r
+        \r
+        public $structured = 0; // not supported yet\r
+        \r
+        public $level = QR_ECLEVEL_L;\r
+        public $hint = QR_MODE_8;\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4)\r
+        {\r
+            $enc = new QRencode();\r
+            $enc->size = $size;\r
+            $enc->margin = $margin;\r
+            \r
+            switch ($level.'') {\r
+                case '0':\r
+                case '1':\r
+                case '2':\r
+                case '3':\r
+                        $enc->level = $level;\r
+                    break;\r
+                case 'l':\r
+                case 'L':\r
+                        $enc->level = QR_ECLEVEL_L;\r
+                    break;\r
+                case 'm':\r
+                case 'M':\r
+                        $enc->level = QR_ECLEVEL_M;\r
+                    break;\r
+                case 'q':\r
+                case 'Q':\r
+                        $enc->level = QR_ECLEVEL_Q;\r
+                    break;\r
+                case 'h':\r
+                case 'H':\r
+                        $enc->level = QR_ECLEVEL_H;\r
+                    break;\r
+            }\r
+            \r
+            return $enc;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeRAW($intext, $outfile = false) \r
+        {\r
+            $code = new QRcode();\r
+\r
+            if($this->eightbit) {\r
+                $code->encodeString8bit($intext, $this->version, $this->level);\r
+            } else {\r
+                $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive);\r
+            }\r
+            \r
+            return $code->data;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function encode($intext, $outfile = false) \r
+        {\r
+            $code = new QRcode();\r
+\r
+            if($this->eightbit) {\r
+                $code->encodeString8bit($intext, $this->version, $this->level);\r
+            } else {\r
+                $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive);\r
+            }\r
+            \r
+            QRtools::markTime('after_encode');\r
+            \r
+            if ($outfile!== false) {\r
+                file_put_contents($outfile, join("\n", QRtools::binarize($code->data)));\r
+            } else {\r
+                return QRtools::binarize($code->data);\r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodePNG($intext, $outfile = false,$saveandprint=false) \r
+        {\r
+            try {\r
+            \r
+                ob_start();\r
+                $tab = $this->encode($intext);\r
+                $err = ob_get_contents();\r
+                ob_end_clean();\r
+                \r
+                if ($err != '')\r
+                    QRtools::log($outfile, $err);\r
+                \r
+                $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));\r
+                \r
+                QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint);\r
+            \r
+            } catch (Exception $e) {\r
+            \r
+                QRtools::log($outfile, $e->getMessage());\r
+            \r
+            }\r
+        }\r
+    }\r
+
+
diff --git a/lib/phpqrcode/qrbitstream.php b/lib/phpqrcode/qrbitstream.php
new file mode 100644 (file)
index 0000000..7d4ec4a
--- /dev/null
@@ -0,0 +1,180 @@
+<?php\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Bitstream class\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
+     \r
+    class QRbitstream {\r
+    \r
+        public $data = array();\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function size()\r
+        {\r
+            return count($this->data);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function allocate($setLength)\r
+        {\r
+            $this->data = array_fill(0, $setLength, 0);\r
+            return 0;\r
+        }\r
+    \r
+        //----------------------------------------------------------------------\r
+        public static function newFromNum($bits, $num)\r
+        {\r
+            $bstream = new QRbitstream();\r
+            $bstream->allocate($bits);\r
+            \r
+            $mask = 1 << ($bits - 1);\r
+            for($i=0; $i<$bits; $i++) {\r
+                if($num & $mask) {\r
+                    $bstream->data[$i] = 1;\r
+                } else {\r
+                    $bstream->data[$i] = 0;\r
+                }\r
+                $mask = $mask >> 1;\r
+            }\r
+\r
+            return $bstream;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function newFromBytes($size, $data)\r
+        {\r
+            $bstream = new QRbitstream();\r
+            $bstream->allocate($size * 8);\r
+            $p=0;\r
+\r
+            for($i=0; $i<$size; $i++) {\r
+                $mask = 0x80;\r
+                for($j=0; $j<8; $j++) {\r
+                    if($data[$i] & $mask) {\r
+                        $bstream->data[$p] = 1;\r
+                    } else {\r
+                        $bstream->data[$p] = 0;\r
+                    }\r
+                    $p++;\r
+                    $mask = $mask >> 1;\r
+                }\r
+            }\r
+\r
+            return $bstream;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function append(QRbitstream $arg)\r
+        {\r
+            if (is_null($arg)) {\r
+                return -1;\r
+            }\r
+            \r
+            if($arg->size() == 0) {\r
+                return 0;\r
+            }\r
+            \r
+            if($this->size() == 0) {\r
+                $this->data = $arg->data;\r
+                return 0;\r
+            }\r
+            \r
+            $this->data = array_values(array_merge($this->data, $arg->data));\r
+\r
+            return 0;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function appendNum($bits, $num)\r
+        {\r
+            if ($bits == 0) \r
+                return 0;\r
+\r
+            $b = QRbitstream::newFromNum($bits, $num);\r
+            \r
+            if(is_null($b))\r
+                return -1;\r
+\r
+            $ret = $this->append($b);\r
+            unset($b);\r
+\r
+            return $ret;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function appendBytes($size, $data)\r
+        {\r
+            if ($size == 0) \r
+                return 0;\r
+\r
+            $b = QRbitstream::newFromBytes($size, $data);\r
+            \r
+            if(is_null($b))\r
+                return -1;\r
+\r
+            $ret = $this->append($b);\r
+            unset($b);\r
+\r
+            return $ret;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function toByte()\r
+        {\r
+        \r
+            $size = $this->size();\r
+\r
+            if($size == 0) {\r
+                return array();\r
+            }\r
+            \r
+            $data = array_fill(0, (int)(($size + 7) / 8), 0);\r
+            $bytes = (int)($size / 8);\r
+\r
+            $p = 0;\r
+            \r
+            for($i=0; $i<$bytes; $i++) {\r
+                $v = 0;\r
+                for($j=0; $j<8; $j++) {\r
+                    $v = $v << 1;\r
+                    $v |= $this->data[$p];\r
+                    $p++;\r
+                }\r
+                $data[$i] = $v;\r
+            }\r
+            \r
+            if($size & 7) {\r
+                $v = 0;\r
+                for($j=0; $j<($size & 7); $j++) {\r
+                    $v = $v << 1;\r
+                    $v |= $this->data[$p];\r
+                    $p++;\r
+                }\r
+                $data[$bytes] = $v;\r
+            }\r
+\r
+            return $data;\r
+        }\r
+\r
+    }\r
diff --git a/lib/phpqrcode/qrconfig.php b/lib/phpqrcode/qrconfig.php
new file mode 100644 (file)
index 0000000..e53dff8
--- /dev/null
@@ -0,0 +1,17 @@
+<?php\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Config file, feel free to modify\r
+ */\r
+     \r
+    define('QR_CACHEABLE', true);                                                               // use cache - more disk reads but less CPU power, masks and format templates are stored there\r
+    define('QR_CACHE_DIR', dirname(__FILE__).DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR);  // used when QR_CACHEABLE === true\r
+    define('QR_LOG_DIR', dirname(__FILE__).DIRECTORY_SEPARATOR);                                // default error logs dir   \r
+    \r
+    define('QR_FIND_BEST_MASK', true);                                                          // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code\r
+    define('QR_FIND_FROM_RANDOM', false);                                                       // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly\r
+    define('QR_DEFAULT_MASK', 2);                                                               // when QR_FIND_BEST_MASK === false\r
+                                                  \r
+    define('QR_PNG_MAXIMUM_SIZE',  1024);                                                       // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images\r
+                                                  
\ No newline at end of file
diff --git a/lib/phpqrcode/qrconst.php b/lib/phpqrcode/qrconst.php
new file mode 100644 (file)
index 0000000..9fac9fd
--- /dev/null
@@ -0,0 +1,54 @@
+<?php\r
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Common constants\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+       // Encoding modes\r
+        \r
+       define('QR_MODE_NUL', -1);\r
+       define('QR_MODE_NUM', 0);\r
+       define('QR_MODE_AN', 1);\r
+       define('QR_MODE_8', 2);\r
+       define('QR_MODE_KANJI', 3);\r
+       define('QR_MODE_STRUCTURE', 4);\r
+\r
+       // Levels of error correction.\r
+\r
+       define('QR_ECLEVEL_L', 0);\r
+       define('QR_ECLEVEL_M', 1);\r
+       define('QR_ECLEVEL_Q', 2);\r
+       define('QR_ECLEVEL_H', 3);\r
+       \r
+       // Supported output formats\r
+       \r
+       define('QR_FORMAT_TEXT', 0);\r
+       define('QR_FORMAT_PNG',  1);\r
+       \r
+       class qrstr {\r
+               public static function set(&$srctab, $x, $y, $repl, $replLen = false) {\r
+                       $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl));\r
+               }\r
+       }       
\ No newline at end of file
diff --git a/lib/phpqrcode/qrencode.php b/lib/phpqrcode/qrencode.php
new file mode 100644 (file)
index 0000000..4b77a5b
--- /dev/null
@@ -0,0 +1,502 @@
+<?php\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Main encoder classes.\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+    class QRrsblock {\r
+        public $dataLength;\r
+        public $data = array();\r
+        public $eccLength;\r
+        public $ecc = array();\r
+        \r
+        public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs)\r
+        {\r
+            $rs->encode_rs_char($data, $ecc);\r
+        \r
+            $this->dataLength = $dl;\r
+            $this->data = $data;\r
+            $this->eccLength = $el;\r
+            $this->ecc = $ecc;\r
+        }\r
+    };\r
+    \r
+    //##########################################################################\r
+\r
+    class QRrawcode {\r
+        public $version;\r
+        public $datacode = array();\r
+        public $ecccode = array();\r
+        public $blocks;\r
+        public $rsblocks = array(); //of RSblock\r
+        public $count;\r
+        public $dataLength;\r
+        public $eccLength;\r
+        public $b1;\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function __construct(QRinput $input)\r
+        {\r
+            $spec = array(0,0,0,0,0);\r
+            \r
+            $this->datacode = $input->getByteStream();\r
+            if(is_null($this->datacode)) {\r
+                throw new Exception('null imput string');\r
+            }\r
+\r
+            QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec);\r
+\r
+            $this->version = $input->getVersion();\r
+            $this->b1 = QRspec::rsBlockNum1($spec);\r
+            $this->dataLength = QRspec::rsDataLength($spec);\r
+            $this->eccLength = QRspec::rsEccLength($spec);\r
+            $this->ecccode = array_fill(0, $this->eccLength, 0);\r
+            $this->blocks = QRspec::rsBlockNum($spec);\r
+            \r
+            $ret = $this->init($spec);\r
+            if($ret < 0) {\r
+                throw new Exception('block alloc error');\r
+                return null;\r
+            }\r
+\r
+            $this->count = 0;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function init(array $spec)\r
+        {\r
+            $dl = QRspec::rsDataCodes1($spec);\r
+            $el = QRspec::rsEccCodes1($spec);\r
+            $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el);\r
+            \r
+\r
+            $blockNo = 0;\r
+            $dataPos = 0;\r
+            $eccPos = 0;\r
+            for($i=0; $i<QRspec::rsBlockNum1($spec); $i++) {\r
+                $ecc = array_slice($this->ecccode,$eccPos);\r
+                $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el,  $ecc, $rs);\r
+                $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc);\r
+                \r
+                $dataPos += $dl;\r
+                $eccPos += $el;\r
+                $blockNo++;\r
+            }\r
+\r
+            if(QRspec::rsBlockNum2($spec) == 0)\r
+                return 0;\r
+\r
+            $dl = QRspec::rsDataCodes2($spec);\r
+            $el = QRspec::rsEccCodes2($spec);\r
+            $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el);\r
+            \r
+            if($rs == NULL) return -1;\r
+            \r
+            for($i=0; $i<QRspec::rsBlockNum2($spec); $i++) {\r
+                $ecc = array_slice($this->ecccode,$eccPos);\r
+                $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs);\r
+                $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc);\r
+                \r
+                $dataPos += $dl;\r
+                $eccPos += $el;\r
+                $blockNo++;\r
+            }\r
+\r
+            return 0;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function getCode()\r
+        {\r
+            $ret;\r
+\r
+            if($this->count < $this->dataLength) {\r
+                $row = $this->count % $this->blocks;\r
+                $col = $this->count / $this->blocks;\r
+                if($col >= $this->rsblocks[0]->dataLength) {\r
+                    $row += $this->b1;\r
+                }\r
+                $ret = $this->rsblocks[$row]->data[$col];\r
+            } else if($this->count < $this->dataLength + $this->eccLength) {\r
+                $row = ($this->count - $this->dataLength) % $this->blocks;\r
+                $col = ($this->count - $this->dataLength) / $this->blocks;\r
+                $ret = $this->rsblocks[$row]->ecc[$col];\r
+            } else {\r
+                return 0;\r
+            }\r
+            $this->count++;\r
+            \r
+            return $ret;\r
+        }\r
+    }\r
+\r
+    //##########################################################################\r
+    \r
+    class QRcode {\r
+    \r
+        public $version;\r
+        public $width;\r
+        public $data; \r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeMask(QRinput $input, $mask)\r
+        {\r
+            if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) {\r
+                throw new Exception('wrong version');\r
+            }\r
+            if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) {\r
+                throw new Exception('wrong level');\r
+            }\r
+\r
+            $raw = new QRrawcode($input);\r
+            \r
+            QRtools::markTime('after_raw');\r
+            \r
+            $version = $raw->version;\r
+            $width = QRspec::getWidth($version);\r
+            $frame = QRspec::newFrame($version);\r
+            \r
+            $filler = new FrameFiller($width, $frame);\r
+            if(is_null($filler)) {\r
+                return NULL;\r
+            }\r
+\r
+            // inteleaved data and ecc codes\r
+            for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) {\r
+                $code = $raw->getCode();\r
+                $bit = 0x80;\r
+                for($j=0; $j<8; $j++) {\r
+                    $addr = $filler->next();\r
+                    $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0));\r
+                    $bit = $bit >> 1;\r
+                }\r
+            }\r
+            \r
+            QRtools::markTime('after_filler');\r
+            \r
+            unset($raw);\r
+            \r
+            // remainder bits\r
+            $j = QRspec::getRemainder($version);\r
+            for($i=0; $i<$j; $i++) {\r
+                $addr = $filler->next();\r
+                $filler->setFrameAt($addr, 0x02);\r
+            }\r
+            \r
+            $frame = $filler->frame;\r
+            unset($filler);\r
+            \r
+            \r
+            // masking\r
+            $maskObj = new QRmask();\r
+            if($mask < 0) {\r
+            \r
+                if (QR_FIND_BEST_MASK) {\r
+                    $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel());\r
+                } else {\r
+                    $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel());\r
+                }\r
+            } else {\r
+                $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel());\r
+            }\r
+            \r
+            if($masked == NULL) {\r
+                return NULL;\r
+            }\r
+            \r
+            QRtools::markTime('after_mask');\r
+            \r
+            $this->version = $version;\r
+            $this->width = $width;\r
+            $this->data = $masked;\r
+            \r
+            return $this;\r
+        }\r
+    \r
+        //----------------------------------------------------------------------\r
+        public function encodeInput(QRinput $input)\r
+        {\r
+            return $this->encodeMask($input, -1);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeString8bit($string, $version, $level)\r
+        {\r
+            if(string == NULL) {\r
+                throw new Exception('empty string!');\r
+                return NULL;\r
+            }\r
+\r
+            $input = new QRinput($version, $level);\r
+            if($input == NULL) return NULL;\r
+\r
+            $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string));\r
+            if($ret < 0) {\r
+                unset($input);\r
+                return NULL;\r
+            }\r
+            return $this->encodeInput($input);\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function encodeString($string, $version, $level, $hint, $casesensitive)\r
+        {\r
+\r
+            if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) {\r
+                throw new Exception('bad hint');\r
+                return NULL;\r
+            }\r
+\r
+            $input = new QRinput($version, $level);\r
+            if($input == NULL) return NULL;\r
+\r
+            $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive);\r
+            if($ret < 0) {\r
+                return NULL;\r
+            }\r
+\r
+            return $this->encodeInput($input);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) \r
+        {\r
+            $enc = QRencode::factory($level, $size, $margin);\r
+            return $enc->encodePNG($text, $outfile, $saveandprint=false);\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) \r
+        {\r
+            $enc = QRencode::factory($level, $size, $margin);\r
+            return $enc->encode($text, $outfile);\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) \r
+        {\r
+            $enc = QRencode::factory($level, $size, $margin);\r
+            return $enc->encodeRAW($text, $outfile);\r
+        }\r
+    }\r
+    \r
+    //##########################################################################\r
+    \r
+    class FrameFiller {\r
+    \r
+        public $width;\r
+        public $frame;\r
+        public $x;\r
+        public $y;\r
+        public $dir;\r
+        public $bit;\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function __construct($width, &$frame)\r
+        {\r
+            $this->width = $width;\r
+            $this->frame = $frame;\r
+            $this->x = $width - 1;\r
+            $this->y = $width - 1;\r
+            $this->dir = -1;\r
+            $this->bit = -1;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function setFrameAt($at, $val)\r
+        {\r
+            $this->frame[$at['y']][$at['x']] = chr($val);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function getFrameAt($at)\r
+        {\r
+            return ord($this->frame[$at['y']][$at['x']]);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function next()\r
+        {\r
+            do {\r
+            \r
+                if($this->bit == -1) {\r
+                    $this->bit = 0;\r
+                    return array('x'=>$this->x, 'y'=>$this->y);\r
+                }\r
+\r
+                $x = $this->x;\r
+                $y = $this->y;\r
+                $w = $this->width;\r
+\r
+                if($this->bit == 0) {\r
+                    $x--;\r
+                    $this->bit++;\r
+                } else {\r
+                    $x++;\r
+                    $y += $this->dir;\r
+                    $this->bit--;\r
+                }\r
+\r
+                if($this->dir < 0) {\r
+                    if($y < 0) {\r
+                        $y = 0;\r
+                        $x -= 2;\r
+                        $this->dir = 1;\r
+                        if($x == 6) {\r
+                            $x--;\r
+                            $y = 9;\r
+                        }\r
+                    }\r
+                } else {\r
+                    if($y == $w) {\r
+                        $y = $w - 1;\r
+                        $x -= 2;\r
+                        $this->dir = -1;\r
+                        if($x == 6) {\r
+                            $x--;\r
+                            $y -= 8;\r
+                        }\r
+                    }\r
+                }\r
+                if($x < 0 || $y < 0) return null;\r
+\r
+                $this->x = $x;\r
+                $this->y = $y;\r
+\r
+            } while(ord($this->frame[$y][$x]) & 0x80);\r
+                        \r
+            return array('x'=>$x, 'y'=>$y);\r
+        }\r
+        \r
+    } ;\r
+    \r
+    //##########################################################################    \r
+    \r
+    class QRencode {\r
+    \r
+        public $casesensitive = true;\r
+        public $eightbit = false;\r
+        \r
+        public $version = 0;\r
+        public $size = 3;\r
+        public $margin = 4;\r
+        \r
+        public $structured = 0; // not supported yet\r
+        \r
+        public $level = QR_ECLEVEL_L;\r
+        public $hint = QR_MODE_8;\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4)\r
+        {\r
+            $enc = new QRencode();\r
+            $enc->size = $size;\r
+            $enc->margin = $margin;\r
+            \r
+            switch ($level.'') {\r
+                case '0':\r
+                case '1':\r
+                case '2':\r
+                case '3':\r
+                        $enc->level = $level;\r
+                    break;\r
+                case 'l':\r
+                case 'L':\r
+                        $enc->level = QR_ECLEVEL_L;\r
+                    break;\r
+                case 'm':\r
+                case 'M':\r
+                        $enc->level = QR_ECLEVEL_M;\r
+                    break;\r
+                case 'q':\r
+                case 'Q':\r
+                        $enc->level = QR_ECLEVEL_Q;\r
+                    break;\r
+                case 'h':\r
+                case 'H':\r
+                        $enc->level = QR_ECLEVEL_H;\r
+                    break;\r
+            }\r
+            \r
+            return $enc;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeRAW($intext, $outfile = false) \r
+        {\r
+            $code = new QRcode();\r
+\r
+            if($this->eightbit) {\r
+                $code->encodeString8bit($intext, $this->version, $this->level);\r
+            } else {\r
+                $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive);\r
+            }\r
+            \r
+            return $code->data;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function encode($intext, $outfile = false) \r
+        {\r
+            $code = new QRcode();\r
+\r
+            if($this->eightbit) {\r
+                $code->encodeString8bit($intext, $this->version, $this->level);\r
+            } else {\r
+                $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive);\r
+            }\r
+            \r
+            QRtools::markTime('after_encode');\r
+            \r
+            if ($outfile!== false) {\r
+                file_put_contents($outfile, join("\n", QRtools::binarize($code->data)));\r
+            } else {\r
+                return QRtools::binarize($code->data);\r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodePNG($intext, $outfile = false,$saveandprint=false) \r
+        {\r
+            try {\r
+            \r
+                ob_start();\r
+                $tab = $this->encode($intext);\r
+                $err = ob_get_contents();\r
+                ob_end_clean();\r
+                \r
+                if ($err != '')\r
+                    QRtools::log($outfile, $err);\r
+                \r
+                $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));\r
+                \r
+                QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint);\r
+            \r
+            } catch (Exception $e) {\r
+            \r
+                QRtools::log($outfile, $e->getMessage());\r
+            \r
+            }\r
+        }\r
+    }\r
diff --git a/lib/phpqrcode/qrimage.php b/lib/phpqrcode/qrimage.php
new file mode 100644 (file)
index 0000000..10b0a6e
--- /dev/null
@@ -0,0 +1,95 @@
+<?php\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Image output of code using GD2\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+    define('QR_IMAGE', true);\r
+\r
+    class QRimage {\r
+    \r
+        //----------------------------------------------------------------------\r
+        public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) \r
+        {\r
+            $image = self::image($frame, $pixelPerPoint, $outerFrame);\r
+            \r
+            if ($filename === false) {\r
+                Header("Content-type: image/png");\r
+                ImagePng($image);\r
+            } else {\r
+                if($saveandprint===TRUE){\r
+                    ImagePng($image, $filename);\r
+                    header("Content-type: image/png");\r
+                    ImagePng($image);\r
+                }else{\r
+                    ImagePng($image, $filename);\r
+                }\r
+            }\r
+            \r
+            ImageDestroy($image);\r
+        }\r
+    \r
+        //----------------------------------------------------------------------\r
+        public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) \r
+        {\r
+            $image = self::image($frame, $pixelPerPoint, $outerFrame);\r
+            \r
+            if ($filename === false) {\r
+                Header("Content-type: image/jpeg");\r
+                ImageJpeg($image, null, $q);\r
+            } else {\r
+                ImageJpeg($image, $filename, $q);            \r
+            }\r
+            \r
+            ImageDestroy($image);\r
+        }\r
+    \r
+        //----------------------------------------------------------------------\r
+        private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) \r
+        {\r
+            $h = count($frame);\r
+            $w = strlen($frame[0]);\r
+            \r
+            $imgW = $w + 2*$outerFrame;\r
+            $imgH = $h + 2*$outerFrame;\r
+            \r
+            $base_image =ImageCreate($imgW, $imgH);\r
+            \r
+            $col[0] = ImageColorAllocate($base_image,255,255,255);\r
+            $col[1] = ImageColorAllocate($base_image,0,0,0);\r
+\r
+            imagefill($base_image, 0, 0, $col[0]);\r
+\r
+            for($y=0; $y<$h; $y++) {\r
+                for($x=0; $x<$w; $x++) {\r
+                    if ($frame[$y][$x] == '1') {\r
+                        ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); \r
+                    }\r
+                }\r
+            }\r
+            \r
+            $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint);\r
+            ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH);\r
+            ImageDestroy($base_image);\r
+            \r
+            return $target_image;\r
+        }\r
+    }
\ No newline at end of file
diff --git a/lib/phpqrcode/qrinput.php b/lib/phpqrcode/qrinput.php
new file mode 100644 (file)
index 0000000..0f6d7f9
--- /dev/null
@@ -0,0 +1,729 @@
+<?php\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Input encoding class\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+    define('STRUCTURE_HEADER_BITS',  20);\r
+    define('MAX_STRUCTURED_SYMBOLS', 16);\r
+\r
+    class QRinputItem {\r
+    \r
+        public $mode;\r
+        public $size;\r
+        public $data;\r
+        public $bstream;\r
+\r
+        public function __construct($mode, $size, $data, $bstream = null) \r
+        {\r
+            $setData = array_slice($data, 0, $size);\r
+            \r
+            if (count($setData) < $size) {\r
+                $setData = array_merge($setData, array_fill(0,$size-count($setData),0));\r
+            }\r
+        \r
+            if(!QRinput::check($mode, $size, $setData)) {\r
+                throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData));\r
+                return null;\r
+            }\r
+            \r
+            $this->mode = $mode;\r
+            $this->size = $size;\r
+            $this->data = $setData;\r
+            $this->bstream = $bstream;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeModeNum($version)\r
+        {\r
+            try {\r
+            \r
+                $words = (int)($this->size / 3);\r
+                $bs = new QRbitstream();\r
+                \r
+                $val = 0x1;\r
+                $bs->appendNum(4, $val);\r
+                $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size);\r
+\r
+                for($i=0; $i<$words; $i++) {\r
+                    $val  = (ord($this->data[$i*3  ]) - ord('0')) * 100;\r
+                    $val += (ord($this->data[$i*3+1]) - ord('0')) * 10;\r
+                    $val += (ord($this->data[$i*3+2]) - ord('0'));\r
+                    $bs->appendNum(10, $val);\r
+                }\r
+\r
+                if($this->size - $words * 3 == 1) {\r
+                    $val = ord($this->data[$words*3]) - ord('0');\r
+                    $bs->appendNum(4, $val);\r
+                } else if($this->size - $words * 3 == 2) {\r
+                    $val  = (ord($this->data[$words*3  ]) - ord('0')) * 10;\r
+                    $val += (ord($this->data[$words*3+1]) - ord('0'));\r
+                    $bs->appendNum(7, $val);\r
+                }\r
+\r
+                $this->bstream = $bs;\r
+                return 0;\r
+                \r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeModeAn($version)\r
+        {\r
+            try {\r
+                $words = (int)($this->size / 2);\r
+                $bs = new QRbitstream();\r
+                \r
+                $bs->appendNum(4, 0x02);\r
+                $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size);\r
+\r
+                for($i=0; $i<$words; $i++) {\r
+                    $val  = (int)QRinput::lookAnTable(ord($this->data[$i*2  ])) * 45;\r
+                    $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1]));\r
+\r
+                    $bs->appendNum(11, $val);\r
+                }\r
+\r
+                if($this->size & 1) {\r
+                    $val = QRinput::lookAnTable(ord($this->data[$words * 2]));\r
+                    $bs->appendNum(6, $val);\r
+                }\r
+        \r
+                $this->bstream = $bs;\r
+                return 0;\r
+            \r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeMode8($version)\r
+        {\r
+            try {\r
+                $bs = new QRbitstream();\r
+\r
+                $bs->appendNum(4, 0x4);\r
+                $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size);\r
+\r
+                for($i=0; $i<$this->size; $i++) {\r
+                    $bs->appendNum(8, ord($this->data[$i]));\r
+                }\r
+\r
+                $this->bstream = $bs;\r
+                return 0;\r
+            \r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeModeKanji($version)\r
+        {\r
+            try {\r
+\r
+                $bs = new QRbitrtream();\r
+                \r
+                $bs->appendNum(4, 0x8);\r
+                $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2));\r
+\r
+                for($i=0; $i<$this->size; $i+=2) {\r
+                    $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]);\r
+                    if($val <= 0x9ffc) {\r
+                        $val -= 0x8140;\r
+                    } else {\r
+                        $val -= 0xc140;\r
+                    }\r
+                    \r
+                    $h = ($val >> 8) * 0xc0;\r
+                    $val = ($val & 0xff) + $h;\r
+\r
+                    $bs->appendNum(13, $val);\r
+                }\r
+\r
+                $this->bstream = $bs;\r
+                return 0;\r
+            \r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function encodeModeStructure()\r
+        {\r
+            try {\r
+                $bs =  new QRbitstream();\r
+                \r
+                $bs->appendNum(4, 0x03);\r
+                $bs->appendNum(4, ord($this->data[1]) - 1);\r
+                $bs->appendNum(4, ord($this->data[0]) - 1);\r
+                $bs->appendNum(8, ord($this->data[2]));\r
+\r
+                $this->bstream = $bs;\r
+                return 0;\r
+            \r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function estimateBitStreamSizeOfEntry($version)\r
+        {\r
+            $bits = 0;\r
+\r
+            if($version == 0) \r
+                $version = 1;\r
+\r
+            switch($this->mode) {\r
+                case QR_MODE_NUM:        $bits = QRinput::estimateBitsModeNum($this->size);    break;\r
+                case QR_MODE_AN:        $bits = QRinput::estimateBitsModeAn($this->size);    break;\r
+                case QR_MODE_8:            $bits = QRinput::estimateBitsMode8($this->size);    break;\r
+                case QR_MODE_KANJI:        $bits = QRinput::estimateBitsModeKanji($this->size);break;\r
+                case QR_MODE_STRUCTURE:    return STRUCTURE_HEADER_BITS;            \r
+                default:\r
+                    return 0;\r
+            }\r
+\r
+            $l = QRspec::lengthIndicator($this->mode, $version);\r
+            $m = 1 << $l;\r
+            $num = (int)(($this->size + $m - 1) / $m);\r
+\r
+            $bits += $num * (4 + $l);\r
+\r
+            return $bits;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encodeBitStream($version)\r
+        {\r
+            try {\r
+            \r
+                unset($this->bstream);\r
+                $words = QRspec::maximumWords($this->mode, $version);\r
+                \r
+                if($this->size > $words) {\r
+                \r
+                    $st1 = new QRinputItem($this->mode, $words, $this->data);\r
+                    $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words));\r
+\r
+                    $st1->encodeBitStream($version);\r
+                    $st2->encodeBitStream($version);\r
+                    \r
+                    $this->bstream = new QRbitstream();\r
+                    $this->bstream->append($st1->bstream);\r
+                    $this->bstream->append($st2->bstream);\r
+                    \r
+                    unset($st1);\r
+                    unset($st2);\r
+                    \r
+                } else {\r
+                    \r
+                    $ret = 0;\r
+                    \r
+                    switch($this->mode) {\r
+                        case QR_MODE_NUM:        $ret = $this->encodeModeNum($version);    break;\r
+                        case QR_MODE_AN:        $ret = $this->encodeModeAn($version);    break;\r
+                        case QR_MODE_8:            $ret = $this->encodeMode8($version);    break;\r
+                        case QR_MODE_KANJI:        $ret = $this->encodeModeKanji($version);break;\r
+                        case QR_MODE_STRUCTURE:    $ret = $this->encodeModeStructure();    break;\r
+                        \r
+                        default:\r
+                            break;\r
+                    }\r
+                    \r
+                    if($ret < 0)\r
+                        return -1;\r
+                }\r
+\r
+                return $this->bstream->size();\r
+            \r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+    };\r
+    \r
+    //##########################################################################\r
+\r
+    class QRinput {\r
+\r
+        public $items;\r
+        \r
+        private $version;\r
+        private $level;\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function __construct($version = 0, $level = QR_ECLEVEL_L)\r
+        {\r
+            if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) {\r
+                throw new Exception('Invalid version no');\r
+                return NULL;\r
+            }\r
+            \r
+            $this->version = $version;\r
+            $this->level = $level;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function getVersion()\r
+        {\r
+            return $this->version;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function setVersion($version)\r
+        {\r
+            if($version < 0 || $version > QRSPEC_VERSION_MAX) {\r
+                throw new Exception('Invalid version no');\r
+                return -1;\r
+            }\r
+\r
+            $this->version = $version;\r
+\r
+            return 0;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function getErrorCorrectionLevel()\r
+        {\r
+            return $this->level;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function setErrorCorrectionLevel($level)\r
+        {\r
+            if($level > QR_ECLEVEL_H) {\r
+                throw new Exception('Invalid ECLEVEL');\r
+                return -1;\r
+            }\r
+\r
+            $this->level = $level;\r
+\r
+            return 0;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function appendEntry(QRinputItem $entry)\r
+        {\r
+            $this->items[] = $entry;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function append($mode, $size, $data)\r
+        {\r
+            try {\r
+                $entry = new QRinputItem($mode, $size, $data);\r
+                $this->items[] = $entry;\r
+                return 0;\r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        \r
+        public function insertStructuredAppendHeader($size, $index, $parity)\r
+        {\r
+            if( $size > MAX_STRUCTURED_SYMBOLS ) {\r
+                throw new Exception('insertStructuredAppendHeader wrong size');\r
+            }\r
+            \r
+            if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) {\r
+                throw new Exception('insertStructuredAppendHeader wrong index');\r
+            }\r
+\r
+            $buf = array($size, $index, $parity);\r
+            \r
+            try {\r
+                $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf);\r
+                array_unshift($this->items, $entry);\r
+                return 0;\r
+            } catch (Exception $e) {\r
+                return -1;\r
+            }\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function calcParity()\r
+        {\r
+            $parity = 0;\r
+            \r
+            foreach($this->items as $item) {\r
+                if($item->mode != QR_MODE_STRUCTURE) {\r
+                    for($i=$item->size-1; $i>=0; $i--) {\r
+                        $parity ^= $item->data[$i];\r
+                    }\r
+                }\r
+            }\r
+\r
+            return $parity;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function checkModeNum($size, $data)\r
+        {\r
+            for($i=0; $i<$size; $i++) {\r
+                if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){\r
+                    return false;\r
+                }\r
+            }\r
+\r
+            return true;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function estimateBitsModeNum($size)\r
+        {\r
+            $w = (int)$size / 3;\r
+            $bits = $w * 10;\r
+            \r
+            switch($size - $w * 3) {\r
+                case 1:\r
+                    $bits += 4;\r
+                    break;\r
+                case 2:\r
+                    $bits += 7;\r
+                    break;\r
+                default:\r
+                    break;\r
+            }\r
+\r
+            return $bits;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static $anTable = array(\r
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
+            36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43,\r
+             0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 44, -1, -1, -1, -1, -1,\r
+            -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\r
+            25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,\r
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1\r
+        );\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function lookAnTable($c)\r
+        {\r
+            return (($c > 127)?-1:self::$anTable[$c]);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function checkModeAn($size, $data)\r
+        {\r
+            for($i=0; $i<$size; $i++) {\r
+                if (self::lookAnTable(ord($data[$i])) == -1) {\r
+                    return false;\r
+                }\r
+            }\r
+\r
+            return true;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function estimateBitsModeAn($size)\r
+        {\r
+            $w = (int)($size / 2);\r
+            $bits = $w * 11;\r
+            \r
+            if($size & 1) {\r
+                $bits += 6;\r
+            }\r
+\r
+            return $bits;\r
+        }\r
+    \r
+        //----------------------------------------------------------------------\r
+        public static function estimateBitsMode8($size)\r
+        {\r
+            return $size * 8;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function estimateBitsModeKanji($size)\r
+        {\r
+            return (int)(($size / 2) * 13);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function checkModeKanji($size, $data)\r
+        {\r
+            if($size & 1)\r
+                return false;\r
+\r
+            for($i=0; $i<$size; $i+=2) {\r
+                $val = (ord($data[$i]) << 8) | ord($data[$i+1]);\r
+                if( $val < 0x8140 \r
+                || ($val > 0x9ffc && $val < 0xe040) \r
+                || $val > 0xebbf) {\r
+                    return false;\r
+                }\r
+            }\r
+\r
+            return true;\r
+        }\r
+\r
+        /***********************************************************************\r
+         * Validation\r
+         **********************************************************************/\r
+\r
+        public static function check($mode, $size, $data)\r
+        {\r
+            if($size <= 0) \r
+                return false;\r
+\r
+            switch($mode) {\r
+                case QR_MODE_NUM:       return self::checkModeNum($size, $data);   break;\r
+                case QR_MODE_AN:        return self::checkModeAn($size, $data);    break;\r
+                case QR_MODE_KANJI:     return self::checkModeKanji($size, $data); break;\r
+                case QR_MODE_8:         return true; break;\r
+                case QR_MODE_STRUCTURE: return true; break;\r
+                \r
+                default:\r
+                    break;\r
+            }\r
+\r
+            return false;\r
+        }\r
+        \r
+        \r
+        //----------------------------------------------------------------------\r
+        public function estimateBitStreamSize($version)\r
+        {\r
+            $bits = 0;\r
+\r
+            foreach($this->items as $item) {\r
+                $bits += $item->estimateBitStreamSizeOfEntry($version);\r
+            }\r
+\r
+            return $bits;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function estimateVersion()\r
+        {\r
+            $version = 0;\r
+            $prev = 0;\r
+            do {\r
+                $prev = $version;\r
+                $bits = $this->estimateBitStreamSize($prev);\r
+                $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level);\r
+                if ($version < 0) {\r
+                    return -1;\r
+                }\r
+            } while ($version > $prev);\r
+\r
+            return $version;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function lengthOfCode($mode, $version, $bits)\r
+        {\r
+            $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version);\r
+            switch($mode) {\r
+                case QR_MODE_NUM:\r
+                    $chunks = (int)($payload / 10);\r
+                    $remain = $payload - $chunks * 10;\r
+                    $size = $chunks * 3;\r
+                    if($remain >= 7) {\r
+                        $size += 2;\r
+                    } else if($remain >= 4) {\r
+                        $size += 1;\r
+                    }\r
+                    break;\r
+                case QR_MODE_AN:\r
+                    $chunks = (int)($payload / 11);\r
+                    $remain = $payload - $chunks * 11;\r
+                    $size = $chunks * 2;\r
+                    if($remain >= 6) \r
+                        $size++;\r
+                    break;\r
+                case QR_MODE_8:\r
+                    $size = (int)($payload / 8);\r
+                    break;\r
+                case QR_MODE_KANJI:\r
+                    $size = (int)(($payload / 13) * 2);\r
+                    break;\r
+                case QR_MODE_STRUCTURE:\r
+                    $size = (int)($payload / 8);\r
+                    break;\r
+                default:\r
+                    $size = 0;\r
+                    break;\r
+            }\r
+            \r
+            $maxsize = QRspec::maximumWords($mode, $version);\r
+            if($size < 0) $size = 0;\r
+            if($size > $maxsize) $size = $maxsize;\r
+\r
+            return $size;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function createBitStream()\r
+        {\r
+            $total = 0;\r
+\r
+            foreach($this->items as $item) {\r
+                $bits = $item->encodeBitStream($this->version);\r
+                \r
+                if($bits < 0) \r
+                    return -1;\r
+                    \r
+                $total += $bits;\r
+            }\r
+\r
+            return $total;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function convertData()\r
+        {\r
+            $ver = $this->estimateVersion();\r
+            if($ver > $this->getVersion()) {\r
+                $this->setVersion($ver);\r
+            }\r
+\r
+            for(;;) {\r
+                $bits = $this->createBitStream();\r
+                \r
+                if($bits < 0) \r
+                    return -1;\r
+                    \r
+                $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level);\r
+                if($ver < 0) {\r
+                    throw new Exception('WRONG VERSION');\r
+                    return -1;\r
+                } else if($ver > $this->getVersion()) {\r
+                    $this->setVersion($ver);\r
+                } else {\r
+                    break;\r
+                }\r
+            }\r
+\r
+            return 0;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function appendPaddingBit(&$bstream)\r
+        {\r
+            $bits = $bstream->size();\r
+            $maxwords = QRspec::getDataLength($this->version, $this->level);\r
+            $maxbits = $maxwords * 8;\r
+\r
+            if ($maxbits == $bits) {\r
+                return 0;\r
+            }\r
+\r
+            if ($maxbits - $bits < 5) {\r
+                return $bstream->appendNum($maxbits - $bits, 0);\r
+            }\r
+\r
+            $bits += 4;\r
+            $words = (int)(($bits + 7) / 8);\r
+\r
+            $padding = new QRbitstream();\r
+            $ret = $padding->appendNum($words * 8 - $bits + 4, 0);\r
+            \r
+            if($ret < 0) \r
+                return $ret;\r
+\r
+            $padlen = $maxwords - $words;\r
+            \r
+            if($padlen > 0) {\r
+                \r
+                $padbuf = array();\r
+                for($i=0; $i<$padlen; $i++) {\r
+                    $padbuf[$i] = ($i&1)?0x11:0xec;\r
+                }\r
+                \r
+                $ret = $padding->appendBytes($padlen, $padbuf);\r
+                \r
+                if($ret < 0)\r
+                    return $ret;\r
+                \r
+            }\r
+\r
+            $ret = $bstream->append($padding);\r
+            \r
+            return $ret;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function mergeBitStream()\r
+        {\r
+            if($this->convertData() < 0) {\r
+                return null;\r
+            }\r
+\r
+            $bstream = new QRbitstream();\r
+            \r
+            foreach($this->items as $item) {\r
+                $ret = $bstream->append($item->bstream);\r
+                if($ret < 0) {\r
+                    return null;\r
+                }\r
+            }\r
+\r
+            return $bstream;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function getBitStream()\r
+        {\r
+\r
+            $bstream = $this->mergeBitStream();\r
+            \r
+            if($bstream == null) {\r
+                return null;\r
+            }\r
+            \r
+            $ret = $this->appendPaddingBit($bstream);\r
+            if($ret < 0) {\r
+                return null;\r
+            }\r
+\r
+            return $bstream;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function getByteStream()\r
+        {\r
+            $bstream = $this->getBitStream();\r
+            if($bstream == null) {\r
+                return null;\r
+            }\r
+            \r
+            return $bstream->toByte();\r
+        }\r
+    }\r
+        \r
+        \r
+    
\ No newline at end of file
diff --git a/lib/phpqrcode/qrlib.php b/lib/phpqrcode/qrlib.php
new file mode 100644 (file)
index 0000000..d55c4af
--- /dev/null
@@ -0,0 +1,43 @@
+<?php\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Root library file, prepares environment and includes dependencies\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
+       \r
+       $QR_BASEDIR = dirname(__FILE__).DIRECTORY_SEPARATOR;\r
+       \r
+       // Required libs\r
+       \r
+       include $QR_BASEDIR."qrconst.php";\r
+       include $QR_BASEDIR."qrconfig.php";\r
+       include $QR_BASEDIR."qrtools.php";\r
+       include $QR_BASEDIR."qrspec.php";\r
+       include $QR_BASEDIR."qrimage.php";\r
+       include $QR_BASEDIR."qrinput.php";\r
+       include $QR_BASEDIR."qrbitstream.php";\r
+       include $QR_BASEDIR."qrsplit.php";\r
+       include $QR_BASEDIR."qrrscode.php";\r
+       include $QR_BASEDIR."qrmask.php";\r
+       include $QR_BASEDIR."qrencode.php";\r
+\r
diff --git a/lib/phpqrcode/qrmask.php b/lib/phpqrcode/qrmask.php
new file mode 100644 (file)
index 0000000..b14d7ae
--- /dev/null
@@ -0,0 +1,328 @@
+<?php\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Masking\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+       define('N1', 3);\r
+       define('N2', 3);\r
+       define('N3', 40);\r
+       define('N4', 10);\r
+\r
+       class QRmask {\r
+       \r
+               public $runLength = array();\r
+               \r
+               //----------------------------------------------------------------------\r
+               public function __construct() \r
+        {\r
+            $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function writeFormatInformation($width, &$frame, $mask, $level)\r
+        {\r
+            $blacks = 0;\r
+            $format =  QRspec::getFormatInfo($mask, $level);\r
+\r
+            for($i=0; $i<8; $i++) {\r
+                if($format & 1) {\r
+                    $blacks += 2;\r
+                    $v = 0x85;\r
+                } else {\r
+                    $v = 0x84;\r
+                }\r
+                \r
+                $frame[8][$width - 1 - $i] = chr($v);\r
+                if($i < 6) {\r
+                    $frame[$i][8] = chr($v);\r
+                } else {\r
+                    $frame[$i + 1][8] = chr($v);\r
+                }\r
+                $format = $format >> 1;\r
+            }\r
+            \r
+            for($i=0; $i<7; $i++) {\r
+                if($format & 1) {\r
+                    $blacks += 2;\r
+                    $v = 0x85;\r
+                } else {\r
+                    $v = 0x84;\r
+                }\r
+                \r
+                $frame[$width - 7 + $i][8] = chr($v);\r
+                if($i == 0) {\r
+                    $frame[8][7] = chr($v);\r
+                } else {\r
+                    $frame[8][6 - $i] = chr($v);\r
+                }\r
+                \r
+                $format = $format >> 1;\r
+            }\r
+\r
+            return $blacks;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function mask0($x, $y) { return ($x+$y)&1;                       }\r
+        public function mask1($x, $y) { return ($y&1);                          }\r
+        public function mask2($x, $y) { return ($x%3);                          }\r
+        public function mask3($x, $y) { return ($x+$y)%3;                       }\r
+        public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; }\r
+        public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3;           }\r
+        public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1;       }\r
+        public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1;     }\r
+        \r
+        //----------------------------------------------------------------------\r
+        private function generateMaskNo($maskNo, $width, $frame)\r
+        {\r
+            $bitMask = array_fill(0, $width, array_fill(0, $width, 0));\r
+            \r
+            for($y=0; $y<$width; $y++) {\r
+                for($x=0; $x<$width; $x++) {\r
+                    if(ord($frame[$y][$x]) & 0x80) {\r
+                        $bitMask[$y][$x] = 0;\r
+                    } else {\r
+                        $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y);\r
+                        $bitMask[$y][$x] = ($maskFunc == 0)?1:0;\r
+                    }\r
+                    \r
+                }\r
+            }\r
+            \r
+            return $bitMask;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function serial($bitFrame)\r
+        {\r
+            $codeArr = array();\r
+            \r
+            foreach ($bitFrame as $line)\r
+                $codeArr[] = join('', $line);\r
+                \r
+            return gzcompress(join("\n", $codeArr), 9);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function unserial($code)\r
+        {\r
+            $codeArr = array();\r
+            \r
+            $codeLines = explode("\n", gzuncompress($code));\r
+            foreach ($codeLines as $line)\r
+                $codeArr[] = str_split($line);\r
+            \r
+            return $codeArr;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) \r
+        {\r
+            $b = 0;\r
+            $bitMask = array();\r
+            \r
+            $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat';\r
+\r
+            if (QR_CACHEABLE) {\r
+                if (file_exists($fileName)) {\r
+                    $bitMask = self::unserial(file_get_contents($fileName));\r
+                } else {\r
+                    $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);\r
+                    if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo))\r
+                        mkdir(QR_CACHE_DIR.'mask_'.$maskNo);\r
+                    file_put_contents($fileName, self::serial($bitMask));\r
+                }\r
+            } else {\r
+                $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);\r
+            }\r
+\r
+            if ($maskGenOnly)\r
+                return;\r
+                \r
+            $d = $s;\r
+\r
+            for($y=0; $y<$width; $y++) {\r
+                for($x=0; $x<$width; $x++) {\r
+                    if($bitMask[$y][$x] == 1) {\r
+                        $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]);\r
+                    }\r
+                    $b += (int)(ord($d[$y][$x]) & 1);\r
+                }\r
+            }\r
+\r
+            return $b;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function makeMask($width, $frame, $maskNo, $level)\r
+        {\r
+            $masked = array_fill(0, $width, str_repeat("\0", $width));\r
+            $this->makeMaskNo($maskNo, $width, $frame, $masked);\r
+            $this->writeFormatInformation($width, $masked, $maskNo, $level);\r
+       \r
+            return $masked;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function calcN1N3($length)\r
+        {\r
+            $demerit = 0;\r
+\r
+            for($i=0; $i<$length; $i++) {\r
+                \r
+                if($this->runLength[$i] >= 5) {\r
+                    $demerit += (N1 + ($this->runLength[$i] - 5));\r
+                }\r
+                if($i & 1) {\r
+                    if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) {\r
+                        $fact = (int)($this->runLength[$i] / 3);\r
+                        if(($this->runLength[$i-2] == $fact) &&\r
+                           ($this->runLength[$i-1] == $fact) &&\r
+                           ($this->runLength[$i+1] == $fact) &&\r
+                           ($this->runLength[$i+2] == $fact)) {\r
+                            if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) {\r
+                                $demerit += N3;\r
+                            } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) {\r
+                                $demerit += N3;\r
+                            }\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+            return $demerit;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function evaluateSymbol($width, $frame)\r
+        {\r
+            $head = 0;\r
+            $demerit = 0;\r
+\r
+            for($y=0; $y<$width; $y++) {\r
+                $head = 0;\r
+                $this->runLength[0] = 1;\r
+                \r
+                $frameY = $frame[$y];\r
+                \r
+                if ($y>0)\r
+                    $frameYM = $frame[$y-1];\r
+                \r
+                for($x=0; $x<$width; $x++) {\r
+                    if(($x > 0) && ($y > 0)) {\r
+                        $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]);\r
+                        $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]);\r
+                        \r
+                        if(($b22 | ($w22 ^ 1))&1) {                                                                     \r
+                            $demerit += N2;\r
+                        }\r
+                    }\r
+                    if(($x == 0) && (ord($frameY[$x]) & 1)) {\r
+                        $this->runLength[0] = -1;\r
+                        $head = 1;\r
+                        $this->runLength[$head] = 1;\r
+                    } else if($x > 0) {\r
+                        if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) {\r
+                            $head++;\r
+                            $this->runLength[$head] = 1;\r
+                        } else {\r
+                            $this->runLength[$head]++;\r
+                        }\r
+                    }\r
+                }\r
+    \r
+                $demerit += $this->calcN1N3($head+1);\r
+            }\r
+\r
+            for($x=0; $x<$width; $x++) {\r
+                $head = 0;\r
+                $this->runLength[0] = 1;\r
+                \r
+                for($y=0; $y<$width; $y++) {\r
+                    if($y == 0 && (ord($frame[$y][$x]) & 1)) {\r
+                        $this->runLength[0] = -1;\r
+                        $head = 1;\r
+                        $this->runLength[$head] = 1;\r
+                    } else if($y > 0) {\r
+                        if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) {\r
+                            $head++;\r
+                            $this->runLength[$head] = 1;\r
+                        } else {\r
+                            $this->runLength[$head]++;\r
+                        }\r
+                    }\r
+                }\r
+            \r
+                $demerit += $this->calcN1N3($head+1);\r
+            }\r
+\r
+            return $demerit;\r
+        }\r
+        \r
+        \r
+        //----------------------------------------------------------------------\r
+        public function mask($width, $frame, $level)\r
+        {\r
+            $minDemerit = PHP_INT_MAX;\r
+            $bestMaskNum = 0;\r
+            $bestMask = array();\r
+            \r
+            $checked_masks = array(0,1,2,3,4,5,6,7);\r
+            \r
+            if (QR_FIND_FROM_RANDOM !== false) {\r
+            \r
+                $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9);\r
+                for ($i = 0; $i <  $howManuOut; $i++) {\r
+                    $remPos = rand (0, count($checked_masks)-1);\r
+                    unset($checked_masks[$remPos]);\r
+                    $checked_masks = array_values($checked_masks);\r
+                }\r
+            \r
+            }\r
+            \r
+            $bestMask = $frame;\r
+             \r
+            foreach($checked_masks as $i) {\r
+                $mask = array_fill(0, $width, str_repeat("\0", $width));\r
+\r
+                $demerit = 0;\r
+                $blacks = 0;\r
+                $blacks  = $this->makeMaskNo($i, $width, $frame, $mask);\r
+                $blacks += $this->writeFormatInformation($width, $mask, $i, $level);\r
+                $blacks  = (int)(100 * $blacks / ($width * $width));\r
+                $demerit = (int)((int)(abs($blacks - 50) / 5) * N4);\r
+                $demerit += $this->evaluateSymbol($width, $mask);\r
+                \r
+                if($demerit < $minDemerit) {\r
+                    $minDemerit = $demerit;\r
+                    $bestMask = $mask;\r
+                    $bestMaskNum = $i;\r
+                }\r
+            }\r
+            \r
+            return $bestMask;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+    }\r
diff --git a/lib/phpqrcode/qrrscode.php b/lib/phpqrcode/qrrscode.php
new file mode 100644 (file)
index 0000000..591129a
--- /dev/null
@@ -0,0 +1,210 @@
+<?php\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Reed-Solomon error correction support\r
+ * \r
+ * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q\r
+ * (libfec is released under the GNU Lesser General Public License.)\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+    class QRrsItem {\r
+    \r
+        public $mm;                  // Bits per symbol \r
+        public $nn;                  // Symbols per block (= (1<<mm)-1) \r
+        public $alpha_to = array();  // log lookup table \r
+        public $index_of = array();  // Antilog lookup table \r
+        public $genpoly = array();   // Generator polynomial \r
+        public $nroots;              // Number of generator roots = number of parity symbols \r
+        public $fcr;                 // First consecutive root, index form \r
+        public $prim;                // Primitive element, index form \r
+        public $iprim;               // prim-th root of 1, index form \r
+        public $pad;                 // Padding bytes in shortened block \r
+        public $gfpoly;\r
+    \r
+        //----------------------------------------------------------------------\r
+        public function modnn($x)\r
+        {\r
+            while ($x >= $this->nn) {\r
+                $x -= $this->nn;\r
+                $x = ($x >> $this->mm) + ($x & $this->nn);\r
+            }\r
+            \r
+            return $x;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad)\r
+        {\r
+            // Common code for intializing a Reed-Solomon control block (char or int symbols)\r
+            // Copyright 2004 Phil Karn, KA9Q\r
+            // May be used under the terms of the GNU Lesser General Public License (LGPL)\r
+\r
+            $rs = null;\r
+            \r
+            // Check parameter ranges\r
+            if($symsize < 0 || $symsize > 8)                     return $rs;\r
+            if($fcr < 0 || $fcr >= (1<<$symsize))                return $rs;\r
+            if($prim <= 0 || $prim >= (1<<$symsize))             return $rs;\r
+            if($nroots < 0 || $nroots >= (1<<$symsize))          return $rs; // Can't have more roots than symbol values!\r
+            if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding\r
+\r
+            $rs = new QRrsItem();\r
+            $rs->mm = $symsize;\r
+            $rs->nn = (1<<$symsize)-1;\r
+            $rs->pad = $pad;\r
+\r
+            $rs->alpha_to = array_fill(0, $rs->nn+1, 0);\r
+            $rs->index_of = array_fill(0, $rs->nn+1, 0);\r
+          \r
+            // PHP style macro replacement ;)\r
+            $NN =& $rs->nn;\r
+            $A0 =& $NN;\r
+            \r
+            // Generate Galois field lookup tables\r
+            $rs->index_of[0] = $A0; // log(zero) = -inf\r
+            $rs->alpha_to[$A0] = 0; // alpha**-inf = 0\r
+            $sr = 1;\r
+          \r
+            for($i=0; $i<$rs->nn; $i++) {\r
+                $rs->index_of[$sr] = $i;\r
+                $rs->alpha_to[$i] = $sr;\r
+                $sr <<= 1;\r
+                if($sr & (1<<$symsize)) {\r
+                    $sr ^= $gfpoly;\r
+                }\r
+                $sr &= $rs->nn;\r
+            }\r
+            \r
+            if($sr != 1){\r
+                // field generator polynomial is not primitive!\r
+                $rs = NULL;\r
+                return $rs;\r
+            }\r
+\r
+            /* Form RS code generator polynomial from its roots */\r
+            $rs->genpoly = array_fill(0, $nroots+1, 0);\r
+        \r
+            $rs->fcr = $fcr;\r
+            $rs->prim = $prim;\r
+            $rs->nroots = $nroots;\r
+            $rs->gfpoly = $gfpoly;\r
+\r
+            /* Find prim-th root of 1, used in decoding */\r
+            for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn)\r
+            ; // intentional empty-body loop!\r
+            \r
+            $rs->iprim = (int)($iprim / $prim);\r
+            $rs->genpoly[0] = 1;\r
+            \r
+            for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) {\r
+                $rs->genpoly[$i+1] = 1;\r
+\r
+                // Multiply rs->genpoly[] by  @**(root + x)\r
+                for ($j = $i; $j > 0; $j--) {\r
+                    if ($rs->genpoly[$j] != 0) {\r
+                        $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)];\r
+                    } else {\r
+                        $rs->genpoly[$j] = $rs->genpoly[$j-1];\r
+                    }\r
+                }\r
+                // rs->genpoly[0] can never be zero\r
+                $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)];\r
+            }\r
+            \r
+            // convert rs->genpoly[] to index form for quicker encoding\r
+            for ($i = 0; $i <= $nroots; $i++)\r
+                $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]];\r
+\r
+            return $rs;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function encode_rs_char($data, &$parity)\r
+        {\r
+            $MM       =& $this->mm;\r
+            $NN       =& $this->nn;\r
+            $ALPHA_TO =& $this->alpha_to;\r
+            $INDEX_OF =& $this->index_of;\r
+            $GENPOLY  =& $this->genpoly;\r
+            $NROOTS   =& $this->nroots;\r
+            $FCR      =& $this->fcr;\r
+            $PRIM     =& $this->prim;\r
+            $IPRIM    =& $this->iprim;\r
+            $PAD      =& $this->pad;\r
+            $A0       =& $NN;\r
+\r
+            $parity = array_fill(0, $NROOTS, 0);\r
+\r
+            for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) {\r
+                \r
+                $feedback = $INDEX_OF[$data[$i] ^ $parity[0]];\r
+                if($feedback != $A0) {      \r
+                    // feedback term is non-zero\r
+            \r
+                    // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must\r
+                    // always be for the polynomials constructed by init_rs()\r
+                    $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback);\r
+            \r
+                    for($j=1;$j<$NROOTS;$j++) {\r
+                        $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])];\r
+                    }\r
+                }\r
+                \r
+                // Shift \r
+                array_shift($parity);\r
+                if($feedback != $A0) {\r
+                    array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]);\r
+                } else {\r
+                    array_push($parity, 0);\r
+                }\r
+            }\r
+        }\r
+    }\r
+    \r
+    //##########################################################################\r
+    \r
+    class QRrs {\r
+    \r
+        public static $items = array();\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad)\r
+        {\r
+            foreach(self::$items as $rs) {\r
+                if($rs->pad != $pad)       continue;\r
+                if($rs->nroots != $nroots) continue;\r
+                if($rs->mm != $symsize)    continue;\r
+                if($rs->gfpoly != $gfpoly) continue;\r
+                if($rs->fcr != $fcr)       continue;\r
+                if($rs->prim != $prim)     continue;\r
+\r
+                return $rs;\r
+            }\r
+\r
+            $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad);\r
+            array_unshift(self::$items, $rs);\r
+\r
+            return $rs;\r
+        }\r
+    }
\ No newline at end of file
diff --git a/lib/phpqrcode/qrspec.php b/lib/phpqrcode/qrspec.php
new file mode 100644 (file)
index 0000000..92aea0c
--- /dev/null
@@ -0,0 +1,592 @@
+<?php\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * QR Code specifications\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * The following data / specifications are taken from\r
+ * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004)\r
+ *  or\r
+ * "Automatic identification and data capture techniques -- \r
+ *  QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006)\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+    define('QRSPEC_VERSION_MAX', 40);\r
+    define('QRSPEC_WIDTH_MAX',   177);\r
+\r
+    define('QRCAP_WIDTH',        0);\r
+    define('QRCAP_WORDS',        1);\r
+    define('QRCAP_REMINDER',     2);\r
+    define('QRCAP_EC',           3);\r
+\r
+    class QRspec {\r
+    \r
+        public static $capacity = array(\r
+            array(  0,    0, 0, array(   0,    0,    0,    0)),\r
+            array( 21,   26, 0, array(   7,   10,   13,   17)), // 1\r
+            array( 25,   44, 7, array(  10,   16,   22,   28)),\r
+            array( 29,   70, 7, array(  15,   26,   36,   44)),\r
+            array( 33,  100, 7, array(  20,   36,   52,   64)),\r
+            array( 37,  134, 7, array(  26,   48,   72,   88)), // 5\r
+            array( 41,  172, 7, array(  36,   64,   96,  112)),\r
+            array( 45,  196, 0, array(  40,   72,  108,  130)),\r
+            array( 49,  242, 0, array(  48,   88,  132,  156)),\r
+            array( 53,  292, 0, array(  60,  110,  160,  192)),\r
+            array( 57,  346, 0, array(  72,  130,  192,  224)), //10\r
+            array( 61,  404, 0, array(  80,  150,  224,  264)),\r
+            array( 65,  466, 0, array(  96,  176,  260,  308)),\r
+            array( 69,  532, 0, array( 104,  198,  288,  352)),\r
+            array( 73,  581, 3, array( 120,  216,  320,  384)),\r
+            array( 77,  655, 3, array( 132,  240,  360,  432)), //15\r
+            array( 81,  733, 3, array( 144,  280,  408,  480)),\r
+            array( 85,  815, 3, array( 168,  308,  448,  532)),\r
+            array( 89,  901, 3, array( 180,  338,  504,  588)),\r
+            array( 93,  991, 3, array( 196,  364,  546,  650)),\r
+            array( 97, 1085, 3, array( 224,  416,  600,  700)), //20\r
+            array(101, 1156, 4, array( 224,  442,  644,  750)),\r
+            array(105, 1258, 4, array( 252,  476,  690,  816)),\r
+            array(109, 1364, 4, array( 270,  504,  750,  900)),\r
+            array(113, 1474, 4, array( 300,  560,  810,  960)),\r
+            array(117, 1588, 4, array( 312,  588,  870, 1050)), //25\r
+            array(121, 1706, 4, array( 336,  644,  952, 1110)),\r
+            array(125, 1828, 4, array( 360,  700, 1020, 1200)),\r
+            array(129, 1921, 3, array( 390,  728, 1050, 1260)),\r
+            array(133, 2051, 3, array( 420,  784, 1140, 1350)),\r
+            array(137, 2185, 3, array( 450,  812, 1200, 1440)), //30\r
+            array(141, 2323, 3, array( 480,  868, 1290, 1530)),\r
+            array(145, 2465, 3, array( 510,  924, 1350, 1620)),\r
+            array(149, 2611, 3, array( 540,  980, 1440, 1710)),\r
+            array(153, 2761, 3, array( 570, 1036, 1530, 1800)),\r
+            array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35\r
+            array(161, 3034, 0, array( 600, 1120, 1680, 1980)),\r
+            array(165, 3196, 0, array( 630, 1204, 1770, 2100)),\r
+            array(169, 3362, 0, array( 660, 1260, 1860, 2220)),\r
+            array(173, 3532, 0, array( 720, 1316, 1950, 2310)),\r
+            array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40\r
+        );\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function getDataLength($version, $level)\r
+        {\r
+            return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level];\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function getECCLength($version, $level)\r
+        {\r
+            return self::$capacity[$version][QRCAP_EC][$level];\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function getWidth($version)\r
+        {\r
+            return self::$capacity[$version][QRCAP_WIDTH];\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function getRemainder($version)\r
+        {\r
+            return self::$capacity[$version][QRCAP_REMINDER];\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function getMinimumVersion($size, $level)\r
+        {\r
+\r
+            for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) {\r
+                $words  = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level];\r
+                if($words >= $size) \r
+                    return $i;\r
+            }\r
+\r
+            return -1;\r
+        }\r
+    \r
+        //######################################################################\r
+        \r
+        public static $lengthTableBits = array(\r
+            array(10, 12, 14),\r
+            array( 9, 11, 13),\r
+            array( 8, 16, 16),\r
+            array( 8, 10, 12)\r
+        );\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function lengthIndicator($mode, $version)\r
+        {\r
+            if ($mode == QR_MODE_STRUCTURE)\r
+                return 0;\r
+                \r
+            if ($version <= 9) {\r
+                $l = 0;\r
+            } else if ($version <= 26) {\r
+                $l = 1;\r
+            } else {\r
+                $l = 2;\r
+            }\r
+\r
+            return self::$lengthTableBits[$mode][$l];\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function maximumWords($mode, $version)\r
+        {\r
+            if($mode == QR_MODE_STRUCTURE) \r
+                return 3;\r
+                \r
+            if($version <= 9) {\r
+                $l = 0;\r
+            } else if($version <= 26) {\r
+                $l = 1;\r
+            } else {\r
+                $l = 2;\r
+            }\r
+\r
+            $bits = self::$lengthTableBits[$mode][$l];\r
+            $words = (1 << $bits) - 1;\r
+            \r
+            if($mode == QR_MODE_KANJI) {\r
+                $words *= 2; // the number of bytes is required\r
+            }\r
+\r
+            return $words;\r
+        }\r
+\r
+        // Error correction code -----------------------------------------------\r
+        // Table of the error correction code (Reed-Solomon block)\r
+        // See Table 12-16 (pp.30-36), JIS X0510:2004.\r
+\r
+        public static $eccTable = array(\r
+            array(array( 0,  0), array( 0,  0), array( 0,  0), array( 0,  0)),\r
+            array(array( 1,  0), array( 1,  0), array( 1,  0), array( 1,  0)), // 1\r
+            array(array( 1,  0), array( 1,  0), array( 1,  0), array( 1,  0)),\r
+            array(array( 1,  0), array( 1,  0), array( 2,  0), array( 2,  0)),\r
+            array(array( 1,  0), array( 2,  0), array( 2,  0), array( 4,  0)),\r
+            array(array( 1,  0), array( 2,  0), array( 2,  2), array( 2,  2)), // 5\r
+            array(array( 2,  0), array( 4,  0), array( 4,  0), array( 4,  0)),\r
+            array(array( 2,  0), array( 4,  0), array( 2,  4), array( 4,  1)),\r
+            array(array( 2,  0), array( 2,  2), array( 4,  2), array( 4,  2)),\r
+            array(array( 2,  0), array( 3,  2), array( 4,  4), array( 4,  4)),\r
+            array(array( 2,  2), array( 4,  1), array( 6,  2), array( 6,  2)), //10\r
+            array(array( 4,  0), array( 1,  4), array( 4,  4), array( 3,  8)),\r
+            array(array( 2,  2), array( 6,  2), array( 4,  6), array( 7,  4)),\r
+            array(array( 4,  0), array( 8,  1), array( 8,  4), array(12,  4)),\r
+            array(array( 3,  1), array( 4,  5), array(11,  5), array(11,  5)),\r
+            array(array( 5,  1), array( 5,  5), array( 5,  7), array(11,  7)), //15\r
+            array(array( 5,  1), array( 7,  3), array(15,  2), array( 3, 13)),\r
+            array(array( 1,  5), array(10,  1), array( 1, 15), array( 2, 17)),\r
+            array(array( 5,  1), array( 9,  4), array(17,  1), array( 2, 19)),\r
+            array(array( 3,  4), array( 3, 11), array(17,  4), array( 9, 16)),\r
+            array(array( 3,  5), array( 3, 13), array(15,  5), array(15, 10)), //20\r
+            array(array( 4,  4), array(17,  0), array(17,  6), array(19,  6)),\r
+            array(array( 2,  7), array(17,  0), array( 7, 16), array(34,  0)),\r
+            array(array( 4,  5), array( 4, 14), array(11, 14), array(16, 14)),\r
+            array(array( 6,  4), array( 6, 14), array(11, 16), array(30,  2)),\r
+            array(array( 8,  4), array( 8, 13), array( 7, 22), array(22, 13)), //25\r
+            array(array(10,  2), array(19,  4), array(28,  6), array(33,  4)),\r
+            array(array( 8,  4), array(22,  3), array( 8, 26), array(12, 28)),\r
+            array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)),\r
+            array(array( 7,  7), array(21,  7), array( 1, 37), array(19, 26)),\r
+            array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30\r
+            array(array(13,  3), array( 2, 29), array(42,  1), array(23, 28)),\r
+            array(array(17,  0), array(10, 23), array(10, 35), array(19, 35)),\r
+            array(array(17,  1), array(14, 21), array(29, 19), array(11, 46)),\r
+            array(array(13,  6), array(14, 23), array(44,  7), array(59,  1)),\r
+            array(array(12,  7), array(12, 26), array(39, 14), array(22, 41)), //35\r
+            array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)),\r
+            array(array(17,  4), array(29, 14), array(49, 10), array(24, 46)),\r
+            array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)),\r
+            array(array(20,  4), array(40,  7), array(43, 22), array(10, 67)),\r
+            array(array(19,  6), array(18, 31), array(34, 34), array(20, 61)),//40\r
+        );                                                                       \r
+\r
+        //----------------------------------------------------------------------\r
+        // CACHEABLE!!!\r
+        \r
+        public static function getEccSpec($version, $level, array &$spec)\r
+        {\r
+            if (count($spec) < 5) {\r
+                $spec = array(0,0,0,0,0);\r
+            }\r
+\r
+            $b1   = self::$eccTable[$version][$level][0];\r
+            $b2   = self::$eccTable[$version][$level][1];\r
+            $data = self::getDataLength($version, $level);\r
+            $ecc  = self::getECCLength($version, $level);\r
+\r
+            if($b2 == 0) {\r
+                $spec[0] = $b1;\r
+                $spec[1] = (int)($data / $b1);\r
+                $spec[2] = (int)($ecc / $b1);\r
+                $spec[3] = 0; \r
+                $spec[4] = 0;\r
+            } else {\r
+                $spec[0] = $b1;\r
+                $spec[1] = (int)($data / ($b1 + $b2));\r
+                $spec[2] = (int)($ecc  / ($b1 + $b2));\r
+                $spec[3] = $b2;\r
+                $spec[4] = $spec[1] + 1;\r
+            }\r
+        }\r
+\r
+        // Alignment pattern ---------------------------------------------------\r
+\r
+        // Positions of alignment patterns.\r
+        // This array includes only the second and the third position of the \r
+        // alignment patterns. Rest of them can be calculated from the distance \r
+        // between them.\r
+         \r
+        // See Table 1 in Appendix E (pp.71) of JIS X0510:2004.\r
+         \r
+        public static $alignmentPattern = array(      \r
+            array( 0,  0),\r
+            array( 0,  0), array(18,  0), array(22,  0), array(26,  0), array(30,  0), // 1- 5\r
+            array(34,  0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10\r
+            array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15\r
+            array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20\r
+            array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25\r
+            array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30\r
+            array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35\r
+            array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40\r
+        );                                                                                  \r
+\r
+        \r
+        /** --------------------------------------------------------------------\r
+         * Put an alignment marker.\r
+         * @param frame\r
+         * @param width\r
+         * @param ox,oy center coordinate of the pattern\r
+         */\r
+        public static function putAlignmentMarker(array &$frame, $ox, $oy)\r
+        {\r
+            $finder = array(\r
+                "\xa1\xa1\xa1\xa1\xa1",\r
+                "\xa1\xa0\xa0\xa0\xa1",\r
+                "\xa1\xa0\xa1\xa0\xa1",\r
+                "\xa1\xa0\xa0\xa0\xa1",\r
+                "\xa1\xa1\xa1\xa1\xa1"\r
+            );                        \r
+            \r
+            $yStart = $oy-2;         \r
+            $xStart = $ox-2;\r
+            \r
+            for($y=0; $y<5; $y++) {\r
+                QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]);\r
+            }\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function putAlignmentPattern($version, &$frame, $width)\r
+        {\r
+            if($version < 2)\r
+                return;\r
+\r
+            $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0];\r
+            if($d < 0) {\r
+                $w = 2;\r
+            } else {\r
+                $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2);\r
+            }\r
+\r
+            if($w * $w - 3 == 1) {\r
+                $x = self::$alignmentPattern[$version][0];\r
+                $y = self::$alignmentPattern[$version][0];\r
+                self::putAlignmentMarker($frame, $x, $y);\r
+                return;\r
+            }\r
+\r
+            $cx = self::$alignmentPattern[$version][0];\r
+            for($x=1; $x<$w - 1; $x++) {\r
+                self::putAlignmentMarker($frame, 6, $cx);\r
+                self::putAlignmentMarker($frame, $cx,  6);\r
+                $cx += $d;\r
+            }\r
+\r
+            $cy = self::$alignmentPattern[$version][0];\r
+            for($y=0; $y<$w-1; $y++) {\r
+                $cx = self::$alignmentPattern[$version][0];\r
+                for($x=0; $x<$w-1; $x++) {\r
+                    self::putAlignmentMarker($frame, $cx, $cy);\r
+                    $cx += $d;\r
+                }\r
+                $cy += $d;\r
+            }\r
+        }\r
+\r
+        // Version information pattern -----------------------------------------\r
+\r
+               // Version information pattern (BCH coded).\r
+        // See Table 1 in Appendix D (pp.68) of JIS X0510:2004.\r
+        \r
+               // size: [QRSPEC_VERSION_MAX - 6]\r
+               \r
+        public static $versionPattern = array(\r
+            0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d,\r
+            0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9,\r
+            0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75,\r
+            0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64,\r
+            0x27541, 0x28c69\r
+        );\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function getVersionPattern($version)\r
+        {\r
+            if($version < 7 || $version > QRSPEC_VERSION_MAX)\r
+                return 0;\r
+\r
+            return self::$versionPattern[$version -7];\r
+        }\r
+\r
+        // Format information --------------------------------------------------\r
+        // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib)\r
+        \r
+        public static $formatInfo = array(\r
+            array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976),\r
+            array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0),\r
+            array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed),\r
+            array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b)\r
+        );\r
+\r
+        public static function getFormatInfo($mask, $level)\r
+        {\r
+            if($mask < 0 || $mask > 7)\r
+                return 0;\r
+                \r
+            if($level < 0 || $level > 3)\r
+                return 0;                \r
+\r
+            return self::$formatInfo[$level][$mask];\r
+        }\r
+\r
+        // Frame ---------------------------------------------------------------\r
+        // Cache of initial frames.\r
+         \r
+        public static $frames = array();\r
+\r
+        /** --------------------------------------------------------------------\r
+         * Put a finder pattern.\r
+         * @param frame\r
+         * @param width\r
+         * @param ox,oy upper-left coordinate of the pattern\r
+         */\r
+        public static function putFinderPattern(&$frame, $ox, $oy)\r
+        {\r
+            $finder = array(\r
+                "\xc1\xc1\xc1\xc1\xc1\xc1\xc1",\r
+                "\xc1\xc0\xc0\xc0\xc0\xc0\xc1",\r
+                "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",\r
+                "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",\r
+                "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",\r
+                "\xc1\xc0\xc0\xc0\xc0\xc0\xc1",\r
+                "\xc1\xc1\xc1\xc1\xc1\xc1\xc1"\r
+            );                            \r
+            \r
+            for($y=0; $y<7; $y++) {\r
+                QRstr::set($frame, $ox, $oy+$y, $finder[$y]);\r
+            }\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function createFrame($version)\r
+        {\r
+            $width = self::$capacity[$version][QRCAP_WIDTH];\r
+            $frameLine = str_repeat ("\0", $width);\r
+            $frame = array_fill(0, $width, $frameLine);\r
+\r
+            // Finder pattern\r
+            self::putFinderPattern($frame, 0, 0);\r
+            self::putFinderPattern($frame, $width - 7, 0);\r
+            self::putFinderPattern($frame, 0, $width - 7);\r
+            \r
+            // Separator\r
+            $yOffset = $width - 7;\r
+            \r
+            for($y=0; $y<7; $y++) {\r
+                $frame[$y][7] = "\xc0";\r
+                $frame[$y][$width - 8] = "\xc0";\r
+                $frame[$yOffset][7] = "\xc0";\r
+                $yOffset++;\r
+            }\r
+            \r
+            $setPattern = str_repeat("\xc0", 8);\r
+            \r
+            QRstr::set($frame, 0, 7, $setPattern);\r
+            QRstr::set($frame, $width-8, 7, $setPattern);\r
+            QRstr::set($frame, 0, $width - 8, $setPattern);\r
+        \r
+            // Format info\r
+            $setPattern = str_repeat("\x84", 9);\r
+            QRstr::set($frame, 0, 8, $setPattern);\r
+            QRstr::set($frame, $width - 8, 8, $setPattern, 8);\r
+            \r
+            $yOffset = $width - 8;\r
+\r
+            for($y=0; $y<8; $y++,$yOffset++) {\r
+                $frame[$y][8] = "\x84";\r
+                $frame[$yOffset][8] = "\x84";\r
+            }\r
+\r
+            // Timing pattern  \r
+            \r
+            for($i=1; $i<$width-15; $i++) {\r
+                $frame[6][7+$i] = chr(0x90 | ($i & 1));\r
+                $frame[7+$i][6] = chr(0x90 | ($i & 1));\r
+            }\r
+            \r
+            // Alignment pattern  \r
+            self::putAlignmentPattern($version, $frame, $width);\r
+            \r
+            // Version information \r
+            if($version >= 7) {\r
+                $vinf = self::getVersionPattern($version);\r
+\r
+                $v = $vinf;\r
+                \r
+                for($x=0; $x<6; $x++) {\r
+                    for($y=0; $y<3; $y++) {\r
+                        $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1));\r
+                        $v = $v >> 1;\r
+                    }\r
+                }\r
+\r
+                $v = $vinf;\r
+                for($y=0; $y<6; $y++) {\r
+                    for($x=0; $x<3; $x++) {\r
+                        $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1));\r
+                        $v = $v >> 1;\r
+                    }\r
+                }\r
+            }\r
+    \r
+            // and a little bit...  \r
+            $frame[$width - 8][8] = "\x81";\r
+            \r
+            return $frame;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function debug($frame, $binary_mode = false)\r
+        {\r
+            if ($binary_mode) {\r
+            \r
+                    foreach ($frame as &$frameLine) {\r
+                        $frameLine = join('<span class="m">&nbsp;&nbsp;</span>', explode('0', $frameLine));\r
+                        $frameLine = join('&#9608;&#9608;', explode('1', $frameLine));\r
+                    }\r
+                    \r
+                    ?>\r
+                <style>\r
+                    .m { background-color: white; }\r
+                </style>\r
+                <?php\r
+                    echo '<pre><tt><br/ ><br/ ><br/ >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';\r
+                    echo join("<br/ >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;", $frame);\r
+                    echo '</tt></pre><br/ ><br/ ><br/ ><br/ ><br/ ><br/ >';\r
+            \r
+            } else {\r
+            \r
+                foreach ($frame as &$frameLine) {\r
+                    $frameLine = join('<span class="m">&nbsp;</span>',  explode("\xc0", $frameLine));\r
+                    $frameLine = join('<span class="m">&#9618;</span>', explode("\xc1", $frameLine));\r
+                    $frameLine = join('<span class="p">&nbsp;</span>',  explode("\xa0", $frameLine));\r
+                    $frameLine = join('<span class="p">&#9618;</span>', explode("\xa1", $frameLine));\r
+                    $frameLine = join('<span class="s">&#9671;</span>', explode("\x84", $frameLine)); //format 0\r
+                    $frameLine = join('<span class="s">&#9670;</span>', explode("\x85", $frameLine)); //format 1\r
+                    $frameLine = join('<span class="x">&#9762;</span>', explode("\x81", $frameLine)); //special bit\r
+                    $frameLine = join('<span class="c">&nbsp;</span>',  explode("\x90", $frameLine)); //clock 0\r
+                    $frameLine = join('<span class="c">&#9719;</span>', explode("\x91", $frameLine)); //clock 1\r
+                    $frameLine = join('<span class="f">&nbsp;</span>',  explode("\x88", $frameLine)); //version\r
+                    $frameLine = join('<span class="f">&#9618;</span>', explode("\x89", $frameLine)); //version\r
+                    $frameLine = join('&#9830;', explode("\x01", $frameLine));\r
+                    $frameLine = join('&#8901;', explode("\0", $frameLine));\r
+                }\r
+                \r
+                ?>\r
+                <style>\r
+                    .p { background-color: yellow; }\r
+                    .m { background-color: #00FF00; }\r
+                    .s { background-color: #FF0000; }\r
+                    .c { background-color: aqua; }\r
+                    .x { background-color: pink; }\r
+                    .f { background-color: gold; }\r
+                </style>\r
+                <?php\r
+                echo "<pre><tt>";\r
+                echo join("<br/ >", $frame);\r
+                echo "</tt></pre>";\r
+            \r
+            }\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function serial($frame)\r
+        {\r
+            return gzcompress(join("\n", $frame), 9);\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function unserial($code)\r
+        {\r
+            return explode("\n", gzuncompress($code));\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function newFrame($version)\r
+        {\r
+            if($version < 1 || $version > QRSPEC_VERSION_MAX) \r
+                return null;\r
+\r
+            if(!isset(self::$frames[$version])) {\r
+                \r
+                $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat';\r
+                \r
+                if (QR_CACHEABLE) {\r
+                    if (file_exists($fileName)) {\r
+                        self::$frames[$version] = self::unserial(file_get_contents($fileName));\r
+                    } else {\r
+                        self::$frames[$version] = self::createFrame($version);\r
+                        file_put_contents($fileName, self::serial(self::$frames[$version]));\r
+                    }\r
+                } else {\r
+                    self::$frames[$version] = self::createFrame($version);\r
+                }\r
+            }\r
+            \r
+            if(is_null(self::$frames[$version]))\r
+                return null;\r
+\r
+            return self::$frames[$version];\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function rsBlockNum($spec)     { return $spec[0] + $spec[3]; }\r
+        public static function rsBlockNum1($spec)    { return $spec[0]; }\r
+        public static function rsDataCodes1($spec)   { return $spec[1]; }\r
+        public static function rsEccCodes1($spec)    { return $spec[2]; }\r
+        public static function rsBlockNum2($spec)    { return $spec[3]; }\r
+        public static function rsDataCodes2($spec)   { return $spec[4]; }\r
+        public static function rsEccCodes2($spec)    { return $spec[2]; }\r
+        public static function rsDataLength($spec)   { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]);    }\r
+        public static function rsEccLength($spec)    { return ($spec[0] + $spec[3]) * $spec[2]; }\r
+        \r
+    }
\ No newline at end of file
diff --git a/lib/phpqrcode/qrsplit.php b/lib/phpqrcode/qrsplit.php
new file mode 100644 (file)
index 0000000..d75b827
--- /dev/null
@@ -0,0 +1,311 @@
+<?php\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Input splitting classes\r
+ *\r
+ * Based on libqrencode C library distributed under LGPL 2.1\r
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * The following data / specifications are taken from\r
+ * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004)\r
+ *  or\r
+ * "Automatic identification and data capture techniques -- \r
+ *  QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006)\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
+    class QRsplit {\r
+\r
+        public $dataStr = '';\r
+        public $input;\r
+        public $modeHint;\r
+\r
+        //----------------------------------------------------------------------\r
+        public function __construct($dataStr, $input, $modeHint) \r
+        {\r
+            $this->dataStr  = $dataStr;\r
+            $this->input    = $input;\r
+            $this->modeHint = $modeHint;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function isdigitat($str, $pos)\r
+        {    \r
+            if ($pos >= strlen($str))\r
+                return false;\r
+            \r
+            return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9')));\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function isalnumat($str, $pos)\r
+        {\r
+            if ($pos >= strlen($str))\r
+                return false;\r
+                \r
+            return (QRinput::lookAnTable(ord($str[$pos])) >= 0);\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function identifyMode($pos)\r
+        {\r
+            if ($pos >= strlen($this->dataStr)) \r
+                return QR_MODE_NUL;\r
+                \r
+            $c = $this->dataStr[$pos];\r
+            \r
+            if(self::isdigitat($this->dataStr, $pos)) {\r
+                return QR_MODE_NUM;\r
+            } else if(self::isalnumat($this->dataStr, $pos)) {\r
+                return QR_MODE_AN;\r
+            } else if($this->modeHint == QR_MODE_KANJI) {\r
+            \r
+                if ($pos+1 < strlen($this->dataStr)) \r
+                {\r
+                    $d = $this->dataStr[$pos+1];\r
+                    $word = (ord($c) << 8) | ord($d);\r
+                    if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) {\r
+                        return QR_MODE_KANJI;\r
+                    }\r
+                }\r
+            }\r
+\r
+            return QR_MODE_8;\r
+        } \r
+        \r
+        //----------------------------------------------------------------------\r
+        public function eatNum()\r
+        {\r
+            $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion());\r
+\r
+            $p = 0;\r
+            while(self::isdigitat($this->dataStr, $p)) {\r
+                $p++;\r
+            }\r
+            \r
+            $run = $p;\r
+            $mode = $this->identifyMode($p);\r
+            \r
+            if($mode == QR_MODE_8) {\r
+                $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln\r
+                     + QRinput::estimateBitsMode8(1)         // + 4 + l8\r
+                     - QRinput::estimateBitsMode8($run + 1); // - 4 - l8\r
+                if($dif > 0) {\r
+                    return $this->eat8();\r
+                }\r
+            }\r
+            if($mode == QR_MODE_AN) {\r
+                $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln\r
+                     + QRinput::estimateBitsModeAn(1)        // + 4 + la\r
+                     - QRinput::estimateBitsModeAn($run + 1);// - 4 - la\r
+                if($dif > 0) {\r
+                    return $this->eatAn();\r
+                }\r
+            }\r
+            \r
+            $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr));\r
+            if($ret < 0)\r
+                return -1;\r
+\r
+            return $run;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function eatAn()\r
+        {\r
+            $la = QRspec::lengthIndicator(QR_MODE_AN,  $this->input->getVersion());\r
+            $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion());\r
+\r
+            $p = 0;\r
+            \r
+            while(self::isalnumat($this->dataStr, $p)) {\r
+                if(self::isdigitat($this->dataStr, $p)) {\r
+                    $q = $p;\r
+                    while(self::isdigitat($this->dataStr, $q)) {\r
+                        $q++;\r
+                    }\r
+                    \r
+                    $dif = QRinput::estimateBitsModeAn($p) // + 4 + la\r
+                         + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln\r
+                         - QRinput::estimateBitsModeAn($q); // - 4 - la\r
+                         \r
+                    if($dif < 0) {\r
+                        break;\r
+                    } else {\r
+                        $p = $q;\r
+                    }\r
+                } else {\r
+                    $p++;\r
+                }\r
+            }\r
+\r
+            $run = $p;\r
+\r
+            if(!self::isalnumat($this->dataStr, $p)) {\r
+                $dif = QRinput::estimateBitsModeAn($run) + 4 + $la\r
+                     + QRinput::estimateBitsMode8(1) // + 4 + l8\r
+                      - QRinput::estimateBitsMode8($run + 1); // - 4 - l8\r
+                if($dif > 0) {\r
+                    return $this->eat8();\r
+                }\r
+            }\r
+\r
+            $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr));\r
+            if($ret < 0)\r
+                return -1;\r
+\r
+            return $run;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public function eatKanji()\r
+        {\r
+            $p = 0;\r
+            \r
+            while($this->identifyMode($p) == QR_MODE_KANJI) {\r
+                $p += 2;\r
+            }\r
+            \r
+            $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr));\r
+            if($ret < 0)\r
+                return -1;\r
+\r
+            return $run;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function eat8()\r
+        {\r
+            $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion());\r
+            $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion());\r
+\r
+            $p = 1;\r
+            $dataStrLen = strlen($this->dataStr);\r
+            \r
+            while($p < $dataStrLen) {\r
+                \r
+                $mode = $this->identifyMode($p);\r
+                if($mode == QR_MODE_KANJI) {\r
+                    break;\r
+                }\r
+                if($mode == QR_MODE_NUM) {\r
+                    $q = $p;\r
+                    while(self::isdigitat($this->dataStr, $q)) {\r
+                        $q++;\r
+                    }\r
+                    $dif = QRinput::estimateBitsMode8($p) // + 4 + l8\r
+                         + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln\r
+                         - QRinput::estimateBitsMode8($q); // - 4 - l8\r
+                    if($dif < 0) {\r
+                        break;\r
+                    } else {\r
+                        $p = $q;\r
+                    }\r
+                } else if($mode == QR_MODE_AN) {\r
+                    $q = $p;\r
+                    while(self::isalnumat($this->dataStr, $q)) {\r
+                        $q++;\r
+                    }\r
+                    $dif = QRinput::estimateBitsMode8($p)  // + 4 + l8\r
+                         + QRinput::estimateBitsModeAn($q - $p) + 4 + $la\r
+                         - QRinput::estimateBitsMode8($q); // - 4 - l8\r
+                    if($dif < 0) {\r
+                        break;\r
+                    } else {\r
+                        $p = $q;\r
+                    }\r
+                } else {\r
+                    $p++;\r
+                }\r
+            }\r
+\r
+            $run = $p;\r
+            $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr));\r
+            \r
+            if($ret < 0)\r
+                return -1;\r
+\r
+            return $run;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function splitString()\r
+        {\r
+            while (strlen($this->dataStr) > 0)\r
+            {\r
+                if($this->dataStr == '')\r
+                    return 0;\r
+\r
+                $mode = $this->identifyMode(0);\r
+                \r
+                switch ($mode) {\r
+                    case QR_MODE_NUM: $length = $this->eatNum(); break;\r
+                    case QR_MODE_AN:  $length = $this->eatAn(); break;\r
+                    case QR_MODE_KANJI:\r
+                        if ($hint == QR_MODE_KANJI)\r
+                                $length = $this->eatKanji();\r
+                        else    $length = $this->eat8();\r
+                        break;\r
+                    default: $length = $this->eat8(); break;\r
+                \r
+                }\r
+\r
+                if($length == 0) return 0;\r
+                if($length < 0)  return -1;\r
+                \r
+                $this->dataStr = substr($this->dataStr, $length);\r
+            }\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public function toUpper()\r
+        {\r
+            $stringLen = strlen($this->dataStr);\r
+            $p = 0;\r
+            \r
+            while ($p<$stringLen) {\r
+                $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint);\r
+                if($mode == QR_MODE_KANJI) {\r
+                    $p += 2;\r
+                } else {\r
+                    if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) {\r
+                        $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32);\r
+                    }\r
+                    $p++;\r
+                }\r
+            }\r
+\r
+            return $this->dataStr;\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true)\r
+        {\r
+            if(is_null($string) || $string == '\0' || $string == '') {\r
+                throw new Exception('empty string!!!');\r
+            }\r
+\r
+            $split = new QRsplit($string, $input, $modeHint);\r
+            \r
+            if(!$casesensitive)\r
+                $split->toUpper();\r
+                \r
+            return $split->splitString();\r
+        }\r
+    }
\ No newline at end of file
diff --git a/lib/phpqrcode/qrtools.php b/lib/phpqrcode/qrtools.php
new file mode 100644 (file)
index 0000000..3012db4
--- /dev/null
@@ -0,0 +1,172 @@
+<?php\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Toolset, handy and debug utilites.\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
+\r
+    class QRtools {\r
+    \r
+        //----------------------------------------------------------------------\r
+        public static function binarize($frame)\r
+        {\r
+            $len = count($frame);\r
+            foreach ($frame as &$frameLine) {\r
+                \r
+                for($i=0; $i<$len; $i++) {\r
+                    $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0';\r
+                }\r
+            }\r
+            \r
+            return $frame;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037')\r
+        {\r
+            $barcode_array = array();\r
+            \r
+            if (!is_array($mode))\r
+                $mode = explode(',', $mode);\r
+                \r
+            $eccLevel = 'L';\r
+                \r
+            if (count($mode) > 1) {\r
+                $eccLevel = $mode[1];\r
+            }\r
+                \r
+            $qrTab = QRcode::text($code, false, $eccLevel);\r
+            $size = count($qrTab);\r
+                \r
+            $barcode_array['num_rows'] = $size;\r
+            $barcode_array['num_cols'] = $size;\r
+            $barcode_array['bcode'] = array();\r
+                \r
+            foreach ($qrTab as $line) {\r
+                $arrAdd = array();\r
+                foreach(str_split($line) as $char)\r
+                    $arrAdd[] = ($char=='1')?1:0;\r
+                $barcode_array['bcode'][] = $arrAdd;\r
+            }\r
+                    \r
+            return $barcode_array;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function clearCache()\r
+        {\r
+            self::$frames = array();\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function buildCache()\r
+        {\r
+                       QRtools::markTime('before_build_cache');\r
+                       \r
+                       $mask = new QRmask();\r
+            for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) {\r
+                $frame = QRspec::newFrame($a);\r
+                if (QR_IMAGE) {\r
+                    $fileName = QR_CACHE_DIR.'frame_'.$a.'.png';\r
+                    QRimage::png(self::binarize($frame), $fileName, 1, 0);\r
+                }\r
+                               \r
+                               $width = count($frame);\r
+                               $bitMask = array_fill(0, $width, array_fill(0, $width, 0));\r
+                               for ($maskNo=0; $maskNo<8; $maskNo++)\r
+                                       $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true);\r
+            }\r
+                       \r
+                       QRtools::markTime('after_build_cache');\r
+        }\r
+\r
+        //----------------------------------------------------------------------\r
+        public static function log($outfile, $err)\r
+        {\r
+            if (QR_LOG_DIR !== false) {\r
+                if ($err != '') {\r
+                    if ($outfile !== false) {\r
+                        file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND);\r
+                    } else {\r
+                        file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND);\r
+                    }\r
+                }    \r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function dumpMask($frame) \r
+        {\r
+            $width = count($frame);\r
+            for($y=0;$y<$width;$y++) {\r
+                for($x=0;$x<$width;$x++) {\r
+                    echo ord($frame[$y][$x]).',';\r
+                }\r
+            }\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function markTime($markerId)\r
+        {\r
+            list($usec, $sec) = explode(" ", microtime());\r
+            $time = ((float)$usec + (float)$sec);\r
+            \r
+            if (!isset($GLOBALS['qr_time_bench']))\r
+                $GLOBALS['qr_time_bench'] = array();\r
+            \r
+            $GLOBALS['qr_time_bench'][$markerId] = $time;\r
+        }\r
+        \r
+        //----------------------------------------------------------------------\r
+        public static function timeBenchmark()\r
+        {\r
+            self::markTime('finish');\r
+        \r
+            $lastTime = 0;\r
+            $startTime = 0;\r
+            $p = 0;\r
+\r
+            echo '<table cellpadding="3" cellspacing="1">\r
+                    <thead><tr style="border-bottom:1px solid silver"><td colspan="2" style="text-align:center">BENCHMARK</td></tr></thead>\r
+                    <tbody>';\r
+\r
+            foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) {\r
+                if ($p > 0) {\r
+                    echo '<tr><th style="text-align:right">till '.$markerId.': </th><td>'.number_format($thisTime-$lastTime, 6).'s</td></tr>';\r
+                } else {\r
+                    $startTime = $thisTime;\r
+                }\r
+                \r
+                $p++;\r
+                $lastTime = $thisTime;\r
+            }\r
+            \r
+            echo '</tbody><tfoot>\r
+                <tr style="border-top:2px solid black"><th style="text-align:right">TOTAL: </th><td>'.number_format($lastTime-$startTime, 6).'s</td></tr>\r
+            </tfoot>\r
+            </table>';\r
+        }\r
+        \r
+    }\r
+    \r
+    //##########################################################################\r
+    \r
+    QRtools::markTime('start');\r
+    
\ No newline at end of file
diff --git a/lib/phpqrcode/tools/merge.bat b/lib/phpqrcode/tools/merge.bat
new file mode 100644 (file)
index 0000000..b60a485
--- /dev/null
@@ -0,0 +1,2 @@
+php ./merge.php\r
+pause
\ No newline at end of file
diff --git a/lib/phpqrcode/tools/merge.php b/lib/phpqrcode/tools/merge.php
new file mode 100644 (file)
index 0000000..19d338b
--- /dev/null
@@ -0,0 +1,70 @@
+<?php\r
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Tool for merging all library files into one, simpler to incorporate.\r
+ * \r
+ * MAKE SURE THAT RESULTING PHPQRCode.php (and its dir) ARE WRITABLE!\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
+    $QR_BASEDIR = dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR;\r
+    $QR_TOOLSDIR = dirname(__FILE__).DIRECTORY_SEPARATOR;\r
+    \r
+    $outputFile = $QR_BASEDIR.'phpqrcode.php';\r
+    \r
+    // Required libs\r
+    \r
+    $fileList = array(\r
+        $QR_BASEDIR.'qrconst.php',\r
+        $QR_TOOLSDIR.'merged_config.php',\r
+        $QR_BASEDIR.'qrtools.php',\r
+        $QR_BASEDIR.'qrspec.php',\r
+        $QR_BASEDIR.'qrimage.php',\r
+        $QR_BASEDIR.'qrinput.php',\r
+        $QR_BASEDIR.'qrbitstream.php',\r
+        $QR_BASEDIR.'qrsplit.php',\r
+        $QR_BASEDIR.'qrrscode.php',\r
+        $QR_BASEDIR.'qrmask.php',\r
+        $QR_BASEDIR.'qrencode.php'\r
+    );\r
+    \r
+    $headerFile = $QR_TOOLSDIR.'merged_header.php';\r
+    $versionFile = $QR_BASEDIR.'VERSION';\r
+    \r
+    $outputCode = '';\r
+    \r
+    foreach($fileList as $fileName) {\r
+        $outputCode .= "\n\n".'//---- '.basename($fileName).' -----------------------------'."\n\n";\r
+        $anotherCode = file_get_contents($fileName);\r
+        $anotherCode = preg_replace ('/^<\?php/', '', $anotherCode);\r
+        $anotherCode = preg_replace ('/\?>\*$/', '', $anotherCode);\r
+        $outputCode .= "\n\n".$anotherCode."\n\n";\r
+    }\r
+    \r
+       $versionDataEx = explode("\n", file_get_contents($versionFile));\r
+       \r
+    $outputContents = file_get_contents($headerFile);\r
+    $outputContents .= "\n\n/*\n * Version: ".trim($versionDataEx[0])."\n * Build: ".trim($versionDataEx[1])."\n */\n\n";\r
+    $outputContents .= $outputCode;\r
+    \r
+    file_put_contents($outputFile, $outputContents);\r
+    \r
+    
\ No newline at end of file
diff --git a/lib/phpqrcode/tools/merge.sh b/lib/phpqrcode/tools/merge.sh
new file mode 100644 (file)
index 0000000..e4c2fbc
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh\r
+php ./merge.php
\ No newline at end of file
diff --git a/lib/phpqrcode/tools/merged_config.php b/lib/phpqrcode/tools/merged_config.php
new file mode 100644 (file)
index 0000000..55ddb45
--- /dev/null
@@ -0,0 +1,17 @@
+<?php\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * Config file, tuned-up for merged verion\r
+ */\r
+     \r
+    define('QR_CACHEABLE', false);       // use cache - more disk reads but less CPU power, masks and format templates are stored there\r
+    define('QR_CACHE_DIR', false);       // used when QR_CACHEABLE === true\r
+    define('QR_LOG_DIR', false);         // default error logs dir   \r
+    \r
+    define('QR_FIND_BEST_MASK', true);                                                          // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code\r
+    define('QR_FIND_FROM_RANDOM', 2);                                                       // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly\r
+    define('QR_DEFAULT_MASK', 2);                                                               // when QR_FIND_BEST_MASK === false\r
+                                                  \r
+    define('QR_PNG_MAXIMUM_SIZE',  1024);                                                       // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images\r
+                                                  
\ No newline at end of file
diff --git a/lib/phpqrcode/tools/merged_header.php b/lib/phpqrcode/tools/merged_header.php
new file mode 100644 (file)
index 0000000..25805e5
--- /dev/null
@@ -0,0 +1,36 @@
+<?php\r
+\r
+/*\r
+ * PHP QR Code encoder\r
+ *\r
+ * This file contains MERGED version of PHP QR Code library.\r
+ * It was auto-generated from full version for your convenience.\r
+ *\r
+ * This merged version was configured to not requre any external files,\r
+ * with disabled cache, error loging and weker but faster mask matching.\r
+ * If you need tune it up please use non-merged version.\r
+ *\r
+ * For full version, documentation, examples of use please visit:\r
+ *\r
+ *    http://phpqrcode.sourceforge.net/\r
+ *    https://sourceforge.net/projects/phpqrcode/\r
+ *\r
+ * PHP QR Code is distributed under LGPL 3\r
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r
+ */\r
\r
\ No newline at end of file
index 9a160f2aa72c92f43e9673fa2459662f616c5429..8ac8611c97087dabf62db80d9c77b25aeee02d66 100644 (file)
@@ -50,6 +50,7 @@ create table ttrss_users (id integer primary key not null auto_increment,
        salt varchar(250) not null default '',
        created datetime default null,
        twitter_oauth longtext default null,
+       otp_enabled boolean not null default false,
        index (theme_id)) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
 
 insert into ttrss_users (login,pwd_hash,access_level) values ('admin',
@@ -268,7 +269,7 @@ create table ttrss_filters2(id integer primary key auto_increment,
        enabled boolean not null default true,
        index(owner_uid),
        foreign key (owner_uid) references ttrss_users(id) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
-       
+
 create table ttrss_filters2_rules(id integer primary key auto_increment,
        filter_id integer not null references ttrss_filters2(id) on delete cascade,
        reg_exp varchar(250) not null,
@@ -305,7 +306,7 @@ create table ttrss_tags (id integer primary key auto_increment,
 
 create table ttrss_version (schema_version int not null) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
 
-insert into ttrss_version values (96);
+insert into ttrss_version values (97);
 
 create table ttrss_enclosures (id integer primary key auto_increment,
        content_url text not null,
index 600714e6e17ca766455ae1e655d97b75c54c801f..377261dfae50f72bc03c5c1279e16a16cd9eab59 100644 (file)
@@ -46,6 +46,7 @@ create table ttrss_users (id serial not null primary key,
        last_digest_sent timestamp default null,
        salt varchar(250) not null default '',
        twitter_oauth text default null,
+       otp_enabled boolean not null default false,
        created timestamp default null);
 
 insert into ttrss_users (login,pwd_hash,access_level) values ('admin',
@@ -229,7 +230,7 @@ create table ttrss_filters2(id serial not null primary key,
        owner_uid integer not null references ttrss_users(id) on delete cascade,
        match_any_rule boolean not null default false,
        enabled boolean not null default true);
-       
+
 create table ttrss_filters2_rules(id serial not null primary key,
        filter_id integer not null references ttrss_filters2(id) on delete cascade,
        reg_exp varchar(250) not null,
@@ -253,7 +254,7 @@ create index ttrss_tags_post_int_id_idx on ttrss_tags(post_int_id);
 
 create table ttrss_version (schema_version int not null);
 
-insert into ttrss_version values (96);
+insert into ttrss_version values (97);
 
 create table ttrss_enclosures (id serial not null primary key,
        content_url text not null,
diff --git a/schema/versions/mysql/97.sql b/schema/versions/mysql/97.sql
new file mode 100644 (file)
index 0000000..c555b86
--- /dev/null
@@ -0,0 +1,10 @@
+begin;
+
+alter table ttrss_users add column otp_enabled boolean;
+update ttrss_users set otp_enabled = false;
+alter table ttrss_users change otp_enabled otp_enabled boolean not null;
+alter table ttrss_users alter column otp_enabled set default false;
+
+update ttrss_version set schema_version = 97;
+
+commit;
diff --git a/schema/versions/pgsql/97.sql b/schema/versions/pgsql/97.sql
new file mode 100644 (file)
index 0000000..f458ee9
--- /dev/null
@@ -0,0 +1,10 @@
+begin;
+
+alter table ttrss_users add column otp_enabled boolean;
+update ttrss_users set otp_enabled = false;
+alter table ttrss_users alter column otp_enabled set not null;
+alter table ttrss_users alter column otp_enabled set default false;
+
+update ttrss_version set schema_version = 97;
+
+commit;